diff --git a/.travis.yml b/.travis.yml index cd984180674a2388f8847e370fdb5dd653a6363f..13271f86c37359f3addb0133d49c787d3c866953 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ -language: cpp -compiler: - - clang +language: python +python: + - "2.7_with_system_site_packages" + - "3.4" + sudo: false addons: apt: @@ -10,16 +12,10 @@ addons: - libpcre3 - libpcre3-dev - gromacs - - swig - doxygen - - clang-3.3 - - llvm-3.3 - python-numpy - python-scipy - - python-sphinx - - python-yaml - - python-pip - - python-virtualenv + env: matrix: @@ -29,11 +25,14 @@ env: before_install: - export CC=clang - export CXX=clang++ - - export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.3 + + - wget https://anaconda.org/anaconda/swig/3.0.2/download/linux-64/swig-3.0.2-0.tar.bz2 + - mkdir $HOME/swig + - tar -xjvf swig-3.0.2-0.tar.bz2 -C $HOME/swig + - export PATH=$HOME/swig/bin:$PATH + - export SWIG_LIB=$HOME/swig/share/swig/3.0.2 script: - - virtualenv --system-site-packages openmm_env - - source openmm_env/bin/activate - cmake -DCMAKE_INSTALL_PREFIX=$HOME/OpenMM -DOPENMM_BUILD_STATIC_LIB=$OPENMM_BUILD_STATIC_LIB . - make -j2 - make -j2 install @@ -41,13 +40,14 @@ script: - # Run the testInstallation script - python -m simtk.testInstallation - # run all of the tests, making sure failures at this stage don't cause travis failures - - ctest -j2 -V || true + - ctest -j2 || true - # get a list of all of the failed tests into this stupid ctest format - - python -c 'fn = "Testing/Temporary/LastTestsFailed.log"; import os; os.path.exists(fn) or exit(0); l = [line.split(":")[0] for line in open(fn)]; triplets = zip(l, l, [","]*len(l)); print "".join(",".join(t) for t in triplets)' > FailedTests.log + - python -c "import os; fn = os.path.join('Testing', 'Temporary', 'LastTestsFailed.log'); os.path.exists(fn) or exit(0); failed = [line.split(':')[0] for line in open(fn)]; print(','.join(x+','+x for x in failed))" > FailedTests.log - # rerun all of the failed tests - - if [ -s FailedTests.log ]; then ctest -V -I FailedTests.log; fi; + - if [ -s Testing/Temporary/LastTestsFailed.log ]; then ctest -I FailedTests.log; fi; - # run the python tests too - - cd python/tests - - pip install nose - - nosetests -vv --processes=-1 --process-timeout=200 + - cd python/tests + - # nosetests -vv --processes=-1 --process-timeout=200 + - # nosetests -vv + - py.test -v * - cd - diff --git a/CMakeLists.txt b/CMakeLists.txt index 98bc4bf317be2e75201c0df1924b9d0ae26ee910..3e920274aab1241f2cfcf11994b9b36629273f30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ #--------------------------------------------------- -# OpenMM +# OpenMM # # Creates OpenMM library. # @@ -22,6 +22,9 @@ IF( NOT PROJECT_NAME ) ENDIF( NOT PROJECT_NAME ) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +if("${CMAKE_VERSION}" VERSION_GREATER "3.0" OR "${CMAKE_VERSION}" VERSION_EQUAL "3.0") + CMAKE_POLICY(SET CMP0042 OLD) +endif() #SET(CMAKE_VERBOSE_MAKEFILE 1) @@ -43,11 +46,11 @@ SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_modules") # (cmake 2.4.7 is OK) if(COMMAND cmake_policy) if(CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 5) - cmake_policy(SET CMP0003 NEW) - cmake_policy(SET CMP0005 NEW) + cmake_policy(SET CMP0003 NEW) + cmake_policy(SET CMP0005 NEW) endif(CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 5) if(CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 6 OR CMAKE_PATCH_VERSION GREATER 2) - cmake_policy(SET CMP0011 NEW) + cmake_policy(SET CMP0011 NEW) endif(CMAKE_MAJOR_VERSION GREATER 2 OR CMAKE_MINOR_VERSION GREATER 6 OR CMAKE_PATCH_VERSION GREATER 2) endif(COMMAND cmake_policy) @@ -70,7 +73,7 @@ ENDIF (ANDROID) # It seems that on linux and mac, everything is trying to be installed in /usr/local/openmm # But if every install target is prefixed with /openmm/, on Windows the install files # end up in C:/Program Files/OpenMM/openmm/ which is ugly. -# Better to set CMAKE_INSTALL_PREFIX to /usr/local/openmm and leave /openmm/ off the +# Better to set CMAKE_INSTALL_PREFIX to /usr/local/openmm and leave /openmm/ off the # install target names. Plus, the user now has the opportunity to install into /usr/local/ # if she so chooses. --cmb IF(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) @@ -79,7 +82,7 @@ ENDIF(${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) # The source is organized into subdirectories, but we handle them all from # this CMakeLists file rather than letting CMake visit them as SUBDIRS. -SET(OPENMM_SOURCE_SUBDIRS . openmmapi olla libraries/jama libraries/quern libraries/lepton libraries/sfmt libraries/lbfgs libraries/hilbert libraries/csha1 platforms/reference serialization libraries/validate libraries/irrxml) +SET(OPENMM_SOURCE_SUBDIRS . openmmapi olla libraries/jama libraries/quern libraries/lepton libraries/sfmt libraries/lbfgs libraries/hilbert libraries/csha1 platforms/reference serialization libraries/validate libraries/irrxml libraries/vecmath) IF(WIN32) SET(OPENMM_SOURCE_SUBDIRS ${OPENMM_SOURCE_SUBDIRS} libraries/pthreads) ELSE(WIN32) @@ -121,6 +124,12 @@ IF (APPLE AND (NOT PNACL)) ELSE (APPLE AND (NOT PNACL)) IF (MSVC OR ANDROID OR PNACL) SET(EXTRA_COMPILE_FLAGS) + IF (MSVC) + # Use warning level 2, not whatever warning level CMake picked. + STRING(REGEX REPLACE "/W[0-4]" "/W2" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + # Explicitly suppress warnings 4305 and 4244. + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4305 /wd4244") + ENDIF (MSVC) ELSE (MSVC OR ANDROID OR PNACL) SET(EXTRA_COMPILE_FLAGS "-msse2") ENDIF (MSVC OR ANDROID OR PNACL) @@ -139,7 +148,7 @@ IF (NOT CMAKE_CXX_FLAGS_RELEASE) SET(CMAKE_CXX_FLAGS_RELEASE "-mfloat-abi=softfp -march=armv7-a -mfpu=neon -funsafe-math-optimizations -O3 -DNDEBUG" CACHE STRING "To use when CMAKE_BUILD_TYPE=Release" FORCE) ELSE (ANDROID) - SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING + SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "To use when CMAKE_BUILD_TYPE=Release" FORCE) ENDIF (ANDROID) ENDIF (NOT CMAKE_CXX_FLAGS_RELEASE) @@ -150,8 +159,8 @@ ENDIF (NOT CMAKE_CXX_FLAGS_RELEASE) # and make it available to the code so it can be built into the binaries. SET(OPENMM_LIBRARY_NAME OpenMM) -SET(OPENMM_MAJOR_VERSION 6) -SET(OPENMM_MINOR_VERSION 3) +SET(OPENMM_MAJOR_VERSION 7) +SET(OPENMM_MINOR_VERSION 0) SET(OPENMM_BUILD_VERSION 0) SET(OPENMM_COPYRIGHT_YEARS "2008-2015") @@ -202,11 +211,11 @@ SET(STATIC_TARGET ${OPENMM_LIBRARY_NAME}_static) ## If no one says otherwise, change the executable path to drop into the same binary ## location as the DLLs so that the test cases will use the just-build DLLs. IF(NOT EXECUTABLE_OUTPUT_PATH) - SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} + SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR} CACHE INTERNAL "Single output directory for building all executables.") ENDIF(NOT EXECUTABLE_OUTPUT_PATH) IF(NOT LIBRARY_OUTPUT_PATH) - SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} + SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR} CACHE INTERNAL "Single output directory for building all libraries.") ENDIF(NOT LIBRARY_OUTPUT_PATH) SET(${PROJECT_NAME}_EXECUTABLE_DIR ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}) @@ -221,7 +230,7 @@ SET(API_INCLUDE_DIRS) # start empty FOREACH(subdir ${OPENMM_SOURCE_SUBDIRS}) # append SET(API_INCLUDE_DIRS ${API_INCLUDE_DIRS} - ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include + ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include/openmm ${CMAKE_CURRENT_SOURCE_DIR}/${subdir}/include/openmm/internal) ENDFOREACH(subdir) @@ -287,6 +296,9 @@ IF (CMAKE_SYSTEM_NAME MATCHES "Linux") SET(EXTRA_LINK_FLAGS "${EXTRA_LINK_FLAGS} -Wl,--no-as-needed -lrt") ENDIF (NOT ANDROID) ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux") +IF (MSVC) + SET(EXTRA_LINK_FLAGS) +ENDIF (MSVC) IF(OPENMM_BUILD_SHARED_LIB) ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) @@ -328,6 +340,7 @@ ELSE(DL_LIBRARY) ENDIF(DL_LIBRARY) IF(BUILD_TESTING) + INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/tests) ADD_SUBDIRECTORY(platforms/reference/tests) ENDIF(BUILD_TESTING) @@ -358,7 +371,7 @@ IF(CUDA_FOUND) SET(OPENMM_BUILD_CUDA_LIB ON CACHE BOOL "Build OpenMMCuda library for Nvidia GPUs") # I wish I was not hardcoding /MD here - # Avoid strange windows link error with cuda free energy + # Avoid strange windows link error with cuda free energy # plugin by specifying /MD to CUDA_NVCC_FLAGS MARK_AS_ADVANCED(CLEAR CUDA_NVCC_FLAGS) IF(MSVC) @@ -374,7 +387,7 @@ IF(CUDA_FOUND) if(CUDA_NVCC_FLAGS) set(new_flags "${CUDA_NVCC_FLAGS};${new_flags}") endif(CUDA_NVCC_FLAGS) - SET(CUDA_NVCC_FLAGS "${new_flags}" + SET(CUDA_NVCC_FLAGS "${new_flags}" CACHE STRING "Semicolon delimit multiple arguments" FORCE) ENDIF(NOT HAS_NVCC_FLAG) ENDIF(MSVC) diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000000000000000000000000000000000000..410fa37172a2084916993ae5a745f57fbcd8c98e --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,47 @@ +os: Windows Server 2012 R2 +shallow_clone: true +install: + +# Setup shell for VS2010, x64, release mode + - > + "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release + +# Set path to python, git-bash tools. + - "set PATH=C:\\Python34-x64;C:\\Python34-x64\\Scripts;%PATH%" + - "set PATH=C:\\Program Files (x86)\\Git\\bin;%PATH%" + - pip install nose + +# Download FFTW3 for PME plugin + - C:\MinGW\msys\1.0\bin\wget -q ftp://ftp.fftw.org/pub/fftw/fftw-3.3.4-dll64.zip + - 7z x fftw-3.3.4-dll64.zip -oC:\fftw > null + - cd C:\fftw + - lib /def:libfftw3f-3.def + - cd %APPVEYOR_BUILD_FOLDER% + - "set PATH=C:\\fftw;%PATH%" + +# Download and install some OpenMM build dependencies (doxygen, swig) + - choco install -y doxygen.portable swig + +# Set CMake options + - ps: $env:CMAKE_FLAGS='-DOPENMM_BUILD_PME_PLUGIN=ON -DFFTW_LIBRARY=C:/fftw/libfftw3f-3.lib -DFFTW_INCLUDES=C:/fftw -DCMAKE_BUILD_TYPE=Release -DOPENMM_BUILD_EXAMPLES=OFF -DCMAKE_CXX_FLAGS_RELEASE="/MD /Od /Ob0 /D NDEBUG"' + - mkdir build + - cd build + - cmake -G "NMake Makefiles" %CMAKE_FLAGS% -LA .. + +# Run the build + - cmake --build . --target install + - cmake --build . --target PythonInstall + +build: false +test_script: + - ctest || exit 0 + - python -c "import os; fn = os.path.join('Testing', 'Temporary', 'LastTestsFailed.log'); os.path.exists(fn) or exit(0); failed = [line.split(':')[0] for line in open(fn)]; print(','.join(x+','+x for x in failed))" > FailedTests.log + - ps: > + If (Test-Path "Testing\\Temporary\\LastTestsFailed.log") { + cat Testing\\Temporary\\LastTestsFailed.log + cat FailedTests.log + ctest -I FailedTests.log + } + - cd python\tests + - nosetests -vv --processes=-1 --process-timeout=200 + - cd %APPVEYOR_BUILD_FOLDER% diff --git a/devtools/forcefield-scripts/processAmberForceField.py b/devtools/forcefield-scripts/processAmberForceField.py index 337032f568b50368c791347018c6ad43829f27f5..ed25ab5f450c66cfaf207b810ed0205bb34877f5 100644 --- a/devtools/forcefield-scripts/processAmberForceField.py +++ b/devtools/forcefield-scripts/processAmberForceField.py @@ -405,8 +405,10 @@ for index, type in enumerate(types): sigma = (params[0]/params[1])**(1.0/6.0) epsilon = 4.184*params[1]*params[1]/(4*params[0]) else: - sigma = 0 + sigma = 1 epsilon = 0 + if sigma == 0 or epsilon == 0: + sigma, epsilon = 1, 0 if q != 0 or epsilon != 0: print """ """ % (index, q, sigma, epsilon) print " " diff --git a/devtools/forcefield-scripts/processTinkerForceField.py b/devtools/forcefield-scripts/processTinkerForceField.py index 1d338c6fe817d094dbbaf75d39f45eae024b07e4..2be507d07e2747499b19190fa4bb024cb9fed576 100644 --- a/devtools/forcefield-scripts/processTinkerForceField.py +++ b/devtools/forcefield-scripts/processTinkerForceField.py @@ -897,7 +897,6 @@ if( isAmoeba ): torsionTorsionUnit = 1.0 outputString = """ """ tinkerXmlFile.write( "%s\n" % (outputString ) ) - conversion = 41.84/radian torsionTorsions = forces['tortors'] for (index, torsionTorsion) in enumerate(torsionTorsions): torInfo = torsionTorsion[0] diff --git a/docs-source/developerguide/conf.py b/docs-source/developerguide/conf.py index 7b1ac648154280605f2e650cbfae74ffc7d60b56..d344bdb3055a933ea0883cca1ef14cd283f86e6b 100644 --- a/docs-source/developerguide/conf.py +++ b/docs-source/developerguide/conf.py @@ -142,7 +142,7 @@ html_static_path = ['_static'] #html_domain_indices = True # If false, no index is generated. -#html_use_index = True +html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False diff --git a/docs-source/developerguide/developer.rst b/docs-source/developerguide/developer.rst index 292210057bd9e9d1ddbe3e73a251fd6e89978251..7d3e8171a0410743dfca51f515546c097487e840 100644 --- a/docs-source/developerguide/developer.rst +++ b/docs-source/developerguide/developer.rst @@ -66,7 +66,7 @@ information related to a particular simulation, and define methods for performing calculations. Note that, whereas a Force is logically “part of” a System, a ForceImpl is -logically “part of” a Context. (See :numref:`Figure,API Relationships`\ .) If you create many Contexts +logically “part of” a Context. (See :autonumref:`Figure,API Relationships`\ .) If you create many Contexts for simulating the same System, there is still only one System and only one copy of each Force in it. But there will be separate ForceImpls for each Context, and those ForceImpls store information related to their particular Contexts. diff --git a/docs-source/developerguide/index.rst b/docs-source/developerguide/index.rst index 72386306bc7986ea53a529a42bd416ba92e4fba8..3359100f124af6bb0a35d566c5d5eb9f444efd2d 100644 --- a/docs-source/developerguide/index.rst +++ b/docs-source/developerguide/index.rst @@ -2,34 +2,9 @@ OpenMM Developer Guide ###################### -Portions copyright (c) 2011-2014 Stanford University and the Authors -Contributors: Peter Eastman +.. only:: latex -Permission is hereby granted, free of charge, to any person obtaining a copy of -this document (the "Document"), to deal in the Document without restriction, -including without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Document, and to permit -persons to whom the Document is furnished to do so, subject to the following -conditions: - -This copyright and permission notice shall be included in all copies or -substantial portions of the Document. - -THE DOCUMENT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS, -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE DOCUMENT OR THE USE OR OTHER DEALINGS IN THE -DOCUMENT. - -Acknowledgments - -OpenMM software and all related activities, such as this manual, are funded by -the Simbios National Center for Biomedical Computing through the National -Institutes of Health Roadmap for Medical Research, Grant U54 GM072970. -Information on the National Centers can be found at -http://nihroadmap.nih.gov/bioinformatics. + .. include:: license.rst .. toctree:: :maxdepth: 3 @@ -37,3 +12,6 @@ http://nihroadmap.nih.gov/bioinformatics. developer +.. only:: html + + .. include:: license.rst diff --git a/docs-source/developerguide/license.rst b/docs-source/developerguide/license.rst new file mode 100644 index 0000000000000000000000000000000000000000..9be2326e0b23946a134ada9814cf71d86ae39603 --- /dev/null +++ b/docs-source/developerguide/license.rst @@ -0,0 +1,29 @@ +Portions copyright (c) 2011-2015 Stanford University and the Authors + +Contributors: Peter Eastman + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this document (the "Document"), to deal in the Document without restriction, +including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Document, and to permit +persons to whom the Document is furnished to do so, subject to the following +conditions: + +This copyright and permission notice shall be included in all copies or +substantial portions of the Document. + +THE DOCUMENT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS, +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE DOCUMENT OR THE USE OR OTHER DEALINGS IN THE +DOCUMENT. + +Acknowledgments + +OpenMM software and all related activities, such as this manual, are funded by +the Simbios National Center for Biomedical Computing through the National +Institutes of Health Roadmap for Medical Research, Grant U54 GM072970. +Information on the National Centers can be found at +http://nihroadmap.nih.gov/bioinformatics. diff --git a/docs-source/usersguide/application.rst b/docs-source/usersguide/application.rst index e556f28936983123733d704f8a3324d0250a69ad..0e869c5ea4ac0351f09d5f104d672ea85ae61d7c 100644 --- a/docs-source/usersguide/application.rst +++ b/docs-source/usersguide/application.rst @@ -675,11 +675,17 @@ Platforms When creating a :class:`Simulation`, you can optionally tell it what :class:`Platform` to use. OpenMM includes four platforms: :class:`Reference`, :class:`CPU`, :class:`CUDA`, and :class:`OpenCL`. For a -description of the differences between them, see Section :ref:`platforms`. If you do not -specify a :class:`Platform`, it will select one automatically. Usually its choice will -be reasonable, but you may want to change it. +description of the differences between them, see Section :ref:`platforms`. There are three ways in which +the :class:`Platform` can be chosen: -The following lines specify to use the :class:`CUDA` platform: +1. By default, OpenMM will try to select the fastest available :class:`Platform`. Usually its choice will +be reasonable, but sometimes you may want to change it. + +2. Alternatively, you can set the :envvar:`OPENMM_DEFAULT_PLATFORM` environment variable to the name +of the :class:`Platform` to use. This overrides the default logic. + +3. Finally, you can explicitly specify a :class:`Platform` object in your script when you create the +:class:`Simulation`. The following lines specify to use the :class:`CUDA` platform: :: platform = Platform.getPlatformByName('CUDA') @@ -1837,7 +1843,7 @@ The :code:`` tag contains the following children: * Zero or more tags defining specific forces -The order of these tags does not matter. They are described in details below. +The order of these tags does not matter. They are described in detail below. =========== @@ -1921,9 +1927,9 @@ as in the following example: Each :code:`` tag indicates an atom in the residue that should be represented with a virtual site. The :code:`type` attribute may equal -:code:`"average2"`\ , :code:`"average3"`\ , or :code:`"outOfPlane"`\ , which -correspond to the TwoParticleAverageSite, ThreeParticleAverageSite, and -OutOfPlaneSite classes respectively. The :code:`index` attribute gives the +:code:`"average2"`\ , :code:`"average3"`\ , :code:`"outOfPlane"`\ , or +:code:`"localCoords"`\ , which correspond to the TwoParticleAverageSite, ThreeParticleAverageSite, +OutOfPlaneSite, and LocalCoordinatesSite classes respectively. The :code:`index` attribute gives the index (starting from 0) of the atom to represent with a virtual site. The atoms it is calculated based on are specified by :code:`atom1`\ , :code:`atom2`\ , and (for virtual site classes that involve three atoms) :code:`atom3`\ . The @@ -1932,7 +1938,10 @@ parameters for calculating the site position. For a TwoParticleAverageSite, they are :code:`weight1` and :code:`weight2`\ . For a ThreeParticleAverageSite, they are :code:`weight1`\ , :code:`weight2`\ , and \ :code:`weight3`\ . For an OutOfPlaneSite, they are :code:`weight12`\ , -:code:`weight13`\ , and :code:`weightCross`\ . +:code:`weight13`\ , and :code:`weightCross`\ . For a LocalCoordinatesSite, they +are :code:`wo1`\ , :code:`wo2`\ , :code:`wo3`\ , :code:`wx1`\ , :code:`wx2`\ , +:code:`wx3`\ , :code:`wy1`\ , :code:`wy2`\ , :code:`wy3`\ , :code:`p1`\ , +:code:`p2`\ , and :code:`p3`\ . @@ -2490,8 +2499,9 @@ The following operators are supported: + (add), - (subtract), * (multiply), / The following standard functions are supported: sqrt, exp, log, sin, cos, sec, csc, tan, cot, asin, acos, atan, sinh, cosh, tanh, erf, erfc, min, max, abs, -step. step(x) = 0 if x < 0, 1 otherwise. Some custom forces allow additional -functions to be defined from tabulated values. +floor, ceil, step, delta, select. step(x) = 0 if x < 0, 1 otherwise. +delta(x) = 1 if x is 0, 0 otherwise. select(x,y,z) = z if x = 0, y otherwise. +Some custom forces allow additional functions to be defined from tabulated values. Numbers may be given in either decimal or exponential form. All of the following are valid numbers: 5, -3.1, 1e6, and 3.12e-2. @@ -2515,8 +2525,8 @@ values. All uses of a value must appear *before* that value’s definition. .. _tabulated-functions: -TabulatedFunctions -================== +Tabulated Functions +=================== Some forces, such as CustomNonbondedForce and CustomGBForce, allow you to define tabulated functions. To define a function, include a :code:`` tag inside the @@ -2563,6 +2573,47 @@ successive values separated by white space. See the API documentation for more details. +Residue Template Parameters +=========================== + +In forces that use an :code:`` tag to define parameters for atom types or +classes, there is an alternate mechanism you can also use: defining those +parameter values in the residue template. This is useful for situations that +come up in certain force fields. For example, :code:`NonbondedForce` and +:code:`GBSAOBCForce` each have a :code:`charge` attribute. If you only have to +define the charge of each atom type once, that is more convenient and avoids +potential bugs. Also, many force fields have a different charge for each atom +type, but Lennard-Jones parameters that are the same for all types in a class. +It would be preferable not to have to repeat those parameter values many times +over. + +When writing a residue template, you can add arbitrary additional attributes +to each :code:`` tag. For example, you might include a :code:`charge` +attribute as follows: + +.. code-block:: xml + + + +When writing the tag for a force, you can then include a +:code:`` tag inside it. This indicates that a +specified attribute should be taken from the residue template. Finally, you +simply omit that attribute in the force's own :code:`` tags. For example: + +.. code-block:: xml + + + + + ... + + +Notice that the :code:`charge` attribute is missing, and that the parameters +are specified by class, not by type. This means that sigma and epsilon only +need to be specified once for each class. The atom charges, which are different +for each type, are taken from the residue template instead. + + Using Multiple Files ******************** diff --git a/docs-source/usersguide/conf.py b/docs-source/usersguide/conf.py index bcc90f4e7af0adc66b59a7171bb605ad1ef358eb..1591d1f765a5fd8b35f6de6ff5d3e146b90714a6 100644 --- a/docs-source/usersguide/conf.py +++ b/docs-source/usersguide/conf.py @@ -142,7 +142,7 @@ html_static_path = ['_static'] #html_domain_indices = True # If false, no index is generated. -#html_use_index = True +html_use_index = False # If true, the index is split into individual pages for each letter. #html_split_index = False diff --git a/docs-source/usersguide/index.rst b/docs-source/usersguide/index.rst index 6beb516b7ca0b4e0870902629e783716ff445a79..a086050ac8107408f0ff29081eeb7f4d10e1e7e2 100644 --- a/docs-source/usersguide/index.rst +++ b/docs-source/usersguide/index.rst @@ -4,31 +4,9 @@ OpenMM Users Manual and Theory Guide #################################### +.. only:: latex -Portions copyright (c) 2008-2014 Stanford University and the Authors - -Contributors: Kyle Beauchamp, Christopher Bruns, John Chodera, Peter Eastman, Mark -Friedrichs, Joy P. Ku, Tom Markland, Vijay Pande, Randy Radmer, Michael Sherman, -Jason Swails, Lee-Ping Wang - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this document (the "Document"), to deal in the Document without restriction, -including without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Document, and to permit -persons to whom the Document is furnished to do so, subject to the following -conditions: - -This copyright and permission notice shall be included in all copies or -substantial portions of the Document. - -THE DOCUMENT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS, -CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE DOCUMENT OR THE USE OR OTHER DEALINGS IN THE -DOCUMENT. - + .. include:: license.rst .. toctree:: :numbered: @@ -40,3 +18,6 @@ DOCUMENT. theory zbibliography +.. only:: html + + .. include:: license.rst diff --git a/docs-source/usersguide/license.rst b/docs-source/usersguide/license.rst new file mode 100644 index 0000000000000000000000000000000000000000..655f17371bdbb32eb2e6ce0a868e9e4f5f5210c9 --- /dev/null +++ b/docs-source/usersguide/license.rst @@ -0,0 +1,23 @@ +Portions copyright (c) 2008-2015 Stanford University and the Authors + +Contributors: Kyle Beauchamp, Christopher Bruns, John Chodera, Peter Eastman, Mark +Friedrichs, Joy P. Ku, Tom Markland, Vijay Pande, Randy Radmer, Michael Sherman, +Jason Swails, Lee-Ping Wang + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this document (the "Document"), to deal in the Document without restriction, +including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Document, and to permit +persons to whom the Document is furnished to do so, subject to the following +conditions: + +This copyright and permission notice shall be included in all copies or +substantial portions of the Document. + +THE DOCUMENT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS, +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE DOCUMENT OR THE USE OR OTHER DEALINGS IN THE +DOCUMENT. diff --git a/docs-source/usersguide/theory.rst b/docs-source/usersguide/theory.rst index 23ecf145ba035e9834ee60a22278f65501ef4f73..83743effa99de6012ae952bb7cbe53d59d330618 100644 --- a/docs-source/usersguide/theory.rst +++ b/docs-source/usersguide/theory.rst @@ -861,6 +861,28 @@ Parameters may be specified in two ways: * Per-bond parameters are defined by specifying a value for each bond. +CustomCentroidBondForce +*********************** + +CustomCentroidBondForce is very similar to CustomCompoundBondForce, but instead +of creating bonds between individual particles, the bonds are between the +centers of groups of particles. This is useful for purposes such as restraining +the distance between two molecules or pinning the center of mass of a single +molecule. + +The first step in computing this force is to calculate the center position of +each defined group of particles. This is calculated as a weighted average of +the positions of all the particles in the group, with the weights being user +defined. The computation then proceeds exactly as with CustomCompoundBondForce, +but the energy of each "bond" is now calculated based on the centers of a set +of groups, rather than on the positions of individual particles. + +This class supports all the same function types and features as +CustomCompoundBondForce. In fact, any interaction that could be implemented +with CustomCompoundBondForce can also be implemented with this class, simply by +defining each group to contain only a single atom. + + CustomManyParticleForce *********************** diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0bdef126a59a877049a034d79996b078f200fae6..55555e7a4e8a37467208372f06e964960c7aa7b0 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -28,7 +28,7 @@ FOREACH(EX_ROOT ${CPP_EXAMPLES}) SET_TARGET_PROPERTIES(${EX_ROOT} PROPERTIES PROJECT_LABEL "Example - ${EX_ROOT}" - LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" + LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") TARGET_LINK_LIBRARIES(${EX_ROOT} ${SHARED_TARGET}) ENDIF (OPENMM_BUILD_SHARED_LIB) @@ -40,7 +40,7 @@ FOREACH(EX_ROOT ${CPP_EXAMPLES}) SET_TARGET_PROPERTIES(${EX_STATIC} PROPERTIES PROJECT_LABEL "Example - ${EX_STATIC}" - LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" + LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_USE_STATIC_LIBRARIES") TARGET_LINK_LIBRARIES(${EX_STATIC} ${STATIC_TARGET}) ENDIF (OPENMM_BUILD_STATIC_LIB) @@ -62,7 +62,7 @@ IF(OPENMM_BUILD_C_AND_FORTRAN_WRAPPERS) SET_TARGET_PROPERTIES(${EX_ROOT} PROPERTIES PROJECT_LABEL "Example C - ${EX_ROOT}" - LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" + LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") TARGET_LINK_LIBRARIES(${EX_ROOT} ${SHARED_TARGET}) ADD_DEPENDENCIES(${EX_ROOT} ApiWrappers) @@ -77,7 +77,7 @@ IF(OPENMM_BUILD_C_AND_FORTRAN_WRAPPERS) SET_TARGET_PROPERTIES(${EX_STATIC} PROPERTIES PROJECT_LABEL "Example C - ${EX_STATIC}" - LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" + LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_USE_STATIC_LIBRARIES") TARGET_LINK_LIBRARIES(${EX_STATIC} ${STATIC_TARGET}) ADD_DEPENDENCIES(${EX_STATIC} ApiWrappers) diff --git a/examples/benchmark.py b/examples/benchmark.py index 629162509d864de7b1afab84fb16b83e8d4a9a5b..2b286db83d5b4b0f8580a71ffcd0d33f33417285 100644 --- a/examples/benchmark.py +++ b/examples/benchmark.py @@ -52,7 +52,11 @@ def runOneTest(testName, options): cutoff = 2.0*unit.nanometers vdwCutoff = 1.2*unit.nanometers system = ff.createSystem(pdb.topology, nonbondedMethod=app.NoCutoff, constraints=constraints, mutualInducedTargetEpsilon=epsilon, polarization=polarization) - dt = 0.001*unit.picoseconds + for f in system.getForces(): + if isinstance(f, mm.AmoebaMultipoleForce) or isinstance(f, mm.AmoebaVdwForce) or isinstance(f, mm.AmoebaGeneralizedKirkwoodForce) or isinstance(f, mm.AmoebaWcaDispersionForce): + f.setForceGroup(1) + dt = 0.002*unit.picoseconds + integ = mm.MTSIntegrator(dt, [(0,2), (1,1)]) else: if explicit: ff = app.ForceField('amber99sb.xml', 'tip3p.xml') @@ -77,6 +81,7 @@ def runOneTest(testName, options): constraints = app.HBonds hydrogenMass = None system = ff.createSystem(pdb.topology, nonbondedMethod=method, nonbondedCutoff=cutoff, constraints=constraints, hydrogenMass=hydrogenMass) + integ = mm.LangevinIntegrator(300*unit.kelvin, 91*(1/unit.picoseconds), dt) print('Step Size: %g fs' % dt.value_in_unit(unit.femtoseconds)) properties = {} initialSteps = 5 @@ -95,7 +100,6 @@ def runOneTest(testName, options): # Run the simulation. - integ = mm.LangevinIntegrator(300*unit.kelvin, 91*(1/unit.picoseconds), dt) integ.setConstraintTolerance(1e-5) if len(properties) > 0: context = mm.Context(system, integ, platform, properties) diff --git a/examples/simulateGromacs.py b/examples/simulateGromacs.py index e0513a0436f152418f24595a844e6cb001217c83..5248d7e8f0828c945311aed518667ba8299afbdb 100644 --- a/examples/simulateGromacs.py +++ b/examples/simulateGromacs.py @@ -4,7 +4,7 @@ from simtk.unit import * from sys import stdout gro = GromacsGroFile('input.gro') -top = GromacsTopFile('input.top', periodicBoxVectors=gro.getPeriodicBoxVectors(), includeDir='/usr/local/gromacs/share/gromacs/top') +top = GromacsTopFile('input.top', periodicBoxVectors=gro.getPeriodicBoxVectors()) system = top.createSystem(nonbondedMethod=PME, nonbondedCutoff=1*nanometer, constraints=HBonds) integrator = LangevinIntegrator(300*kelvin, 1/picosecond, 0.002*picoseconds) simulation = Simulation(top.topology, system, integrator) diff --git a/libraries/sfmt/src/SFMT.cpp b/libraries/sfmt/src/SFMT.cpp index 13d2e0db25eedf77fef596b4c41a23201754f0e8..07c26b0c0e3eae47623d63d04dd3034d1170e951 100644 --- a/libraries/sfmt/src/SFMT.cpp +++ b/libraries/sfmt/src/SFMT.cpp @@ -124,11 +124,13 @@ public: }; void SFMT::createCheckpoint(std::ostream& stream) { + stream.write((char*) &data->baseData, sizeof(data->baseData)); stream.write((char*) &data->sfmt, sizeof(data->sfmt)); stream.write((char*) &data->idx, sizeof(data->idx)); } void SFMT::loadCheckpoint(std::istream& stream) { + stream.read((char*) &data->baseData, sizeof(data->baseData)); stream.read((char*) &data->sfmt, sizeof(data->sfmt)); stream.read((char*) &data->idx, sizeof(data->idx)); } diff --git a/libraries/vecmath/include/neon_mathfun.h b/libraries/vecmath/include/neon_mathfun.h new file mode 100644 index 0000000000000000000000000000000000000000..2cffed9398d201ea712944c3134314378a7529b5 --- /dev/null +++ b/libraries/vecmath/include/neon_mathfun.h @@ -0,0 +1,302 @@ +/* NEON implementation of sin, cos, exp and log + + Inspired by Intel Approximate Math library, and based on the + corresponding algorithms of the cephes math library +*/ + +/* Copyright (C) 2011 Julien Pommier + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + (this is the zlib license) +*/ + +#include +#include "openmm/internal/windowsExport.h" + +typedef float32x4_t v4sf; // vector of 4 float +typedef uint32x4_t v4su; // vector of 4 uint32 +typedef int32x4_t v4si; // vector of 4 uint32 + +#define c_inv_mant_mask ~0x7f800000u +#define c_cephes_SQRTHF 0.707106781186547524 +#define c_cephes_log_p0 7.0376836292E-2 +#define c_cephes_log_p1 - 1.1514610310E-1 +#define c_cephes_log_p2 1.1676998740E-1 +#define c_cephes_log_p3 - 1.2420140846E-1 +#define c_cephes_log_p4 + 1.4249322787E-1 +#define c_cephes_log_p5 - 1.6668057665E-1 +#define c_cephes_log_p6 + 2.0000714765E-1 +#define c_cephes_log_p7 - 2.4999993993E-1 +#define c_cephes_log_p8 + 3.3333331174E-1 +#define c_cephes_log_q1 -2.12194440e-4 +#define c_cephes_log_q2 0.693359375 + +/* natural logarithm computed for 4 simultaneous float + return NaN for x <= 0 +*/ +OPENMM_EXPORT v4sf log_ps(v4sf x) { + v4sf one = vdupq_n_f32(1); + + x = vmaxq_f32(x, vdupq_n_f32(0)); /* force flush to zero on denormal values */ + v4su invalid_mask = vcleq_f32(x, vdupq_n_f32(0)); + + v4si ux = vreinterpretq_s32_f32(x); + + v4si emm0 = vshrq_n_s32(ux, 23); + + /* keep only the fractional part */ + ux = vandq_s32(ux, vdupq_n_s32(c_inv_mant_mask)); + ux = vorrq_s32(ux, vreinterpretq_s32_f32(vdupq_n_f32(0.5f))); + x = vreinterpretq_f32_s32(ux); + + emm0 = vsubq_s32(emm0, vdupq_n_s32(0x7f)); + v4sf e = vcvtq_f32_s32(emm0); + + e = vaddq_f32(e, one); + + /* part2: + if( x < SQRTHF ) { + e -= 1; + x = x + x - 1.0; + } else { x = x - 1.0; } + */ + v4su mask = vcltq_f32(x, vdupq_n_f32(c_cephes_SQRTHF)); + v4sf tmp = vreinterpretq_f32_u32(vandq_u32(vreinterpretq_u32_f32(x), mask)); + x = vsubq_f32(x, one); + e = vsubq_f32(e, vreinterpretq_f32_u32(vandq_u32(vreinterpretq_u32_f32(one), mask))); + x = vaddq_f32(x, tmp); + + v4sf z = vmulq_f32(x,x); + + v4sf y = vdupq_n_f32(c_cephes_log_p0); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p1)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p2)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p3)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p4)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p5)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p6)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p7)); + y = vmulq_f32(y, x); + y = vaddq_f32(y, vdupq_n_f32(c_cephes_log_p8)); + y = vmulq_f32(y, x); + + y = vmulq_f32(y, z); + + + tmp = vmulq_f32(e, vdupq_n_f32(c_cephes_log_q1)); + y = vaddq_f32(y, tmp); + + + tmp = vmulq_f32(z, vdupq_n_f32(0.5f)); + y = vsubq_f32(y, tmp); + + tmp = vmulq_f32(e, vdupq_n_f32(c_cephes_log_q2)); + x = vaddq_f32(x, y); + x = vaddq_f32(x, tmp); + x = vreinterpretq_f32_u32(vorrq_u32(vreinterpretq_u32_f32(x), invalid_mask)); // negative arg will be NAN + return x; +} + +#define c_exp_hi 88.3762626647949f +#define c_exp_lo -88.3762626647949f + +#define c_cephes_LOG2EF 1.44269504088896341 +#define c_cephes_exp_C1 0.693359375 +#define c_cephes_exp_C2 -2.12194440e-4 + +#define c_cephes_exp_p0 1.9875691500E-4 +#define c_cephes_exp_p1 1.3981999507E-3 +#define c_cephes_exp_p2 8.3334519073E-3 +#define c_cephes_exp_p3 4.1665795894E-2 +#define c_cephes_exp_p4 1.6666665459E-1 +#define c_cephes_exp_p5 5.0000001201E-1 + +/* exp() computed for 4 float at once */ +OPENMM_EXPORT v4sf exp_ps(v4sf x) { + v4sf tmp, fx; + + v4sf one = vdupq_n_f32(1); + x = vminq_f32(x, vdupq_n_f32(c_exp_hi)); + x = vmaxq_f32(x, vdupq_n_f32(c_exp_lo)); + + /* express exp(x) as exp(g + n*log(2)) */ + fx = vmlaq_f32(vdupq_n_f32(0.5f), x, vdupq_n_f32(c_cephes_LOG2EF)); + + /* perform a floorf */ + tmp = vcvtq_f32_s32(vcvtq_s32_f32(fx)); + + /* if greater, substract 1 */ + v4su mask = vcgtq_f32(tmp, fx); + mask = vandq_u32(mask, vreinterpretq_u32_f32(one)); + + + fx = vsubq_f32(tmp, vreinterpretq_f32_u32(mask)); + + tmp = vmulq_f32(fx, vdupq_n_f32(c_cephes_exp_C1)); + v4sf z = vmulq_f32(fx, vdupq_n_f32(c_cephes_exp_C2)); + x = vsubq_f32(x, tmp); + x = vsubq_f32(x, z); + + static const float cephes_exp_p[6] = { c_cephes_exp_p0, c_cephes_exp_p1, c_cephes_exp_p2, c_cephes_exp_p3, c_cephes_exp_p4, c_cephes_exp_p5 }; + v4sf y = vld1q_dup_f32(cephes_exp_p+0); + v4sf c1 = vld1q_dup_f32(cephes_exp_p+1); + v4sf c2 = vld1q_dup_f32(cephes_exp_p+2); + v4sf c3 = vld1q_dup_f32(cephes_exp_p+3); + v4sf c4 = vld1q_dup_f32(cephes_exp_p+4); + v4sf c5 = vld1q_dup_f32(cephes_exp_p+5); + + y = vmulq_f32(y, x); + z = vmulq_f32(x,x); + y = vaddq_f32(y, c1); + y = vmulq_f32(y, x); + y = vaddq_f32(y, c2); + y = vmulq_f32(y, x); + y = vaddq_f32(y, c3); + y = vmulq_f32(y, x); + y = vaddq_f32(y, c4); + y = vmulq_f32(y, x); + y = vaddq_f32(y, c5); + + y = vmulq_f32(y, z); + y = vaddq_f32(y, x); + y = vaddq_f32(y, one); + + /* build 2^n */ + int32x4_t mm; + mm = vcvtq_s32_f32(fx); + mm = vaddq_s32(mm, vdupq_n_s32(0x7f)); + mm = vshlq_n_s32(mm, 23); + v4sf pow2n = vreinterpretq_f32_s32(mm); + + y = vmulq_f32(y, pow2n); + return y; +} + +#define c_minus_cephes_DP1 -0.78515625 +#define c_minus_cephes_DP2 -2.4187564849853515625e-4 +#define c_minus_cephes_DP3 -3.77489497744594108e-8 +#define c_sincof_p0 -1.9515295891E-4 +#define c_sincof_p1 8.3321608736E-3 +#define c_sincof_p2 -1.6666654611E-1 +#define c_coscof_p0 2.443315711809948E-005 +#define c_coscof_p1 -1.388731625493765E-003 +#define c_coscof_p2 4.166664568298827E-002 +#define c_cephes_FOPI 1.27323954473516 // 4 / M_PI + +/* evaluation of 4 sines & cosines at once. + + The code is the exact rewriting of the cephes sinf function. + Precision is excellent as long as x < 8192 (I did not bother to + take into account the special handling they have for greater values + -- it does not return garbage for arguments over 8192, though, but + the extra precision is missing). + + Note that it is such that sinf((float)M_PI) = 8.74e-8, which is the + surprising but correct result. + + Note also that when you compute sin(x), cos(x) is available at + almost no extra price so both sin_ps and cos_ps make use of + sincos_ps.. + */ +OPENMM_EXPORT void sincos_ps(v4sf x, v4sf *ysin, v4sf *ycos) { // any x + v4sf xmm1, xmm2, xmm3, y; + + v4su emm2; + + v4su sign_mask_sin, sign_mask_cos; + sign_mask_sin = vcltq_f32(x, vdupq_n_f32(0)); + x = vabsq_f32(x); + + /* scale by 4/Pi */ + y = vmulq_f32(x, vdupq_n_f32(c_cephes_FOPI)); + + /* store the integer part of y in mm0 */ + emm2 = vcvtq_u32_f32(y); + /* j=(j+1) & (~1) (see the cephes sources) */ + emm2 = vaddq_u32(emm2, vdupq_n_u32(1)); + emm2 = vandq_u32(emm2, vdupq_n_u32(~1)); + y = vcvtq_f32_u32(emm2); + + /* get the polynom selection mask + there is one polynom for 0 <= x <= Pi/4 + and another one for Pi/4 +#include "openmm/internal/windowsExport.h" + +/* yes I know, the top of this file is quite ugly */ + +#ifdef _MSC_VER /* visual c++ */ +# define ALIGN16_BEG __declspec(align(16)) +# define ALIGN16_END +#else /* gcc or icc */ +# define ALIGN16_BEG +# define ALIGN16_END __attribute__((aligned(16))) +#endif + +/* __m128 is ugly to write */ +typedef __m128 v4sf; // vector of 4 float (sse1) + +#ifdef USE_SSE2 +# include +typedef __m128i v4si; // vector of 4 int (sse2) +#else +typedef __m64 v2si; // vector of 2 int (mmx) +#endif + +/* declare some SSE constants -- why can't I figure a better way to do that? */ +#define _PS_CONST(Name, Val) \ + static const ALIGN16_BEG float _ps_##Name[4] ALIGN16_END = { Val, Val, Val, Val } +#define _PI32_CONST(Name, Val) \ + static const ALIGN16_BEG int _pi32_##Name[4] ALIGN16_END = { Val, Val, Val, Val } +#define _PS_CONST_TYPE(Name, Type, Val) \ + static const ALIGN16_BEG Type _ps_##Name[4] ALIGN16_END = { Val, Val, Val, Val } + +_PS_CONST(1 , 1.0f); +_PS_CONST(0p5, 0.5f); +/* the smallest non denormalized float number */ +_PS_CONST_TYPE(min_norm_pos, int, 0x00800000); +_PS_CONST_TYPE(mant_mask, int, 0x7f800000); +_PS_CONST_TYPE(inv_mant_mask, int, ~0x7f800000); + +_PS_CONST_TYPE(sign_mask, int, (int)0x80000000); +_PS_CONST_TYPE(inv_sign_mask, int, ~0x80000000); + +_PI32_CONST(1, 1); +_PI32_CONST(inv1, ~1); +_PI32_CONST(2, 2); +_PI32_CONST(4, 4); +_PI32_CONST(0x7f, 0x7f); + +_PS_CONST(cephes_SQRTHF, 0.707106781186547524); +_PS_CONST(cephes_log_p0, 7.0376836292E-2); +_PS_CONST(cephes_log_p1, - 1.1514610310E-1); +_PS_CONST(cephes_log_p2, 1.1676998740E-1); +_PS_CONST(cephes_log_p3, - 1.2420140846E-1); +_PS_CONST(cephes_log_p4, + 1.4249322787E-1); +_PS_CONST(cephes_log_p5, - 1.6668057665E-1); +_PS_CONST(cephes_log_p6, + 2.0000714765E-1); +_PS_CONST(cephes_log_p7, - 2.4999993993E-1); +_PS_CONST(cephes_log_p8, + 3.3333331174E-1); +_PS_CONST(cephes_log_q1, -2.12194440e-4); +_PS_CONST(cephes_log_q2, 0.693359375); + +#ifndef USE_SSE2 +typedef union xmm_mm_union { + __m128 xmm; + __m64 mm[2]; +} xmm_mm_union; + +#define COPY_XMM_TO_MM(xmm_, mm0_, mm1_) { \ + xmm_mm_union u; u.xmm = xmm_; \ + mm0_ = u.mm[0]; \ + mm1_ = u.mm[1]; \ +} + +#define COPY_MM_TO_XMM(mm0_, mm1_, xmm_) { \ + xmm_mm_union u; u.mm[0]=mm0_; u.mm[1]=mm1_; xmm_ = u.xmm; \ + } + +#endif // USE_SSE2 + +/* natural logarithm computed for 4 simultaneous float + return NaN for x <= 0 +*/ +OPENMM_EXPORT v4sf log_ps(v4sf x) { +#ifdef USE_SSE2 + v4si emm0; +#else + v2si mm0, mm1; +#endif + v4sf one = *(v4sf*)_ps_1; + + v4sf invalid_mask = _mm_cmple_ps(x, _mm_setzero_ps()); + + x = _mm_max_ps(x, *(v4sf*)_ps_min_norm_pos); /* cut off denormalized stuff */ + +#ifndef USE_SSE2 + /* part 1: x = frexpf(x, &e); */ + COPY_XMM_TO_MM(x, mm0, mm1); + mm0 = _mm_srli_pi32(mm0, 23); + mm1 = _mm_srli_pi32(mm1, 23); +#else + emm0 = _mm_srli_epi32(_mm_castps_si128(x), 23); +#endif + /* keep only the fractional part */ + x = _mm_and_ps(x, *(v4sf*)_ps_inv_mant_mask); + x = _mm_or_ps(x, *(v4sf*)_ps_0p5); + +#ifndef USE_SSE2 + /* now e=mm0:mm1 contain the really base-2 exponent */ + mm0 = _mm_sub_pi32(mm0, *(v2si*)_pi32_0x7f); + mm1 = _mm_sub_pi32(mm1, *(v2si*)_pi32_0x7f); + v4sf e = _mm_cvtpi32x2_ps(mm0, mm1); + _mm_empty(); /* bye bye mmx */ +#else + emm0 = _mm_sub_epi32(emm0, *(v4si*)_pi32_0x7f); + v4sf e = _mm_cvtepi32_ps(emm0); +#endif + + e = _mm_add_ps(e, one); + + /* part2: + if( x < SQRTHF ) { + e -= 1; + x = x + x - 1.0; + } else { x = x - 1.0; } + */ + v4sf mask = _mm_cmplt_ps(x, *(v4sf*)_ps_cephes_SQRTHF); + v4sf tmp = _mm_and_ps(x, mask); + x = _mm_sub_ps(x, one); + e = _mm_sub_ps(e, _mm_and_ps(one, mask)); + x = _mm_add_ps(x, tmp); + + + v4sf z = _mm_mul_ps(x,x); + + v4sf y = *(v4sf*)_ps_cephes_log_p0; + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p1); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p2); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p3); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p4); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p5); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p6); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p7); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_log_p8); + y = _mm_mul_ps(y, x); + + y = _mm_mul_ps(y, z); + + + tmp = _mm_mul_ps(e, *(v4sf*)_ps_cephes_log_q1); + y = _mm_add_ps(y, tmp); + + + tmp = _mm_mul_ps(z, *(v4sf*)_ps_0p5); + y = _mm_sub_ps(y, tmp); + + tmp = _mm_mul_ps(e, *(v4sf*)_ps_cephes_log_q2); + x = _mm_add_ps(x, y); + x = _mm_add_ps(x, tmp); + x = _mm_or_ps(x, invalid_mask); // negative arg will be NAN + return x; +} + +_PS_CONST(exp_hi, 88.3762626647949f); +_PS_CONST(exp_lo, -88.3762626647949f); + +_PS_CONST(cephes_LOG2EF, 1.44269504088896341); +_PS_CONST(cephes_exp_C1, 0.693359375); +_PS_CONST(cephes_exp_C2, -2.12194440e-4); + +_PS_CONST(cephes_exp_p0, 1.9875691500E-4); +_PS_CONST(cephes_exp_p1, 1.3981999507E-3); +_PS_CONST(cephes_exp_p2, 8.3334519073E-3); +_PS_CONST(cephes_exp_p3, 4.1665795894E-2); +_PS_CONST(cephes_exp_p4, 1.6666665459E-1); +_PS_CONST(cephes_exp_p5, 5.0000001201E-1); + +OPENMM_EXPORT v4sf exp_ps(v4sf x) { + v4sf tmp = _mm_setzero_ps(), fx; +#ifdef USE_SSE2 + v4si emm0; +#else + v2si mm0, mm1; +#endif + v4sf one = *(v4sf*)_ps_1; + + x = _mm_min_ps(x, *(v4sf*)_ps_exp_hi); + x = _mm_max_ps(x, *(v4sf*)_ps_exp_lo); + + /* express exp(x) as exp(g + n*log(2)) */ + fx = _mm_mul_ps(x, *(v4sf*)_ps_cephes_LOG2EF); + fx = _mm_add_ps(fx, *(v4sf*)_ps_0p5); + + /* how to perform a floorf with SSE: just below */ +#ifndef USE_SSE2 + /* step 1 : cast to int */ + tmp = _mm_movehl_ps(tmp, fx); + mm0 = _mm_cvttps_pi32(fx); + mm1 = _mm_cvttps_pi32(tmp); + /* step 2 : cast back to float */ + tmp = _mm_cvtpi32x2_ps(mm0, mm1); +#else + emm0 = _mm_cvttps_epi32(fx); + tmp = _mm_cvtepi32_ps(emm0); +#endif + /* if greater, substract 1 */ + v4sf mask = _mm_cmpgt_ps(tmp, fx); + mask = _mm_and_ps(mask, one); + fx = _mm_sub_ps(tmp, mask); + + tmp = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C1); + v4sf z = _mm_mul_ps(fx, *(v4sf*)_ps_cephes_exp_C2); + x = _mm_sub_ps(x, tmp); + x = _mm_sub_ps(x, z); + + z = _mm_mul_ps(x,x); + + v4sf y = *(v4sf*)_ps_cephes_exp_p0; + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_exp_p1); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_exp_p2); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_exp_p3); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_exp_p4); + y = _mm_mul_ps(y, x); + y = _mm_add_ps(y, *(v4sf*)_ps_cephes_exp_p5); + y = _mm_mul_ps(y, z); + y = _mm_add_ps(y, x); + y = _mm_add_ps(y, one); + + /* build 2^n */ +#ifndef USE_SSE2 + z = _mm_movehl_ps(z, fx); + mm0 = _mm_cvttps_pi32(fx); + mm1 = _mm_cvttps_pi32(z); + mm0 = _mm_add_pi32(mm0, *(v2si*)_pi32_0x7f); + mm1 = _mm_add_pi32(mm1, *(v2si*)_pi32_0x7f); + mm0 = _mm_slli_pi32(mm0, 23); + mm1 = _mm_slli_pi32(mm1, 23); + + v4sf pow2n; + COPY_MM_TO_XMM(mm0, mm1, pow2n); + _mm_empty(); +#else + emm0 = _mm_cvttps_epi32(fx); + emm0 = _mm_add_epi32(emm0, *(v4si*)_pi32_0x7f); + emm0 = _mm_slli_epi32(emm0, 23); + v4sf pow2n = _mm_castsi128_ps(emm0); +#endif + y = _mm_mul_ps(y, pow2n); + return y; +} + +_PS_CONST(minus_cephes_DP1, -0.78515625); +_PS_CONST(minus_cephes_DP2, -2.4187564849853515625e-4); +_PS_CONST(minus_cephes_DP3, -3.77489497744594108e-8); +_PS_CONST(sincof_p0, -1.9515295891E-4); +_PS_CONST(sincof_p1, 8.3321608736E-3); +_PS_CONST(sincof_p2, -1.6666654611E-1); +_PS_CONST(coscof_p0, 2.443315711809948E-005); +_PS_CONST(coscof_p1, -1.388731625493765E-003); +_PS_CONST(coscof_p2, 4.166664568298827E-002); +_PS_CONST(cephes_FOPI, 1.27323954473516); // 4 / M_PI + + +/* evaluation of 4 sines at onces, using only SSE1+MMX intrinsics so + it runs also on old athlons XPs and the pentium III of your grand + mother. + + The code is the exact rewriting of the cephes sinf function. + Precision is excellent as long as x < 8192 (I did not bother to + take into account the special handling they have for greater values + -- it does not return garbage for arguments over 8192, though, but + the extra precision is missing). + + Note that it is such that sinf((float)M_PI) = 8.74e-8, which is the + surprising but correct result. + + Performance is also surprisingly good, 1.33 times faster than the + macos vsinf SSE2 function, and 1.5 times faster than the + __vrs4_sinf of amd's ACML (which is only available in 64 bits). Not + too bad for an SSE1 function (with no special tuning) ! + However the latter libraries probably have a much better handling of NaN, + Inf, denormalized and other special arguments.. + + On my core 1 duo, the execution of this function takes approximately 95 cycles. + + From what I have observed on the experiments with Intel AMath lib, switching to an + SSE2 version would improve the perf by only 10%. + + Since it is based on SSE intrinsics, it has to be compiled at -O2 to + deliver full speed. +*/ +OPENMM_EXPORT v4sf sin_ps(v4sf x) { // any x + v4sf xmm1, xmm2 = _mm_setzero_ps(), xmm3, sign_bit, y; + +#ifdef USE_SSE2 + v4si emm0, emm2; +#else + v2si mm0, mm1, mm2, mm3; +#endif + sign_bit = x; + /* take the absolute value */ + x = _mm_and_ps(x, *(v4sf*)_ps_inv_sign_mask); + /* extract the sign bit (upper one) */ + sign_bit = _mm_and_ps(sign_bit, *(v4sf*)_ps_sign_mask); + + /* scale by 4/Pi */ + y = _mm_mul_ps(x, *(v4sf*)_ps_cephes_FOPI); + +#ifdef USE_SSE2 + /* store the integer part of y in mm0 */ + emm2 = _mm_cvttps_epi32(y); + /* j=(j+1) & (~1) (see the cephes sources) */ + emm2 = _mm_add_epi32(emm2, *(v4si*)_pi32_1); + emm2 = _mm_and_si128(emm2, *(v4si*)_pi32_inv1); + y = _mm_cvtepi32_ps(emm2); + + /* get the swap sign flag */ + emm0 = _mm_and_si128(emm2, *(v4si*)_pi32_4); + emm0 = _mm_slli_epi32(emm0, 29); + /* get the polynom selection mask + there is one polynom for 0 <= x <= Pi/4 + and another one for Pi/4referenceCount++; } Kernel::Kernel(const Kernel& copy) : impl(copy.impl) { diff --git a/olla/src/KernelImpl.cpp b/olla/src/KernelImpl.cpp index edc54c1c2db83bc25b11d767ef1ddd562ba73ffc..c72c8e19de124440895127da9b21839d03f293a7 100644 --- a/olla/src/KernelImpl.cpp +++ b/olla/src/KernelImpl.cpp @@ -34,7 +34,7 @@ using namespace OpenMM; using namespace std; -KernelImpl::KernelImpl(string name, const Platform& platform) : name(name), platform(&platform), referenceCount(1) { +KernelImpl::KernelImpl(string name, const Platform& platform) : name(name), platform(&platform), referenceCount(0) { } std::string KernelImpl::getName() const { diff --git a/openmmapi/include/OpenMM.h b/openmmapi/include/OpenMM.h index dcd8a2113895d177248dc8e61af978cd91f0035d..61fcb4538e828be544141e90801c8b96086a3d18 100644 --- a/openmmapi/include/OpenMM.h +++ b/openmmapi/include/OpenMM.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009 Stanford University and the Authors. * + * Portions copyright (c) 2009-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -37,6 +37,7 @@ #include "openmm/CMAPTorsionForce.h" #include "openmm/CMMotionRemover.h" #include "openmm/CustomBondForce.h" +#include "openmm/CustomCentroidBondForce.h" #include "openmm/CustomCompoundBondForce.h" #include "openmm/CustomAngleForce.h" #include "openmm/CustomTorsionForce.h" diff --git a/openmmapi/include/openmm/Context.h b/openmmapi/include/openmm/Context.h index 48404714d46f44f04c604325e571d84fbabb0878..78d96f1fdcad8230301e8197aae74b7b7b7865d2 100644 --- a/openmmapi/include/openmm/Context.h +++ b/openmmapi/include/openmm/Context.h @@ -261,6 +261,7 @@ private: friend class Force; friend class Platform; ContextImpl& getImpl(); + const ContextImpl& getImpl() const; ContextImpl* impl; std::map properties; }; diff --git a/openmmapi/include/openmm/CustomAngleForce.h b/openmmapi/include/openmm/CustomAngleForce.h index 0f7c0632fcfa0ff6f2e5640949e07c96a179f4b4..7e890cef7387401e6c16f00186b78d074a5182dd 100644 --- a/openmmapi/include/openmm/CustomAngleForce.h +++ b/openmmapi/include/openmm/CustomAngleForce.h @@ -171,7 +171,7 @@ public: * @param parameters the list of parameters for the new angle * @return the index of the angle that was added */ - int addAngle(int particle1, int particle2, int particle3, const std::vector& parameters); + int addAngle(int particle1, int particle2, int particle3, const std::vector& parameters=std::vector()); /** * Get the force field parameters for an angle term. * @@ -191,7 +191,7 @@ public: * @param particle3 the index of the third particle connected by the angle * @param parameters the list of parameters for the angle */ - void setAngleParameters(int index, int particle1, int particle2, int particle3, const std::vector& parameters); + void setAngleParameters(int index, int particle1, int particle2, int particle3, const std::vector& parameters=std::vector()); /** * Update the per-angle parameters in a Context to match those stored in this Force object. This method provides * an efficient method to update certain parameters in an existing Context without needing to reinitialize it. diff --git a/openmmapi/include/openmm/CustomBondForce.h b/openmmapi/include/openmm/CustomBondForce.h index fa8660cb0472ba6cf583e86bca2d1a5ab7a236dd..a366276a568f19f159551f6a338f3639152aead9 100644 --- a/openmmapi/include/openmm/CustomBondForce.h +++ b/openmmapi/include/openmm/CustomBondForce.h @@ -170,7 +170,7 @@ public: * @param parameters the list of parameters for the new bond * @return the index of the bond that was added */ - int addBond(int particle1, int particle2, const std::vector& parameters); + int addBond(int particle1, int particle2, const std::vector& parameters=std::vector()); /** * Get the force field parameters for a bond term. * @@ -188,7 +188,7 @@ public: * @param particle2 the index of the second particle connected by the bond * @param parameters the list of parameters for the bond */ - void setBondParameters(int index, int particle1, int particle2, const std::vector& parameters); + void setBondParameters(int index, int particle1, int particle2, const std::vector& parameters=std::vector()); /** * Update the per-bond parameters in a Context to match those stored in this Force object. This method provides * an efficient method to update certain parameters in an existing Context without needing to reinitialize it. diff --git a/openmmapi/include/openmm/CustomCentroidBondForce.h b/openmmapi/include/openmm/CustomCentroidBondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..dac5ca442465b933b5aeeca79e00b4c06d9425b1 --- /dev/null +++ b/openmmapi/include/openmm/CustomCentroidBondForce.h @@ -0,0 +1,426 @@ +#ifndef OPENMM_CUSTOMCENTROIDBONDFORCE_H_ +#define OPENMM_CUSTOMCENTROIDBONDFORCE_H_ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "TabulatedFunction.h" +#include "Force.h" +#include "Vec3.h" +#include +#include "internal/windowsExport.h" + +namespace OpenMM { + +/** + * This class is similar to CustomCompoundBondForce, but instead of applying forces between individual particles, + * it applies them between the centers of groups of particles. This is useful for a variety of purposes, such as + * restraints to keep two molecules from moving too far apart. + * + * When using this class, you define groups of particles, and the center of each group is calculated as a weighted + * average of the particle positions. By default, the particle masses are used as weights, so the center position + * is the center of mass. You can optionally specify different weights to use. You then add bonds just as with + * CustomCompoundBondForce, but instead of specifying the particles that make up a bond, you specify the groups. + * + * When creating a CustomCentroidBondForce, you specify the number of groups involved in a bond, and an expression + * for the energy of each bond. It may depend on the center positions of individual groups, the distances between + * the centers of pairs of groups, the angles formed by sets of three groups, and the dihedral angles formed by + * sets of four groups. + * + * We refer to the groups in a bond as g1, g2, g3, etc. For each bond, CustomCentroidBondForce evaluates a + * user supplied algebraic expression to determine the interaction energy. The expression may depend on the + * following variables and functions: + * + *
    + *
  • x1, y1, z1, x2, y2, z2, etc.: The x, y, and z coordinates of the centers of the groups. For example, x1 + * is the x coordinate of the center of group g1, and y3 is the y coordinate of the center of group g3.
  • + *
  • distance(g1, g2): the distance between the centers of groups g1 and g2 (where "g1" and "g2" may be replaced + * by the names of whichever groups you want to calculate the distance between).
  • + *
  • angle(g1, g2, g3): the angle formed by the centers of the three specified groups.
  • + *
  • dihedral(g1, g2, g3, g4): the dihedral angle formed by the centers of the four specified groups.
  • + *
+ * + * The expression also may involve tabulated functions, and may depend on arbitrary global and per-bond parameters. + * + * To use this class, create a CustomCentroidBondForce object, passing an algebraic expression to the constructor + * that defines the interaction energy of each bond. Then call addPerBondParameter() to define per-bond + * parameters and addGlobalParameter() to define global parameters. The values of per-bond parameters are specified + * as part of the system definition, while values of global parameters may be modified during a simulation by calling + * Context::setParameter(). + * + * Next call addGroup() to define the particle groups. Each group is specified by the particles it contains, and + * the weights to use when computing the center position. + * + * Then call addBond() to define bonds and specify their parameter values. After a bond has been added, you can + * modify its parameters by calling setBondParameters(). This will have no effect on Contexts that already exist unless + * you call updateParametersInContext(). + * + * As an example, the following code creates a CustomCentroidBondForce that implements a harmonic force between the + * centers of mass of two groups of particles. + * + *
+ * CustomCentroidBondForce* force = new CustomCentroidBondForce(2, "0.5*k*distance(g1,g2)^2");
+ * force->addPerBondParameter("k");
+ * force->addGroup(particles1);
+ * force->addGroup(particles2);
+ * vector bondGroups;
+ * bondGroups.push_back(0);
+ * bondGroups.push_back(1);
+ * vector bondParameters;
+ * bondParameters.push_back(k);
+ * force->addBond(bondGroups, bondParameters);
+ * 
+ * + * Expressions may involve the operators + (add), - (subtract), * (multiply), / (divide), and ^ (power), and the following + * functions: sqrt, exp, log, sin, cos, sec, csc, tan, cot, asin, acos, atan, sinh, cosh, tanh, erf, erfc, min, max, abs, floor, ceil, step, delta, select. All trigonometric functions + * are defined in radians, and log is the natural logarithm. step(x) = 0 if x is less than 0, 1 otherwise. delta(x) = 1 if x is 0, 0 otherwise. + * select(x,y,z) = z if x = 0, y otherwise. + * + * In addition, you can call addTabulatedFunction() to define a new function based on tabulated values. You specify the function by + * creating a TabulatedFunction object. That function can then appear in the expression. + */ + +class OPENMM_EXPORT CustomCentroidBondForce : public Force { +public: + /** + * Create a CustomCentroidBondForce. + * + * @param numGroups the number of groups used to define each bond + * @param energy an algebraic expression giving the interaction energy of each bond as a function + * of particle positions, inter-particle distances, angles, and dihedrals, and any global + * and per-bond parameters + */ + explicit CustomCentroidBondForce(int numGroups, const std::string& energy); + ~CustomCentroidBondForce(); + /** + * Get the number of groups used to define each bond. + */ + int getNumGroupsPerBond() const { + return groupsPerBond; + } + /** + * Get the number of particle groups that have been defined. + */ + int getNumGroups() const { + return groups.size(); + } + /** + * Get the number of bonds for which force field parameters have been defined. + */ + int getNumBonds() const { + return bonds.size(); + } + /** + * Get the number of per-bond parameters that the interaction depends on. + */ + int getNumPerBondParameters() const { + return bondParameters.size(); + } + /** + * Get the number of global parameters that the interaction depends on. + */ + int getNumGlobalParameters() const { + return globalParameters.size(); + } + /** + * Get the number of tabulated functions that have been defined. + */ + int getNumTabulatedFunctions() const { + return functions.size(); + } + /** + * Get the number of tabulated functions that have been defined. + * + * @deprecated This method exists only for backward compatibility. Use getNumTabulatedFunctions() instead. + */ + int getNumFunctions() const { + return functions.size(); + } + /** + * Get the algebraic expression that gives the interaction energy of each bond + */ + const std::string& getEnergyFunction() const; + /** + * Set the algebraic expression that gives the interaction energy of each bond + */ + void setEnergyFunction(const std::string& energy); + /** + * Add a new per-bond parameter that the interaction may depend on. + * + * @param name the name of the parameter + * @return the index of the parameter that was added + */ + int addPerBondParameter(const std::string& name); + /** + * Get the name of a per-bond parameter. + * + * @param index the index of the parameter for which to get the name + * @return the parameter name + */ + const std::string& getPerBondParameterName(int index) const; + /** + * Set the name of a per-bond parameter. + * + * @param index the index of the parameter for which to set the name + * @param name the name of the parameter + */ + void setPerBondParameterName(int index, const std::string& name); + /** + * Add a new global parameter that the interaction may depend on. + * + * @param name the name of the parameter + * @param defaultValue the default value of the parameter + * @return the index of the parameter that was added + */ + int addGlobalParameter(const std::string& name, double defaultValue); + /** + * Get the name of a global parameter. + * + * @param index the index of the parameter for which to get the name + * @return the parameter name + */ + const std::string& getGlobalParameterName(int index) const; + /** + * Set the name of a global parameter. + * + * @param index the index of the parameter for which to set the name + * @param name the name of the parameter + */ + void setGlobalParameterName(int index, const std::string& name); + /** + * Get the default value of a global parameter. + * + * @param index the index of the parameter for which to get the default value + * @return the parameter default value + */ + double getGlobalParameterDefaultValue(int index) const; + /** + * Set the default value of a global parameter. + * + * @param index the index of the parameter for which to set the default value + * @param name the default value of the parameter + */ + void setGlobalParameterDefaultValue(int index, double defaultValue); + /** + * Add a particle group. + * + * @param particles the indices of the particles to include in the group + * @param weights the weight to use for each particle when computing the center position. + * If this is omitted, then particle masses will be used as weights. + * @return the index of the group that was added + */ + int addGroup(const std::vector& particles, const std::vector& weights=std::vector()); + /** + * Get the properties of a group. + * + * @param index the index of the group to get + * @param particles the indices of the particles in the group + * @param weights the weight used for each particle when computing the center position. + * If no weights were specified, this vector will be empty indicating that particle + * masses should be used as weights. + */ + void getGroupParameters(int index, std::vector& particles, std::vector& weights) const; + /** + * Set the properties of a group. + * + * @param index the index of the group to set + * @param particles the indices of the particles in the group + * @param weights the weight to use for each particle when computing the center position. + * If this is omitted, then particle masses will be used as weights. + */ + void setGroupParameters(int index, const std::vector& particles, const std::vector& weights=std::vector()); + /** + * Add a bond to the force + * + * @param groups the indices of the groups the bond depends on + * @param parameters the list of per-bond parameter values for the new bond + * @return the index of the bond that was added + */ + int addBond(const std::vector& groups, const std::vector& parameters=std::vector()); + /** + * Get the properties of a bond. + * + * @param index the index of the bond to get + * @param groups the indices of the groups in the bond + * @param parameters the list of per-bond parameter values for the bond + */ + void getBondParameters(int index, std::vector& groups, std::vector& parameters) const; + /** + * Set the properties of a bond. + * + * @param index the index of the bond to set + * @param groups the indices of the groups in the bond + * @param parameters the list of per-bond parameter values for the bond + */ + void setBondParameters(int index, const std::vector& groups, const std::vector& parameters=std::vector()); + /** + * Add a tabulated function that may appear in the energy expression. + * + * @param name the name of the function as it appears in expressions + * @param function a TabulatedFunction object defining the function. The TabulatedFunction + * should have been created on the heap with the "new" operator. The + * Force takes over ownership of it, and deletes it when the Force itself is deleted. + * @return the index of the function that was added + */ + int addTabulatedFunction(const std::string& name, TabulatedFunction* function); + /** + * Get a const reference to a tabulated function that may appear in the energy expression. + * + * @param index the index of the function to get + * @return the TabulatedFunction object defining the function + */ + const TabulatedFunction& getTabulatedFunction(int index) const; + /** + * Get a reference to a tabulated function that may appear in the energy expression. + * + * @param index the index of the function to get + * @return the TabulatedFunction object defining the function + */ + TabulatedFunction& getTabulatedFunction(int index); + /** + * Get the name of a tabulated function that may appear in the energy expression. + * + * @param index the index of the function to get + * @return the name of the function as it appears in expressions + */ + const std::string& getTabulatedFunctionName(int index) const; + /** + * Update the per-bond parameters in a Context to match those stored in this Force object. This method provides + * an efficient method to update certain parameters in an existing Context without needing to reinitialize it. + * Simply call setBondParameters() to modify this object's parameters, then call updateParametersInContext() + * to copy them over to the Context. + * + * This method has several limitations. The only information it updates is the values of per-bond parameters. + * All other aspects of the Force (such as the energy function) are unaffected and can only be changed by reinitializing + * the Context. Neither the definitions of groups nor the set of groups involved in a bond can be changed, nor can new + * bonds be added. + */ + void updateParametersInContext(Context& context); + /** + * Returns whether or not this force makes use of periodic boundary + * conditions. + * + * @returns false + */ + bool usesPeriodicBoundaryConditions() const { + return false; + } +protected: + ForceImpl* createImpl() const; +private: + class GroupInfo; + class BondInfo; + class BondParameterInfo; + class GlobalParameterInfo; + class FunctionInfo; + int groupsPerBond; + std::string energyExpression; + std::vector bondParameters; + std::vector globalParameters; + std::vector groups; + std::vector bonds; + std::vector functions; +}; + +/** + * This is an internal class used to record information about a group. + * @private + */ +class CustomCentroidBondForce::GroupInfo { +public: + std::vector particles; + std::vector weights; + GroupInfo() { + } + GroupInfo(const std::vector& particles, const std::vector& weights) : + particles(particles), weights(weights) { + } +}; + +/** + * This is an internal class used to record information about a bond. + * @private + */ +class CustomCentroidBondForce::BondInfo { +public: + std::vector groups; + std::vector parameters; + BondInfo() { + } + BondInfo(const std::vector& groups, const std::vector& parameters) : + groups(groups), parameters(parameters) { + } +}; + +/** + * This is an internal class used to record information about a per-bond parameter. + * @private + */ +class CustomCentroidBondForce::BondParameterInfo { +public: + std::string name; + BondParameterInfo() { + } + BondParameterInfo(const std::string& name) : name(name) { + } +}; + +/** + * This is an internal class used to record information about a global parameter. + * @private + */ +class CustomCentroidBondForce::GlobalParameterInfo { +public: + std::string name; + double defaultValue; + GlobalParameterInfo() { + } + GlobalParameterInfo(const std::string& name, double defaultValue) : name(name), defaultValue(defaultValue) { + } +}; + +/** + * This is an internal class used to record information about a tabulated function. + * @private + */ +class CustomCentroidBondForce::FunctionInfo { +public: + std::string name; + TabulatedFunction* function; + FunctionInfo() { + } + FunctionInfo(const std::string& name, TabulatedFunction* function) : name(name), function(function) { + } +}; + +} // namespace OpenMM + +#endif /*OPENMM_CUSTOMCENTROIDBONDFORCE_H_*/ diff --git a/openmmapi/include/openmm/CustomCompoundBondForce.h b/openmmapi/include/openmm/CustomCompoundBondForce.h index a5fc78effd460b9d06f10812bd2e983edbcc36af..c67f9d5ecf1292fd5ada53e56b6fbfab7e8b86a9 100644 --- a/openmmapi/include/openmm/CustomCompoundBondForce.h +++ b/openmmapi/include/openmm/CustomCompoundBondForce.h @@ -219,7 +219,7 @@ public: * @param parameters the list of per-bond parameter values for the new bond * @return the index of the bond that was added */ - int addBond(const std::vector& particles, const std::vector& parameters); + int addBond(const std::vector& particles, const std::vector& parameters=std::vector()); /** * Get the properties of a bond. * @@ -231,11 +231,11 @@ public: /** * Set the properties of a bond. * - * @param index the index of the bond group to set + * @param index the index of the bond to set * @param particles the indices of the particles in the bond * @param parameters the list of per-bond parameter values for the bond */ - void setBondParameters(int index, const std::vector& particles, const std::vector& parameters); + void setBondParameters(int index, const std::vector& particles, const std::vector& parameters=std::vector()); /** * Add a tabulated function that may appear in the energy expression. * @@ -323,7 +323,7 @@ private: }; /** - * This is an internal class used to record information about a bond or acceptor. + * This is an internal class used to record information about a bond. * @private */ class CustomCompoundBondForce::BondInfo { @@ -338,7 +338,7 @@ public: }; /** - * This is an internal class used to record information about a per-bond or per-acceptor parameter. + * This is an internal class used to record information about a per-bond parameter. * @private */ class CustomCompoundBondForce::BondParameterInfo { diff --git a/openmmapi/include/openmm/CustomExternalForce.h b/openmmapi/include/openmm/CustomExternalForce.h index 77be2d046e4fd27a9ecbbb3953b38fd631dbd523..7e38dd776090507114593cf24c0263cde357fc8f 100644 --- a/openmmapi/include/openmm/CustomExternalForce.h +++ b/openmmapi/include/openmm/CustomExternalForce.h @@ -67,6 +67,14 @@ namespace OpenMM { * force->addPerParticleParameter("z0"); * * + * Special care is needed in systems that use periodic boundary conditions. In that case, each particle really represents + * an infinite set of particles repeating through space. The variables x, y, and z contain the coordinates of one of those + * periodic copies, but there is no guarantee about which. It might even change from one time step to the next. You can handle + * this situation by using the function periodicdistance(x1, y1, z1, x2, y2, z2), which returns the minimum distance between + * periodic copies of the points (x1, y1, z1) and (x2, y2, z2). For example, the force given above would be rewritten as + * + * CustomExternalForce* force = new CustomExternalForce("k*periodicdistance(x, y, z, x0, y0, z0)^2"); + * * Expressions may involve the operators + (add), - (subtract), * (multiply), / (divide), and ^ (power), and the following * functions: sqrt, exp, log, sin, cos, sec, csc, tan, cot, asin, acos, atan, sinh, cosh, tanh, erf, erfc, min, max, abs, floor, ceil, step, delta, select. All trigonometric functions * are defined in radians, and log is the natural logarithm. step(x) = 0 if x is less than 0, 1 otherwise. delta(x) = 1 if x is 0, 0 otherwise. @@ -172,7 +180,7 @@ public: * @param parameters the list of parameters for the new force term * @return the index of the particle term that was added */ - int addParticle(int particle, const std::vector& parameters); + int addParticle(int particle, const std::vector& parameters=std::vector()); /** * Get the force field parameters for a force field term. * @@ -188,7 +196,7 @@ public: * @param particle the index of the particle this term is applied to * @param parameters the list of parameters for the force field term */ - void setParticleParameters(int index, int particle, const std::vector& parameters); + void setParticleParameters(int index, int particle, const std::vector& parameters=std::vector()); /** * Update the per-particle parameters in a Context to match those stored in this Force object. This method provides * an efficient method to update certain parameters in an existing Context without needing to reinitialize it. @@ -206,9 +214,7 @@ public: * * @returns false */ - bool usesPeriodicBoundaryConditions() const { - return false; - } + bool usesPeriodicBoundaryConditions() const; protected: ForceImpl* createImpl() const; private: diff --git a/openmmapi/include/openmm/CustomGBForce.h b/openmmapi/include/openmm/CustomGBForce.h index 0a03bbdc82f679fa395f32daef26966ccb7f98e2..28576252fedcf3e1692dbef3a66c029cbb83ad56 100644 --- a/openmmapi/include/openmm/CustomGBForce.h +++ b/openmmapi/include/openmm/CustomGBForce.h @@ -319,7 +319,7 @@ public: * @param parameters the list of parameters for the new particle * @return the index of the particle that was added */ - int addParticle(const std::vector& parameters); + int addParticle(const std::vector& parameters=std::vector()); /** * Get the nonbonded force parameters for a particle. * diff --git a/openmmapi/include/openmm/CustomHbondForce.h b/openmmapi/include/openmm/CustomHbondForce.h index 1f471a729f0a8bef5c19bff5c4b957d90eb5627f..fc56f5e6883e47458bf11c656df453b6d86de494 100644 --- a/openmmapi/include/openmm/CustomHbondForce.h +++ b/openmmapi/include/openmm/CustomHbondForce.h @@ -296,7 +296,7 @@ public: * @param parameters the list of per-donor parameter values for the new donor * @return the index of the donor that was added */ - int addDonor(int d1, int d2, int d3, const std::vector& parameters); + int addDonor(int d1, int d2, int d3, const std::vector& parameters=std::vector()); /** * Get the properties of a donor group. * @@ -320,7 +320,7 @@ public: * less than three particles, this must be -1. * @param parameters the list of per-donor parameter values for the donor */ - void setDonorParameters(int index, int d1, int d2, int d3, const std::vector& parameters); + void setDonorParameters(int index, int d1, int d2, int d3, const std::vector& parameters=std::vector()); /** * Add an acceptor group to the force * @@ -332,7 +332,7 @@ public: * @param parameters the list of per-acceptor parameter values for the new acceptor * @return the index of the acceptor that was added */ - int addAcceptor(int a1, int a2, int a3, const std::vector& parameters); + int addAcceptor(int a1, int a2, int a3, const std::vector& parameters=std::vector()); /** * Get the properties of an acceptor group. * @@ -356,7 +356,7 @@ public: * less than three particles, this must be -1. * @param parameters the list of per-acceptor parameter values for the acceptor */ - void setAcceptorParameters(int index, int a1, int a2, int a3, const std::vector& parameters); + void setAcceptorParameters(int index, int a1, int a2, int a3, const std::vector& parameters=std::vector()); /** * Add a donor-acceptor pair to the list of interactions that should be excluded. * diff --git a/openmmapi/include/openmm/CustomManyParticleForce.h b/openmmapi/include/openmm/CustomManyParticleForce.h index 44e9dbe0f8b2dbbb2dab54819f433f9341e7586f..1c62d9f4fd1dd83a7da97663982e91dc22967a38 100644 --- a/openmmapi/include/openmm/CustomManyParticleForce.h +++ b/openmmapi/include/openmm/CustomManyParticleForce.h @@ -348,7 +348,7 @@ public: * @param type the type of the new particle * @return the index of the particle that was added */ - int addParticle(const std::vector& parameters, int type=0); + int addParticle(const std::vector& parameters=std::vector(), int type=0); /** * Get the nonbonded force parameters for a particle. * diff --git a/openmmapi/include/openmm/CustomNonbondedForce.h b/openmmapi/include/openmm/CustomNonbondedForce.h index 05039e7d73ffc64a1f2b3dea374a375be017172c..0414139b39e834df661b5f53c8f85962a697c5aa 100644 --- a/openmmapi/include/openmm/CustomNonbondedForce.h +++ b/openmmapi/include/openmm/CustomNonbondedForce.h @@ -328,7 +328,7 @@ public: * @param parameters the list of parameters for the new particle * @return the index of the particle that was added */ - int addParticle(const std::vector& parameters); + int addParticle(const std::vector& parameters=std::vector()); /** * Get the nonbonded force parameters for a particle. * diff --git a/openmmapi/include/openmm/CustomTorsionForce.h b/openmmapi/include/openmm/CustomTorsionForce.h index 77ee821aba3dfaf0ce50eae3945f89870bbae796..7c38269af0a1fa82d1a01697f6118700b0e6c9d5 100644 --- a/openmmapi/include/openmm/CustomTorsionForce.h +++ b/openmmapi/include/openmm/CustomTorsionForce.h @@ -172,7 +172,7 @@ public: * @param parameters the list of parameters for the new torsion * @return the index of the torsion that was added */ - int addTorsion(int particle1, int particle2, int particle3, int particle4, const std::vector& parameters); + int addTorsion(int particle1, int particle2, int particle3, int particle4, const std::vector& parameters=std::vector()); /** * Get the force field parameters for a torsion term. * @@ -194,7 +194,7 @@ public: * @param particle4 the index of the fourth particle connected by the torsion * @param parameters the list of parameters for the torsion */ - void setTorsionParameters(int index, int particle1, int particle2, int particle3, int particle4, const std::vector& parameters); + void setTorsionParameters(int index, int particle1, int particle2, int particle3, int particle4, const std::vector& parameters=std::vector()); /** * Update the per-torsion parameters in a Context to match those stored in this Force object. This method provides * an efficient method to update certain parameters in an existing Context without needing to reinitialize it. diff --git a/openmmapi/include/openmm/Force.h b/openmmapi/include/openmm/Force.h index 537f479151cfe78a9fbcc19712cd00952d6cd443..567b1ba8f858abdd3cb2a1f2cf56f564b1fb7144 100644 --- a/openmmapi/include/openmm/Force.h +++ b/openmmapi/include/openmm/Force.h @@ -98,6 +98,10 @@ protected: * Get the ForceImpl corresponding to this Force in a Context. */ ForceImpl& getImplInContext(Context& context); + /** + * Get a const reference to the ForceImpl corresponding to this Force in a Context. + */ + const ForceImpl& getImplInContext(const Context& context) const; /** * Get the ContextImpl corresponding to a Context. */ diff --git a/openmmapi/include/openmm/NonbondedForce.h b/openmmapi/include/openmm/NonbondedForce.h index 4f0d815aef69e2e7e3578f217484218b8069071b..b5611d1141b84dd62e92690ee05ad3f635a13c1c 100644 --- a/openmmapi/include/openmm/NonbondedForce.h +++ b/openmmapi/include/openmm/NonbondedForce.h @@ -217,6 +217,19 @@ public: * @param nz the number of grid points along the Z axis */ void setPMEParameters(double alpha, int nx, int ny, int nz); + /** + * Get the parameters being used for PME in a particular Context. Because some platforms have restrictions + * on the allowed grid sizes, the values that are actually used may be slightly different from those + * specified with setPMEParameters(), or the standard values calculated based on the Ewald error tolerance. + * See the manual for details. + * + * @param context the Context for which to get the parameters + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const; /** * Add the nonbonded force parameters for a particle. This should be called once for each particle * in the System. When it is called for the i'th time, it specifies the parameters for the i'th particle. diff --git a/openmmapi/include/openmm/internal/CustomCentroidBondForceImpl.h b/openmmapi/include/openmm/internal/CustomCentroidBondForceImpl.h new file mode 100644 index 0000000000000000000000000000000000000000..345ddf8f6ba8d08002da03e70de5d2a132706103 --- /dev/null +++ b/openmmapi/include/openmm/internal/CustomCentroidBondForceImpl.h @@ -0,0 +1,105 @@ +#ifndef OPENMM_CUSTOMCENTROIDBONDFORCEIMPL_H_ +#define OPENMM_CUSTOMCENTROIDBONDFORCEIMPL_H_ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "ForceImpl.h" +#include "openmm/CustomCentroidBondForce.h" +#include "openmm/Kernel.h" +#include "openmm/System.h" +#include "lepton/CustomFunction.h" +#include "lepton/ExpressionTreeNode.h" +#include "lepton/ParsedExpression.h" +#include +#include +#include +#include + +namespace OpenMM { + +/** + * This is the internal implementation of CustomCentroidBondForce. + */ + +class OPENMM_EXPORT CustomCentroidBondForceImpl : public ForceImpl { +public: + CustomCentroidBondForceImpl(const CustomCentroidBondForce& owner); + ~CustomCentroidBondForceImpl(); + void initialize(ContextImpl& context); + const CustomCentroidBondForce& getOwner() const { + return owner; + } + void updateContextState(ContextImpl& context) { + // This force field doesn't update the state directly. + } + double calcForcesAndEnergy(ContextImpl& context, bool includeForces, bool includeEnergy, int groups); + std::map getDefaultParameters(); + std::vector getKernelNames(); + std::vector > getBondedParticles() const; + void updateParametersInContext(ContextImpl& context); + /** + * This is a utility routine that parses the energy expression, identifies the angles and dihedrals + * in it, and replaces them with variables. + * + * @param force the CustomCentroidBondForce to process + * @param functions definitions of custom function that may appear in the expression + * @param distances on exit, this will contain an entry for each distance used in the expression. The key is the name + * of the corresponding variable, and the value is the list of particle indices. + * @param angles on exit, this will contain an entry for each angle used in the expression. The key is the name + * of the corresponding variable, and the value is the list of particle indices. + * @param dihedrals on exit, this will contain an entry for each dihedral used in the expression. The key is the name + * of the corresponding variable, and the value is the list of particle indices. + * @return a Parsed expression for the energy + */ + static Lepton::ParsedExpression prepareExpression(const CustomCentroidBondForce& force, const std::map& functions, std::map >& distances, + std::map >& angles, std::map >& dihedrals); + /** + * Compute the normalized weights to use for each particle in each group. + * + * @param force the CustomCentroidBondForce to process + * @param system the System it is part of + * @param weights on exit, weights[i][j] contains the normalized weight for particle j in group i. + */ + static void computeNormalizedWeights(const CustomCentroidBondForce& force, const System& system, std::vector >& weights); +private: + class FunctionPlaceholder; + static Lepton::ExpressionTreeNode replaceFunctions(const Lepton::ExpressionTreeNode& node, std::map atoms, + std::map >& distances, std::map >& angles, + std::map >& dihedrals, std::set& variables); + void addBondsBetweenGroups(int group1, int group2, std::vector >& bonds) const; + const CustomCentroidBondForce& owner; + Kernel kernel; +}; + +} // namespace OpenMM + +#endif /*OPENMM_CUSTOMCENTROIDBONDFORCEIMPL_H_*/ diff --git a/openmmapi/include/openmm/internal/CustomCompoundBondForceImpl.h b/openmmapi/include/openmm/internal/CustomCompoundBondForceImpl.h index db51ce3678b24c2064eafa68d5be65d74969bd9f..21f4326090218e37a852a36e47fd155314a3da46 100644 --- a/openmmapi/include/openmm/internal/CustomCompoundBondForceImpl.h +++ b/openmmapi/include/openmm/internal/CustomCompoundBondForceImpl.h @@ -40,6 +40,7 @@ #include "lepton/ParsedExpression.h" #include #include +#include #include namespace OpenMM { @@ -83,7 +84,7 @@ private: class FunctionPlaceholder; static Lepton::ExpressionTreeNode replaceFunctions(const Lepton::ExpressionTreeNode& node, std::map atoms, std::map >& distances, std::map >& angles, - std::map >& dihedrals); + std::map >& dihedrals, std::set& variables); const CustomCompoundBondForce& owner; Kernel kernel; }; diff --git a/openmmapi/include/openmm/internal/CustomHbondForceImpl.h b/openmmapi/include/openmm/internal/CustomHbondForceImpl.h index 9d836ff892601e3c10841502d695b29343c2c52b..baa781b47193af97a224c69ae402a3967ad69aac 100644 --- a/openmmapi/include/openmm/internal/CustomHbondForceImpl.h +++ b/openmmapi/include/openmm/internal/CustomHbondForceImpl.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -40,6 +40,7 @@ #include "lepton/ParsedExpression.h" #include #include +#include #include namespace OpenMM { @@ -84,7 +85,7 @@ private: class FunctionPlaceholder; static Lepton::ExpressionTreeNode replaceFunctions(const Lepton::ExpressionTreeNode& node, std::map atoms, std::map >& distances, std::map >& angles, - std::map >& dihedrals); + std::map >& dihedrals, std::set& variables); const CustomHbondForce& owner; Kernel kernel; }; diff --git a/openmmapi/include/openmm/internal/CustomManyParticleForceImpl.h b/openmmapi/include/openmm/internal/CustomManyParticleForceImpl.h index a5a36dc8f37f8cf40a72aa3ec94064fbdb290935..069fb05ce37c355f29c68488c9b7efc8c70d26fc 100644 --- a/openmmapi/include/openmm/internal/CustomManyParticleForceImpl.h +++ b/openmmapi/include/openmm/internal/CustomManyParticleForceImpl.h @@ -40,6 +40,7 @@ #include "lepton/ParsedExpression.h" #include #include +#include #include namespace OpenMM { @@ -98,7 +99,7 @@ private: class FunctionPlaceholder; static Lepton::ExpressionTreeNode replaceFunctions(const Lepton::ExpressionTreeNode& node, std::map atoms, std::map >& distances, std::map >& angles, - std::map >& dihedrals); + std::map >& dihedrals, std::set& variables); static void generatePermutations(std::vector& values, int numFixed, std::vector >& result); const CustomManyParticleForce& owner; Kernel kernel; diff --git a/openmmapi/include/openmm/internal/NonbondedForceImpl.h b/openmmapi/include/openmm/internal/NonbondedForceImpl.h index e4ab1c148448c6fc1f090cea53bed6cdc74fb7de..183d87d2c1626cf727ba220f63ca54af8433cafe 100644 --- a/openmmapi/include/openmm/internal/NonbondedForceImpl.h +++ b/openmmapi/include/openmm/internal/NonbondedForceImpl.h @@ -64,6 +64,7 @@ public: } std::vector getKernelNames(); void updateParametersInContext(ContextImpl& context); + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; /** * This is a utility routine that calculates the values to use for alpha and kmax when using * Ewald summation. diff --git a/platforms/cpu/src/gmx_atomic.h b/openmmapi/include/openmm/internal/gmx_atomic.h similarity index 100% rename from platforms/cpu/src/gmx_atomic.h rename to openmmapi/include/openmm/internal/gmx_atomic.h diff --git a/openmmapi/include/openmm/internal/vectorize_neon.h b/openmmapi/include/openmm/internal/vectorize_neon.h index 380658c014557ccadbf2d1a6ca8cfd7ab08d48f0..e8851a6dd2a7c7eec21d5c87ffcdcd52c2160da4 100644 --- a/openmmapi/include/openmm/internal/vectorize_neon.h +++ b/openmmapi/include/openmm/internal/vectorize_neon.h @@ -40,6 +40,10 @@ typedef int int32_t; // This file defines classes and functions to simplify vectorizing code with NEON. +// These two functions are defined in the vecmath library, which is linked into OpenMM. +float32x4_t exp_ps(float32x4_t); +float32x4_t log_ps(float32x4_t); + /** * Determine whether ivec4 and fvec4 are supported on this processor. */ @@ -262,6 +266,14 @@ static inline fvec4 sqrt(const fvec4& v) { return rsqrt(v)*v; } +static inline fvec4 exp(const fvec4& v) { + return fvec4(exp_ps(v.val)); +} + +static inline fvec4 log(const fvec4& v) { + return fvec4(log_ps(v.val)); +} + static inline float dot3(const fvec4& v1, const fvec4& v2) { fvec4 result = v1*v2; return vgetq_lane_f32(result, 0) + vgetq_lane_f32(result, 1) + vgetq_lane_f32(result, 2); diff --git a/openmmapi/include/openmm/internal/vectorize_pnacl.h b/openmmapi/include/openmm/internal/vectorize_pnacl.h index d8b3c0094653aba979b01a98b37fb3d903892999..5f47608e819d6d8e07f0d719062bfc97aba61041 100644 --- a/openmmapi/include/openmm/internal/vectorize_pnacl.h +++ b/openmmapi/include/openmm/internal/vectorize_pnacl.h @@ -233,6 +233,14 @@ static inline fvec4 abs(const fvec4& v) { return v&(__m128) ivec4(0x7FFFFFFF); } +static inline fvec4 exp(const fvec4& v) { + return fvec4(expf(v[0]), expf(v[1]), expf(v[2]), expf(v[3])); +} + +static inline fvec4 log(const fvec4& v) { + return fvec4(logf(v[0]), logf(v[1]), logf(v[2]), logf(v[3])); +} + static inline float dot3(const fvec4& v1, const fvec4& v2) { fvec4 r = v1*v2; return r[0]+r[1]+r[2]; diff --git a/openmmapi/include/openmm/internal/vectorize_sse.h b/openmmapi/include/openmm/internal/vectorize_sse.h index b333a20459274ec2875cdc74f0f3f16ade9d7142..a7e0164ac31cfd959d7fd827945e68856c9d6881 100644 --- a/openmmapi/include/openmm/internal/vectorize_sse.h +++ b/openmmapi/include/openmm/internal/vectorize_sse.h @@ -37,6 +37,10 @@ // This file defines classes and functions to simplify vectorizing code with SSE. +// These two functions are defined in the vecmath library, which is linked into OpenMM. +__m128 exp_ps(__m128); +__m128 log_ps(__m128); + /** * Determine whether ivec4 and fvec4 are supported on this processor. */ @@ -253,6 +257,14 @@ static inline fvec4 rsqrt(const fvec4& v) { return y; } +static inline fvec4 exp(const fvec4& v) { + return fvec4(exp_ps(v.val)); +} + +static inline fvec4 log(const fvec4& v) { + return fvec4(log_ps(v.val)); +} + static inline float dot3(const fvec4& v1, const fvec4& v2) { return _mm_cvtss_f32(_mm_dp_ps(v1, v2, 0x71)); } diff --git a/openmmapi/src/Context.cpp b/openmmapi/src/Context.cpp index 67e694139da3e3d93506e9380363035369cf48ec..55ec7aa0d7f0ff8f9511d75b1adfdd8f3a1865d4 100644 --- a/openmmapi/src/Context.cpp +++ b/openmmapi/src/Context.cpp @@ -252,6 +252,10 @@ ContextImpl& Context::getImpl() { return *impl; } +const ContextImpl& Context::getImpl() const { + return *impl; +} + const vector >& Context::getMolecules() const { return impl->getMolecules(); } diff --git a/openmmapi/src/ContextImpl.cpp b/openmmapi/src/ContextImpl.cpp index f300fe82b154c50f0c754494055e88029311ebb5..4061cc39781951169b1310193d843703285a87a4 100644 --- a/openmmapi/src/ContextImpl.cpp +++ b/openmmapi/src/ContextImpl.cpp @@ -41,6 +41,7 @@ #include "openmm/Context.h" #include #include +#include #include #include #include @@ -115,6 +116,11 @@ ContextImpl::ContextImpl(Context& owner, const System& system, Integrator& integ // Select a platform to use. vector > candidatePlatforms; + if (platform == NULL) { + char* defaultPlatform = getenv("OPENMM_DEFAULT_PLATFORM"); + if (defaultPlatform != NULL) + platform = &Platform::getPlatformByName(string(defaultPlatform)); + } if (platform == NULL) { for (int i = 0; i < Platform::getNumPlatforms(); i++) { Platform& p = Platform::getPlatform(i); diff --git a/openmmapi/src/CustomCentroidBondForce.cpp b/openmmapi/src/CustomCentroidBondForce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..13da56deb714eb2a260750163331a9bdcf6f2fdb --- /dev/null +++ b/openmmapi/src/CustomCentroidBondForce.cpp @@ -0,0 +1,175 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/Force.h" +#include "openmm/OpenMMException.h" +#include "openmm/CustomCentroidBondForce.h" +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/internal/CustomCentroidBondForceImpl.h" +#include +#include +#include +#include +#include + +using namespace OpenMM; +using std::map; +using std::pair; +using std::set; +using std::string; +using std::stringstream; +using std::vector; + +CustomCentroidBondForce::CustomCentroidBondForce(int numGroups, const string& energy) : groupsPerBond(numGroups), energyExpression(energy) { +} + +CustomCentroidBondForce::~CustomCentroidBondForce() { + for (int i = 0; i < (int) functions.size(); i++) + delete functions[i].function; +} + +const string& CustomCentroidBondForce::getEnergyFunction() const { + return energyExpression; +} + +void CustomCentroidBondForce::setEnergyFunction(const std::string& energy) { + energyExpression = energy; +} + +int CustomCentroidBondForce::addPerBondParameter(const string& name) { + bondParameters.push_back(BondParameterInfo(name)); + return bondParameters.size()-1; +} + +const string& CustomCentroidBondForce::getPerBondParameterName(int index) const { + ASSERT_VALID_INDEX(index, bondParameters); + return bondParameters[index].name; +} + +void CustomCentroidBondForce::setPerBondParameterName(int index, const string& name) { + ASSERT_VALID_INDEX(index, bondParameters); + bondParameters[index].name = name; +} + +int CustomCentroidBondForce::addGlobalParameter(const string& name, double defaultValue) { + globalParameters.push_back(GlobalParameterInfo(name, defaultValue)); + return globalParameters.size()-1; +} + +const string& CustomCentroidBondForce::getGlobalParameterName(int index) const { + ASSERT_VALID_INDEX(index, globalParameters); + return globalParameters[index].name; +} + +void CustomCentroidBondForce::setGlobalParameterName(int index, const string& name) { + ASSERT_VALID_INDEX(index, globalParameters); + globalParameters[index].name = name; +} + +double CustomCentroidBondForce::getGlobalParameterDefaultValue(int index) const { + ASSERT_VALID_INDEX(index, globalParameters); + return globalParameters[index].defaultValue; +} + +void CustomCentroidBondForce::setGlobalParameterDefaultValue(int index, double defaultValue) { + ASSERT_VALID_INDEX(index, globalParameters); + globalParameters[index].defaultValue = defaultValue; +} + +int CustomCentroidBondForce::addGroup(const vector& particles, const vector& weights) { + if (particles.size() != weights.size() && weights.size() > 0) + throw OpenMMException("CustomCentroidBondForce: wrong number of weights specified for a group."); + groups.push_back(GroupInfo(particles, weights)); + return groups.size()-1; +} + +void CustomCentroidBondForce::getGroupParameters(int index, vector& particles, std::vector& weights) const { + ASSERT_VALID_INDEX(index, groups); + particles = groups[index].particles; + weights = groups[index].weights; +} + +void CustomCentroidBondForce::setGroupParameters(int index, const vector& particles, const vector& weights) { + ASSERT_VALID_INDEX(index, groups); + if (particles.size() != weights.size() && weights.size() > 0) + throw OpenMMException("CustomCentroidBondForce: wrong number of weights specified for a group."); + groups[index].particles = particles; + groups[index].weights = weights; +} + +int CustomCentroidBondForce::addBond(const vector& groups, const vector& parameters) { + if (groups.size() != groupsPerBond) + throw OpenMMException("CustomCentroidBondForce: wrong number of groups specified for a bond."); + bonds.push_back(BondInfo(groups, parameters)); + return bonds.size()-1; +} + +void CustomCentroidBondForce::getBondParameters(int index, vector& groups, std::vector& parameters) const { + ASSERT_VALID_INDEX(index, bonds); + groups = bonds[index].groups; + parameters = bonds[index].parameters; +} + +void CustomCentroidBondForce::setBondParameters(int index, const vector& groups, const vector& parameters) { + ASSERT_VALID_INDEX(index, bonds); + if (groups.size() != groupsPerBond) + throw OpenMMException("CustomCentroidBondForce: wrong number of groups specified for a bond."); + bonds[index].groups = groups; + bonds[index].parameters = parameters; +} + +int CustomCentroidBondForce::addTabulatedFunction(const std::string& name, TabulatedFunction* function) { + functions.push_back(FunctionInfo(name, function)); + return functions.size()-1; +} + +const TabulatedFunction& CustomCentroidBondForce::getTabulatedFunction(int index) const { + ASSERT_VALID_INDEX(index, functions); + return *functions[index].function; +} + +TabulatedFunction& CustomCentroidBondForce::getTabulatedFunction(int index) { + ASSERT_VALID_INDEX(index, functions); + return *functions[index].function; +} + +const string& CustomCentroidBondForce::getTabulatedFunctionName(int index) const { + ASSERT_VALID_INDEX(index, functions); + return functions[index].name; +} + +ForceImpl* CustomCentroidBondForce::createImpl() const { + return new CustomCentroidBondForceImpl(*this); +} + +void CustomCentroidBondForce::updateParametersInContext(Context& context) { + dynamic_cast(getImplInContext(context)).updateParametersInContext(getContextImpl(context)); +} diff --git a/openmmapi/src/CustomCentroidBondForceImpl.cpp b/openmmapi/src/CustomCentroidBondForceImpl.cpp new file mode 100644 index 0000000000000000000000000000000000000000..91895bc80bd77dfdc58a7659d898344d49b9d067 --- /dev/null +++ b/openmmapi/src/CustomCentroidBondForceImpl.cpp @@ -0,0 +1,284 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/OpenMMException.h" +#include "openmm/internal/ContextImpl.h" +#include "openmm/internal/CustomCentroidBondForceImpl.h" +#include "openmm/kernels.h" +#include "lepton/Operation.h" +#include "lepton/Parser.h" +#include +#include + +using namespace OpenMM; +using namespace std; +using Lepton::CustomFunction; +using Lepton::ExpressionTreeNode; +using Lepton::Operation; +using Lepton::ParsedExpression; + +/** + * This class serves as a placeholder for angles and dihedrals in expressions. + */ +class CustomCentroidBondForceImpl::FunctionPlaceholder : public CustomFunction { +public: + int numArguments; + FunctionPlaceholder(int numArguments) : numArguments(numArguments) { + } + int getNumArguments() const { + return numArguments; + } + double evaluate(const double* arguments) const { + return 0.0; + } + double evaluateDerivative(const double* arguments, const int* derivOrder) const { + return 0.0; + } + CustomFunction* clone() const { + return new FunctionPlaceholder(numArguments); + } +}; + +CustomCentroidBondForceImpl::CustomCentroidBondForceImpl(const CustomCentroidBondForce& owner) : owner(owner) { +} + +CustomCentroidBondForceImpl::~CustomCentroidBondForceImpl() { +} + +void CustomCentroidBondForceImpl::initialize(ContextImpl& context) { + kernel = context.getPlatform().createKernel(CalcCustomCentroidBondForceKernel::Name(), context); + + // Check for errors in the specification of parameters and exclusions. + + const System& system = context.getSystem(); + vector particles; + vector weights; + for (int i = 0; i < owner.getNumGroups(); i++) { + owner.getGroupParameters(i, particles, weights); + for (int j = 0; j < (int) particles.size(); j++) + if (particles[j] < 0 || particles[j] >= system.getNumParticles()) { + stringstream msg; + msg << "CustomCentroidBondForce: Illegal particle index for a group: "; + msg << particles[j]; + throw OpenMMException(msg.str()); + } + if (weights.size() != particles.size() && weights.size() > 0) { + stringstream msg; + msg << "CustomCentroidBondForce: Wrong number of weights for group "; + msg << i; + throw OpenMMException(msg.str()); + } + } + vector groups; + vector parameters; + int numBondParameters = owner.getNumPerBondParameters(); + for (int i = 0; i < owner.getNumBonds(); i++) { + owner.getBondParameters(i, groups, parameters); + for (int j = 0; j < (int) groups.size(); j++) + if (groups[j] < 0 || groups[j] >= owner.getNumGroups()) { + stringstream msg; + msg << "CustomCentroidBondForce: Illegal group index for a bond: "; + msg << groups[j]; + throw OpenMMException(msg.str()); + } + if (parameters.size() != numBondParameters) { + stringstream msg; + msg << "CustomCentroidBondForce: Wrong number of parameters for bond "; + msg << i; + throw OpenMMException(msg.str()); + } + } + kernel.getAs().initialize(context.getSystem(), owner); +} + +double CustomCentroidBondForceImpl::calcForcesAndEnergy(ContextImpl& context, bool includeForces, bool includeEnergy, int groups) { + if ((groups&(1<().execute(context, includeForces, includeEnergy); + return 0.0; +} + +vector CustomCentroidBondForceImpl::getKernelNames() { + vector names; + names.push_back(CalcCustomCentroidBondForceKernel::Name()); + return names; +} + +map CustomCentroidBondForceImpl::getDefaultParameters() { + map parameters; + for (int i = 0; i < owner.getNumGlobalParameters(); i++) + parameters[owner.getGlobalParameterName(i)] = owner.getGlobalParameterDefaultValue(i); + return parameters; +} + +ParsedExpression CustomCentroidBondForceImpl::prepareExpression(const CustomCentroidBondForce& force, const map& customFunctions, map >& distances, + map >& angles, map >& dihedrals) { + CustomCentroidBondForceImpl::FunctionPlaceholder custom(1); + CustomCentroidBondForceImpl::FunctionPlaceholder distance(2); + CustomCentroidBondForceImpl::FunctionPlaceholder angle(3); + CustomCentroidBondForceImpl::FunctionPlaceholder dihedral(4); + map functions = customFunctions; + functions["distance"] = &distance; + functions["angle"] = ∠ + functions["dihedral"] = &dihedral; + ParsedExpression expression = Lepton::Parser::parse(force.getEnergyFunction(), functions); + map groups; + set variables; + for (int i = 0; i < force.getNumGroupsPerBond(); i++) { + stringstream name, x, y, z; + name << 'g' << (i+1); + x << 'x' << (i+1); + y << 'y' << (i+1); + z << 'z' << (i+1); + groups[name.str()] = i; + variables.insert(x.str()); + variables.insert(y.str()); + variables.insert(z.str()); + } + for (int i = 0; i < force.getNumGlobalParameters(); i++) + variables.insert(force.getGlobalParameterName(i)); + for (int i = 0; i < force.getNumPerBondParameters(); i++) + variables.insert(force.getPerBondParameterName(i)); + return ParsedExpression(replaceFunctions(expression.getRootNode(), groups, distances, angles, dihedrals, variables)).optimize(); +} + +ExpressionTreeNode CustomCentroidBondForceImpl::replaceFunctions(const ExpressionTreeNode& node, map groups, + map >& distances, map >& angles, map >& dihedrals, set& variables) { + const Operation& op = node.getOperation(); + if (op.getId() == Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("CustomCentroidBondForce: Unknown variable '"+op.getName()+"'"); + if (op.getId() != Operation::CUSTOM || (op.getName() != "distance" && op.getName() != "angle" && op.getName() != "dihedral")) + { + // This is not an angle or dihedral, so process its children. + + vector children; + for (int i = 0; i < (int) node.getChildren().size(); i++) + children.push_back(replaceFunctions(node.getChildren()[i], groups, distances, angles, dihedrals, variables)); + return ExpressionTreeNode(op.clone(), children); + } + const Operation::Custom& custom = static_cast(op); + + // Identify the groups this term is based on. + + int numArgs = custom.getNumArguments(); + vector indices(numArgs); + for (int i = 0; i < numArgs; i++) { + map::const_iterator iter = groups.find(node.getChildren()[i].getOperation().getName()); + if (iter == groups.end()) + throw OpenMMException("CustomCentroidBondForce: Unknown group '"+node.getChildren()[i].getOperation().getName()+"'"); + indices[i] = iter->second; + } + + // Select a name for the variable and add it to the appropriate map. + + stringstream variable; + if (numArgs == 2) + variable << "distance"; + else if (numArgs == 3) + variable << "angle"; + else + variable << "dihedral"; + for (int i = 0; i < numArgs; i++) + variable << indices[i]; + string name = variable.str(); + if (numArgs == 2) + distances[name] = indices; + else if (numArgs == 3) + angles[name] = indices; + else + dihedrals[name] = indices; + + // Return a new node that represents it as a simple variable. + + return ExpressionTreeNode(new Operation::Variable(name)); +} + +vector > CustomCentroidBondForceImpl::getBondedParticles() const { + vector > bonds; + for (int i = 0; i < owner.getNumBonds(); i++) { + vector groups; + vector parameters; + owner.getBondParameters(i, groups, parameters); + for (int j = 1; j < groups.size(); j++) + for (int k = 0; k < j; k++) + addBondsBetweenGroups(j, k, bonds); + } + return bonds; +} + +void CustomCentroidBondForceImpl::addBondsBetweenGroups(int group1, int group2, vector >& bonds) const { + vector atoms1; + vector atoms2; + vector weights; + owner.getGroupParameters(group1, atoms1, weights); + owner.getGroupParameters(group2, atoms2, weights); + for (int i = 0; i < atoms1.size(); i++) + for (int j = 0; j < atoms2.size(); j++) + bonds.push_back(make_pair(atoms1[i], atoms2[j])); +} + +void CustomCentroidBondForceImpl::updateParametersInContext(ContextImpl& context) { + kernel.getAs().copyParametersToContext(context, owner); +} + +void CustomCentroidBondForceImpl::computeNormalizedWeights(const CustomCentroidBondForce& force, const System& system, vector >& weights) { + int numGroups = force.getNumGroups(); + weights.resize(numGroups); + for (int i = 0; i < numGroups; i++) { + vector particles; + vector groupWeights; + force.getGroupParameters(i, particles, groupWeights); + int numParticles = particles.size(); + + // If weights were not specified, use particle masses. + + if (groupWeights.size() == 0) { + groupWeights.resize(numParticles); + for (int j = 0; j < numParticles; j++) + groupWeights[j] = system.getParticleMass(particles[j]); + } + + // Normalize the weights. + + double total = 0; + for (int j = 0; j < numParticles; j++) + total += groupWeights[j]; + if (total == 0.0) { + stringstream msg; + msg << "CustomCentroidBondForce: Weights for group "; + msg << i; + msg << " add to 0"; + throw OpenMMException(msg.str()); + } + weights[i].resize(numParticles); + for (int j = 0; j < numParticles; j++) + weights[i][j] = groupWeights[j]/total; + } +} diff --git a/openmmapi/src/CustomCompoundBondForceImpl.cpp b/openmmapi/src/CustomCompoundBondForceImpl.cpp index 30a3d1e657875faa39dcd926c46fd49fac08e86b..ebcfe8a6a92b98bc92a9747869d3bc6ae9f15926 100644 --- a/openmmapi/src/CustomCompoundBondForceImpl.cpp +++ b/openmmapi/src/CustomCompoundBondForceImpl.cpp @@ -136,24 +136,37 @@ ParsedExpression CustomCompoundBondForceImpl::prepareExpression(const CustomComp functions["dihedral"] = &dihedral; ParsedExpression expression = Lepton::Parser::parse(force.getEnergyFunction(), functions); map atoms; + set variables; for (int i = 0; i < force.getNumParticlesPerBond(); i++) { - stringstream name; + stringstream name, x, y, z; name << 'p' << (i+1); + x << 'x' << (i+1); + y << 'y' << (i+1); + z << 'z' << (i+1); atoms[name.str()] = i; + variables.insert(x.str()); + variables.insert(y.str()); + variables.insert(z.str()); } - return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals)).optimize(); + for (int i = 0; i < force.getNumGlobalParameters(); i++) + variables.insert(force.getGlobalParameterName(i)); + for (int i = 0; i < force.getNumPerBondParameters(); i++) + variables.insert(force.getPerBondParameterName(i)); + return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals, variables)).optimize(); } ExpressionTreeNode CustomCompoundBondForceImpl::replaceFunctions(const ExpressionTreeNode& node, map atoms, - map >& distances, map >& angles, map >& dihedrals) { + map >& distances, map >& angles, map >& dihedrals, set& variables) { const Operation& op = node.getOperation(); + if (op.getId() == Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("CustomCompoundBondForce: Unknown variable '"+op.getName()+"'"); if (op.getId() != Operation::CUSTOM || (op.getName() != "distance" && op.getName() != "angle" && op.getName() != "dihedral")) { // This is not an angle or dihedral, so process its children. vector children; for (int i = 0; i < (int) node.getChildren().size(); i++) - children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals)); + children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals, variables)); return ExpressionTreeNode(op.clone(), children); } const Operation::Custom& custom = static_cast(op); diff --git a/openmmapi/src/CustomExternalForce.cpp b/openmmapi/src/CustomExternalForce.cpp index ec3b7b851327fbeb55c036928812550f98436a50..b011d06b2e78af32caadb4e3a87cb91a764e0d49 100644 --- a/openmmapi/src/CustomExternalForce.cpp +++ b/openmmapi/src/CustomExternalForce.cpp @@ -119,3 +119,7 @@ ForceImpl* CustomExternalForce::createImpl() const { void CustomExternalForce::updateParametersInContext(Context& context) { dynamic_cast(getImplInContext(context)).updateParametersInContext(getContextImpl(context)); } + +bool CustomExternalForce::usesPeriodicBoundaryConditions() const { + return (energyExpression.find("periodicdistance") != string::npos); +} diff --git a/openmmapi/src/CustomHbondForceImpl.cpp b/openmmapi/src/CustomHbondForceImpl.cpp index 5873aa5f6762ba4690019cf9eb6d3e0d9634300a..e8d24086315137dc6e6f0e15ba8e52937dc3f1d0 100644 --- a/openmmapi/src/CustomHbondForceImpl.cpp +++ b/openmmapi/src/CustomHbondForceImpl.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -215,19 +215,28 @@ ParsedExpression CustomHbondForceImpl::prepareExpression(const CustomHbondForce& atoms["d1"] = 3; atoms["d2"] = 4; atoms["d3"] = 5; - return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals)).optimize(); + set variables; + for (int i = 0; i < force.getNumPerDonorParameters(); i++) + variables.insert(force.getPerDonorParameterName(i)); + for (int i = 0; i < force.getNumPerAcceptorParameters(); i++) + variables.insert(force.getPerAcceptorParameterName(i)); + for (int i = 0; i < force.getNumGlobalParameters(); i++) + variables.insert(force.getGlobalParameterName(i)); + return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals, variables)).optimize(); } ExpressionTreeNode CustomHbondForceImpl::replaceFunctions(const ExpressionTreeNode& node, map atoms, - map >& distances, map >& angles, map >& dihedrals) { + map >& distances, map >& angles, map >& dihedrals, set& variables) { const Operation& op = node.getOperation(); + if (op.getId() == Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("CustomHBondForce: Unknown variable '"+op.getName()+"'"); if (op.getId() != Operation::CUSTOM || op.getNumArguments() < 2) { // This is not an angle or dihedral, so process its children. vector children; for (int i = 0; i < (int) node.getChildren().size(); i++) - children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals)); + children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals, variables)); return ExpressionTreeNode(op.clone(), children); } const Operation::Custom& custom = static_cast(op); diff --git a/openmmapi/src/CustomManyParticleForceImpl.cpp b/openmmapi/src/CustomManyParticleForceImpl.cpp index 8adc531357a297afff9397fd03b42d4e77efa6c1..a330487e192a7be1fe43ed76dfe231ecc982fb58 100644 --- a/openmmapi/src/CustomManyParticleForceImpl.cpp +++ b/openmmapi/src/CustomManyParticleForceImpl.cpp @@ -165,24 +165,40 @@ ParsedExpression CustomManyParticleForceImpl::prepareExpression(const CustomMany functions["dihedral"] = &dihedral; ParsedExpression expression = Lepton::Parser::parse(force.getEnergyFunction(), functions); map atoms; + set variables; for (int i = 0; i < force.getNumParticlesPerSet(); i++) { - stringstream name; + stringstream name, x, y, z; name << 'p' << (i+1); + x << 'x' << (i+1); + y << 'y' << (i+1); + z << 'z' << (i+1); atoms[name.str()] = i; + variables.insert(x.str()); + variables.insert(y.str()); + variables.insert(z.str()); + for (int j = 0; j < force.getNumPerParticleParameters(); j++) { + stringstream param; + param << force.getPerParticleParameterName(j) << (i+1); + variables.insert(param.str()); + } } - return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals)).optimize(); + for (int i = 0; i < force.getNumGlobalParameters(); i++) + variables.insert(force.getGlobalParameterName(i)); + return ParsedExpression(replaceFunctions(expression.getRootNode(), atoms, distances, angles, dihedrals, variables)).optimize(); } ExpressionTreeNode CustomManyParticleForceImpl::replaceFunctions(const ExpressionTreeNode& node, map atoms, - map >& distances, map >& angles, map >& dihedrals) { + map >& distances, map >& angles, map >& dihedrals, set& variables) { const Operation& op = node.getOperation(); + if (op.getId() == Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("CustomManyParticleForce: Unknown variable '"+op.getName()+"'"); if (op.getId() != Operation::CUSTOM || (op.getName() != "distance" && op.getName() != "angle" && op.getName() != "dihedral")) { // This is not an angle or dihedral, so process its children. vector children; for (int i = 0; i < (int) node.getChildren().size(); i++) - children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals)); + children.push_back(replaceFunctions(node.getChildren()[i], atoms, distances, angles, dihedrals, variables)); return ExpressionTreeNode(op.clone(), children); } const Operation::Custom& custom = static_cast(op); diff --git a/openmmapi/src/Force.cpp b/openmmapi/src/Force.cpp index cae2ca21bef8409fece4cde300c64f033cc599cb..0ea9ee03dae86d4b6b1a65823fa8f1cad53aa1c4 100644 --- a/openmmapi/src/Force.cpp +++ b/openmmapi/src/Force.cpp @@ -61,6 +61,14 @@ ForceImpl& Force::getImplInContext(Context& context) { throw OpenMMException("getImplInContext: This Force is not present in the Context"); } +const ForceImpl& Force::getImplInContext(const Context& context) const { + const vector& impls = context.getImpl().getForceImpls(); + for (int i = 0; i < (int) impls.size(); i++) + if (&impls[i]->getOwner() == this) + return *impls[i]; + throw OpenMMException("getImplInContext: This Force is not present in the Context"); +} + ContextImpl& Force::getContextImpl(Context& context) { return context.getImpl(); } diff --git a/openmmapi/src/NonbondedForce.cpp b/openmmapi/src/NonbondedForce.cpp index 71df982333c170319464d57107fd2292ab93d03c..1a485f5e229ca0ed41722c0ac8c985ac58de4ff6 100644 --- a/openmmapi/src/NonbondedForce.cpp +++ b/openmmapi/src/NonbondedForce.cpp @@ -113,6 +113,10 @@ void NonbondedForce::setPMEParameters(double alpha, int nx, int ny, int nz) { this->nz = nz; } +void NonbondedForce::getPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const { + dynamic_cast(getImplInContext(context)).getPMEParameters(alpha, nx, ny, nz); +} + int NonbondedForce::addParticle(double charge, double sigma, double epsilon) { particles.push_back(ParticleInfo(charge, sigma, epsilon)); return particles.size()-1; diff --git a/openmmapi/src/NonbondedForceImpl.cpp b/openmmapi/src/NonbondedForceImpl.cpp index e86f10d4c6991d773a8015105e0a327fc292f6d8..36f50b18ab6dc8718b7d06c70a055ac01cff987d 100644 --- a/openmmapi/src/NonbondedForceImpl.cpp +++ b/openmmapi/src/NonbondedForceImpl.cpp @@ -278,3 +278,7 @@ double NonbondedForceImpl::calcDispersionCorrection(const System& system, const void NonbondedForceImpl::updateParametersInContext(ContextImpl& context) { kernel.getAs().copyParametersToContext(context, owner); } + +void NonbondedForceImpl::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + kernel.getAs().getPMEParameters(alpha, nx, ny, nz); +} diff --git a/platforms/cpu/include/CpuKernels.h b/platforms/cpu/include/CpuKernels.h index 36106da1e2a6d890220a0f1f703f3782451f1be1..9ac031800ecf6d48b9fe69da51cf711f5589ce7e 100644 --- a/platforms/cpu/include/CpuKernels.h +++ b/platforms/cpu/include/CpuKernels.h @@ -92,6 +92,46 @@ private: Kernel referenceKernel; }; +/** + * This kernel is invoked by HarmonicAngleForce to calculate the forces acting on the system and the energy of the system. + */ +class CpuCalcHarmonicAngleForceKernel : public CalcHarmonicAngleForceKernel { +public: + CpuCalcHarmonicAngleForceKernel(std::string name, const Platform& platform, CpuPlatform::PlatformData& data) : + CalcHarmonicAngleForceKernel(name, platform), data(data), angleIndexArray(NULL), angleParamArray(NULL) { + } + ~CpuCalcHarmonicAngleForceKernel(); + /** + * Initialize the kernel. + * + * @param system the System this kernel will be applied to + * @param force the HarmonicAngleForce this kernel will be used for + */ + void initialize(const System& system, const HarmonicAngleForce& force); + /** + * Execute the kernel to calculate the forces and/or energy. + * + * @param context the context in which to execute this kernel + * @param includeForces true if forces should be calculated + * @param includeEnergy true if the energy should be calculated + * @return the potential energy due to the force + */ + double execute(ContextImpl& context, bool includeForces, bool includeEnergy); + /** + * Copy changed parameters over to a context. + * + * @param context the context to copy parameters to + * @param force the HarmonicAngleForce to copy the parameters from + */ + void copyParametersToContext(ContextImpl& context, const HarmonicAngleForce& force); +private: + CpuPlatform::PlatformData& data; + int numAngles; + int **angleIndexArray; + RealOpenMM **angleParamArray; + CpuBondForce bondForce; +}; + /** * This kernel is invoked by PeriodicTorsionForce to calculate the forces acting on the system and the energy of the system. */ @@ -204,6 +244,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class PmeIO; CpuPlatform::PlatformData& data; @@ -220,6 +269,7 @@ private: CpuNeighborList* neighborList; CpuNonbondedForce* nonbonded; Kernel optimizedPme; + CpuBondForce bondForce; }; /** diff --git a/platforms/cpu/include/CpuLangevinDynamics.h b/platforms/cpu/include/CpuLangevinDynamics.h index 41610422922ea2fabfb1fe18dca59c93a6a2cfcd..2abe58139ca0b19cce7f9343f37105b5b746897b 100644 --- a/platforms/cpu/include/CpuLangevinDynamics.h +++ b/platforms/cpu/include/CpuLangevinDynamics.h @@ -1,5 +1,5 @@ -/* Portions copyright (c) 2013 Stanford University and Simbios. +/* Portions copyright (c) 2013-2015 Stanford University and Simbios. * Authors: Peter Eastman * Contributors: * @@ -37,6 +37,7 @@ class CpuLangevinDynamics : public ReferenceStochasticDynamics { public: class Update1Task; class Update2Task; + class Update3Task; /** * Constructor. * @@ -80,9 +81,21 @@ public: void updatePart2(int numberOfAtoms, std::vector& atomCoordinates, std::vector& velocities, std::vector& forces, std::vector& inverseMasses, std::vector& xPrime); + /** + * Third update + * + * @param numberOfAtoms number of atoms + * @param atomCoordinates atom coordinates + * @param velocities velocities + * @param inverseMasses inverse atom masses + */ + void updatePart3(int numberOfAtoms, std::vector& atomCoordinates, std::vector& velocities, + std::vector& inverseMasses, std::vector& xPrime); + private: void threadUpdate1(int threadIndex); void threadUpdate2(int threadIndex); + void threadUpdate3(int threadIndex); OpenMM::ThreadPool& threads; OpenMM::CpuRandom& random; std::vector threadRandom; diff --git a/platforms/cpu/include/CpuNeighborList.h b/platforms/cpu/include/CpuNeighborList.h index 2430f5f138a7646515a1acd85ff242dcbc9dcc24..7c585ebc94005fc0df50b700647f963550a20a41 100644 --- a/platforms/cpu/include/CpuNeighborList.h +++ b/platforms/cpu/include/CpuNeighborList.h @@ -35,6 +35,7 @@ #include "AlignedArray.h" #include "RealVec.h" #include "windowsExportCpu.h" +#include "openmm/internal/gmx_atomic.h" #include "openmm/internal/ThreadPool.h" #include #include @@ -74,6 +75,7 @@ private: int numAtoms; bool usePeriodic; float maxDistance; + gmx_atomic_t atomicCounter; }; } // namespace OpenMM diff --git a/platforms/cpu/sharedTarget/CMakeLists.txt b/platforms/cpu/sharedTarget/CMakeLists.txt index 5c9d782750478307659f2d074a2116745017ff13..c69f025fe02e61a657b40621527bac630e073b53 100644 --- a/platforms/cpu/sharedTarget/CMakeLists.txt +++ b/platforms/cpu/sharedTarget/CMakeLists.txt @@ -18,6 +18,6 @@ ENDFOREACH(file) ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME} ${PTHREADS_LIB}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_CPU_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_CPU_BUILDING_SHARED_LIBRARY") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) diff --git a/platforms/cpu/src/CpuCustomGBForce.cpp b/platforms/cpu/src/CpuCustomGBForce.cpp index ead738c6118098a996721f6ec68c4c3deedcb760..7d159840d0a2108a9097ca87a6920923f51fe97a 100644 --- a/platforms/cpu/src/CpuCustomGBForce.cpp +++ b/platforms/cpu/src/CpuCustomGBForce.cpp @@ -28,7 +28,7 @@ #include "SimTKOpenMMUtilities.h" #include "ReferenceForce.h" #include "CpuCustomGBForce.h" -#include "gmx_atomic.h" +#include "openmm/internal/gmx_atomic.h" using namespace OpenMM; using namespace std; diff --git a/platforms/cpu/src/CpuCustomManyParticleForce.cpp b/platforms/cpu/src/CpuCustomManyParticleForce.cpp index 553d6c2e445af152157521a3ce540fcbb935479c..5dd56e7e4c2241dbf9b7d20dffdac9be88547bea 100644 --- a/platforms/cpu/src/CpuCustomManyParticleForce.cpp +++ b/platforms/cpu/src/CpuCustomManyParticleForce.cpp @@ -32,7 +32,7 @@ #include "ReferenceTabulatedFunction.h" #include "openmm/internal/CustomManyParticleForceImpl.h" #include "lepton/CustomFunction.h" -#include "gmx_atomic.h" +#include "openmm/internal/gmx_atomic.h" using namespace OpenMM; using namespace std; diff --git a/platforms/cpu/src/CpuCustomNonbondedForce.cpp b/platforms/cpu/src/CpuCustomNonbondedForce.cpp index 71662ebdd88d906ac3410a0d4e6301301198d5c1..4711857d3c6d3369a259fc11142cc0bff6db9c22 100644 --- a/platforms/cpu/src/CpuCustomNonbondedForce.cpp +++ b/platforms/cpu/src/CpuCustomNonbondedForce.cpp @@ -28,7 +28,7 @@ #include "SimTKOpenMMUtilities.h" #include "ReferenceForce.h" #include "CpuCustomNonbondedForce.h" -#include "gmx_atomic.h" +#include "openmm/internal/gmx_atomic.h" using namespace OpenMM; using namespace std; diff --git a/platforms/cpu/src/CpuGBSAOBCForce.cpp b/platforms/cpu/src/CpuGBSAOBCForce.cpp index 8b6831f92ffb972a9e2ba470648b3b926dfb2bba..ef43dbf1d69c02ee45be9c526ff965a9ed1a1796 100644 --- a/platforms/cpu/src/CpuGBSAOBCForce.cpp +++ b/platforms/cpu/src/CpuGBSAOBCForce.cpp @@ -25,7 +25,7 @@ #include "CpuGBSAOBCForce.h" #include "SimTKOpenMMRealType.h" #include "openmm/internal/vectorize.h" -#include "gmx_atomic.h" +#include "openmm/internal/gmx_atomic.h" #include #include #include @@ -279,7 +279,7 @@ void CpuGBSAOBCForce::threadComputeForce(ThreadPool& threads, int threadIndex) { fvec4 r = sqrt(r2); fvec4 alpha2_ij = radii*bornRadii[atomJ]; fvec4 D_ij = r2/(4.0f*alpha2_ij); - fvec4 expTerm(expf(-D_ij[0]), expf(-D_ij[1]), expf(-D_ij[2]), expf(-D_ij[3])); + fvec4 expTerm = exp(-D_ij); fvec4 denominator2 = r2 + alpha2_ij*expTerm; fvec4 denominator = sqrt(denominator2); fvec4 Gpol = (partialChargeI*posJ[3])/denominator; diff --git a/platforms/cpu/src/CpuKernelFactory.cpp b/platforms/cpu/src/CpuKernelFactory.cpp index 3eccd82e36ca0dc5e11a265186c3777db95a4368..4aabd9a1e22a85f28365fef777c6cd85032ea025 100644 --- a/platforms/cpu/src/CpuKernelFactory.cpp +++ b/platforms/cpu/src/CpuKernelFactory.cpp @@ -41,6 +41,8 @@ KernelImpl* CpuKernelFactory::createKernelImpl(std::string name, const Platform& CpuPlatform::PlatformData& data = CpuPlatform::getPlatformData(context); if (name == CalcForcesAndEnergyKernel::Name()) return new CpuCalcForcesAndEnergyKernel(name, platform, data, context); + if (name == CalcHarmonicAngleForceKernel::Name()) + return new CpuCalcHarmonicAngleForceKernel(name, platform, data); if (name == CalcPeriodicTorsionForceKernel::Name()) return new CpuCalcPeriodicTorsionForceKernel(name, platform, data); if (name == CalcRBTorsionForceKernel::Name()) diff --git a/platforms/cpu/src/CpuKernels.cpp b/platforms/cpu/src/CpuKernels.cpp index a8bd8f973d1c804b7629863563531e35255e319f..1b5add793fcfc3b1776fe20bc78a3607175e55bc 100644 --- a/platforms/cpu/src/CpuKernels.cpp +++ b/platforms/cpu/src/CpuKernels.cpp @@ -30,6 +30,7 @@ * -------------------------------------------------------------------------- */ #include "CpuKernels.h" +#include "ReferenceAngleBondIxn.h" #include "ReferenceBondForce.h" #include "ReferenceConstraints.h" #include "ReferenceKernelFactory.h" @@ -47,6 +48,7 @@ #include "RealVec.h" #include "lepton/CompiledExpression.h" #include "lepton/CustomFunction.h" +#include "lepton/Operation.h" #include "lepton/Parser.h" #include "lepton/ParsedExpression.h" @@ -83,6 +85,17 @@ static ReferenceConstraints& extractConstraints(ContextImpl& context) { return *(ReferenceConstraints*) data->constraints; } +/** + * Make sure an expression doesn't use any undefined variables. + */ +static void validateVariables(const Lepton::ExpressionTreeNode& node, const set& variables) { + const Lepton::Operation& op = node.getOperation(); + if (op.getId() == Lepton::Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("Unknown variable in expression: "+op.getName()); + for (int i = 0; i < (int) node.getChildren().size(); i++) + validateVariables(node.getChildren()[i], variables); +} + /** * Compute the kinetic energy of the system, possibly shifting the velocities in time to account * for a leapfrog integrator. @@ -240,6 +253,64 @@ double CpuCalcForcesAndEnergyKernel::finishComputation(ContextImpl& context, boo return referenceKernel.getAs().finishComputation(context, includeForce, includeEnergy, groups, valid); } +CpuCalcHarmonicAngleForceKernel::~CpuCalcHarmonicAngleForceKernel() { + if (angleIndexArray != NULL) { + for (int i = 0; i < numAngles; i++) { + delete[] angleIndexArray[i]; + delete[] angleParamArray[i]; + } + delete[] angleIndexArray; + delete[] angleParamArray; + } +} + +void CpuCalcHarmonicAngleForceKernel::initialize(const System& system, const HarmonicAngleForce& force) { + numAngles = force.getNumAngles(); + angleIndexArray = new int*[numAngles]; + for (int i = 0; i < numAngles; i++) + angleIndexArray[i] = new int[3]; + angleParamArray = new RealOpenMM*[numAngles]; + for (int i = 0; i < numAngles; i++) + angleParamArray[i] = new RealOpenMM[2]; + for (int i = 0; i < numAngles; ++i) { + int particle1, particle2, particle3; + double angle, k; + force.getAngleParameters(i, particle1, particle2, particle3, angle, k); + angleIndexArray[i][0] = particle1; + angleIndexArray[i][1] = particle2; + angleIndexArray[i][2] = particle3; + angleParamArray[i][0] = (RealOpenMM) angle; + angleParamArray[i][1] = (RealOpenMM) k; + } + bondForce.initialize(system.getNumParticles(), numAngles, 3, angleIndexArray, data.threads); +} + +double CpuCalcHarmonicAngleForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { + vector& posData = extractPositions(context); + vector& forceData = extractForces(context); + RealOpenMM energy = 0; + ReferenceAngleBondIxn angleBond; + bondForce.calculateForce(posData, angleParamArray, forceData, includeEnergy ? &energy : NULL, angleBond); + return energy; +} + +void CpuCalcHarmonicAngleForceKernel::copyParametersToContext(ContextImpl& context, const HarmonicAngleForce& force) { + if (numAngles != force.getNumAngles()) + throw OpenMMException("updateParametersInContext: The number of angles has changed"); + + // Record the values. + + for (int i = 0; i < numAngles; ++i) { + int particle1, particle2, particle3; + double angle, k; + force.getAngleParameters(i, particle1, particle2, particle3, angle, k); + if (particle1 != angleIndexArray[i][0] || particle2 != angleIndexArray[i][1] || particle3 != angleIndexArray[i][2]) + throw OpenMMException("updateParametersInContext: The set of particles in an angle has changed"); + angleParamArray[i][0] = (RealOpenMM) angle; + angleParamArray[i][1] = (RealOpenMM) k; + } +} + CpuCalcPeriodicTorsionForceKernel::~CpuCalcPeriodicTorsionForceKernel() { if (torsionIndexArray != NULL) { for (int i = 0; i < numTorsions; i++) { @@ -467,6 +538,7 @@ void CpuCalcNonbondedForceKernel::initialize(const System& system, const Nonbond bonded14ParamArray[i][1] = static_cast(4.0*depth); bonded14ParamArray[i][2] = static_cast(charge); } + bondForce.initialize(system.getNumParticles(), num14, 2, bonded14IndexArray, data.threads); // Record other parameters. @@ -527,7 +599,7 @@ double CpuCalcNonbondedForceKernel::execute(ContextImpl& context, bool includeFo if (nonbondedMethod != NoCutoff) { // Determine whether we need to recompute the neighbor list. - double padding = 0.15*nonbondedCutoff; + double padding = 0.25*nonbondedCutoff; bool needRecompute = false; double closeCutoff2 = 0.25*padding*padding; double farCutoff2 = 0.5*padding*padding; @@ -599,9 +671,8 @@ double CpuCalcNonbondedForceKernel::execute(ContextImpl& context, bool includeFo } energy += nonbondedEnergy; if (includeDirect) { - ReferenceBondForce refBondForce; ReferenceLJCoulomb14 nonbonded14; - refBondForce.calculateForce(num14, bonded14IndexArray, posData, bonded14ParamArray, forceData, includeEnergy ? &energy : NULL, nonbonded14); + bondForce.calculateForce(posData, bonded14ParamArray, forceData, includeEnergy ? &energy : NULL, nonbonded14); if (data.isPeriodic) energy += dispersionCoefficient/(boxVectors[0][0]*boxVectors[1][1]*boxVectors[2][2]); } @@ -654,6 +725,19 @@ void CpuCalcNonbondedForceKernel::copyParametersToContext(ContextImpl& context, dispersionCoefficient = NonbondedForceImpl::calcDispersionCorrection(context.getSystem(), force); } +void CpuCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (nonbondedMethod != PME) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + if (useOptimizedPme) + optimizedPme.getAs().getPMEParameters(alpha, nx, ny, nz); + else { + alpha = ewaldAlpha; + nx = gridSize[0]; + ny = gridSize[1]; + nz = gridSize[2]; + } +} + CpuCalcCustomNonbondedForceKernel::CpuCalcCustomNonbondedForceKernel(string name, const Platform& platform, CpuPlatform::PlatformData& data) : CalcCustomNonbondedForceKernel(name, platform), data(data), forceCopy(NULL), neighborList(NULL), nonbonded(NULL) { } @@ -724,6 +808,14 @@ void CpuCalcCustomNonbondedForceKernel::initialize(const System& system, const C globalParameterNames.push_back(force.getGlobalParameterName(i)); globalParamValues[force.getGlobalParameterName(i)] = force.getGlobalParameterDefaultValue(i); } + set variables; + variables.insert("r"); + for (int i = 0; i < numParameters; i++) { + variables.insert(parameterNames[i]+"1"); + variables.insert(parameterNames[i]+"2"); + } + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); // Delete the custom functions. @@ -937,6 +1029,18 @@ void CpuCalcCustomGBForceKernel::initialize(const System& system, const CustomGB vector > valueGradientExpressions(force.getNumComputedValues()); vector valueExpressions; vector energyExpressions; + set particleVariables, pairVariables; + pairVariables.insert("r"); + particleVariables.insert("x"); + particleVariables.insert("y"); + particleVariables.insert("z"); + for (int i = 0; i < numPerParticleParameters; i++) { + particleVariables.insert(particleParameterNames[i]); + pairVariables.insert(particleParameterNames[i]+"1"); + pairVariables.insert(particleParameterNames[i]+"2"); + } + particleVariables.insert(globalParameterNames.begin(), globalParameterNames.end()); + pairVariables.insert(globalParameterNames.begin(), globalParameterNames.end()); for (int i = 0; i < force.getNumComputedValues(); i++) { string name, expression; CustomGBForce::ComputationType type; @@ -945,15 +1049,21 @@ void CpuCalcCustomGBForceKernel::initialize(const System& system, const CustomGB valueExpressions.push_back(ex.createCompiledExpression()); valueTypes.push_back(type); valueNames.push_back(name); - if (i == 0) + if (i == 0) { valueDerivExpressions[i].push_back(ex.differentiate("r").createCompiledExpression()); + validateVariables(ex.getRootNode(), pairVariables); + } else { valueGradientExpressions[i].push_back(ex.differentiate("x").createCompiledExpression()); valueGradientExpressions[i].push_back(ex.differentiate("y").createCompiledExpression()); valueGradientExpressions[i].push_back(ex.differentiate("z").createCompiledExpression()); for (int j = 0; j < i; j++) valueDerivExpressions[i].push_back(ex.differentiate(valueNames[j]).createCompiledExpression()); + validateVariables(ex.getRootNode(), particleVariables); } + particleVariables.insert(name); + pairVariables.insert(name+"1"); + pairVariables.insert(name+"2"); } // Parse the expressions for energy terms. @@ -975,10 +1085,12 @@ void CpuCalcCustomGBForceKernel::initialize(const System& system, const CustomGB energyGradientExpressions[i].push_back(ex.differentiate("x").createCompiledExpression()); energyGradientExpressions[i].push_back(ex.differentiate("y").createCompiledExpression()); energyGradientExpressions[i].push_back(ex.differentiate("z").createCompiledExpression()); + validateVariables(ex.getRootNode(), particleVariables); } else { energyDerivExpressions[i].push_back(ex.differentiate(valueNames[j]+"1").createCompiledExpression()); energyDerivExpressions[i].push_back(ex.differentiate(valueNames[j]+"2").createCompiledExpression()); + validateVariables(ex.getRootNode(), pairVariables); } } } diff --git a/platforms/cpu/src/CpuLangevinDynamics.cpp b/platforms/cpu/src/CpuLangevinDynamics.cpp index 576309ffcb7d135225b8d13c5147d0356c5999f6..5d51c66fb3b2bc49efb420080172f0fca6adbd9d 100644 --- a/platforms/cpu/src/CpuLangevinDynamics.cpp +++ b/platforms/cpu/src/CpuLangevinDynamics.cpp @@ -1,5 +1,5 @@ -/* Portions copyright (c) 2006-2013 Stanford University and Simbios. +/* Portions copyright (c) 2006-2015 Stanford University and Simbios. * Authors: Peter Eastman * Contributors: * @@ -49,6 +49,16 @@ public: CpuLangevinDynamics& owner; }; +class CpuLangevinDynamics::Update3Task : public ThreadPool::Task { +public: + Update3Task(CpuLangevinDynamics& owner) : owner(owner) { + } + void execute(ThreadPool& threads, int threadIndex) { + owner.threadUpdate3(threadIndex); + } + CpuLangevinDynamics& owner; +}; + CpuLangevinDynamics::CpuLangevinDynamics(int numberOfAtoms, RealOpenMM deltaT, RealOpenMM tau, RealOpenMM temperature, ThreadPool& threads, CpuRandom& random) : ReferenceStochasticDynamics(numberOfAtoms, deltaT, tau, temperature), threads(threads), random(random) { } @@ -92,6 +102,23 @@ void CpuLangevinDynamics::updatePart2(int numberOfAtoms, vector& atomCo threads.waitForThreads(); } +void CpuLangevinDynamics::updatePart3(int numberOfAtoms, vector& atomCoordinates, vector& velocities, + vector& inverseMasses, vector& xPrime) { + // Record the parameters for the threads. + + this->numberOfAtoms = numberOfAtoms; + this->atomCoordinates = &atomCoordinates[0]; + this->velocities = &velocities[0]; + this->inverseMasses = &inverseMasses[0]; + this->xPrime = &xPrime[0]; + + // Signal the threads to start running and wait for them to finish. + + Update3Task task(*this); + threads.execute(task); + threads.waitForThreads(); +} + void CpuLangevinDynamics::threadUpdate1(int threadIndex) { const RealOpenMM tau = getTau(); const RealOpenMM vscale = EXP(-getDeltaT()/tau); @@ -122,3 +149,16 @@ void CpuLangevinDynamics::threadUpdate2(int threadIndex) { } } } + +void CpuLangevinDynamics::threadUpdate3(int threadIndex) { + const RealOpenMM invStepSize = 1.0/getDeltaT(); + int start = threadIndex*numberOfAtoms/threads.getNumThreads(); + int end = (threadIndex+1)*numberOfAtoms/threads.getNumThreads(); + + for (int i = start; i < end; ++i) + if (inverseMasses[i] != 0.0) { + velocities[i] = (xPrime[i]-atomCoordinates[i])*invStepSize; + atomCoordinates[i] = xPrime[i]; + } +} + diff --git a/platforms/cpu/src/CpuNeighborList.cpp b/platforms/cpu/src/CpuNeighborList.cpp index 7c716a9fe00ba2fb3473207968e3c57f8c677cd2..d2da201e79f5387e02e2e547d8de1645f7f1e775 100644 --- a/platforms/cpu/src/CpuNeighborList.cpp +++ b/platforms/cpu/src/CpuNeighborList.cpp @@ -59,22 +59,25 @@ public: */ class CpuNeighborList::Voxels { public: - Voxels(int blockSize, float vsy, float vsz, float miny, float maxy, float minz, float maxz, const RealVec* periodicBoxVectors, bool usePeriodic) : - blockSize(blockSize), voxelSizeY(vsy), voxelSizeZ(vsz), miny(miny), maxy(maxy), minz(minz), maxz(maxz), periodicBoxVectors(periodicBoxVectors), usePeriodic(usePeriodic) { - periodicBoxSize[0] = (float) periodicBoxVectors[0][0]; - periodicBoxSize[1] = (float) periodicBoxVectors[1][1]; - periodicBoxSize[2] = (float) periodicBoxVectors[2][2]; - recipBoxSize[0] = (float) (1/periodicBoxVectors[0][0]); - recipBoxSize[1] = (float) (1/periodicBoxVectors[1][1]); - recipBoxSize[2] = (float) (1/periodicBoxVectors[2][2]); - triclinic = (periodicBoxVectors[0][1] != 0.0 || periodicBoxVectors[0][2] != 0.0 || - periodicBoxVectors[1][0] != 0.0 || periodicBoxVectors[1][2] != 0.0 || - periodicBoxVectors[2][0] != 0.0 || periodicBoxVectors[2][1] != 0.0); + Voxels(int blockSize, float vsy, float vsz, float miny, float maxy, float minz, float maxz, const RealVec* boxVectors, bool usePeriodic) : + blockSize(blockSize), voxelSizeY(vsy), voxelSizeZ(vsz), miny(miny), maxy(maxy), minz(minz), maxz(maxz), usePeriodic(usePeriodic) { + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + periodicBoxVectors[i][j] = (float) boxVectors[i][j]; + periodicBoxSize[0] = (float) boxVectors[0][0]; + periodicBoxSize[1] = (float) boxVectors[1][1]; + periodicBoxSize[2] = (float) boxVectors[2][2]; + recipBoxSize[0] = (float) (1/boxVectors[0][0]); + recipBoxSize[1] = (float) (1/boxVectors[1][1]); + recipBoxSize[2] = (float) (1/boxVectors[2][2]); + triclinic = (boxVectors[0][1] != 0.0 || boxVectors[0][2] != 0.0 || + boxVectors[1][0] != 0.0 || boxVectors[1][2] != 0.0 || + boxVectors[2][0] != 0.0 || boxVectors[2][1] != 0.0); if (usePeriodic) { - ny = (int) floorf(periodicBoxVectors[1][1]/voxelSizeY+0.5f); - nz = (int) floorf(periodicBoxVectors[2][2]/voxelSizeZ+0.5f); - voxelSizeY = periodicBoxVectors[1][1]/ny; - voxelSizeZ = periodicBoxVectors[2][2]/nz; + ny = (int) floorf(boxVectors[1][1]/voxelSizeY+0.5f); + nz = (int) floorf(boxVectors[2][2]/voxelSizeZ+0.5f); + voxelSizeY = boxVectors[1][1]/ny; + voxelSizeZ = boxVectors[2][2]/nz; } else { ny = max(1, (int) floorf((maxy-miny)/voxelSizeY+0.5f)); @@ -110,12 +113,10 @@ public: } /** - * Find the index of the first particle in voxel (y,z) whose x coordinate in >= the specified value. + * Find the index of the first particle in voxel (y,z) whose x coordinate is >= the specified value. */ - int findLowerBound(int y, int z, double x) const { + int findLowerBound(int y, int z, double x, int lower, int upper) const { const vector >& bin = bins[y][z]; - int lower = 0; - int upper = bin.size(); while (lower < upper) { int middle = (lower+upper)/2; if (bin[middle].first < x) @@ -127,12 +128,10 @@ public: } /** - * Find the index of the first particle in voxel (y,z) whose x coordinate in greater than the specified value. + * Find the index of the first particle in voxel (y,z) whose x coordinate is greater than the specified value. */ - int findUpperBound(int y, int z, double x) const { + int findUpperBound(int y, int z, double x, int lower, int upper) const { const vector >& bin = bins[y][z]; - int lower = 0; - int upper = bin.size(); while (lower < upper) { int middle = (lower+upper)/2; if (bin[middle].first > x) @@ -208,7 +207,7 @@ public: // Loop over voxels along the y axis. - int boxz = (int) floor((float) z/nz); + float boxz = floor((float) z/nz); int starty = centerVoxelIndex.y-dIndexY; int endy = centerVoxelIndex.y+dIndexY; float yoffset = (float) (usePeriodic ? boxz*periodicBoxVectors[2][1] : 0); @@ -225,7 +224,7 @@ public: voxelIndex.y = y; if (usePeriodic) voxelIndex.y = (y < 0 ? y+ny : (y >= ny ? y-ny : y)); - int boxy = (int) floor((float) y/ny); + float boxy = floor((float) y/ny); float xoffset = (float) (usePeriodic ? boxy*periodicBoxVectors[1][0]+boxz*periodicBoxVectors[2][0] : 0); // Identify the range of atoms within this bin we need to search. When using periodic boundary @@ -261,30 +260,34 @@ public: int numRanges; int rangeStart[2]; int rangeEnd[2]; - rangeStart[0] = findLowerBound(voxelIndex.y, voxelIndex.z, minx); + int binSize = bins[voxelIndex.y][voxelIndex.z].size(); + rangeStart[0] = findLowerBound(voxelIndex.y, voxelIndex.z, minx, 0, binSize); if (needPeriodic) { numRanges = 2; - rangeEnd[0] = findUpperBound(voxelIndex.y, voxelIndex.z, maxx); - if (rangeStart[0] > 0) { + rangeEnd[0] = findUpperBound(voxelIndex.y, voxelIndex.z, maxx, rangeStart[0], binSize); + if (rangeStart[0] > 0 && rangeEnd[0] < binSize) + numRanges = 1; + else if (rangeStart[0] > 0) { rangeStart[1] = 0; - rangeEnd[1] = min(findUpperBound(voxelIndex.y, voxelIndex.z, maxx-periodicBoxSize[0]), rangeStart[0]); + rangeEnd[1] = min(findUpperBound(voxelIndex.y, voxelIndex.z, maxx-periodicBoxSize[0], 0, rangeStart[0]), rangeStart[0]); } else { - rangeStart[1] = max(findLowerBound(voxelIndex.y, voxelIndex.z, minx+periodicBoxSize[0]), rangeEnd[0]); + rangeStart[1] = max(findLowerBound(voxelIndex.y, voxelIndex.z, minx+periodicBoxSize[0], rangeEnd[0], binSize), rangeEnd[0]); rangeEnd[1] = bins[voxelIndex.y][voxelIndex.z].size(); } } else { numRanges = 1; - rangeEnd[0] = findUpperBound(voxelIndex.y, voxelIndex.z, maxx); + rangeEnd[0] = findUpperBound(voxelIndex.y, voxelIndex.z, maxx, rangeStart[0], binSize); } bool periodicRectangular = (needPeriodic && !triclinic); // Loop over atoms and check to see if they are neighbors of this block. + const vector >& voxelBins = bins[voxelIndex.y][voxelIndex.z]; for (int range = 0; range < numRanges; range++) { for (int item = rangeStart[range]; item < rangeEnd[range]; item++) { - const int sortedIndex = bins[voxelIndex.y][voxelIndex.z][item].second; + const int sortedIndex = voxelBins[item].second; // Avoid duplicate entries. if (sortedIndex >= lastSortedIndex) @@ -361,7 +364,7 @@ private: int ny, nz; float periodicBoxSize[3], recipBoxSize[3]; bool triclinic; - const RealVec* periodicBoxVectors; + float periodicBoxVectors[3][3]; const bool usePeriodic; vector > > > bins; }; @@ -444,6 +447,7 @@ void CpuNeighborList::computeNeighborList(int numAtoms, const AlignedArray blockAtoms; vector blockAtomX(blockSize), blockAtomY(blockSize), blockAtomZ(blockSize); vector atomVoxelIndex; - for (int i = threadIndex; i < numBlocks; i += numThreads) { + while (true) { + int i = gmx_atomic_fetch_add(&atomicCounter, 1); + if (i >= numBlocks) + break; + // Find the atoms in this block and compute their bounding box. int firstIndex = blockSize*i; @@ -532,15 +540,25 @@ void CpuNeighborList::threadComputeNeighborList(ThreadPool& threads, int threadI // Record the exclusions for this block. + map atomFlags; for (int j = 0; j < atomsInBlock; j++) { const set& atomExclusions = (*exclusions)[sortedAtoms[firstIndex+j]]; char mask = 1<::const_iterator iter = atomExclusions.begin(); iter != atomExclusions.end(); ++iter) { + map::iterator thisAtomFlags = atomFlags.find(*iter); + if (thisAtomFlags == atomFlags.end()) + atomFlags[*iter] = mask; + else + thisAtomFlags->second |= mask; } } + int numNeighbors = blockNeighbors[i].size(); + for (int k = 0; k < numNeighbors; k++) { + int atomIndex = blockNeighbors[i][k]; + map::iterator thisAtomFlags = atomFlags.find(atomIndex); + if (thisAtomFlags != atomFlags.end()) + blockExclusions[i][k] |= thisAtomFlags->second; + } } } diff --git a/platforms/cpu/src/CpuNonbondedForce.cpp b/platforms/cpu/src/CpuNonbondedForce.cpp index 080543348f5ef1b23418e89bd7c87ffeee67141a..81be848e6268e131fe883a0ccf891603a42cb490 100644 --- a/platforms/cpu/src/CpuNonbondedForce.cpp +++ b/platforms/cpu/src/CpuNonbondedForce.cpp @@ -28,7 +28,7 @@ #include "CpuNonbondedForce.h" #include "ReferenceForce.h" #include "ReferencePME.h" -#include "gmx_atomic.h" +#include "openmm/internal/gmx_atomic.h" #include // In case we're using some primitive version of Visual Studio this will @@ -322,6 +322,14 @@ void CpuNonbondedForce::calculateDirectIxn(int numberOfAtoms, float* posq, const threads.execute(task); threads.waitForThreads(); + // Signal the threads to subtract the exclusions. + + if (ewald || pme) { + gmx_atomic_set(&counter, 0); + threads.resumeThreads(); + threads.waitForThreads(); + } + // Combine the energies from all the threads. if (totalEnergy != NULL) { @@ -354,28 +362,37 @@ void CpuNonbondedForce::threadComputeDirect(ThreadPool& threads, int threadIndex // Now subtract off the exclusions, since they were implicitly included in the reciprocal space sum. - for (int i = threadIndex; i < numberOfAtoms; i += numThreads) { - fvec4 posI((float) atomCoordinates[i][0], (float) atomCoordinates[i][1], (float) atomCoordinates[i][2], 0.0f); - for (set::const_iterator iter = exclusions[i].begin(); iter != exclusions[i].end(); ++iter) { - if (*iter > i) { - int j = *iter; - fvec4 deltaR; - fvec4 posJ((float) atomCoordinates[j][0], (float) atomCoordinates[j][1], (float) atomCoordinates[j][2], 0.0f); - float r2; - getDeltaR(posJ, posI, deltaR, r2, false, boxSize, invBoxSize); - float r = sqrtf(r2); - float inverseR = 1/r; - float chargeProd = ONE_4PI_EPS0*posq[4*i+3]*posq[4*j+3]; - float alphaR = alphaEwald*r; - float erfAlphaR = erf(alphaR); - if (erfAlphaR > 1e-6f) { - float dEdR = (float) (chargeProd * inverseR * inverseR * inverseR); - dEdR = (float) (dEdR * (erfAlphaR-TWO_OVER_SQRT_PI*alphaR*exp(-alphaR*alphaR))); - fvec4 result = deltaR*dEdR; - (fvec4(forces+4*i)-result).store(forces+4*i); - (fvec4(forces+4*j)+result).store(forces+4*j); - if (includeEnergy) - threadEnergy[threadIndex] -= chargeProd*inverseR*erfAlphaR; + threads.syncThreads(); + const int groupSize = max(1, numberOfAtoms/(10*numThreads)); + while (true) { + int start = gmx_atomic_fetch_add(reinterpret_cast(atomicCounter), groupSize); + if (start >= numberOfAtoms) + break; + int end = min(start+groupSize, numberOfAtoms); + for (int i = start; i < end; i++) { + fvec4 posI((float) atomCoordinates[i][0], (float) atomCoordinates[i][1], (float) atomCoordinates[i][2], 0.0f); + float scaledChargeI = (float) (ONE_4PI_EPS0*posq[4*i+3]); + for (set::const_iterator iter = exclusions[i].begin(); iter != exclusions[i].end(); ++iter) { + if (*iter > i) { + int j = *iter; + fvec4 deltaR; + fvec4 posJ((float) atomCoordinates[j][0], (float) atomCoordinates[j][1], (float) atomCoordinates[j][2], 0.0f); + float r2; + getDeltaR(posJ, posI, deltaR, r2, false, boxSize, invBoxSize); + float r = sqrtf(r2); + float alphaR = alphaEwald*r; + float erfAlphaR = erf(alphaR); + if (erfAlphaR > 1e-6f) { + float inverseR = 1/r; + float chargeProdOverR = scaledChargeI*posq[4*j+3]*inverseR; + float dEdR = chargeProdOverR*inverseR*inverseR; + dEdR = dEdR * (erfAlphaR-(float)TWO_OVER_SQRT_PI*alphaR*(float)exp(-alphaR*alphaR)); + fvec4 result = deltaR*dEdR; + (fvec4(forces+4*i)-result).store(forces+4*i); + (fvec4(forces+4*j)+result).store(forces+4*j); + if (includeEnergy) + threadEnergy[threadIndex] -= chargeProdOverR*erfAlphaR; + } } } } diff --git a/platforms/cpu/src/CpuPlatform.cpp b/platforms/cpu/src/CpuPlatform.cpp index ccd16414145fac141d0717cf8ab19d4ac77f6ebd..9e40ee7f5a81eab8eed7d67a6579fbad59ae727e 100644 --- a/platforms/cpu/src/CpuPlatform.cpp +++ b/platforms/cpu/src/CpuPlatform.cpp @@ -61,6 +61,7 @@ map CpuPlatform::contextData; CpuPlatform::CpuPlatform() { CpuKernelFactory* factory = new CpuKernelFactory(); registerKernelFactory(CalcForcesAndEnergyKernel::Name(), factory); + registerKernelFactory(CalcHarmonicAngleForceKernel::Name(), factory); registerKernelFactory(CalcPeriodicTorsionForceKernel::Name(), factory); registerKernelFactory(CalcRBTorsionForceKernel::Name(), factory); registerKernelFactory(CalcNonbondedForceKernel::Name(), factory); diff --git a/platforms/cpu/src/CpuSETTLE.cpp b/platforms/cpu/src/CpuSETTLE.cpp index 5fe2cd5f26c66d706fd08ebb62b81a1859e7dcf1..cb95118a5f820a114c256847060190378d9de7f1 100644 --- a/platforms/cpu/src/CpuSETTLE.cpp +++ b/platforms/cpu/src/CpuSETTLE.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,6 +30,7 @@ * -------------------------------------------------------------------------- */ #include "CpuSETTLE.h" +#include "openmm/internal/gmx_atomic.h" using namespace OpenMM; using namespace std; @@ -39,10 +40,14 @@ public: ApplyToPositionsTask(vector& atomCoordinates, vector& atomCoordinatesP, vector& inverseMasses, RealOpenMM tolerance, vector& threadSettle) : atomCoordinates(atomCoordinates), atomCoordinatesP(atomCoordinatesP), inverseMasses(inverseMasses), tolerance(tolerance), threadSettle(threadSettle) { + gmx_atomic_set(&atomicCounter, 0); } void execute(ThreadPool& threads, int threadIndex) { - if (threadIndex < threadSettle.size()) { - threadSettle[threadIndex]->apply(atomCoordinates, atomCoordinatesP, inverseMasses, tolerance); + while (true) { + int index = gmx_atomic_fetch_add(&atomicCounter, 1); + if (index >= threadSettle.size()) + break; + threadSettle[index]->apply(atomCoordinates, atomCoordinatesP, inverseMasses, tolerance); } } vector& atomCoordinates; @@ -50,6 +55,7 @@ public: vector& inverseMasses; RealOpenMM tolerance; vector& threadSettle; + gmx_atomic_t atomicCounter; }; class CpuSETTLE::ApplyToVelocitiesTask : public ThreadPool::Task { @@ -57,10 +63,14 @@ public: ApplyToVelocitiesTask(vector& atomCoordinates, vector& velocities, vector& inverseMasses, RealOpenMM tolerance, vector& threadSettle) : atomCoordinates(atomCoordinates), velocities(velocities), inverseMasses(inverseMasses), tolerance(tolerance), threadSettle(threadSettle) { + gmx_atomic_set(&atomicCounter, 0); } void execute(ThreadPool& threads, int threadIndex) { - if (threadIndex < threadSettle.size()) { - threadSettle[threadIndex]->applyToVelocities(atomCoordinates, velocities, inverseMasses, tolerance); + while (true) { + int index = gmx_atomic_fetch_add(&atomicCounter, 1); + if (index >= threadSettle.size()) + break; + threadSettle[index]->applyToVelocities(atomCoordinates, velocities, inverseMasses, tolerance); } } vector& atomCoordinates; @@ -68,17 +78,18 @@ public: vector& inverseMasses; RealOpenMM tolerance; vector& threadSettle; + gmx_atomic_t atomicCounter; }; CpuSETTLE::CpuSETTLE(const System& system, const ReferenceSETTLEAlgorithm& settle, ThreadPool& threads) : threads(threads) { - int numThreads = threads.getNumThreads(); + int numBlocks = 10*threads.getNumThreads(); int numClusters = settle.getNumClusters(); vector mass(system.getNumParticles()); for (int i = 0; i < system.getNumParticles(); i++) mass[i] = system.getParticleMass(i); - for (int i = 0; i < numThreads; i++) { - int start = i*numClusters/numThreads; - int end = (i+1)*numClusters/numThreads; + for (int i = 0; i < numBlocks; i++) { + int start = i*numClusters/numBlocks; + int end = (i+1)*numClusters/numBlocks; if (start != end) { int numThreadClusters = end-start; vector atom1(numThreadClusters), atom2(numThreadClusters), atom3(numThreadClusters); diff --git a/platforms/cpu/staticTarget/CMakeLists.txt b/platforms/cpu/staticTarget/CMakeLists.txt index cd2c826fdb509205577d647f6cd83978ad2fd369..2aa2b056d16c9c5f418262bb30c3766a24f34e01 100644 --- a/platforms/cpu/staticTarget/CMakeLists.txt +++ b/platforms/cpu/staticTarget/CMakeLists.txt @@ -17,6 +17,6 @@ ADD_LIBRARY(${STATIC_TARGET} STATIC ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${STATIC_TARGET} ${OPENMM_LIBRARY_NAME}_static ${PTHREADS_LIB_STATIC}) #-DPTW32_STATIC_LIB only works for the windows pthreads. -SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_CPU_BUILDING_STATIC_LIBRARY -DPTW32_STATIC_LIB") +SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_CPU_BUILDING_STATIC_LIBRARY -DPTW32_STATIC_LIB") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${STATIC_TARGET}) diff --git a/platforms/cpu/tests/CMakeLists.txt b/platforms/cpu/tests/CMakeLists.txt index 318e101589748b0e7a688a7cd325af87d83003df..79f5d7a9732c374d420ecc4f1c1208694dc5b8a8 100644 --- a/platforms/cpu/tests/CMakeLists.txt +++ b/platforms/cpu/tests/CMakeLists.txt @@ -23,7 +23,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ELSE (OPENMM_BUILD_SHARED_LIB) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${STATIC_TARGET}) ENDIF (OPENMM_BUILD_SHARED_LIB) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/platforms/cpu/tests/CpuTests.h b/platforms/cpu/tests/CpuTests.h new file mode 100644 index 0000000000000000000000000000000000000000..58e74c228efea0f0fcba571f0847228ef75d9a12 --- /dev/null +++ b/platforms/cpu/tests/CpuTests.h @@ -0,0 +1,46 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "CpuPlatform.h" +#include +#include + +OpenMM::CpuPlatform platform; + +void initializeTests(int argc, char* argv[]) { + if (!OpenMM::CpuPlatform::isProcessorSupported()) { + std::cout << "CPU is not supported. Exiting." << std::endl; + exit(0); + } +} diff --git a/platforms/cpu/tests/TestCpuCheckpoints.cpp b/platforms/cpu/tests/TestCpuCheckpoints.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8751111585599979bed13c45921e55efa77577b3 --- /dev/null +++ b/platforms/cpu/tests/TestCpuCheckpoints.cpp @@ -0,0 +1,99 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "CpuTests.h" +#include "TestCheckpoints.h" + +void testCheckpoint() { + const int numParticles = 100; + const double boxSize = 5.0; + const double temperature = 200.0; + System system; + system.addForce(new AndersenThermostat(0.0, 100.0)); + NonbondedForce* nonbonded = new NonbondedForce(); + system.addForce(nonbonded); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); + bool clash; + do { + clash = false; + positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + for (int j = 0; j < i; j++) { + Vec3 delta = positions[i]-positions[j]; + if (sqrt(delta.dot(delta)) < 0.1) + clash = true; + } + } while (clash); + } + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + context.setParameter(AndersenThermostat::Temperature(), temperature); + + // Run for a little while. + + integrator.step(100); + + // Record the current state and make a checkpoint. + + State s1 = context.getState(State::Positions | State::Velocities | State::Parameters); + stringstream stream1(ios_base::out | ios_base::in | ios_base::binary); + context.createCheckpoint(stream1); + + // Continue the simulation for a few more steps and record the state again. + + integrator.step(10); + State s2 = context.getState(State::Positions | State::Velocities | State::Parameters); + + // Restore from the checkpoint and see if everything gets restored correctly. + + context.setPeriodicBoxVectors(Vec3(2*boxSize, 0, 0), Vec3(0, 2*boxSize, 0), Vec3(0, 0, 2*boxSize)); + context.setParameter(AndersenThermostat::Temperature(), temperature+10); + context.loadCheckpoint(stream1); + State s3 = context.getState(State::Positions | State::Velocities | State::Parameters); + compareStates(s1, s3); + + // Now simulate from there and see if the trajectory is identical. + + integrator.step(10); + State s4 = context.getState(State::Positions | State::Velocities | State::Parameters); + compareStates(s2, s4); +} + +void runPlatformTests() { + testCheckpoint(); +} diff --git a/platforms/cpu/tests/TestCpuCustomGBForce.cpp b/platforms/cpu/tests/TestCpuCustomGBForce.cpp index 6bdaf72d7b93b64b2dd91d6756dc525421a13a66..8d3b307e34c9da6b28aebc88be233af4ae189e5e 100644 --- a/platforms/cpu/tests/TestCpuCustomGBForce.cpp +++ b/platforms/cpu/tests/TestCpuCustomGBForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,454 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of CustomGBForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/CustomGBForce.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/GBVIForce.h" -#include "openmm/OpenMMException.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -void testOBC(GBSAOBCForce::NonbondedMethod obcMethod, CustomGBForce::NonbondedMethod customMethod) { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - const double cutoff = 2.0; - CpuPlatform platform; - - // Create two systems: one with a GBSAOBCForce, and one using a CustomGBForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - GBSAOBCForce* obc = new GBSAOBCForce(); - CustomGBForce* custom = new CustomGBForce(); - obc->setCutoffDistance(cutoff); - custom->setCutoffDistance(cutoff); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("solventDielectric", obc->getSolventDielectric()); - custom->addGlobalParameter("soluteDielectric", obc->getSoluteDielectric()); - custom->addComputedValue("I", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=I*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935485*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - string invCutoffString = ""; - if (obcMethod != GBSAOBCForce::NoCutoff) { - stringstream s; - s<<(1.0/cutoff); - invCutoffString = s.str(); - } - custom->addEnergyTerm("138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2*("+invCutoffString+"-1/f);" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - obc->addParticle(1.0, 0.2, 0.5); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.5); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - obc->addParticle(1.0, 0.2, 0.8); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.8); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - obc->setNonbondedMethod(obcMethod); - custom->setNonbondedMethod(customMethod); - standardSystem.addForce(obc); - customSystem.addForce(custom); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - context1.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - context2.setVelocities(velocities); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } - - // Try changing the particle parameters and make sure it's still correct. - - for (int i = 0; i < numMolecules/2; i++) { - obc->setParticleParameters(2*i, 1.1, 0.3, 0.6); - params[0] = 1.1; - params[1] = 0.3; - params[2] = 0.6; - custom->setParticleParameters(2*i, params); - obc->setParticleParameters(2*i+1, -1.1, 0.2, 0.4); - params[0] = -1.1; - params[1] = 0.2; - params[2] = 0.4; - custom->setParticleParameters(2*i+1, params); - } - obc->updateParametersInContext(context1); - custom->updateParametersInContext(context2); - state1 = context1.getState(State::Forces | State::Energy); - state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testMembrane() { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - CpuPlatform platform; - - // Create a system with an implicit membrane. - - System system; - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - CustomGBForce* custom = new CustomGBForce(); - custom->setCutoffDistance(2.0); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("thickness", 3); - custom->addGlobalParameter("solventDielectric", 78.3); - custom->addGlobalParameter("soluteDielectric", 1); - custom->addComputedValue("Imol", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("Imem", "(1/radius+2*log(2)/thickness)/(1+exp(7.2*(abs(z)+radius-0.5*thickness)))", CustomGBForce::SingleParticle); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=max(Imol,Imem)*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - custom->addEnergyTerm("-138.935456*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - system.addForce(custom); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-2; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); -} - -void testTabulatedFunction() { - CpuPlatform platform; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "0", CustomGBForce::ParticlePair); - force->addEnergyTerm("fn(r)+1", CustomGBForce::ParticlePair); - force->addParticle(vector()); - force->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(std::sin(0.25*i)); - force->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -std::cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } -} - -void testMultipleChainRules() { - CpuPlatform platform; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "2*r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+1", CustomGBForce::SingleParticle); - force->addComputedValue("c", "2*b+a", CustomGBForce::SingleParticle); - force->addEnergyTerm("0.1*a+1*b+10*c", CustomGBForce::SingleParticle); // 0.1*(2*r) + 2*r+1 + 10*(3*a+2) = 0.2*r + 2*r+1 + 40*r+20+20*r = 62.2*r+21 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 5; i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(124.4, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-124.4, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(2*(62.2*i+21), state.getPotentialEnergy(), 0.02); - } -} - -void testPositionDependence() { - CpuPlatform platform; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+x*y", CustomGBForce::SingleParticle); - force->addEnergyTerm("b*z", CustomGBForce::SingleParticle); - force->addEnergyTerm("b1+b2", CustomGBForce::ParticlePair); // = 2*r+x1*y1+x2*y2 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - vector forces(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < 5; i++) { - positions[0] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - positions[1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - Vec3 delta = positions[0]-positions[1]; - double r = sqrt(delta.dot(delta)); - double energy = 2*r+positions[0][0]*positions[0][1]+positions[1][0]*positions[1][1]; - for (int j = 0; j < 2; j++) - energy += positions[j][2]*(r+positions[j][0]*positions[j][1]); - Vec3 force1(-(1+positions[0][2])*delta[0]/r-(1+positions[0][2])*positions[0][1]-(1+positions[1][2])*delta[0]/r, - -(1+positions[0][2])*delta[1]/r-(1+positions[0][2])*positions[0][0]-(1+positions[1][2])*delta[1]/r, - -(1+positions[0][2])*delta[2]/r-(r+positions[0][0]*positions[0][1])-(1+positions[1][2])*delta[2]/r); - Vec3 force2((1+positions[0][2])*delta[0]/r+(1+positions[1][2])*delta[0]/r-(1+positions[1][2])*positions[1][1], - (1+positions[0][2])*delta[1]/r+(1+positions[1][2])*delta[1]/r-(1+positions[1][2])*positions[1][0], - (1+positions[0][2])*delta[2]/r+(1+positions[1][2])*delta[2]/r-(r+positions[1][0]*positions[1][1])); - ASSERT_EQUAL_VEC(force1, forces[0], 1e-4); - ASSERT_EQUAL_VEC(force2, forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(2), positions3(2); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); - } -} - -void testExclusions() { - CpuPlatform platform; - for (int i = 3; i < 4; i++) { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", i < 2 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addEnergyTerm("a", CustomGBForce::SingleParticle); - force->addEnergyTerm("(1+a1+a2)*r", i%2 == 0 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addParticle(vector()); - force->addParticle(vector()); - force->addExclusion(0, 1); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f, energy; - switch (i) - { - case 0: // e = 0 - f = 0; - energy = 0; - break; - case 1: // e = r - f = 1; - energy = 1; - break; - case 2: // e = 2r - f = 2; - energy = 2; - break; - case 3: // e = 3r + 2r^2 - f = 7; - energy = 5; - break; - default: - ASSERT(false); - } - ASSERT_EQUAL_VEC(Vec3(f, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-f, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = stepSize/norm; - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/stepSize, 1e-3*abs(state.getPotentialEnergy())); - } -} +#include "CpuTests.h" +#include "TestCustomGBForce.h" -int main() { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testOBC(GBSAOBCForce::NoCutoff, CustomGBForce::NoCutoff); - testOBC(GBSAOBCForce::CutoffNonPeriodic, CustomGBForce::CutoffNonPeriodic); - testOBC(GBSAOBCForce::CutoffPeriodic, CustomGBForce::CutoffPeriodic); - testMembrane(); - testTabulatedFunction(); - testMultipleChainRules(); - testPositionDependence(); - testExclusions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuCustomManyParticleForce.cpp b/platforms/cpu/tests/TestCpuCustomManyParticleForce.cpp index 03a6f803ce82480288ddbc47bbb55253050ad3d7..ae8f595bc9fec2771b83100c64ad6dad1ea0e597 100644 --- a/platforms/cpu/tests/TestCpuCustomManyParticleForce.cpp +++ b/platforms/cpu/tests/TestCpuCustomManyParticleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,713 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CPU implementation of CustomManyParticleForce. - */ +#include "CpuTests.h" +#include "TestCustomManyParticleForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/CustomManyParticleForce.h" -#include "openmm/System.h" -#include "openmm/TabulatedFunction.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -Vec3 computeDelta(const Vec3& pos1, const Vec3& pos2, bool periodic, const Vec3* periodicBoxVectors) { - Vec3 diff = pos1-pos2; - if (periodic) { - diff -= periodicBoxVectors[2]*floor(diff[2]/periodicBoxVectors[2][2]+0.5); - diff -= periodicBoxVectors[1]*floor(diff[1]/periodicBoxVectors[1][1]+0.5); - diff -= periodicBoxVectors[0]*floor(diff[0]/periodicBoxVectors[0][0]+0.5); - } - return diff; -} - -void validateAxilrodTeller(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize, bool triclinic) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - Vec3 boxVectors[3]; - if (triclinic) { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0.2*boxSize, boxSize, 0); - boxVectors[2] = Vec3(-0.3*boxSize, -0.1*boxSize, boxSize); - } - else { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0, boxSize, 0); - boxVectors[2] = Vec3(0, 0, boxSize); - } - system.setDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); - system.addForce(force); - VerletIntegrator integrator(0.001); - CpuPlatform platform; - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double c = context.getParameter("C"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - bool periodic = (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic); - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = computeDelta(positions[p2], positions[p1], periodic, boxVectors); - Vec3 d13 = computeDelta(positions[p3], positions[p1], periodic, boxVectors); - Vec3 d23 = computeDelta(positions[p3], positions[p2], periodic, boxVectors); - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - double rprod = r12*r13*r23; - expectedEnergy += c*(1+3*ctheta1*ctheta2*ctheta3)/(rprod*rprod*rprod); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void validateStillingerWeber(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator(0.001); - CpuPlatform platform; - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double L = context.getParameter("L"); - double eps = context.getParameter("eps"); - double a = context.getParameter("a"); - double gamma = context.getParameter("gamma"); - double sigma = context.getParameter("sigma"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - Vec3 d23 = positions[p3]-positions[p2]; - if (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic) { - for (int j = 0; j < 3; j++) { - d12[j] -= floor(d12[j]/boxSize+0.5f)*boxSize; - d13[j] -= floor(d13[j]/boxSize+0.5f)*boxSize; - d23[j] -= floor(d23[j]/boxSize+0.5f)*boxSize; - } - } - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - expectedEnergy += L*eps*(ctheta1+1.0/3.0)*(ctheta1+1.0/3.0)*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma)); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void testNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - int sets[4][3] = {{0,1,2}, {1,2,3}, {2,3,0}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(1.55); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - int sets[7][3] = {{0,1,2}, {0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,2,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[7]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testPeriodic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[5][3] = {{0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, false); -} - -void testTriclinic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[4][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, true); -} - -void testExclusions() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - force->addExclusion(0, 2); - force->addExclusion(0, 3); - int sets[5][3] = {{0,1,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testAllTerms() { - int numParticles = 4; - CpuPlatform platform; - - // Create a system with a CustomManyParticleForce. - - System system1; - CustomManyParticleForce* force1 = new CustomManyParticleForce(4, - "distance(p1,p2)+angle(p1,p4,p3)+dihedral(p1,p3,p2,p4)+x1+y4+z3"); - system1.addForce(force1); - vector params; - for (int i = 0; i < numParticles; i++) { - system1.addParticle(1.0); - force1->addParticle(params, i); - } - set filter; - filter.insert(0); - force1->setTypeFilter(0, filter); - filter.clear(); - filter.insert(1); - force1->setTypeFilter(1, filter); - filter.clear(); - filter.insert(3); - force1->setTypeFilter(2, filter); - filter.clear(); - filter.insert(2); - force1->setTypeFilter(3, filter); - - // Create a system that use a CustomCompoundBondForce to compute exactly the same interactions. - - System system2; - CustomCompoundBondForce* force2 = new CustomCompoundBondForce(4, - "distance(p1,p2)+angle(p1,p3,p4)+dihedral(p1,p4,p2,p3)+x1+y3+z4"); - system2.addForce(force2); - vector particles; - particles.push_back(0); - particles.push_back(1); - particles.push_back(2); - particles.push_back(3); - force2->addBond(particles, params); - for (int i = 0; i < numParticles; i++) - system2.addParticle(1.0); - - // Create contexts for both of them. - - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system1, integrator1, platform); - Context context2(system2, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - - // See if they produce identical forces and energies. - - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state2.getPotentialEnergy(), state1.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state2.getForces()[i], state1.getForces()[i], 1e-4); -} - -void testParameters() { - // Create a system. - - int numParticles = 5; - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "C*scale1*scale2*scale3*(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))"); - force->addGlobalParameter("C", 2.0); - force->addPerParticleParameter("scale"); - vector params(1); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - params[0] = i+1; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - CpuPlatform platform; - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 2.0*(i+1)*(j+1)*(k+1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); - - // Modify the parameters. - - context.setParameter("C", 3.5); - for (int i = 0; i < numParticles; i++) { - params[0] = 0.5*i-0.1; - force->setParticleParameters(i, params, 0); - } - force->updateParametersInContext(context); - - // See if the energy is still correct. - - state = context.getState(State::Energy); - expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 3.5*(0.5*i-0.1)*(0.5*j-0.1)*(0.5*k-0.1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTabulatedFunctions() { - int numParticles = 5; - - // Create two tabulated functions. - - vector values; - values.push_back(0.0); - values.push_back(50.0); - Continuous1DFunction* f1 = new Continuous1DFunction(values, 0, 100); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector c(numParticles); - for (int i = 0; i < numParticles; i++) - c[i] = genrand_real2(sfmt); - values.resize(numParticles*numParticles*numParticles); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < numParticles; j++) - for (int k = 0; k < numParticles; k++) - values[i+numParticles*j+numParticles*numParticles*k] = c[i]+c[j]+c[k]; - Discrete3DFunction* f2 = new Discrete3DFunction(numParticles, numParticles, numParticles, values); - - // Create a system. - - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "f1(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))*f2(atom1, atom2, atom3)"); - force->addPerParticleParameter("atom"); - force->addTabulatedFunction("f1", f1); - force->addTabulatedFunction("f2", f2); - vector params(1); - vector positions; - for (int i = 0; i < numParticles; i++) { - params[0] = i; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - CpuPlatform platform; - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 0.5*(r12+r13+r23)*(c[i]+c[j]+c[k]); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTypeFilters() { - // Create a system. - - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CustomManyParticleForce* force = new CustomManyParticleForce(3, "c1*(distance(p1,p2)+distance(p1,p3))"); - force->addPerParticleParameter("c"); - double c[] = {1.0, 2.0, 1.3, 1.5, -2.1}; - int type[] = {0, 1, 0, 1, 5}; - vector params(1); - for (int i = 0; i < 5; i++) { - params[0] = c[i]; - force->addParticle(params, type[i]); - } - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - set f1, f2; - f1.insert(0); - f2.insert(1); - f2.insert(5); - force->setTypeFilter(0, f1); - force->setTypeFilter(1, f2); - force->setTypeFilter(2, f2); - system.addForce(force); - VerletIntegrator integrator(0.001); - CpuPlatform platform; - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - int sets[6][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {2,1,3}, {2,1,4}, {2,3,4}}; - for (int i = 0; i < 6; i++) { - int p1 = sets[i][0]; - int p2 = sets[i][1]; - int p3 = sets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - expectedEnergy += c[p1]*(r12+r13); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 3.0; - double spacing = boxSize/gridSize; - CpuPlatform platform; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(0.6); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -void testCentralParticleModeNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[12][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {2,0,3}, {2, 1, 3}, {3,0,1}, {3,0,2}, {3,1,2}}; - vector expectedSets(&sets[0], &sets[12]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(0.155); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[8][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[8]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 2.0; - double spacing = boxSize/gridSize; - CpuPlatform platform; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.8*0.23925); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -int main() { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testNoCutoff(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testExclusions(); - testAllTerms(); - testParameters(); - testTabulatedFunctions(); - testTypeFilters(); - testLargeSystem(); - testCentralParticleModeNoCutoff(); - testCentralParticleModeCutoff(); - testCentralParticleModeLargeSystem(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuCustomNonbondedForce.cpp b/platforms/cpu/tests/TestCpuCustomNonbondedForce.cpp index fed1bc2b0becdd68760b2ce601ca184aed570823..0c82130e14d2cc7766d0055be810428f37d24afd 100644 --- a/platforms/cpu/tests/TestCpuCustomNonbondedForce.cpp +++ b/platforms/cpu/tests/TestCpuCustomNonbondedForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,962 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of CustomNonbondedForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "CpuPlatform.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "openmm/CustomNonbondedForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -CpuPlatform platform; - -const double TOL = 1e-5; - -void testSimpleExpression() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("-0.1*r^3"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = 0.1*3*(2*2); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(-0.1*(2*2*2), state.getPotentialEnergy(), TOL); -} - -void testParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("scale*a*(r*b)^3; a=a1*a2; b=c+b1+b2"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addGlobalParameter("scale", 3.0); - forceField->addGlobalParameter("c", -1.0); - vector params(2); - params[0] = 1.5; - params[1] = 2.0; - forceField->addParticle(params); - params[0] = 2.0; - params[1] = 3.0; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - context.setParameter("scale", 1.0); - context.setParameter("c", 0.0); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = -3.0*3*5.0*(10*10); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(3.0*(10*10*10), state.getPotentialEnergy(), TOL); - - // Try changing the global parameters and make sure it's still correct. - - context.setParameter("scale", 1.5); - context.setParameter("c", 1.0); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*3.0*3*6.0*(12*12); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*3.0*(12*12*12), state.getPotentialEnergy(), TOL); - - // Try changing the per-particle parameters and make sure it's still correct. - - params[0] = 1.6; - params[1] = 2.1; - forceField->setParticleParameters(0, params); - params[0] = 1.9; - params[1] = 2.8; - forceField->setParticleParameters(1, params); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*1.6*1.9*3*5.9*(11.8*11.8); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*1.6*1.9*(11.8*11.8*11.8), state.getPotentialEnergy(), TOL); -} - -void testExclusions() { - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("a*r; a=a1+a2"); - nonbonded->addPerParticleParameter("a"); - vector params(1); - vector positions(4); - for (int i = 0; i < 4; i++) { - system.addParticle(1.0); - params[0] = i+1; - nonbonded->addParticle(params); - positions[i] = Vec3(i, 0, 0); - } - nonbonded->addExclusion(0, 1); - nonbonded->addExclusion(1, 2); - nonbonded->addExclusion(2, 3); - nonbonded->addExclusion(0, 2); - nonbonded->addExclusion(1, 3); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(1+4, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-(1+4), 0, 0), forces[3], TOL); - ASSERT_EQUAL_TOL((1+4)*3.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - forceField->setCutoffDistance(2.5); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -1, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2.0+1.0, state.getPotentialEnergy(), TOL); -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - forceField->setCutoffDistance(2.0); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.1, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -2, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.9+1+0.9, state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("r"); - nonbonded->addParticle(vector()); - nonbonded->addParticle(vector()); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta/sqrt(delta.dot(delta)); - ASSERT_EQUAL_TOL(distance, state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testContinuous1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testContinuous2DFunction() { - const int xsize = 20; - const int ysize = 21; - const double xmin = 0.4; - const double xmax = 1.5; - const double ymin = 0.0; - const double ymax = 2.1; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setParameter("b", z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testDiscrete1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Discrete1DFunction(table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete2DFunction() { - const int xsize = 10; - const int ysize = 5; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - table.push_back(sin(0.25*i)+cos(0.33*j)); - forceField->addTabulatedFunction("fn", new Discrete2DFunction(xsize, ysize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i%xsize, 0, 0); - context.setPositions(positions); - context.setParameter("a", i/xsize); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete3DFunction() { - const int xsize = 8; - const int ysize = 5; - const int zsize = 6; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - for (int k = 0; k < zsize; k++) - table.push_back(sin(0.25*i)+cos(0.33*j)+0.12345*k); - forceField->addTabulatedFunction("fn", new Discrete3DFunction(xsize, ysize, zsize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i%xsize, 0, 0); - context.setPositions(positions); - context.setParameter("a", (i/xsize)%ysize); - context.setParameter("b", i/(xsize*ysize)); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testCoulombLennardJones() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create two systems: one with a NonbondedForce, and one using a CustomNonbondedForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("q"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - standardNonbonded->addParticle(1.0, 0.2, 0.1); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.1); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - else { - standardNonbonded->addParticle(1.0, 0.2, 0.2); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.2); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); - customNonbonded->addExclusion(2*i, 2*i+1); - } - standardNonbonded->setNonbondedMethod(NonbondedForce::NoCutoff); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::NoCutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - Context context2(customSystem, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - context1.setVelocities(velocities); - context2.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testSwitchingFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("10/r^2"); - vector params; - nonbonded->addParticle(params); - nonbonded->addParticle(params); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double expectedEnergy = 10/(r*r); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - -void testLongRangeCorrection() { - // Create a box of particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System standardSystem; - System customSystem; - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6); sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - int index = 0; - vector params1(2); - params1[0] = 1.1; - params1[1] = 0.5; - vector params2(2); - params2[0] = 1; - params2[1] = 1; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - if (index%2 == 0) { - standardNonbonded->addParticle(0, params1[0], params1[1]); - customNonbonded->addParticle(params1); - } - else { - standardNonbonded->addParticle(0, params2[0], params2[1]); - customNonbonded->addParticle(params2); - } - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - standardNonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - standardNonbonded->setCutoffDistance(cutoff); - customNonbonded->setCutoffDistance(cutoff); - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - standardNonbonded->setUseDispersionCorrection(true); - customNonbonded->setUseLongRangeCorrection(true); - standardNonbonded->setUseSwitchingFunction(true); - customNonbonded->setUseSwitchingFunction(true); - standardNonbonded->setSwitchingDistance(0.8*cutoff); - customNonbonded->setSwitchingDistance(0.8*cutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - - // Compute the correction for the standard force. - - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - double standardEnergy1 = context1.getState(State::Energy).getPotentialEnergy(); - standardNonbonded->setUseDispersionCorrection(false); - context1.reinitialize(); - context1.setPositions(positions); - double standardEnergy2 = context1.getState(State::Energy).getPotentialEnergy(); - - // Compute the correction for the custom force. - - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - double customEnergy1 = context2.getState(State::Energy).getPotentialEnergy(); - customNonbonded->setUseLongRangeCorrection(false); - context2.reinitialize(); - context2.setPositions(positions); - double customEnergy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // See if they agree. - - ASSERT_EQUAL_TOL(standardEnergy1-standardEnergy2, customEnergy1-customEnergy2, 1e-4); -} - -void testInteractionGroups() { - const int numParticles = 6; - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("v1+v2"); - nonbonded->addPerParticleParameter("v"); - vector params(1, 0.001); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(params); - params[0] *= 10; - } - set set1, set2, set3, set4; - set1.insert(2); - set2.insert(0); - set2.insert(1); - set2.insert(2); - set2.insert(3); - set2.insert(4); - set2.insert(5); - nonbonded->addInteractionGroup(set1, set2); // Particle 2 interacts with every other particle. - set3.insert(0); - set3.insert(1); - set4.insert(4); - set4.insert(5); - nonbonded->addInteractionGroup(set3, set4); // Particles 0 and 1 interact with 4 and 5. - nonbonded->addExclusion(1, 2); // Add an exclusion to make sure it gets skipped. - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - context.setPositions(positions); - State state = context.getState(State::Energy); - double expectedEnergy = 331.423; // Each digit is the number of interactions a particle particle is involved in. - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), TOL); -} - -void testLargeInteractionGroup() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create a large system. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - nonbonded->addPerParticleParameter("q"); - nonbonded->addPerParticleParameter("sigma"); - nonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - nonbonded->addExclusion(2*i, 2*i+1); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Compute the forces. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - - // Modify the force so only one particle interacts with everything else. - - set set1, set2; - set1.insert(151); - for (int i = 0; i < numParticles; i++) - set2.insert(i); - nonbonded->addInteractionGroup(set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - - // The force on that one particle should be the same. - - ASSERT_EQUAL_VEC(state1.getForces()[151], state2.getForces()[151], 1e-4); - - // Modify the interaction group so it includes all interactions. This should now reproduce the original forces - // on all atoms. - - for (int i = 0; i < numParticles; i++) - set1.insert(i); - nonbonded->setInteractionGroupParameters(0, set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state3.getForces()[i], 1e-4); -} - -void testInteractionGroupLongRangeCorrection() { - const int numParticles = 10; - const double boxSize = 10.0; - const double cutoff = 0.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("c1*c2*r^-4"); - nonbonded->addPerParticleParameter("c"); - vector positions(numParticles); - vector params(1); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - params[0] = (i%2 == 0 ? 1.1 : 2.0); - nonbonded->addParticle(params); - positions[i] = Vec3(0.5*i, 0, 0); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - - // Setup nonbonded groups. They involve 1 interaction of type AA, - // 2 of type BB, and 5 of type AB. - - set set1, set2, set3, set4, set5; - set1.insert(0); - set1.insert(1); - set1.insert(2); - nonbonded->addInteractionGroup(set1, set1); - set2.insert(3); - set3.insert(4); - set3.insert(6); - set3.insert(8); - nonbonded->addInteractionGroup(set2, set3); - set4.insert(5); - set5.insert(7); - set5.insert(9); - nonbonded->addInteractionGroup(set4, set5); - - // Compute energy with and without the correction. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseLongRangeCorrection(true); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - - // Check the result. - - double sum = (1.1*1.1 + 2*2.0*2.0 + 5*1.1*2.0)*2.0; - int numPairs = (numParticles*(numParticles+1))/2; - double expected = 2*M_PI*numParticles*numParticles*sum/(numPairs*boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy2-energy1, 1e-4); -} - -void testMultipleCutoffs() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - - // Add multiple nonbonded forces that have different cutoffs. - - CustomNonbondedForce* nonbonded1 = new CustomNonbondedForce("2*r"); - nonbonded1->addParticle(vector()); - nonbonded1->addParticle(vector()); - nonbonded1->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded1->setCutoffDistance(2.5); - system.addForce(nonbonded1); - CustomNonbondedForce* nonbonded2 = new CustomNonbondedForce("3*r"); - nonbonded2->addParticle(vector()); - nonbonded2->addParticle(vector()); - nonbonded2->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded2->setCutoffDistance(2.9); - nonbonded2->setForceGroup(1); - system.addForce(nonbonded2); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 0, 0); - for (double r = 2.4; r < 3.2; r += 0.2) { - positions[1][1] = r; - context.setPositions(positions); - double e1 = (r < 2.5 ? 2.0*r : 0.0); - double e2 = (r < 2.9 ? 3.0*r : 0.0); - double f1 = (r < 2.5 ? 2.0 : 0.0); - double f2 = (r < 2.9 ? 3.0 : 0.0); - - // Check the first force. - - State state = context.getState(State::Forces | State::Energy, false, 1); - ASSERT_EQUAL_VEC(Vec3(0, f1, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1, state.getPotentialEnergy(), TOL); - - // Check the second force. - - state = context.getState(State::Forces | State::Energy, false, 2); - ASSERT_EQUAL_VEC(Vec3(0, f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e2, state.getPotentialEnergy(), TOL); - - // Check the sum of both forces. - - state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_VEC(Vec3(0, f1+f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1-f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1+e2, state.getPotentialEnergy(), TOL); - } -} +#include "CpuTests.h" +#include "TestCustomNonbondedForce.h" -int main() { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testSimpleExpression(); - testParameters(); - testExclusions(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testContinuous1DFunction(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testDiscrete1DFunction(); - testDiscrete2DFunction(); - testDiscrete3DFunction(); - testCoulombLennardJones(); - testSwitchingFunction(); - testLongRangeCorrection(); - testInteractionGroups(); - testLargeInteractionGroup(); - testInteractionGroupLongRangeCorrection(); - testMultipleCutoffs(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuEwald.cpp b/platforms/cpu/tests/TestCpuEwald.cpp index 6c3f084b1daaf77b54a14c54fe86b878ba68c424..30a1361c75d0ef42dc281ac9024a200071eeb754 100644 --- a/platforms/cpu/tests/TestCpuEwald.cpp +++ b/platforms/cpu/tests/TestCpuEwald.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,297 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the Ewald summation method CPU implementation of NonbondedForce. - */ +#include "CpuTests.h" +#include "TestEwald.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CpuPlatform platform; - -const double TOL = 1e-5; - -void testEwaldPME(bool includeExceptions) { - -// Use amorphous NaCl system for the tests - - const int numParticles = 894; - const double cutoff = 1.2; - const double boxSize = 3.00646; - double tol = 1e-5; - - ReferencePlatform reference; - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(tol); - - for (int i = 0; i < numParticles/2; i++) - system.addParticle(22.99); - for (int i = 0; i < numParticles/2; i++) - system.addParticle(35.45); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(1.0, 1.0,0.0); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(-1.0, 1.0,0.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - vector positions(numParticles); - #include "nacl_amorph.dat" - if (includeExceptions) { - // Add some exclusions. - - for (int i = 0; i < numParticles-1; i++) { - Vec3 delta = positions[i]-positions[i+1]; - if (sqrt(delta.dot(delta)) < 0.5*cutoff) - nonbonded->addException(i, i+1, i%2 == 0 ? 0.0 : 0.5, 1.0, 0.0); - } - } - -// (1) Check whether the Reference and CPU platforms agree when using Ewald Method - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cpuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cpuContext.setPositions(positions); - referenceContext.setPositions(positions); - State cpuState = cpuContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], cpuState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), cpuState.getPotentialEnergy(), tol); - -// (2) Check whether Ewald method in CPU is self-consistent - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = cpuState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - const double delta = 5e-3; - double step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = cpuState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator3(0.01); - Context cpuContext2(system, integrator3, platform); - cpuContext2.setPositions(positions); - - tol = 1e-2; - State cpuState2 = cpuContext2.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (cpuState2.getPotentialEnergy()-cpuState.getPotentialEnergy())/delta, tol) - -// (3) Check whether the Reference and CPU platforms agree when using PME - - nonbonded->setNonbondedMethod(NonbondedForce::PME); - cpuContext.reinitialize(); - referenceContext.reinitialize(); - cpuContext.setPositions(positions); - referenceContext.setPositions(positions); - cpuState = cpuContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], cpuState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), cpuState.getPotentialEnergy(), tol); - -// (4) Check whether PME method in CPU is self-consistent - - norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = cpuState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = cpuState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator4(0.01); - Context cpuContext3(system, integrator4, platform); - cpuContext3.setPositions(positions); - - tol = 1e-2; - State cpuState3 = cpuContext3.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (cpuState3.getPotentialEnergy()-cpuState.getPotentialEnergy())/delta, tol) -} - -void testEwald2Ions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(-1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(TOL); - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(3.048000,2.764000,3.156000); - positions[1] = Vec3(2.809000,2.888000,2.571000); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - ASSERT_EQUAL_VEC(Vec3(-123.711, 64.1877, -302.716), forces[0], 10*TOL); - ASSERT_EQUAL_VEC(Vec3( 123.711, -64.1877, 302.716), forces[1], 10*TOL); - ASSERT_EQUAL_TOL(-217.276, state.getPotentialEnergy(), 0.01/*10*TOL*/); -} - -void testTriclinic() { - // Create a triclinic box containing eight particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(2.5, 0, 0), Vec3(0.5, 3.0, 0), Vec3(0.7, 0.9, 3.5)); - for (int i = 0; i < 8; i++) - system.addParticle(1.0); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - force->setNonbondedMethod(NonbondedForce::PME); - force->setCutoffDistance(1.0); - force->setPMEParameters(3.45891, 32, 40, 48); - for (int i = 0; i < 4; i++) - force->addParticle(-1, 0.440104, 0.4184); // Cl parameters - for (int i = 0; i < 4; i++) - force->addParticle(1, 0.332840, 0.0115897); // Na parameters - vector positions(8); - positions[0] = Vec3(1.744, 2.788, 3.162); - positions[1] = Vec3(1.048, 0.762, 2.340); - positions[2] = Vec3(2.489, 1.570, 2.817); - positions[3] = Vec3(1.027, 1.893, 3.271); - positions[4] = Vec3(0.937, 0.825, 0.009); - positions[5] = Vec3(2.290, 1.887, 3.352); - positions[6] = Vec3(1.266, 1.111, 2.894); - positions[7] = Vec3(0.933, 1.862, 3.490); - - // Compute the forces and energy. - - VerletIntegrator integ(0.001); - Context context(system, integ, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // Compare them to values computed by Gromacs. - - double expectedEnergy = -963.370; - vector expectedForce(8); - expectedForce[0] = Vec3(4.25253e+01, -1.23503e+02, 1.22139e+02); - expectedForce[1] = Vec3(9.74752e+01, 1.68213e+02, 1.93169e+02); - expectedForce[2] = Vec3(-1.50348e+02, 1.29165e+02, 3.70435e+02); - expectedForce[3] = Vec3(9.18644e+02, -3.52571e+00, -1.34772e+03); - expectedForce[4] = Vec3(-1.61193e+02, 9.01528e+01, -7.12904e+01); - expectedForce[5] = Vec3(2.82630e+02, 2.78029e+01, -3.72864e+02); - expectedForce[6] = Vec3(-1.47454e+02, -2.14448e+02, -3.55789e+02); - expectedForce[7] = Vec3(-8.82195e+02, -7.39132e+01, 1.46202e+03); - for (int i = 0; i < 8; i++) { - ASSERT_EQUAL_VEC(expectedForce[i], state.getForces()[i], 1e-4); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-4); -} - -void testErrorTolerance(NonbondedForce::NonbondedMethod method) { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 5.0; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(method); - - // For various values of the cutoff and error tolerance, see if the actual error is reasonable. - - for (double cutoff = 1.0; cutoff < boxWidth/2; cutoff *= 1.2) { - force->setCutoffDistance(cutoff); - vector refForces; - double norm = 0.0; - for (double tol = 5e-5; tol < 1e-3; tol *= 2.0) { - force->setEwaldErrorTolerance(tol); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces); - if (refForces.size() == 0) { - refForces = state.getForces(); - for (int i = 0; i < numParticles; i++) - norm += refForces[i].dot(refForces[i]); - norm = sqrt(norm); - } - else { - double diff = 0.0; - for (int i = 0; i < numParticles; i++) { - Vec3 delta = refForces[i]-state.getForces()[i]; - diff += delta.dot(delta); - } - diff = sqrt(diff)/norm; - ASSERT(diff < 2*tol); - } - } - } -} - -int main(int argc, char* argv[]) { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testEwaldPME(false); - testEwaldPME(true); -// testEwald2Ions(); - testTriclinic(); - testErrorTolerance(NonbondedForce::Ewald); - testErrorTolerance(NonbondedForce::PME); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuGBSAOBCForce.cpp b/platforms/cpu/tests/TestCpuGBSAOBCForce.cpp index 972cfe003846e7d3cc68d64e1183d6679ce0309d..df121cef8540324eca9d0ed3704344e96d9d1bc9 100644 --- a/platforms/cpu/tests/TestCpuGBSAOBCForce.cpp +++ b/platforms/cpu/tests/TestCpuGBSAOBCForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,244 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CPU implementation of GBSAOBCForce. - */ +#include "CpuTests.h" +#include "TestGBSAOBCForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/NonbondedForce.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -void testSingleParticle() { - CpuPlatform platform; - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/forceField->getSoluteDielectric()-1.0/forceField->getSolventDielectric())/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); - - // Change the parameters and see if it is still correct. - - forceField->setParticleParameters(0, 0.4, 0.25, 1); - forceField->updateParametersInContext(context); - state = context.getState(State::Energy); - bornRadius = 0.25-0.009; // dielectric offset - bornEnergy = (-0.4*0.4/(8*PI_M*eps0))*(1.0/forceField->getSoluteDielectric()-1.0/forceField->getSolventDielectric())/bornRadius; - extendedRadius = 0.25+0.14; - nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.25/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testGlobalSettings() { - CpuPlatform platform; - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - const double soluteDielectric = 2.1; - const double solventDielectric = 35.0; - const double surfaceAreaEnergy = 0.75; - forceField->setSoluteDielectric(soluteDielectric); - forceField->setSolventDielectric(solventDielectric); - forceField->setSurfaceAreaEnergy(surfaceAreaEnergy); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/soluteDielectric-1.0/solventDielectric)/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*surfaceAreaEnergy*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testCutoffAndPeriodic() { - CpuPlatform platform; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle(-1, 0.15, 1); - nonbonded->addParticle(-1, 1, 0); - gbsa->addParticle(1, 0.15, 1); - nonbonded->addParticle(1, 1, 0); - const double cutoffDistance = 3.0; - const double boxSize = 10.0; - nonbonded->setCutoffDistance(cutoffDistance); - gbsa->setCutoffDistance(cutoffDistance); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(gbsa); - system.addForce(nonbonded); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - - // Calculate the forces for both cutoff and periodic with two different atom positions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - positions[1][0]+= boxSize; - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state4 = context.getState(State::Forces); - - // All forces should be identical, exception state3 which should be zero. - - ASSERT_EQUAL_VEC(state1.getForces()[0], state2.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state2.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[0], state4.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state4.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[0], Vec3(0, 0, 0), 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[1], Vec3(0, 0, 0), 0.01); -} - -void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBCForce::NonbondedMethod method2) { - CpuPlatform platform; - ReferencePlatform reference; - System system; - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - double charge = i%2 == 0 ? -1 : 1; - gbsa->addParticle(charge, 0.15, 1); - nonbonded->addParticle(charge, 1, 0); - } - nonbonded->setNonbondedMethod(method); - gbsa->setNonbondedMethod(method2); - nonbonded->setCutoffDistance(3.0); - gbsa->setCutoffDistance(3.0); - int grid = (int) floor(0.5+pow(numParticles, 1.0/3.0)); - if (method == NonbondedForce::CutoffPeriodic) { - double boxSize = (grid+1)*1.1; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - } - system.addForce(gbsa); - system.addForce(nonbonded); - LangevinIntegrator integrator1(0, 0.1, 0.01); - LangevinIntegrator integrator2(0, 0.1, 0.01); - Context context(system, integrator1, platform); - Context refContext(system, integrator2, reference); - - // Set random (but uniformly distributed) positions for all the particles. - - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < grid; i++) - for (int j = 0; j < grid; j++) - for (int k = 0; k < grid; k++) - positions[i*grid*grid+j*grid+k] = Vec3(i*1.1, j*1.1, k*1.1); - for (int i = 0; i < numParticles; ++i) - positions[i] = positions[i] + Vec3(0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt)); - context.setPositions(positions); - refContext.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - State refState = refContext.getState(State::Forces | State::Energy); - - // Make sure the CPU and Reference platforms agree. - - double norm = 0.0; - double diff = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - Vec3 delta = f-refState.getForces()[i]; - diff += delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2]; - } - norm = std::sqrt(norm); - diff = std::sqrt(diff); - ASSERT_EQUAL_TOL(0.0, diff, 0.001*norm); - ASSERT_EQUAL_TOL(state.getPotentialEnergy(), refState.getPotentialEnergy(), 1e-3); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - // (This doesn't work with cutoffs, since the energy changes discontinuously at the cutoff distance.) - - if (method == NonbondedForce::NoCutoff) - { - const double delta = 0.3; - double step = 0.5*delta/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-2) - } -} - -int main() { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testSingleParticle(); - testGlobalSettings(); - testCutoffAndPeriodic(); - for (int i = 5; i < 11; i++) { - testForce(i*i*i, NonbondedForce::NoCutoff, GBSAOBCForce::NoCutoff); - testForce(i*i*i, NonbondedForce::CutoffNonPeriodic, GBSAOBCForce::CutoffNonPeriodic); - testForce(i*i*i, NonbondedForce::CutoffPeriodic, GBSAOBCForce::CutoffPeriodic); - } - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuHarmonicAngleForce.cpp b/platforms/cpu/tests/TestCpuHarmonicAngleForce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7ef0066cbeddb44a8d3dc4eca2f0ae1ae476436d --- /dev/null +++ b/platforms/cpu/tests/TestCpuHarmonicAngleForce.cpp @@ -0,0 +1,63 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "CpuTests.h" +#include "TestHarmonicAngleForce.h" + +void testParallelComputation() { + System system; + const int numParticles = 200; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + HarmonicAngleForce* force = new HarmonicAngleForce(); + for (int i = 2; i < numParticles; i++) + force->addAngle(i-2, i-1, i, 1.1, i); + system.addForce(force); + vector positions(numParticles); + for (int i = 0; i < numParticles; i++) + positions[i] = Vec3(i, i%2, 0); + VerletIntegrator integrator1(0.01); + ReferencePlatform reference; + Context context1(system, integrator1, reference); + context1.setPositions(positions); + State state1 = context1.getState(State::Forces | State::Energy); + VerletIntegrator integrator2(0.01); + Context context2(system, integrator2, platform); + context2.setPositions(positions); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-5); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); +} + +void runPlatformTests() { + testParallelComputation(); +} diff --git a/platforms/cpu/tests/TestCpuLangevinIntegrator.cpp b/platforms/cpu/tests/TestCpuLangevinIntegrator.cpp index 7d740178beca41b268ff10e73d63c42221e8c8fe..c5b988f8f285b4fb3d1048c4307934f21a247853 100644 --- a/platforms/cpu/tests/TestCpuLangevinIntegrator.cpp +++ b/platforms/cpu/tests/TestCpuLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,255 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of LangevinIntegrator. - */ +#include "CpuTests.h" +#include "TestLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -void testSingleBond() { - CpuPlatform platform; - System system; - system.addParticle(2.0); - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Not set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - CpuPlatform platform; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 10000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= 10000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt(10000.0)); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - CpuPlatform platform; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - CpuPlatform platform; - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - LangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - CpuPlatform platform; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT_EQUAL_TOL(state1.getPositions()[i][j], state2.getPositions()[i][j], 1e-5); - ASSERT_EQUAL_TOL(state3.getPositions()[i][j], state4.getPositions()[i][j], 1e-5); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main() { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuNonbondedForce.cpp b/platforms/cpu/tests/TestCpuNonbondedForce.cpp index 65dc0dd65f8ea83cf9fb6b2c8cb73f6b0fb2769c..dce296d33af39082a6d9d552c1748a11da995f49 100644 --- a/platforms/cpu/tests/TestCpuNonbondedForce.cpp +++ b/platforms/cpu/tests/TestCpuNonbondedForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,684 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the CUDA implementation of NonbondedForce. - */ +#include "CpuTests.h" +#include "TestNonbondedForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CpuPlatform platform; - -const double TOL = 1e-5; - -void testCoulomb() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0.5, 1, 0); - forceField->addParticle(-1.5, 1, 0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = ONE_4PI_EPS0*(-0.75)/4.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(-0.75)/2.0, state.getPotentialEnergy(), TOL); -} - -void testLJ() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0, 1.2, 1); - forceField->addParticle(0, 1.4, 2); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.3/2.0; - double eps = SQRT_TWO; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/2.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)), state.getPotentialEnergy(), TOL); -} - -void testExclusionsAnd14() { - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - vector positions(5); - const double r = 1.0; - for (int j = 0; j < 5; ++j) { - nonbonded->setParticleParameters(j, 0, 1.5, 0); - positions[j] = Vec3(0, j, 0); - } - nonbonded->setParticleParameters(0, 0, 1.5, 1); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - positions[i] = Vec3(r, 0, 0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.5/r; - double eps = 1.0; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - nonbonded->setParticleParameters(0, 2, 1.5, 0); - nonbonded->setParticleParameters(i, 2, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? 4/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*4/(r*r); - energy = ONE_4PI_EPS0*4/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - const double cutoff = 2.9; - forceField->setCutoffDistance(cutoff); - const double eps = 50.0; - forceField->setReactionFieldDielectric(eps); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force1 = ONE_4PI_EPS0*(1.0)*(0.25-2.0*krf*2.0); - const double force2 = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(0, -force1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force1-force2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force2, 0), forces[2], TOL); - const double energy1 = ONE_4PI_EPS0*(1.0)*(0.5+krf*4.0-crf); - const double energy2 = ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf); - ASSERT_EQUAL_TOL(energy1+energy2, state.getPotentialEnergy(), TOL); -} - -void testCutoff14() { - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - const double cutoff = 3.5; - nonbonded->setCutoffDistance(cutoff); - const double eps = 30.0; - nonbonded->setReactionFieldDielectric(eps); - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(5); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(2, 0, 0); - positions[3] = Vec3(3, 0, 0); - positions[4] = Vec3(4, 0, 0); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - nonbonded->setParticleParameters(0, 0, 1.5, 1); - for (int j = 1; j < 5; ++j) - nonbonded->setParticleParameters(j, 0, 1.5, 0); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double r = positions[i][0]; - double x = 1.5/r; - double e = 1.0; - double force = 4.0*e*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*e*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - const double q = 0.7; - nonbonded->setParticleParameters(0, q, 1.5, 0); - nonbonded->setParticleParameters(i, q, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? q*q/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*q*q/(r*r); - energy = ONE_4PI_EPS0*q*q/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addException(0, 1, 0.0, 1.0, 0.0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - positions[2] = Vec3(3, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2*ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf), state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta*ONE_4PI_EPS0*(-1.0/(distance*distance*distance)+2.0*krf); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(1.0/distance+krf*distance*distance-crf), state.getPotentialEnergy(), 1e-4); - ASSERT_EQUAL_VEC(force, state.getForces()[0], 2e-5); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], 2e-5); - } - } -} - -void testLargeSystem() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - HarmonicBondForce* bonds = new HarmonicBondForce(); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - bonds->addBond(2*i, 2*i+1, 1.0, 0.1); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - - // Try with cutoffs but not periodic boundary conditions, and make sure the cl and Reference - // platforms agree. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.addForce(bonds); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cpuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cpuContext.setPositions(positions); - cpuContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - State cpuState = cpuContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(cpuState.getPositions()[i], referenceState.getPositions()[i], tol); - ASSERT_EQUAL_VEC(cpuState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(cpuState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(cpuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now do the same thing with periodic boundary conditions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - cpuContext.reinitialize(); - referenceContext.reinitialize(); - cpuContext.setPositions(positions); - cpuContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - cpuState = cpuContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - double dx = cpuState.getPositions()[i][0]-referenceState.getPositions()[i][0]; - double dy = cpuState.getPositions()[i][1]-referenceState.getPositions()[i][1]; - double dz = cpuState.getPositions()[i][2]-referenceState.getPositions()[i][2]; - ASSERT_EQUAL_TOL(fmod(cpuState.getPositions()[i][0]-referenceState.getPositions()[i][0], boxSize), 0, tol); - ASSERT_EQUAL_TOL(fmod(cpuState.getPositions()[i][1]-referenceState.getPositions()[i][1], boxSize), 0, tol); - ASSERT_EQUAL_TOL(fmod(cpuState.getPositions()[i][2]-referenceState.getPositions()[i][2], boxSize), 0, tol); - ASSERT_EQUAL_VEC(cpuState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(cpuState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(cpuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} - -void testDispersionCorrection() { - // Create a box full of identical particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - int index = 0; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.1, 0.5); - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - // See if the correction has the correct value. - - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(false); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - double term1 = (0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - double term2 = (0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - double expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); - - // Now modify half the particles to be different, and see if it is still correct. - - int numType2 = 0; - for (int i = 0; i < numParticles; i += 2) { - nonbonded->setParticleParameters(i, 0, 1, 1); - numType2++; - } - int numType1 = numParticles-numType2; - nonbonded->updateParametersInContext(context); - energy2 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(true); - context.reinitialize(); - context.setPositions(positions); - energy1 = context.getState(State::Energy).getPotentialEnergy(); - term1 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - term2 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - term1 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 12)/pow(cutoff, 9))/9; - term2 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 6)/pow(cutoff, 3))/3; - double combinedSigma = 0.5*(1+1.1); - double combinedEpsilon = sqrt(1*0.5); - term1 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 12)/pow(cutoff, 9))/9; - term2 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 6)/pow(cutoff, 3))/3; - term1 /= (numParticles*(numParticles+1))/2; - term2 /= (numParticles*(numParticles+1))/2; - expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); -} - -void testChangingParameters() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - nonbonded->setNonbondedMethod(NonbondedForce::PME); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - - // See if Reference and CPU give the same forces and energies. - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cpuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cpuContext.setPositions(positions); - referenceContext.setPositions(positions); - State cpuState = cpuContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(cpuState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(cpuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now modify parameters and see if they still agree. - - for (int i = 0; i < numParticles; i += 5) { - double charge, sigma, epsilon; - nonbonded->getParticleParameters(i, charge, sigma, epsilon); - nonbonded->setParticleParameters(i, 1.5*charge, 1.1*sigma, 1.7*epsilon); - } - nonbonded->updateParametersInContext(cpuContext); - nonbonded->updateParametersInContext(referenceContext); - cpuState = cpuContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(cpuState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(cpuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} - -void testSwitchingFunction(NonbondedForce::NonbondedMethod method) { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(0, 1.2, 1); - nonbonded->addParticle(0, 1.4, 2); - nonbonded->setNonbondedMethod(method); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - nonbonded->setUseDispersionCorrection(false); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - double eps = SQRT_TWO; - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double x = 1.3/r; - double expectedEnergy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - -int main(int argc, char* argv[]) { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testCoulomb(); - testLJ(); - testExclusionsAnd14(); - testCutoff(); - testCutoff14(); - testPeriodic(); - testTriclinic(); - testLargeSystem(); - testDispersionCorrection(); - testChangingParameters(); - testSwitchingFunction(NonbondedForce::CutoffNonPeriodic); - testSwitchingFunction(NonbondedForce::PME); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cpu/tests/TestCpuPeriodicTorsionForce.cpp b/platforms/cpu/tests/TestCpuPeriodicTorsionForce.cpp index aa660f207769643e6d86d59365c43d3ff3edd55b..9e03ea01eef4fec43523006e5c4c8b48b1cdd6c4 100644 --- a/platforms/cpu/tests/TestCpuPeriodicTorsionForce.cpp +++ b/platforms/cpu/tests/TestCpuPeriodicTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,69 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CPU implementation of PeriodicTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CpuPlatform platform; - -const double TOL = 1e-5; - -void testPeriodicTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* forceField = new PeriodicTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 2); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque = -2*1.1*std::sin(2*PI_M/3); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.1*(1+std::cos(2*PI_M/3)), state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 3, PI_M/3.2, 1.3); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta = (3*PI_M/2)-(PI_M/3.2); - double torque = -3*1.3*std::sin(dtheta); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.3*(1+std::cos(dtheta)), state.getPotentialEnergy(), TOL); - } -} +#include "CpuTests.h" +#include "TestPeriodicTorsionForce.h" void testParallelComputation() { System system; @@ -119,15 +58,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - testPeriodicTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cpu/tests/TestCpuRBTorsionForce.cpp b/platforms/cpu/tests/TestCpuRBTorsionForce.cpp index c35ae7d02d325477ae36a6dd50a8e5dfbab46bdf..db3b5a37ed68d675d6c59c7482e9469b72ee84ed 100644 --- a/platforms/cpu/tests/TestCpuRBTorsionForce.cpp +++ b/platforms/cpu/tests/TestCpuRBTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,88 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of RBTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/RBTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CpuPlatform platform; - -const double TOL = 1e-5; - -void testRBTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - RBTorsionForce* forceField = new RBTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 1, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.1*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.1*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.11*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.11*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} +#include "CpuTests.h" +#include "TestRBTorsionForce.h" void testParallelComputation() { System system; @@ -138,15 +58,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - testRBTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cpu/tests/TestCpuSettle.cpp b/platforms/cpu/tests/TestCpuSettle.cpp index 9cf9a2b3dc5d7a941c4ddff5e333c0b6d27573d5..e5a9315c3e9563bb147fa513ba580921be2af4b7 100644 --- a/platforms/cpu/tests/TestCpuSettle.cpp +++ b/platforms/cpu/tests/TestCpuSettle.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,91 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CPU implementation of the SETTLE algorithm. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CpuPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -void testConstraints() { - const int numMolecules = 10; - const int numParticles = numMolecules*3; - const int numConstraints = numMolecules*3; - const double temp = 100.0; - CpuPlatform platform; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numMolecules; ++i) { - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - forceField->addParticle(-0.82, 0.317, 0.65); - forceField->addParticle(0.41, 1.0, 0.0); - forceField->addParticle(0.41, 1.0, 0.0); - system.addConstraint(i*3, i*3+1, 0.1); - system.addConstraint(i*3, i*3+2, 0.1); - system.addConstraint(i*3+1, i*3+2, 0.163); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; ++i) { - positions[i*3] = Vec3((i%4)*0.4, (i/4)*0.4, 0); - positions[i*3+1] = positions[i*3]+Vec3(0.1, 0, 0); - positions[i*3+2] = positions[i*3]+Vec3(-0.03333, 0.09428, 0); - velocities[i*3] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+1] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+2] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-5); - } - } -} +#include "CpuTests.h" +#include "TestSettle.h" -int main(int argc, char* argv[]) { - try { - if (!CpuPlatform::isProcessorSupported()) { - cout << "CPU is not supported. Exiting." << endl; - return 0; - } - testConstraints(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/CMakeLists.txt b/platforms/cuda/CMakeLists.txt index 26670f85aac7472dc65ce5f3eccac44217917025..72af67add54eafb2f3d63f7ca7f8bb82166ef8d4 100644 --- a/platforms/cuda/CMakeLists.txt +++ b/platforms/cuda/CMakeLists.txt @@ -13,9 +13,9 @@ #---------------------------------------------------- set(OPENMM_BUILD_CUDA_TESTS TRUE CACHE BOOL "Whether to build CUDA test cases") -if(OPENMM_BUILD_CUDA_TESTS) +if(BUILD_TESTING AND OPENMM_BUILD_CUDA_TESTS) SUBDIRS (tests) -endif(OPENMM_BUILD_CUDA_TESTS) +endif(BUILD_TESTING AND OPENMM_BUILD_CUDA_TESTS) # The source is organized into subdirectories, but we handle them all from # this CMakeLists file rather than letting CMake visit them as SUBDIRS. diff --git a/platforms/cuda/include/CudaContext.h b/platforms/cuda/include/CudaContext.h index 51ac96167d9c8e93ab1a359fbc92541d6bf794e0..ac5c945ac65ded16b4837b71c7611a01895a3234 100644 --- a/platforms/cuda/include/CudaContext.h +++ b/platforms/cuda/include/CudaContext.h @@ -30,6 +30,7 @@ #include #include #include +#include #define __CL_ENABLE_EXCEPTIONS #ifdef _MSC_VER // Prevent Windows from defining macros that interfere with other code. @@ -538,6 +539,11 @@ public: */ void invalidateMolecules(); private: + /** + * Compute a sorted list of device indices in decreasing order of desirability + */ + std::vector getDevicePrecedence(); + struct Molecule; struct MoleculeGroup; class VirtualSiteInfo; diff --git a/platforms/cuda/include/CudaExpressionUtilities.h b/platforms/cuda/include/CudaExpressionUtilities.h index fce27f54ff3b4b52c3f09a7e88c71711ee35fb5f..67e6bacc44b9d6f976060045770e2ec098740cff 100644 --- a/platforms/cuda/include/CudaExpressionUtilities.h +++ b/platforms/cuda/include/CudaExpressionUtilities.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2014 Stanford University and the Authors. * + * Portions copyright (c) 2009-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -89,6 +89,10 @@ public: * @param function the function for which to get a placeholder */ Lepton::CustomFunction* getFunctionPlaceholder(const TabulatedFunction& function); + /** + * Get a Lepton::CustomFunction that can be used to represent the periodicdistance() function when parsing expressions. + */ + Lepton::CustomFunction* getPeriodicDistancePlaceholder(); private: class FunctionPlaceholder : public Lepton::CustomFunction { public: @@ -114,13 +118,13 @@ private: const std::vector& functions, const std::vector >& functionNames, const std::string& prefix, const std::vector >& functionParams, const std::vector& allExpressions, const std::string& tempType); std::string getTempName(const Lepton::ExpressionTreeNode& node, const std::vector >& temps); - void findRelatedTabulatedFunctions(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, + void findRelatedCustomFunctions(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, std::vector& nodes); void findRelatedPowers(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, std::map& powers); std::vector > computeFunctionParameters(const std::vector& functions); CudaContext& context; - FunctionPlaceholder fp1, fp2, fp3; + FunctionPlaceholder fp1, fp2, fp3, periodicDistance; }; } // namespace OpenMM diff --git a/platforms/cuda/include/CudaKernels.h b/platforms/cuda/include/CudaKernels.h index d7c17a26d8b4a102d9569e0116a1f06b031ede9c..7becae8a7e55f746258e8882bb4f54167f6644a4 100644 --- a/platforms/cuda/include/CudaKernels.h +++ b/platforms/cuda/include/CudaKernels.h @@ -620,6 +620,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class SortTrait : public CudaSort::SortTrait { int getDataSize() const {return 8;} @@ -668,7 +677,9 @@ private: std::vector > exceptionAtoms; double ewaldSelfEnergy, dispersionCoefficient, alpha; int interpolateForceThreads; + int gridSizeX, gridSizeY, gridSizeZ; bool hasCoulomb, hasLJ, usePmeStream, useCudaFFT; + NonbondedMethod nonbondedMethod; static const int PmeOrder = 5; }; @@ -922,6 +933,58 @@ private: CUfunction donorKernel, acceptorKernel; }; +/** + * This kernel is invoked by CustomCentroidBondForce to calculate the forces acting on the system. + */ +class CudaCalcCustomCentroidBondForceKernel : public CalcCustomCentroidBondForceKernel { +public: + CudaCalcCustomCentroidBondForceKernel(std::string name, const Platform& platform, CudaContext& cu, const System& system) : CalcCustomCentroidBondForceKernel(name, platform), + cu(cu), params(NULL), globals(NULL), groupParticles(NULL), groupWeights(NULL), groupOffsets(NULL), groupForces(NULL), bondGroups(NULL), centerPositions(NULL), system(system) { + } + ~CudaCalcCustomCentroidBondForceKernel(); + /** + * Initialize the kernel. + * + * @param system the System this kernel will be applied to + * @param force the CustomCentroidBondForce this kernel will be used for + */ + void initialize(const System& system, const CustomCentroidBondForce& force); + /** + * Execute the kernel to calculate the forces and/or energy. + * + * @param context the context in which to execute this kernel + * @param includeForces true if forces should be calculated + * @param includeEnergy true if the energy should be calculated + * @return the potential energy due to the force + */ + double execute(ContextImpl& context, bool includeForces, bool includeEnergy); + /** + * Copy changed parameters over to a context. + * + * @param context the context to copy parameters to + * @param force the CustomCentroidBondForce to copy the parameters from + */ + void copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force); + +private: + int numGroups, numBonds; + CudaContext& cu; + CudaParameterSet* params; + CudaArray* globals; + CudaArray* groupParticles; + CudaArray* groupWeights; + CudaArray* groupOffsets; + CudaArray* groupForces; + CudaArray* bondGroups; + CudaArray* centerPositions; + std::vector globalParamNames; + std::vector globalParamValues; + std::vector tabulatedFunctions; + std::vector groupForcesArgs; + CUfunction computeCentersKernel, groupForcesKernel, applyForcesKernel; + const System& system; +}; + /** * This kernel is invoked by CustomCompoundBondForce to calculate the forces acting on the system. */ diff --git a/platforms/cuda/include/CudaNonbondedUtilities.h b/platforms/cuda/include/CudaNonbondedUtilities.h index 40744a76da734113f35b46bcf5ad00b4961253bd..48749066492a411716ca9f0d9a12dc2ebfc86a76 100644 --- a/platforms/cuda/include/CudaNonbondedUtilities.h +++ b/platforms/cuda/include/CudaNonbondedUtilities.h @@ -138,12 +138,18 @@ public: void prepareInteractions(int forceGroups); /** * Compute the nonbonded interactions. + * + * @param forceGroups the flags specifying which force groups to include + * @param includeForces whether to compute forces + * @param includeEnergy whether to compute the potential energy */ - void computeInteractions(int forceGroups); + void computeInteractions(int forceGroups, bool includeForces, bool includeEnergy); /** * Check to see if the neighbor list arrays are large enough, and make them bigger if necessary. + * + * @return true if the neighbor list needed to be enlarged. */ - void updateNeighborListSize(); + bool updateNeighborListSize(); /** * Get the array containing the center of each atom block. */ @@ -233,8 +239,10 @@ public: * @param useExclusions specifies whether exclusions are applied to this interaction * @param isSymmetric specifies whether the interaction is symmetric * @param groups the set of force groups this kernel is for + * @param includeForces whether this kernel should compute forces + * @param includeEnergy whether this kernel should compute potential energy */ - CUfunction createInteractionKernel(const std::string& source, std::vector& params, std::vector& arguments, bool useExclusions, bool isSymmetric, int groups); + CUfunction createInteractionKernel(const std::string& source, std::vector& params, std::vector& arguments, bool useExclusions, bool isSymmetric, int groups, bool includeForces, bool includeEnergy); /** * Create the set of kernels that will be needed for a particular combination of force groups. * @@ -280,7 +288,8 @@ class CudaNonbondedUtilities::KernelSet { public: bool hasForces; double cutoffDistance; - CUfunction forceKernel; + std::string source; + CUfunction forceKernel, energyKernel, forceEnergyKernel; CUfunction findBlockBoundsKernel; CUfunction sortBoxDataKernel; CUfunction findInteractingBlocksKernel; diff --git a/platforms/cuda/include/CudaParallelKernels.h b/platforms/cuda/include/CudaParallelKernels.h index f80cca43deadf87d9c1a0be746df4ce38e0eeefd..c26c28c4f4cd438ea0cf62333b854fcc267033d1 100644 --- a/platforms/cuda/include/CudaParallelKernels.h +++ b/platforms/cuda/include/CudaParallelKernels.h @@ -430,6 +430,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class Task; CudaPlatform::PlatformData& data; diff --git a/platforms/cuda/sharedTarget/CMakeLists.txt b/platforms/cuda/sharedTarget/CMakeLists.txt index 36e18b287676fa6cb7019f0277a8a1c8d6e814a7..c425464e2b422c94f634a37e23bd38fa1d40da77 100644 --- a/platforms/cuda/sharedTarget/CMakeLists.txt +++ b/platforms/cuda/sharedTarget/CMakeLists.txt @@ -18,7 +18,7 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE IF (APPLE) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) diff --git a/platforms/cuda/src/CudaBondedUtilities.cpp b/platforms/cuda/src/CudaBondedUtilities.cpp index c1a353ee53b569882df406dac1729da23b30713a..080292f5774dd5fa315c4a256341b0a5f3465826 100644 --- a/platforms/cuda/src/CudaBondedUtilities.cpp +++ b/platforms/cuda/src/CudaBondedUtilities.cpp @@ -99,7 +99,7 @@ void CudaBondedUtilities::initialize(const System& system) { s<getElementSize()/4; @@ -110,7 +110,7 @@ void CudaBondedUtilities::initialize(const System& system) { for (int i = 0; i < (int) arguments.size(); i++) s<<", "<getDevicePointer()); diff --git a/platforms/cuda/src/CudaContext.cpp b/platforms/cuda/src/CudaContext.cpp index c28e126ed897225f660a17f29deffb32059cbb52..eb2a5cd5b20bcecca56ad586cdc56dbdf5e52595 100644 --- a/platforms/cuda/src/CudaContext.cpp +++ b/platforms/cuda/src/CudaContext.cpp @@ -120,49 +120,50 @@ CudaContext::CudaContext(const System& system, int deviceIndex, bool useBlocking int numDevices; string errorMessage = "Error initializing Context"; CHECK_RESULT(cuDeviceGetCount(&numDevices)); - if (deviceIndex < 0 || deviceIndex >= numDevices) { - // Try to figure out which device is the fastest. - - int bestSpeed = -1; - int bestCompute = -1; - for (int i = 0; i < numDevices; i++) { - CHECK_RESULT(cuDeviceGet(&device, i)); - int major, minor, clock, multiprocessors; - CHECK_RESULT(cuDeviceComputeCapability(&major, &minor, device)); - if (major == 1 && minor < 2) - continue; // 1.0 and 1.1 are not supported - CHECK_RESULT(cuDeviceGetAttribute(&clock, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, device)); - CHECK_RESULT(cuDeviceGetAttribute(&multiprocessors, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT, device)); - int speed = clock*multiprocessors; - if (major > bestCompute || (major == bestCompute && speed > bestSpeed)) { - deviceIndex = i; - bestSpeed = speed; - bestCompute = major; - } + if (deviceIndex < -1 || deviceIndex >= numDevices) + throw OpenMMException("Illegal value for CudaDeviceIndex: "+intToString(deviceIndex)); + + vector devicePrecedence; + if (deviceIndex == -1) { + devicePrecedence = getDevicePrecedence(); + } else { + devicePrecedence.push_back(deviceIndex); + } + + this->deviceIndex = -1; + for (int i = 0; i < static_cast(devicePrecedence.size()); i++) { + int trialDeviceIndex = devicePrecedence[i]; + CHECK_RESULT(cuDeviceGet(&device, trialDeviceIndex)); + defaultOptimizationOptions = "--use_fast_math"; + unsigned int flags = CU_CTX_MAP_HOST; + if (useBlockingSync) + flags += CU_CTX_SCHED_BLOCKING_SYNC; + else + flags += CU_CTX_SCHED_SPIN; + + if (cuCtxCreate(&context, flags, device) == CUDA_SUCCESS) { + this->deviceIndex = trialDeviceIndex; + break; } } - if (deviceIndex == -1) - throw OpenMMException("No compatible CUDA device is available"); - CHECK_RESULT(cuDeviceGet(&device, deviceIndex)); - this->deviceIndex = deviceIndex; + if (this->deviceIndex == -1) + if (deviceIndex != -1) + throw OpenMMException("The requested CUDA device could not be loaded"); + else + throw OpenMMException("No compatible CUDA device is available"); + int major, minor; CHECK_RESULT(cuDeviceComputeCapability(&major, &minor, device)); - // This is a workaround to support GTX 980 with CUDA 6.5. It reports its compute capability - // as 5.2, but the compiler doesn't support anything beyond 5.0. We can remove this once - // CUDA 7.0 is released. - if (major == 5) - minor = 0; +#if __CUDA_API_VERSION < 7000 + // This is a workaround to support GTX 980 with CUDA 6.5. It reports + // its compute capability as 5.2, but the compiler doesn't support + // anything beyond 5.0. + if (major == 5) + minor = 0; +#endif gpuArchitecture = intToString(major)+intToString(minor); computeCapability = major+0.1*minor; - if ((useDoublePrecision || useMixedPrecision) && computeCapability < 1.3) - throw OpenMMException("This device does not support double precision"); - defaultOptimizationOptions = "--use_fast_math"; - unsigned int flags = CU_CTX_MAP_HOST; - if (useBlockingSync) - flags += CU_CTX_SCHED_BLOCKING_SYNC; - else - flags += CU_CTX_SCHED_SPIN; - CHECK_RESULT(cuCtxCreate(&context, flags, device)); + contextIsValid = true; CHECK_RESULT(cuCtxSetCacheConfig(CU_FUNC_CACHE_PREFER_SHARED)); if (contextIndex > 0) { @@ -243,9 +244,9 @@ CudaContext::CudaContext(const System& system, int deviceIndex, bool useBlocking compilationDefines["ATAN"] = useDoublePrecision ? "atan" : "atanf"; compilationDefines["ERF"] = useDoublePrecision ? "erf" : "erff"; compilationDefines["ERFC"] = useDoublePrecision ? "erfc" : "erfcf"; - + // Set defines for applying periodic boundary conditions. - + Vec3 boxVectors[3]; system.getDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); boxIsTriclinic = (boxVectors[0][1] != 0.0 || boxVectors[0][2] != 0.0 || @@ -305,11 +306,11 @@ CudaContext::CudaContext(const System& system, int deviceIndex, bool useBlocking } // Create the work thread used for parallelization when running on multiple devices. - + thread = new WorkThread(); - + // Create utilities objects. - + bonded = new CudaBondedUtilities(*this); nonbonded = new CudaNonbondedUtilities(*this); integration = new CudaIntegrationUtilities(*this, system); @@ -366,7 +367,7 @@ void CudaContext::initialize() { CHECK_RESULT(cuMemHostAlloc(&pinnedBuffer, pinnedBufferSize*sizeof(double), 0)); } else if (useMixedPrecision) { - energyBuffer = CudaArray::create(*this, numEnergyBuffers, "energyBuffer"); + energyBuffer = CudaArray::create(*this, numEnergyBuffers, "energyBuffer"); int pinnedBufferSize = max(paddedNumAtoms*4, numEnergyBuffers); CHECK_RESULT(cuMemHostAlloc(&pinnedBuffer, pinnedBufferSize*sizeof(double), 0)); } @@ -425,7 +426,7 @@ string CudaContext::replaceStrings(const string& input, const std::mapsecond); index += iter->second.size(); } @@ -460,11 +461,11 @@ static bool compileInWindows(const string &command) { return -1; } WaitForSingleObject(pi.hProcess, INFINITE); - DWORD exitCode = -1; + DWORD exitCode = -1; if(!GetExitCodeProcess(pi.hProcess, &exitCode)) { throw(OpenMMException("Could not get nvcc.exe's exit code\n")); } else { - if(exitCode == 0) + if(exitCode == 0) return 0; else return -1; @@ -520,9 +521,9 @@ CUmodule CudaContext::createModule(const string source, const map().createModule(src.str(), "-arch=compute_"+gpuArchitecture+" "+options, *this); - + // If possible, write the PTX out to a temporary file so we can cache it for later use. - + bool wroteCache = false; try { ofstream out(outputFile.c_str()); @@ -572,7 +573,7 @@ CUmodule CudaContext::createModule(const string source, const mapareParticlesIdentical(mol.atoms[i], mol2.atoms[i])) identical = false; } - + // See if the constraints are identical. for (int i = 0; i < (int) mol.constraints.size() && identical; i++) { @@ -1045,11 +1046,11 @@ void CudaContext::invalidateMolecules() { } if (valid) return; - + // The list of which molecules are identical is no longer valid. We need to restore the // atoms to their original order, rebuild the list of identical molecules, and sort them // again. - + vector newCellOffsets(numAtoms); if (useDoublePrecision) { vector oldPosq(paddedNumAtoms); @@ -1194,6 +1195,8 @@ void CudaContext::reorderAtomsImpl() { molPos[i].x *= invNumAtoms; molPos[i].y *= invNumAtoms; molPos[i].z *= invNumAtoms; + if (molPos[i].x != molPos[i].x) + throw OpenMMException("Particle coordinate is nan"); } if (nonbonded->getUsePeriodic()) { // Move each molecule position into the same box. @@ -1389,3 +1392,41 @@ void CudaContext::WorkThread::flush() { pthread_cond_wait(&queueEmptyCondition, &queueLock); pthread_mutex_unlock(&queueLock); } + + +vector CudaContext::getDevicePrecedence() { + int numDevices; + CUdevice thisDevice; + string errorMessage = "Error initializing Context"; + vector, int> > devices; + + CHECK_RESULT(cuDeviceGetCount(&numDevices)); + for (int i = 0; i < numDevices; i++) { + CHECK_RESULT(cuDeviceGet(&thisDevice, i)); + int major, minor, clock, multiprocessors, speed; + CHECK_RESULT(cuDeviceComputeCapability(&major, &minor, thisDevice)); + if (major == 1 && minor < 2) + continue; + + if ((useDoublePrecision || useMixedPrecision) && (major+0.1*minor < 1.3)) + continue; + + CHECK_RESULT(cuDeviceGetAttribute(&clock, CU_DEVICE_ATTRIBUTE_CLOCK_RATE, thisDevice)); + CHECK_RESULT(cuDeviceGetAttribute(&multiprocessors, CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT, thisDevice)); + speed = clock*multiprocessors; + pair deviceProperties = std::make_pair(major, speed); + devices.push_back(std::make_pair(deviceProperties, -i)); + } + + // sort first by compute capability (higher is better), then speed + // (higher is better), and finally device index (lower is better) + std::sort(devices.begin(), devices.end()); + std::reverse(devices.begin(), devices.end()); + + vector precedence; + for (int i = 0; i < static_cast(devices.size()); i++) { + precedence.push_back(-devices[i].second); + } + + return precedence; +} diff --git a/platforms/cuda/src/CudaExpressionUtilities.cpp b/platforms/cuda/src/CudaExpressionUtilities.cpp index 1235592d4fed832b40b6120426263cfde5cd970e..792d867358b0d58d978e3c2798b3284a21fb209c 100644 --- a/platforms/cuda/src/CudaExpressionUtilities.cpp +++ b/platforms/cuda/src/CudaExpressionUtilities.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2014 Stanford University and the Authors. * + * Portions copyright (c) 2009-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -33,7 +33,7 @@ using namespace OpenMM; using namespace Lepton; using namespace std; -CudaExpressionUtilities::CudaExpressionUtilities(CudaContext& context) : context(context), fp1(1), fp2(2), fp3(3) { +CudaExpressionUtilities::CudaExpressionUtilities(CudaContext& context) : context(context), fp1(1), fp2(2), fp3(3), periodicDistance(6) { } string CudaExpressionUtilities::createExpressions(const map& expressions, const map& variables, @@ -79,11 +79,6 @@ void CudaExpressionUtilities::processExpression(stringstream& out, const Express throw OpenMMException("Unknown variable in expression: "+node.getOperation().getName()); case Operation::CUSTOM: { - int i; - for (i = 0; i < (int) functionNames.size() && functionNames[i].first != node.getOperation().getName(); i++) - ; - if (i == functionNames.size()) - throw OpenMMException("Unknown function in expression: "+node.getOperation().getName()); out << "0.0f;\n"; temps.push_back(make_pair(node, name)); hasRecordedNode = true; @@ -93,7 +88,7 @@ void CudaExpressionUtilities::processExpression(stringstream& out, const Express vector nodes; for (int j = 0; j < (int) allExpressions.size(); j++) - findRelatedTabulatedFunctions(node, allExpressions[j].getRootNode(), nodes); + findRelatedCustomFunctions(node, allExpressions[j].getRootNode(), nodes); vector nodeNames; nodeNames.push_back(name); for (int j = 1; j < (int) nodes.size(); j++) { @@ -103,175 +98,223 @@ void CudaExpressionUtilities::processExpression(stringstream& out, const Express temps.push_back(make_pair(*nodes[j], name2)); } out << "{\n"; - vector paramsFloat, paramsInt; - for (int j = 0; j < (int) functionParams[i].size(); j++) { - paramsFloat.push_back(context.doubleToString(functionParams[i][j])); - paramsInt.push_back(context.intToString((int) functionParams[i][j])); - } - if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "if (x >= " << paramsFloat[0] << " && x <= " << paramsFloat[1] << ") {\n"; - out << "x = (x - " << paramsFloat[0] << ")*" << paramsFloat[2] << ";\n"; - out << "int index = (int) (floor(x));\n"; - out << "index = min(index, (int) " << paramsInt[3] << ");\n"; - out << "float4 coeff = " << functionNames[i].second << "[index];\n"; - out << "real b = x-index;\n"; - out << "real a = 1.0f-b;\n"; - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0) - out << nodeNames[j] << " = a*coeff.x+b*coeff.y+((a*a*a-a)*coeff.z+(b*b*b-b)*coeff.w)/(" << paramsFloat[2] << "*" << paramsFloat[2] << ");\n"; - else - out << nodeNames[j] << " = (coeff.y-coeff.x)*" << paramsFloat[2] << "+((1.0f-3.0f*a*a)*coeff.z+(3.0f*b*b-1.0f)*coeff.w)/" << paramsFloat[2] << ";\n"; + if (node.getOperation().getName() == "periodicdistance") { + // This is the periodicdistance() function. + + out << tempType << "3 periodicDistance_delta = make_real3("; + for (int i = 0; i < 3; i++) { + if (i > 0) + out << ", "; + out << getTempName(node.getChildren()[i], temps) << "-" << getTempName(node.getChildren()[i+3], temps); } - out << "}\n"; - } - else if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; - out << "if (x >= " << paramsFloat[2] << " && x <= " << paramsFloat[3] << " && y >= " << paramsFloat[4] << " && y <= " << paramsFloat[5] << ") {\n"; - out << "x = (x - " << paramsFloat[2] << ")*" << paramsFloat[6] << ";\n"; - out << "y = (y - " << paramsFloat[4] << ")*" << paramsFloat[7] << ";\n"; - out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; - out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; - out << "int coeffIndex = 4*(s+" << paramsInt[0] << "*t);\n"; - out << "float4 c[4];\n"; - for (int j = 0; j < 4; j++) - out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; - out << "real da = x-s;\n"; - out << "real db = y-t;\n"; + out << ");\n"; + out << "APPLY_PERIODIC_TO_DELTA(periodicDistance_delta)\n"; + out << tempType << " periodicDistance_r2 = periodicDistance_delta.x*periodicDistance_delta.x + periodicDistance_delta.y*periodicDistance_delta.y + periodicDistance_delta.z*periodicDistance_delta.z;\n"; + out << tempType << " periodicDistance_rinv = RSQRT(periodicDistance_r2);\n"; for (int j = 0; j < nodes.size(); j++) { const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0) { - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[3].w*db + c[3].z)*db + c[3].y)*db + c[3].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[2].w*db + c[2].z)*db + c[2].y)*db + c[2].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[1].w*db + c[1].z)*db + c[1].y)*db + c[1].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[0].w*db + c[0].z)*db + c[0].y)*db + c[0].x;\n"; - } - else if (derivOrder[0] == 1 && derivOrder[1] == 0) { - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].w*da + 2.0f*c[2].w)*da + c[1].w;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].z*da + 2.0f*c[2].z)*da + c[1].z;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].y*da + 2.0f*c[2].y)*da + c[1].y;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].x*da + 2.0f*c[2].x)*da + c[1].x;\n"; - out << nodeNames[j] << " *= " << paramsFloat[6] << ";\n"; - } - else if (derivOrder[0] == 0 && derivOrder[1] == 1) { - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[3].w*db + 2.0f*c[3].z)*db + c[3].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[2].w*db + 2.0f*c[2].z)*db + c[2].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[1].w*db + 2.0f*c[1].z)*db + c[1].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[0].w*db + 2.0f*c[0].z)*db + c[0].y;\n"; - out << nodeNames[j] << " *= " << paramsFloat[7] << ";\n"; + int argIndex = -1; + for (int k = 0; k < 6; k++) { + if (derivOrder[k] > 0) { + if (derivOrder[k] > 1 || argIndex != -1) + throw OpenMMException("Unsupported derivative of periodicdistance"); // Should be impossible for this to happen. + argIndex = k; + } } - else - throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); + if (argIndex == -1) + out << nodeNames[j] << " = RECIP(periodicDistance_rinv);\n"; + else if (argIndex == 0) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.x*periodicDistance_rinv : 0);\n"; + else if (argIndex == 1) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.y*periodicDistance_rinv : 0);\n"; + else if (argIndex == 2) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.z*periodicDistance_rinv : 0);\n"; + else if (argIndex == 3) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.x*periodicDistance_rinv : 0);\n"; + else if (argIndex == 4) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.y*periodicDistance_rinv : 0);\n"; + else if (argIndex == 5) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.z*periodicDistance_rinv : 0);\n"; } - out << "}\n"; } - else if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; - out << "real z = " << getTempName(node.getChildren()[2], temps) << ";\n"; - out << "if (x >= " << paramsFloat[3] << " && x <= " << paramsFloat[4] << " && y >= " << paramsFloat[5] << " && y <= " << paramsFloat[6] << " && z >= " << paramsFloat[7] << " && z <= " << paramsFloat[8] << ") {\n"; - out << "x = (x - " << paramsFloat[3] << ")*" << paramsFloat[9] << ";\n"; - out << "y = (y - " << paramsFloat[5] << ")*" << paramsFloat[10] << ";\n"; - out << "z = (z - " << paramsFloat[7] << ")*" << paramsFloat[11] << ";\n"; - out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; - out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; - out << "int u = min((int) floor(z), " << paramsInt[2] << ");\n"; - out << "int coeffIndex = 16*(s+" << paramsInt[0] << "*(t+" << paramsInt[1] << "*u));\n"; - out << "float4 c[16];\n"; - for (int j = 0; j < 16; j++) - out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; - out << "real da = x-s;\n"; - out << "real db = y-t;\n"; - out << "real dc = z-u;\n"; - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "real value[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "value[" << m << "] = db*value[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; - } - out << nodeNames[j] << " = value[0] + dc*(value[1] + dc*(value[2] + dc*value[3]));\n"; - } - else if (derivOrder[0] == 1 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "real derivx[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "derivx[" << m << "] = db*derivx[" << m << "] + (3*c[" << base << "].w*da + 2*c[" << base << "].z)*da + c[" << base << "].y;\n"; - } - out << nodeNames[j] << " = derivx[0] + dc*(derivx[1] + dc*(derivx[2] + dc*derivx[3]));\n"; - out << nodeNames[j] << " *= " << paramsFloat[9] << ";\n"; + else { + // This is a tabulated function. + + int i; + for (i = 0; i < (int) functionNames.size() && functionNames[i].first != node.getOperation().getName(); i++) + ; + if (i == functionNames.size()) + throw OpenMMException("Unknown function in expression: "+node.getOperation().getName()); + vector paramsFloat, paramsInt; + for (int j = 0; j < (int) functionParams[i].size(); j++) { + paramsFloat.push_back(context.doubleToString(functionParams[i][j])); + paramsInt.push_back(context.intToString((int) functionParams[i][j])); + } + if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "if (x >= " << paramsFloat[0] << " && x <= " << paramsFloat[1] << ") {\n"; + out << "x = (x - " << paramsFloat[0] << ")*" << paramsFloat[2] << ";\n"; + out << "int index = (int) (floor(x));\n"; + out << "index = min(index, (int) " << paramsInt[3] << ");\n"; + out << "float4 coeff = " << functionNames[i].second << "[index];\n"; + out << "real b = x-index;\n"; + out << "real a = 1.0f-b;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0) + out << nodeNames[j] << " = a*coeff.x+b*coeff.y+((a*a*a-a)*coeff.z+(b*b*b-b)*coeff.w)/(" << paramsFloat[2] << "*" << paramsFloat[2] << ");\n"; + else + out << nodeNames[j] << " = (coeff.y-coeff.x)*" << paramsFloat[2] << "+((1.0f-3.0f*a*a)*coeff.z+(3.0f*b*b-1.0f)*coeff.w)/" << paramsFloat[2] << ";\n"; } - else if (derivOrder[0] == 0 && derivOrder[1] == 1 && derivOrder[2] == 0) { - const string suffixes[] = {".x", ".y", ".z", ".w"}; - out << "real derivy[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = 4*m; - string suffix = suffixes[m]; - out << "derivy[" << m << "] = da*derivy[" << m << "] + (3*c[" << (base+3) << "]" << suffix << "*db + 2*c[" << (base+2) << "]" << suffix << ")*db + c[" << (base+1) << "]" << suffix << ";\n"; - } - out << nodeNames[j] << " = derivy[0] + dc*(derivy[1] + dc*(derivy[2] + dc*derivy[3]));\n"; - out << nodeNames[j] << " *= " << paramsFloat[10] << ";\n"; + out << "}\n"; + } + else if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; + out << "if (x >= " << paramsFloat[2] << " && x <= " << paramsFloat[3] << " && y >= " << paramsFloat[4] << " && y <= " << paramsFloat[5] << ") {\n"; + out << "x = (x - " << paramsFloat[2] << ")*" << paramsFloat[6] << ";\n"; + out << "y = (y - " << paramsFloat[4] << ")*" << paramsFloat[7] << ";\n"; + out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; + out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; + out << "int coeffIndex = 4*(s+" << paramsInt[0] << "*t);\n"; + out << "float4 c[4];\n"; + for (int j = 0; j < 4; j++) + out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; + out << "real da = x-s;\n"; + out << "real db = y-t;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0) { + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[3].w*db + c[3].z)*db + c[3].y)*db + c[3].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[2].w*db + c[2].z)*db + c[2].y)*db + c[2].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[1].w*db + c[1].z)*db + c[1].y)*db + c[1].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[0].w*db + c[0].z)*db + c[0].y)*db + c[0].x;\n"; + } + else if (derivOrder[0] == 1 && derivOrder[1] == 0) { + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].w*da + 2.0f*c[2].w)*da + c[1].w;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].z*da + 2.0f*c[2].z)*da + c[1].z;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].y*da + 2.0f*c[2].y)*da + c[1].y;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].x*da + 2.0f*c[2].x)*da + c[1].x;\n"; + out << nodeNames[j] << " *= " << paramsFloat[6] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 1) { + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[3].w*db + 2.0f*c[3].z)*db + c[3].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[2].w*db + 2.0f*c[2].z)*db + c[2].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[1].w*db + 2.0f*c[1].z)*db + c[1].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[0].w*db + 2.0f*c[0].z)*db + c[0].y;\n"; + out << nodeNames[j] << " *= " << paramsFloat[7] << ";\n"; + } + else + throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); } - else if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 1) { - out << "real derivz[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "derivz[" << m << "] = db*derivz[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; - } - out << nodeNames[j] << " = derivz[1] + dc*(2*derivz[2] + dc*3*derivz[3]);\n"; - out << nodeNames[j] << " *= " << paramsFloat[11] << ";\n"; + out << "}\n"; + } + else if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; + out << "real z = " << getTempName(node.getChildren()[2], temps) << ";\n"; + out << "if (x >= " << paramsFloat[3] << " && x <= " << paramsFloat[4] << " && y >= " << paramsFloat[5] << " && y <= " << paramsFloat[6] << " && z >= " << paramsFloat[7] << " && z <= " << paramsFloat[8] << ") {\n"; + out << "x = (x - " << paramsFloat[3] << ")*" << paramsFloat[9] << ";\n"; + out << "y = (y - " << paramsFloat[5] << ")*" << paramsFloat[10] << ";\n"; + out << "z = (z - " << paramsFloat[7] << ")*" << paramsFloat[11] << ";\n"; + out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; + out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; + out << "int u = min((int) floor(z), " << paramsInt[2] << ");\n"; + out << "int coeffIndex = 16*(s+" << paramsInt[0] << "*(t+" << paramsInt[1] << "*u));\n"; + out << "float4 c[16];\n"; + for (int j = 0; j < 16; j++) + out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; + out << "real da = x-s;\n"; + out << "real db = y-t;\n"; + out << "real dc = z-u;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "real value[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "value[" << m << "] = db*value[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; + } + out << nodeNames[j] << " = value[0] + dc*(value[1] + dc*(value[2] + dc*value[3]));\n"; + } + else if (derivOrder[0] == 1 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "real derivx[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "derivx[" << m << "] = db*derivx[" << m << "] + (3*c[" << base << "].w*da + 2*c[" << base << "].z)*da + c[" << base << "].y;\n"; + } + out << nodeNames[j] << " = derivx[0] + dc*(derivx[1] + dc*(derivx[2] + dc*derivx[3]));\n"; + out << nodeNames[j] << " *= " << paramsFloat[9] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 1 && derivOrder[2] == 0) { + const string suffixes[] = {".x", ".y", ".z", ".w"}; + out << "real derivy[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = 4*m; + string suffix = suffixes[m]; + out << "derivy[" << m << "] = da*derivy[" << m << "] + (3*c[" << (base+3) << "]" << suffix << "*db + 2*c[" << (base+2) << "]" << suffix << ")*db + c[" << (base+1) << "]" << suffix << ";\n"; + } + out << nodeNames[j] << " = derivy[0] + dc*(derivy[1] + dc*(derivy[2] + dc*derivy[3]));\n"; + out << nodeNames[j] << " *= " << paramsFloat[10] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 1) { + out << "real derivz[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "derivz[" << m << "] = db*derivz[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; + } + out << nodeNames[j] << " = derivz[1] + dc*(2*derivz[2] + dc*3*derivz[3]);\n"; + out << nodeNames[j] << " *= " << paramsFloat[11] << ";\n"; + } + else + throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); } - else - throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); + out << "}\n"; } - out << "}\n"; - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "if (x >= 0 && x < " << paramsInt[0] << ") {\n"; - out << "int index = (int) floor(x+0.5f);\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; - out << "}\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "if (x >= 0 && x < " << paramsInt[0] << ") {\n"; + out << "int index = (int) floor(x+0.5f);\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + out << "}\n"; + } } } - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0) { - out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; - out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; - out << "int xsize = (int) " << paramsInt[0] << ";\n"; - out << "int ysize = (int) " << paramsInt[1] << ";\n"; - out << "int index = x+y*xsize;\n"; - out << "if (index >= 0 && index < xsize*ysize)\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0) { + out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; + out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; + out << "int xsize = (int) " << paramsInt[0] << ";\n"; + out << "int ysize = (int) " << paramsInt[1] << ";\n"; + out << "int index = x+y*xsize;\n"; + out << "if (index >= 0 && index < xsize*ysize)\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + } } } - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; - out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; - out << "int z = (int) floor(" << getTempName(node.getChildren()[2], temps) << "+0.5f);\n"; - out << "int xsize = (int) " << paramsInt[0] << ";\n"; - out << "int ysize = (int) " << paramsInt[1] << ";\n"; - out << "int zsize = (int) " << paramsInt[2] << ";\n"; - out << "int index = x+(y+z*ysize)*xsize;\n"; - out << "if (index >= 0 && index < xsize*ysize*zsize)\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; + out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; + out << "int z = (int) floor(" << getTempName(node.getChildren()[2], temps) << "+0.5f);\n"; + out << "int xsize = (int) " << paramsInt[0] << ";\n"; + out << "int ysize = (int) " << paramsInt[1] << ";\n"; + out << "int zsize = (int) " << paramsInt[2] << ";\n"; + out << "int index = x+(y+z*ysize)*xsize;\n"; + out << "if (index >= 0 && index < xsize*ysize*zsize)\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + } } } } @@ -483,7 +526,7 @@ string CudaExpressionUtilities::getTempName(const ExpressionTreeNode& node, cons throw OpenMMException(out.str()); } -void CudaExpressionUtilities::findRelatedTabulatedFunctions(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, +void CudaExpressionUtilities::findRelatedCustomFunctions(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, vector& nodes) { if (searchNode.getOperation().getId() == Operation::CUSTOM && node.getOperation().getName() == searchNode.getOperation().getName()) { // Make sure the arguments are identical. @@ -504,7 +547,7 @@ void CudaExpressionUtilities::findRelatedTabulatedFunctions(const ExpressionTree } else for (int i = 0; i < (int) searchNode.getChildren().size(); i++) - findRelatedTabulatedFunctions(node, searchNode.getChildren()[i], nodes); + findRelatedCustomFunctions(node, searchNode.getChildren()[i], nodes); } void CudaExpressionUtilities::findRelatedPowers(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, map& powers) { @@ -730,3 +773,7 @@ Lepton::CustomFunction* CudaExpressionUtilities::getFunctionPlaceholder(const Ta return &fp3; throw OpenMMException("getFunctionPlaceholder: Unknown function type"); } + +Lepton::CustomFunction* CudaExpressionUtilities::getPeriodicDistancePlaceholder() { + return &periodicDistance; +} diff --git a/platforms/cuda/src/CudaIntegrationUtilities.cpp b/platforms/cuda/src/CudaIntegrationUtilities.cpp index 6deb2565b4c90072624eeef53334f3ec835d8843..b27bf3ce09460fbe38399b738f2b3b8cb97693dd 100644 --- a/platforms/cuda/src/CudaIntegrationUtilities.cpp +++ b/platforms/cuda/src/CudaIntegrationUtilities.cpp @@ -201,15 +201,17 @@ CudaIntegrationUtilities::CudaIntegrationUtilities(CudaContext& context, const S params.push_back(make_float2(dist13, dist12)); } else - throw OpenMMException("Two of the three distances constrained with SETTLE must be the same."); + continue; // We can't handle this with SETTLE isShakeAtom[atom1] = true; isShakeAtom[atom2] = true; isShakeAtom[atom3] = true; } - settleAtoms = CudaArray::create(context, atoms.size(), "settleAtoms"); - settleParams = CudaArray::create(context, params.size(), "settleParams"); - settleAtoms->upload(atoms); - settleParams->upload(params); + if (atoms.size() > 0) { + settleAtoms = CudaArray::create(context, atoms.size(), "settleAtoms"); + settleParams = CudaArray::create(context, params.size(), "settleParams"); + settleAtoms->upload(atoms); + settleParams->upload(params); + } } // Find clusters consisting of a central atom with up to three peripheral atoms. diff --git a/platforms/cuda/src/CudaKernelFactory.cpp b/platforms/cuda/src/CudaKernelFactory.cpp index 9f570f594ac26c7054909230b838907ced75510e..376cc7865235496d1c3b69f9e340d9786b2a5380 100644 --- a/platforms/cuda/src/CudaKernelFactory.cpp +++ b/platforms/cuda/src/CudaKernelFactory.cpp @@ -104,6 +104,8 @@ KernelImpl* CudaKernelFactory::createKernelImpl(std::string name, const Platform return new CudaCalcCustomExternalForceKernel(name, platform, cu, context.getSystem()); if (name == CalcCustomHbondForceKernel::Name()) return new CudaCalcCustomHbondForceKernel(name, platform, cu, context.getSystem()); + if (name == CalcCustomCentroidBondForceKernel::Name()) + return new CudaCalcCustomCentroidBondForceKernel(name, platform, cu, context.getSystem()); if (name == CalcCustomCompoundBondForceKernel::Name()) return new CudaCalcCustomCompoundBondForceKernel(name, platform, cu, context.getSystem()); if (name == CalcCustomManyParticleForceKernel::Name()) diff --git a/platforms/cuda/src/CudaKernels.cpp b/platforms/cuda/src/CudaKernels.cpp index bcc5aa4cc366a5ddc35d1a96fc2f9e3f0ff49868..cb8421487127f72bbcba414ad81c9d79773e1f1c 100644 --- a/platforms/cuda/src/CudaKernels.cpp +++ b/platforms/cuda/src/CudaKernels.cpp @@ -31,6 +31,7 @@ #include "openmm/internal/AndersenThermostatImpl.h" #include "openmm/internal/CMAPTorsionForceImpl.h" #include "openmm/internal/ContextImpl.h" +#include "openmm/internal/CustomCentroidBondForceImpl.h" #include "openmm/internal/CustomCompoundBondForceImpl.h" #include "openmm/internal/CustomHbondForceImpl.h" #include "openmm/internal/CustomManyParticleForceImpl.h" @@ -104,14 +105,14 @@ void CudaCalcForcesAndEnergyKernel::beginComputation(ContextImpl& context, bool double CudaCalcForcesAndEnergyKernel::finishComputation(ContextImpl& context, bool includeForces, bool includeEnergy, int groups, bool& valid) { cu.getBondedUtilities().computeInteractions(groups); - cu.getNonbondedUtilities().computeInteractions(groups); + cu.getNonbondedUtilities().computeInteractions(groups, includeForces, includeEnergy); double sum = 0.0; for (vector::iterator iter = cu.getPostComputations().begin(); iter != cu.getPostComputations().end(); ++iter) sum += (*iter)->computeForceAndEnergy(includeForces, includeEnergy, groups); cu.getIntegrationUtilities().distributeForcesFromVirtualSites(); if (includeEnergy) { CudaArray& energyArray = cu.getEnergyBuffer(); - if (cu.getUseDoublePrecision()) { + if (cu.getUseDoublePrecision() || cu.getUseMixedPrecision()) { double* energy = (double*) cu.getPinnedBuffer(); energyArray.download(energy); for (int i = 0; i < energyArray.getSize(); i++) @@ -1560,8 +1561,9 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon } posq.upload(&temp[0]); sigmaEpsilon->upload(sigmaEpsilonVector); - bool useCutoff = (force.getNonbondedMethod() != NonbondedForce::NoCutoff); - bool usePeriodic = (force.getNonbondedMethod() != NonbondedForce::NoCutoff && force.getNonbondedMethod() != NonbondedForce::CutoffNonPeriodic); + nonbondedMethod = CalcNonbondedForceKernel::NonbondedMethod(force.getNonbondedMethod()); + bool useCutoff = (nonbondedMethod != NoCutoff); + bool usePeriodic = (nonbondedMethod != NoCutoff && nonbondedMethod != CutoffNonPeriodic); map defines; defines["HAS_COULOMB"] = (hasCoulomb ? "1" : "0"); defines["HAS_LENNARD_JONES"] = (hasLJ ? "1" : "0"); @@ -1589,7 +1591,7 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon dispersionCoefficient = 0.0; alpha = 0; ewaldSelfEnergy = 0.0; - if (force.getNonbondedMethod() == NonbondedForce::Ewald) { + if (nonbondedMethod == Ewald) { // Compute the Ewald parameters. int kmaxx, kmaxy, kmaxz; @@ -1618,11 +1620,9 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon cosSinSums = new CudaArray(cu, (2*kmaxx-1)*(2*kmaxy-1)*(2*kmaxz-1), elementSize, "cosSinSums"); } } - else if (force.getNonbondedMethod() == NonbondedForce::PME) { + else if (nonbondedMethod == PME) { // Compute the PME parameters. - int gridSizeX, gridSizeY, gridSizeZ; - NonbondedForceImpl::calcPMEParameters(system, force, alpha, gridSizeX, gridSizeY, gridSizeZ); gridSizeX = CudaFFT3D::findLegalDimension(gridSizeX); gridSizeY = CudaFFT3D::findLegalDimension(gridSizeY); @@ -1682,7 +1682,9 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon pmeAtomRange = CudaArray::create(cu, gridSizeX*gridSizeY*gridSizeZ+1, "pmeAtomRange"); pmeAtomGridIndex = CudaArray::create(cu, numParticles, "pmeAtomGridIndex"); sort = new CudaSort(cu, new SortTrait(), cu.getNumAtoms()); - useCudaFFT = false; // We might switch back in the future, once Nvidia has all their bugs worked out + int cufftVersion; + cufftGetVersion(&cufftVersion); + useCudaFFT = (cufftVersion >= 7050); // There was a critical bug in version 7.0 if (useCudaFFT) { cufftResult result = cufftPlan3d(&fftForward, gridSizeX, gridSizeY, gridSizeZ, cu.getUseDoublePrecision() ? CUFFT_D2Z : CUFFT_R2C); if (result != CUFFT_SUCCESS) @@ -1993,14 +1995,26 @@ void CudaCalcNonbondedForceKernel::copyParametersToContext(ContextImpl& context, // Compute other values. - NonbondedForce::NonbondedMethod method = force.getNonbondedMethod(); - if (method == NonbondedForce::Ewald || method == NonbondedForce::PME) + if (nonbondedMethod == Ewald || nonbondedMethod == PME) ewaldSelfEnergy = (cu.getContextIndex() == 0 ? -ONE_4PI_EPS0*alpha*sumSquaredCharges/sqrt(M_PI) : 0.0); - if (force.getUseDispersionCorrection() && cu.getContextIndex() == 0 && (method == NonbondedForce::CutoffPeriodic || method == NonbondedForce::Ewald || method == NonbondedForce::PME)) + if (force.getUseDispersionCorrection() && cu.getContextIndex() == 0 && (nonbondedMethod == CutoffPeriodic || nonbondedMethod == Ewald || nonbondedMethod == PME)) dispersionCoefficient = NonbondedForceImpl::calcDispersionCorrection(context.getSystem(), force); cu.invalidateMolecules(); } +void CudaCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (nonbondedMethod != PME) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + if (cu.getPlatformData().useCpuPme) + cpuPme.getAs().getPMEParameters(alpha, nx, ny, nz); + else { + alpha = this->alpha; + nx = gridSizeX; + ny = gridSizeY; + nz = gridSizeZ; + } +} + class CudaCustomNonbondedForceInfo : public CudaForceInfo { public: CudaCustomNonbondedForceInfo(const CustomNonbondedForce& force) : force(force) { @@ -2570,8 +2584,8 @@ void CudaCalcGBSAOBCForceKernel::initialize(const System& system, const GBSAOBCF cutoff = force.getCutoffDistance(); string source = CudaKernelSources::gbsaObc2; nb.addInteraction(useCutoff, usePeriodic, false, cutoff, vector >(), source, force.getForceGroup()); - nb.addParameter(CudaNonbondedUtilities::ParameterInfo("obcParams", "float", 2, sizeof(float2), params->getDevicePointer()));; - nb.addParameter(CudaNonbondedUtilities::ParameterInfo("bornForce", "long long", 1, sizeof(long long), bornForce->getDevicePointer()));; + nb.addParameter(CudaNonbondedUtilities::ParameterInfo("obcParams", "float", 2, sizeof(float2), params->getDevicePointer())); + nb.addParameter(CudaNonbondedUtilities::ParameterInfo("bornForce", "long long", 1, sizeof(long long), bornForce->getDevicePointer())); cu.addForce(new CudaGBSAOBCForceInfo(force)); } @@ -3638,7 +3652,9 @@ void CudaCalcCustomExternalForceKernel::initialize(const System& system, const C globalParamNames[i] = force.getGlobalParameterName(i); globalParamValues[i] = (float) force.getGlobalParameterDefaultValue(i); } - Lepton::ParsedExpression energyExpression = Lepton::Parser::parse(force.getEnergyFunction()).optimize(); + map customFunctions; + customFunctions["periodicdistance"] = cu.getExpressionUtilities().getPeriodicDistancePlaceholder(); + Lepton::ParsedExpression energyExpression = Lepton::Parser::parse(force.getEnergyFunction(), customFunctions).optimize(); Lepton::ParsedExpression forceExpressionX = energyExpression.differentiate("x").optimize(); Lepton::ParsedExpression forceExpressionY = energyExpression.differentiate("y").optimize(); Lepton::ParsedExpression forceExpressionZ = energyExpression.differentiate("z").optimize(); @@ -4242,6 +4258,435 @@ void CudaCalcCustomHbondForceKernel::copyParametersToContext(ContextImpl& contex cu.invalidateMolecules(); } +class CudaCustomCentroidBondForceInfo : public CudaForceInfo { +public: + CudaCustomCentroidBondForceInfo(const CustomCentroidBondForce& force) : force(force) { + } + int getNumParticleGroups() { + return force.getNumBonds(); + } + void getParticlesInGroup(int index, vector& particles) { + vector parameters; + vector groups; + force.getBondParameters(index, groups, parameters); + for (int i = 0; i < groups.size(); i++) { + vector groupParticles; + vector weights; + force.getGroupParameters(groups[i], groupParticles, weights); + particles.insert(particles.end(), groupParticles.begin(), groupParticles.end()); + } + } + bool areGroupsIdentical(int group1, int group2) { + vector groups1, groups2; + vector parameters1, parameters2; + force.getBondParameters(group1, groups1, parameters1); + force.getBondParameters(group2, groups2, parameters2); + for (int i = 0; i < (int) parameters1.size(); i++) + if (parameters1[i] != parameters2[i]) + return false; + for (int i = 0; i < groups1.size(); i++) { + vector groupParticles; + vector weights1, weights2; + force.getGroupParameters(groups1[i], groupParticles, weights1); + force.getGroupParameters(groups2[i], groupParticles, weights2); + if (weights1.size() != weights2.size()) + return false; + for (int j = 0; j < weights1.size(); j++) + if (weights1[j] != weights2[j]) + return false; + } + return true; + } +private: + const CustomCentroidBondForce& force; +}; + +CudaCalcCustomCentroidBondForceKernel::~CudaCalcCustomCentroidBondForceKernel() { + cu.setAsCurrent(); + if (params != NULL) + delete params; + if (globals != NULL) + delete globals; + if (groupParticles != NULL) + delete groupParticles; + if (groupWeights != NULL) + delete groupWeights; + if (groupOffsets != NULL) + delete groupOffsets; + if (groupForces != NULL) + delete groupForces; + if (bondGroups != NULL) + delete bondGroups; + if (centerPositions != NULL) + delete centerPositions; + for (int i = 0; i < (int) tabulatedFunctions.size(); i++) + delete tabulatedFunctions[i]; +} + +void CudaCalcCustomCentroidBondForceKernel::initialize(const System& system, const CustomCentroidBondForce& force) { + cu.setAsCurrent(); + numBonds = force.getNumBonds(); + if (numBonds == 0) + return; + cu.addForce(new CudaCustomCentroidBondForceInfo(force)); + + // Record the groups. + + numGroups = force.getNumGroups(); + vector groupParticleVec; + vector groupWeightVecFloat; + vector groupWeightVecDouble; + vector groupOffsetVec; + groupOffsetVec.push_back(0); + for (int i = 0; i < numGroups; i++) { + vector particles; + vector weights; + force.getGroupParameters(i, particles, weights); + groupParticleVec.insert(groupParticleVec.end(), particles.begin(), particles.end()); + groupOffsetVec.push_back(groupParticleVec.size()); + } + vector > normalizedWeights; + CustomCentroidBondForceImpl::computeNormalizedWeights(force, system, normalizedWeights); + if (cu.getUseDoublePrecision()) { + for (int i = 0; i < numGroups; i++) + groupWeightVecDouble.insert(groupWeightVecDouble.end(), normalizedWeights[i].begin(), normalizedWeights[i].end()); + } + else { + for (int i = 0; i < numGroups; i++) + for (int j = 0; j < normalizedWeights[i].size(); j++) + groupWeightVecFloat.push_back((float) normalizedWeights[i][j]); + } + groupParticles = CudaArray::create(cu, groupParticleVec.size(), "groupParticles"); + groupParticles->upload(groupParticleVec); + if (cu.getUseDoublePrecision()) { + groupWeights = CudaArray::create(cu, groupParticleVec.size(), "groupWeights"); + groupWeights->upload(groupWeightVecDouble); + centerPositions = CudaArray::create(cu, numGroups, "centerPositions"); + } + else { + groupWeights = CudaArray::create(cu, groupParticleVec.size(), "groupWeights"); + groupWeights->upload(groupWeightVecFloat); + centerPositions = CudaArray::create(cu, numGroups, "centerPositions"); + } + groupOffsets = CudaArray::create(cu, groupOffsetVec.size(), "groupOffsets"); + groupOffsets->upload(groupOffsetVec); + groupForces = CudaArray::create(cu, numGroups*3, "groupForces"); + cu.addAutoclearBuffer(*groupForces); + + // Record the bonds. + + int groupsPerBond = force.getNumGroupsPerBond(); + vector bondGroupVec(numBonds*groupsPerBond); + params = new CudaParameterSet(cu, force.getNumPerBondParameters(), numBonds, "customCentroidBondParams"); + vector > paramVector(numBonds); + for (int i = 0; i < numBonds; i++) { + vector groups; + vector parameters; + force.getBondParameters(i, groups, parameters); + for (int j = 0; j < groups.size(); j++) + bondGroupVec[i+j*numBonds] = groups[j]; + paramVector[i].resize(parameters.size()); + for (int j = 0; j < (int) parameters.size(); j++) + paramVector[i][j] = (float) parameters[j]; + } + params->setParameterValues(paramVector); + bondGroups = CudaArray::create(cu, bondGroupVec.size(), "bondGroups"); + bondGroups->upload(bondGroupVec); + + // Record the arguments to the force kernel. + + groupForcesArgs.push_back(&groupForces->getDevicePointer()); + groupForcesArgs.push_back(NULL); // Energy buffer hasn't been created yet + groupForcesArgs.push_back(¢erPositions->getDevicePointer()); + groupForcesArgs.push_back(&bondGroups->getDevicePointer()); + + // Record the tabulated functions. + + map functions; + vector > functionDefinitions; + vector functionList; + stringstream extraArgs; + for (int i = 0; i < force.getNumTabulatedFunctions(); i++) { + functionList.push_back(&force.getTabulatedFunction(i)); + string name = force.getTabulatedFunctionName(i); + string arrayName = "table"+cu.intToString(i); + functionDefinitions.push_back(make_pair(name, arrayName)); + functions[name] = cu.getExpressionUtilities().getFunctionPlaceholder(force.getTabulatedFunction(i)); + int width; + vector f = cu.getExpressionUtilities().computeFunctionCoefficients(force.getTabulatedFunction(i), width); + tabulatedFunctions.push_back(CudaArray::create(cu, f.size(), "TabulatedFunction")); + tabulatedFunctions.back()->upload(f); + extraArgs << ", const float"; + if (width > 1) + extraArgs << width; + extraArgs << "* __restrict__ " << arrayName; + groupForcesArgs.push_back(&tabulatedFunctions.back()->getDevicePointer()); + } + + // Record information about parameters. + + globalParamNames.resize(force.getNumGlobalParameters()); + globalParamValues.resize(force.getNumGlobalParameters()); + for (int i = 0; i < force.getNumGlobalParameters(); i++) { + globalParamNames[i] = force.getGlobalParameterName(i); + globalParamValues[i] = (float) force.getGlobalParameterDefaultValue(i); + } + map variables; + for (int i = 0; i < groupsPerBond; i++) { + string index = cu.intToString(i+1); + variables["x"+index] = "pos"+index+".x"; + variables["y"+index] = "pos"+index+".y"; + variables["z"+index] = "pos"+index+".z"; + } + for (int i = 0; i < force.getNumPerBondParameters(); i++) { + const string& name = force.getPerBondParameterName(i); + variables[name] = "bondParams"+params->getParameterSuffix(i); + } + if (force.getNumGlobalParameters() > 0) { + globals = CudaArray::create(cu, force.getNumGlobalParameters(), "customCentroidBondGlobals"); + globals->upload(globalParamValues); + extraArgs << ", const float* __restrict__ globals"; + for (int i = 0; i < force.getNumGlobalParameters(); i++) { + const string& name = force.getGlobalParameterName(i); + string value = "globals["+cu.intToString(i)+"]"; + variables[name] = value; + } + groupForcesArgs.push_back(&globals->getDevicePointer()); + } + + // Now to generate the kernel. First, it needs to calculate all distances, angles, + // and dihedrals the expression depends on. + + map > distances; + map > angles; + map > dihedrals; + Lepton::ParsedExpression energyExpression = CustomCentroidBondForceImpl::prepareExpression(force, functions, distances, angles, dihedrals); + map forceExpressions; + set computedDeltas; + vector atomNames, posNames; + for (int i = 0; i < groupsPerBond; i++) { + string index = cu.intToString(i+1); + atomNames.push_back("P"+index); + posNames.push_back("pos"+index); + } + stringstream compute; + for (int i = 0; i < groupsPerBond; i++) { + compute<<"int group"<<(i+1)<<" = bondGroups[index+"<<(i*numBonds)<<"];\n"; + compute<<"real4 pos"<<(i+1)<<" = centerPositions[group"<<(i+1)<<"];\n"; + } + int index = 0; + for (map >::const_iterator iter = distances.begin(); iter != distances.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName = atomNames[groups[0]]+atomNames[groups[1]]; + if (computedDeltas.count(deltaName) == 0) { + compute<<"real4 delta"<first] = "r_"+deltaName; + forceExpressions["real dEdDistance"+cu.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + index = 0; + for (map >::const_iterator iter = angles.begin(); iter != angles.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[1]]+atomNames[groups[0]]; + string deltaName2 = atomNames[groups[1]]+atomNames[groups[2]]; + string angleName = "angle_"+atomNames[groups[0]]+atomNames[groups[1]]+atomNames[groups[2]]; + if (computedDeltas.count(deltaName1) == 0) { + compute<<"real4 delta"<first] = angleName; + forceExpressions["real dEdAngle"+cu.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + index = 0; + for (map >::const_iterator iter = dihedrals.begin(); iter != dihedrals.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[0]]+atomNames[groups[1]]; + string deltaName2 = atomNames[groups[2]]+atomNames[groups[1]]; + string deltaName3 = atomNames[groups[2]]+atomNames[groups[3]]; + string crossName1 = "cross_"+deltaName1+"_"+deltaName2; + string crossName2 = "cross_"+deltaName2+"_"+deltaName3; + string dihedralName = "dihedral_"+atomNames[groups[0]]+atomNames[groups[1]]+atomNames[groups[2]]+atomNames[groups[3]]; + if (computedDeltas.count(deltaName1) == 0) { + compute<<"real4 delta"<first] = dihedralName; + forceExpressions["real dEdDihedral"+cu.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + + // Now evaluate the expressions. + + for (int i = 0; i < (int) params->getBuffers().size(); i++) { + CudaNonbondedUtilities::ParameterInfo& buffer = params->getBuffers()[i]; + extraArgs<<", const "< forceNames; + for (int i = 0; i < groupsPerBond; i++) { + string istr = cu.intToString(i+1); + string forceName = "force"+istr; + forceNames.push_back(forceName); + compute<<"real3 "< expressions; + if (!isZeroExpression(forceExpressionX)) + expressions[forceName+".x -= "] = forceExpressionX; + if (!isZeroExpression(forceExpressionY)) + expressions[forceName+".y -= "] = forceExpressionY; + if (!isZeroExpression(forceExpressionZ)) + expressions[forceName+".z -= "] = forceExpressionZ; + if (expressions.size() > 0) + compute< >::const_iterator iter = distances.begin(); iter != distances.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName = atomNames[groups[0]]+atomNames[groups[1]]; + string value = "(dEdDistance"+cu.intToString(index)+"/r_"+deltaName+")*trim(delta"+deltaName+")"; + compute< >::const_iterator iter = angles.begin(); iter != angles.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[1]]+atomNames[groups[0]]; + string deltaName2 = atomNames[groups[1]]+atomNames[groups[2]]; + compute<<"{\n"; + compute<<"real3 crossProd = cross(delta"< >::const_iterator iter = dihedrals.begin(); iter != dihedrals.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[0]]+atomNames[groups[1]]; + string deltaName2 = atomNames[groups[2]]+atomNames[groups[1]]; + string deltaName3 = atomNames[groups[2]]+atomNames[groups[3]]; + string crossName1 = "cross_"+deltaName1+"_"+deltaName2; + string crossName2 = "cross_"+deltaName2+"_"+deltaName3; + compute<<"{\n"; + compute<<"real r = sqrt(delta"<((long long) (force"<<(i+1)<<".x*0x100000000)));\n"; + compute<<"atomicAdd(&groupForce[group"<<(i+1)<<"+NUM_GROUPS], static_cast((long long) (force"<<(i+1)<<".y*0x100000000)));\n"; + compute<<"atomicAdd(&groupForce[group"<<(i+1)<<"+NUM_GROUPS*2], static_cast((long long) (force"<<(i+1)<<".z*0x100000000)));\n"; + compute<<"__threadfence_block();\n"; + } + map replacements; + replacements["M_PI"] = cu.doubleToString(M_PI); + replacements["NUM_GROUPS"] = cu.intToString(numGroups); + replacements["NUM_BONDS"] = cu.intToString(numBonds); + replacements["PADDED_NUM_ATOMS"] = cu.intToString(cu.getPaddedNumAtoms()); + replacements["EXTRA_ARGS"] = extraArgs.str(); + replacements["COMPUTE_FORCE"] = compute.str(); + CUmodule module = cu.createModule(CudaKernelSources::vectorOps+cu.replaceStrings(CudaKernelSources::customCentroidBond, replacements)); + computeCentersKernel = cu.getKernel(module, "computeGroupCenters"); + groupForcesKernel = cu.getKernel(module, "computeGroupForces"); + applyForcesKernel = cu.getKernel(module, "applyForcesToAtoms"); +} + +double CudaCalcCustomCentroidBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { + if (numBonds == 0) + return 0.0; + if (globals != NULL) { + bool changed = false; + for (int i = 0; i < (int) globalParamNames.size(); i++) { + float value = (float) context.getParameter(globalParamNames[i]); + if (value != globalParamValues[i]) + changed = true; + globalParamValues[i] = value; + } + if (changed) + globals->upload(globalParamValues); + } + void* computeCentersArgs[] = {&cu.getPosq().getDevicePointer(), &groupParticles->getDevicePointer(), &groupWeights->getDevicePointer(), + &groupOffsets->getDevicePointer(), ¢erPositions->getDevicePointer()}; + cu.executeKernel(computeCentersKernel, computeCentersArgs, CudaContext::TileSize*numGroups); + groupForcesArgs[1] = &cu.getEnergyBuffer().getDevicePointer(); + cu.executeKernel(groupForcesKernel, &groupForcesArgs[0], numBonds); + void* applyForcesArgs[] = {&groupParticles->getDevicePointer(), &groupWeights->getDevicePointer(), &groupOffsets->getDevicePointer(), + &groupForces->getDevicePointer(), &cu.getForce().getDevicePointer()}; + cu.executeKernel(applyForcesKernel, applyForcesArgs, CudaContext::TileSize*numGroups); + return 0.0; +} + +void CudaCalcCustomCentroidBondForceKernel::copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force) { + cu.setAsCurrent(); + if (numBonds != force.getNumBonds()) + throw OpenMMException("updateParametersInContext: The number of bonds has changed"); + if (numBonds == 0) + return; + + // Record the per-bond parameters. + + vector > paramVector(numBonds); + vector particles; + vector parameters; + for (int i = 0; i < numBonds; i++) { + force.getBondParameters(i, particles, parameters); + paramVector[i].resize(parameters.size()); + for (int j = 0; j < (int) parameters.size(); j++) + paramVector[i][j] = (float) parameters[j]; + } + params->setParameterValues(paramVector); + + // Mark that the current reordering may be invalid. + + cu.invalidateMolecules(); +} + class CudaCustomCompoundBondForceInfo : public CudaForceInfo { public: CudaCustomCompoundBondForceInfo(const CustomCompoundBondForce& force) : force(force) { @@ -4304,7 +4749,6 @@ void CudaCalcCustomCompoundBondForceKernel::initialize(const System& system, con map functions; vector > functionDefinitions; vector functionList; - stringstream tableArgs; for (int i = 0; i < force.getNumTabulatedFunctions(); i++) { functionList.push_back(&force.getTabulatedFunction(i)); string name = force.getTabulatedFunctionName(i); @@ -4507,7 +4951,7 @@ void CudaCalcCustomCompoundBondForceKernel::initialize(const System& system, con cu.getBondedUtilities().addInteraction(atoms, compute.str(), force.getForceGroup()); map replacements; replacements["M_PI"] = cu.doubleToString(M_PI); - cu.getBondedUtilities().addPrefixCode(cu.replaceStrings(CudaKernelSources::customCompoundBond, replacements));; + cu.getBondedUtilities().addPrefixCode(cu.replaceStrings(CudaKernelSources::customCompoundBond, replacements)); } double CudaCalcCustomCompoundBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { diff --git a/platforms/cuda/src/CudaNonbondedUtilities.cpp b/platforms/cuda/src/CudaNonbondedUtilities.cpp index ac39d2b1f54789e7ffb55799836ffb3dcdf49438..3b5d70abb3f9d9536c58992f8ee4a1d07ddd1038 100644 --- a/platforms/cuda/src/CudaNonbondedUtilities.cpp +++ b/platforms/cuda/src/CudaNonbondedUtilities.cpp @@ -375,32 +375,38 @@ void CudaNonbondedUtilities::prepareInteractions(int forceGroups) { if (lastCutoff != kernels.cutoffDistance) forceRebuildNeighborList = true; - context.executeKernel(kernels.findBlockBoundsKernel, &findBlockBoundsArgs[0], context.getNumAtoms()); - blockSorter->sort(*sortedBlocks); - context.executeKernel(kernels.sortBoxDataKernel, &sortBoxDataArgs[0], context.getNumAtoms()); - context.executeKernel(kernels.findInteractingBlocksKernel, &findInteractingBlocksArgs[0], context.getNumAtoms(), 256); - forceRebuildNeighborList = false; + bool rebuild = false; + do { + context.executeKernel(kernels.findBlockBoundsKernel, &findBlockBoundsArgs[0], context.getNumAtoms()); + blockSorter->sort(*sortedBlocks); + context.executeKernel(kernels.sortBoxDataKernel, &sortBoxDataArgs[0], context.getNumAtoms()); + context.executeKernel(kernels.findInteractingBlocksKernel, &findInteractingBlocksArgs[0], context.getNumAtoms(), 256); + forceRebuildNeighborList = false; + if (context.getComputeForceCount() == 1) + rebuild = updateNeighborListSize(); // This is the first time step, so check whether our initial guess was large enough. + } while(rebuild); lastCutoff = kernels.cutoffDistance; } -void CudaNonbondedUtilities::computeInteractions(int forceGroups) { +void CudaNonbondedUtilities::computeInteractions(int forceGroups, bool includeForces, bool includeEnergy) { if ((forceGroups&groupFlags) == 0) return; KernelSet& kernels = groupKernels[forceGroups]; if (kernels.hasForces) { - context.executeKernel(kernels.forceKernel, &forceArgs[0], numForceThreadBlocks*forceThreadBlockSize, forceThreadBlockSize); - if (context.getComputeForceCount() == 1) - updateNeighborListSize(); // This is the first time step, so check whether our initial guess was large enough. + CUfunction& kernel = (includeForces ? (includeEnergy ? kernels.forceEnergyKernel : kernels.forceKernel) : kernels.energyKernel); + if (kernel == NULL) + kernel = createInteractionKernel(kernels.source, parameters, arguments, true, true, forceGroups, includeForces, includeEnergy); + context.executeKernel(kernel, &forceArgs[0], numForceThreadBlocks*forceThreadBlockSize, forceThreadBlockSize); } } -void CudaNonbondedUtilities::updateNeighborListSize() { +bool CudaNonbondedUtilities::updateNeighborListSize() { if (!useCutoff) - return; + return false; unsigned int* pinnedInteractionCount = (unsigned int*) context.getPinnedBuffer(); interactionCount->download(pinnedInteractionCount); if (pinnedInteractionCount[0] <= (unsigned int) maxTiles) - return; + return false; // The most recent timestep had too many interactions to fit in the arrays. Make the arrays bigger to prevent // this from happening in the future. @@ -422,6 +428,7 @@ void CudaNonbondedUtilities::updateNeighborListSize() { forceArgs[17] = &interactingAtoms->getDevicePointer(); findInteractingBlocksArgs[7] = &interactingAtoms->getDevicePointer(); forceRebuildNeighborList = true; + return true; } void CudaNonbondedUtilities::setUsePadding(bool padding) { @@ -450,8 +457,8 @@ void CudaNonbondedUtilities::createKernelsForGroups(int groups) { } kernels.hasForces = (source.size() > 0); kernels.cutoffDistance = cutoff; - if (kernels.hasForces) - kernels.forceKernel = createInteractionKernel(source, parameters, arguments, true, true, groups); + kernels.source = source; + kernels.forceKernel = kernels.energyKernel = kernels.forceEnergyKernel = NULL; if (useCutoff) { double padding = (usePadding ? 0.1*cutoff : 0.0); double paddedCutoff = cutoff+padding; @@ -474,7 +481,7 @@ void CudaNonbondedUtilities::createKernelsForGroups(int groups) { groupKernels[groups] = kernels; } -CUfunction CudaNonbondedUtilities::createInteractionKernel(const string& source, vector& params, vector& arguments, bool useExclusions, bool isSymmetric, int groups) { +CUfunction CudaNonbondedUtilities::createInteractionKernel(const string& source, vector& params, vector& arguments, bool useExclusions, bool isSymmetric, int groups, bool includeForces, bool includeEnergy) { map replacements; replacements["COMPUTE_INTERACTION"] = source; const string suffixes[] = {"x", "y", "z", "w"}; @@ -650,6 +657,10 @@ CUfunction CudaNonbondedUtilities::createInteractionKernel(const string& source, defines["USE_SYMMETRIC"] = "1"; if (useShuffle) defines["ENABLE_SHUFFLE"] = "1"; + if (includeForces) + defines["INCLUDE_FORCES"] = "1"; + if (includeEnergy) + defines["INCLUDE_ENERGY"] = "1"; defines["THREAD_BLOCK_SIZE"] = context.intToString(forceThreadBlockSize); double maxCutoff = 0.0; for (int i = 0; i < 32; i++) { diff --git a/platforms/cuda/src/CudaParallelKernels.cpp b/platforms/cuda/src/CudaParallelKernels.cpp index 97c03a1c4adb789771751df96ff89096bb600557..05350bdf7c03dad71c8248e4603d617aad3e46d7 100644 --- a/platforms/cuda/src/CudaParallelKernels.cpp +++ b/platforms/cuda/src/CudaParallelKernels.cpp @@ -623,6 +623,10 @@ void CudaParallelCalcNonbondedForceKernel::copyParametersToContext(ContextImpl& getKernel(i).copyParametersToContext(context, force); } +void CudaParallelCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + dynamic_cast(kernels[0].getImpl()).getPMEParameters(alpha, nx, ny, nz); +} + class CudaParallelCalcCustomNonbondedForceKernel::Task : public CudaContext::WorkTask { public: Task(ContextImpl& context, CudaCalcCustomNonbondedForceKernel& kernel, bool includeForce, diff --git a/platforms/cuda/src/CudaPlatform.cpp b/platforms/cuda/src/CudaPlatform.cpp index ab6c95ca60c12654a7dc565e8bce2e36ce5228a5..72879bf14295ac87bd010ec154f040dafe2fb70c 100644 --- a/platforms/cuda/src/CudaPlatform.cpp +++ b/platforms/cuda/src/CudaPlatform.cpp @@ -80,6 +80,7 @@ CudaPlatform::CudaPlatform() { registerKernelFactory(CalcCustomGBForceKernel::Name(), factory); registerKernelFactory(CalcCustomExternalForceKernel::Name(), factory); registerKernelFactory(CalcCustomHbondForceKernel::Name(), factory); + registerKernelFactory(CalcCustomCentroidBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomCompoundBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomManyParticleForceKernel::Name(), factory); registerKernelFactory(IntegrateVerletStepKernel::Name(), factory); diff --git a/platforms/cuda/src/kernels/customCentroidBond.cu b/platforms/cuda/src/kernels/customCentroidBond.cu new file mode 100644 index 0000000000000000000000000000000000000000..15fda54b45f30418403044daa809d3c0f3970f54 --- /dev/null +++ b/platforms/cuda/src/kernels/customCentroidBond.cu @@ -0,0 +1,136 @@ +/** + * Compute the center of each group. + */ +extern "C" __global__ void computeGroupCenters(const real4* __restrict__ posq, const int* __restrict__ groupParticles, + const real* __restrict__ groupWeights, const int* __restrict__ groupOffsets, real4* __restrict__ centerPositions) { + __shared__ volatile real3 temp[64]; + for (int group = blockIdx.x; group < NUM_GROUPS; group += gridDim.x) { + // The threads in this block work together to compute the center one group. + + int firstIndex = groupOffsets[group]; + int lastIndex = groupOffsets[group+1]; + real3 center = make_real3(0, 0, 0); + for (int index = threadIdx.x; index < lastIndex-firstIndex; index += blockDim.x) { + int atom = groupParticles[firstIndex+index]; + real weight = groupWeights[firstIndex+index]; + real4 pos = posq[atom]; + center.x += weight*pos.x; + center.y += weight*pos.y; + center.z += weight*pos.z; + } + + // Sum the values. + + int thread = threadIdx.x; + temp[thread].x = center.x; + temp[thread].y = center.y; + temp[thread].z = center.z; + __syncthreads(); + if (thread < 32) { + temp[thread].x += temp[thread+32].x; + temp[thread].y += temp[thread+32].y; + temp[thread].z += temp[thread+32].z; + if (thread < 16) { + temp[thread].x += temp[thread+16].x; + temp[thread].y += temp[thread+16].y; + temp[thread].z += temp[thread+16].z; + } + if (thread < 8) { + temp[thread].x += temp[thread+8].x; + temp[thread].y += temp[thread+8].y; + temp[thread].z += temp[thread+8].z; + } + if (thread < 4) { + temp[thread].x += temp[thread+4].x; + temp[thread].y += temp[thread+4].y; + temp[thread].z += temp[thread+4].z; + } + if (thread < 2) { + temp[thread].x += temp[thread+2].x; + temp[thread].y += temp[thread+2].y; + temp[thread].z += temp[thread+2].z; + } + } + if (thread == 0) + centerPositions[group] = make_real4(temp[0].x+temp[1].x, temp[0].y+temp[1].y, temp[0].z+temp[1].z, 0); + } +} + +/** + * Convert a real4 to a real3 by removing its last element. + */ +inline __device__ real3 trim(real4 v) { + return make_real3(v.x, v.y, v.z); +} + +/** + * Compute the difference between two vectors, setting the fourth component to the squared magnitude. + */ +inline __device__ real4 delta(real4 vec1, real4 vec2) { + real4 result = make_real4(vec1.x-vec2.x, vec1.y-vec2.y, vec1.z-vec2.z, 0); + result.w = result.x*result.x + result.y*result.y + result.z*result.z; + return result; +} + +/** + * Compute the angle between two vectors. The w component of each vector should contain the squared magnitude. + */ +__device__ real computeAngle(real4 vec1, real4 vec2) { + real dotProduct = vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z; + real cosine = dotProduct*RSQRT(vec1.w*vec2.w); + real angle; + if (cosine > 0.99f || cosine < -0.99f) { + // We're close to the singularity in acos(), so take the cross product and use asin() instead. + + real3 crossProduct = cross(vec1, vec2); + real scale = vec1.w*vec2.w; + angle = ASIN(SQRT(dot(crossProduct, crossProduct)/scale)); + if (cosine < 0.0f) + angle = M_PI-angle; + } + else + angle = ACOS(cosine); + return angle; +} + +/** + * Compute the cross product of two vectors, setting the fourth component to the squared magnitude. + */ +inline __device__ real4 computeCross(real4 vec1, real4 vec2) { + real3 cp = cross(vec1, vec2); + return make_real4(cp.x, cp.y, cp.z, cp.x*cp.x+cp.y*cp.y+cp.z*cp.z); +} + +/** + * Compute the forces on groups based on the bonds. + */ +extern "C" __global__ void computeGroupForces(unsigned long long* __restrict__ groupForce, mixed* __restrict__ energyBuffer, const real4* __restrict__ centerPositions, + const int* __restrict__ bondGroups + EXTRA_ARGS) { + mixed energy = 0; + for (int index = blockIdx.x*blockDim.x+threadIdx.x; index < NUM_BONDS; index += blockDim.x*gridDim.x) { + COMPUTE_FORCE + } + energyBuffer[blockIdx.x*blockDim.x+threadIdx.x] += energy; +} + +/** + * Apply the forces from the group centers to the individual atoms. + */ +extern "C" __global__ void applyForcesToAtoms(const int* __restrict__ groupParticles, const real* __restrict__ groupWeights, const int* __restrict__ groupOffsets, + const long long* __restrict__ groupForce, unsigned long long* __restrict__ atomForce) { + for (int group = blockIdx.x; group < NUM_GROUPS; group += gridDim.x) { + long long fx = groupForce[group]; + long long fy = groupForce[group+NUM_GROUPS]; + long long fz = groupForce[group+NUM_GROUPS*2]; + int firstIndex = groupOffsets[group]; + int lastIndex = groupOffsets[group+1]; + for (int index = threadIdx.x; index < lastIndex-firstIndex; index += blockDim.x) { + int atom = groupParticles[firstIndex+index]; + real weight = groupWeights[firstIndex+index]; + atomicAdd(&atomForce[atom], static_cast((long long) (fx*weight))); + atomicAdd(&atomForce[atom+PADDED_NUM_ATOMS], static_cast((long long) (fy*weight))); + atomicAdd(&atomForce[atom+2*PADDED_NUM_ATOMS], static_cast((long long) (fz*weight))); + } + } +} diff --git a/platforms/cuda/src/kernels/customGBEnergyN2.cu b/platforms/cuda/src/kernels/customGBEnergyN2.cu index d3831ada2f8a6172fb6838b0457b58bebed4f4a6..2fca13828e67e452c47d7023b922d1923efd8285 100644 --- a/platforms/cuda/src/kernels/customGBEnergyN2.cu +++ b/platforms/cuda/src/kernels/customGBEnergyN2.cu @@ -13,7 +13,7 @@ typedef struct { /** * Compute a force based on pair interactions. */ -extern "C" __global__ void computeN2Energy(unsigned long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, +extern "C" __global__ void computeN2Energy(unsigned long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const unsigned int* __restrict__ exclusions, const ushort2* __restrict__ exclusionTiles, #ifdef USE_CUTOFF const int* __restrict__ tiles, const unsigned int* __restrict__ interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, @@ -27,7 +27,7 @@ extern "C" __global__ void computeN2Energy(unsigned long long* __restrict__ forc const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); const unsigned int tbx = threadIdx.x - tgx; - real energy = 0; + mixed energy = 0; __shared__ AtomData localData[THREAD_BLOCK_SIZE]; // First loop: process tiles that contain exclusions. diff --git a/platforms/cuda/src/kernels/customGBEnergyPerParticle.cu b/platforms/cuda/src/kernels/customGBEnergyPerParticle.cu index ad77ced93cf276dd3f594efce4483dba3c931384..0895aa65edb534fb459a5e2f29947254566f515e 100644 --- a/platforms/cuda/src/kernels/customGBEnergyPerParticle.cu +++ b/platforms/cuda/src/kernels/customGBEnergyPerParticle.cu @@ -2,9 +2,9 @@ * Reduce the derivatives computed in the N^2 energy kernel, and compute all per-particle energy terms. */ -extern "C" __global__ void computePerParticleEnergy(long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, const real4* __restrict__ posq +extern "C" __global__ void computePerParticleEnergy(long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq PARAMETER_ARGUMENTS) { - real energy = 0; + mixed energy = 0; for (unsigned int index = blockIdx.x*blockDim.x+threadIdx.x; index < NUM_ATOMS; index += blockDim.x*gridDim.x) { // Load the derivatives diff --git a/platforms/cuda/src/kernels/customHbondForce.cu b/platforms/cuda/src/kernels/customHbondForce.cu index 4d9d4e54e0ad3448c200ed9f7a560b934410e34a..20608200d904d2844f2f1488936ecdfdcdf6e610 100644 --- a/platforms/cuda/src/kernels/customHbondForce.cu +++ b/platforms/cuda/src/kernels/customHbondForce.cu @@ -66,12 +66,12 @@ inline __device__ real4 computeCross(real4 vec1, real4 vec2) { /** * Compute forces on donors. */ -extern "C" __global__ void computeDonorForces(unsigned long long* __restrict__ force, real* __restrict__ energyBuffer, const real4* __restrict__ posq, +extern "C" __global__ void computeDonorForces(unsigned long long* __restrict__ force, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const int4* __restrict__ exclusions, const int4* __restrict__ donorAtoms, const int4* __restrict__ acceptorAtoms, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { extern __shared__ real4 posBuffer[]; - real energy = 0; + mixed energy = 0; real3 f1 = make_real3(0); real3 f2 = make_real3(0); real3 f3 = make_real3(0); @@ -155,7 +155,7 @@ extern "C" __global__ void computeDonorForces(unsigned long long* __restrict__ f /** * Compute forces on acceptors. */ -extern "C" __global__ void computeAcceptorForces(unsigned long long* __restrict__ force, real* __restrict__ energyBuffer, const real4* __restrict__ posq, +extern "C" __global__ void computeAcceptorForces(unsigned long long* __restrict__ force, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const int4* __restrict__ exclusions, const int4* __restrict__ donorAtoms, const int4* __restrict__ acceptorAtoms, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { diff --git a/platforms/cuda/src/kernels/customManyParticle.cu b/platforms/cuda/src/kernels/customManyParticle.cu index 30de856578578c306c457cb0a37f25c9d608edc6..bfa5d1b1e94067f1227393530e78348b65eff545 100644 --- a/platforms/cuda/src/kernels/customManyParticle.cu +++ b/platforms/cuda/src/kernels/customManyParticle.cu @@ -78,7 +78,7 @@ __constant__ float globals[NUM_GLOBALS]; * Compute the interaction. */ extern "C" __global__ void computeInteraction( - unsigned long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, const real4* __restrict__ posq, + unsigned long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ #ifdef USE_CUTOFF , const int* __restrict__ neighbors, const int* __restrict__ neighborStartIndex @@ -90,7 +90,7 @@ extern "C" __global__ void computeInteraction( , int* __restrict__ exclusions, int* __restrict__ exclusionStartIndex #endif PARAMETER_ARGUMENTS) { - real energy = 0.0f; + mixed energy = 0; // Loop over particles to be the first one in the set. diff --git a/platforms/cuda/src/kernels/customNonbondedGroups.cu b/platforms/cuda/src/kernels/customNonbondedGroups.cu index 8bf2ff0ff0c144eda47bdb7fb51db57e956e5667..bd8834438bc37ce2ad046feee03b58e853238d86 100644 --- a/platforms/cuda/src/kernels/customNonbondedGroups.cu +++ b/platforms/cuda/src/kernels/customNonbondedGroups.cu @@ -9,14 +9,14 @@ typedef struct { } AtomData; extern "C" __global__ void computeInteractionGroups( - unsigned long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, const real4* __restrict__ posq, const int4* __restrict__ groupData, + unsigned long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const int4* __restrict__ groupData, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { const unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; // global warpIndex const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); // index within the warp const unsigned int tbx = threadIdx.x - tgx; // block warpIndex - real energy = 0.0f; + mixed energy = 0; __shared__ AtomData localData[LOCAL_MEMORY_SIZE]; const unsigned int startTile = FIRST_TILE+warp*(LAST_TILE-FIRST_TILE)/totalWarps; diff --git a/platforms/cuda/src/kernels/ewald.cu b/platforms/cuda/src/kernels/ewald.cu index 8d83868d1536357f901378f0579abf53579a1e94..919655058414e54c8e97ce89b0df17bbc5fbd7e4 100644 --- a/platforms/cuda/src/kernels/ewald.cu +++ b/platforms/cuda/src/kernels/ewald.cu @@ -6,7 +6,7 @@ __device__ real2 multofReal2(real2 a, real2 b) { * Precompute the cosine and sine sums which appear in each force term. */ -extern "C" __global__ void calculateEwaldCosSinSums(real* __restrict__ energyBuffer, const real4* __restrict__ posq, real2* __restrict__ cosSinSum, real4 periodicBoxSize) { +extern "C" __global__ void calculateEwaldCosSinSums(mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, real2* __restrict__ cosSinSum, real4 periodicBoxSize) { const unsigned int ksizex = 2*KMAX_X-1; const unsigned int ksizey = 2*KMAX_Y-1; const unsigned int ksizez = 2*KMAX_Z-1; @@ -14,7 +14,7 @@ extern "C" __global__ void calculateEwaldCosSinSums(real* __restrict__ energyBuf real3 reciprocalBoxSize = make_real3(2*M_PI/periodicBoxSize.x, 2*M_PI/periodicBoxSize.y, 2*M_PI/periodicBoxSize.z); real reciprocalCoefficient = ONE_4PI_EPS0*4*M_PI/(periodicBoxSize.x*periodicBoxSize.y*periodicBoxSize.z); unsigned int index = blockIdx.x*blockDim.x+threadIdx.x; - real energy = 0; + mixed energy = 0; while (index < (KMAX_Y-1)*ksizez+KMAX_Z) index += blockDim.x*gridDim.x; while (index < totalK) { diff --git a/platforms/cuda/src/kernels/gbsaObc1.cu b/platforms/cuda/src/kernels/gbsaObc1.cu index acdf162fb3d845b35b0f3b6d0d51c72f503803d9..ee0c01c0d4e1df64de27c4daae49d7b7f7114c0c 100644 --- a/platforms/cuda/src/kernels/gbsaObc1.cu +++ b/platforms/cuda/src/kernels/gbsaObc1.cu @@ -33,9 +33,9 @@ extern "C" __global__ void reduceBornSum(float alpha, float beta, float gamma, c * Reduce the Born force. */ -extern "C" __global__ void reduceBornForce(long long* __restrict__ bornForce, real* __restrict__ energyBuffer, +extern "C" __global__ void reduceBornForce(long long* __restrict__ bornForce, mixed* __restrict__ energyBuffer, const float2* __restrict__ params, const real* __restrict__ bornRadii, const real* __restrict__ obcChain) { - real energy = 0; + mixed energy = 0; for (unsigned int index = blockIdx.x*blockDim.x+threadIdx.x; index < NUM_ATOMS; index += blockDim.x*gridDim.x) { // Get summed Born force @@ -402,7 +402,7 @@ typedef struct { */ extern "C" __global__ void computeGBSAForce1(unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ global_bornForce, - real* __restrict__ energyBuffer, const real4* __restrict__ posq, const real* __restrict__ global_bornRadii, + mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const real* __restrict__ global_bornRadii, #ifdef USE_CUTOFF const int* __restrict__ tiles, const unsigned int* __restrict__ interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, const real4* __restrict__ blockCenter, @@ -415,7 +415,7 @@ extern "C" __global__ void computeGBSAForce1(unsigned long long* __restrict__ fo const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); const unsigned int tbx = threadIdx.x - tgx; - real energy = 0; + mixed energy = 0; __shared__ AtomData2 localData[FORCE_WORK_GROUP_SIZE]; // First loop: process tiles that contain exclusions. diff --git a/platforms/cuda/src/kernels/nonbonded.cu b/platforms/cuda/src/kernels/nonbonded.cu index e9908f915729dcbcd5789b41e4354e39aa9a5695..843cfc280f88f7d71ebbb97cc11d8208e3e82d91 100644 --- a/platforms/cuda/src/kernels/nonbonded.cu +++ b/platforms/cuda/src/kernels/nonbonded.cu @@ -100,7 +100,7 @@ static __inline__ __device__ long long real_shfl(long long var, int srcLane) { * */ extern "C" __global__ void computeNonbonded( - unsigned long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, const real4* __restrict__ posq, const tileflags* __restrict__ exclusions, + unsigned long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const tileflags* __restrict__ exclusions, const ushort2* __restrict__ exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices #ifdef USE_CUTOFF , const int* __restrict__ tiles, const unsigned int* __restrict__ interactionCount,real4 periodicBoxSize, real4 invPeriodicBoxSize, @@ -112,7 +112,7 @@ extern "C" __global__ void computeNonbonded( const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; // global warpIndex const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); // index within the warp const unsigned int tbx = threadIdx.x - tgx; // block warpIndex - real energy = 0.0f; + mixed energy = 0; // used shared memory if the device cannot shuffle #ifndef ENABLE_SHUFFLE __shared__ AtomData localData[THREAD_BLOCK_SIZE]; @@ -175,6 +175,7 @@ extern "C" __global__ void computeNonbonded( real tempEnergy = 0.0f; COMPUTE_INTERACTION energy += 0.5f*tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC force.x -= delta.x*dEdR; force.y -= delta.y*dEdR; @@ -184,6 +185,7 @@ extern "C" __global__ void computeNonbonded( force.y -= dEdR1.y; force.z -= dEdR1.z; #endif +#endif #ifdef USE_EXCLUSIONS excl >>= 1; #endif @@ -241,6 +243,7 @@ extern "C" __global__ void computeNonbonded( real tempEnergy = 0.0f; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta *= dEdR; force.x -= delta.x; @@ -270,11 +273,12 @@ extern "C" __global__ void computeNonbonded( localData[tbx+tj].fz += dEdR2.z; #endif #endif // end USE_SYMMETRIC -#ifdef USE_EXCLUSIONS - excl >>= 1; -#endif #ifdef ENABLE_SHUFFLE SHUFFLE_WARP_DATA +#endif +#endif +#ifdef USE_EXCLUSIONS + excl >>= 1; #endif // cycles the indices // 0 1 2 3 4 5 6 7 -> 1 2 3 4 5 6 7 0 @@ -282,6 +286,7 @@ extern "C" __global__ void computeNonbonded( } const unsigned int offset = y*TILE_SIZE + tgx; // write results for off diagonal tiles +#ifdef INCLUDE_FORCES #ifdef ENABLE_SHUFFLE atomicAdd(&forceBuffers[offset], static_cast((long long) (shflForce.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (shflForce.y*0x100000000))); @@ -290,13 +295,16 @@ extern "C" __global__ void computeNonbonded( atomicAdd(&forceBuffers[offset], static_cast((long long) (localData[threadIdx.x].fx*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].fy*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].fz*0x100000000))); +#endif #endif } // Write results for on and off diagonal tiles +#ifdef INCLUDE_FORCES const unsigned int offset = x*TILE_SIZE + tgx; atomicAdd(&forceBuffers[offset], static_cast((long long) (force.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (force.y*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (force.z*0x100000000))); +#endif } // Second loop: tiles without exclusions, either from the neighbor list (with cutoff) or just enumerating all @@ -441,6 +449,7 @@ extern "C" __global__ void computeNonbonded( real tempEnergy = 0.0f; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta *= dEdR; force.x -= delta.x; @@ -472,6 +481,7 @@ extern "C" __global__ void computeNonbonded( #endif // end USE_SYMMETRIC #ifdef ENABLE_SHUFFLE SHUFFLE_WARP_DATA +#endif #endif tj = (tj + 1) & (TILE_SIZE - 1); } @@ -509,6 +519,7 @@ extern "C" __global__ void computeNonbonded( real tempEnergy = 0.0f; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta *= dEdR; force.x -= delta.x; @@ -540,12 +551,14 @@ extern "C" __global__ void computeNonbonded( #endif // end USE_SYMMETRIC #ifdef ENABLE_SHUFFLE SHUFFLE_WARP_DATA +#endif #endif tj = (tj + 1) & (TILE_SIZE - 1); } } // Write results. +#ifdef INCLUDE_FORCES atomicAdd(&forceBuffers[atom1], static_cast((long long) (force.x*0x100000000))); atomicAdd(&forceBuffers[atom1+PADDED_NUM_ATOMS], static_cast((long long) (force.y*0x100000000))); atomicAdd(&forceBuffers[atom1+2*PADDED_NUM_ATOMS], static_cast((long long) (force.z*0x100000000))); @@ -565,8 +578,11 @@ extern "C" __global__ void computeNonbonded( atomicAdd(&forceBuffers[atom2+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].fz*0x100000000))); #endif } +#endif } pos++; } +#ifdef INCLUDE_ENERGY energyBuffer[blockIdx.x*blockDim.x+threadIdx.x] += energy; +#endif } \ No newline at end of file diff --git a/platforms/cuda/src/kernels/pme.cu b/platforms/cuda/src/kernels/pme.cu index 1e9c3291489c9631f91176b7dae9e1f4db45c509..73ac3baefafe09a2238afd4145e15a5285b9d843 100644 --- a/platforms/cuda/src/kernels/pme.cu +++ b/platforms/cuda/src/kernels/pme.cu @@ -115,7 +115,7 @@ extern "C" __global__ void finishSpreadCharge(long long* __restrict__ originalPm // convolutes on the halfcomplex_pmeGrid, which is of size NX*NY*(NZ/2+1) as F(Q) is conjugate symmetric extern "C" __global__ void -reciprocalConvolution(real2* __restrict__ halfcomplex_pmeGrid, real* __restrict__ energyBuffer, +reciprocalConvolution(real2* __restrict__ halfcomplex_pmeGrid, mixed* __restrict__ energyBuffer, const real* __restrict__ pmeBsplineModuliX, const real* __restrict__ pmeBsplineModuliY, const real* __restrict__ pmeBsplineModuliZ, real4 periodicBoxSize, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { // R2C stores into a half complex matrix where the last dimension is cut by half @@ -150,14 +150,14 @@ reciprocalConvolution(real2* __restrict__ halfcomplex_pmeGrid, real* __restrict_ extern "C" __global__ void -gridEvaluateEnergy(real2* __restrict__ halfcomplex_pmeGrid, real* __restrict__ energyBuffer, +gridEvaluateEnergy(real2* __restrict__ halfcomplex_pmeGrid, mixed* __restrict__ energyBuffer, const real* __restrict__ pmeBsplineModuliX, const real* __restrict__ pmeBsplineModuliY, const real* __restrict__ pmeBsplineModuliZ, real4 periodicBoxSize, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { // R2C stores into a half complex matrix where the last dimension is cut by half const unsigned int gridSize = GRID_SIZE_X*GRID_SIZE_Y*GRID_SIZE_Z; const real recipScaleFactor = RECIP(M_PI*periodicBoxSize.x*periodicBoxSize.y*periodicBoxSize.z); - real energy = 0; + mixed energy = 0; for (int index = blockIdx.x*blockDim.x+threadIdx.x; index < gridSize; index += blockDim.x*gridDim.x) { // real indices int kx = index/(GRID_SIZE_Y*(GRID_SIZE_Z)); diff --git a/platforms/cuda/staticTarget/CMakeLists.txt b/platforms/cuda/staticTarget/CMakeLists.txt index 5da73387273c2b5a5799a084fa3d4fd6c1f946c2..07ac90a7ea0f5e1a98ecac174490e9b062ae5ff2 100644 --- a/platforms/cuda/staticTarget/CMakeLists.txt +++ b/platforms/cuda/staticTarget/CMakeLists.txt @@ -19,7 +19,7 @@ SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE IF (APPLE) SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${STATIC_TARGET}) diff --git a/platforms/cuda/tests/CMakeLists.txt b/platforms/cuda/tests/CMakeLists.txt index d2b5f6d6b8d45621a719f5686f47b32b98d8c6d3..4963411f8e80603eee1d22af0f42c77c6c6655a4 100644 --- a/platforms/cuda/tests/CMakeLists.txt +++ b/platforms/cuda/tests/CMakeLists.txt @@ -28,7 +28,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF (APPLE) SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ELSE (APPLE) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ENDIF (APPLE) ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) diff --git a/platforms/cuda/tests/CudaTests.h b/platforms/cuda/tests/CudaTests.h new file mode 100644 index 0000000000000000000000000000000000000000..7d410f5f1553308d89b608a73b8f4cd7896c13ae --- /dev/null +++ b/platforms/cuda/tests/CudaTests.h @@ -0,0 +1,43 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "CudaPlatform.h" +#include + +OpenMM::CudaPlatform platform; + +void initializeTests(int argc, char* argv[]) { + if (argc > 1) + platform.setPropertyDefaultValue("CudaPrecision", std::string(argv[1])); +} diff --git a/platforms/cuda/tests/TestCudaAndersenThermostat.cpp b/platforms/cuda/tests/TestCudaAndersenThermostat.cpp index 7656136b4f1397aab283d75e784c7b861d848511..30e41d4804f33a6f80fc29b10cb92b9d3b58ac7e 100644 --- a/platforms/cuda/tests/TestCudaAndersenThermostat.cpp +++ b/platforms/cuda/tests/TestCudaAndersenThermostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,191 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of AndersenThermostat. - */ +#include "CudaTests.h" +#include "TestAndersenThermostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 5000; - System system; - VerletIntegrator integrator(0.003); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermstat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermstat); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 15000; - System system; - VerletIntegrator integrator(0.004); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - system.addConstraint(0, 1, 1); - system.addConstraint(1, 2, 1); - system.addConstraint(2, 3, 1); - system.addConstraint(3, 0, 1); - system.addConstraint(4, 5, 1); - system.addConstraint(5, 6, 1); - system.addConstraint(6, 7, 1); - system.addConstraint(7, 4, 1); - AndersenThermostat* thermstat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermstat); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(1, 1, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(1, 0, 1); - positions[5] = Vec3(1, 1, 1); - positions[6] = Vec3(0, 1, 1); - positions[7] = Vec3(0, 0, 1); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= numSteps; - double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - thermostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - thermostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testTemperature(); - testConstraints(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaBrownianIntegrator.cpp b/platforms/cuda/tests/TestCudaBrownianIntegrator.cpp index cfb05f0e6cab36e9445c2ffd8107910bbc089c05..ed96d7d6ca84006a7fa79640018cb97fb6f1643b 100644 --- a/platforms/cuda/tests/TestCudaBrownianIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaBrownianIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,252 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -#include "openmm/System.h" +#include "CudaTests.h" +#include "TestBrownianIntegrator.h" - -/** - * This tests the CUDA implementation of BrownianIntegrator. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/BrownianIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - double dt = 0.01; - BrownianIntegrator integrator(0, 0.1, dt); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply an overdamped harmonic oscillator, so compare it to the analytical solution. - - double rate = 2*1.0/(0.1*2.0); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-rate*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - if (i > 0) { - double expectedSpeed = -0.5*rate*std::exp(-rate*(time-0.5*dt)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.11); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.11); - } - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const int numBonds = numParticles-1; - const double temp = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - for (int i = 0; i < numParticles; ++i) - system.addParticle(2.0); - for (int i = 0; i < numBonds; ++i) - forceField->addBond(i, i+1, 1.0, 5.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3(i, 0, 0); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double pe = 0.0; - const int steps = 50000; - for (int i = 0; i < steps; ++i) { - State state = context.getState(State::Energy); - pe += state.getPotentialEnergy(); - integrator.step(1); - } - pe /= steps; - double expected = 0.5*numBonds*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, pe, 0.1*expected); -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 20.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i, 0, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - BrownianIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCMAPTorsionForce.cpp b/platforms/cuda/tests/TestCudaCMAPTorsionForce.cpp index 6a95ade0fbcdd4cbf245b4810041b60661ce72ef..fb9598262ffce1d135270fcc4f113c9f38c5aaa9 100644 --- a/platforms/cuda/tests/TestCudaCMAPTorsionForce.cpp +++ b/platforms/cuda/tests/TestCudaCMAPTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,149 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CMAPTorsionForce. - */ +#include "CudaTests.h" +#include "TestCMAPTorsionForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CMAPTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testCMAPTorsions() { - const int mapSize = 36; - - // Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion - // that approximates the same force. - - System system1; - for (int i = 0; i < 5; i++) - system1.addParticle(1.0); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 2, M_PI/4, 1.5); - periodic->addTorsion(1, 2, 3, 4, 3, M_PI/3, 2.0); - system1.addForce(periodic); - System system2; - for (int i = 0; i < 5; i++) - system2.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = 1.5*(1+cos(2*angle1-M_PI/4)); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 2.0*(1+cos(3*angle2-M_PI/3)); - mapEnergy[i+j*mapSize] = energy1+energy2; - } - } - cmap->addMap(mapSize, mapEnergy); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system2.addForce(cmap); - - // Set the atoms in various positions, and verify that both systems give equal forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(system1, integrator1, platform); - Context c2(system2, integrator2, platform); - for (int i = 0; i < 50; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < system1.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 0.05); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), 1e-3); - } -} - -void testChangingParameters() { - // Create a system with two maps and one torsion. - - const int mapSize = 8; - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy1(mapSize*mapSize); - vector mapEnergy2(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = cos(angle1); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 10*sin(angle2); - mapEnergy1[i+j*mapSize] = energy1+energy2; - mapEnergy2[i+j*mapSize] = energy1-energy2; - } - } - cmap->addMap(mapSize, mapEnergy1); - cmap->addMap(mapSize, mapEnergy2); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system.addForce(cmap); - - // Set particle positions so angle1=0 and angle2=PI/4. - - vector positions(5); - positions[0] = Vec3(0, 0, 1); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 1); - positions[4] = Vec3(0.5, -0.5, 1); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Check that the energy is correct. - - double energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(1+10*sin(M_PI/4), energy, 1e-5); - - // Modify the parameters. - - cmap->setTorsionParameters(0, 1, 0, 1, 2, 3, 1, 2, 3, 4); - for (int i = 0; i < mapSize*mapSize; i++) - mapEnergy2[i] *= 2.0; - cmap->setMapParameters(1, mapSize, mapEnergy2); - cmap->updateParametersInContext(context); - - // See if the results are correct. - - energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(2-20*sin(M_PI/4), energy, 1e-5); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testCMAPTorsions(); - testChangingParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCMMotionRemover.cpp b/platforms/cuda/tests/TestCudaCMMotionRemover.cpp index d7140ef24754f74b524e3e990d0ade745cebdcbd..72a111c35a590c3c8f450c48065b60bc38a40471 100644 --- a/platforms/cuda/tests/TestCudaCMMotionRemover.cpp +++ b/platforms/cuda/tests/TestCudaCMMotionRemover.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,94 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of AndersenThermostat. - */ +#include "CudaTests.h" +#include "TestCMMotionRemover.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CMMotionRemover.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -Vec3 calcCM(const vector& values, System& system) { - Vec3 cm; - for (int j = 0; j < system.getNumParticles(); ++j) { - cm[0] += values[j][0]*system.getParticleMass(j); - cm[1] += values[j][1]*system.getParticleMass(j); - cm[2] += values[j][2]*system.getParticleMass(j); - } - return cm; -} - -void testMotionRemoval(Integrator& integrator) { - const int numParticles = 8; - System system; - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(2, 3, 2.0, 0.5); - system.addForce(bonds); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i+1); - nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(nonbonded); - CMMotionRemover* remover = new CMMotionRemover(); - system.addForce(remover); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Now run it for a while and see if the center of mass remains fixed. - - Vec3 cmPos = calcCM(context.getState(State::Positions).getPositions(), system); - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Velocities); - Vec3 pos = calcCM(state.getPositions(), system); - ASSERT_EQUAL_VEC(cmPos, pos, 1e-2); - Vec3 vel = calcCM(state.getVelocities(), system); - if (i > 0) { - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), vel, 1e-2); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - LangevinIntegrator langevin(0.0, 1e-5, 0.01); - testMotionRemoval(langevin); - VerletIntegrator verlet(0.01); - testMotionRemoval(verlet); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCheckpoints.cpp b/platforms/cuda/tests/TestCudaCheckpoints.cpp index ee72c6b726f79b9bbe1684ccf594bbdd105616ae..3ed747e6ee229e61cd691dac38dd0bfd6872e17b 100644 --- a/platforms/cuda/tests/TestCudaCheckpoints.cpp +++ b/platforms/cuda/tests/TestCudaCheckpoints.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2013 Stanford University and the Authors. * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,45 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests creating and loading checkpoints with the CUDA platform. - */ - -#include "CudaPlatform.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void compareStates(State& s1, State& s2) { - ASSERT_EQUAL_TOL(s1.getTime(), s2.getTime(), TOL); - int numParticles = s1.getPositions().size(); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s2.getVelocities()[i], TOL); - Vec3 a1, b1, c1, a2, b2, c2; - s1.getPeriodicBoxVectors(a1, b1, c1); - s2.getPeriodicBoxVectors(a2, b2, c2); - ASSERT_EQUAL_VEC(a1, a2, TOL); - ASSERT_EQUAL_VEC(b1, b2, TOL); - ASSERT_EQUAL_VEC(c1, c2, TOL); - for (map::const_iterator iter = s1.getParameters().begin(); iter != s1.getParameters().end(); ++iter) - ASSERT_EQUAL(iter->second, (*s2.getParameters().find(iter->first)).second); - } -} +#include "CudaTests.h" +#include "TestCheckpoints.h" void testCheckpoint() { const int numParticles = 100; @@ -159,71 +122,6 @@ void testCheckpoint() { compareStates(s6, s8); } -void testSetState() { - const int numParticles = 10; - const double boxSize = 3.0; - const double temperature = 200.0; - System system; - system.addForce(new AndersenThermostat(0.0, 100.0)); - NonbondedForce* nonbonded = new NonbondedForce(); - system.addForce(nonbonded); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - } - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature); - - // Run for a little while. - - integrator.step(100); - - // Record the current state. - - State s1 = context.getState(State::Positions | State::Velocities | State::Parameters); - - // Continue the simulation for a few more steps and record a partial state. - - integrator.step(10); - State s2 = context.getState(State::Positions); - - // Restore the original state and see if everything gets restored correctly. - - context.setPeriodicBoxVectors(Vec3(2*boxSize, 0, 0), Vec3(0, 2*boxSize, 0), Vec3(0, 0, 2*boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature+10); - context.setState(s1); - State s3 = context.getState(State::Positions | State::Velocities | State::Parameters); - compareStates(s1, s3); - - // Set the partial state and see if the correct things were set. - - context.setState(s2); - State s4 = context.getState(State::Positions | State::Velocities | State::Parameters); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s2.getPositions()[i], s4.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s4.getVelocities()[i], TOL); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testCheckpoint(); - testSetState(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testCheckpoint(); } diff --git a/platforms/cuda/tests/TestCudaCustomAngleForce.cpp b/platforms/cuda/tests/TestCudaCustomAngleForce.cpp index 0e62d9e108e9ed78a50d542367d53717d5046a35..e832d1d18d81a8cc1bbf4b1648a03fc2f37bad1c 100644 --- a/platforms/cuda/tests/TestCudaCustomAngleForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomAngleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,107 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomAngleForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomAngleForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testAngles() { - // Create a system using a CustomAngleForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomAngleForce* custom = new CustomAngleForce("scale*k*(theta-theta0)^2"); - custom->addPerAngleParameter("theta0"); - custom->addPerAngleParameter("k"); - custom->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - custom->addAngle(0, 1, 2, parameters); - parameters[0] = 2.0; - parameters[1] = 0.5; - custom->addAngle(1, 2, 3, parameters); - customSystem.addForce(custom); - - // Create an identical system using a HarmonicAngleForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - HarmonicAngleForce* harmonic = new HarmonicAngleForce(); - harmonic->addAngle(0, 1, 2, 1.5, 0.8); - harmonic->addAngle(1, 2, 3, 2.0, 0.5); - harmonicSystem.addForce(harmonic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(4); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - custom->setAngleParameters(0, 0, 1, 2, parameters); - parameters[0] = 2.1; - parameters[1] = 0.6; - custom->setAngleParameters(1, 1, 2, 3, parameters); - custom->updateParametersInContext(c1); - harmonic->setAngleParameters(0, 0, 1, 2, 1.6, 0.9); - harmonic->setAngleParameters(1, 1, 2, 3, 2.1, 0.6); - harmonic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} +#include "CudaTests.h" +#include "TestCustomAngleForce.h" void testParallelComputation() { System system; @@ -160,17 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testAngles(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaCustomBondForce.cpp b/platforms/cuda/tests/TestCudaCustomBondForce.cpp index 1d8c83434b81a65e8d77610389788cd56c0eb377..6fadcdca6e1ae905282e231d501e975665529fda 100644 --- a/platforms/cuda/tests/TestCudaCustomBondForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,111 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomBondForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomBondForce* forceField = new CustomBondForce("scale*k*(r-r0)^2"); - forceField->addPerBondParameter("r0"); - forceField->addPerBondParameter("k"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - forceField->addBond(0, 1, parameters); - parameters[0] = 1.2; - parameters[1] = 0.7; - forceField->addBond(1, 2, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - forceField->setBondParameters(0, 0, 1, parameters); - parameters[0] = 1.3; - parameters[1] = 0.8; - forceField->setBondParameters(1, 1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomBondForce* forceField = new CustomBondForce("(a+b+c+d+e+f+g+h+i)*r"); - forceField->addPerBondParameter("a"); - forceField->addPerBondParameter("b"); - forceField->addPerBondParameter("c"); - forceField->addPerBondParameter("d"); - forceField->addPerBondParameter("e"); - forceField->addPerBondParameter("f"); - forceField->addPerBondParameter("g"); - forceField->addPerBondParameter("h"); - forceField->addPerBondParameter("i"); - vector parameters(forceField->getNumPerBondParameters()); - for (int i = 0; i < parameters.size(); i++) - parameters[i] = i; - forceField->addBond(0, 1, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.5, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f = 1+2+3+4+5+6+7+8; - ASSERT_EQUAL_VEC(Vec3(0, f, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(f*2.5, state.getPotentialEnergy(), TOL); -} +#include "CudaTests.h" +#include "TestCustomBondForce.h" void testParallelComputation() { System system; @@ -164,18 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testBonds(); - testManyParameters(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaCustomCentroidBondForce.cpp b/platforms/cuda/tests/TestCudaCustomCentroidBondForce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ac619558c12883155144e7b20e2fb2c7448cdd60 --- /dev/null +++ b/platforms/cuda/tests/TestCudaCustomCentroidBondForce.cpp @@ -0,0 +1,36 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "CudaTests.h" +#include "TestCustomCentroidBondForce.h" + +void runPlatformTests() { +} diff --git a/platforms/cuda/tests/TestCudaCustomCompoundBondForce.cpp b/platforms/cuda/tests/TestCudaCustomCompoundBondForce.cpp index fdd61f61b9ae24adba48519174e6acd582c98064..2dad6e68cc5c8893f552e760431dfd6657f9961c 100644 --- a/platforms/cuda/tests/TestCudaCustomCompoundBondForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomCompoundBondForce.cpp @@ -29,145 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomCompoundBondForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testBond() { - // Create a system using a CustomCompoundBondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(4, "0.5*kb*((distance(p1,p2)-b0)^2+(distance(p2,p3)-b0)^2)+0.5*ka*(angle(p2,p3,p4)-a0)^2+kt*(1+cos(dihedral(p1,p2,p3,p4)-t0))"); - custom->addPerBondParameter("kb"); - custom->addPerBondParameter("ka"); - custom->addPerBondParameter("kt"); - custom->addPerBondParameter("b0"); - custom->addPerBondParameter("a0"); - custom->addPerBondParameter("t0"); - vector particles(4); - particles[0] = 0; - particles[1] = 1; - particles[2] = 3; - particles[3] = 2; - vector parameters(6); - parameters[0] = 1.5; - parameters[1] = 0.8; - parameters[2] = 0.6; - parameters[3] = 1.1; - parameters[4] = 2.9; - parameters[5] = 1.3; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - - // Create an identical system using standard forces. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.1, 1.5); - bonds->addBond(1, 3, 1.1, 1.5); - standardSystem.addForce(bonds); - HarmonicAngleForce* angles = new HarmonicAngleForce(); - angles->addAngle(1, 3, 2, 2.9, 0.8); - standardSystem.addForce(angles); - PeriodicTorsionForce* torsions = new PeriodicTorsionForce(); - torsions->addTorsion(0, 1, 3, 2, 1, 1.3, 0.6); - standardSystem.addForce(torsions); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - vector positions(4); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[3] = 1.3; - custom->setBondParameters(0, particles, parameters); - custom->updateParametersInContext(c1); - bonds->setBondParameters(0, 0, 1, 1.3, 1.6); - bonds->setBondParameters(1, 1, 3, 1.3, 1.6); - bonds->updateParametersInContext(c2); - { - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -void testPositionDependence() { - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(2, "scale1*distance(p1,p2)+scale2*x1+2*y2"); - custom->addGlobalParameter("scale1", 0.3); - custom->addGlobalParameter("scale2", 0.2); - vector particles(2); - particles[0] = 1; - particles[1] = 0; - vector parameters; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - vector positions(2); - positions[0] = Vec3(1.5, 1, 0); - positions[1] = Vec3(0.5, 1, 0); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); - ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5); -} +#include "CudaTests.h" +#include "TestCustomCompoundBondForce.h" void testParallelComputation() { System system; @@ -202,165 +65,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testContinuous2DFunction() { - const int xsize = 10; - const int ysize = 11; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[0] = Vec3(x, y, 1.5); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1,z1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[0] = Vec3(x, y, z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y)*(1.0+z); - force[2] = -sin(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testMultipleBonds() { - // Two compound bonds using Urey-Bradley example from API doc - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(3, - "0.5*(kangle*(angle(p1,p2,p3)-theta0)^2+kbond*(distance(p1,p3)-r0)^2)"); - custom->addPerBondParameter("kangle"); - custom->addPerBondParameter("kbond"); - custom->addPerBondParameter("theta0"); - custom->addPerBondParameter("r0"); - vector parameters(4); - parameters[0] = 1.0; - parameters[1] = 1.0; - parameters[2] = 2 * M_PI / 3; - parameters[3] = sqrt(3.0) / 2; - vector particles0(3); - particles0[0] = 0; - particles0[1] = 1; - particles0[2] = 2; - vector particles1(3); - particles1[0] = 1; - particles1[1] = 2; - particles1[2] = 3; - custom->addBond(particles0, parameters); - custom->addBond(particles1, parameters); - customSystem.addForce(custom); - - vector positions(4); - positions[0] = Vec3(0, 0.5, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(0.5, 0, 0); - positions[3] = Vec3(0.6, 0, 0.4); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.199, state.getPotentialEnergy(), 1e-3); - vector forces(state.getForces()); - ASSERT_EQUAL_VEC(Vec3(-1.160, 0.112, 0.0), forces[0], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.927, 1.047, -0.638), forces[1], 1e-3); - ASSERT_EQUAL_VEC(Vec3(-0.543, -1.160, 0.721), forces[2], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.776, 0.0, -0.084), forces[3], 1e-3); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testBond(); - testPositionDependence(); - testParallelComputation(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testMultipleBonds(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaCustomExternalForce.cpp b/platforms/cuda/tests/TestCudaCustomExternalForce.cpp index eafdeec7502b0970d5a0556751adab7557d2fc70..b770bfcce4fd0c702160f878fc70a736aad7ca49 100644 --- a/platforms/cuda/tests/TestCudaCustomExternalForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomExternalForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,106 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomExternalForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" +#include "CudaTests.h" +#include "TestCustomExternalForce.h" #include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testForce() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomExternalForce* forceField = new CustomExternalForce("scale*(x+yscale*(y-y0)^2)"); - forceField->addPerParticleParameter("y0"); - forceField->addPerParticleParameter("yscale"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 0.5; - parameters[1] = 2.0; - forceField->addParticle(0, parameters); - parameters[0] = 1.5; - parameters[1] = 3.0; - forceField->addParticle(2, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 1); - positions[2] = Vec3(1, 0, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.0*2.0*1.5, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.0*1.5*1.5), state.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters[0] = 1.4; - parameters[1] = 3.5; - forceField->setParticleParameters(1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.5*2.0*1.4, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.5*1.4*1.4), state.getPotentialEnergy(), TOL); - } -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomExternalForce* forceField = new CustomExternalForce("xscale*(x-x0)^2+yscale*(y-y0)^2+zscale*(z-z0)^2"); - forceField->addPerParticleParameter("x0"); - forceField->addPerParticleParameter("y0"); - forceField->addPerParticleParameter("z0"); - forceField->addPerParticleParameter("xscale"); - forceField->addPerParticleParameter("yscale"); - forceField->addPerParticleParameter("zscale"); - vector parameters(6); - parameters[0] = 1.0; - parameters[1] = 2.0; - parameters[2] = 3.0; - parameters[3] = 0.1; - parameters[4] = 0.2; - parameters[5] = 0.3; - forceField->addParticle(0, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, -1, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2*0.1*1.0, 2*0.2*3.0, 2*0.3*3.0), forces[0], TOL); - ASSERT_EQUAL_TOL(0.1*1*1 + 0.2*3*3 + 0.3*3*3, state.getPotentialEnergy(), TOL); -} void testParallelComputation() { System system; @@ -161,18 +64,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testForce(); - testManyParameters(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaCustomGBForce.cpp b/platforms/cuda/tests/TestCudaCustomGBForce.cpp index cac8c38ae05a90e986c657df933d602cef2c4300..5b5dcc3643ee4d9cfcb3560a3a850b065b9ccc0f 100644 --- a/platforms/cuda/tests/TestCudaCustomGBForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomGBForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,453 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomGBForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomGBForce.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testOBC(GBSAOBCForce::NonbondedMethod obcMethod, CustomGBForce::NonbondedMethod customMethod) { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - const double cutoff = 2.0; - - // Create two systems: one with a GBSAOBCForce, and one using a CustomGBForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - GBSAOBCForce* obc = new GBSAOBCForce(); - CustomGBForce* custom = new CustomGBForce(); - obc->setCutoffDistance(cutoff); - custom->setCutoffDistance(cutoff); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("solventDielectric", obc->getSolventDielectric()); - custom->addGlobalParameter("soluteDielectric", obc->getSoluteDielectric()); - custom->addComputedValue("I", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=I*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - string invCutoffString = ""; - if (obcMethod != GBSAOBCForce::NoCutoff) { - stringstream s; - s<<(1.0/cutoff); - invCutoffString = s.str(); - } - custom->addEnergyTerm("138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2*("+invCutoffString+"-1/f);" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - obc->addParticle(1.0, 0.2, 0.5); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.5); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - obc->addParticle(1.0, 0.2, 0.8); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.8); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - obc->setNonbondedMethod(obcMethod); - custom->setNonbondedMethod(customMethod); - standardSystem.addForce(obc); - customSystem.addForce(custom); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - context1.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - context2.setVelocities(velocities); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } - - // Try changing the particle parameters and make sure it's still correct. - - for (int i = 0; i < numMolecules/2; i++) { - obc->setParticleParameters(2*i, 1.1, 0.3, 0.6); - params[0] = 1.1; - params[1] = 0.3; - params[2] = 0.6; - custom->setParticleParameters(2*i, params); - obc->setParticleParameters(2*i+1, -1.1, 0.2, 0.4); - params[0] = -1.1; - params[1] = 0.2; - params[2] = 0.4; - custom->setParticleParameters(2*i+1, params); - } - obc->updateParametersInContext(context1); - custom->updateParametersInContext(context2); - state1 = context1.getState(State::Forces | State::Energy); - state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testMembrane() { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - - // Create a system with an implicit membrane. - - System system; - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - CustomGBForce* custom = new CustomGBForce(); - custom->setCutoffDistance(2.0); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("thickness", 3); - custom->addGlobalParameter("solventDielectric", 78.3); - custom->addGlobalParameter("soluteDielectric", 1); - custom->addComputedValue("Imol", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("Imem", "(1/radius+2*log(2)/thickness)/(1+exp(7.2*(abs(z)+radius-0.5*thickness)))", CustomGBForce::SingleParticle); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=max(Imol,Imem)*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - custom->addEnergyTerm("-138.935456*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - system.addForce(custom); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-2; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); -} - -void testTabulatedFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "0", CustomGBForce::ParticlePair); - force->addEnergyTerm("fn(r)+1", CustomGBForce::ParticlePair); - force->addParticle(vector()); - force->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(std::sin(0.25*i)); - force->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -std::cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testMultipleChainRules() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "2*r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+1", CustomGBForce::SingleParticle); - force->addComputedValue("c", "2*b+a", CustomGBForce::SingleParticle); - force->addEnergyTerm("0.1*a+1*b+10*c", CustomGBForce::SingleParticle); // 0.1*(2*r) + 2*r+1 + 10*(3*a+2) = 0.2*r + 2*r+1 + 40*r+20+20*r = 62.2*r+21 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 5; i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(124.4, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-124.4, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(2*(62.2*i+21), state.getPotentialEnergy(), 0.02); - } -} - -void testPositionDependence() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+x*y", CustomGBForce::SingleParticle); - force->addEnergyTerm("b*z", CustomGBForce::SingleParticle); - force->addEnergyTerm("b1+b2", CustomGBForce::ParticlePair); // = 2*r+x1*y1+x2*y2 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - vector forces(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < 5; i++) { - positions[0] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - positions[1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - Vec3 delta = positions[0]-positions[1]; - double r = sqrt(delta.dot(delta)); - double energy = 2*r+positions[0][0]*positions[0][1]+positions[1][0]*positions[1][1]; - for (int j = 0; j < 2; j++) - energy += positions[j][2]*(r+positions[j][0]*positions[j][1]); - Vec3 force1(-(1+positions[0][2])*delta[0]/r-(1+positions[0][2])*positions[0][1]-(1+positions[1][2])*delta[0]/r, - -(1+positions[0][2])*delta[1]/r-(1+positions[0][2])*positions[0][0]-(1+positions[1][2])*delta[1]/r, - -(1+positions[0][2])*delta[2]/r-(r+positions[0][0]*positions[0][1])-(1+positions[1][2])*delta[2]/r); - Vec3 force2((1+positions[0][2])*delta[0]/r+(1+positions[1][2])*delta[0]/r-(1+positions[1][2])*positions[1][1], - (1+positions[0][2])*delta[1]/r+(1+positions[1][2])*delta[1]/r-(1+positions[1][2])*positions[1][0], - (1+positions[0][2])*delta[2]/r+(1+positions[1][2])*delta[2]/r-(r+positions[1][0]*positions[1][1])); - ASSERT_EQUAL_VEC(force1, forces[0], 1e-4); - ASSERT_EQUAL_VEC(force2, forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(2), positions3(2); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); - } -} - -void testExclusions() { - for (int i = 0; i < 4; i++) { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", i < 2 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addEnergyTerm("a", CustomGBForce::SingleParticle); - force->addEnergyTerm("(1+a1+a2)*r", i%2 == 0 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addParticle(vector()); - force->addParticle(vector()); - force->addExclusion(0, 1); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f, energy; - switch (i) - { - case 0: // e = 0 - f = 0; - energy = 0; - break; - case 1: // e = r - f = 1; - energy = 1; - break; - case 2: // e = 2r - f = 2; - energy = 2; - break; - case 3: // e = 3r + 2r^2 - f = 7; - energy = 5; - break; - default: - ASSERT(false); - } - ASSERT_EQUAL_VEC(Vec3(f, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-f, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = stepSize/norm; - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/stepSize, 1e-3*abs(state.getPotentialEnergy())); - } -} +#include "CudaTests.h" +#include "TestCustomGBForce.h" -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testOBC(GBSAOBCForce::NoCutoff, CustomGBForce::NoCutoff); - testOBC(GBSAOBCForce::CutoffNonPeriodic, CustomGBForce::CutoffNonPeriodic); - testOBC(GBSAOBCForce::CutoffPeriodic, CustomGBForce::CutoffPeriodic); - testMembrane(); - testTabulatedFunction(); - testMultipleChainRules(); - testPositionDependence(); - testExclusions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCustomHbondForce.cpp b/platforms/cuda/tests/TestCudaCustomHbondForce.cpp index a4e9b769a643d0e17599f64bf44d9b6ef1a0ba85..ae50000504aca4ce78677d14e39e66d5ff70f8b8 100644 --- a/platforms/cuda/tests/TestCudaCustomHbondForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomHbondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,220 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomHbondForce. - */ +#include "CudaTests.h" +#include "TestCustomHbondForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomHbondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -void testHbond() { - // Create a system using a CustomHbondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomHbondForce* custom = new CustomHbondForce("0.5*kr*(distance(d1,a1)-r0)^2 + 0.5*ktheta*(angle(a1,d1,d2)-theta0)^2 + 0.5*kpsi*(angle(d1,a1,a2)-psi0)^2 + kchi*(1+cos(n*dihedral(a3,a2,a1,d1)-chi0))"); - custom->addPerDonorParameter("r0"); - custom->addPerDonorParameter("theta0"); - custom->addPerDonorParameter("psi0"); - custom->addPerAcceptorParameter("chi0"); - custom->addPerAcceptorParameter("n"); - custom->addGlobalParameter("kr", 0.4); - custom->addGlobalParameter("ktheta", 0.5); - custom->addGlobalParameter("kpsi", 0.6); - custom->addGlobalParameter("kchi", 0.7); - vector parameters(3); - parameters[0] = 1.5; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->addDonor(1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.1; - parameters[1] = 2; - custom->addAcceptor(2, 3, 4, parameters); - custom->setCutoffDistance(10.0); - customSystem.addForce(custom); - - // Create an identical system using HarmonicBondForce, HarmonicAngleForce, and PeriodicTorsionForce. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bond = new HarmonicBondForce(); - bond->addBond(1, 2, 1.5, 0.4); - standardSystem.addForce(bond); - HarmonicAngleForce* angle = new HarmonicAngleForce(); - angle->addAngle(0, 1, 2, 1.7, 0.5); - angle->addAngle(1, 2, 3, 1.9, 0.6); - standardSystem.addForce(angle); - PeriodicTorsionForce* torsion = new PeriodicTorsionForce(); - torsion->addTorsion(1, 2, 3, 4, 2, 2.1, 0.7); - standardSystem.addForce(torsion); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters.resize(3); - parameters[0] = 1.4; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->setDonorParameters(0, 1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.2; - parameters[1] = 2; - custom->setAcceptorParameters(0, 2, 3, 4, parameters); - bond->setBondParameters(0, 1, 2, 1.4, 0.4); - torsion->setTorsionParameters(0, 1, 2, 3, 4, 2, 2.2, 0.7); - custom->updateParametersInContext(c1); - bond->updateParametersInContext(c2); - torsion->updateParametersInContext(c2); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); -} - -void testExclusions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->addExclusion(1, 0); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->setNonbondedMethod(CustomHbondForce::CutoffNonPeriodic); - custom->setCutoffDistance(2.5); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 3, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCustomFunctions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("foo(distance(d1,a1))"); - custom->addDonor(1, 0, -1, vector()); - custom->addDonor(2, 0, -1, vector()); - custom->addAcceptor(0, 1, -1, vector()); - vector function(2); - function[0] = 0; - function[1] = 1; - custom->addTabulatedFunction("foo", new Continuous1DFunction(function, 0, 10)); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1, 0.1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -0.1, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.1, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.1*2+0.1*2, state.getPotentialEnergy(), TOL); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testHbond(); - testExclusions(); - testCutoff(); - testCustomFunctions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCustomIntegrator.cpp b/platforms/cuda/tests/TestCudaCustomIntegrator.cpp index ca7acd42375525d3157028b13413e1c50b3ceff4..369b9375b152f68ceb734ff7b678d62cd9371434 100644 --- a/platforms/cuda/tests/TestCudaCustomIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaCustomIntegrator.cpp @@ -29,666 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomIntegrator. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/CustomIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -/** - * Test a simple leapfrog integrator on a single bond. - */ -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.setKineticEnergyExpression("m*v1*v1/2; v1=v+0.5*dt*f/m"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(-0.5*dt*0.5*0.5, 0, 0); - velocities[1] = Vec3(0.5*dt*0.5*0.5, 0, 0); - context.setVelocities(velocities); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 1e-4); - double expectedSpeed = -0.5*freq*std::sin(freq*(time-dt/2)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 1e-4); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(0.5*0.5*0.5, energy, 1e-4); - integrator.step(1); - } -} - -/** - * Test an integrator that enforces constraints. - */ -void testConstraints() { - const int numParticles = 8; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -/** - * Test an integrator that applies constraints directly to velocities. - */ -void testVelocityConstraints() { - const int numParticles = 10; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("x1", 0); - integrator.addComputePerDof("v", "v+0.5*dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("x1", "x"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "v+0.5*dt*f/m+(x-x1)/dt"); - integrator.addConstrainVelocities(); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - - // Constrain the first three particles with SHAKE. - - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - - // Constrain the next three with SETTLE. - - system.addConstraint(3, 4, 1.0); - system.addConstraint(5, 4, 1.0); - system.addConstraint(3, 5, sqrt(2.0)); - - // Constraint the rest with CCMA. - - for (int i = 6; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - integrator.step(2); - State state = context.getState(State::Positions | State::Velocities | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - if (i > 0) { - Vec3 v1 = state.getVelocities()[particle1]; - Vec3 v2 = state.getVelocities()[particle2]; - double vel = (v1-v2).dot(p1-p2); - ASSERT_EQUAL_TOL(0.0, vel, 2e-5); - } - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 0) - initialEnergy = energy; - else if (i > 0) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -/** - * Test an integrator with an AndersenThermostat to see if updateContextState() - * is being handled correctly. - */ -void testWithThermostat() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 20.0; - const int numSteps = 5000; - System system; - CustomIntegrator integrator(0.003); - integrator.addUpdateContextState(); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - integrator.setRandomNumberSeed(thermostat->getRandomNumberSeed()); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -/** - * Test a Monte Carlo integrator that uses global variables and depends on energy. - */ -void testMonteCarlo() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - const double kT = BOLTZ*300.0; - integrator.addGlobalVariable("kT", kT); - integrator.addGlobalVariable("oldE", 0); - integrator.addGlobalVariable("accept", 0); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputeGlobal("oldE", "energy"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*gaussian"); - integrator.addComputeGlobal("accept", "step(exp((oldE-energy)/kT)-uniform)"); - integrator.addComputePerDof("x", "select(accept, x, oldx)"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 2.0, 10.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // Compute the histogram of distances and see if it satisfies a Boltzmann distribution. - - const int numBins = 100; - const double maxDist = 4.0; - const int numIterations = 5000; - vector counts(numBins, 0); - for (int i = 0; i < numIterations; ++i) { - integrator.step(10); - State state = context.getState(State::Positions); - Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; - double dist = sqrt(delta.dot(delta)); - if (dist < maxDist) - counts[(int) (numBins*dist/maxDist)]++; - } - vector expected(numBins, 0); - double sum = 0; - for (int i = 0; i < numBins; i++) { - double dist = (i+0.5)*maxDist/numBins; - expected[i] = dist*dist*exp(-5.0*(dist-2)*(dist-2)/kT); - sum += expected[i]; - } - for (int i = 0; i < numBins; i++) - ASSERT_USUALLY_EQUAL_TOL((double) counts[i]/numIterations, expected[i]/sum, 0.01); -} - -/** - * Test the ComputeSum operation. - */ -void testSum() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(i%10 == 0 ? 0.0 : 1.5); - nb->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 1) - close = true; - } - } - } - CustomIntegrator integrator(0.005); - integrator.addGlobalVariable("ke", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputeSum("ke", "m*v*v/2"); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the sum is being computed correctly. - - for (int i = 0; i < 100; ++i) { - State state = context.getState(State::Energy); - ASSERT_EQUAL_TOL(state.getKineticEnergy(), integrator.getGlobalVariable(0), 1e-5); - integrator.step(1); - } -} - -/** - * Test an integrator that both uses and modifies a context parameter. - */ -void testParameter() { - System system; - system.addParticle(1.0); - AndersenThermostat* thermostat = new AndersenThermostat(0.1, 0.1); - system.addForce(thermostat); - CustomIntegrator integrator(0.1); - integrator.addGlobalVariable("temp", 0); - integrator.addComputeGlobal("temp", "AndersenTemperature"); - integrator.addComputeGlobal("AndersenTemperature", "temp*2"); - integrator.setRandomNumberSeed(thermostat->getRandomNumberSeed()); - Context context(system, integrator, platform); - - // See if the parameter is being used correctly. - - for (int i = 0; i < 10; i++) { - integrator.step(1); - ASSERT_EQUAL_TOL(context.getParameter("AndersenTemperature"), 0.1*(1<<(i+1)), 1e-5); - } -} - -/** - * Test random number distributions. - */ -void testRandomDistributions() { - const int numParticles = 100; - const int numBins = 20; - const int numSteps = 100; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - integrator.addPerDofVariable("a", 0); - integrator.addPerDofVariable("b", 0); - integrator.addComputePerDof("a", "uniform"); - integrator.addComputePerDof("b", "gaussian"); - Context context(system, integrator, platform); - - // See if the random numbers are distributed correctly. - - vector bins(numBins); - double mean = 0.0; - double var = 0.0; - double skew = 0.0; - double kurtosis = 0.0; - vector values; - for (int i = 0; i < numSteps; i++) { - integrator.step(1); - integrator.getPerDofVariable(0, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - ASSERT(v >= 0 && v < 1); - bins[(int) (v*numBins)]++; - } - integrator.getPerDofVariable(1, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - mean += v; - var += v*v; - skew += v*v*v; - kurtosis += v*v*v*v; - } - } - - // Check the distribution of uniform randoms. - - int numValues = numParticles*numSteps*3; - double expected = numValues/(double) numBins; - double tol = 4*sqrt(expected); - for (int i = 0; i < numBins; i++) - ASSERT(bins[i] >= expected-tol && bins[i] <= expected+tol); - - // Check the distribution of gaussian randoms. - - mean /= numValues; - var /= numValues; - skew /= numValues; - kurtosis /= numValues; - double c2 = var-mean*mean; - double c3 = skew-3*var*mean+2*mean*mean*mean; - double c4 = kurtosis-4*skew*mean-3*var*var+12*var*mean*mean-6*mean*mean*mean*mean; - ASSERT_EQUAL_TOL(0.0, mean, 3.0/sqrt((double) numValues)); - ASSERT_EQUAL_TOL(1.0, c2, 3.0/pow(numValues, 1.0/3.0)); - ASSERT_EQUAL_TOL(0.0, c3, 3.0/pow(numValues, 1.0/4.0)); - ASSERT_EQUAL_TOL(0.0, c4, 3.0/pow(numValues, 1.0/4.0)); -} - -/** - * Test getting and setting per-DOF variables. - */ -void testPerDofVariables() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - nb->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.5); - nb->addParticle(i%2 == 0 ? 1 : -1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 0.1) - close = true; - } - } - } - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("temp", 0); - integrator.addPerDofVariable("pos", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("pos", "x"); - Context context(system, integrator, platform); - context.setPositions(positions); - vector initialValues(numParticles); - for (int i = 0; i < numParticles; i++) - initialValues[i] = Vec3(i+0.1, i+0.2, i+0.3); - integrator.setPerDofVariable(0, initialValues); - - // Run a simulation, then query per-DOF values and see if they are correct. - - vector values; - context.getState(State::Forces); // Cause atom reordering to happen before the first step - for (int i = 0; i < 200; ++i) { - integrator.step(1); - State state = context.getState(State::Positions); - integrator.getPerDofVariable(0, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(initialValues[j], values[j], 1e-5); - integrator.getPerDofVariable(1, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(state.getPositions()[j], values[j], 1e-5); - } -} - -/** - * Test evaluating force groups separately. - */ -void testForceGroups() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("outf", 0); - integrator.addPerDofVariable("outf1", 0); - integrator.addPerDofVariable("outf2", 0); - integrator.addGlobalVariable("oute", 0); - integrator.addGlobalVariable("oute1", 0); - integrator.addGlobalVariable("oute2", 0); - integrator.addComputePerDof("outf", "f"); - integrator.addComputePerDof("outf1", "f1"); - integrator.addComputePerDof("outf2", "f2"); - integrator.addComputeGlobal("oute", "energy"); - integrator.addComputeGlobal("oute1", "energy1"); - integrator.addComputeGlobal("oute2", "energy2"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.5, 1.1); - bonds->setForceGroup(1); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->addParticle(0.2, 1, 0); - nb->addParticle(0.2, 1, 0); - nb->setForceGroup(2); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // See if the various forces are computed correctly. - - integrator.step(1); - vector f, f1, f2; - double e1 = 0.5*1.1*0.5*0.5; - double e2 = 138.935456*0.2*0.2/2.0; - integrator.getPerDofVariable(0, f); - integrator.getPerDofVariable(1, f1); - integrator.getPerDofVariable(2, f2); - ASSERT_EQUAL_VEC(Vec3(1.1*0.5, 0, 0), f1[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-1.1*0.5, 0, 0), f1[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-138.935456*0.2*0.2/4.0, 0, 0), f2[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(138.935456*0.2*0.2/4.0, 0, 0), f2[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0]+f2[0], f[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1]+f2[1], f[1], 1e-5); - ASSERT_EQUAL_TOL(e1, integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(e2, integrator.getGlobalVariable(2), 1e-5); - ASSERT_EQUAL_TOL(e1+e2, integrator.getGlobalVariable(0), 1e-5); - - // Make sure they also match the values returned by the Context. - - State s = context.getState(State::Forces | State::Energy, false); - State s1 = context.getState(State::Forces | State::Energy, false, 2); - State s2 = context.getState(State::Forces | State::Energy, false, 4); - vector c, c1, c2; - c = context.getState(State::Forces, false).getForces(); - c1 = context.getState(State::Forces, false, 2).getForces(); - c2 = context.getState(State::Forces, false, 4).getForces(); - ASSERT_EQUAL_VEC(f[0], c[0], 1e-5); - ASSERT_EQUAL_VEC(f[1], c[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0], c1[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1], c1[1], 1e-5); - ASSERT_EQUAL_VEC(f2[0], c2[0], 1e-5); - ASSERT_EQUAL_VEC(f2[1], c2[1], 1e-5); - ASSERT_EQUAL_TOL(s.getPotentialEnergy(), integrator.getGlobalVariable(0), 1e-5); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), integrator.getGlobalVariable(2), 1e-5); -} - -/** - * Test a multiple time step r-RESPA integrator. - */ -void testRespa() { - const int numParticles = 8; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - CustomIntegrator integrator(0.002); - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - for (int i = 0; i < 2; i++) { - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - integrator.addComputePerDof("x", "x+(dt/2)*v"); - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - } - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - for (int i = 0; i < numParticles-2; i++) - bonds->addBond(i, i+1, 1.0, 0.5); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->setCutoffDistance(2.0); - nb->setNonbondedMethod(NonbondedForce::Ewald); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - nb->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - nb->setForceGroup(1); - nb->setReciprocalSpaceForceGroup(0); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and monitor energy conservations. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(2); - } -} +#include "CudaTests.h" +#include "TestCustomIntegrator.h" /** * Make sure random numbers are computed correctly when steps get merged. @@ -756,117 +98,6 @@ void testMergedRandoms() { } } -void testIfBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginIfBlock("a < 3.5"); - integrator.addComputeGlobal("b", "a+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Set "a" to 1.7 and verify that "b" gets set to a+1. - - integrator.setGlobalVariable(0, 1.7); - integrator.step(1); - ASSERT_EQUAL_TOL(2.7, integrator.getGlobalVariable(1), 1e-6); - - // Now set it to a value that should cause the block to be skipped. - - integrator.setGlobalVariable(0, 4.1); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); -} - -void testWhileBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginWhileBlock("b <= a"); - integrator.addComputeGlobal("b", "b+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Try a case where the loop should be skipped. - - integrator.setGlobalVariable(0, -3.3); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case it should be executed exactly once. - - integrator.setGlobalVariable(0, 1.2); - integrator.step(1); - ASSERT_EQUAL_TOL(2.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case, it should be executed several times. - - integrator.setGlobalVariable(0, 5.3); - integrator.step(1); - ASSERT_EQUAL_TOL(6.0, integrator.getGlobalVariable(1), 1e-6); -} - -/** - * Test modifying a global variable, then using it in a per-DOF computation. - */ -void testChangingGlobal() { - System system; - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - integrator.addGlobalVariable("g", 0); - integrator.addPerDofVariable("a", 0); - integrator.addPerDofVariable("b", 0); - integrator.addComputeGlobal("g", "g+1"); - integrator.addComputePerDof("a", "0.5"); - integrator.addComputePerDof("b", "a+g"); - Context context(system, integrator, platform); - - // See if everything is being calculated correctly.. - - for (int i = 0; i < 10; i++) { - integrator.step(1); - ASSERT_EQUAL_TOL(i+1.0, integrator.getGlobalVariable(0), 1e-5); - vector values; - integrator.getPerDofVariable(1, values); - ASSERT_EQUAL_VEC(Vec3(i+1.5, i+1.5, i+1.5), values[0], 1e-5); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testVelocityConstraints(); - testConstrainedMasslessParticles(); - testWithThermostat(); - testMonteCarlo(); - testSum(); - testParameter(); - testRandomDistributions(); - testPerDofVariables(); - testForceGroups(); - testRespa(); - testMergedRandoms(); - testIfBlock(); - testWhileBlock(); - testChangingGlobal(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testMergedRandoms(); } diff --git a/platforms/cuda/tests/TestCudaCustomManyParticleForce.cpp b/platforms/cuda/tests/TestCudaCustomManyParticleForce.cpp index 95c7a17ee224a51384219227d295a2141b50909b..76a657b00ed1ee65d4abd268c06869d8ff357532 100644 --- a/platforms/cuda/tests/TestCudaCustomManyParticleForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomManyParticleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,705 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomManyParticleForce. - */ +#include "CudaTests.h" +#include "TestCustomManyParticleForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/CustomManyParticleForce.h" -#include "openmm/System.h" -#include "openmm/TabulatedFunction.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -CudaPlatform platform; - -Vec3 computeDelta(const Vec3& pos1, const Vec3& pos2, bool periodic, const Vec3* periodicBoxVectors) { - Vec3 diff = pos1-pos2; - if (periodic) { - diff -= periodicBoxVectors[2]*floor(diff[2]/periodicBoxVectors[2][2]+0.5); - diff -= periodicBoxVectors[1]*floor(diff[1]/periodicBoxVectors[1][1]+0.5); - diff -= periodicBoxVectors[0]*floor(diff[0]/periodicBoxVectors[0][0]+0.5); - } - return diff; -} - -void validateAxilrodTeller(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize, bool triclinic) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - Vec3 boxVectors[3]; - if (triclinic) { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0.2*boxSize, boxSize, 0); - boxVectors[2] = Vec3(-0.3*boxSize, -0.1*boxSize, boxSize); - } - else { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0, boxSize, 0); - boxVectors[2] = Vec3(0, 0, boxSize); - } - system.setDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double c = context.getParameter("C"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - bool periodic = (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic); - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = computeDelta(positions[p2], positions[p1], periodic, boxVectors); - Vec3 d13 = computeDelta(positions[p3], positions[p1], periodic, boxVectors); - Vec3 d23 = computeDelta(positions[p3], positions[p2], periodic, boxVectors); - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - double rprod = r12*r13*r23; - expectedEnergy += c*(1+3*ctheta1*ctheta2*ctheta3)/(rprod*rprod*rprod); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void validateStillingerWeber(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double L = context.getParameter("L"); - double eps = context.getParameter("eps"); - double a = context.getParameter("a"); - double gamma = context.getParameter("gamma"); - double sigma = context.getParameter("sigma"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - Vec3 d23 = positions[p3]-positions[p2]; - if (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic) { - for (int j = 0; j < 3; j++) { - d12[j] -= floor(d12[j]/boxSize+0.5f)*boxSize; - d13[j] -= floor(d13[j]/boxSize+0.5f)*boxSize; - d23[j] -= floor(d23[j]/boxSize+0.5f)*boxSize; - } - } - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - expectedEnergy += L*eps*(ctheta1+1.0/3.0)*(ctheta1+1.0/3.0)*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma)); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void testNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - int sets[4][3] = {{0,1,2}, {1,2,3}, {2,3,0}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(1.55); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - int sets[7][3] = {{0,1,2}, {0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,2,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[7]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testPeriodic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[5][3] = {{0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, false); -} - -void testTriclinic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[4][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, true); -} - -void testExclusions() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - force->addExclusion(0, 2); - force->addExclusion(0, 3); - int sets[5][3] = {{0,1,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testAllTerms() { - int numParticles = 4; - - // Create a system with a CustomManyParticleForce. - - System system1; - CustomManyParticleForce* force1 = new CustomManyParticleForce(4, - "distance(p1,p2)+angle(p1,p4,p3)+dihedral(p1,p3,p2,p4)+x1+y4+z3"); - system1.addForce(force1); - vector params; - for (int i = 0; i < numParticles; i++) { - system1.addParticle(1.0); - force1->addParticle(params, i); - } - set filter; - filter.insert(0); - force1->setTypeFilter(0, filter); - filter.clear(); - filter.insert(1); - force1->setTypeFilter(1, filter); - filter.clear(); - filter.insert(3); - force1->setTypeFilter(2, filter); - filter.clear(); - filter.insert(2); - force1->setTypeFilter(3, filter); - - // Create a system that use a CustomCompoundBondForce to compute exactly the same interactions. - - System system2; - CustomCompoundBondForce* force2 = new CustomCompoundBondForce(4, - "distance(p1,p2)+angle(p1,p3,p4)+dihedral(p1,p4,p2,p3)+x1+y3+z4"); - system2.addForce(force2); - vector particles; - particles.push_back(0); - particles.push_back(1); - particles.push_back(2); - particles.push_back(3); - force2->addBond(particles, params); - for (int i = 0; i < numParticles; i++) - system2.addParticle(1.0); - - // Create contexts for both of them. - - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system1, integrator1, platform); - Context context2(system2, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - - // See if they produce identical forces and energies. - - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state2.getPotentialEnergy(), state1.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state2.getForces()[i], state1.getForces()[i], 1e-4); -} - -void testParameters() { - // Create a system. - - int numParticles = 5; - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "C*scale1*scale2*scale3*(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))"); - force->addGlobalParameter("C", 2.0); - force->addPerParticleParameter("scale"); - vector params(1); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - params[0] = i+1; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 2.0*(i+1)*(j+1)*(k+1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); - - // Modify the parameters. - - context.setParameter("C", 3.5); - for (int i = 0; i < numParticles; i++) { - params[0] = 0.5*i-0.1; - force->setParticleParameters(i, params, 0); - } - force->updateParametersInContext(context); - - // See if the energy is still correct. - - state = context.getState(State::Energy); - expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 3.5*(0.5*i-0.1)*(0.5*j-0.1)*(0.5*k-0.1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTabulatedFunctions() { - int numParticles = 5; - - // Create two tabulated functions. - - vector values; - values.push_back(0.0); - values.push_back(50.0); - Continuous1DFunction* f1 = new Continuous1DFunction(values, 0, 100); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector c(numParticles); - for (int i = 0; i < numParticles; i++) - c[i] = genrand_real2(sfmt); - values.resize(numParticles*numParticles*numParticles); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < numParticles; j++) - for (int k = 0; k < numParticles; k++) - values[i+numParticles*j+numParticles*numParticles*k] = c[i]+c[j]+c[k]; - Discrete3DFunction* f2 = new Discrete3DFunction(numParticles, numParticles, numParticles, values); - - // Create a system. - - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "f1(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))*f2(atom1, atom2, atom3)"); - force->addPerParticleParameter("atom"); - force->addTabulatedFunction("f1", f1); - force->addTabulatedFunction("f2", f2); - vector params(1); - vector positions; - for (int i = 0; i < numParticles; i++) { - params[0] = i; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 0.5*(r12+r13+r23)*(c[i]+c[j]+c[k]); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTypeFilters() { - // Create a system. - - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CustomManyParticleForce* force = new CustomManyParticleForce(3, "c1*(distance(p1,p2)+distance(p1,p3))"); - force->addPerParticleParameter("c"); - double c[] = {1.0, 2.0, 1.3, 1.5, -2.1}; - int type[] = {0, 1, 0, 1, 5}; - vector params(1); - for (int i = 0; i < 5; i++) { - params[0] = c[i]; - force->addParticle(params, type[i]); - } - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - set f1, f2; - f1.insert(0); - f2.insert(1); - f2.insert(5); - force->setTypeFilter(0, f1); - force->setTypeFilter(1, f2); - force->setTypeFilter(2, f2); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - int sets[6][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {2,1,3}, {2,1,4}, {2,3,4}}; - for (int i = 0; i < 6; i++) { - int p1 = sets[i][0]; - int p2 = sets[i][1]; - int p3 = sets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - expectedEnergy += c[p1]*(r12+r13); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 3.0; - double spacing = boxSize/gridSize; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(0.6); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -void testCentralParticleModeNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[12][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {2,0,3}, {2, 1, 3}, {3,0,1}, {3,0,2}, {3,1,2}}; - vector expectedSets(&sets[0], &sets[12]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(0.155); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[8][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[8]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 2.0; - double spacing = boxSize/gridSize; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.8*0.23925); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testNoCutoff(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testExclusions(); - testAllTerms(); - testParameters(); - testTabulatedFunctions(); - testTypeFilters(); - testLargeSystem(); - testCentralParticleModeNoCutoff(); - testCentralParticleModeCutoff(); - testCentralParticleModeLargeSystem(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp b/platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp index 2f11c14108c94f2a02a793b343212bd83cced487..57165f63b17935ec442be274bd3e509625225be6 100644 --- a/platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -30,608 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the CUDA implementation of CustomNonbondedForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomNonbondedForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSimpleExpression() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("-0.1*r^3"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = 0.1*3*(2*2); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(-0.1*(2*2*2), state.getPotentialEnergy(), TOL); -} - -void testParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("scale*a*(r*b)^3; a=a1*a2; b=c+b1+b2"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addGlobalParameter("scale", 3.0); - forceField->addGlobalParameter("c", -1.0); - vector params(2); - params[0] = 1.5; - params[1] = 2.0; - forceField->addParticle(params); - params[0] = 2.0; - params[1] = 3.0; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - context.setParameter("scale", 1.0); - context.setParameter("c", 0.0); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = -3.0*3*5.0*(10*10); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(3.0*(10*10*10), state.getPotentialEnergy(), TOL); - - // Try changing the global parameters and make sure it's still correct. - - context.setParameter("scale", 1.5); - context.setParameter("c", 1.0); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*3.0*3*6.0*(12*12); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*3.0*(12*12*12), state.getPotentialEnergy(), TOL); - - // Try changing the per-particle parameters and make sure it's still correct. - - params[0] = 1.6; - params[1] = 2.1; - forceField->setParticleParameters(0, params); - params[0] = 1.9; - params[1] = 2.8; - forceField->setParticleParameters(1, params); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*1.6*1.9*3*5.9*(11.8*11.8); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*1.6*1.9*(11.8*11.8*11.8), state.getPotentialEnergy(), TOL); -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("(a1*a2+b1*b2+c1*c2+d1*d2+e1*e2)*r"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addPerParticleParameter("c"); - forceField->addPerParticleParameter("d"); - forceField->addPerParticleParameter("e"); - vector params(5); - params[0] = 1.0; - params[1] = 2.0; - params[2] = 3.0; - params[3] = 4.0; - params[4] = 5.0; - forceField->addParticle(params); - params[0] = 1.1; - params[1] = 1.2; - params[2] = 1.3; - params[3] = 1.4; - params[4] = 1.5; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = 1*1.1 + 2*1.2 + 3*1.3 + 4*1.4 + 5*1.5; - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(2*force, state.getPotentialEnergy(), TOL); -} - -void testExclusions() { - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("a*r; a=a1+a2"); - nonbonded->addPerParticleParameter("a"); - vector params(1); - vector positions(4); - for (int i = 0; i < 4; i++) { - system.addParticle(1.0); - params[0] = i+1; - nonbonded->addParticle(params); - positions[i] = Vec3(i, 0, 0); - } - nonbonded->addExclusion(0, 1); - nonbonded->addExclusion(1, 2); - nonbonded->addExclusion(2, 3); - nonbonded->addExclusion(0, 2); - nonbonded->addExclusion(1, 3); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(1+4, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-(1+4), 0, 0), forces[3], TOL); - ASSERT_EQUAL_TOL((1+4)*3.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - forceField->setCutoffDistance(2.5); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -1, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2.0+1.0, state.getPotentialEnergy(), TOL); -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - forceField->setCutoffDistance(2.0); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.1, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -2, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.9+1+0.9, state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("r"); - nonbonded->addParticle(vector()); - nonbonded->addParticle(vector()); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta/sqrt(delta.dot(delta)); - ASSERT_EQUAL_TOL(distance, state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testContinuous1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testContinuous2DFunction() { - const int xsize = 20; - const int ysize = 21; - const double xmin = 0.4; - const double xmax = 1.5; - const double ymin = 0.0; - const double ymax = 2.1; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setParameter("b", z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testDiscrete1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Discrete1DFunction(table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i+1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete2DFunction() { - const int xsize = 10; - const int ysize = 5; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - table.push_back(sin(0.25*i)+cos(0.33*j)); - forceField->addTabulatedFunction("fn", new Discrete2DFunction(xsize, ysize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3((i%xsize)+1, 0, 0); - context.setPositions(positions); - context.setParameter("a", i/xsize); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete3DFunction() { - const int xsize = 8; - const int ysize = 5; - const int zsize = 6; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - for (int k = 0; k < zsize; k++) - table.push_back(sin(0.25*i)+cos(0.33*j)+0.12345*k); - forceField->addTabulatedFunction("fn", new Discrete3DFunction(xsize, ysize, zsize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3((i%xsize)+1, 0, 0); - context.setPositions(positions); - context.setParameter("a", (i/xsize)%ysize); - context.setParameter("b", i/(xsize*ysize)); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testCoulombLennardJones() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create two systems: one with a NonbondedForce, and one using a CustomNonbondedForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("q"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - standardNonbonded->addParticle(1.0, 0.2, 0.1); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.1); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - else { - standardNonbonded->addParticle(1.0, 0.2, 0.2); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.2); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); - customNonbonded->addExclusion(2*i, 2*i+1); - } - standardNonbonded->setNonbondedMethod(NonbondedForce::NoCutoff); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::NoCutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - Context context2(customSystem, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - context1.setVelocities(velocities); - context2.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} +#include "CudaTests.h" +#include "TestCustomNonbondedForce.h" void testParallelComputation() { System system; @@ -670,396 +69,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testSwitchingFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("10/r^2"); - vector params; - nonbonded->addParticle(params); - nonbonded->addParticle(params); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double expectedEnergy = 10/(r*r); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - -void testLongRangeCorrection() { - // Create a box of particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System standardSystem; - System customSystem; - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6); sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - int index = 0; - vector params1(2); - params1[0] = 1.1; - params1[1] = 0.5; - vector params2(2); - params2[0] = 1; - params2[1] = 1; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - if (index%2 == 0) { - standardNonbonded->addParticle(0, params1[0], params1[1]); - customNonbonded->addParticle(params1); - } - else { - standardNonbonded->addParticle(0, params2[0], params2[1]); - customNonbonded->addParticle(params2); - } - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - standardNonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - standardNonbonded->setCutoffDistance(cutoff); - customNonbonded->setCutoffDistance(cutoff); - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - standardNonbonded->setUseDispersionCorrection(true); - customNonbonded->setUseLongRangeCorrection(true); - standardNonbonded->setUseSwitchingFunction(true); - customNonbonded->setUseSwitchingFunction(true); - standardNonbonded->setSwitchingDistance(0.8*cutoff); - customNonbonded->setSwitchingDistance(0.8*cutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - - // Compute the correction for the standard force. - - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - double standardEnergy1 = context1.getState(State::Energy).getPotentialEnergy(); - standardNonbonded->setUseDispersionCorrection(false); - context1.reinitialize(); - context1.setPositions(positions); - double standardEnergy2 = context1.getState(State::Energy).getPotentialEnergy(); - - // Compute the correction for the custom force. - - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - double customEnergy1 = context2.getState(State::Energy).getPotentialEnergy(); - customNonbonded->setUseLongRangeCorrection(false); - context2.reinitialize(); - context2.setPositions(positions); - double customEnergy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // See if they agree. - - ASSERT_EQUAL_TOL(standardEnergy1-standardEnergy2, customEnergy1-customEnergy2, 1e-4); -} - -void testInteractionGroups() { - const int numParticles = 6; - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("v1+v2"); - nonbonded->addPerParticleParameter("v"); - vector params(1, 0.001); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(params); - params[0] *= 10; - } - set set1, set2, set3, set4; - set1.insert(2); - set2.insert(0); - set2.insert(1); - set2.insert(2); - set2.insert(3); - set2.insert(4); - set2.insert(5); - nonbonded->addInteractionGroup(set1, set2); // Particle 2 interacts with every other particle. - set3.insert(0); - set3.insert(1); - set4.insert(4); - set4.insert(5); - nonbonded->addInteractionGroup(set3, set4); // Particles 0 and 1 interact with 4 and 5. - nonbonded->addExclusion(1, 2); // Add an exclusion to make sure it gets skipped. - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - context.setPositions(positions); - State state = context.getState(State::Energy); - double expectedEnergy = 331.423; // Each digit is the number of interactions a particle particle is involved in. - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), TOL); -} - -void testLargeInteractionGroup() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create a large system. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - nonbonded->addPerParticleParameter("q"); - nonbonded->addPerParticleParameter("sigma"); - nonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - nonbonded->addExclusion(2*i, 2*i+1); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Compute the forces. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - - // Modify the force so only one particle interacts with everything else. - - set set1, set2; - set1.insert(151); - for (int i = 0; i < numParticles; i++) - set2.insert(i); - nonbonded->addInteractionGroup(set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - - // The force on that one particle should be the same. - - ASSERT_EQUAL_VEC(state1.getForces()[151], state2.getForces()[151], 1e-4); - - // Modify the interaction group so it includes all interactions. This should now reproduce the original forces - // on all atoms. - - for (int i = 0; i < numParticles; i++) - set1.insert(i); - nonbonded->setInteractionGroupParameters(0, set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state3.getForces()[i], 1e-4); -} - -void testInteractionGroupLongRangeCorrection() { - const int numParticles = 10; - const double boxSize = 10.0; - const double cutoff = 0.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("c1*c2*r^-4"); - nonbonded->addPerParticleParameter("c"); - vector positions(numParticles); - vector params(1); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - params[0] = (i%2 == 0 ? 1.1 : 2.0); - nonbonded->addParticle(params); - positions[i] = Vec3(0.5*i, 0, 0); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - - // Setup nonbonded groups. They involve 1 interaction of type AA, - // 2 of type BB, and 5 of type AB. - - set set1, set2, set3, set4, set5; - set1.insert(0); - set1.insert(1); - set1.insert(2); - nonbonded->addInteractionGroup(set1, set1); - set2.insert(3); - set3.insert(4); - set3.insert(6); - set3.insert(8); - nonbonded->addInteractionGroup(set2, set3); - set4.insert(5); - set5.insert(7); - set5.insert(9); - nonbonded->addInteractionGroup(set4, set5); - - // Compute energy with and without the correction. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseLongRangeCorrection(true); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - - // Check the result. - - double sum = (1.1*1.1 + 2*2.0*2.0 + 5*1.1*2.0)*2.0; - int numPairs = (numParticles*(numParticles+1))/2; - double expected = 2*M_PI*numParticles*numParticles*sum/(numPairs*boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy2-energy1, 1e-4); -} - -void testMultipleCutoffs() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - - // Add multiple nonbonded forces that have different cutoffs. - - CustomNonbondedForce* nonbonded1 = new CustomNonbondedForce("2*r"); - nonbonded1->addParticle(vector()); - nonbonded1->addParticle(vector()); - nonbonded1->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded1->setCutoffDistance(2.5); - system.addForce(nonbonded1); - CustomNonbondedForce* nonbonded2 = new CustomNonbondedForce("3*r"); - nonbonded2->addParticle(vector()); - nonbonded2->addParticle(vector()); - nonbonded2->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded2->setCutoffDistance(2.9); - nonbonded2->setForceGroup(1); - system.addForce(nonbonded2); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 0, 0); - for (double r = 2.4; r < 3.2; r += 0.2) { - positions[1][1] = r; - context.setPositions(positions); - double e1 = (r < 2.5 ? 2.0*r : 0.0); - double e2 = (r < 2.9 ? 3.0*r : 0.0); - double f1 = (r < 2.5 ? 2.0 : 0.0); - double f2 = (r < 2.9 ? 3.0 : 0.0); - - // Check the first force. - - State state = context.getState(State::Forces | State::Energy, false, 1); - ASSERT_EQUAL_VEC(Vec3(0, f1, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1, state.getPotentialEnergy(), TOL); - - // Check the second force. - - state = context.getState(State::Forces | State::Energy, false, 2); - ASSERT_EQUAL_VEC(Vec3(0, f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e2, state.getPotentialEnergy(), TOL); - - // Check the sum of both forces. - - state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_VEC(Vec3(0, f1+f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1-f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1+e2, state.getPotentialEnergy(), TOL); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSimpleExpression(); - testParameters(); - testManyParameters(); - testExclusions(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testContinuous1DFunction(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testDiscrete1DFunction(); - testDiscrete2DFunction(); - testDiscrete3DFunction(); - testCoulombLennardJones(); - testParallelComputation(); - testSwitchingFunction(); - testLongRangeCorrection(); - testInteractionGroups(); - testLargeInteractionGroup(); - testInteractionGroupLongRangeCorrection(); - testMultipleCutoffs(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaCustomTorsionForce.cpp b/platforms/cuda/tests/TestCudaCustomTorsionForce.cpp index b6f17d69b75dbd163fae0d80e728edb2776df526..3693a80df58be279f7b0e3d2a3f4e4a4004d337e 100644 --- a/platforms/cuda/tests/TestCudaCustomTorsionForce.cpp +++ b/platforms/cuda/tests/TestCudaCustomTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,146 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of CustomTorsionForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testTorsions() { - // Create a system using a CustomTorsionForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("k*(1+cos(n*theta-theta0))"); - custom->addPerTorsionParameter("theta0"); - custom->addPerTorsionParameter("n"); - custom->addGlobalParameter("k", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 1; - custom->addTorsion(0, 1, 2, 3, parameters); - parameters[0] = 2.0; - parameters[1] = 2; - custom->addTorsion(1, 2, 3, 4, parameters); - customSystem.addForce(custom); - - // Create an identical system using a PeriodicTorsionForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 1, 1.5, 0.5); - periodic->addTorsion(1, 2, 3, 4, 2, 2.0, 0.5); - harmonicSystem.addForce(periodic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 2; - custom->setTorsionParameters(0, 0, 1, 2, 3, parameters); - parameters[0] = 2.1; - parameters[1] = 3; - custom->setTorsionParameters(1, 1, 2, 3, 4, parameters); - custom->updateParametersInContext(c1); - periodic->setTorsionParameters(0, 0, 1, 2, 3, 2, 1.6, 0.5); - periodic->setTorsionParameters(1, 1, 2, 3, 4, 3, 2.1, 0.5); - periodic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -void testRange() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("theta"); - custom->addTorsion(0, 1, 2, 3, vector()); - system.addForce(custom); - - // Set the atoms in various positions, and verify that the angle is always in the expected range. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(4); - VerletIntegrator integrator(0.01); - double minAngle = 1000; - double maxAngle = -1000; - Context context(system, integrator, platform); - for (int i = 0; i < 100; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - context.setPositions(positions); - double angle = context.getState(State::Energy).getPotentialEnergy(); - if (angle < minAngle) - minAngle = angle; - if (angle > maxAngle) - maxAngle = angle; - } - ASSERT(minAngle >= -M_PI); - ASSERT(maxAngle <= M_PI); -} +#include "CudaTests.h" +#include "TestCustomTorsionForce.h" void testParallelComputation() { System system; @@ -199,18 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testTorsions(); - testRange(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaEwald.cpp b/platforms/cuda/tests/TestCudaEwald.cpp index 51773b64962bd0c1fd435ed57af7e6ed8d24d02d..9efc4eaa4425ad16b2f4ccf98e03ac0531625190 100644 --- a/platforms/cuda/tests/TestCudaEwald.cpp +++ b/platforms/cuda/tests/TestCudaEwald.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,344 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the Ewald summation method CUDA implementation of NonbondedForce. - */ +#include "CudaTests.h" +#include "TestEwald.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testEwaldPME(bool includeExceptions) { - -// Use amorphous NaCl system for the tests - - const int numParticles = 894; - const double cutoff = 1.2; - const double boxSize = 3.00646; - double tol = 1e-5; - - ReferencePlatform reference; - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(tol); - - for (int i = 0; i < numParticles/2; i++) - system.addParticle(22.99); - for (int i = 0; i < numParticles/2; i++) - system.addParticle(35.45); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(1.0, 1.0,0.0); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(-1.0, 1.0,0.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - vector positions(numParticles); - #include "nacl_amorph.dat" - if (includeExceptions) { - // Add some exclusions. - - for (int i = 0; i < numParticles-1; i++) { - Vec3 delta = positions[i]-positions[i+1]; - if (sqrt(delta.dot(delta)) < 0.5*cutoff) - nonbonded->addException(i, i+1, i%2 == 0 ? 0.0 : 0.5, 1.0, 0.0); - } - } - -// (1) Check whether the Reference and CUDA platforms agree when using Ewald Method - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cuContext.setPositions(positions); - referenceContext.setPositions(positions); - State cuState = cuContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], cuState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), cuState.getPotentialEnergy(), tol); - -// (2) Check whether Ewald method in CUDA is self-consistent - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = cuState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - const double delta = 5e-3; - double step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = cuState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator3(0.01); - Context cuContext2(system, integrator3, platform); - cuContext2.setPositions(positions); - - tol = 1e-2; - State cuState2 = cuContext2.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (cuState2.getPotentialEnergy()-cuState.getPotentialEnergy())/delta, tol) - -// (3) Check whether the Reference and CUDA platforms agree when using PME - - nonbonded->setNonbondedMethod(NonbondedForce::PME); - cuContext.reinitialize(); - referenceContext.reinitialize(); - cuContext.setPositions(positions); - referenceContext.setPositions(positions); - cuState = cuContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], cuState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), cuState.getPotentialEnergy(), tol); - -// (4) Check whether PME method in CUDA is self-consistent - - norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = cuState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = cuState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator4(0.01); - Context cuContext3(system, integrator4, platform); - cuContext3.setPositions(positions); - - tol = 1e-2; - State cuState3 = cuContext3.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (cuState3.getPotentialEnergy()-cuState.getPotentialEnergy())/delta, tol) -} - -void testEwald2Ions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(-1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(TOL); - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(3.048000,2.764000,3.156000); - positions[1] = Vec3(2.809000,2.888000,2.571000); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - ASSERT_EQUAL_VEC(Vec3(-123.711, 64.1877, -302.716), forces[0], 10*TOL); - ASSERT_EQUAL_VEC(Vec3( 123.711, -64.1877, 302.716), forces[1], 10*TOL); - ASSERT_EQUAL_TOL(-217.276, state.getPotentialEnergy(), 0.01/*10*TOL*/); -} - -void testTriclinic() { - // Create a triclinic box containing eight particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(2.5, 0, 0), Vec3(0.5, 3.0, 0), Vec3(0.7, 0.9, 3.5)); - for (int i = 0; i < 8; i++) - system.addParticle(1.0); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - force->setNonbondedMethod(NonbondedForce::PME); - force->setCutoffDistance(1.0); - force->setPMEParameters(3.45891, 32, 40, 48); - for (int i = 0; i < 4; i++) - force->addParticle(-1, 0.440104, 0.4184); // Cl parameters - for (int i = 0; i < 4; i++) - force->addParticle(1, 0.332840, 0.0115897); // Na parameters - vector positions(8); - positions[0] = Vec3(1.744, 2.788, 3.162); - positions[1] = Vec3(1.048, 0.762, 2.340); - positions[2] = Vec3(2.489, 1.570, 2.817); - positions[3] = Vec3(1.027, 1.893, 3.271); - positions[4] = Vec3(0.937, 0.825, 0.009); - positions[5] = Vec3(2.290, 1.887, 3.352); - positions[6] = Vec3(1.266, 1.111, 2.894); - positions[7] = Vec3(0.933, 1.862, 3.490); - - // Compute the forces and energy. - - VerletIntegrator integ(0.001); - Context context(system, integ, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // Compare them to values computed by Gromacs. - - double expectedEnergy = -963.370; - vector expectedForce(8); - expectedForce[0] = Vec3(4.25253e+01, -1.23503e+02, 1.22139e+02); - expectedForce[1] = Vec3(9.74752e+01, 1.68213e+02, 1.93169e+02); - expectedForce[2] = Vec3(-1.50348e+02, 1.29165e+02, 3.70435e+02); - expectedForce[3] = Vec3(9.18644e+02, -3.52571e+00, -1.34772e+03); - expectedForce[4] = Vec3(-1.61193e+02, 9.01528e+01, -7.12904e+01); - expectedForce[5] = Vec3(2.82630e+02, 2.78029e+01, -3.72864e+02); - expectedForce[6] = Vec3(-1.47454e+02, -2.14448e+02, -3.55789e+02); - expectedForce[7] = Vec3(-8.82195e+02, -7.39132e+01, 1.46202e+03); - for (int i = 0; i < 8; i++) { - ASSERT_EQUAL_VEC(expectedForce[i], state.getForces()[i], 1e-4); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-4); -} - -void testErrorTolerance(NonbondedForce::NonbondedMethod method) { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 5.0; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(method); - - // For various values of the cutoff and error tolerance, see if the actual error is reasonable. - - for (double cutoff = 1.0; cutoff < boxWidth/2; cutoff *= 1.2) { - force->setCutoffDistance(cutoff); - vector refForces; - double norm = 0.0; - for (double tol = 5e-5; tol < 1e-3; tol *= 2.0) { - force->setEwaldErrorTolerance(tol); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces); - if (refForces.size() == 0) { - refForces = state.getForces(); - for (int i = 0; i < numParticles; i++) - norm += refForces[i].dot(refForces[i]); - norm = sqrt(norm); - } - else { - double diff = 0.0; - for (int i = 0; i < numParticles; i++) { - Vec3 delta = refForces[i]-state.getForces()[i]; - diff += delta.dot(delta); - } - diff = sqrt(diff)/norm; - ASSERT(diff < 2*tol); - } - } - } -} - -void testPMEParameters() { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 4.7; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(NonbondedForce::PME); - - // Compute the energy with an error tolerance of 1e-3. - - force->setEwaldErrorTolerance(1e-3); - VerletIntegrator integrator1(0.01); - Context context1(system, integrator1, platform); - context1.setPositions(positions); - double energy1 = context1.getState(State::Energy).getPotentialEnergy(); - - // Try again with an error tolerance of 1e-4. - - force->setEwaldErrorTolerance(1e-4); - VerletIntegrator integrator2(0.01); - Context context2(system, integrator2, platform); - context2.setPositions(positions); - double energy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // Now explicitly set the parameters. These should match the values that were - // used for tolerance 1e-3. - - force->setPMEParameters(2.49291157051793, 32, 32, 32); - VerletIntegrator integrator3(0.01); - Context context3(system, integrator3, platform); - context3.setPositions(positions); - double energy3 = context3.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(energy1, energy3, 1e-6); - ASSERT(fabs((energy1-energy2)/energy1) > 1e-5); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testEwaldPME(false); - testEwaldPME(true); -// testEwald2Ions(); - testTriclinic(); - testErrorTolerance(NonbondedForce::Ewald); - testErrorTolerance(NonbondedForce::PME); - testPMEParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaGBSAOBCForce.cpp b/platforms/cuda/tests/TestCudaGBSAOBCForce.cpp index 87e01f19aae35de88932d2276247a4e61e987775..6efdd1a7e943ca1e318fccb47aece280b374d374 100644 --- a/platforms/cuda/tests/TestCudaGBSAOBCForce.cpp +++ b/platforms/cuda/tests/TestCudaGBSAOBCForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,245 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of GBSAOBCForce. - */ +#include "CudaTests.h" +#include "TestGBSAOBCForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include "openmm/NonbondedForce.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSingleParticle() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle(0.5, 0.15, 1); - nonbonded->addParticle(0.5, 1, 0); - system.addForce(gbsa); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); - - // Change the parameters and see if it is still correct. - - gbsa->setParticleParameters(0, 0.4, 0.25, 1); - gbsa->updateParametersInContext(context); - state = context.getState(State::Energy); - bornRadius = 0.25-0.009; // dielectric offset - bornEnergy = (-0.4*0.4/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; - extendedRadius = 0.25+0.14; - nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.25/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testGlobalSettings() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - const double soluteDielectric = 2.1; - const double solventDielectric = 35.0; - const double surfaceAreaEnergy = 0.75; - forceField->setSoluteDielectric(soluteDielectric); - forceField->setSolventDielectric(solventDielectric); - forceField->setSurfaceAreaEnergy(surfaceAreaEnergy); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/soluteDielectric-1.0/solventDielectric)/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*surfaceAreaEnergy*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testCutoffAndPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle(-1, 0.15, 1); - nonbonded->addParticle(-1, 1, 0); - gbsa->addParticle(1, 0.15, 1); - nonbonded->addParticle(1, 1, 0); - const double cutoffDistance = 3.0; - const double boxSize = 10.0; - nonbonded->setCutoffDistance(cutoffDistance); - gbsa->setCutoffDistance(cutoffDistance); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(gbsa); - system.addForce(nonbonded); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - - // Calculate the forces for both cutoff and periodic with two different atom positions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - positions[1][0]+= boxSize; - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state4 = context.getState(State::Forces); - - // All forces should be identical, exception state3 which should be zero. - - ASSERT_EQUAL_VEC(state1.getForces()[0], state2.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state2.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[0], state4.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state4.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[0], Vec3(0, 0, 0), 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[1], Vec3(0, 0, 0), 0.01); +void runPlatformTests() { } - -void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBCForce::NonbondedMethod method2) { - ReferencePlatform reference; - System system; - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - double charge = i%2 == 0 ? -1 : 1; - gbsa->addParticle(charge, 0.15, 1); - nonbonded->addParticle(charge, 1, 0); - } - nonbonded->setNonbondedMethod(method); - gbsa->setNonbondedMethod(method2); - nonbonded->setCutoffDistance(3.0); - gbsa->setCutoffDistance(3.0); - int grid = (int) floor(0.5+pow(numParticles, 1.0/3.0)); - if (method == NonbondedForce::CutoffPeriodic) { - double boxSize = (grid+1)*1.1; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - } - system.addForce(gbsa); - system.addForce(nonbonded); - LangevinIntegrator integrator1(0, 0.1, 0.01); - LangevinIntegrator integrator2(0, 0.1, 0.01); - Context context(system, integrator1, platform); - Context refContext(system, integrator2, reference); - - // Set random (but uniformly distributed) positions for all the particles. - - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < grid; i++) - for (int j = 0; j < grid; j++) - for (int k = 0; k < grid; k++) - positions[i*grid*grid+j*grid+k] = Vec3(i*1.1, j*1.1, k*1.1); - for (int i = 0; i < numParticles; ++i) - positions[i] = positions[i] + Vec3(0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt)); - context.setPositions(positions); - refContext.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - State refState = refContext.getState(State::Forces | State::Energy); - - // Make sure the CUDA and Reference platforms agree. - - double norm = 0.0; - double diff = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - Vec3 delta = f-refState.getForces()[i]; - diff += delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2]; - } - norm = std::sqrt(norm); - diff = std::sqrt(diff); - ASSERT_EQUAL_TOL(0.0, diff, 0.001*norm); - ASSERT_EQUAL_TOL(state.getPotentialEnergy(), refState.getPotentialEnergy(), 1e-3); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - // (This doesn't work with cutoffs, since the energy changes discontinuously at the cutoff distance.) - - if (method == NonbondedForce::NoCutoff) - { - const double delta = 0.3; - double step = 0.5*delta/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-2) - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleParticle(); - testGlobalSettings(); - testCutoffAndPeriodic(); - for (int i = 5; i < 11; i++) { - testForce(i*i*i, NonbondedForce::NoCutoff, GBSAOBCForce::NoCutoff); - testForce(i*i*i, NonbondedForce::CutoffNonPeriodic, GBSAOBCForce::CutoffNonPeriodic); - testForce(i*i*i, NonbondedForce::CutoffPeriodic, GBSAOBCForce::CutoffPeriodic); - } - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/cuda/tests/TestCudaHarmonicAngleForce.cpp b/platforms/cuda/tests/TestCudaHarmonicAngleForce.cpp index f16b49dc759f4d08b3d40439d8544936d1699607..45bbd94b43b9ef29314092a858f926191e7d1ddb 100644 --- a/platforms/cuda/tests/TestCudaHarmonicAngleForce.cpp +++ b/platforms/cuda/tests/TestCudaHarmonicAngleForce.cpp @@ -7,7 +7,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,74 +30,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of HarmonicAngleForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testAngles() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicAngleForce* forceField = new HarmonicAngleForce(); - forceField->addAngle(0, 1, 2, PI_M/3, 1.1); - forceField->addAngle(1, 2, 3, PI_M/2, 1.2); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(2, 1, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque1 = 1.1*PI_M/6; - double torque2 = 1.2*PI_M/4; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.1*(PI_M/6)*(PI_M/6) + 0.5*1.2*(PI_M/4)*(PI_M/4), state.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - forceField->setAngleParameters(0, 0, 1, 2, PI_M/3.1, 1.3); - forceField->setAngleParameters(1, 1, 2, 3, PI_M/2.1, 1.4); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta1 = (PI_M/2)-(PI_M/3.1); - double dtheta2 = (3*PI_M/4)-(PI_M/2.1); - double torque1 = 1.3*dtheta1; - double torque2 = 1.4*dtheta2; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.3*dtheta1*dtheta1 + 0.5*1.4*dtheta2*dtheta2, state.getPotentialEnergy(), TOL); - } -} +#include "CudaTests.h" +#include "TestHarmonicAngleForce.h" +#include void testParallelComputation() { System system; @@ -127,17 +62,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testAngles(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/cuda/tests/TestCudaHarmonicBondForce.cpp b/platforms/cuda/tests/TestCudaHarmonicBondForce.cpp index 0ccd2db0c716c658a775ae0df0f91c36cebc1c7c..dc4c22957ed46eb3d60a44716a98f2addaa7875d 100644 --- a/platforms/cuda/tests/TestCudaHarmonicBondForce.cpp +++ b/platforms/cuda/tests/TestCudaHarmonicBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,66 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of HarmonicBondForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include +#include "CudaTests.h" +#include "TestHarmonicBondForce.h" #include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 0.8); - forceField->addBond(1, 2, 1.2, 0.7); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - forceField->setBondParameters(0, 0, 1, 1.6, 0.9); - forceField->setBondParameters(1, 1, 2, 1.3, 0.8); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } -} void testParallelComputation() { System system; @@ -118,18 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testBonds(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/cuda/tests/TestCudaLangevinIntegrator.cpp b/platforms/cuda/tests/TestCudaLangevinIntegrator.cpp index 2b2e2e6e188ba1a99e38272efb45d74350cb563b..6e0eb66ac636a87b9817ecaa76afc9b0d2bda522 100644 --- a/platforms/cuda/tests/TestCudaLangevinIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,256 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of LangevinIntegrator. - */ +#include "CudaTests.h" +#include "TestLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Not set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 10000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= 10000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt(10000.0)); -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - LangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaLocalEnergyMinimizer.cpp b/platforms/cuda/tests/TestCudaLocalEnergyMinimizer.cpp index fc1108fa1d218637abf36af1c4c428ce9ec83ba2..1a99b37cb9ea2bbe9b3692b6417482023540d26c 100644 --- a/platforms/cuda/tests/TestCudaLocalEnergyMinimizer.cpp +++ b/platforms/cuda/tests/TestCudaLocalEnergyMinimizer.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,187 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -#include "openmm/internal/AssertionUtilities.h" -#include "CudaPlatform.h" -#include "openmm/Context.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/LocalEnergyMinimizer.h" -#include "openmm/NonbondedForce.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -void testHarmonicBonds() { - const int numParticles = 10; - System system; - HarmonicBondForce* bonds = new HarmonicBondForce(); - system.addForce(bonds); - - // Create a chain of particles connected by harmonic bonds. - - vector positions(numParticles); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - positions[i] = Vec3(i, 0, 0); - if (i > 0) - bonds->addBond(i-1, i, 1+0.1*i, 1); - } - - // Minimize it and check that all bonds are at their equilibrium distances. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - LocalEnergyMinimizer::minimize(context, 1e-5); - State state = context.getState(State::Positions); - for (int i = 1; i < numParticles; i++) { - Vec3 delta = state.getPositions()[i]-state.getPositions()[i-1]; - ASSERT_EQUAL_TOL(1+0.1*i, sqrt(delta.dot(delta)), 1e-4); - } -} - -void testLargeSystem() { - const int numMolecules = 25; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.2, 0.2); - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 2) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} - -void testVirtualSites() { - const int numMolecules = 25; - const int numParticles = numMolecules*3; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - positions[3*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[3*i+1] = Vec3(positions[3*i][0]+1.0, positions[3*i][1], positions[3*i][2]); - positions[3*i+2] = Vec3(); - system.addConstraint(3*i, 3*i+1, 1.0); - system.setVirtualSite(3*i+2, new TwoParticleAverageSite(3*i, 3*i+1, 0.5, 0.5)); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(1e-5); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 3) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - - // Check the virtual site location. - - ASSERT_EQUAL_VEC((finalState.getPositions()[i+1]+finalState.getPositions()[i])*0.5, finalState.getPositions()[i+2], 1e-5); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} +#include "CudaTests.h" +#include "TestLocalEnergyMinimizer.h" -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testHarmonicBonds(); - testLargeSystem(); - testVirtualSites(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaMonteCarloAnisotropicBarostat.cpp b/platforms/cuda/tests/TestCudaMonteCarloAnisotropicBarostat.cpp index 8c25014814d63a9ba04ee827637f0c097593e98b..84a7f5711866756f20091d6a5707363b9b78a81e 100644 --- a/platforms/cuda/tests/TestCudaMonteCarloAnisotropicBarostat.cpp +++ b/platforms/cuda/tests/TestCudaMonteCarloAnisotropicBarostat.cpp @@ -6,8 +6,8 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * - * Authors: Peter Eastman, Lee-Ping Wang * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * * Contributors: * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -29,449 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of MonteCarloAnisotropicBarostat. - */ +#include "CudaTests.h" +#include "TestMonteCarloAnisotropicBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/MonteCarloAnisotropicBarostat.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], true, true, true, frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } -} - -void testIdealGasAxis(int axis) { - // Test scaling just one axis. - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - const bool scaleX = (axis == 0); - const bool scaleY = (axis == 1); - const bool scaleZ = (axis == 2); - double boxX; - double boxY; - double boxZ; - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], scaleX, scaleY, scaleZ, frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - boxX = box[0][0]; - boxY = box[1][1]; - boxZ = box[2][2]; - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - if (!scaleX) { - ASSERT(boxX == initialLength); - } - if (!scaleY) { - ASSERT(boxY == 0.5*initialLength); - } - if (!scaleZ) { - ASSERT(boxZ == 2*initialLength); - } - } -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp, true, true, true, 1); - system.addForce(barostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testTriclinic() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temperature = 300.0; - const double initialVolume = numParticles*BOLTZ*temperature/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - Vec3 initialBox[3]; - initialBox[0] = Vec3(initialLength, 0, 0); - initialBox[1] = Vec3(0.2*initialLength, initialLength, 0); - initialBox[2] = Vec3(0.1*initialLength, 0.3*initialLength, initialLength); - system.setDefaultPeriodicBoxVectors(initialBox[0], initialBox[1], initialBox[2]); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temperature, true, true, true, frequency); - system.addForce(barostat); - - // Run a simulation - - LangevinIntegrator integrator(temperature, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temperature/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - - // Make sure the box vectors have been scaled consistently. - - State state = context.getState(State::Positions); - Vec3 box[3]; - state.getPeriodicBoxVectors(box[0], box[1], box[2]); - double xscale = box[2][0]/(0.1*initialLength); - double yscale = box[2][1]/(0.3*initialLength); - double zscale = box[2][2]/(1.0*initialLength); - for (int i = 0; i < 3; i++) { - ASSERT_EQUAL_VEC(Vec3(xscale*initialBox[i][0], yscale*initialBox[i][1], zscale*initialBox[i][2]), box[i], 1e-5); - } - - // The barostat should have put all particles inside the first periodic box. One integration step - // has happened since then, so they may have moved slightly outside it. - - for (int i = 0; i < numParticles; i++) { - Vec3 pos = state.getPositions()[i]; - ASSERT(pos[2]/box[2][2] > -1 && pos[2]/box[2][2] < 2); - pos -= box[2]*floor(pos[2]/box[2][2]); - ASSERT(pos[1]/box[1][1] > -1 && pos[1]/box[1][1] < 2); - pos -= box[1]*floor(pos[1]/box[1][1]); - ASSERT(pos[0]/box[0][0] > -1 && pos[0]/box[0][0] < 2); - } -} - -/** - * Run a constant pressure simulation on an anisotropic Einstein crystal - * using isotropic and anisotropic barostats. There are a total of 15 simulations: - * - * 1) 3 pressures: 9.0, 10.0, 11.0 bar, for each of the following groups: - * 2) 3 groups of simulations that scale just one axis: x, y, z - * 3) 1 group of simulations that scales all three axes in the anisotropic barostat - * 4) 1 group of simulations that scales all three axes in the isotropic barostat - * - * Results that we will check: - * - * a) In each group of simulations, the volume should decrease with increasing pressure - * b) In the three simulation groups that scale just one axis, the compressibility (i.e. incremental volume change - * with increasing pressure) should go like kx > ky > kz (because the spring constant is largest in the z-direction) - * c) The anisotropic barostat should produce the same result as the isotropic barostat when all three axes are scaled - */ -void testEinsteinCrystal() { - const int numParticles = 64; - const int frequency = 2; - const int equil = 10000; - const int steps = 5000; - const double pressure = 10.0; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp = 300.0; // Only test one temperature since we're looking at three pressures. - const double pres3[] = {2.0, 8.0, 15.0}; - const double initialVolume = numParticles*BOLTZ*temp/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - vector initialPositions(3); - vector results; - // Run four groups of anisotropic simulations; scaling just x, y, z, then all three. - for (int a = 0; a < 4; a++) { - // Test barostat for three different pressures. - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pres3[p], pres3[p], pres3[p]), temp, (a==0||a==3), (a==1||a==3), (a==2||a==3), frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - } - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloBarostat* barostat = new MonteCarloBarostat(pres3[p], temp, frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - - // Check to see if volumes decrease with increasing pressure. - ASSERT_USUALLY_TRUE(results[0] > results[1]); - ASSERT_USUALLY_TRUE(results[1] > results[2]); - ASSERT_USUALLY_TRUE(results[3] > results[4]); - ASSERT_USUALLY_TRUE(results[4] > results[5]); - ASSERT_USUALLY_TRUE(results[6] > results[7]); - ASSERT_USUALLY_TRUE(results[7] > results[8]); - - // Check to see if incremental volume changes with increasing pressure go like kx > ky > kz. - ASSERT_USUALLY_TRUE((results[0] - results[1]) > (results[3] - results[4])); - ASSERT_USUALLY_TRUE((results[1] - results[2]) > (results[4] - results[5])); - ASSERT_USUALLY_TRUE((results[3] - results[4]) > (results[6] - results[7])); - ASSERT_USUALLY_TRUE((results[4] - results[5]) > (results[7] - results[8])); - - // Check to see if the volumes are equal for isotropic and anisotropic (all axis). - ASSERT_USUALLY_EQUAL_TOL(results[9], results[12], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[10], results[13], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[11], results[14], 3/std::sqrt((double) steps)); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testIdealGas(); - testIdealGasAxis(0); - testIdealGasAxis(1); - testIdealGasAxis(2); - testRandomSeed(); - testTriclinic(); - //testEinsteinCrystal(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaMonteCarloBarostat.cpp b/platforms/cuda/tests/TestCudaMonteCarloBarostat.cpp index 08db822f13baa044a3bbdc63305437062322d631..836d0532ba4b56f1dd26fb2c973962a69c718065 100644 --- a/platforms/cuda/tests/TestCudaMonteCarloBarostat.cpp +++ b/platforms/cuda/tests/TestCudaMonteCarloBarostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,261 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of MonteCarloBarostat. - */ +#include "CudaTests.h" +#include "TestMonteCarloBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -void testChangingBoxSize() { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nb->setCutoffDistance(2.0); - nb->addParticle(1, 0.5, 0.5); - system.addForce(nb); - LangevinIntegrator integrator(300.0, 1.0, 0.01); - Context context(system, integrator, platform); - vector positions; - positions.push_back(Vec3()); - context.setPositions(positions); - Vec3 x, y, z; - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(4, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 5, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 6), z, 0); - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 9)); - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(7, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 8, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 9), z, 0); - - // Shrinking the box too small should produce an exception. - - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 3.9, 0), Vec3(0, 0, 9)); - bool ok = true; - try { - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ok = false; - } - catch (exception& ex) { - } - ASSERT(ok); -} - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp[0], frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - ASSERT_EQUAL_TOL(0.5*box[0][0], box[1][1], 1e-5); - ASSERT_EQUAL_TOL(2*box[0][0], box[2][2], 1e-5); - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, 1); - system.addForce(barostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testWater() { - const int gridSize = 8; - const int numMolecules = gridSize*gridSize*gridSize; - const int frequency = 10; - const int steps = 400; - const double temp = 273.15; - const double pressure = 3; - const double spacing = 0.32; - const double angle = 109.47*M_PI/180; - const double dOH = 0.1; - const double dHH = dOH*2*std::sin(0.5*angle); - - // Create a box of SPC water molecules. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(gridSize*spacing, 0, 0), Vec3(0, gridSize*spacing, 0), Vec3(0, 0, gridSize*spacing)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setUseDispersionCorrection(true); - vector positions; - Vec3 offset1(dOH, 0, 0); - Vec3 offset2(dOH*std::cos(angle), dOH*std::sin(angle), 0); - for (int i = 0; i < gridSize; ++i) { - for (int j = 0; j < gridSize; ++j) { - for (int k = 0; k < gridSize; ++k) { - int firstParticle = system.getNumParticles(); - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - nonbonded->addParticle(-0.82, 0.316557, 0.650194); - nonbonded->addParticle(0.41, 1, 0); - nonbonded->addParticle(0.41, 1, 0); - Vec3 pos = Vec3(spacing*i, spacing*j, spacing*k); - positions.push_back(pos); - positions.push_back(pos+offset1); - positions.push_back(pos+offset2); - system.addConstraint(firstParticle, firstParticle+1, dOH); - system.addConstraint(firstParticle, firstParticle+2, dOH); - system.addConstraint(firstParticle+1, firstParticle+2, dHH); - nonbonded->addException(firstParticle, firstParticle+1, 0, 1, 0); - nonbonded->addException(firstParticle, firstParticle+2, 0, 1, 0); - nonbonded->addException(firstParticle+1, firstParticle+2, 0, 1, 0); - } - } - } - system.addForce(nonbonded); - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, frequency); - system.addForce(barostat); - - // Simulate it and see if the density matches the expected value (1 g/mL). - - LangevinIntegrator integrator(temp, 1.0, 0.002); - Context context(system, integrator, platform); - context.setPositions(positions); - integrator.step(2000); - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double density = numMolecules*18/(AVOGADRO*volume*1e-21); - ASSERT_USUALLY_EQUAL_TOL(1.0, density, 0.02); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testChangingBoxSize(); - testIdealGas(); - testRandomSeed(); - testWater(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testWater(); } diff --git a/platforms/cuda/tests/TestCudaNonbondedForce.cpp b/platforms/cuda/tests/TestCudaNonbondedForce.cpp index 602d51ed2b58a96a995b0e92ddea302b4534a3cb..989c2c38ec635bee9815b90af8e18dc13d26b439 100644 --- a/platforms/cuda/tests/TestCudaNonbondedForce.cpp +++ b/platforms/cuda/tests/TestCudaNonbondedForce.cpp @@ -29,785 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the CUDA implementation of NonbondedForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "CudaArray.h" -#include "CudaNonbondedUtilities.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testCoulomb() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0.5, 1, 0); - forceField->addParticle(-1.5, 1, 0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = ONE_4PI_EPS0*(-0.75)/4.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(-0.75)/2.0, state.getPotentialEnergy(), TOL); -} - -void testLJ() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0, 1.2, 1); - forceField->addParticle(0, 1.4, 2); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.3/2.0; - double eps = SQRT_TWO; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/2.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)), state.getPotentialEnergy(), TOL); -} - -void testExclusionsAnd14() { - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - vector positions(5); - const double r = 1.0; - for (int j = 0; j < 5; ++j) { - nonbonded->setParticleParameters(j, 0, 1.5, 0); - positions[j] = Vec3(0, j, 0); - } - nonbonded->setParticleParameters(0, 0, 1.5, 1); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - positions[i] = Vec3(r, 0, 0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.5/r; - double eps = 1.0; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - nonbonded->setParticleParameters(0, 2, 1.5, 0); - nonbonded->setParticleParameters(i, 2, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? 4/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*4/(r*r); - energy = ONE_4PI_EPS0*4/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - const double cutoff = 2.9; - forceField->setCutoffDistance(cutoff); - const double eps = 50.0; - forceField->setReactionFieldDielectric(eps); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force1 = ONE_4PI_EPS0*(1.0)*(0.25-2.0*krf*2.0); - const double force2 = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(0, -force1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force1-force2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force2, 0), forces[2], TOL); - const double energy1 = ONE_4PI_EPS0*(1.0)*(0.5+krf*4.0-crf); - const double energy2 = ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf); - ASSERT_EQUAL_TOL(energy1+energy2, state.getPotentialEnergy(), TOL); -} - -void testCutoff14() { - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - const double cutoff = 3.5; - nonbonded->setCutoffDistance(cutoff); - const double eps = 30.0; - nonbonded->setReactionFieldDielectric(eps); - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(5); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(2, 0, 0); - positions[3] = Vec3(3, 0, 0); - positions[4] = Vec3(4, 0, 0); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - nonbonded->setParticleParameters(0, 0, 1.5, 1); - for (int j = 1; j < 5; ++j) - nonbonded->setParticleParameters(j, 0, 1.5, 0); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double r = positions[i][0]; - double x = 1.5/r; - double e = 1.0; - double force = 4.0*e*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*e*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - const double q = 0.7; - nonbonded->setParticleParameters(0, q, 1.5, 0); - nonbonded->setParticleParameters(i, q, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? q*q/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*q*q/(r*r); - energy = ONE_4PI_EPS0*q*q/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addException(0, 1, 0.0, 1.0, 0.0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - positions[2] = Vec3(3, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2*ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf), state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta*ONE_4PI_EPS0*(-1.0/(distance*distance*distance)+2.0*krf); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(1.0/distance+krf*distance*distance-crf), state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testLargeSystem() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - HarmonicBondForce* bonds = new HarmonicBondForce(); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - bonds->addBond(2*i, 2*i+1, 1.0, 0.1); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - - // Try with cutoffs but not periodic boundary conditions, and make sure the cl and Reference - // platforms agree. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.addForce(bonds); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cuContext.setPositions(positions); - cuContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - State cuState = cuContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(cuState.getPositions()[i], referenceState.getPositions()[i], tol); - ASSERT_EQUAL_VEC(cuState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(cuState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(cuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now do the same thing with periodic boundary conditions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - cuContext.reinitialize(); - referenceContext.reinitialize(); - cuContext.setPositions(positions); - cuContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - cuState = cuContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - double dx = cuState.getPositions()[i][0]-referenceState.getPositions()[i][0]; - double dy = cuState.getPositions()[i][1]-referenceState.getPositions()[i][1]; - double dz = cuState.getPositions()[i][2]-referenceState.getPositions()[i][2]; - ASSERT_EQUAL_TOL(fmod(cuState.getPositions()[i][0]-referenceState.getPositions()[i][0], boxSize), 0, tol); - ASSERT_EQUAL_TOL(fmod(cuState.getPositions()[i][1]-referenceState.getPositions()[i][1], boxSize), 0, tol); - ASSERT_EQUAL_TOL(fmod(cuState.getPositions()[i][2]-referenceState.getPositions()[i][2], boxSize), 0, tol); - ASSERT_EQUAL_VEC(cuState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(cuState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(cuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} -/* -void testBlockInteractions(bool periodic) { - const int blockSize = CudaContext::TileSize; - const int numBlocks = 100; - const int numParticles = blockSize*numBlocks; - const double cutoff = 1.0; - const double boxSize = (periodic ? 5.1 : 1.1); - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(1.0, 0.2, 0.2); - positions[i] = Vec3(boxSize*(3*genrand_real2(sfmt)-1), boxSize*(3*genrand_real2(sfmt)-1), boxSize*(3*genrand_real2(sfmt)-1)); - } - nonbonded->setNonbondedMethod(periodic ? NonbondedForce::CutoffPeriodic : NonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - ContextImpl* contextImpl = *reinterpret_cast(&context); - CudaPlatform::PlatformData& data = *static_cast(contextImpl->getPlatformData()); - CudaContext& cuContext = *data.contexts[0]; - CudaNonbondedUtilities& nb = cuContext.getNonbondedUtilities(); - State state = context.getState(State::Positions | State::Velocities | State::Forces); - nb.updateNeighborListSize(); - state = context.getState(State::Positions | State::Velocities | State::Forces); - - // Verify that the bounds of each block were calculated correctly. - - vector posq(cuContext.getPosq().getSize()); - vector blockCenters(numBlocks); - vector blockBoundingBoxes(numBlocks); - if (cuContext.getUseDoublePrecision()) { - cuContext.getPosq().download(posq); - nb.getBlockCenters().download(blockCenters); - nb.getBlockBoundingBoxes().download(blockBoundingBoxes); - } - else { - vector posqf(cuContext.getPosq().getSize()); - vector blockCentersf(numBlocks); - vector blockBoundingBoxesf(numBlocks); - cuContext.getPosq().download(posqf); - nb.getBlockCenters().download(blockCentersf); - nb.getBlockBoundingBoxes().download(blockBoundingBoxesf); - for (int i = 0; i < numParticles; i++) - posq[i] = make_double4(posqf[i].x, posqf[i].y, posqf[i].z, posqf[i].w); - for (int i = 0; i < numBlocks; i++) { - blockCenters[i] = make_double4(blockCentersf[i].x, blockCentersf[i].y, blockCentersf[i].z, blockCentersf[i].w); - blockBoundingBoxes[i] = make_double4(blockBoundingBoxesf[i].x, blockBoundingBoxesf[i].y, blockBoundingBoxesf[i].z, blockBoundingBoxesf[i].w); - } - } - for (int i = 0; i < numBlocks; i++) { - double4 gridSize = blockBoundingBoxes[i]; - double4 center = blockCenters[i]; - if (periodic) { - ASSERT(gridSize.x < 0.5*boxSize); - ASSERT(gridSize.y < 0.5*boxSize); - ASSERT(gridSize.z < 0.5*boxSize); - } - double minx = 0.0, maxx = 0.0, miny = 0.0, maxy = 0.0, minz = 0.0, maxz = 0.0, radius = 0.0; - for (int j = 0; j < blockSize; j++) { - double4 pos = posq[i*blockSize+j]; - double dx = pos.x-center.x; - double dy = pos.y-center.y; - double dz = pos.z-center.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - ASSERT(abs(dx) < gridSize.x+TOL); - ASSERT(abs(dy) < gridSize.y+TOL); - ASSERT(abs(dz) < gridSize.z+TOL); - minx = min(minx, dx); - maxx = max(maxx, dx); - miny = min(miny, dy); - maxy = max(maxy, dy); - minz = min(minz, dz); - maxz = max(maxz, dz); - } - ASSERT_EQUAL_TOL(-minx, gridSize.x, TOL); - ASSERT_EQUAL_TOL(maxx, gridSize.x, TOL); - ASSERT_EQUAL_TOL(-miny, gridSize.y, TOL); - ASSERT_EQUAL_TOL(maxy, gridSize.y, TOL); - ASSERT_EQUAL_TOL(-minz, gridSize.z, TOL); - ASSERT_EQUAL_TOL(maxz, gridSize.z, TOL); - } - - // Verify that interactions were identified correctly. - - vector interactionCount; - vector interactingTiles; - vector interactionFlags; - nb.getInteractionCount().download(interactionCount); - int numWithInteractions = interactionCount[0]; - vector hasInteractions(numBlocks*(numBlocks+1)/2, false); - nb.getInteractingTiles().download(interactingTiles); - nb.getInteractionFlags().download(interactionFlags); - const unsigned int dim = cuContext.getNumAtomBlocks(); - for (int i = 0; i < numWithInteractions; i++) { - unsigned int x = interactingTiles[i].x; - unsigned int y = interactingTiles[i].y; - int index = (x > y ? x+y*dim-y*(y+1)/2 : y+x*dim-x*(x+1)/2); - hasInteractions[index] = true; - - // Make sure this tile really should have been flagged based on bounding volumes. - - double4 gridSize1 = blockBoundingBoxes[x]; - double4 gridSize2 = blockBoundingBoxes[y]; - double4 center1 = blockCenters[x]; - double4 center2 = blockCenters[y]; - double dx = center1.x-center2.x; - double dy = center1.y-center2.y; - double dz = center1.z-center2.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - dx = max(0.0, abs(dx)-gridSize1.x-gridSize2.x); - dy = max(0.0, abs(dy)-gridSize1.y-gridSize2.y); - dz = max(0.0, abs(dz)-gridSize1.z-gridSize2.z); - ASSERT(sqrt(dx*dx+dy*dy+dz*dz) < cutoff+TOL); - - // Check the interaction flags. - - unsigned int flags = interactionFlags[i]; - for (int atom2 = 0; atom2 < 32; atom2++) { - if ((flags & 1) == 0) { - double4 pos2 = posq[y*blockSize+atom2]; - for (int atom1 = 0; atom1 < blockSize; ++atom1) { - double4 pos1 = posq[x*blockSize+atom1]; - double dx = pos2.x-pos1.x; - double dy = pos2.y-pos1.y; - double dz = pos2.z-pos1.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - ASSERT(dx*dx+dy*dy+dz*dz > cutoff*cutoff); - } - } - flags >>= 1; - } - } - - // Check the tiles that did not have interactions to make sure all atoms are beyond the cutoff. - - for (int i = 0; i < (int) hasInteractions.size(); i++) - if (!hasInteractions[i]) { - unsigned int y = (unsigned int) std::floor(numBlocks+0.5-std::sqrt((numBlocks+0.5)*(numBlocks+0.5)-2*i)); - unsigned int x = (i-y*numBlocks+y*(y+1)/2); - if (x == y) - continue; // This block has exclusions, so it will not be in the neighbor list. - for (int atom1 = 0; atom1 < blockSize; ++atom1) { - double4 pos1 = posq[x*blockSize+atom1]; - for (int atom2 = 0; atom2 < blockSize; ++atom2) { - double4 pos2 = posq[y*blockSize+atom2]; - double dx = pos1.x-pos2.x; - double dy = pos1.y-pos2.y; - double dz = pos1.z-pos2.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - ASSERT(dx*dx+dy*dy+dz*dz > cutoff*cutoff); - } - } - } -}*/ - -void testDispersionCorrection() { - // Create a box full of identical particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - int index = 0; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.1, 0.5); - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - // See if the correction has the correct value. - - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(false); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - double term1 = (0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - double term2 = (0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - double expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); - - // Now modify half the particles to be different, and see if it is still correct. - - int numType2 = 0; - for (int i = 0; i < numParticles; i += 2) { - nonbonded->setParticleParameters(i, 0, 1, 1); - numType2++; - } - int numType1 = numParticles-numType2; - nonbonded->updateParametersInContext(context); - energy2 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(true); - context.reinitialize(); - context.setPositions(positions); - energy1 = context.getState(State::Energy).getPotentialEnergy(); - term1 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - term2 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - term1 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 12)/pow(cutoff, 9))/9; - term2 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 6)/pow(cutoff, 3))/3; - double combinedSigma = 0.5*(1+1.1); - double combinedEpsilon = sqrt(1*0.5); - term1 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 12)/pow(cutoff, 9))/9; - term2 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 6)/pow(cutoff, 3))/3; - term1 /= (numParticles*(numParticles+1))/2; - term2 /= (numParticles*(numParticles+1))/2; - expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); -} - -void testChangingParameters() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - nonbonded->setNonbondedMethod(NonbondedForce::PME); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - - // See if Reference and Cuda give the same forces and energies. - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context cuContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - cuContext.setPositions(positions); - referenceContext.setPositions(positions); - State cuState = cuContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(cuState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(cuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now modify parameters and see if they still agree. - - for (int i = 0; i < numParticles; i += 5) { - double charge, sigma, epsilon; - nonbonded->getParticleParameters(i, charge, sigma, epsilon); - nonbonded->setParticleParameters(i, 1.5*charge, 1.1*sigma, 1.7*epsilon); - } - nonbonded->updateParametersInContext(cuContext); - nonbonded->updateParametersInContext(referenceContext); - cuState = cuContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(cuState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(cuState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} +#include "CudaTests.h" +#include "TestNonbondedForce.h" void testParallelComputation(NonbondedForce::NonbondedMethod method) { System system; @@ -868,61 +91,6 @@ void testParallelComputation(NonbondedForce::NonbondedMethod method) { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testSwitchingFunction(NonbondedForce::NonbondedMethod method) { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(0, 1.2, 1); - nonbonded->addParticle(0, 1.4, 2); - nonbonded->setNonbondedMethod(method); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - nonbonded->setUseDispersionCorrection(false); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - double eps = SQRT_TWO; - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double x = 1.3/r; - double expectedEnergy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - void testReordering() { // Check that reordering of atoms doesn't alter their positions. @@ -950,33 +118,9 @@ void testReordering() { } } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testCoulomb(); - testLJ(); - testExclusionsAnd14(); - testCutoff(); - testCutoff14(); - testPeriodic(); - testTriclinic(); - testLargeSystem(); - //testBlockInteractions(false); - //testBlockInteractions(true); - testDispersionCorrection(); - testChangingParameters(); - testParallelComputation(NonbondedForce::NoCutoff); - testParallelComputation(NonbondedForce::Ewald); - testParallelComputation(NonbondedForce::PME); - testSwitchingFunction(NonbondedForce::CutoffNonPeriodic); - testSwitchingFunction(NonbondedForce::PME); - testReordering(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(NonbondedForce::NoCutoff); + testParallelComputation(NonbondedForce::Ewald); + testParallelComputation(NonbondedForce::PME); + testReordering(); } diff --git a/platforms/cuda/tests/TestCudaPeriodicTorsionForce.cpp b/platforms/cuda/tests/TestCudaPeriodicTorsionForce.cpp index 82349da6e8ece73c399d84ff6c14c889c6e42ba5..ef1acf85e590cf61ad11fd09b865175587f045a9 100644 --- a/platforms/cuda/tests/TestCudaPeriodicTorsionForce.cpp +++ b/platforms/cuda/tests/TestCudaPeriodicTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,69 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of PeriodicTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testPeriodicTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* forceField = new PeriodicTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 2); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque = -2*1.1*std::sin(2*PI_M/3); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.1*(1+std::cos(2*PI_M/3)), state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 3, PI_M/3.2, 1.3); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta = (3*PI_M/2)-(PI_M/3.2); - double torque = -3*1.3*std::sin(dtheta); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.3*(1+std::cos(dtheta)), state.getPotentialEnergy(), TOL); - } -} +#include "CudaTests.h" +#include "TestPeriodicTorsionForce.h" void testParallelComputation() { System system; @@ -121,18 +60,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testPeriodicTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/cuda/tests/TestCudaRBTorsionForce.cpp b/platforms/cuda/tests/TestCudaRBTorsionForce.cpp index 0db592c0848c9f6a84048a6fa85ad08366bc8398..aa0cfd5a3b15c7a5e8c9d0c8445b5cd11cfac50d 100644 --- a/platforms/cuda/tests/TestCudaRBTorsionForce.cpp +++ b/platforms/cuda/tests/TestCudaRBTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,88 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of RBTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/RBTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testRBTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - RBTorsionForce* forceField = new RBTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 1, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.1*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.1*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.11*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.11*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} +#include "CudaTests.h" +#include "TestRBTorsionForce.h" void testParallelComputation() { System system; @@ -140,18 +60,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testRBTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/cuda/tests/TestCudaSettle.cpp b/platforms/cuda/tests/TestCudaSettle.cpp index 925d0c039dbb9a8caddd618a12aa4934d2a299e9..878b8842777ef3c73404160824289d46a215cb40 100644 --- a/platforms/cuda/tests/TestCudaSettle.cpp +++ b/platforms/cuda/tests/TestCudaSettle.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,90 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of the SETTLE algorithm. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -void testConstraints() { - const int numMolecules = 10; - const int numParticles = numMolecules*3; - const int numConstraints = numMolecules*3; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numMolecules; ++i) { - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - forceField->addParticle(-0.82, 0.317, 0.65); - forceField->addParticle(0.41, 1.0, 0.0); - forceField->addParticle(0.41, 1.0, 0.0); - system.addConstraint(i*3, i*3+1, 0.1); - system.addConstraint(i*3, i*3+2, 0.1); - system.addConstraint(i*3+1, i*3+2, 0.163); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; ++i) { - positions[i*3] = Vec3((i%4)*0.4, (i/4)*0.4, 0); - positions[i*3+1] = positions[i*3]+Vec3(0.1, 0, 0); - positions[i*3+2] = positions[i*3]+Vec3(-0.03333, 0.09428, 0); - velocities[i*3] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+1] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+2] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-5); - } - } -} +#include "CudaTests.h" +#include "TestSettle.h" -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testConstraints(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaVariableLangevinIntegrator.cpp b/platforms/cuda/tests/TestCudaVariableLangevinIntegrator.cpp index 7abb555a514997ced76a9d0e04388b6d056860ff..349e6142fb6a253bb011ce47d4c57cf3ac787a8d 100644 --- a/platforms/cuda/tests/TestCudaVariableLangevinIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaVariableLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,311 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of VariableLangevinIntegrator. - */ +#include "CudaTests.h" +#include "TestVariableLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableLangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableLangevinIntegrator integrator(0, 0.1, 1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Now set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 5.0, 5e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 5000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(5); - } - ke /= 5000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - integrator.setConstraintTolerance(1e-5); - integrator.setRandomNumberSeed(0); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableLangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - int numParticles = 0; - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - ++numParticles; - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableLangevinIntegrator integrator(temp, 6.0, 1e-4); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(2.0); - - // Make sure the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 1000; ++i) { - double t = 2.0 + 0.02 * (i + 1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - } - ke /= 1000; - double expected = 1.5 * numParticles * BOLTZ * temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaVariableVerletIntegrator.cpp b/platforms/cuda/tests/TestCudaVariableVerletIntegrator.cpp index 1be1b48619adfe9b36cfd4ac1936a9f9a9f56992..5385e26d7f421fd09f62af152e5281a7802a0c2b 100644 --- a/platforms/cuda/tests/TestCudaVariableVerletIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaVariableVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,289 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of VariableVerletIntegrator. - */ +#include "CudaTests.h" +#include "TestVariableVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableVerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableVerletIntegrator integrator(1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 100.0; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - double finalTime = context.getState(State::Positions).getTime(); - ASSERT(finalTime > 0.1); - - // Now try the stepTo() method. - - finalTime += 0.5; - integrator.stepTo(finalTime); - ASSERT_EQUAL(finalTime, context.getState(State::Positions).getTime()); -} - -void testConstrainedClusters() { - const int numParticles = 7; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - ASSERT(context.getState(State::Positions).getTime() > 0.1); -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableVerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableVerletIntegrator integrator(1e-5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(1.0); - - // Simulate it and see whether energy remains constant. - - State state0 = context.getState(State::Energy); - double initialEnergy = state0.getKineticEnergy() + state0.getPotentialEnergy(); - for (int i = 0; i < 20; i++) { - double t = 1.0 + 0.05*(i+1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy() + state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/cuda/tests/TestCudaVerletIntegrator.cpp b/platforms/cuda/tests/TestCudaVerletIntegrator.cpp index 811094587902b200b85c60970b67010417a7ebe7..30f8c5d3c6e12d0537cc16b308fd66216a33df63 100644 --- a/platforms/cuda/tests/TestCudaVerletIntegrator.cpp +++ b/platforms/cuda/tests/TestCudaVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,225 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of VerletIntegrator. - */ +#include "CudaTests.h" +#include "TestVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - ASSERT_EQUAL_TOL(10.0, context.getState(0).getTime(), 1e-5); -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 100.0; - System system; - VerletIntegrator integrator(0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } +void runPlatformTests() { } - -void testConstrainedClusters() { - const int numParticles = 7; - System system; - VerletIntegrator integrator(0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/cuda/tests/TestCudaVirtualSites.cpp b/platforms/cuda/tests/TestCudaVirtualSites.cpp index be9149b8227ea819bb4a5bec765cba6e646cc0d0..bc70454e5c08d37c79e93526cdc88f98df776a72 100644 --- a/platforms/cuda/tests/TestCudaVirtualSites.cpp +++ b/platforms/cuda/tests/TestCudaVirtualSites.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2014 Stanford University and the Authors. * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,394 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the CUDA implementation of virtual sites. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "CudaPlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -CudaPlatform platform; - -/** - * Check that massless particles are handled correctly. - */ -void testMasslessParticle() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - CustomBondForce* bonds = new CustomBondForce("-1/r"); - system.addForce(bonds); - vector params; - bonds->addBond(0, 1, params); - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(0, 0, 0); - velocities[1] = Vec3(0, 1, 0); - context.setVelocities(velocities); - - // The second particle should move in a circular orbit around the first one. - // Compare it to the analytical solution. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Forces); - double time = state.getTime(); - ASSERT_EQUAL_VEC(Vec3(0,0,0), state.getPositions()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(0,0,0), state.getVelocities()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(cos(time), sin(time), 0), state.getPositions()[1], 0.01); - ASSERT_EQUAL_VEC(Vec3(-sin(time), cos(time), 0), state.getVelocities()[1], 0.01); - integrator.step(1); - } -} - -/** - * Test a TwoParticleAverageSite virtual site. - */ -void testTwoParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.8, 0.2)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.8+pos[1]*0.2, pos[2], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.1+0.3*0.8, 0, 0), state.getForces()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.2+0.3*0.2, 0, 0), state.getForces()[1], 1e-4); - integrator.step(1); - } -} - -/** - * Test a ThreeParticleAverageSite virtual site. - */ -void testThreeParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new ThreeParticleAverageSite(0, 1, 2, 0.2, 0.3, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.2+pos[1]*0.3+pos[2]*0.5, pos[3], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4*0.2, 0, 0), state.getForces()[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.2+0.4*0.3, 0, 0), state.getForces()[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3+0.4*0.5, 0, 0), state.getForces()[2], 1e-5); - integrator.step(1); - } -} - -/** - * Test an OutOfPlaneSite virtual site. - */ -void testOutOfPlane() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new OutOfPlaneSite(0, 1, 2, 0.3, 0.4, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 v12 = pos[1]-pos[0]; - Vec3 v13 = pos[2]-pos[0]; - Vec3 cross = v12.cross(v13); - ASSERT_EQUAL_VEC(pos[0]+v12*0.3+v13*0.4+cross*0.5, pos[3], 1e-5); - const vector& f = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1+0.2+0.3+0.4, 0, 0), f[0]+f[1]+f[2], 1e-5); - Vec3 f2(0.4*0.3, 0.4*0.5*v13[2], -0.4*0.5*v13[1]); - Vec3 f3(0.4*0.4, -0.4*0.5*v12[2], 0.4*0.5*v12[1]); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4, 0, 0)-f2-f3, f[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.2, 0, 0)+f2, f[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3, 0, 0)+f3, f[2], 1e-5); - integrator.step(1); - } -} - -/** - * Test a LocalCoordinatesSite virtual site. - */ -void testLocalCoordinates() { - const Vec3 originWeights(0.2, 0.3, 0.5); - const Vec3 xWeights(-1.0, 0.5, 0.5); - const Vec3 yWeights(0.0, -1.0, 1.0); - const Vec3 localPosition(0.4, 0.3, 0.2); - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new LocalCoordinatesSite(0, 1, 2, originWeights, xWeights, yWeights, localPosition)); - CustomExternalForce* forceField = new CustomExternalForce("2*x^2+3*y^2+4*z^2"); - system.addForce(forceField); - vector params; - forceField->addParticle(0, params); - forceField->addParticle(1, params); - forceField->addParticle(2, params); - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4), positions2(4), positions3(4); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < 100; i++) { - // Set the particles at random positions. - - Vec3 xdir, ydir, zdir; - do { - for (int j = 0; j < 3; j++) - positions[j] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - xdir = positions[0]*xWeights[0] + positions[1]*xWeights[1] + positions[2]*xWeights[2]; - ydir = positions[0]*yWeights[0] + positions[1]*yWeights[1] + positions[2]*yWeights[2]; - zdir = xdir.cross(ydir); - if (sqrt(xdir.dot(xdir)) > 0.1 && sqrt(ydir.dot(ydir)) > 0.1 && sqrt(zdir.dot(zdir)) > 0.1) - break; // These positions give a reasonable coordinate system. - } while (true); - context.setPositions(positions); - context.applyConstraints(0.0001); - - // See if the virtual site is positioned correctly. - - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 origin = pos[0]*originWeights[0] + pos[1]*originWeights[1] + pos[2]*originWeights[2]; - xdir /= sqrt(xdir.dot(xdir)); - zdir /= sqrt(zdir.dot(zdir)); - ydir = zdir.cross(xdir); - ASSERT_EQUAL_VEC(origin+xdir*localPosition[0]+ydir*localPosition[1]+zdir*localPosition[2], pos[3], 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < 3; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - norm = std::sqrt(norm); - const double delta = 1e-2; - double step = 0.5*delta/norm; - for (int i = 0; i < 3; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - context.applyConstraints(0.0001); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - context.applyConstraints(0.0001); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-3) - } -} - -/** - * Make sure that energy, linear momentum, and angular momentum are all conserved - * when using virtual sites. - */ -void testConservationLaws() { - System system; - NonbondedForce* forceField = new NonbondedForce(); - system.addForce(forceField); - vector positions; - - // Create a linear molecule with a TwoParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.4, 0.6)); - system.addConstraint(0, 1, 2.0); - for (int i = 0; i < 3; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i, j, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(2, 0, 0)); - positions.push_back(Vec3()); - - // Create a planar molecule with a ThreeParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(6, new ThreeParticleAverageSite(3, 4, 5, 0.3, 0.5, 0.2)); - system.addConstraint(3, 4, 1.0); - system.addConstraint(3, 5, 1.0); - system.addConstraint(4, 5, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+3, j+3, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 1)); - positions.push_back(Vec3(1, 0, 1)); - positions.push_back(Vec3(0, 1, 1)); - positions.push_back(Vec3()); - - // Create a tetrahedral molecule with an OutOfPlane virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(10, new OutOfPlaneSite(7, 8, 9, 0.3, 0.5, 0.2)); - system.addConstraint(7, 8, 1.0); - system.addConstraint(7, 9, 1.0); - system.addConstraint(8, 9, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+7, j+7, 0, 1, 0); - } - positions.push_back(Vec3(1, 0, -1)); - positions.push_back(Vec3(2, 0, -1)); - positions.push_back(Vec3(1, 1, -1)); - positions.push_back(Vec3()); - - // Create a molecule with a LocalCoordinatesSite virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(14, new LocalCoordinatesSite(11, 12, 13, Vec3(0.3, 0.3, 0.4), Vec3(1.0, -0.5, -0.5), Vec3(0, -1.0, 1.0), Vec3(0.2, 0.2, 1.0))); - system.addConstraint(11, 12, 1.0); - system.addConstraint(11, 13, 1.0); - system.addConstraint(12, 13, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+11, j+11, 0, 1, 0); - } - positions.push_back(Vec3(1, 2, 0)); - positions.push_back(Vec3(2, 2, 0)); - positions.push_back(Vec3(1, 3, 0)); - positions.push_back(Vec3()); - - // Simulate it and check conservation laws. - - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(0.0001); - int numParticles = system.getNumParticles(); - double initialEnergy; - Vec3 initialMomentum, initialAngularMomentum; - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - const vector& pos = state.getPositions(); - const vector& vel = state.getVelocities(); - const vector& f = state.getForces(); - double energy = state.getPotentialEnergy(); - for (int j = 0; j < numParticles; j++) { - Vec3 v = vel[j] + f[j]*0.5*integrator.getStepSize(); - energy += 0.5*system.getParticleMass(j)*v.dot(v); - } - if (i == 0) - initialEnergy = energy; - else - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - Vec3 momentum; - for (int j = 0; j < numParticles; j++) - momentum += vel[j]*system.getParticleMass(j); - if (i == 0) - initialMomentum = momentum; - else - ASSERT_EQUAL_VEC(initialMomentum, momentum, 0.02); - Vec3 angularMomentum; - for (int j = 0; j < numParticles; j++) - angularMomentum += pos[j].cross(vel[j])*system.getParticleMass(j); - if (i == 0) - initialAngularMomentum = angularMomentum; - else - ASSERT_EQUAL_VEC(initialAngularMomentum, angularMomentum, 0.03); - integrator.step(1); - } -} +#include "CudaTests.h" +#include "TestVirtualSites.h" /** * Make sure that atom reordering respects virtual sites. @@ -524,64 +138,6 @@ void testReordering() { } } -/** - * Test a System where multiple virtual sites are all calculated from the same particles. - */ -void testOverlappingSites() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - system.addForce(nonbonded); - nonbonded->addParticle(1.0, 0.0, 0.0); - nonbonded->addParticle(-0.5, 0.0, 0.0); - nonbonded->addParticle(-0.5, 0.0, 0.0); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(10, 0, 0)); - positions.push_back(Vec3(0, 10, 0)); - for (int i = 0; i < 20; i++) { - system.addParticle(0.0); - double u = 0.1*((i+1)%4); - double v = 0.05*i; - system.setVirtualSite(3+i, new ThreeParticleAverageSite(0, 1, 2, u, v, 1-u-v)); - nonbonded->addParticle(i%2 == 0 ? -1.0 : 1.0, 0.0, 0.0); - positions.push_back(Vec3()); - } - VerletIntegrator i1(0.002); - VerletIntegrator i2(0.002); - Context c1(system, i1, Platform::getPlatformByName("Reference")); - Context c2(system, i2, platform); - c1.setPositions(positions); - c2.setPositions(positions); - c1.applyConstraints(0.0001); - c2.applyConstraints(0.0001); - State s1 = c1.getState(State::Positions | State::Forces); - State s2 = c2.getState(State::Positions | State::Forces); - for (int i = 0; i < system.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], 1e-5); - for (int i = 0; i < 3; i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 1e-5); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("CudaPrecision", string(argv[1])); - testMasslessParticle(); - testTwoParticleAverage(); - testThreeParticleAverage(); - testOutOfPlane(); - testLocalCoordinates(); - testConservationLaws(); - testReordering(); - testOverlappingSites(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testReordering(); } diff --git a/platforms/cuda/tests/nacl_amorph.dat b/platforms/cuda/tests/nacl_amorph.dat deleted file mode 100644 index 7e8cbafdf6d6339aea85d8303ea91c547314f0ed..0000000000000000000000000000000000000000 --- a/platforms/cuda/tests/nacl_amorph.dat +++ /dev/null @@ -1,894 +0,0 @@ -positions[0] = Vec3(1.066000,1.628000,0.835000); -positions[1] = Vec3(1.072000,0.428000,0.190000); -positions[2] = Vec3(0.524000,1.442000,1.160000); -positions[3] = Vec3(2.383000,1.524000,1.119000); -positions[4] = Vec3(0.390000,1.441000,0.575000); -positions[5] = Vec3(0.618000,0.399000,0.819000); -positions[6] = Vec3(1.003000,1.257000,1.543000); -positions[7] = Vec3(2.933000,1.569000,0.642000); -positions[8] = Vec3(0.849000,0.739000,0.089000); -positions[9] = Vec3(0.060000,0.794000,0.766000); -positions[10] = Vec3(1.652000,1.405000,1.010000); -positions[11] = Vec3(2.843000,1.533000,1.781000); -positions[12] = Vec3(0.952000,1.309000,0.996000); -positions[13] = Vec3(1.847000,1.402000,0.313000); -positions[14] = Vec3(2.674000,0.083000,1.691000); -positions[15] = Vec3(1.763000,2.104000,0.728000); -positions[16] = Vec3(0.914000,0.574000,0.982000); -positions[17] = Vec3(0.514000,0.078000,0.891000); -positions[18] = Vec3(0.538000,0.766000,1.110000); -positions[19] = Vec3(0.808000,0.676000,0.570000); -positions[20] = Vec3(0.178000,0.014000,0.628000); -positions[21] = Vec3(1.329000,1.333000,0.339000); -positions[22] = Vec3(1.029000,1.678000,0.503000); -positions[23] = Vec3(1.423000,1.767000,1.104000); -positions[24] = Vec3(1.966000,1.051000,0.282000); -positions[25] = Vec3(1.596000,1.971000,0.194000); -positions[26] = Vec3(1.025000,1.043000,2.809000); -positions[27] = Vec3(1.628000,2.614000,0.088000); -positions[28] = Vec3(0.440000,0.606000,0.141000); -positions[29] = Vec3(1.050000,2.821000,2.517000); -positions[30] = Vec3(0.644000,1.604000,0.770000); -positions[31] = Vec3(0.637000,0.917000,0.392000); -positions[32] = Vec3(0.611000,2.768000,0.013000); -positions[33] = Vec3(1.892000,0.660000,0.473000); -positions[34] = Vec3(1.052000,2.081000,0.982000); -positions[35] = Vec3(1.508000,2.300000,0.439000); -positions[36] = Vec3(2.617000,0.328000,1.099000); -positions[37] = Vec3(0.910000,0.040000,0.259000); -positions[38] = Vec3(1.195000,1.494000,1.202000); -positions[39] = Vec3(2.657000,0.997000,0.564000); -positions[40] = Vec3(1.465000,1.580000,0.648000); -positions[41] = Vec3(0.154000,2.538000,1.331000); -positions[42] = Vec3(0.849000,1.476000,1.365000); -positions[43] = Vec3(0.898000,0.987000,1.178000); -positions[44] = Vec3(0.958000,0.656000,1.358000); -positions[45] = Vec3(1.067000,0.934000,0.211000); -positions[46] = Vec3(1.030000,0.319000,1.281000); -positions[47] = Vec3(2.709000,0.807000,0.240000); -positions[48] = Vec3(0.837000,1.362000,0.588000); -positions[49] = Vec3(2.080000,0.791000,2.947000); -positions[50] = Vec3(0.200000,0.266000,1.474000); -positions[51] = Vec3(0.848000,0.379000,1.625000); -positions[52] = Vec3(0.637000,1.071000,0.821000); -positions[53] = Vec3(1.324000,0.757000,2.951000); -positions[54] = Vec3(2.666000,0.935000,1.373000); -positions[55] = Vec3(1.584000,1.025000,1.703000); -positions[56] = Vec3(1.699000,0.636000,0.038000); -positions[57] = Vec3(1.099000,1.644000,1.879000); -positions[58] = Vec3(2.897000,1.302000,1.522000); -positions[59] = Vec3(1.753000,0.949000,2.885000); -positions[60] = Vec3(2.502000,1.321000,0.752000); -positions[61] = Vec3(0.545000,0.193000,1.959000); -positions[62] = Vec3(1.098000,2.646000,1.706000); -positions[63] = Vec3(0.001000,1.205000,0.670000); -positions[64] = Vec3(2.997000,0.061000,1.040000); -positions[65] = Vec3(0.662000,0.828000,1.535000); -positions[66] = Vec3(1.252000,1.246000,0.780000); -positions[67] = Vec3(1.173000,0.472000,0.810000); -positions[68] = Vec3(0.124000,0.622000,2.992000); -positions[69] = Vec3(1.036000,0.883000,0.848000); -positions[70] = Vec3(1.423000,2.146000,1.340000); -positions[71] = Vec3(2.391000,1.136000,1.165000); -positions[72] = Vec3(1.189000,2.961000,0.425000); -positions[73] = Vec3(1.584000,2.500000,0.782000); -positions[74] = Vec3(0.565000,1.122000,1.240000); -positions[75] = Vec3(1.733000,1.716000,1.763000); -positions[76] = Vec3(1.548000,1.522000,0.041000); -positions[77] = Vec3(1.485000,0.561000,0.369000); -positions[78] = Vec3(0.350000,1.661000,0.928000); -positions[79] = Vec3(1.653000,1.223000,0.578000); -positions[80] = Vec3(0.648000,1.349000,0.253000); -positions[81] = Vec3(0.340000,1.820000,0.483000); -positions[82] = Vec3(2.926000,0.119000,1.421000); -positions[83] = Vec3(1.512000,1.084000,0.156000); -positions[84] = Vec3(1.600000,2.115000,1.792000); -positions[85] = Vec3(1.089000,0.934000,1.584000); -positions[86] = Vec3(1.276000,1.104000,1.230000); -positions[87] = Vec3(0.485000,0.305000,0.428000); -positions[88] = Vec3(1.317000,1.261000,1.795000); -positions[89] = Vec3(0.039000,1.413000,1.085000); -positions[90] = Vec3(0.453000,0.701000,0.605000); -positions[91] = Vec3(1.283000,1.937000,0.752000); -positions[92] = Vec3(0.212000,1.416000,1.447000); -positions[93] = Vec3(0.203000,0.358000,0.723000); -positions[94] = Vec3(0.556000,0.445000,1.364000); -positions[95] = Vec3(1.436000,0.861000,0.911000); -positions[96] = Vec3(0.358000,0.966000,0.176000); -positions[97] = Vec3(1.478000,2.715000,0.427000); -positions[98] = Vec3(1.581000,0.575000,0.809000); -positions[99] = Vec3(1.007000,2.153000,2.887000); -positions[100] = Vec3(2.343000,0.663000,2.513000); -positions[101] = Vec3(2.105000,0.649000,1.635000); -positions[102] = Vec3(0.875000,0.743000,2.459000); -positions[103] = Vec3(0.229000,1.315000,1.879000); -positions[104] = Vec3(0.285000,0.935000,1.700000); -positions[105] = Vec3(2.269000,1.284000,2.234000); -positions[106] = Vec3(1.406000,1.149000,2.767000); -positions[107] = Vec3(1.076000,0.220000,1.849000); -positions[108] = Vec3(2.001000,1.532000,2.881000); -positions[109] = Vec3(2.893000,0.485000,1.860000); -positions[110] = Vec3(1.621000,1.786000,2.624000); -positions[111] = Vec3(0.500000,0.616000,1.818000); -positions[112] = Vec3(0.938000,2.978000,2.104000); -positions[113] = Vec3(0.550000,2.081000,0.454000); -positions[114] = Vec3(1.121000,0.685000,2.196000); -positions[115] = Vec3(1.088000,1.385000,2.184000); -positions[116] = Vec3(1.122000,2.705000,2.080000); -positions[117] = Vec3(0.918000,1.767000,2.861000); -positions[118] = Vec3(2.748000,0.232000,2.126000); -positions[119] = Vec3(1.238000,2.766000,0.109000); -positions[120] = Vec3(1.380000,0.785000,1.961000); -positions[121] = Vec3(1.236000,1.757000,0.150000); -positions[122] = Vec3(1.339000,2.187000,2.592000); -positions[123] = Vec3(1.414000,0.342000,2.714000); -positions[124] = Vec3(1.310000,0.770000,2.589000); -positions[125] = Vec3(1.686000,0.765000,2.321000); -positions[126] = Vec3(1.659000,1.367000,2.780000); -positions[127] = Vec3(0.141000,0.095000,1.903000); -positions[128] = Vec3(2.084000,1.002000,2.520000); -positions[129] = Vec3(2.819000,1.286000,2.626000); -positions[130] = Vec3(1.257000,1.044000,2.401000); -positions[131] = Vec3(1.064000,0.546000,2.839000); -positions[132] = Vec3(0.078000,1.246000,0.010000); -positions[133] = Vec3(1.506000,0.420000,2.223000); -positions[134] = Vec3(1.778000,0.699000,1.920000); -positions[135] = Vec3(1.315000,1.721000,2.733000); -positions[136] = Vec3(0.114000,0.281000,0.279000); -positions[137] = Vec3(1.082000,1.421000,2.596000); -positions[138] = Vec3(3.001000,0.592000,2.276000); -positions[139] = Vec3(1.384000,2.227000,2.992000); -positions[140] = Vec3(1.353000,0.044000,1.985000); -positions[141] = Vec3(1.367000,1.832000,2.383000); -positions[142] = Vec3(0.853000,1.119000,2.230000); -positions[143] = Vec3(1.675000,1.482000,2.295000); -positions[144] = Vec3(1.334000,1.890000,1.904000); -positions[145] = Vec3(1.630000,0.140000,2.939000); -positions[146] = Vec3(0.195000,1.290000,2.300000); -positions[147] = Vec3(2.178000,1.173000,3.001000); -positions[148] = Vec3(0.637000,0.655000,2.126000); -positions[149] = Vec3(0.993000,1.796000,2.529000); -positions[150] = Vec3(0.910000,0.701000,1.845000); -positions[151] = Vec3(0.191000,2.128000,0.355000); -positions[152] = Vec3(0.692000,1.163000,2.578000); -positions[153] = Vec3(1.154000,1.052000,1.974000); -positions[154] = Vec3(1.682000,0.335000,2.509000); -positions[155] = Vec3(0.569000,1.032000,1.895000); -positions[156] = Vec3(1.800000,2.796000,1.295000); -positions[157] = Vec3(2.517000,2.347000,2.878000); -positions[158] = Vec3(0.639000,2.470000,1.678000); -positions[159] = Vec3(0.634000,2.006000,1.829000); -positions[160] = Vec3(0.892000,0.215000,0.566000); -positions[161] = Vec3(1.800000,2.143000,1.491000); -positions[162] = Vec3(1.898000,0.226000,2.765000); -positions[163] = Vec3(0.791000,1.738000,0.260000); -positions[164] = Vec3(0.437000,1.740000,2.048000); -positions[165] = Vec3(1.687000,2.438000,1.166000); -positions[166] = Vec3(1.337000,2.304000,1.643000); -positions[167] = Vec3(1.270000,2.397000,1.033000); -positions[168] = Vec3(0.702000,2.429000,0.591000); -positions[169] = Vec3(0.842000,1.976000,0.724000); -positions[170] = Vec3(1.965000,0.095000,1.206000); -positions[171] = Vec3(0.355000,2.710000,0.618000); -positions[172] = Vec3(0.745000,1.434000,2.781000); -positions[173] = Vec3(0.707000,2.171000,1.502000); -positions[174] = Vec3(1.294000,2.696000,0.847000); -positions[175] = Vec3(1.143000,2.075000,0.276000); -positions[176] = Vec3(1.111000,2.474000,0.312000); -positions[177] = Vec3(1.144000,2.316000,0.633000); -positions[178] = Vec3(1.335000,0.292000,0.515000); -positions[179] = Vec3(1.926000,2.813000,2.703000); -positions[180] = Vec3(0.559000,2.314000,2.904000); -positions[181] = Vec3(1.308000,1.605000,1.534000); -positions[182] = Vec3(0.773000,2.913000,1.217000); -positions[183] = Vec3(1.612000,0.082000,1.027000); -positions[184] = Vec3(1.510000,0.287000,1.787000); -positions[185] = Vec3(0.716000,1.424000,1.843000); -positions[186] = Vec3(1.267000,0.685000,1.160000); -positions[187] = Vec3(0.306000,1.653000,1.717000); -positions[188] = Vec3(0.349000,0.020000,1.275000); -positions[189] = Vec3(0.166000,1.979000,0.804000); -positions[190] = Vec3(1.523000,2.992000,0.711000); -positions[191] = Vec3(1.998000,2.146000,0.088000); -positions[192] = Vec3(0.047000,2.513000,0.642000); -positions[193] = Vec3(0.501000,1.793000,1.438000); -positions[194] = Vec3(1.099000,2.010000,1.626000); -positions[195] = Vec3(2.580000,2.854000,1.328000); -positions[196] = Vec3(1.080000,2.779000,1.190000); -positions[197] = Vec3(0.901000,2.561000,0.948000); -positions[198] = Vec3(0.920000,2.990000,0.844000); -positions[199] = Vec3(0.819000,2.924000,1.711000); -positions[200] = Vec3(0.434000,1.516000,0.063000); -positions[201] = Vec3(1.470000,0.058000,0.231000); -positions[202] = Vec3(0.530000,3.005000,1.550000); -positions[203] = Vec3(0.447000,2.330000,1.277000); -positions[204] = Vec3(1.632000,2.683000,1.593000); -positions[205] = Vec3(0.885000,1.835000,2.072000); -positions[206] = Vec3(0.868000,2.601000,1.425000); -positions[207] = Vec3(0.720000,2.242000,0.907000); -positions[208] = Vec3(1.194000,0.144000,1.065000); -positions[209] = Vec3(0.448000,2.485000,0.959000); -positions[210] = Vec3(1.377000,2.694000,1.352000); -positions[211] = Vec3(1.305000,2.928000,2.713000); -positions[212] = Vec3(1.784000,2.456000,1.981000); -positions[213] = Vec3(0.354000,2.136000,1.563000); -positions[214] = Vec3(0.489000,2.000000,1.108000); -positions[215] = Vec3(1.884000,2.221000,0.461000); -positions[216] = Vec3(1.860000,2.540000,0.306000); -positions[217] = Vec3(1.753000,2.335000,2.768000); -positions[218] = Vec3(1.536000,2.441000,2.344000); -positions[219] = Vec3(0.531000,0.025000,2.235000); -positions[220] = Vec3(0.809000,0.011000,2.834000); -positions[221] = Vec3(0.289000,2.614000,2.879000); -positions[222] = Vec3(0.613000,1.891000,2.337000); -positions[223] = Vec3(0.507000,0.037000,2.694000); -positions[224] = Vec3(0.882000,2.185000,2.583000); -positions[225] = Vec3(0.503000,2.051000,2.615000); -positions[226] = Vec3(1.907000,1.956000,2.831000); -positions[227] = Vec3(2.833000,2.769000,1.644000); -positions[228] = Vec3(1.141000,0.113000,2.945000); -positions[229] = Vec3(0.600000,1.338000,2.200000); -positions[230] = Vec3(0.904000,2.360000,1.952000); -positions[231] = Vec3(0.738000,1.568000,2.437000); -positions[232] = Vec3(1.136000,2.535000,2.805000); -positions[233] = Vec3(1.430000,2.767000,2.321000); -positions[234] = Vec3(1.078000,2.470000,2.385000); -positions[235] = Vec3(0.296000,2.376000,2.560000); -positions[236] = Vec3(0.719000,0.300000,0.075000); -positions[237] = Vec3(0.518000,1.911000,0.080000); -positions[238] = Vec3(0.381000,1.570000,2.450000); -positions[239] = Vec3(0.716000,2.581000,2.697000); -positions[240] = Vec3(1.473000,2.617000,1.936000); -positions[241] = Vec3(0.421000,2.449000,0.229000); -positions[242] = Vec3(0.425000,2.817000,1.910000); -positions[243] = Vec3(1.312000,2.294000,2.057000); -positions[244] = Vec3(1.239000,0.007000,1.539000); -positions[245] = Vec3(0.822000,0.379000,2.086000); -positions[246] = Vec3(0.560000,2.562000,2.227000); -positions[247] = Vec3(0.863000,2.417000,0.050000); -positions[248] = Vec3(1.263000,0.151000,2.332000); -positions[249] = Vec3(0.237000,0.208000,2.336000); -positions[250] = Vec3(0.437000,2.370000,1.910000); -positions[251] = Vec3(1.119000,2.058000,2.207000); -positions[252] = Vec3(1.960000,1.749000,0.118000); -positions[253] = Vec3(2.415000,0.870000,2.757000); -positions[254] = Vec3(1.781000,0.342000,0.366000); -positions[255] = Vec3(2.172000,1.279000,1.421000); -positions[256] = Vec3(1.986000,0.715000,1.301000); -positions[257] = Vec3(1.657000,1.804000,0.810000); -positions[258] = Vec3(2.405000,1.202000,0.416000); -positions[259] = Vec3(1.932000,1.457000,0.786000); -positions[260] = Vec3(1.901000,1.271000,1.207000); -positions[261] = Vec3(1.864000,0.301000,0.810000); -positions[262] = Vec3(1.658000,0.673000,1.558000); -positions[263] = Vec3(2.637000,2.247000,0.396000); -positions[264] = Vec3(1.353000,0.369000,1.438000); -positions[265] = Vec3(0.530000,2.688000,1.346000); -positions[266] = Vec3(0.237000,0.485000,1.047000); -positions[267] = Vec3(2.806000,0.601000,0.822000); -positions[268] = Vec3(1.617000,2.018000,2.136000); -positions[269] = Vec3(2.000000,2.898000,0.022000); -positions[270] = Vec3(2.049000,1.883000,1.001000); -positions[271] = Vec3(2.477000,0.355000,1.786000); -positions[272] = Vec3(1.646000,0.983000,1.266000); -positions[273] = Vec3(1.683000,2.097000,1.114000); -positions[274] = Vec3(2.161000,0.921000,1.065000); -positions[275] = Vec3(2.099000,0.463000,1.942000); -positions[276] = Vec3(2.561000,1.638000,0.572000); -positions[277] = Vec3(2.205000,0.395000,1.005000); -positions[278] = Vec3(2.836000,0.203000,0.698000); -positions[279] = Vec3(2.662000,0.909000,0.966000); -positions[280] = Vec3(0.334000,0.350000,2.767000); -positions[281] = Vec3(2.241000,2.934000,1.248000); -positions[282] = Vec3(2.599000,2.953000,0.921000); -positions[283] = Vec3(2.219000,0.262000,0.058000); -positions[284] = Vec3(0.274000,0.656000,1.456000); -positions[285] = Vec3(1.814000,1.008000,0.882000); -positions[286] = Vec3(2.793000,1.395000,0.316000); -positions[287] = Vec3(0.773000,1.753000,1.639000); -positions[288] = Vec3(2.321000,0.994000,1.591000); -positions[289] = Vec3(2.243000,2.255000,1.690000); -positions[290] = Vec3(0.178000,1.342000,0.327000); -positions[291] = Vec3(1.623000,1.756000,1.426000); -positions[292] = Vec3(2.252000,0.109000,0.375000); -positions[293] = Vec3(3.003000,1.895000,1.895000); -positions[294] = Vec3(0.407000,0.831000,2.756000); -positions[295] = Vec3(2.193000,0.956000,0.632000); -positions[296] = Vec3(2.405000,0.641000,1.107000); -positions[297] = Vec3(2.361000,0.958000,0.162000); -positions[298] = Vec3(2.173000,1.544000,0.528000); -positions[299] = Vec3(1.565000,1.380000,1.428000); -positions[300] = Vec3(2.342000,0.538000,0.253000); -positions[301] = Vec3(1.910000,0.701000,0.954000); -positions[302] = Vec3(2.910000,0.288000,2.938000); -positions[303] = Vec3(0.257000,1.189000,0.958000); -positions[304] = Vec3(0.134000,1.775000,1.243000); -positions[305] = Vec3(2.476000,1.583000,1.956000); -positions[306] = Vec3(1.838000,1.791000,2.354000); -positions[307] = Vec3(1.906000,1.338000,1.696000); -positions[308] = Vec3(2.413000,2.869000,0.166000); -positions[309] = Vec3(3.006000,1.038000,1.322000); -positions[310] = Vec3(1.961000,0.962000,1.605000); -positions[311] = Vec3(0.082000,2.857000,0.020000); -positions[312] = Vec3(2.408000,1.499000,0.062000); -positions[313] = Vec3(2.349000,0.267000,1.415000); -positions[314] = Vec3(2.327000,1.717000,2.350000); -positions[315] = Vec3(2.928000,0.810000,1.582000); -positions[316] = Vec3(2.150000,0.336000,0.576000); -positions[317] = Vec3(2.664000,1.085000,2.962000); -positions[318] = Vec3(2.851000,0.670000,1.174000); -positions[319] = Vec3(1.954000,1.013000,1.975000); -positions[320] = Vec3(2.474000,1.542000,1.545000); -positions[321] = Vec3(2.826000,0.455000,1.490000); -positions[322] = Vec3(2.140000,2.826000,0.558000); -positions[323] = Vec3(2.151000,1.684000,1.780000); -positions[324] = Vec3(0.174000,0.673000,0.397000); -positions[325] = Vec3(0.066000,1.708000,0.160000); -positions[326] = Vec3(2.158000,0.303000,2.582000); -positions[327] = Vec3(2.602000,1.611000,2.632000); -positions[328] = Vec3(2.566000,1.138000,2.465000); -positions[329] = Vec3(2.026000,1.443000,2.477000); -positions[330] = Vec3(2.365000,0.309000,2.255000); -positions[331] = Vec3(1.636000,1.107000,2.058000); -positions[332] = Vec3(2.522000,2.584000,2.399000); -positions[333] = Vec3(2.537000,2.900000,2.158000); -positions[334] = Vec3(2.660000,0.537000,2.577000); -positions[335] = Vec3(2.679000,1.158000,1.724000); -positions[336] = Vec3(0.220000,1.894000,2.498000); -positions[337] = Vec3(2.266000,1.248000,1.837000); -positions[338] = Vec3(0.055000,1.656000,2.128000); -positions[339] = Vec3(2.899000,1.902000,2.823000); -positions[340] = Vec3(0.085000,2.994000,2.720000); -positions[341] = Vec3(0.013000,0.889000,2.468000); -positions[342] = Vec3(1.804000,0.372000,1.636000); -positions[343] = Vec3(0.201000,1.616000,2.824000); -positions[344] = Vec3(0.369000,1.273000,2.699000); -positions[345] = Vec3(2.996000,0.355000,2.596000); -positions[346] = Vec3(2.867000,1.314000,2.107000); -positions[347] = Vec3(2.611000,0.563000,2.140000); -positions[348] = Vec3(2.676000,2.954000,2.955000); -positions[349] = Vec3(0.256000,0.848000,2.062000); -positions[350] = Vec3(2.530000,0.028000,2.528000); -positions[351] = Vec3(0.537000,1.273000,1.596000); -positions[352] = Vec3(0.004000,1.004000,0.401000); -positions[353] = Vec3(1.676000,1.060000,2.463000); -positions[354] = Vec3(2.622000,1.473000,2.257000); -positions[355] = Vec3(2.917000,2.991000,2.316000); -positions[356] = Vec3(0.672000,1.123000,2.984000); -positions[357] = Vec3(2.229000,1.806000,2.673000); -positions[358] = Vec3(0.463000,0.951000,2.383000); -positions[359] = Vec3(2.126000,0.049000,2.037000); -positions[360] = Vec3(2.868000,0.876000,2.015000); -positions[361] = Vec3(2.720000,2.582000,0.079000); -positions[362] = Vec3(1.966000,0.693000,2.624000); -positions[363] = Vec3(1.971000,0.398000,2.318000); -positions[364] = Vec3(0.337000,0.630000,2.458000); -positions[365] = Vec3(2.562000,1.044000,2.040000); -positions[366] = Vec3(2.817000,1.485000,2.963000); -positions[367] = Vec3(2.514000,0.621000,2.992000); -positions[368] = Vec3(3.000000,1.551000,2.496000); -positions[369] = Vec3(0.698000,2.167000,2.180000); -positions[370] = Vec3(2.693000,0.849000,2.389000); -positions[371] = Vec3(2.092000,2.565000,2.986000); -positions[372] = Vec3(2.010000,3.001000,0.819000); -positions[373] = Vec3(2.392000,2.622000,1.636000); -positions[374] = Vec3(2.086000,2.325000,1.340000); -positions[375] = Vec3(2.578000,2.971000,0.502000); -positions[376] = Vec3(1.871000,2.789000,2.225000); -positions[377] = Vec3(2.230000,2.985000,1.594000); -positions[378] = Vec3(2.860000,2.788000,0.729000); -positions[379] = Vec3(2.051000,1.928000,1.472000); -positions[380] = Vec3(2.307000,2.219000,1.067000); -positions[381] = Vec3(2.369000,2.572000,1.289000); -positions[382] = Vec3(2.206000,1.924000,0.693000); -positions[383] = Vec3(1.984000,2.058000,2.005000); -positions[384] = Vec3(2.287000,1.854000,0.317000); -positions[385] = Vec3(2.525000,0.345000,0.686000); -positions[386] = Vec3(2.933000,1.920000,1.053000); -positions[387] = Vec3(0.324000,2.324000,0.601000); -positions[388] = Vec3(2.042000,1.576000,1.277000); -positions[389] = Vec3(0.031000,2.376000,0.949000); -positions[390] = Vec3(2.519000,2.250000,1.465000); -positions[391] = Vec3(0.221000,2.722000,1.652000); -positions[392] = Vec3(2.409000,2.361000,2.051000); -positions[393] = Vec3(2.472000,1.917000,1.673000); -positions[394] = Vec3(0.999000,2.715000,0.562000); -positions[395] = Vec3(1.669000,0.017000,1.508000); -positions[396] = Vec3(1.924000,1.777000,0.542000); -positions[397] = Vec3(2.635000,2.634000,1.905000); -positions[398] = Vec3(2.042000,2.628000,1.025000); -positions[399] = Vec3(2.694000,1.974000,2.009000); -positions[400] = Vec3(2.988000,2.221000,1.333000); -positions[401] = Vec3(1.772000,0.196000,1.978000); -positions[402] = Vec3(2.893000,2.961000,0.283000); -positions[403] = Vec3(2.615000,0.261000,0.245000); -positions[404] = Vec3(2.797000,2.521000,1.412000); -positions[405] = Vec3(0.013000,2.497000,0.246000); -positions[406] = Vec3(1.875000,2.861000,1.801000); -positions[407] = Vec3(2.800000,2.617000,1.049000); -positions[408] = Vec3(2.824000,1.858000,1.487000); -positions[409] = Vec3(2.434000,1.868000,1.275000); -positions[410] = Vec3(2.814000,0.526000,0.384000); -positions[411] = Vec3(2.844000,2.545000,2.246000); -positions[412] = Vec3(1.896000,2.587000,0.719000); -positions[413] = Vec3(0.350000,0.055000,0.076000); -positions[414] = Vec3(2.686000,1.784000,0.222000); -positions[415] = Vec3(2.724000,1.604000,0.989000); -positions[416] = Vec3(0.807000,1.761000,1.122000); -positions[417] = Vec3(2.120000,2.382000,2.226000); -positions[418] = Vec3(2.058000,1.587000,2.067000); -positions[419] = Vec3(2.904000,2.571000,2.686000); -positions[420] = Vec3(2.228000,2.910000,2.410000); -positions[421] = Vec3(2.797000,2.142000,0.114000); -positions[422] = Vec3(2.905000,1.875000,0.480000); -positions[423] = Vec3(1.881000,2.565000,2.469000); -positions[424] = Vec3(2.404000,1.929000,2.999000); -positions[425] = Vec3(2.389000,2.814000,2.782000); -positions[426] = Vec3(2.520000,0.301000,2.815000); -positions[427] = Vec3(2.726000,1.907000,2.339000); -positions[428] = Vec3(2.880000,2.273000,2.500000); -positions[429] = Vec3(2.574000,2.045000,2.716000); -positions[430] = Vec3(2.988000,2.288000,2.001000); -positions[431] = Vec3(0.011000,2.341000,2.904000); -positions[432] = Vec3(0.215000,2.265000,2.257000); -positions[433] = Vec3(2.268000,2.311000,0.234000); -positions[434] = Vec3(2.462000,2.621000,0.550000); -positions[435] = Vec3(1.530000,2.540000,2.728000); -positions[436] = Vec3(2.162000,2.306000,2.687000); -positions[437] = Vec3(2.748000,2.301000,1.734000); -positions[438] = Vec3(2.334000,1.976000,2.041000); -positions[439] = Vec3(1.981000,2.076000,2.443000); -positions[440] = Vec3(2.301000,1.367000,2.665000); -positions[441] = Vec3(2.399000,2.164000,2.403000); -positions[442] = Vec3(0.244000,2.713000,2.257000); -positions[443] = Vec3(0.683000,0.488000,2.781000); -positions[444] = Vec3(2.194000,2.711000,1.993000); -positions[445] = Vec3(2.947000,2.848000,2.001000); -positions[446] = Vec3(0.223000,1.981000,2.913000); -positions[447] = Vec3(0.010000,1.226000,0.917000); -positions[448] = Vec3(1.911000,0.426000,0.582000); -positions[449] = Vec3(2.204000,0.015000,0.136000); -positions[450] = Vec3(0.927000,0.138000,1.645000); -positions[451] = Vec3(0.155000,0.885000,1.479000); -positions[452] = Vec3(1.550000,1.933000,1.261000); -positions[453] = Vec3(1.304000,0.407000,0.287000); -positions[454] = Vec3(0.270000,1.384000,2.910000); -positions[455] = Vec3(0.516000,1.817000,1.695000); -positions[456] = Vec3(1.458000,2.879000,1.523000); -positions[457] = Vec3(1.702000,1.670000,0.593000); -positions[458] = Vec3(1.974000,1.380000,0.534000); -positions[459] = Vec3(2.835000,1.185000,0.479000); -positions[460] = Vec3(0.548000,2.979000,1.126000); -positions[461] = Vec3(1.202000,2.174000,1.466000); -positions[462] = Vec3(1.237000,1.701000,0.653000); -positions[463] = Vec3(2.939000,0.761000,0.349000); -positions[464] = Vec3(1.667000,2.119000,0.377000); -positions[465] = Vec3(1.196000,0.552000,1.372000); -positions[466] = Vec3(1.416000,0.901000,1.178000); -positions[467] = Vec3(0.519000,1.577000,2.227000); -positions[468] = Vec3(1.214000,1.281000,1.063000); -positions[469] = Vec3(0.822000,0.433000,1.375000); -positions[470] = Vec3(0.095000,2.760000,0.604000); -positions[471] = Vec3(1.325000,2.144000,1.848000); -positions[472] = Vec3(0.681000,0.896000,1.285000); -positions[473] = Vec3(0.406000,2.936000,0.717000); -positions[474] = Vec3(0.565000,1.852000,0.349000); -positions[475] = Vec3(0.597000,1.651000,1.020000); -positions[476] = Vec3(1.236000,0.170000,1.335000); -positions[477] = Vec3(0.586000,0.441000,1.980000); -positions[478] = Vec3(1.443000,1.208000,1.575000); -positions[479] = Vec3(0.247000,0.243000,0.502000); -positions[480] = Vec3(1.386000,1.564000,0.236000); -positions[481] = Vec3(0.871000,1.063000,0.930000); -positions[482] = Vec3(0.136000,0.992000,0.621000); -positions[483] = Vec3(0.889000,0.986000,0.010000); -positions[484] = Vec3(1.107000,2.731000,1.452000); -positions[485] = Vec3(0.942000,2.471000,0.517000); -positions[486] = Vec3(0.989000,0.652000,0.747000); -positions[487] = Vec3(0.899000,1.235000,2.707000); -positions[488] = Vec3(1.105000,0.684000,0.068000); -positions[489] = Vec3(1.660000,1.235000,2.276000); -positions[490] = Vec3(1.593000,1.883000,1.915000); -positions[491] = Vec3(1.528000,1.613000,0.920000); -positions[492] = Vec3(0.459000,1.046000,1.011000); -positions[493] = Vec3(0.213000,0.612000,0.644000); -positions[494] = Vec3(0.078000,1.392000,1.676000); -positions[495] = Vec3(0.605000,0.491000,0.574000); -positions[496] = Vec3(0.990000,1.586000,1.076000); -positions[497] = Vec3(0.297000,1.434000,1.028000); -positions[498] = Vec3(1.101000,1.471000,1.443000); -positions[499] = Vec3(0.072000,0.139000,1.653000); -positions[500] = Vec3(0.633000,0.884000,0.645000); -positions[501] = Vec3(0.352000,2.841000,1.463000); -positions[502] = Vec3(0.418000,0.774000,0.350000); -positions[503] = Vec3(2.641000,0.198000,0.869000); -positions[504] = Vec3(0.608000,1.341000,0.695000); -positions[505] = Vec3(1.778000,1.151000,1.830000); -positions[506] = Vec3(1.669000,0.342000,2.768000); -positions[507] = Vec3(1.256000,0.994000,0.798000); -positions[508] = Vec3(1.068000,0.375000,1.036000); -positions[509] = Vec3(0.910000,0.758000,1.589000); -positions[510] = Vec3(0.243000,2.452000,0.805000); -positions[511] = Vec3(1.018000,0.764000,1.122000); -positions[512] = Vec3(2.464000,1.089000,1.404000); -positions[513] = Vec3(0.670000,0.564000,0.034000); -positions[514] = Vec3(0.030000,1.296000,1.310000); -positions[515] = Vec3(1.210000,1.785000,1.691000); -positions[516] = Vec3(0.022000,0.620000,0.974000); -positions[517] = Vec3(1.499000,1.277000,2.986000); -positions[518] = Vec3(1.227000,1.896000,1.006000); -positions[519] = Vec3(0.528000,1.022000,1.635000); -positions[520] = Vec3(1.887000,2.670000,0.089000); -positions[521] = Vec3(1.661000,0.825000,0.793000); -positions[522] = Vec3(0.831000,1.494000,0.374000); -positions[523] = Vec3(1.356000,0.613000,0.930000); -positions[524] = Vec3(0.667000,0.600000,0.968000); -positions[525] = Vec3(1.154000,1.702000,2.925000); -positions[526] = Vec3(1.420000,1.581000,1.289000); -positions[527] = Vec3(1.383000,0.041000,0.932000); -positions[528] = Vec3(1.727000,0.140000,1.725000); -positions[529] = Vec3(0.711000,1.215000,2.004000); -positions[530] = Vec3(1.061000,1.067000,1.366000); -positions[531] = Vec3(0.377000,0.597000,1.224000); -positions[532] = Vec3(0.274000,0.719000,1.842000); -positions[533] = Vec3(0.840000,1.658000,1.874000); -positions[534] = Vec3(0.877000,0.290000,0.311000); -positions[535] = Vec3(2.130000,1.153000,1.196000); -positions[536] = Vec3(1.028000,1.379000,0.747000); -positions[537] = Vec3(1.107000,2.450000,2.079000); -positions[538] = Vec3(1.419000,1.333000,0.585000); -positions[539] = Vec3(0.430000,1.305000,1.369000); -positions[540] = Vec3(0.775000,1.363000,1.596000); -positions[541] = Vec3(1.522000,2.009000,0.736000); -positions[542] = Vec3(0.857000,1.722000,0.696000); -positions[543] = Vec3(0.722000,2.831000,1.478000); -positions[544] = Vec3(0.411000,1.673000,0.681000); -positions[545] = Vec3(1.511000,0.456000,0.597000); -positions[546] = Vec3(2.684000,0.820000,2.996000); -positions[547] = Vec3(1.593000,1.713000,2.369000); -positions[548] = Vec3(1.113000,0.803000,1.958000); -positions[549] = Vec3(1.267000,1.095000,0.254000); -positions[550] = Vec3(2.120000,0.540000,2.477000); -positions[551] = Vec3(0.566000,1.409000,2.588000); -positions[552] = Vec3(0.261000,0.872000,2.546000); -positions[553] = Vec3(1.878000,1.446000,2.680000); -positions[554] = Vec3(0.878000,1.606000,2.658000); -positions[555] = Vec3(1.564000,0.749000,1.786000); -positions[556] = Vec3(1.412000,1.942000,2.625000); -positions[557] = Vec3(1.660000,1.114000,2.710000); -positions[558] = Vec3(1.118000,0.813000,2.424000); -positions[559] = Vec3(1.482000,0.893000,2.434000); -positions[560] = Vec3(1.093000,1.129000,1.740000); -positions[561] = Vec3(2.163000,0.849000,2.709000); -positions[562] = Vec3(1.201000,1.429000,1.957000); -positions[563] = Vec3(0.235000,2.258000,2.002000); -positions[564] = Vec3(0.413000,1.444000,0.314000); -positions[565] = Vec3(0.164000,0.450000,2.408000); -positions[566] = Vec3(1.551000,0.851000,0.033000); -positions[567] = Vec3(0.659000,0.228000,2.807000); -positions[568] = Vec3(0.741000,0.131000,2.124000); -positions[569] = Vec3(0.455000,0.567000,2.682000); -positions[570] = Vec3(0.729000,0.971000,2.408000); -positions[571] = Vec3(1.487000,2.820000,0.162000); -positions[572] = Vec3(1.855000,0.700000,2.858000); -positions[573] = Vec3(0.305000,1.074000,1.926000); -positions[574] = Vec3(1.300000,0.153000,1.747000); -positions[575] = Vec3(1.272000,1.249000,2.568000); -positions[576] = Vec3(0.431000,0.743000,2.238000); -positions[577] = Vec3(0.493000,0.240000,0.184000); -positions[578] = Vec3(1.734000,0.506000,2.317000); -positions[579] = Vec3(0.874000,0.631000,2.692000); -positions[580] = Vec3(0.473000,2.790000,2.161000); -positions[581] = Vec3(1.310000,0.571000,2.759000); -positions[582] = Vec3(0.677000,0.798000,1.916000); -positions[583] = Vec3(0.944000,0.442000,1.858000); -positions[584] = Vec3(3.006000,2.098000,2.976000); -positions[585] = Vec3(0.864000,0.592000,2.231000); -positions[586] = Vec3(1.366000,0.611000,2.147000); -positions[587] = Vec3(2.871000,1.217000,2.880000); -positions[588] = Vec3(1.674000,2.664000,2.336000); -positions[589] = Vec3(1.757000,0.879000,2.101000); -positions[590] = Vec3(1.293000,2.939000,2.457000); -positions[591] = Vec3(1.108000,1.131000,2.206000); -positions[592] = Vec3(1.207000,1.658000,2.498000); -positions[593] = Vec3(0.850000,1.373000,2.312000); -positions[594] = Vec3(1.413000,1.060000,1.939000); -positions[595] = Vec3(1.138000,0.140000,2.102000); -positions[596] = Vec3(0.752000,1.307000,1.190000); -positions[597] = Vec3(1.254000,0.942000,2.790000); -positions[598] = Vec3(1.544000,1.614000,2.800000); -positions[599] = Vec3(2.128000,0.302000,2.833000); -positions[600] = Vec3(0.300000,1.744000,0.027000); -positions[601] = Vec3(1.878000,2.986000,2.060000); -positions[602] = Vec3(1.528000,0.233000,2.045000); -positions[603] = Vec3(1.146000,1.817000,2.067000); -positions[604] = Vec3(1.037000,2.746000,0.813000); -positions[605] = Vec3(0.524000,0.610000,1.566000); -positions[606] = Vec3(0.945000,2.964000,0.503000); -positions[607] = Vec3(1.788000,2.565000,0.965000); -positions[608] = Vec3(0.471000,2.510000,0.491000); -positions[609] = Vec3(0.512000,2.043000,1.371000); -positions[610] = Vec3(2.316000,2.423000,1.494000); -positions[611] = Vec3(1.575000,2.394000,2.953000); -positions[612] = Vec3(2.845000,2.869000,0.985000); -positions[613] = Vec3(1.016000,2.335000,1.003000); -positions[614] = Vec3(0.998000,2.830000,1.879000); -positions[615] = Vec3(0.624000,2.508000,0.075000); -positions[616] = Vec3(1.362000,2.808000,2.069000); -positions[617] = Vec3(1.747000,0.068000,0.810000); -positions[618] = Vec3(1.768000,2.355000,0.661000); -positions[619] = Vec3(1.535000,2.410000,2.085000); -positions[620] = Vec3(0.844000,2.004000,1.646000); -positions[621] = Vec3(1.124000,0.280000,0.649000); -positions[622] = Vec3(0.689000,2.170000,0.648000); -positions[623] = Vec3(0.849000,2.666000,1.175000); -positions[624] = Vec3(2.975000,1.963000,1.308000); -positions[625] = Vec3(1.074000,2.082000,0.714000); -positions[626] = Vec3(1.284000,2.651000,1.110000); -positions[627] = Vec3(1.669000,0.205000,0.180000); -positions[628] = Vec3(1.716000,0.047000,1.253000); -positions[629] = Vec3(0.501000,2.241000,1.043000); -positions[630] = Vec3(1.038000,1.833000,0.305000); -positions[631] = Vec3(0.646000,2.431000,1.424000); -positions[632] = Vec3(1.383000,2.059000,2.230000); -positions[633] = Vec3(0.370000,2.566000,1.192000); -positions[634] = Vec3(1.355000,2.006000,0.120000); -positions[635] = Vec3(2.113000,0.075000,0.589000); -positions[636] = Vec3(1.850000,0.448000,1.890000); -positions[637] = Vec3(1.215000,2.704000,0.405000); -positions[638] = Vec3(0.575000,2.997000,1.798000); -positions[639] = Vec3(0.967000,2.586000,2.603000); -positions[640] = Vec3(0.276000,1.669000,1.430000); -positions[641] = Vec3(1.483000,2.284000,1.128000); -positions[642] = Vec3(0.983000,3.003000,1.099000); -positions[643] = Vec3(0.539000,2.222000,1.720000); -positions[644] = Vec3(0.648000,2.826000,2.751000); -positions[645] = Vec3(0.803000,1.994000,0.993000); -positions[646] = Vec3(0.451000,0.216000,1.438000); -positions[647] = Vec3(1.604000,2.512000,0.334000); -positions[648] = Vec3(1.980000,2.022000,0.588000); -positions[649] = Vec3(1.843000,2.834000,1.544000); -positions[650] = Vec3(1.835000,3.005000,2.858000); -positions[651] = Vec3(0.679000,2.499000,0.838000); -positions[652] = Vec3(0.012000,2.637000,1.524000); -positions[653] = Vec3(0.314000,2.065000,0.602000); -positions[654] = Vec3(1.157000,0.004000,0.173000); -positions[655] = Vec3(0.736000,1.705000,1.382000); -positions[656] = Vec3(1.511000,2.736000,0.690000); -positions[657] = Vec3(1.330000,2.541000,1.735000); -positions[658] = Vec3(0.744000,0.170000,0.785000); -positions[659] = Vec3(2.593000,2.794000,0.703000); -positions[660] = Vec3(0.275000,1.872000,1.043000); -positions[661] = Vec3(1.624000,2.608000,1.341000); -positions[662] = Vec3(1.382000,0.122000,2.855000); -positions[663] = Vec3(1.326000,2.434000,0.783000); -positions[664] = Vec3(0.117000,0.116000,1.254000); -positions[665] = Vec3(1.045000,2.970000,2.748000); -positions[666] = Vec3(1.341000,2.692000,2.799000); -positions[667] = Vec3(1.797000,2.586000,2.709000); -positions[668] = Vec3(0.890000,2.484000,1.716000); -positions[669] = Vec3(2.373000,2.558000,1.889000); -positions[670] = Vec3(1.566000,2.323000,2.574000); -positions[671] = Vec3(1.257000,2.280000,0.399000); -positions[672] = Vec3(0.679000,2.130000,2.434000); -positions[673] = Vec3(2.016000,2.334000,2.462000); -positions[674] = Vec3(1.077000,2.213000,2.416000); -positions[675] = Vec3(0.581000,1.950000,2.081000); -positions[676] = Vec3(0.805000,2.315000,2.810000); -positions[677] = Vec3(0.844000,1.787000,2.322000); -positions[678] = Vec3(0.980000,2.205000,0.129000); -positions[679] = Vec3(2.468000,0.603000,2.740000); -positions[680] = Vec3(2.366000,2.403000,2.299000); -positions[681] = Vec3(0.337000,2.487000,2.329000); -positions[682] = Vec3(2.007000,2.793000,2.452000); -positions[683] = Vec3(1.072000,2.571000,0.063000); -positions[684] = Vec3(1.217000,2.283000,2.806000); -positions[685] = Vec3(0.459000,2.477000,2.728000); -positions[686] = Vec3(0.958000,1.975000,2.710000); -positions[687] = Vec3(0.914000,2.111000,2.052000); -positions[688] = Vec3(0.768000,2.958000,0.075000); -positions[689] = Vec3(0.474000,1.805000,2.533000); -positions[690] = Vec3(1.313000,2.552000,2.395000); -positions[691] = Vec3(1.853000,2.014000,2.229000); -positions[692] = Vec3(2.405000,2.230000,2.658000); -positions[693] = Vec3(0.727000,1.781000,0.016000); -positions[694] = Vec3(0.974000,2.791000,2.271000); -positions[695] = Vec3(0.438000,0.096000,2.457000); -positions[696] = Vec3(0.652000,2.392000,2.064000); -positions[697] = Vec3(1.972000,2.209000,2.834000); -positions[698] = Vec3(0.333000,0.141000,2.088000); -positions[699] = Vec3(1.813000,1.952000,0.063000); -positions[700] = Vec3(0.166000,2.838000,1.877000); -positions[701] = Vec3(1.772000,0.487000,0.951000); -positions[702] = Vec3(1.924000,1.404000,1.434000); -positions[703] = Vec3(2.734000,0.348000,1.712000); -positions[704] = Vec3(2.874000,0.729000,1.811000); -positions[705] = Vec3(1.841000,0.877000,1.137000); -positions[706] = Vec3(2.327000,1.491000,1.768000); -positions[707] = Vec3(1.916000,1.483000,1.057000); -positions[708] = Vec3(2.783000,0.850000,0.745000); -positions[709] = Vec3(1.829000,1.526000,0.085000); -positions[710] = Vec3(2.426000,1.082000,0.652000); -positions[711] = Vec3(1.645000,1.241000,1.217000); -positions[712] = Vec3(2.286000,0.725000,0.084000); -positions[713] = Vec3(2.755000,0.691000,1.421000); -positions[714] = Vec3(2.651000,0.591000,1.023000); -positions[715] = Vec3(2.040000,0.863000,0.442000); -positions[716] = Vec3(0.035000,0.109000,2.497000); -positions[717] = Vec3(0.127000,1.410000,0.572000); -positions[718] = Vec3(2.174000,0.357000,0.307000); -positions[719] = Vec3(2.705000,1.508000,0.758000); -positions[720] = Vec3(2.223000,1.407000,2.913000); -positions[721] = Vec3(2.528000,1.722000,1.088000); -positions[722] = Vec3(2.860000,0.345000,0.198000); -positions[723] = Vec3(2.580000,1.789000,1.479000); -positions[724] = Vec3(2.779000,0.295000,1.295000); -positions[725] = Vec3(0.097000,0.434000,2.826000); -positions[726] = Vec3(2.952000,1.654000,1.091000); -positions[727] = Vec3(0.119000,1.878000,0.343000); -positions[728] = Vec3(1.718000,1.173000,0.327000); -positions[729] = Vec3(2.833000,0.016000,0.527000); -positions[730] = Vec3(2.085000,1.779000,2.888000); -positions[731] = Vec3(2.754000,2.952000,1.485000); -positions[732] = Vec3(2.826000,0.935000,1.162000); -positions[733] = Vec3(1.564000,1.585000,1.615000); -positions[734] = Vec3(2.132000,0.645000,1.093000); -positions[735] = Vec3(2.294000,1.490000,1.350000); -positions[736] = Vec3(0.081000,0.490000,1.479000); -positions[737] = Vec3(2.118000,1.165000,1.642000); -positions[738] = Vec3(2.141000,0.121000,1.390000); -positions[739] = Vec3(2.385000,0.389000,1.196000); -positions[740] = Vec3(0.049000,0.166000,0.817000); -positions[741] = Vec3(1.993000,0.806000,1.814000); -positions[742] = Vec3(0.006000,1.450000,0.171000); -positions[743] = Vec3(2.297000,0.428000,0.764000); -positions[744] = Vec3(2.851000,0.469000,2.114000); -positions[745] = Vec3(1.814000,1.957000,0.945000); -positions[746] = Vec3(0.386000,0.327000,0.902000); -positions[747] = Vec3(2.452000,1.070000,1.807000); -positions[748] = Vec3(2.309000,1.537000,2.159000); -positions[749] = Vec3(2.712000,1.497000,2.007000); -positions[750] = Vec3(1.727000,0.924000,1.503000); -positions[751] = Vec3(0.861000,0.801000,0.344000); -positions[752] = Vec3(1.740000,1.245000,0.819000); -positions[753] = Vec3(0.117000,0.042000,0.197000); -positions[754] = Vec3(2.557000,0.996000,0.317000); -positions[755] = Vec3(2.228000,1.588000,2.548000); -positions[756] = Vec3(2.849000,1.557000,2.708000); -positions[757] = Vec3(0.152000,1.107000,0.219000); -positions[758] = Vec3(2.460000,1.318000,1.002000); -positions[759] = Vec3(2.405000,1.436000,0.528000); -positions[760] = Vec3(2.135000,1.179000,2.046000); -positions[761] = Vec3(1.726000,0.588000,0.286000); -positions[762] = Vec3(2.831000,1.053000,1.538000); -positions[763] = Vec3(1.932000,1.556000,1.833000); -positions[764] = Vec3(2.423000,0.900000,1.064000); -positions[765] = Vec3(3.001000,1.807000,0.709000); -positions[766] = Vec3(0.578000,1.095000,0.223000); -positions[767] = Vec3(2.215000,1.160000,0.252000); -positions[768] = Vec3(2.050000,0.921000,0.835000); -positions[769] = Vec3(2.080000,1.682000,0.738000); -positions[770] = Vec3(2.851000,1.753000,0.027000); -positions[771] = Vec3(0.203000,0.509000,0.202000); -positions[772] = Vec3(1.967000,1.018000,0.018000); -positions[773] = Vec3(1.869000,0.878000,2.472000); -positions[774] = Vec3(1.917000,0.228000,2.507000); -positions[775] = Vec3(0.316000,0.795000,2.991000); -positions[776] = Vec3(2.175000,1.229000,2.472000); -positions[777] = Vec3(2.405000,1.062000,2.931000); -positions[778] = Vec3(2.501000,0.511000,2.369000); -positions[779] = Vec3(2.641000,0.819000,2.141000); -positions[780] = Vec3(0.649000,1.384000,3.006000); -positions[781] = Vec3(1.012000,0.329000,2.963000); -positions[782] = Vec3(2.755000,0.350000,2.718000); -positions[783] = Vec3(2.315000,0.153000,2.454000); -positions[784] = Vec3(2.583000,1.696000,2.389000); -positions[785] = Vec3(0.439000,2.593000,1.776000); -positions[786] = Vec3(2.630000,1.390000,0.116000); -positions[787] = Vec3(2.854000,0.669000,2.478000); -positions[788] = Vec3(2.551000,1.342000,2.621000); -positions[789] = Vec3(2.533000,2.734000,2.987000); -positions[790] = Vec3(2.772000,2.446000,2.875000); -positions[791] = Vec3(2.817000,1.051000,2.498000); -positions[792] = Vec3(2.688000,1.404000,1.621000); -positions[793] = Vec3(0.083000,2.737000,2.775000); -positions[794] = Vec3(2.514000,0.322000,2.041000); -positions[795] = Vec3(2.470000,0.900000,2.504000); -positions[796] = Vec3(2.790000,0.444000,0.624000); -positions[797] = Vec3(0.040000,0.840000,2.202000); -positions[798] = Vec3(0.530000,1.067000,2.764000); -positions[799] = Vec3(0.191000,1.385000,2.541000); -positions[800] = Vec3(2.465000,0.363000,0.051000); -positions[801] = Vec3(1.850000,1.902000,2.592000); -positions[802] = Vec3(1.432000,0.306000,2.449000); -positions[803] = Vec3(2.259000,0.489000,1.753000); -positions[804] = Vec3(2.803000,1.118000,1.956000); -positions[805] = Vec3(2.426000,0.147000,1.636000); -positions[806] = Vec3(2.880000,1.846000,2.133000); -positions[807] = Vec3(2.862000,2.110000,1.867000); -positions[808] = Vec3(0.424000,1.184000,2.299000); -positions[809] = Vec3(2.518000,1.218000,2.228000); -positions[810] = Vec3(2.153000,0.834000,1.468000); -positions[811] = Vec3(0.105000,1.397000,2.088000); -positions[812] = Vec3(2.579000,0.601000,0.316000); -positions[813] = Vec3(2.594000,2.106000,2.968000); -positions[814] = Vec3(0.448000,1.435000,1.783000); -positions[815] = Vec3(2.125000,0.299000,2.132000); -positions[816] = Vec3(2.849000,1.402000,2.356000); -positions[817] = Vec3(2.956000,0.091000,2.078000); -positions[818] = Vec3(0.156000,1.696000,2.357000); -positions[819] = Vec3(1.566000,2.211000,1.557000); -positions[820] = Vec3(2.047000,0.194000,0.985000); -positions[821] = Vec3(1.947000,2.680000,0.488000); -positions[822] = Vec3(2.343000,2.796000,1.447000); -positions[823] = Vec3(2.006000,2.332000,0.265000); -positions[824] = Vec3(2.396000,1.834000,0.546000); -positions[825] = Vec3(2.538000,2.059000,2.207000); -positions[826] = Vec3(0.110000,2.360000,0.447000); -positions[827] = Vec3(2.198000,2.448000,1.136000); -positions[828] = Vec3(2.420000,2.121000,1.271000); -positions[829] = Vec3(0.422000,2.192000,0.260000); -positions[830] = Vec3(2.145000,2.767000,2.839000); -positions[831] = Vec3(2.434000,2.398000,0.421000); -positions[832] = Vec3(2.489000,2.175000,1.718000); -positions[833] = Vec3(2.870000,2.527000,0.814000); -positions[834] = Vec3(2.741000,2.016000,0.337000); -positions[835] = Vec3(1.997000,2.574000,2.107000); -positions[836] = Vec3(0.002000,2.128000,0.932000); -positions[837] = Vec3(2.787000,2.375000,0.234000); -positions[838] = Vec3(2.235000,1.852000,1.620000); -positions[839] = Vec3(2.782000,1.642000,0.422000); -positions[840] = Vec3(2.915000,1.760000,1.699000); -positions[841] = Vec3(2.047000,2.178000,1.549000); -positions[842] = Vec3(1.808000,1.878000,1.556000); -positions[843] = Vec3(2.224000,2.043000,0.913000); -positions[844] = Vec3(2.619000,2.611000,1.237000); -positions[845] = Vec3(2.916000,2.726000,0.168000); -positions[846] = Vec3(2.021000,2.833000,1.176000); -positions[847] = Vec3(2.967000,2.308000,2.258000); -positions[848] = Vec3(2.778000,2.270000,1.477000); -positions[849] = Vec3(2.121000,1.834000,2.002000); -positions[850] = Vec3(2.097000,2.752000,0.808000); -positions[851] = Vec3(1.897000,0.566000,1.501000); -positions[852] = Vec3(0.359000,2.802000,0.036000); -positions[853] = Vec3(2.966000,2.454000,1.186000); -positions[854] = Vec3(2.461000,2.964000,1.132000); -positions[855] = Vec3(2.093000,1.821000,1.243000); -positions[856] = Vec3(1.706000,2.659000,1.841000); -positions[857] = Vec3(2.074000,1.709000,0.342000); -positions[858] = Vec3(2.137000,2.894000,1.813000); -positions[859] = Vec3(0.223000,2.293000,1.417000); -positions[860] = Vec3(2.637000,0.007000,0.197000); -positions[861] = Vec3(1.416000,0.050000,0.483000); -positions[862] = Vec3(1.845000,2.250000,1.251000); -positions[863] = Vec3(2.906000,0.034000,2.896000); -positions[864] = Vec3(2.481000,0.204000,0.474000); -positions[865] = Vec3(2.234000,2.051000,0.158000); -positions[866] = Vec3(0.185000,2.453000,0.055000); -positions[867] = Vec3(2.509000,0.048000,2.786000); -positions[868] = Vec3(2.202000,2.206000,2.027000); -positions[869] = Vec3(0.061000,2.367000,2.656000); -positions[870] = Vec3(3.003000,2.755000,2.241000); -positions[871] = Vec3(0.297000,2.131000,2.463000); -positions[872] = Vec3(1.553000,0.429000,1.573000); -positions[873] = Vec3(2.506000,1.832000,1.911000); -positions[874] = Vec3(2.472000,1.814000,2.759000); -positions[875] = Vec3(1.922000,1.563000,2.278000); -positions[876] = Vec3(2.623000,2.666000,2.169000); -positions[877] = Vec3(0.120000,1.834000,2.723000); -positions[878] = Vec3(0.294000,0.103000,2.826000); -positions[879] = Vec3(2.364000,2.821000,0.417000); -positions[880] = Vec3(2.446000,1.734000,0.153000); -positions[881] = Vec3(2.777000,2.037000,2.565000); -positions[882] = Vec3(2.837000,2.477000,1.924000); -positions[883] = Vec3(2.221000,1.961000,2.443000); -positions[884] = Vec3(2.284000,2.895000,2.157000); -positions[885] = Vec3(2.728000,2.880000,1.861000); -positions[886] = Vec3(0.454000,2.080000,2.868000); -positions[887] = Vec3(2.430000,2.790000,2.524000); -positions[888] = Vec3(1.808000,2.213000,1.899000); -positions[889] = Vec3(2.666000,0.053000,2.309000); -positions[890] = Vec3(2.290000,2.408000,2.995000); -positions[891] = Vec3(2.646000,2.592000,1.625000); -positions[892] = Vec3(2.750000,2.508000,2.489000); -positions[893] = Vec3(0.211000,1.753000,1.939000); diff --git a/platforms/opencl/CMakeLists.txt b/platforms/opencl/CMakeLists.txt index 2386334fe68f3f143fd41615eb3c21566f1563ab..4b8e4d1895bc5b1a13077443635706a2c2302b4c 100644 --- a/platforms/opencl/CMakeLists.txt +++ b/platforms/opencl/CMakeLists.txt @@ -13,9 +13,9 @@ #---------------------------------------------------- set(OPENMM_BUILD_OPENCL_TESTS TRUE CACHE BOOL "Whether to build OpenCL test cases") -if(OPENMM_BUILD_OPENCL_TESTS) +if(BUILD_TESTING AND OPENMM_BUILD_OPENCL_TESTS) SUBDIRS (tests) -endif(OPENMM_BUILD_OPENCL_TESTS) +endif(BUILD_TESTING AND OPENMM_BUILD_OPENCL_TESTS) # The source is organized into subdirectories, but we handle them all from # this CMakeLists file rather than letting CMake visit them as SUBDIRS. diff --git a/platforms/opencl/include/OpenCLExpressionUtilities.h b/platforms/opencl/include/OpenCLExpressionUtilities.h index a08e3f7dea031764d02030ca4d496d99b74a8a96..834e1f7dee1919710e71c378a918f37604b143f6 100644 --- a/platforms/opencl/include/OpenCLExpressionUtilities.h +++ b/platforms/opencl/include/OpenCLExpressionUtilities.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2014 Stanford University and the Authors. * + * Portions copyright (c) 2009-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -89,6 +89,10 @@ public: * @param function the function for which to get a placeholder */ Lepton::CustomFunction* getFunctionPlaceholder(const TabulatedFunction& function); + /** + * Get a Lepton::CustomFunction that can be used to represent the periodicdistance() function when parsing expressions. + */ + Lepton::CustomFunction* getPeriodicDistancePlaceholder(); private: class FunctionPlaceholder : public Lepton::CustomFunction { public: @@ -114,13 +118,13 @@ private: const std::vector& functions, const std::vector >& functionNames, const std::string& prefix, const std::vector >& functionParams, const std::vector& allExpressions, const std::string& tempType); std::string getTempName(const Lepton::ExpressionTreeNode& node, const std::vector >& temps); - void findRelatedTabulatedFunctions(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, + void findRelatedCustomFunctions(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, std::vector& nodes); void findRelatedPowers(const Lepton::ExpressionTreeNode& node, const Lepton::ExpressionTreeNode& searchNode, std::map& powers); std::vector > computeFunctionParameters(const std::vector& functions); OpenCLContext& context; - FunctionPlaceholder fp1, fp2, fp3; + FunctionPlaceholder fp1, fp2, fp3, periodicDistance; }; } // namespace OpenMM diff --git a/platforms/opencl/include/OpenCLKernels.h b/platforms/opencl/include/OpenCLKernels.h index 04c3f51946570c37701b2981ebc25f1972bcc2b1..206065395e130a01bd9e2ec2b819808e18a9b508 100644 --- a/platforms/opencl/include/OpenCLKernels.h +++ b/platforms/opencl/include/OpenCLKernels.h @@ -598,6 +598,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class SortTrait : public OpenCLSort::SortTrait { int getDataSize() const {return 8;} @@ -647,7 +656,9 @@ private: std::map pmeDefines; std::vector > exceptionAtoms; double ewaldSelfEnergy, dispersionCoefficient, alpha; + int gridSizeX, gridSizeY, gridSizeZ; bool hasCoulomb, hasLJ, usePmeQueue; + NonbondedMethod nonbondedMethod; static const int PmeOrder = 5; }; @@ -904,6 +915,57 @@ private: cl::Kernel donorKernel, acceptorKernel; }; +/** + * This kernel is invoked by CustomCentroidBondForce to calculate the forces acting on the system. + */ +class OpenCLCalcCustomCentroidBondForceKernel : public CalcCustomCentroidBondForceKernel { +public: + OpenCLCalcCustomCentroidBondForceKernel(std::string name, const Platform& platform, OpenCLContext& cl, const System& system) : CalcCustomCentroidBondForceKernel(name, platform), + cl(cl), params(NULL), globals(NULL), groupParticles(NULL), groupWeights(NULL), groupOffsets(NULL), groupForces(NULL), bondGroups(NULL), centerPositions(NULL), system(system) { + } + ~OpenCLCalcCustomCentroidBondForceKernel(); + /** + * Initialize the kernel. + * + * @param system the System this kernel will be applied to + * @param force the CustomCentroidBondForce this kernel will be used for + */ + void initialize(const System& system, const CustomCentroidBondForce& force); + /** + * Execute the kernel to calculate the forces and/or energy. + * + * @param context the context in which to execute this kernel + * @param includeForces true if forces should be calculated + * @param includeEnergy true if the energy should be calculated + * @return the potential energy due to the force + */ + double execute(ContextImpl& context, bool includeForces, bool includeEnergy); + /** + * Copy changed parameters over to a context. + * + * @param context the context to copy parameters to + * @param force the CustomCentroidBondForce to copy the parameters from + */ + void copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force); + +private: + int numGroups, numBonds; + OpenCLContext& cl; + OpenCLParameterSet* params; + OpenCLArray* globals; + OpenCLArray* groupParticles; + OpenCLArray* groupWeights; + OpenCLArray* groupOffsets; + OpenCLArray* groupForces; + OpenCLArray* bondGroups; + OpenCLArray* centerPositions; + std::vector globalParamNames; + std::vector globalParamValues; + std::vector tabulatedFunctions; + cl::Kernel computeCentersKernel, groupForcesKernel, applyForcesKernel; + const System& system; +}; + /** * This kernel is invoked by CustomCompoundBondForce to calculate the forces acting on the system. */ diff --git a/platforms/opencl/include/OpenCLNonbondedUtilities.h b/platforms/opencl/include/OpenCLNonbondedUtilities.h index 820470838903860a1395095f4dd5d07b8ae69a97..1e138228bffbdd67da0b834b108ce54f04cd87ae 100644 --- a/platforms/opencl/include/OpenCLNonbondedUtilities.h +++ b/platforms/opencl/include/OpenCLNonbondedUtilities.h @@ -150,12 +150,18 @@ public: void prepareInteractions(int forceGroups); /** * Compute the nonbonded interactions. + * + * @param forceGroups the flags specifying which force groups to include + * @param includeForces whether to compute forces + * @param includeEnergy whether to compute the potential energy */ - void computeInteractions(int forceGroups); + void computeInteractions(int forceGroups, bool includeForces, bool includeEnergy); /** * Check to see if the neighbor list arrays are large enough, and make them bigger if necessary. + * + * @return true if the neighbor list needed to be enlarged. */ - void updateNeighborListSize(); + bool updateNeighborListSize(); /** * Get the array containing the center of each atom block. */ @@ -245,8 +251,10 @@ public: * @param useExclusions specifies whether exclusions are applied to this interaction * @param isSymmetric specifies whether the interaction is symmetric * @param groups the set of force groups this kernel is for + * @param includeForces whether this kernel should compute forces + * @param includeEnergy whether this kernel should compute potential energy */ - cl::Kernel createInteractionKernel(const std::string& source, const std::vector& params, const std::vector& arguments, bool useExclusions, bool isSymmetric, int groups); + cl::Kernel createInteractionKernel(const std::string& source, const std::vector& params, const std::vector& arguments, bool useExclusions, bool isSymmetric, int groups, bool includeForces, bool includeEnergy); /** * Create the set of kernels that will be needed for a particular combination of force groups. * @@ -292,7 +300,8 @@ class OpenCLNonbondedUtilities::KernelSet { public: bool hasForces; double cutoffDistance; - cl::Kernel forceKernel; + std::string source; + cl::Kernel forceKernel, energyKernel, forceEnergyKernel; cl::Kernel findBlockBoundsKernel; cl::Kernel sortBoxDataKernel; cl::Kernel findInteractingBlocksKernel; diff --git a/platforms/opencl/include/OpenCLParallelKernels.h b/platforms/opencl/include/OpenCLParallelKernels.h index b1de99942cc7b861ff98ea2e978b0215bf0eaabb..ba5b0bb2e9ccbaa7c2b9ef4a09ac977c895ec01a 100644 --- a/platforms/opencl/include/OpenCLParallelKernels.h +++ b/platforms/opencl/include/OpenCLParallelKernels.h @@ -429,6 +429,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class Task; OpenCLPlatform::PlatformData& data; diff --git a/platforms/opencl/sharedTarget/CMakeLists.txt b/platforms/opencl/sharedTarget/CMakeLists.txt index ee719f40970887f3352da872b532a25264d8afbe..344801c59f1b7aba9333b84dbe2d6b2f91fc3e9e 100644 --- a/platforms/opencl/sharedTarget/CMakeLists.txt +++ b/platforms/opencl/sharedTarget/CMakeLists.txt @@ -14,6 +14,6 @@ SET_SOURCE_FILES_PROPERTIES(${CL_KERNELS_CPP} ${CL_KERNELS_H} PROPERTIES GENERAT ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${API_ABS_INCLUDE_FILES}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME} ${OPENCL_LIBRARIES} ${PTHREADS_LIB}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_OPENCL_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_OPENCL_BUILDING_SHARED_LIBRARY") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) diff --git a/platforms/opencl/src/OpenCLBondedUtilities.cpp b/platforms/opencl/src/OpenCLBondedUtilities.cpp index 59be389a981d2b05b54cbd295c5a4fd14781bac3..dca6da067a6e987a1998f6e7f9e08143f0f80aaa 100644 --- a/platforms/opencl/src/OpenCLBondedUtilities.cpp +++ b/platforms/opencl/src/OpenCLBondedUtilities.cpp @@ -181,7 +181,7 @@ void OpenCLBondedUtilities::initialize(const System& system) { for (int i = 0; i < (int) prefixCode.size(); i++) s<(index++, context.getForceBuffers().getDeviceBuffer()); kernel.setArg(index++, context.getEnergyBuffer().getDeviceBuffer()); kernel.setArg(index++, context.getPosq().getDeviceBuffer()); - index++; + index += 6; for (int j = 0; j < (int) forceSets[i].size(); j++) { kernel.setArg(index++, atomIndices[forceSets[i][j]]->getDeviceBuffer()); kernel.setArg(index++, bufferIndices[forceSets[i][j]]->getDeviceBuffer()); @@ -277,7 +277,22 @@ void OpenCLBondedUtilities::computeInteractions(int groups) { } } for (int i = 0; i < (int) kernels.size(); i++) { - kernels[i].setArg(3, groups); + cl::Kernel& kernel = kernels[i]; + kernel.setArg(3, groups); + if (context.getUseDoublePrecision()) { + kernel.setArg(4, context.getPeriodicBoxSizeDouble()); + kernel.setArg(5, context.getInvPeriodicBoxSizeDouble()); + kernel.setArg(6, context.getPeriodicBoxVecXDouble()); + kernel.setArg(7, context.getPeriodicBoxVecYDouble()); + kernel.setArg(8, context.getPeriodicBoxVecZDouble()); + } + else { + kernel.setArg(4, context.getPeriodicBoxSize()); + kernel.setArg(5, context.getInvPeriodicBoxSize()); + kernel.setArg(6, context.getPeriodicBoxVecX()); + kernel.setArg(7, context.getPeriodicBoxVecY()); + kernel.setArg(8, context.getPeriodicBoxVecZ()); + } context.executeKernel(kernels[i], maxBonds); } } diff --git a/platforms/opencl/src/OpenCLContext.cpp b/platforms/opencl/src/OpenCLContext.cpp index 6a658c163881042007090e1c8f822d769fcf5d39..28b090577210ad14ffff851636543f46aced135f 100644 --- a/platforms/opencl/src/OpenCLContext.cpp +++ b/platforms/opencl/src/OpenCLContext.cpp @@ -89,23 +89,27 @@ OpenCLContext::OpenCLContext(const System& system, int platformIndex, int device contextIndex = platformData.contexts.size(); std::vector platforms; cl::Platform::get(&platforms); + if (platformIndex < -1 || platformIndex >= (int) platforms.size()) + throw OpenMMException("Illegal value for OpenCLPlatformIndex: "+intToString(platformIndex)); const int minThreadBlockSize = 32; int bestSpeed = -1; int bestDevice = -1; int bestPlatform = -1; for (int j = 0; j < platforms.size(); j++) { - // if they supplied a valid platformIndex, we only look through that platform - if (j != platformIndex && platformIndex >= 0 && platformIndex < (int) platforms.size()) + // If they supplied a valid platformIndex, we only look through that platform + if (j != platformIndex && platformIndex != -1) continue; string platformVendor = platforms[j].getInfo(); vector devices; platforms[j].getDevices(CL_DEVICE_TYPE_ALL, &devices); + if (deviceIndex < -1 || deviceIndex >= (int) devices.size()) + throw OpenMMException("Illegal value for OpenCLDeviceIndex: "+intToString(deviceIndex)); for (int i = 0; i < (int) devices.size(); i++) { - // if they supplied a valid deviceIndex, we only look through that one - if (i != deviceIndex && deviceIndex >= 0 && deviceIndex < (int) devices.size()) + // If they supplied a valid deviceIndex, we only look through that one + if (i != deviceIndex && deviceIndex != -1) continue; if (platformVendor == "Apple" && (devices[i].getInfo() == CL_DEVICE_TYPE_CPU)) continue; // The CPU device on OS X won't work correctly. @@ -130,7 +134,7 @@ OpenCLContext::OpenCLContext(const System& system, int platformIndex, int device // This will be less than the wavefront width since it takes several // cycles to execute the full wavefront. // The SIMD instruction width is the VLIW instruction width (or 1 for scalar), - // this is the number of ALUs that can be executing per instruction per thread. + // this is the number of ALUs that can be executing per instruction per thread. devices[i].getInfo() * devices[i].getInfo() * devices[i].getInfo(); @@ -342,9 +346,9 @@ OpenCLContext::OpenCLContext(const System& system, int platformIndex, int device compilationDefines["EXP"] = "exp"; compilationDefines["LOG"] = "log"; } - + // Set defines for applying periodic boundary conditions. - + Vec3 boxVectors[3]; system.getDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); boxIsTriclinic = (boxVectors[0][1] != 0.0 || boxVectors[0][2] != 0.0 || @@ -392,11 +396,11 @@ OpenCLContext::OpenCLContext(const System& system, int platformIndex, int device } // Create the work thread used for parallelization when running on multiple devices. - + thread = new WorkThread(); - + // Create utilities objects. - + bonded = new OpenCLBondedUtilities(*this); nonbonded = new OpenCLNonbondedUtilities(*this); integration = new OpenCLIntegrationUtilities(*this, system); @@ -456,7 +460,7 @@ void OpenCLContext::initialize() { else { forceBuffers = OpenCLArray::create(*this, paddedNumAtoms*numForceBuffers, "forceBuffers"); force = OpenCLArray::create(*this, &forceBuffers->getDeviceBuffer(), paddedNumAtoms, "force"); - energyBuffer = OpenCLArray::create(*this, max(numThreadBlocks*ThreadBlockSize, nonbonded->getNumEnergyBuffers()), "energyBuffer"); + energyBuffer = OpenCLArray::create(*this, max(numThreadBlocks*ThreadBlockSize, nonbonded->getNumEnergyBuffers()), "energyBuffer"); } if (supports64BitGlobalAtomics) { longForceBuffer = OpenCLArray::create(*this, 3*paddedNumAtoms, "longForceBuffer"); @@ -512,7 +516,7 @@ string OpenCLContext::replaceStrings(const string& input, const std::mapsecond); index += iter->second.size(); } @@ -797,7 +801,7 @@ private: void OpenCLContext::findMoleculeGroups() { // The first time this is called, we need to identify all the molecules in the system. - + if (moleculeGroups.size() == 0) { // Add a ForceInfo that makes sure reordering doesn't break virtual sites. @@ -879,7 +883,7 @@ void OpenCLContext::findMoleculeGroups() { if (!forces[k]->areParticlesIdentical(mol.atoms[i], mol2.atoms[i])) identical = false; } - + // See if the constraints are identical. for (int i = 0; i < (int) mol.constraints.size() && identical; i++) { @@ -960,11 +964,11 @@ void OpenCLContext::invalidateMolecules() { } if (valid) return; - + // The list of which molecules are identical is no longer valid. We need to restore the // atoms to their original order, rebuild the list of identical molecules, and sort them // again. - + vector newCellOffsets(numAtoms); if (useDoublePrecision) { vector oldPosq(paddedNumAtoms); @@ -1108,6 +1112,8 @@ void OpenCLContext::reorderAtomsImpl() { molPos[i].x *= invNumAtoms; molPos[i].y *= invNumAtoms; molPos[i].z *= invNumAtoms; + if (molPos[i].x != molPos[i].x) + throw OpenMMException("Particle coordinate is nan"); } if (nonbonded->getUsePeriodic()) { // Move each molecule position into the same box. diff --git a/platforms/opencl/src/OpenCLExpressionUtilities.cpp b/platforms/opencl/src/OpenCLExpressionUtilities.cpp index 9d737d94fadd6397baf68f50f9823d7e5412af6d..e6861aa46ebd71a7459e20fddfb83680dd436a90 100644 --- a/platforms/opencl/src/OpenCLExpressionUtilities.cpp +++ b/platforms/opencl/src/OpenCLExpressionUtilities.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2014 Stanford University and the Authors. * + * Portions copyright (c) 2009-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -33,7 +33,7 @@ using namespace OpenMM; using namespace Lepton; using namespace std; -OpenCLExpressionUtilities::OpenCLExpressionUtilities(OpenCLContext& context) : context(context), fp1(1), fp2(2), fp3(3) { +OpenCLExpressionUtilities::OpenCLExpressionUtilities(OpenCLContext& context) : context(context), fp1(1), fp2(2), fp3(3), periodicDistance(6) { } string OpenCLExpressionUtilities::createExpressions(const map& expressions, const map& variables, @@ -79,11 +79,6 @@ void OpenCLExpressionUtilities::processExpression(stringstream& out, const Expre throw OpenMMException("Unknown variable in expression: "+node.getOperation().getName()); case Operation::CUSTOM: { - int i; - for (i = 0; i < (int) functionNames.size() && functionNames[i].first != node.getOperation().getName(); i++) - ; - if (i == functionNames.size()) - throw OpenMMException("Unknown function in expression: "+node.getOperation().getName()); out << "0.0f;\n"; temps.push_back(make_pair(node, name)); hasRecordedNode = true; @@ -93,7 +88,7 @@ void OpenCLExpressionUtilities::processExpression(stringstream& out, const Expre vector nodes; for (int j = 0; j < (int) allExpressions.size(); j++) - findRelatedTabulatedFunctions(node, allExpressions[j].getRootNode(), nodes); + findRelatedCustomFunctions(node, allExpressions[j].getRootNode(), nodes); vector nodeNames; nodeNames.push_back(name); for (int j = 1; j < (int) nodes.size(); j++) { @@ -103,175 +98,223 @@ void OpenCLExpressionUtilities::processExpression(stringstream& out, const Expre temps.push_back(make_pair(*nodes[j], name2)); } out << "{\n"; - vector paramsFloat, paramsInt; - for (int j = 0; j < (int) functionParams[i].size(); j++) { - paramsFloat.push_back(context.doubleToString(functionParams[i][j])); - paramsInt.push_back(context.intToString((int) functionParams[i][j])); - } - if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "if (x >= " << paramsFloat[0] << " && x <= " << paramsFloat[1] << ") {\n"; - out << "x = (x - " << paramsFloat[0] << ")*" << paramsFloat[2] << ";\n"; - out << "int index = (int) (floor(x));\n"; - out << "index = min(index, " << paramsInt[3] << ");\n"; - out << "float4 coeff = " << functionNames[i].second << "[index];\n"; - out << "real b = x-index;\n"; - out << "real a = 1.0f-b;\n"; - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0) - out << nodeNames[j] << " = a*coeff.x+b*coeff.y+((a*a*a-a)*coeff.z+(b*b*b-b)*coeff.w)/(" << paramsFloat[2] << "*" << paramsFloat[2] << ");\n"; - else - out << nodeNames[j] << " = (coeff.y-coeff.x)*" << paramsFloat[2] << "+((1.0f-3.0f*a*a)*coeff.z+(3.0f*b*b-1.0f)*coeff.w)/" << paramsFloat[2] << ";\n"; + if (node.getOperation().getName() == "periodicdistance") { + // This is the periodicdistance() function. + + out << tempType << "3 periodicDistance_delta = (real3) ("; + for (int i = 0; i < 3; i++) { + if (i > 0) + out << ", "; + out << getTempName(node.getChildren()[i], temps) << "-" << getTempName(node.getChildren()[i+3], temps); } - out << "}\n"; - } - else if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; - out << "if (x >= " << paramsFloat[2] << " && x <= " << paramsFloat[3] << " && y >= " << paramsFloat[4] << " && y <= " << paramsFloat[5] << ") {\n"; - out << "x = (x - " << paramsFloat[2] << ")*" << paramsFloat[6] << ";\n"; - out << "y = (y - " << paramsFloat[4] << ")*" << paramsFloat[7] << ";\n"; - out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; - out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; - out << "int coeffIndex = 4*(s+" << paramsInt[0] << "*t);\n"; - out << "float4 c[4];\n"; - for (int j = 0; j < 4; j++) - out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; - out << "real da = x-s;\n"; - out << "real db = y-t;\n"; + out << ");\n"; + out << "APPLY_PERIODIC_TO_DELTA(periodicDistance_delta)\n"; + out << tempType << " periodicDistance_r2 = periodicDistance_delta.x*periodicDistance_delta.x + periodicDistance_delta.y*periodicDistance_delta.y + periodicDistance_delta.z*periodicDistance_delta.z;\n"; + out << tempType << " periodicDistance_rinv = RSQRT(periodicDistance_r2);\n"; for (int j = 0; j < nodes.size(); j++) { const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0) { - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[3].w*db + c[3].z)*db + c[3].y)*db + c[3].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[2].w*db + c[2].z)*db + c[2].y)*db + c[2].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[1].w*db + c[1].z)*db + c[1].y)*db + c[1].x;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[0].w*db + c[0].z)*db + c[0].y)*db + c[0].x;\n"; - } - else if (derivOrder[0] == 1 && derivOrder[1] == 0) { - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].w*da + 2.0f*c[2].w)*da + c[1].w;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].z*da + 2.0f*c[2].z)*da + c[1].z;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].y*da + 2.0f*c[2].y)*da + c[1].y;\n"; - out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].x*da + 2.0f*c[2].x)*da + c[1].x;\n"; - out << nodeNames[j] << " *= " << paramsFloat[6] << ";\n"; - } - else if (derivOrder[0] == 0 && derivOrder[1] == 1) { - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[3].w*db + 2.0f*c[3].z)*db + c[3].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[2].w*db + 2.0f*c[2].z)*db + c[2].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[1].w*db + 2.0f*c[1].z)*db + c[1].y;\n"; - out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[0].w*db + 2.0f*c[0].z)*db + c[0].y;\n"; - out << nodeNames[j] << " *= " << paramsFloat[7] << ";\n"; + int argIndex = -1; + for (int k = 0; k < 6; k++) { + if (derivOrder[k] > 0) { + if (derivOrder[k] > 1 || argIndex != -1) + throw OpenMMException("Unsupported derivative of periodicdistance"); // Should be impossible for this to happen. + argIndex = k; + } } - else - throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); + if (argIndex == -1) + out << nodeNames[j] << " = RECIP(periodicDistance_rinv);\n"; + else if (argIndex == 0) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.x*periodicDistance_rinv : 0);\n"; + else if (argIndex == 1) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.y*periodicDistance_rinv : 0);\n"; + else if (argIndex == 2) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? periodicDistance_delta.z*periodicDistance_rinv : 0);\n"; + else if (argIndex == 3) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.x*periodicDistance_rinv : 0);\n"; + else if (argIndex == 4) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.y*periodicDistance_rinv : 0);\n"; + else if (argIndex == 5) + out << nodeNames[j] << " = (periodicDistance_r2 > 0 ? -periodicDistance_delta.z*periodicDistance_rinv : 0);\n"; } - out << "}\n"; } - else if (dynamic_cast(functions[i]) != NULL) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; - out << "real z = " << getTempName(node.getChildren()[2], temps) << ";\n"; - out << "if (x >= " << paramsFloat[3] << " && x <= " << paramsFloat[4] << " && y >= " << paramsFloat[5] << " && y <= " << paramsFloat[6] << " && z >= " << paramsFloat[7] << " && z <= " << paramsFloat[8] << ") {\n"; - out << "x = (x - " << paramsFloat[3] << ")*" << paramsFloat[9] << ";\n"; - out << "y = (y - " << paramsFloat[5] << ")*" << paramsFloat[10] << ";\n"; - out << "z = (z - " << paramsFloat[7] << ")*" << paramsFloat[11] << ";\n"; - out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; - out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; - out << "int u = min((int) floor(z), " << paramsInt[2] << ");\n"; - out << "int coeffIndex = 16*(s+" << paramsInt[0] << "*(t+" << paramsInt[1] << "*u));\n"; - out << "float4 c[16];\n"; - for (int j = 0; j < 16; j++) - out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; - out << "real da = x-s;\n"; - out << "real db = y-t;\n"; - out << "real dc = z-u;\n"; - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "real value[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "value[" << m << "] = db*value[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; - } - out << nodeNames[j] << " = value[0] + dc*(value[1] + dc*(value[2] + dc*value[3]));\n"; - } - else if (derivOrder[0] == 1 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "real derivx[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "derivx[" << m << "] = db*derivx[" << m << "] + (3*c[" << base << "].w*da + 2*c[" << base << "].z)*da + c[" << base << "].y;\n"; - } - out << nodeNames[j] << " = derivx[0] + dc*(derivx[1] + dc*(derivx[2] + dc*derivx[3]));\n"; - out << nodeNames[j] << " *= " << paramsFloat[9] << ";\n"; + else { + // This is a tabulated function. + + int i; + for (i = 0; i < (int) functionNames.size() && functionNames[i].first != node.getOperation().getName(); i++) + ; + if (i == functionNames.size()) + throw OpenMMException("Unknown function in expression: "+node.getOperation().getName()); + vector paramsFloat, paramsInt; + for (int j = 0; j < (int) functionParams[i].size(); j++) { + paramsFloat.push_back(context.doubleToString(functionParams[i][j])); + paramsInt.push_back(context.intToString((int) functionParams[i][j])); + } + if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "if (x >= " << paramsFloat[0] << " && x <= " << paramsFloat[1] << ") {\n"; + out << "x = (x - " << paramsFloat[0] << ")*" << paramsFloat[2] << ";\n"; + out << "int index = (int) (floor(x));\n"; + out << "index = min(index, " << paramsInt[3] << ");\n"; + out << "float4 coeff = " << functionNames[i].second << "[index];\n"; + out << "real b = x-index;\n"; + out << "real a = 1.0f-b;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0) + out << nodeNames[j] << " = a*coeff.x+b*coeff.y+((a*a*a-a)*coeff.z+(b*b*b-b)*coeff.w)/(" << paramsFloat[2] << "*" << paramsFloat[2] << ");\n"; + else + out << nodeNames[j] << " = (coeff.y-coeff.x)*" << paramsFloat[2] << "+((1.0f-3.0f*a*a)*coeff.z+(3.0f*b*b-1.0f)*coeff.w)/" << paramsFloat[2] << ";\n"; } - else if (derivOrder[0] == 0 && derivOrder[1] == 1 && derivOrder[2] == 0) { - const string suffixes[] = {".x", ".y", ".z", ".w"}; - out << "real derivy[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = 4*m; - string suffix = suffixes[m]; - out << "derivy[" << m << "] = da*derivy[" << m << "] + (3*c[" << (base+3) << "]" << suffix << "*db + 2*c[" << (base+2) << "]" << suffix << ")*db + c[" << (base+1) << "]" << suffix << ";\n"; - } - out << nodeNames[j] << " = derivy[0] + dc*(derivy[1] + dc*(derivy[2] + dc*derivy[3]));\n"; - out << nodeNames[j] << " *= " << paramsFloat[10] << ";\n"; + out << "}\n"; + } + else if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; + out << "if (x >= " << paramsFloat[2] << " && x <= " << paramsFloat[3] << " && y >= " << paramsFloat[4] << " && y <= " << paramsFloat[5] << ") {\n"; + out << "x = (x - " << paramsFloat[2] << ")*" << paramsFloat[6] << ";\n"; + out << "y = (y - " << paramsFloat[4] << ")*" << paramsFloat[7] << ";\n"; + out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; + out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; + out << "int coeffIndex = 4*(s+" << paramsInt[0] << "*t);\n"; + out << "float4 c[4];\n"; + for (int j = 0; j < 4; j++) + out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; + out << "real da = x-s;\n"; + out << "real db = y-t;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0) { + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[3].w*db + c[3].z)*db + c[3].y)*db + c[3].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[2].w*db + c[2].z)*db + c[2].y)*db + c[2].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[1].w*db + c[1].z)*db + c[1].y)*db + c[1].x;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + ((c[0].w*db + c[0].z)*db + c[0].y)*db + c[0].x;\n"; + } + else if (derivOrder[0] == 1 && derivOrder[1] == 0) { + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].w*da + 2.0f*c[2].w)*da + c[1].w;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].z*da + 2.0f*c[2].z)*da + c[1].z;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].y*da + 2.0f*c[2].y)*da + c[1].y;\n"; + out << nodeNames[j] << " = db*" << nodeNames[j] << " + (3.0f*c[3].x*da + 2.0f*c[2].x)*da + c[1].x;\n"; + out << nodeNames[j] << " *= " << paramsFloat[6] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 1) { + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[3].w*db + 2.0f*c[3].z)*db + c[3].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[2].w*db + 2.0f*c[2].z)*db + c[2].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[1].w*db + 2.0f*c[1].z)*db + c[1].y;\n"; + out << nodeNames[j] << " = da*" << nodeNames[j] << " + (3.0f*c[0].w*db + 2.0f*c[0].z)*db + c[0].y;\n"; + out << nodeNames[j] << " *= " << paramsFloat[7] << ";\n"; + } + else + throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); } - else if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 1) { - out << "real derivz[4] = {0, 0, 0, 0};\n"; - for (int k = 3; k >= 0; k--) - for (int m = 0; m < 4; m++) { - int base = k + 4*m; - out << "derivz[" << m << "] = db*derivz[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; - } - out << nodeNames[j] << " = derivz[1] + dc*(2*derivz[2] + dc*3*derivz[3]);\n"; - out << nodeNames[j] << " *= " << paramsFloat[11] << ";\n"; + out << "}\n"; + } + else if (dynamic_cast(functions[i]) != NULL) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "real y = " << getTempName(node.getChildren()[1], temps) << ";\n"; + out << "real z = " << getTempName(node.getChildren()[2], temps) << ";\n"; + out << "if (x >= " << paramsFloat[3] << " && x <= " << paramsFloat[4] << " && y >= " << paramsFloat[5] << " && y <= " << paramsFloat[6] << " && z >= " << paramsFloat[7] << " && z <= " << paramsFloat[8] << ") {\n"; + out << "x = (x - " << paramsFloat[3] << ")*" << paramsFloat[9] << ";\n"; + out << "y = (y - " << paramsFloat[5] << ")*" << paramsFloat[10] << ";\n"; + out << "z = (z - " << paramsFloat[7] << ")*" << paramsFloat[11] << ";\n"; + out << "int s = min((int) floor(x), " << paramsInt[0] << ");\n"; + out << "int t = min((int) floor(y), " << paramsInt[1] << ");\n"; + out << "int u = min((int) floor(z), " << paramsInt[2] << ");\n"; + out << "int coeffIndex = 16*(s+" << paramsInt[0] << "*(t+" << paramsInt[1] << "*u));\n"; + out << "float4 c[16];\n"; + for (int j = 0; j < 16; j++) + out << "c[" << j << "] = " << functionNames[i].second << "[coeffIndex+" << j << "];\n"; + out << "real da = x-s;\n"; + out << "real db = y-t;\n"; + out << "real dc = z-u;\n"; + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "real value[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "value[" << m << "] = db*value[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; + } + out << nodeNames[j] << " = value[0] + dc*(value[1] + dc*(value[2] + dc*value[3]));\n"; + } + else if (derivOrder[0] == 1 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "real derivx[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "derivx[" << m << "] = db*derivx[" << m << "] + (3*c[" << base << "].w*da + 2*c[" << base << "].z)*da + c[" << base << "].y;\n"; + } + out << nodeNames[j] << " = derivx[0] + dc*(derivx[1] + dc*(derivx[2] + dc*derivx[3]));\n"; + out << nodeNames[j] << " *= " << paramsFloat[9] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 1 && derivOrder[2] == 0) { + const string suffixes[] = {".x", ".y", ".z", ".w"}; + out << "real derivy[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = 4*m; + string suffix = suffixes[m]; + out << "derivy[" << m << "] = da*derivy[" << m << "] + (3*c[" << (base+3) << "]" << suffix << "*db + 2*c[" << (base+2) << "]" << suffix << ")*db + c[" << (base+1) << "]" << suffix << ";\n"; + } + out << nodeNames[j] << " = derivy[0] + dc*(derivy[1] + dc*(derivy[2] + dc*derivy[3]));\n"; + out << nodeNames[j] << " *= " << paramsFloat[10] << ";\n"; + } + else if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 1) { + out << "real derivz[4] = {0, 0, 0, 0};\n"; + for (int k = 3; k >= 0; k--) + for (int m = 0; m < 4; m++) { + int base = k + 4*m; + out << "derivz[" << m << "] = db*derivz[" << m << "] + ((c[" << base << "].w*da + c[" << base << "].z)*da + c[" << base << "].y)*da + c[" << base << "].x;\n"; + } + out << nodeNames[j] << " = derivz[1] + dc*(2*derivz[2] + dc*3*derivz[3]);\n"; + out << nodeNames[j] << " *= " << paramsFloat[11] << ";\n"; + } + else + throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); } - else - throw OpenMMException("Unsupported derivative order for Continuous2DFunction"); + out << "}\n"; } - out << "}\n"; - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0) { - out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; - out << "if (x >= 0 && x < " << paramsInt[0] << ") {\n"; - out << "int index = (int) floor(x+0.5f);\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; - out << "}\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0) { + out << "real x = " << getTempName(node.getChildren()[0], temps) << ";\n"; + out << "if (x >= 0 && x < " << paramsInt[0] << ") {\n"; + out << "int index = (int) floor(x+0.5f);\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + out << "}\n"; + } } } - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0) { - out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; - out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; - out << "int xsize = " << paramsInt[0] << ";\n"; - out << "int ysize = " << paramsInt[1] << ";\n"; - out << "int index = x+y*xsize;\n"; - out << "if (index >= 0 && index < xsize*ysize)\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0) { + out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; + out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; + out << "int xsize = " << paramsInt[0] << ";\n"; + out << "int ysize = " << paramsInt[1] << ";\n"; + out << "int index = x+y*xsize;\n"; + out << "if (index >= 0 && index < xsize*ysize)\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + } } } - } - else if (dynamic_cast(functions[i]) != NULL) { - for (int j = 0; j < nodes.size(); j++) { - const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); - if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { - out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; - out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; - out << "int z = (int) floor(" << getTempName(node.getChildren()[2], temps) << "+0.5f);\n"; - out << "int xsize = " << paramsInt[0] << ";\n"; - out << "int ysize = " << paramsInt[1] << ";\n"; - out << "int zsize = " << paramsInt[2] << ";\n"; - out << "int index = x+(y+z*ysize)*xsize;\n"; - out << "if (index >= 0 && index < xsize*ysize*zsize)\n"; - out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + else if (dynamic_cast(functions[i]) != NULL) { + for (int j = 0; j < nodes.size(); j++) { + const vector& derivOrder = dynamic_cast(&nodes[j]->getOperation())->getDerivOrder(); + if (derivOrder[0] == 0 && derivOrder[1] == 0 && derivOrder[2] == 0) { + out << "int x = (int) floor(" << getTempName(node.getChildren()[0], temps) << "+0.5f);\n"; + out << "int y = (int) floor(" << getTempName(node.getChildren()[1], temps) << "+0.5f);\n"; + out << "int z = (int) floor(" << getTempName(node.getChildren()[2], temps) << "+0.5f);\n"; + out << "int xsize = " << paramsInt[0] << ";\n"; + out << "int ysize = " << paramsInt[1] << ";\n"; + out << "int zsize = " << paramsInt[2] << ";\n"; + out << "int index = x+(y+z*ysize)*xsize;\n"; + out << "if (index >= 0 && index < xsize*ysize*zsize)\n"; + out << nodeNames[j] << " = " << functionNames[i].second << "[index];\n"; + } } } } @@ -475,7 +518,7 @@ string OpenCLExpressionUtilities::getTempName(const ExpressionTreeNode& node, co throw OpenMMException(out.str()); } -void OpenCLExpressionUtilities::findRelatedTabulatedFunctions(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, +void OpenCLExpressionUtilities::findRelatedCustomFunctions(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, vector& nodes) { if (searchNode.getOperation().getId() == Operation::CUSTOM && node.getOperation().getName() == searchNode.getOperation().getName()) { // Make sure the arguments are identical. @@ -496,7 +539,7 @@ void OpenCLExpressionUtilities::findRelatedTabulatedFunctions(const ExpressionTr } else for (int i = 0; i < (int) searchNode.getChildren().size(); i++) - findRelatedTabulatedFunctions(node, searchNode.getChildren()[i], nodes); + findRelatedCustomFunctions(node, searchNode.getChildren()[i], nodes); } void OpenCLExpressionUtilities::findRelatedPowers(const ExpressionTreeNode& node, const ExpressionTreeNode& searchNode, map& powers) { @@ -722,3 +765,7 @@ Lepton::CustomFunction* OpenCLExpressionUtilities::getFunctionPlaceholder(const return &fp3; throw OpenMMException("getFunctionPlaceholder: Unknown function type"); } + +Lepton::CustomFunction* OpenCLExpressionUtilities::getPeriodicDistancePlaceholder() { + return &periodicDistance; +} diff --git a/platforms/opencl/src/OpenCLIntegrationUtilities.cpp b/platforms/opencl/src/OpenCLIntegrationUtilities.cpp index ad588305bad060a5a8219a3d8a7dc76de31464ec..7d230d42702b60a23132bbf8ccebb0f53bbf3f66 100644 --- a/platforms/opencl/src/OpenCLIntegrationUtilities.cpp +++ b/platforms/opencl/src/OpenCLIntegrationUtilities.cpp @@ -220,15 +220,17 @@ OpenCLIntegrationUtilities::OpenCLIntegrationUtilities(OpenCLContext& context, c params.push_back(mm_float2(dist13, dist12)); } else - throw OpenMMException("Two of the three distances constrained with SETTLE must be the same."); + continue; // We can't handle this with SETTLE isShakeAtom[atom1] = true; isShakeAtom[atom2] = true; isShakeAtom[atom3] = true; } - settleAtoms = OpenCLArray::create(context, atoms.size(), "settleAtoms"); - settleParams = OpenCLArray::create(context, params.size(), "settleParams"); - settleAtoms->upload(atoms); - settleParams->upload(params); + if (atoms.size() > 0) { + settleAtoms = OpenCLArray::create(context, atoms.size(), "settleAtoms"); + settleParams = OpenCLArray::create(context, params.size(), "settleParams"); + settleAtoms->upload(atoms); + settleParams->upload(params); + } } // Find clusters consisting of a central atom with up to three peripheral atoms. diff --git a/platforms/opencl/src/OpenCLKernelFactory.cpp b/platforms/opencl/src/OpenCLKernelFactory.cpp index 9bca423b8e561b507c13e437b75a6b08fd905b18..ff492300960863eb01a493b03f86252ff29b487d 100644 --- a/platforms/opencl/src/OpenCLKernelFactory.cpp +++ b/platforms/opencl/src/OpenCLKernelFactory.cpp @@ -102,6 +102,8 @@ KernelImpl* OpenCLKernelFactory::createKernelImpl(std::string name, const Platfo return new OpenCLCalcCustomExternalForceKernel(name, platform, cl, context.getSystem()); if (name == CalcCustomHbondForceKernel::Name()) return new OpenCLCalcCustomHbondForceKernel(name, platform, cl, context.getSystem()); + if (name == CalcCustomCentroidBondForceKernel::Name()) + return new OpenCLCalcCustomCentroidBondForceKernel(name, platform, cl, context.getSystem()); if (name == CalcCustomCompoundBondForceKernel::Name()) return new OpenCLCalcCustomCompoundBondForceKernel(name, platform, cl, context.getSystem()); if (name == CalcCustomManyParticleForceKernel::Name()) diff --git a/platforms/opencl/src/OpenCLKernels.cpp b/platforms/opencl/src/OpenCLKernels.cpp index ddcd537119f7d7f68e371d6e366d27241672a2b6..027b6beb843141e318f3824c9ff0921dd9c2699e 100644 --- a/platforms/opencl/src/OpenCLKernels.cpp +++ b/platforms/opencl/src/OpenCLKernels.cpp @@ -31,6 +31,7 @@ #include "openmm/internal/AndersenThermostatImpl.h" #include "openmm/internal/CMAPTorsionForceImpl.h" #include "openmm/internal/ContextImpl.h" +#include "openmm/internal/CustomCentroidBondForceImpl.h" #include "openmm/internal/CustomCompoundBondForceImpl.h" #include "openmm/internal/CustomHbondForceImpl.h" #include "openmm/internal/CustomManyParticleForceImpl.h" @@ -127,7 +128,7 @@ void OpenCLCalcForcesAndEnergyKernel::beginComputation(ContextImpl& context, boo double OpenCLCalcForcesAndEnergyKernel::finishComputation(ContextImpl& context, bool includeForces, bool includeEnergy, int groups, bool& valid) { cl.getBondedUtilities().computeInteractions(groups); - cl.getNonbondedUtilities().computeInteractions(groups); + cl.getNonbondedUtilities().computeInteractions(groups, includeForces, includeEnergy); double sum = 0.0; for (vector::iterator iter = cl.getPostComputations().begin(); iter != cl.getPostComputations().end(); ++iter) sum += (*iter)->computeForceAndEnergy(includeForces, includeEnergy, groups); @@ -135,7 +136,7 @@ double OpenCLCalcForcesAndEnergyKernel::finishComputation(ContextImpl& context, cl.getIntegrationUtilities().distributeForcesFromVirtualSites(); if (includeEnergy) { OpenCLArray& energyArray = cl.getEnergyBuffer(); - if (cl.getUseDoublePrecision()) { + if (cl.getUseDoublePrecision() || cl.getUseMixedPrecision()) { double* energy = (double*) cl.getPinnedBuffer(); energyArray.download(energy); for (int i = 0; i < energyArray.getSize(); i++) @@ -1551,8 +1552,9 @@ void OpenCLCalcNonbondedForceKernel::initialize(const System& system, const Nonb else cl.getPosq().upload(posqf); sigmaEpsilon->upload(sigmaEpsilonVector); - bool useCutoff = (force.getNonbondedMethod() != NonbondedForce::NoCutoff); - bool usePeriodic = (force.getNonbondedMethod() != NonbondedForce::NoCutoff && force.getNonbondedMethod() != NonbondedForce::CutoffNonPeriodic); + nonbondedMethod = CalcNonbondedForceKernel::NonbondedMethod(force.getNonbondedMethod()); + bool useCutoff = (nonbondedMethod != NoCutoff); + bool usePeriodic = (nonbondedMethod != NoCutoff && nonbondedMethod != CutoffNonPeriodic); map defines; defines["HAS_COULOMB"] = (hasCoulomb ? "1" : "0"); defines["HAS_LENNARD_JONES"] = (hasLJ ? "1" : "0"); @@ -1580,7 +1582,7 @@ void OpenCLCalcNonbondedForceKernel::initialize(const System& system, const Nonb dispersionCoefficient = 0.0; alpha = 0; ewaldSelfEnergy = 0.0; - if (force.getNonbondedMethod() == NonbondedForce::Ewald) { + if (nonbondedMethod == Ewald) { // Compute the Ewald parameters. int kmaxx, kmaxy, kmaxz; @@ -1606,10 +1608,9 @@ void OpenCLCalcNonbondedForceKernel::initialize(const System& system, const Nonb cosSinSums = new OpenCLArray(cl, (2*kmaxx-1)*(2*kmaxy-1)*(2*kmaxz-1), elementSize, "cosSinSums"); } } - else if (force.getNonbondedMethod() == NonbondedForce::PME) { + else if (nonbondedMethod == PME) { // Compute the PME parameters. - int gridSizeX, gridSizeY, gridSizeZ; NonbondedForceImpl::calcPMEParameters(system, force, alpha, gridSizeX, gridSizeY, gridSizeZ); gridSizeX = OpenCLFFT3D::findLegalDimension(gridSizeX); gridSizeY = OpenCLFFT3D::findLegalDimension(gridSizeY); @@ -2056,14 +2057,26 @@ void OpenCLCalcNonbondedForceKernel::copyParametersToContext(ContextImpl& contex // Compute other values. - NonbondedForce::NonbondedMethod method = force.getNonbondedMethod(); - if (method == NonbondedForce::Ewald || method == NonbondedForce::PME) + if (nonbondedMethod == Ewald || nonbondedMethod == PME) ewaldSelfEnergy = (cl.getContextIndex() == 0 ? -ONE_4PI_EPS0*alpha*sumSquaredCharges/sqrt(M_PI) : 0.0); - if (force.getUseDispersionCorrection() && cl.getContextIndex() == 0 && (method == NonbondedForce::CutoffPeriodic || method == NonbondedForce::Ewald || method == NonbondedForce::PME)) + if (force.getUseDispersionCorrection() && cl.getContextIndex() == 0 && (nonbondedMethod == CutoffPeriodic || nonbondedMethod == Ewald || nonbondedMethod == PME)) dispersionCoefficient = NonbondedForceImpl::calcDispersionCorrection(context.getSystem(), force); cl.invalidateMolecules(); } +void OpenCLCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (nonbondedMethod != PME) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + if (cl.getPlatformData().useCpuPme) + cpuPme.getAs().getPMEParameters(alpha, nx, ny, nz); + else { + alpha = this->alpha; + nx = gridSizeX; + ny = gridSizeY; + nz = gridSizeZ; + } +} + class OpenCLCustomNonbondedForceInfo : public OpenCLForceInfo { public: OpenCLCustomNonbondedForceInfo(int requiredBuffers, const CustomNonbondedForce& force) : OpenCLForceInfo(requiredBuffers), force(force) { @@ -3642,7 +3655,7 @@ double OpenCLCalcCustomGBForceKernel::execute(ContextImpl& context, bool include if (useLong) { pairEnergyKernel.setArg(index++, longEnergyDerivs->getDeviceBuffer()); for (int i = 0; i < numComputedValues; ++i) - pairEnergyKernel.setArg(index++, nb.getForceThreadBlockSize()*elementSize, NULL); + pairEnergyKernel.setArg(index++, (deviceIsCpu ? OpenCLContext::TileSize : nb.getForceThreadBlockSize())*elementSize, NULL); } else { for (int i = 0; i < (int) energyDerivs->getBuffers().size(); i++) { @@ -3808,7 +3821,9 @@ void OpenCLCalcCustomExternalForceKernel::initialize(const System& system, const globalParamNames[i] = force.getGlobalParameterName(i); globalParamValues[i] = (cl_float) force.getGlobalParameterDefaultValue(i); } - Lepton::ParsedExpression energyExpression = Lepton::Parser::parse(force.getEnergyFunction()).optimize(); + map customFunctions; + customFunctions["periodicdistance"] = cl.getExpressionUtilities().getPeriodicDistancePlaceholder(); + Lepton::ParsedExpression energyExpression = Lepton::Parser::parse(force.getEnergyFunction(), customFunctions).optimize(); Lepton::ParsedExpression forceExpressionX = energyExpression.differentiate("x").optimize(); Lepton::ParsedExpression forceExpressionY = energyExpression.differentiate("y").optimize(); Lepton::ParsedExpression forceExpressionZ = energyExpression.differentiate("z").optimize(); @@ -4433,6 +4448,442 @@ void OpenCLCalcCustomHbondForceKernel::copyParametersToContext(ContextImpl& cont cl.invalidateMolecules(); } +class OpenCLCustomCentroidBondForceInfo : public OpenCLForceInfo { +public: + OpenCLCustomCentroidBondForceInfo(const CustomCentroidBondForce& force) : OpenCLForceInfo(0), force(force) { + } + int getNumParticleGroups() { + return force.getNumBonds(); + } + void getParticlesInGroup(int index, vector& particles) { + vector parameters; + vector groups; + force.getBondParameters(index, groups, parameters); + for (int i = 0; i < groups.size(); i++) { + vector groupParticles; + vector weights; + force.getGroupParameters(groups[i], groupParticles, weights); + particles.insert(particles.end(), groupParticles.begin(), groupParticles.end()); + } + } + bool areGroupsIdentical(int group1, int group2) { + vector groups1, groups2; + vector parameters1, parameters2; + force.getBondParameters(group1, groups1, parameters1); + force.getBondParameters(group2, groups2, parameters2); + for (int i = 0; i < (int) parameters1.size(); i++) + if (parameters1[i] != parameters2[i]) + return false; + for (int i = 0; i < groups1.size(); i++) { + vector groupParticles; + vector weights1, weights2; + force.getGroupParameters(groups1[i], groupParticles, weights1); + force.getGroupParameters(groups2[i], groupParticles, weights2); + if (weights1.size() != weights2.size()) + return false; + for (int j = 0; j < weights1.size(); j++) + if (weights1[j] != weights2[j]) + return false; + } + return true; + } +private: + const CustomCentroidBondForce& force; +}; + +OpenCLCalcCustomCentroidBondForceKernel::~OpenCLCalcCustomCentroidBondForceKernel() { + if (params != NULL) + delete params; + if (globals != NULL) + delete globals; + if (groupParticles != NULL) + delete groupParticles; + if (groupWeights != NULL) + delete groupWeights; + if (groupOffsets != NULL) + delete groupOffsets; + if (groupForces != NULL) + delete groupForces; + if (bondGroups != NULL) + delete bondGroups; + if (centerPositions != NULL) + delete centerPositions; + for (int i = 0; i < (int) tabulatedFunctions.size(); i++) + delete tabulatedFunctions[i]; +} + +void OpenCLCalcCustomCentroidBondForceKernel::initialize(const System& system, const CustomCentroidBondForce& force) { + numBonds = force.getNumBonds(); + if (numBonds == 0) + return; + if (!cl.getSupports64BitGlobalAtomics()) + throw OpenMMException("CustomCentroidBondForce requires a device that supports 64 bit atomic operations"); + cl.addForce(new OpenCLCustomCentroidBondForceInfo(force)); + + // Record the groups. + + numGroups = force.getNumGroups(); + vector groupParticleVec; + vector groupWeightVecFloat; + vector groupWeightVecDouble; + vector groupOffsetVec; + groupOffsetVec.push_back(0); + for (int i = 0; i < numGroups; i++) { + vector particles; + vector weights; + force.getGroupParameters(i, particles, weights); + groupParticleVec.insert(groupParticleVec.end(), particles.begin(), particles.end()); + groupOffsetVec.push_back(groupParticleVec.size()); + } + vector > normalizedWeights; + CustomCentroidBondForceImpl::computeNormalizedWeights(force, system, normalizedWeights); + if (cl.getUseDoublePrecision()) { + for (int i = 0; i < numGroups; i++) + groupWeightVecDouble.insert(groupWeightVecDouble.end(), normalizedWeights[i].begin(), normalizedWeights[i].end()); + } + else { + for (int i = 0; i < numGroups; i++) + for (int j = 0; j < normalizedWeights[i].size(); j++) + groupWeightVecFloat.push_back((float) normalizedWeights[i][j]); + } + groupParticles = OpenCLArray::create(cl, groupParticleVec.size(), "groupParticles"); + groupParticles->upload(groupParticleVec); + if (cl.getUseDoublePrecision()) { + groupWeights = OpenCLArray::create(cl, groupParticleVec.size(), "groupWeights"); + groupWeights->upload(groupWeightVecDouble); + centerPositions = OpenCLArray::create(cl, numGroups, "centerPositions"); + } + else { + groupWeights = OpenCLArray::create(cl, groupParticleVec.size(), "groupWeights"); + groupWeights->upload(groupWeightVecFloat); + centerPositions = OpenCLArray::create(cl, numGroups, "centerPositions"); + } + groupOffsets = OpenCLArray::create(cl, groupOffsetVec.size(), "groupOffsets"); + groupOffsets->upload(groupOffsetVec); + groupForces = OpenCLArray::create(cl, numGroups*3, "groupForces"); + cl.addAutoclearBuffer(*groupForces); + + // Record the bonds. + + int groupsPerBond = force.getNumGroupsPerBond(); + vector bondGroupVec(numBonds*groupsPerBond); + params = new OpenCLParameterSet(cl, force.getNumPerBondParameters(), numBonds, "customCentroidBondParams"); + vector > paramVector(numBonds); + for (int i = 0; i < numBonds; i++) { + vector groups; + vector parameters; + force.getBondParameters(i, groups, parameters); + for (int j = 0; j < groups.size(); j++) + bondGroupVec[i+j*numBonds] = groups[j]; + paramVector[i].resize(parameters.size()); + for (int j = 0; j < (int) parameters.size(); j++) + paramVector[i][j] = (float) parameters[j]; + } + params->setParameterValues(paramVector); + bondGroups = OpenCLArray::create(cl, bondGroupVec.size(), "bondGroups"); + bondGroups->upload(bondGroupVec); + + // Record the tabulated functions. + + map functions; + vector > functionDefinitions; + vector functionList; + stringstream extraArgs; + for (int i = 0; i < force.getNumTabulatedFunctions(); i++) { + functionList.push_back(&force.getTabulatedFunction(i)); + string name = force.getTabulatedFunctionName(i); + string arrayName = "table"+cl.intToString(i); + functionDefinitions.push_back(make_pair(name, arrayName)); + functions[name] = cl.getExpressionUtilities().getFunctionPlaceholder(force.getTabulatedFunction(i)); + int width; + vector f = cl.getExpressionUtilities().computeFunctionCoefficients(force.getTabulatedFunction(i), width); + tabulatedFunctions.push_back(OpenCLArray::create(cl, f.size(), "TabulatedFunction")); + tabulatedFunctions.back()->upload(f); + extraArgs << ", __global const float"; + if (width > 1) + extraArgs << width; + extraArgs << "* restrict " << arrayName; + } + + // Record information about parameters. + + globalParamNames.resize(force.getNumGlobalParameters()); + globalParamValues.resize(force.getNumGlobalParameters()); + for (int i = 0; i < force.getNumGlobalParameters(); i++) { + globalParamNames[i] = force.getGlobalParameterName(i); + globalParamValues[i] = (float) force.getGlobalParameterDefaultValue(i); + } + map variables; + for (int i = 0; i < groupsPerBond; i++) { + string index = cl.intToString(i+1); + variables["x"+index] = "pos"+index+".x"; + variables["y"+index] = "pos"+index+".y"; + variables["z"+index] = "pos"+index+".z"; + } + for (int i = 0; i < force.getNumPerBondParameters(); i++) { + const string& name = force.getPerBondParameterName(i); + variables[name] = "bondParams"+params->getParameterSuffix(i); + } + if (force.getNumGlobalParameters() > 0) { + globals = OpenCLArray::create(cl, force.getNumGlobalParameters(), "customCentroidBondGlobals"); + globals->upload(globalParamValues); + extraArgs << ", __global const float* restrict globals"; + for (int i = 0; i < force.getNumGlobalParameters(); i++) { + const string& name = force.getGlobalParameterName(i); + string value = "globals["+cl.intToString(i)+"]"; + variables[name] = value; + } + } + + // Now to generate the kernel. First, it needs to calculate all distances, angles, + // and dihedrals the expression depends on. + + map > distances; + map > angles; + map > dihedrals; + Lepton::ParsedExpression energyExpression = CustomCentroidBondForceImpl::prepareExpression(force, functions, distances, angles, dihedrals); + map forceExpressions; + set computedDeltas; + vector atomNames, posNames; + for (int i = 0; i < groupsPerBond; i++) { + string index = cl.intToString(i+1); + atomNames.push_back("P"+index); + posNames.push_back("pos"+index); + } + stringstream compute; + for (int i = 0; i < groupsPerBond; i++) { + compute<<"int group"<<(i+1)<<" = bondGroups[index+"<<(i*numBonds)<<"];\n"; + compute<<"real4 pos"<<(i+1)<<" = centerPositions[group"<<(i+1)<<"];\n"; + } + int index = 0; + for (map >::const_iterator iter = distances.begin(); iter != distances.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName = atomNames[groups[0]]+atomNames[groups[1]]; + if (computedDeltas.count(deltaName) == 0) { + compute<<"real4 delta"<first] = "r_"+deltaName; + forceExpressions["real dEdDistance"+cl.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + index = 0; + for (map >::const_iterator iter = angles.begin(); iter != angles.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[1]]+atomNames[groups[0]]; + string deltaName2 = atomNames[groups[1]]+atomNames[groups[2]]; + string angleName = "angle_"+atomNames[groups[0]]+atomNames[groups[1]]+atomNames[groups[2]]; + if (computedDeltas.count(deltaName1) == 0) { + compute<<"real4 delta"<first] = angleName; + forceExpressions["real dEdAngle"+cl.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + index = 0; + for (map >::const_iterator iter = dihedrals.begin(); iter != dihedrals.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[0]]+atomNames[groups[1]]; + string deltaName2 = atomNames[groups[2]]+atomNames[groups[1]]; + string deltaName3 = atomNames[groups[2]]+atomNames[groups[3]]; + string crossName1 = "cross_"+deltaName1+"_"+deltaName2; + string crossName2 = "cross_"+deltaName2+"_"+deltaName3; + string dihedralName = "dihedral_"+atomNames[groups[0]]+atomNames[groups[1]]+atomNames[groups[2]]+atomNames[groups[3]]; + if (computedDeltas.count(deltaName1) == 0) { + compute<<"real4 delta"<first] = dihedralName; + forceExpressions["real dEdDihedral"+cl.intToString(index)+" = "] = energyExpression.differentiate(iter->first).optimize(); + } + + // Now evaluate the expressions. + + for (int i = 0; i < (int) params->getBuffers().size(); i++) { + OpenCLNonbondedUtilities::ParameterInfo& buffer = params->getBuffers()[i]; + extraArgs<<", __global const "< forceNames; + for (int i = 0; i < groupsPerBond; i++) { + string istr = cl.intToString(i+1); + string forceName = "force"+istr; + forceNames.push_back(forceName); + compute<<"real3 "< expressions; + if (!isZeroExpression(forceExpressionX)) + expressions[forceName+".x -= "] = forceExpressionX; + if (!isZeroExpression(forceExpressionY)) + expressions[forceName+".y -= "] = forceExpressionY; + if (!isZeroExpression(forceExpressionZ)) + expressions[forceName+".z -= "] = forceExpressionZ; + if (expressions.size() > 0) + compute< >::const_iterator iter = distances.begin(); iter != distances.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName = atomNames[groups[0]]+atomNames[groups[1]]; + string value = "(dEdDistance"+cl.intToString(index)+"/r_"+deltaName+")*delta"+deltaName+".xyz"; + compute< >::const_iterator iter = angles.begin(); iter != angles.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[1]]+atomNames[groups[0]]; + string deltaName2 = atomNames[groups[1]]+atomNames[groups[2]]; + compute<<"{\n"; + compute<<"real4 crossProd = cross(delta"< >::const_iterator iter = dihedrals.begin(); iter != dihedrals.end(); ++iter, ++index) { + const vector& groups = iter->second; + string deltaName1 = atomNames[groups[0]]+atomNames[groups[1]]; + string deltaName2 = atomNames[groups[2]]+atomNames[groups[1]]; + string deltaName3 = atomNames[groups[2]]+atomNames[groups[3]]; + string crossName1 = "cross_"+deltaName1+"_"+deltaName2; + string crossName2 = "cross_"+deltaName2+"_"+deltaName3; + compute<<"{\n"; + compute<<"real r = sqrt(delta"< replacements; + replacements["M_PI"] = cl.doubleToString(M_PI); + replacements["NUM_GROUPS"] = cl.intToString(numGroups); + replacements["NUM_BONDS"] = cl.intToString(numBonds); + replacements["PADDED_NUM_ATOMS"] = cl.intToString(cl.getPaddedNumAtoms()); + replacements["EXTRA_ARGS"] = extraArgs.str(); + replacements["COMPUTE_FORCE"] = compute.str(); + cl::Program program = cl.createProgram(cl.replaceStrings(OpenCLKernelSources::customCentroidBond, replacements)); + index = 0; + computeCentersKernel = cl::Kernel(program, "computeGroupCenters"); + computeCentersKernel.setArg(index++, cl.getPosq().getDeviceBuffer()); + computeCentersKernel.setArg(index++, groupParticles->getDeviceBuffer()); + computeCentersKernel.setArg(index++, groupWeights->getDeviceBuffer()); + computeCentersKernel.setArg(index++, groupOffsets->getDeviceBuffer()); + computeCentersKernel.setArg(index++, centerPositions->getDeviceBuffer()); + index = 0; + groupForcesKernel = cl::Kernel(program, "computeGroupForces"); + groupForcesKernel.setArg(index++, groupForces->getDeviceBuffer()); + index++; // Energy buffer hasn't been created yet + groupForcesKernel.setArg(index++, centerPositions->getDeviceBuffer()); + groupForcesKernel.setArg(index++, bondGroups->getDeviceBuffer()); + for (int i = 0; i < tabulatedFunctions.size(); i++) + groupForcesKernel.setArg(index++, tabulatedFunctions[i]->getDeviceBuffer()); + if (globals != NULL) + groupForcesKernel.setArg(index++, globals->getDeviceBuffer()); + for (int i = 0; i < (int) params->getBuffers().size(); i++) + groupForcesKernel.setArg(index++, params->getBuffers()[i].getMemory()); + index = 0; + applyForcesKernel = cl::Kernel(program, "applyForcesToAtoms"); + applyForcesKernel.setArg(index++, groupParticles->getDeviceBuffer()); + applyForcesKernel.setArg(index++, groupWeights->getDeviceBuffer()); + applyForcesKernel.setArg(index++, groupOffsets->getDeviceBuffer()); + applyForcesKernel.setArg(index++, groupForces->getDeviceBuffer()); +} + +double OpenCLCalcCustomCentroidBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { + if (numBonds == 0) + return 0.0; + if (globals != NULL) { + bool changed = false; + for (int i = 0; i < (int) globalParamNames.size(); i++) { + float value = (float) context.getParameter(globalParamNames[i]); + if (value != globalParamValues[i]) + changed = true; + globalParamValues[i] = value; + } + if (changed) + globals->upload(globalParamValues); + } + cl.executeKernel(computeCentersKernel, OpenCLContext::TileSize*numGroups); + groupForcesKernel.setArg(1, cl.getEnergyBuffer().getDeviceBuffer()); + cl.executeKernel(groupForcesKernel, numBonds); + applyForcesKernel.setArg(4, cl.getLongForceBuffer().getDeviceBuffer()); + cl.executeKernel(applyForcesKernel, OpenCLContext::TileSize*numGroups); + return 0.0; +} + +void OpenCLCalcCustomCentroidBondForceKernel::copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force) { + if (numBonds != force.getNumBonds()) + throw OpenMMException("updateParametersInContext: The number of bonds has changed"); + if (numBonds == 0) + return; + + // Record the per-bond parameters. + + vector > paramVector(numBonds); + vector particles; + vector parameters; + for (int i = 0; i < numBonds; i++) { + force.getBondParameters(i, particles, parameters); + paramVector[i].resize(parameters.size()); + for (int j = 0; j < (int) parameters.size(); j++) + paramVector[i][j] = (float) parameters[j]; + } + params->setParameterValues(paramVector); + + // Mark that the current reordering may be invalid. + + cl.invalidateMolecules(); +} + class OpenCLCustomCompoundBondForceInfo : public OpenCLForceInfo { public: OpenCLCustomCompoundBondForceInfo(const CustomCompoundBondForce& force) : OpenCLForceInfo(0), force(force) { diff --git a/platforms/opencl/src/OpenCLNonbondedUtilities.cpp b/platforms/opencl/src/OpenCLNonbondedUtilities.cpp index 5cf26a26ca2b4276dbdcb57b8b9bf88ced4c4054..7f6937302e6629b53ab9d9dd81b64981a4d8ab22 100644 --- a/platforms/opencl/src/OpenCLNonbondedUtilities.cpp +++ b/platforms/opencl/src/OpenCLNonbondedUtilities.cpp @@ -180,13 +180,29 @@ void OpenCLNonbondedUtilities::requestExclusions(const vector >& exc } static bool compareUshort2(mm_ushort2 a, mm_ushort2 b) { + // This version is used on devices with SIMD width of 32 or less. It sorts tiles to improve cache efficiency. + + return ((a.y < b.y) || (a.y == b.y && a.x < b.x)); +} + +static bool compareUshort2LargeSIMD(mm_ushort2 a, mm_ushort2 b) { + // This version is used on devices with SIMD width greater than 32. It puts diagonal tiles before off-diagonal + // ones to reduce thread divergence. + + if (a.x == a.y) { + if (b.x == b.y) + return (a.x < b.x); + return true; + } + if (b.x == b.y) + return false; return ((a.y < b.y) || (a.y == b.y && a.x < b.x)); } void OpenCLNonbondedUtilities::initialize(const System& system) { if (atomExclusions.size() == 0) { // No exclusions were specifically requested, so just mark every atom as not interacting with itself. - + atomExclusions.resize(context.getNumAtoms()); for (int i = 0; i < (int) atomExclusions.size(); i++) atomExclusions[i].push_back(i); @@ -199,7 +215,7 @@ void OpenCLNonbondedUtilities::initialize(const System& system) { setAtomBlockRange(context.getContextIndex()/(double) numContexts, (context.getContextIndex()+1)/(double) numContexts); // Build a list of tiles that contain exclusions. - + set > tilesWithExclusions; for (int atom1 = 0; atom1 < (int) atomExclusions.size(); ++atom1) { int x = atom1/OpenCLContext::TileSize; @@ -212,7 +228,7 @@ void OpenCLNonbondedUtilities::initialize(const System& system) { vector exclusionTilesVec; for (set >::const_iterator iter = tilesWithExclusions.begin(); iter != tilesWithExclusions.end(); ++iter) exclusionTilesVec.push_back(mm_ushort2((unsigned short) iter->first, (unsigned short) iter->second)); - sort(exclusionTilesVec.begin(), exclusionTilesVec.end(), compareUshort2); + sort(exclusionTilesVec.begin(), exclusionTilesVec.end(), context.getSIMDWidth() <= 32 ? compareUshort2 : compareUshort2LargeSIMD); exclusionTiles = OpenCLArray::create(context, exclusionTilesVec.size(), "exclusionTiles"); exclusionTiles->upload(exclusionTilesVec); map, int> exclusionTileMap; @@ -341,37 +357,43 @@ void OpenCLNonbondedUtilities::prepareInteractions(int forceGroups) { if (lastCutoff != kernels.cutoffDistance) forceRebuildNeighborList = true; - setPeriodicBoxArgs(context, kernels.findBlockBoundsKernel, 1); - context.executeKernel(kernels.findBlockBoundsKernel, context.getNumAtoms()); - blockSorter->sort(*sortedBlocks); - kernels.sortBoxDataKernel.setArg(9, forceRebuildNeighborList); - context.executeKernel(kernels.sortBoxDataKernel, context.getNumAtoms()); - setPeriodicBoxArgs(context, kernels.findInteractingBlocksKernel, 0); - context.executeKernel(kernels.findInteractingBlocksKernel, context.getNumAtoms(), interactingBlocksThreadBlockSize); - forceRebuildNeighborList = false; + bool rebuild = false; + do { + setPeriodicBoxArgs(context, kernels.findBlockBoundsKernel, 1); + context.executeKernel(kernels.findBlockBoundsKernel, context.getNumAtoms()); + blockSorter->sort(*sortedBlocks); + kernels.sortBoxDataKernel.setArg(9, forceRebuildNeighborList); + context.executeKernel(kernels.sortBoxDataKernel, context.getNumAtoms()); + setPeriodicBoxArgs(context, kernels.findInteractingBlocksKernel, 0); + context.executeKernel(kernels.findInteractingBlocksKernel, context.getNumAtoms(), interactingBlocksThreadBlockSize); + forceRebuildNeighborList = false; + if (context.getComputeForceCount() == 1) + rebuild = updateNeighborListSize(); // This is the first time step, so check whether our initial guess was large enough. + } while (rebuild); lastCutoff = kernels.cutoffDistance; } -void OpenCLNonbondedUtilities::computeInteractions(int forceGroups) { +void OpenCLNonbondedUtilities::computeInteractions(int forceGroups, bool includeForces, bool includeEnergy) { if ((forceGroups&groupFlags) == 0) return; KernelSet& kernels = groupKernels[forceGroups]; if (kernels.hasForces) { + cl::Kernel& kernel = (includeForces ? (includeEnergy ? kernels.forceEnergyKernel : kernels.forceKernel) : kernels.energyKernel); + if (*reinterpret_cast(&kernel) == NULL) + kernel = createInteractionKernel(kernels.source, parameters, arguments, true, true, forceGroups, includeForces, includeEnergy); if (useCutoff) - setPeriodicBoxArgs(context, kernels.forceKernel, 9); - context.executeKernel(kernels.forceKernel, numForceThreadBlocks*forceThreadBlockSize, forceThreadBlockSize); - if (context.getComputeForceCount() == 1) - updateNeighborListSize(); // This is the first time step, so check whether our initial guess was large enough. + setPeriodicBoxArgs(context, kernel, 9); + context.executeKernel(kernel, numForceThreadBlocks*forceThreadBlockSize, forceThreadBlockSize); } } -void OpenCLNonbondedUtilities::updateNeighborListSize() { +bool OpenCLNonbondedUtilities::updateNeighborListSize() { if (!useCutoff) - return; + return false; unsigned int* pinnedInteractionCount = (unsigned int*) context.getPinnedBuffer(); interactionCount->download(pinnedInteractionCount); if (pinnedInteractionCount[0] <= (unsigned int) interactingTiles->getSize()) - return; + return false; // The most recent timestep had too many interactions to fit in the arrays. Make the arrays bigger to prevent // this from happening in the future. @@ -387,14 +409,28 @@ void OpenCLNonbondedUtilities::updateNeighborListSize() { interactingTiles = OpenCLArray::create(context, maxTiles, "interactingTiles"); interactingAtoms = OpenCLArray::create(context, OpenCLContext::TileSize*maxTiles, "interactingAtoms"); for (map::iterator iter = groupKernels.begin(); iter != groupKernels.end(); ++iter) { - iter->second.forceKernel.setArg(7, interactingTiles->getDeviceBuffer()); - iter->second.forceKernel.setArg(14, maxTiles); - iter->second.forceKernel.setArg(17, interactingAtoms->getDeviceBuffer()); - iter->second.findInteractingBlocksKernel.setArg(6, interactingTiles->getDeviceBuffer()); - iter->second.findInteractingBlocksKernel.setArg(7, interactingAtoms->getDeviceBuffer()); - iter->second.findInteractingBlocksKernel.setArg(9, maxTiles); + KernelSet& kernels = iter->second; + if (*reinterpret_cast(&kernels.forceKernel) != NULL) { + kernels.forceKernel.setArg(7, interactingTiles->getDeviceBuffer()); + kernels.forceKernel.setArg(14, maxTiles); + kernels.forceKernel.setArg(17, interactingAtoms->getDeviceBuffer()); + } + if (*reinterpret_cast(&kernels.energyKernel) != NULL) { + kernels.energyKernel.setArg(7, interactingTiles->getDeviceBuffer()); + kernels.energyKernel.setArg(14, maxTiles); + kernels.energyKernel.setArg(17, interactingAtoms->getDeviceBuffer()); + } + if (*reinterpret_cast(&kernels.forceEnergyKernel) != NULL) { + kernels.forceEnergyKernel.setArg(7, interactingTiles->getDeviceBuffer()); + kernels.forceEnergyKernel.setArg(14, maxTiles); + kernels.forceEnergyKernel.setArg(17, interactingAtoms->getDeviceBuffer()); + } + kernels.findInteractingBlocksKernel.setArg(6, interactingTiles->getDeviceBuffer()); + kernels.findInteractingBlocksKernel.setArg(7, interactingAtoms->getDeviceBuffer()); + kernels.findInteractingBlocksKernel.setArg(9, maxTiles); } forceRebuildNeighborList = true; + return true; } void OpenCLNonbondedUtilities::setUsePadding(bool padding) { @@ -410,12 +446,23 @@ void OpenCLNonbondedUtilities::setAtomBlockRange(double startFraction, double en numTiles = (int) (endFraction*totalTiles)-startTileIndex; if (useCutoff) { // We are using a cutoff, and the kernels have already been created. - + for (map::iterator iter = groupKernels.begin(); iter != groupKernels.end(); ++iter) { - iter->second.forceKernel.setArg(5, startTileIndex); - iter->second.forceKernel.setArg(6, numTiles); - iter->second.findInteractingBlocksKernel.setArg(10, startBlockIndex); - iter->second.findInteractingBlocksKernel.setArg(11, numBlocks); + KernelSet& kernels = iter->second; + if (*reinterpret_cast(&kernels.forceKernel) != NULL) { + kernels.forceKernel.setArg(5, startTileIndex); + kernels.forceKernel.setArg(6, numTiles); + } + if (*reinterpret_cast(&kernels.energyKernel) != NULL) { + kernels.energyKernel.setArg(5, startTileIndex); + kernels.energyKernel.setArg(6, numTiles); + } + if (*reinterpret_cast(&kernels.forceEnergyKernel) != NULL) { + kernels.forceEnergyKernel.setArg(5, startTileIndex); + kernels.forceEnergyKernel.setArg(6, numTiles); + } + kernels.findInteractingBlocksKernel.setArg(10, startBlockIndex); + kernels.findInteractingBlocksKernel.setArg(11, numBlocks); } forceRebuildNeighborList = true; } @@ -433,8 +480,7 @@ void OpenCLNonbondedUtilities::createKernelsForGroups(int groups) { } kernels.hasForces = (source.size() > 0); kernels.cutoffDistance = cutoff; - if (kernels.hasForces) - kernels.forceKernel = createInteractionKernel(source, parameters, arguments, true, true, groups); + kernels.source = source; if (useCutoff) { double padding = (usePadding ? 0.1*cutoff : 0.0); double paddedCutoff = cutoff+padding; @@ -491,7 +537,7 @@ void OpenCLNonbondedUtilities::createKernelsForGroups(int groups) { kernels.findInteractingBlocksKernel.setArg(18, rebuildNeighborList->getDeviceBuffer()); if (kernels.findInteractingBlocksKernel.getWorkGroupInfo(context.getDevice()) < groupSize) { // The device can't handle this block size, so reduce it. - + groupSize -= 32; if (groupSize < 32) throw OpenMMException("Failed to create findInteractingBlocks kernel"); @@ -504,7 +550,7 @@ void OpenCLNonbondedUtilities::createKernelsForGroups(int groups) { groupKernels[groups] = kernels; } -cl::Kernel OpenCLNonbondedUtilities::createInteractionKernel(const string& source, const vector& params, const vector& arguments, bool useExclusions, bool isSymmetric, int groups) { +cl::Kernel OpenCLNonbondedUtilities::createInteractionKernel(const string& source, const vector& params, const vector& arguments, bool useExclusions, bool isSymmetric, int groups, bool includeForces, bool includeEnergy) { map replacements; replacements["COMPUTE_INTERACTION"] = source; const string suffixes[] = {"x", "y", "z", "w"}; @@ -603,6 +649,10 @@ cl::Kernel OpenCLNonbondedUtilities::createInteractionKernel(const string& sourc defines["USE_SYMMETRIC"] = "1"; if (useCutoff && context.getSIMDWidth() < 32) defines["PRUNE_BY_CUTOFF"] = "1"; + if (includeForces) + defines["INCLUDE_FORCES"] = "1"; + if (includeEnergy) + defines["INCLUDE_ENERGY"] = "1"; defines["FORCE_WORK_GROUP_SIZE"] = context.intToString(forceThreadBlockSize); double maxCutoff = 0.0; for (int i = 0; i < 32; i++) { diff --git a/platforms/opencl/src/OpenCLParallelKernels.cpp b/platforms/opencl/src/OpenCLParallelKernels.cpp index 1e5b5226e08088101a0778734acbf9ae24330864..bd8514c53a9823f149f22d178720337b9043caa6 100644 --- a/platforms/opencl/src/OpenCLParallelKernels.cpp +++ b/platforms/opencl/src/OpenCLParallelKernels.cpp @@ -579,6 +579,10 @@ void OpenCLParallelCalcNonbondedForceKernel::copyParametersToContext(ContextImpl getKernel(i).copyParametersToContext(context, force); } +void OpenCLParallelCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + dynamic_cast(kernels[0].getImpl()).getPMEParameters(alpha, nx, ny, nz); +} + class OpenCLParallelCalcCustomNonbondedForceKernel::Task : public OpenCLContext::WorkTask { public: Task(ContextImpl& context, OpenCLCalcCustomNonbondedForceKernel& kernel, bool includeForce, diff --git a/platforms/opencl/src/OpenCLPlatform.cpp b/platforms/opencl/src/OpenCLPlatform.cpp index a55bccc55568d7f2df5d62da3284c6fcfe2d6707..efc485043e828ef518f88b3ab30caec2816c70ba 100644 --- a/platforms/opencl/src/OpenCLPlatform.cpp +++ b/platforms/opencl/src/OpenCLPlatform.cpp @@ -74,6 +74,7 @@ OpenCLPlatform::OpenCLPlatform() { registerKernelFactory(CalcCustomGBForceKernel::Name(), factory); registerKernelFactory(CalcCustomExternalForceKernel::Name(), factory); registerKernelFactory(CalcCustomHbondForceKernel::Name(), factory); + registerKernelFactory(CalcCustomCentroidBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomCompoundBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomManyParticleForceKernel::Name(), factory); registerKernelFactory(IntegrateVerletStepKernel::Name(), factory); diff --git a/platforms/opencl/src/kernels/customCentroidBond.cl b/platforms/opencl/src/kernels/customCentroidBond.cl new file mode 100644 index 0000000000000000000000000000000000000000..fb72ce91d51785b473853d464c747a7e5a4cc48f --- /dev/null +++ b/platforms/opencl/src/kernels/customCentroidBond.cl @@ -0,0 +1,141 @@ +#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable + +/** + * Compute the center of each group. + */ +__kernel void computeGroupCenters(__global const real4* restrict posq, __global const int* restrict groupParticles, + __global const real* restrict groupWeights, __global const int* restrict groupOffsets, __global real4* restrict centerPositions) { + __local volatile real3 temp[64]; + for (int group = get_group_id(0); group < NUM_GROUPS; group += get_num_groups(0)) { + // The threads in this block work together to compute the center one group. + + int firstIndex = groupOffsets[group]; + int lastIndex = groupOffsets[group+1]; + real3 center = (real3) 0; + for (int index = get_local_id(0); index < lastIndex-firstIndex; index += get_local_size(0)) { + int atom = groupParticles[firstIndex+index]; + real weight = groupWeights[firstIndex+index]; + real4 pos = posq[atom]; + center.x += weight*pos.x; + center.y += weight*pos.y; + center.z += weight*pos.z; + } + + // Sum the values. + + int thread = get_local_id(0); + temp[thread].x = center.x; + temp[thread].y = center.y; + temp[thread].z = center.z; + + barrier(CLK_LOCAL_MEM_FENCE); + if (thread < 32) { + temp[thread].x += temp[thread+32].x; + temp[thread].y += temp[thread+32].y; + temp[thread].z += temp[thread+32].z; + } + + SYNC_WARPS; + if (thread < 16) { + temp[thread].x += temp[thread+16].x; + temp[thread].y += temp[thread+16].y; + temp[thread].z += temp[thread+16].z; + } + SYNC_WARPS; + if (thread < 8) { + temp[thread].x += temp[thread+8].x; + temp[thread].y += temp[thread+8].y; + temp[thread].z += temp[thread+8].z; + } + + SYNC_WARPS; + if (thread < 4) { + temp[thread].x += temp[thread+4].x; + temp[thread].y += temp[thread+4].y; + temp[thread].z += temp[thread+4].z; + } + SYNC_WARPS; + if (thread < 2) { + temp[thread].x += temp[thread+2].x; + temp[thread].y += temp[thread+2].y; + temp[thread].z += temp[thread+2].z; + } + + SYNC_WARPS; + if (thread == 0) + centerPositions[group] = (real4) (temp[0].x+temp[1].x, temp[0].y+temp[1].y, temp[0].z+temp[1].z, 0); + } +} + +/** + * Compute the difference between two vectors, setting the fourth component to the squared magnitude. + */ +real4 delta(real4 vec1, real4 vec2) { + real4 result = (real4) (vec1.x-vec2.x, vec1.y-vec2.y, vec1.z-vec2.z, 0); + result.w = result.x*result.x + result.y*result.y + result.z*result.z; + return result; +} + +/** + * Compute the angle between two vectors. The w component of each vector should contain the squared magnitude. + */ +real computeAngle(real4 vec1, real4 vec2) { + real dotProduct = vec1.x*vec2.x + vec1.y*vec2.y + vec1.z*vec2.z; + real cosine = dotProduct*RSQRT(vec1.w*vec2.w); + real angle; + if (cosine > 0.99f || cosine < -0.99f) { + // We're close to the singularity in acos(), so take the cross product and use asin() instead. + + real4 crossProduct = cross(vec1, vec2); + real scale = vec1.w*vec2.w; + angle = asin(SQRT(dot(crossProduct, crossProduct)/scale)); + if (cosine < 0) + angle = M_PI-angle; + } + else + angle = acos(cosine); + return angle; +} + +/** + * Compute the cross product of two vectors, setting the fourth component to the squared magnitude. + */ +real4 computeCross(real4 vec1, real4 vec2) { + real4 result = cross(vec1, vec2); + result.w = result.x*result.x + result.y*result.y + result.z*result.z; + return result; +} + +/** + * Compute the forces on groups based on the bonds. + */ +__kernel void computeGroupForces(__global long* restrict groupForce, __global mixed* restrict energyBuffer, __global const real4* restrict centerPositions, + __global const int* restrict bondGroups + EXTRA_ARGS) { + mixed energy = 0; + for (int index = get_global_id(0); index < NUM_BONDS; index += get_global_size(0)) { + COMPUTE_FORCE + } + energyBuffer[get_global_id(0)] += energy; +} + +/** + * Apply the forces from the group centers to the individual atoms. + */ +__kernel void applyForcesToAtoms(__global const int* restrict groupParticles, __global const real* restrict groupWeights, __global const int* restrict groupOffsets, + __global const long* restrict groupForce, __global long* restrict atomForce) { + for (int group = get_group_id(0); group < NUM_GROUPS; group += get_num_groups(0)) { + long fx = groupForce[group]; + long fy = groupForce[group+NUM_GROUPS]; + long fz = groupForce[group+NUM_GROUPS*2]; + int firstIndex = groupOffsets[group]; + int lastIndex = groupOffsets[group+1]; + for (int index = get_local_id(0); index < lastIndex-firstIndex; index += get_local_size(0)) { + int atom = groupParticles[firstIndex+index]; + real weight = groupWeights[firstIndex+index]; + atom_add(&atomForce[atom], (long) (fx*weight)); + atom_add(&atomForce[atom+PADDED_NUM_ATOMS], (long) (fy*weight)); + atom_add(&atomForce[atom+2*PADDED_NUM_ATOMS], (long) (fz*weight)); + } + } +} diff --git a/platforms/opencl/src/kernels/customGBEnergyN2.cl b/platforms/opencl/src/kernels/customGBEnergyN2.cl index 4d99e9844e86d47a43320316cdb0462fd97b5be2..921cca5f9cd18d22b6a8f227e5f49ffec92e608a 100644 --- a/platforms/opencl/src/kernels/customGBEnergyN2.cl +++ b/platforms/opencl/src/kernels/customGBEnergyN2.cl @@ -16,7 +16,7 @@ __kernel void computeN2Energy( #else __global real4* restrict forceBuffers, #endif - __global real* restrict energyBuffer, __local real4* restrict local_force, + __global mixed* restrict energyBuffer, __local real4* restrict local_force, __global const real4* restrict posq, __local real4* restrict local_posq, __global const unsigned int* restrict exclusions, __global const ushort2* exclusionTiles, #ifdef USE_CUTOFF @@ -31,7 +31,7 @@ __kernel void computeN2Energy( const unsigned int warp = get_global_id(0)/TILE_SIZE; const unsigned int tgx = get_local_id(0) & (TILE_SIZE-1); const unsigned int tbx = get_local_id(0) - tgx; - real energy = 0; + mixed energy = 0; // First loop: process tiles that contain exclusions. diff --git a/platforms/opencl/src/kernels/customGBEnergyN2_cpu.cl b/platforms/opencl/src/kernels/customGBEnergyN2_cpu.cl index 5823c746c4e781c8363c92f450b6c9353a8773fb..687edc085d1549d5914937141e81f9117564cc2c 100644 --- a/platforms/opencl/src/kernels/customGBEnergyN2_cpu.cl +++ b/platforms/opencl/src/kernels/customGBEnergyN2_cpu.cl @@ -16,7 +16,7 @@ __kernel void computeN2Energy( #else __global real4* restrict forceBuffers, #endif - __global real* restrict energyBuffer, __local real4* restrict local_force, + __global mixed* restrict energyBuffer, __local real4* restrict local_force, __global const real4* restrict posq, __local real4* restrict local_posq, __global const unsigned int* restrict exclusions, __global const ushort2* exclusionTiles, #ifdef USE_CUTOFF @@ -27,7 +27,7 @@ __kernel void computeN2Energy( unsigned int numTiles #endif PARAMETER_ARGUMENTS) { - real energy = 0; + mixed energy = 0; // First loop: process tiles that contain exclusions. diff --git a/platforms/opencl/src/kernels/customGBEnergyPerParticle.cl b/platforms/opencl/src/kernels/customGBEnergyPerParticle.cl index 788a205be638883427a66f313d3508b644485e91..f93abd4d319f88b40296990011c65816c64ae41a 100644 --- a/platforms/opencl/src/kernels/customGBEnergyPerParticle.cl +++ b/platforms/opencl/src/kernels/customGBEnergyPerParticle.cl @@ -9,9 +9,9 @@ * Reduce the derivatives computed in the N^2 energy kernel, and compute all per-particle energy terms. */ -__kernel void computePerParticleEnergy(int bufferSize, int numBuffers, __global real4* restrict forceBuffers, __global real* restrict energyBuffer, __global const real4* restrict posq +__kernel void computePerParticleEnergy(int bufferSize, int numBuffers, __global real4* restrict forceBuffers, __global mixed* restrict energyBuffer, __global const real4* restrict posq PARAMETER_ARGUMENTS) { - real energy = 0; + mixed energy = 0; unsigned int index = get_global_id(0); while (index < NUM_ATOMS) { // Reduce the derivatives diff --git a/platforms/opencl/src/kernels/customHbondForce.cl b/platforms/opencl/src/kernels/customHbondForce.cl index f171d41954325b58f563c6d0464c8de6aa36fcb2..c16cec66e43585d5079340e2e30fd0f8cc3db644 100644 --- a/platforms/opencl/src/kernels/customHbondForce.cl +++ b/platforms/opencl/src/kernels/customHbondForce.cl @@ -53,11 +53,11 @@ real4 computeCross(real4 vec1, real4 vec2) { /** * Compute forces on donors. */ -__kernel void computeDonorForces(__global real4* restrict forceBuffers, __global real* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict exclusions, +__kernel void computeDonorForces(__global real4* restrict forceBuffers, __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict exclusions, __global const int4* restrict donorAtoms, __global const int4* restrict acceptorAtoms, __global const int4* restrict donorBufferIndices, __local real4* posBuffer, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { - real energy = 0; + mixed energy = 0; real4 f1 = (real4) 0; real4 f2 = (real4) 0; real4 f3 = (real4) 0; @@ -142,7 +142,7 @@ __kernel void computeDonorForces(__global real4* restrict forceBuffers, __global /** * Compute forces on acceptors. */ -__kernel void computeAcceptorForces(__global real4* restrict forceBuffers, __global real* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict exclusions, +__kernel void computeAcceptorForces(__global real4* restrict forceBuffers, __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict exclusions, __global const int4* restrict donorAtoms, __global const int4* restrict acceptorAtoms, __global const int4* restrict acceptorBufferIndices, __local real4* restrict posBuffer, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { diff --git a/platforms/opencl/src/kernels/customManyParticle.cl b/platforms/opencl/src/kernels/customManyParticle.cl index f6842c3dc31e6417df469ed512a21f251ccf5859..1bb03a5319ef0f682ea2cf8b2807940f5f98118e 100644 --- a/platforms/opencl/src/kernels/customManyParticle.cl +++ b/platforms/opencl/src/kernels/customManyParticle.cl @@ -72,7 +72,7 @@ inline bool isInteractionExcluded(int atom1, int atom2, __global int* restrict e * Compute the interaction. */ __kernel void computeInteraction( - __global long* restrict forceBuffers, __global real* restrict energyBuffer, __global const real4* restrict posq, + __global long* restrict forceBuffers, __global mixed* restrict energyBuffer, __global const real4* restrict posq, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ #ifdef USE_CUTOFF , __global const int* restrict neighbors, __global const int* restrict neighborStartIndex @@ -84,7 +84,7 @@ __kernel void computeInteraction( , __global int* restrict exclusions, __global int* restrict exclusionStartIndex #endif PARAMETER_ARGUMENTS) { - real energy = 0.0f; + mixed energy = 0; // Loop over particles to be the first one in the set. diff --git a/platforms/opencl/src/kernels/customNonbondedGroups.cl b/platforms/opencl/src/kernels/customNonbondedGroups.cl index dc70e4bcaf0182b2dde25c0026a2a10d5d875fe3..8fa2ea9d85c7019e9945d7c46363518e7b9a4df7 100644 --- a/platforms/opencl/src/kernels/customNonbondedGroups.cl +++ b/platforms/opencl/src/kernels/customNonbondedGroups.cl @@ -42,14 +42,14 @@ __kernel void computeInteractionGroups( #else __global real4* restrict forceBuffers, #endif - __global real* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict groupData, + __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const int4* restrict groupData, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ PARAMETER_ARGUMENTS) { const unsigned int totalWarps = get_global_size(0)/TILE_SIZE; const unsigned int warp = get_global_id(0)/TILE_SIZE; // global warpIndex const unsigned int tgx = get_local_id(0) & (TILE_SIZE-1); // index within the warp const unsigned int tbx = get_local_id(0) - tgx; // block warpIndex - real energy = 0.0f; + mixed energy = 0; __local AtomData localData[LOCAL_MEMORY_SIZE]; const unsigned int startTile = FIRST_TILE+warp*(LAST_TILE-FIRST_TILE)/totalWarps; diff --git a/platforms/opencl/src/kernels/ewald.cl b/platforms/opencl/src/kernels/ewald.cl index 90b0b25077a42590111456634560acc1bb2c81a2..de5769375657a70dd366ecbd0887c28db63a7e99 100644 --- a/platforms/opencl/src/kernels/ewald.cl +++ b/platforms/opencl/src/kernels/ewald.cl @@ -6,13 +6,13 @@ real2 multofReal2(real2 a, real2 b) { * Precompute the cosine and sine sums which appear in each force term. */ -__kernel void calculateEwaldCosSinSums(__global real* restrict energyBuffer, __global const real4* restrict posq, __global real2* restrict cosSinSum, real4 reciprocalPeriodicBoxSize, real reciprocalCoefficient) { +__kernel void calculateEwaldCosSinSums(__global mixed* restrict energyBuffer, __global const real4* restrict posq, __global real2* restrict cosSinSum, real4 reciprocalPeriodicBoxSize, real reciprocalCoefficient) { const unsigned int ksizex = 2*KMAX_X-1; const unsigned int ksizey = 2*KMAX_Y-1; const unsigned int ksizez = 2*KMAX_Z-1; const unsigned int totalK = ksizex*ksizey*ksizez; unsigned int index = get_global_id(0); - real energy = 0.0f; + mixed energy = 0; while (index < (KMAX_Y-1)*ksizez+KMAX_Z) index += get_global_size(0); while (index < totalK) { diff --git a/platforms/opencl/src/kernels/gbsaObc.cl b/platforms/opencl/src/kernels/gbsaObc.cl index a34c54c911265c6cef72b0aa64c2186ef1f1a48e..306965b6cd5e8a0756122a828ea04466a40e8620 100644 --- a/platforms/opencl/src/kernels/gbsaObc.cl +++ b/platforms/opencl/src/kernels/gbsaObc.cl @@ -387,7 +387,7 @@ __kernel void computeGBSAForce1( #else __global real4* restrict forceBuffers, __global real* restrict global_bornForce, #endif - __global real* restrict energyBuffer, __global const real4* restrict posq, __global const real* restrict global_bornRadii, + __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const real* restrict global_bornRadii, #ifdef USE_CUTOFF __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, __global const real4* restrict blockCenter, @@ -400,7 +400,7 @@ __kernel void computeGBSAForce1( const unsigned int warp = get_global_id(0)/TILE_SIZE; const unsigned int tgx = get_local_id(0) & (TILE_SIZE-1); const unsigned int tbx = get_local_id(0) - tgx; - real energy = 0.0f; + mixed energy = 0; __local AtomData2 localData[FORCE_WORK_GROUP_SIZE]; // First loop: process tiles that contain exclusions. diff --git a/platforms/opencl/src/kernels/gbsaObcReductions.cl b/platforms/opencl/src/kernels/gbsaObcReductions.cl index acfa8d9d1afad2f1d6f6456e7804ae6342f66d51..5107c1a9a8f29fe807f8646076566d65472308ef 100644 --- a/platforms/opencl/src/kernels/gbsaObcReductions.cl +++ b/platforms/opencl/src/kernels/gbsaObcReductions.cl @@ -50,8 +50,8 @@ __kernel void reduceBornForce(int bufferSize, int numBuffers, __global real* bor #ifdef SUPPORTS_64_BIT_ATOMICS __global const long* restrict bornForceIn, #endif - __global real* restrict energyBuffer, __global const float2* restrict params, __global const real* restrict bornRadii, __global const real* restrict obcChain) { - real energy = 0.0f; + __global mixed* restrict energyBuffer, __global const float2* restrict params, __global const real* restrict bornRadii, __global const real* restrict obcChain) { + mixed energy = 0; unsigned int index = get_global_id(0); while (index < NUM_ATOMS) { // Sum the Born force diff --git a/platforms/opencl/src/kernels/gbsaObc_cpu.cl b/platforms/opencl/src/kernels/gbsaObc_cpu.cl index 4d8fe05c0acb5b3bd6f24523847dbc38dea00de2..3cdd81a2473ebc4e5705696be4fb84c180af5f3b 100644 --- a/platforms/opencl/src/kernels/gbsaObc_cpu.cl +++ b/platforms/opencl/src/kernels/gbsaObc_cpu.cl @@ -409,7 +409,7 @@ __kernel void computeGBSAForce1( #else __global real4* restrict forceBuffers, __global real* restrict global_bornForce, #endif - __global real* restrict energyBuffer, __global const real4* restrict posq, __global const real* restrict global_bornRadii, + __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const real* restrict global_bornRadii, #ifdef USE_CUTOFF __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, __global const real4* restrict blockCenter, @@ -418,7 +418,7 @@ __kernel void computeGBSAForce1( unsigned int numTiles, #endif __global const ushort2* exclusionTiles) { - real energy = 0.0f; + mixed energy = 0; __local AtomData2 localData[TILE_SIZE]; // First loop: process tiles that contain exclusions. diff --git a/platforms/opencl/src/kernels/nonbonded.cl b/platforms/opencl/src/kernels/nonbonded.cl index 88bdf0e3d2d314ba1ef9ba52eebf246c10023fab..23c85ecb30bef52553f962e1829f2726c70b843d 100644 --- a/platforms/opencl/src/kernels/nonbonded.cl +++ b/platforms/opencl/src/kernels/nonbonded.cl @@ -22,10 +22,10 @@ __kernel void computeNonbonded( #else __global real4* restrict forceBuffers, #endif - __global real* restrict energyBuffer, __global const real4* restrict posq, __global const unsigned int* restrict exclusions, + __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const unsigned int* restrict exclusions, __global const ushort2* restrict exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices #ifdef USE_CUTOFF - , __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, + , __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, __global const real4* restrict blockCenter, __global const real4* restrict blockSize, __global const int* restrict interactingAtoms #endif @@ -34,11 +34,11 @@ __kernel void computeNonbonded( const unsigned int warp = get_global_id(0)/TILE_SIZE; const unsigned int tgx = get_local_id(0) & (TILE_SIZE-1); const unsigned int tbx = get_local_id(0) - tgx; - real energy = 0; + mixed energy = 0; __local AtomData localData[FORCE_WORK_GROUP_SIZE]; // First loop: process tiles that contain exclusions. - + const unsigned int firstExclusionTile = FIRST_EXCLUSION_TILE+warp*(LAST_EXCLUSION_TILE-FIRST_EXCLUSION_TILE)/totalWarps; const unsigned int lastExclusionTile = FIRST_EXCLUSION_TILE+(warp+1)*(LAST_EXCLUSION_TILE-FIRST_EXCLUSION_TILE)/totalWarps; for (int pos = firstExclusionTile; pos < lastExclusionTile; pos++) { @@ -87,11 +87,13 @@ __kernel void computeNonbonded( real tempEnergy = 0; COMPUTE_INTERACTION energy += 0.5f*tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC force.xyz -= delta.xyz*dEdR; #else force.xyz -= dEdR1.xyz; #endif +#endif #ifdef USE_EXCLUSIONS excl >>= 1; #endif @@ -100,7 +102,7 @@ __kernel void computeNonbonded( } else { // This is an off-diagonal tile. - + const unsigned int localAtomIndex = get_local_id(0); unsigned int j = y*TILE_SIZE + tgx; real4 tempPosq = posq[j]; @@ -126,7 +128,7 @@ __kernel void computeNonbonded( #endif real r2 = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; #ifdef PRUNE_BY_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; @@ -144,6 +146,7 @@ __kernel void computeNonbonded( real tempEnergy = 0; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta.xyz *= dEdR; force.xyz -= delta.xyz; @@ -156,6 +159,7 @@ __kernel void computeNonbonded( localData[tbx+tj].fy += dEdR2.y; localData[tbx+tj].fz += dEdR2.z; #endif +#endif #ifdef PRUNE_BY_CUTOFF } #endif @@ -169,6 +173,7 @@ __kernel void computeNonbonded( // Write results. +#ifdef INCLUDE_FORCES #ifdef SUPPORTS_64_BIT_ATOMICS unsigned int offset = x*TILE_SIZE + tgx; atom_add(&forceBuffers[offset], (long) (force.x*0x100000000)); @@ -186,6 +191,7 @@ __kernel void computeNonbonded( forceBuffers[offset1].xyz += force.xyz; if (x != y) forceBuffers[offset2] += (real4) (localData[get_local_id(0)].fx, localData[get_local_id(0)].fy, localData[get_local_id(0)].fz, 0.0f); +#endif #endif } @@ -213,7 +219,7 @@ __kernel void computeNonbonded( bool includeTile = true; // Extract the coordinates of this tile. - + int x, y; bool singlePeriodicCopy = false; #ifdef USE_CUTOFF @@ -245,7 +251,7 @@ __kernel void computeNonbonded( } else skipTiles[get_local_id(0)] = end; - skipBase += TILE_SIZE; + skipBase += TILE_SIZE; currentSkipIndex = tbx; SYNC_WARPS; } @@ -300,7 +306,7 @@ __kernel void computeNonbonded( real4 delta = (real4) (posq2.xyz - posq1.xyz, 0); real r2 = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; #ifdef PRUNE_BY_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; @@ -318,6 +324,7 @@ __kernel void computeNonbonded( real tempEnergy = 0; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta.xyz *= dEdR; force.xyz -= delta.xyz; @@ -330,6 +337,7 @@ __kernel void computeNonbonded( localData[tbx+tj].fy += dEdR2.y; localData[tbx+tj].fz += dEdR2.z; #endif +#endif #ifdef PRUNE_BY_CUTOFF } #endif @@ -352,7 +360,7 @@ __kernel void computeNonbonded( #endif real r2 = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; #ifdef PRUNE_BY_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; @@ -370,6 +378,7 @@ __kernel void computeNonbonded( real tempEnergy = 0; COMPUTE_INTERACTION energy += tempEnergy; +#ifdef INCLUDE_FORCES #ifdef USE_SYMMETRIC delta.xyz *= dEdR; force.xyz -= delta.xyz; @@ -382,6 +391,7 @@ __kernel void computeNonbonded( localData[tbx+tj].fy += dEdR2.y; localData[tbx+tj].fz += dEdR2.z; #endif +#endif #ifdef PRUNE_BY_CUTOFF } #endif @@ -392,6 +402,7 @@ __kernel void computeNonbonded( // Write results. +#ifdef INCLUDE_FORCES #ifdef USE_CUTOFF unsigned int atom2 = atomIndices[get_local_id(0)]; #else @@ -412,9 +423,12 @@ __kernel void computeNonbonded( forceBuffers[offset1].xyz += force.xyz; if (atom2 < PADDED_NUM_ATOMS) forceBuffers[offset2] += (real4) (localData[get_local_id(0)].fx, localData[get_local_id(0)].fy, localData[get_local_id(0)].fz, 0.0f); +#endif #endif } pos++; } +#ifdef INCLUDE_ENERGY energyBuffer[get_global_id(0)] += energy; +#endif } diff --git a/platforms/opencl/src/kernels/nonbonded_cpu.cl b/platforms/opencl/src/kernels/nonbonded_cpu.cl index f99fa18012ca3e5f0b7312fd6b4ad83cc092a415..11f6531963f25894e5347937cd4449a29afa88e1 100644 --- a/platforms/opencl/src/kernels/nonbonded_cpu.cl +++ b/platforms/opencl/src/kernels/nonbonded_cpu.cl @@ -19,19 +19,19 @@ __kernel void computeNonbonded( #else __global real4* restrict forceBuffers, #endif - __global real* restrict energyBuffer, __global const real4* restrict posq, __global const unsigned int* restrict exclusions, + __global mixed* restrict energyBuffer, __global const real4* restrict posq, __global const unsigned int* restrict exclusions, __global const ushort2* restrict exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices #ifdef USE_CUTOFF - , __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, + , __global const int* restrict tiles, __global const unsigned int* restrict interactionCount, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, __global const real4* restrict blockCenter, __global const real4* restrict blockSize, __global const int* restrict interactingAtoms #endif PARAMETER_ARGUMENTS) { - real energy = 0; + mixed energy = 0; __local AtomData localData[TILE_SIZE]; // First loop: process tiles that contain exclusions. - + const unsigned int firstExclusionTile = FIRST_EXCLUSION_TILE+get_group_id(0)*(LAST_EXCLUSION_TILE-FIRST_EXCLUSION_TILE)/get_num_groups(0); const unsigned int lastExclusionTile = FIRST_EXCLUSION_TILE+(get_group_id(0)+1)*(LAST_EXCLUSION_TILE-FIRST_EXCLUSION_TILE)/get_num_groups(0); for (int pos = firstExclusionTile; pos < lastExclusionTile; pos++) { @@ -70,7 +70,7 @@ __kernel void computeNonbonded( #endif real r2 = dot(delta.xyz, delta.xyz); #ifdef USE_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; @@ -138,7 +138,7 @@ __kernel void computeNonbonded( #endif real r2 = dot(delta.xyz, delta.xyz); #ifdef USE_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; @@ -228,18 +228,18 @@ __kernel void computeNonbonded( while (pos < end) { const bool hasExclusions = false; bool includeTile = true; - + // Extract the coordinates of this tile. - + int x, y; bool singlePeriodicCopy = false; #ifdef USE_CUTOFF if (numTiles <= maxTiles) { x = tiles[pos]; real4 blockSizeX = blockSize[x]; - singlePeriodicCopy = (0.5f*periodicBoxSize.x-blockSizeX.x >= CUTOFF && - 0.5f*periodicBoxSize.y-blockSizeX.y >= CUTOFF && - 0.5f*periodicBoxSize.z-blockSizeX.z >= CUTOFF); + singlePeriodicCopy = (0.5f*periodicBoxSize.x-blockSizeX.x >= MAX_CUTOFF && + 0.5f*periodicBoxSize.y-blockSizeX.y >= MAX_CUTOFF && + 0.5f*periodicBoxSize.z-blockSizeX.z >= MAX_CUTOFF); } else #endif @@ -304,7 +304,7 @@ __kernel void computeNonbonded( real4 posq2 = (real4) (localData[j].x, localData[j].y, localData[j].z, localData[j].q); real4 delta = (real4) (posq2.xyz - posq1.xyz, 0); real r2 = dot(delta.xyz, delta.xyz); - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { real invR = RSQRT(r2); real r = r2*invR; unsigned int atom2 = j; @@ -367,7 +367,7 @@ __kernel void computeNonbonded( #endif real r2 = dot(delta.xyz, delta.xyz); #ifdef USE_CUTOFF - if (r2 < CUTOFF_SQUARED) { + if (r2 < MAX_CUTOFF*MAX_CUTOFF) { #endif real invR = RSQRT(r2); real r = r2*invR; diff --git a/platforms/opencl/src/kernels/pme.cl b/platforms/opencl/src/kernels/pme.cl index 1dc407932cde572d458d9cead04badddc650cefe..355481dbca86ec01af72f6279871f5a4c89f97f3 100644 --- a/platforms/opencl/src/kernels/pme.cl +++ b/platforms/opencl/src/kernels/pme.cl @@ -325,14 +325,14 @@ __kernel void reciprocalConvolution(__global real2* restrict pmeGrid, __global c } } -__kernel void gridEvaluateEnergy(__global real2* restrict pmeGrid, __global real* restrict energyBuffer, +__kernel void gridEvaluateEnergy(__global real2* restrict pmeGrid, __global mixed* restrict energyBuffer, __global const real* restrict pmeBsplineModuliX, __global const real* restrict pmeBsplineModuliY, __global const real* restrict pmeBsplineModuliZ, real4 recipBoxVecX, real4 recipBoxVecY, real4 recipBoxVecZ) { // R2C stores into a half complex matrix where the last dimension is cut by half const unsigned int gridSize = GRID_SIZE_X*GRID_SIZE_Y*GRID_SIZE_Z; const real recipScaleFactor = (1.0f/M_PI)*recipBoxVecX.x*recipBoxVecY.y*recipBoxVecZ.z; - real energy = 0; + mixed energy = 0; for (int index = get_global_id(0); index < gridSize; index += get_global_size(0)) { // real indices int kx = index/(GRID_SIZE_Y*(GRID_SIZE_Z)); diff --git a/platforms/opencl/staticTarget/CMakeLists.txt b/platforms/opencl/staticTarget/CMakeLists.txt index d18ae06d72386d22893329fc7ffd0418ba7d2780..8e9cb99c95b86b7d077f65608990cf294428f74a 100644 --- a/platforms/opencl/staticTarget/CMakeLists.txt +++ b/platforms/opencl/staticTarget/CMakeLists.txt @@ -15,6 +15,6 @@ ADD_LIBRARY(${STATIC_TARGET} STATIC ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${STATIC_TARGET} ${OPENMM_LIBRARY_NAME} ${OPENCL_LIBRARIES} ${PTHREADS_LIB_STATIC}) #-DPTW32_STATIC_LIB only works for the windows pthreads. -SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_OPENCL_BUILDING_STATIC_LIBRARY -DPTW32_STATIC_LIB") +SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_OPENCL_BUILDING_STATIC_LIBRARY -DPTW32_STATIC_LIB") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${STATIC_TARGET}) diff --git a/platforms/opencl/tests/CMakeLists.txt b/platforms/opencl/tests/CMakeLists.txt index faf3bad7c1e60c31181ad6c699a4d33d5fd7cef8..ebceff45ee4e07e97e171e2b9a0e2a75e6f2926b 100644 --- a/platforms/opencl/tests/CMakeLists.txt +++ b/platforms/opencl/tests/CMakeLists.txt @@ -8,6 +8,11 @@ ENABLE_TESTING() INCLUDE_DIRECTORIES(${OPENCL_INCLUDE_DIR}) SET(OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS TRUE CACHE BOOL "Whether to build double precision versions of OpenCL test cases") +set(OPENCL_TEST_PLATFORM_INDEX -1 CACHE STRING "OpenCL platform index used for running OpenCL test cases. The default, -1, selects the fastest platform") +set(OPENCL_TEST_DEVICE_INDEX -1 CACHE STRING "OpenCL device index used for running OpenCL test cases. The default, -1, selects the fastest device") +MARK_AS_ADVANCED(OPENCL_TEST_PLATFORM_INDEX) +MARK_AS_ADVANCED(OPENCL_TEST_DEVICE_INDEX) + SET( INCLUDE_SERIALIZATION FALSE ) #SET( INCLUDE_SERIALIZATION TRUE ) @@ -25,12 +30,12 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # Link with shared library ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") - ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) + ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single ${OPENCL_TEST_PLATFORM_INDEX} ${OPENCL_TEST_DEVICE_INDEX}) IF (OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS) - ADD_TEST(${TEST_ROOT}Mixed ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} mixed) - ADD_TEST(${TEST_ROOT}Double ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} double) + ADD_TEST(${TEST_ROOT}Mixed ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} mixed ${OPENCL_TEST_PLATFORM_INDEX} ${OPENCL_TEST_DEVICE_INDEX}) + ADD_TEST(${TEST_ROOT}Double ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} double ${OPENCL_TEST_PLATFORM_INDEX} ${OPENCL_TEST_DEVICE_INDEX}) ENDIF(OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS) # Link with static library diff --git a/platforms/opencl/tests/OpenCLTests.h b/platforms/opencl/tests/OpenCLTests.h new file mode 100644 index 0000000000000000000000000000000000000000..69bba2b332482ae1a1f82523d08a76dbbee4e067 --- /dev/null +++ b/platforms/opencl/tests/OpenCLTests.h @@ -0,0 +1,47 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "OpenCLPlatform.h" +#include + +OpenMM::OpenCLPlatform platform; + +void initializeTests(int argc, char* argv[]) { + if (argc > 1) + platform.setPropertyDefaultValue("OpenCLPrecision", std::string(argv[1])); + if (argc > 2) + platform.setPropertyDefaultValue("OpenCLPlatformIndex", std::string(argv[2])); + if (argc > 3) + platform.setPropertyDefaultValue("OpenCLDeviceIndex", std::string(argv[3])); +} diff --git a/platforms/opencl/tests/TestOpenCLAndersenThermostat.cpp b/platforms/opencl/tests/TestOpenCLAndersenThermostat.cpp index aefa830980fc54794c94dc0486bf6cde586ec10c..33ba5dafe6d9d274d909fcc9307d938cbea9db16 100644 --- a/platforms/opencl/tests/TestOpenCLAndersenThermostat.cpp +++ b/platforms/opencl/tests/TestOpenCLAndersenThermostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,192 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of AndersenThermostat. - */ +#include "OpenCLTests.h" +#include "TestAndersenThermostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 5000; - System system; - VerletIntegrator integrator(0.003); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermstat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermstat); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 15000; - System system; - VerletIntegrator integrator(0.004); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - system.addConstraint(0, 1, 1); - system.addConstraint(1, 2, 1); - system.addConstraint(2, 3, 1); - system.addConstraint(3, 0, 1); - system.addConstraint(4, 5, 1); - system.addConstraint(5, 6, 1); - system.addConstraint(6, 7, 1); - system.addConstraint(7, 4, 1); - AndersenThermostat* thermstat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermstat); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(1, 1, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(1, 0, 1); - positions[5] = Vec3(1, 1, 1); - positions[6] = Vec3(0, 1, 1); - positions[7] = Vec3(0, 0, 1); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= numSteps; - double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - thermostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - thermostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } +void runPlatformTests() { } - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testTemperature(); - testConstraints(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLBrownianIntegrator.cpp b/platforms/opencl/tests/TestOpenCLBrownianIntegrator.cpp index 75d6043cedc598747508d87df1dc739bc2549aef..adf6ca352c3e6a747cf79b2af587c0998306aca4 100644 --- a/platforms/opencl/tests/TestOpenCLBrownianIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLBrownianIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,253 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -#include "openmm/System.h" +#include "OpenCLTests.h" +#include "TestBrownianIntegrator.h" - -/** - * This tests the OpenCL implementation of BrownianIntegrator. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/BrownianIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - double dt = 0.01; - BrownianIntegrator integrator(0, 0.1, dt); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply an overdamped harmonic oscillator, so compare it to the analytical solution. - - double rate = 2*1.0/(0.1*2.0); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-rate*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - if (i > 0) { - double expectedSpeed = -0.5*rate*std::exp(-rate*(time-0.5*dt)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.11); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.11); - } - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const int numBonds = numParticles-1; - const double temp = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - for (int i = 0; i < numParticles; ++i) - system.addParticle(2.0); - for (int i = 0; i < numBonds; ++i) - forceField->addBond(i, i+1, 1.0, 5.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3(i, 0, 0); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double pe = 0.0; - const int steps = 50000; - for (int i = 0; i < steps; ++i) { - State state = context.getState(State::Energy); - pe += state.getPotentialEnergy(); - integrator.step(1); - } - pe /= steps; - double expected = 0.5*numBonds*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, pe, 0.1*expected); -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 20.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i, 0, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - BrownianIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } - diff --git a/platforms/opencl/tests/TestOpenCLCMAPTorsionForce.cpp b/platforms/opencl/tests/TestOpenCLCMAPTorsionForce.cpp index 10deec8579b240f5a107868ec29a1cc0d253c2a7..d519c6c1a5874e697ddcf6a48aa2ab86e6dea2a6 100644 --- a/platforms/opencl/tests/TestOpenCLCMAPTorsionForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCMAPTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,150 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CMAPTorsionForce. - */ +#include "OpenCLTests.h" +#include "TestCMAPTorsionForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CMAPTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testCMAPTorsions() { - const int mapSize = 36; - - // Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion - // that approximates the same force. - - System system1; - for (int i = 0; i < 5; i++) - system1.addParticle(1.0); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 2, M_PI/4, 1.5); - periodic->addTorsion(1, 2, 3, 4, 3, M_PI/3, 2.0); - system1.addForce(periodic); - System system2; - for (int i = 0; i < 5; i++) - system2.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = 1.5*(1+cos(2*angle1-M_PI/4)); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 2.0*(1+cos(3*angle2-M_PI/3)); - mapEnergy[i+j*mapSize] = energy1+energy2; - } - } - cmap->addMap(mapSize, mapEnergy); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system2.addForce(cmap); - - // Set the atoms in various positions, and verify that both systems give equal forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(system1, integrator1, platform); - Context c2(system2, integrator2, platform); - for (int i = 0; i < 50; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < system1.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 0.05); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), 1e-3); - } -} - -void testChangingParameters() { - // Create a system with two maps and one torsion. - - const int mapSize = 8; - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy1(mapSize*mapSize); - vector mapEnergy2(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = cos(angle1); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 10*sin(angle2); - mapEnergy1[i+j*mapSize] = energy1+energy2; - mapEnergy2[i+j*mapSize] = energy1-energy2; - } - } - cmap->addMap(mapSize, mapEnergy1); - cmap->addMap(mapSize, mapEnergy2); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system.addForce(cmap); - - // Set particle positions so angle1=0 and angle2=PI/4. - - vector positions(5); - positions[0] = Vec3(0, 0, 1); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 1); - positions[4] = Vec3(0.5, -0.5, 1); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Check that the energy is correct. - - double energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(1+10*sin(M_PI/4), energy, 1e-5); - - // Modify the parameters. - - cmap->setTorsionParameters(0, 1, 0, 1, 2, 3, 1, 2, 3, 4); - for (int i = 0; i < mapSize*mapSize; i++) - mapEnergy2[i] *= 2.0; - cmap->setMapParameters(1, mapSize, mapEnergy2); - cmap->updateParametersInContext(context); - - // See if the results are correct. - - energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(2-20*sin(M_PI/4), energy, 1e-5); +void runPlatformTests() { } - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testCMAPTorsions(); - testChangingParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLCMMotionRemover.cpp b/platforms/opencl/tests/TestOpenCLCMMotionRemover.cpp index c0aa145c57afa0e99b72e815c3b3dbaf5051a67f..d8d2a17574f8c1b511a8a02b1fbaec9156ad2d1c 100644 --- a/platforms/opencl/tests/TestOpenCLCMMotionRemover.cpp +++ b/platforms/opencl/tests/TestOpenCLCMMotionRemover.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,95 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of AndersenThermostat. - */ +#include "OpenCLTests.h" +#include "TestCMMotionRemover.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CMMotionRemover.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -Vec3 calcCM(const vector& values, System& system) { - Vec3 cm; - for (int j = 0; j < system.getNumParticles(); ++j) { - cm[0] += values[j][0]*system.getParticleMass(j); - cm[1] += values[j][1]*system.getParticleMass(j); - cm[2] += values[j][2]*system.getParticleMass(j); - } - return cm; +void runPlatformTests() { } - -void testMotionRemoval(Integrator& integrator) { - const int numParticles = 8; - System system; - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(2, 3, 2.0, 0.5); - system.addForce(bonds); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i+1); - nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(nonbonded); - CMMotionRemover* remover = new CMMotionRemover(); - system.addForce(remover); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Now run it for a while and see if the center of mass remains fixed. - - Vec3 cmPos = calcCM(context.getState(State::Positions).getPositions(), system); - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Velocities); - Vec3 pos = calcCM(state.getPositions(), system); - ASSERT_EQUAL_VEC(cmPos, pos, 1e-2); - Vec3 vel = calcCM(state.getVelocities(), system); - if (i > 0) { - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), vel, 1e-2); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - LangevinIntegrator langevin(0.0, 1e-5, 0.01); - testMotionRemoval(langevin); - VerletIntegrator verlet(0.01); - testMotionRemoval(verlet); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLCheckpoints.cpp b/platforms/opencl/tests/TestOpenCLCheckpoints.cpp index a03a57d76757d0bef13957702b14225e8a0d3bb0..97c440afc24c9a12f627754c1f2bf4621e922d4f 100644 --- a/platforms/opencl/tests/TestOpenCLCheckpoints.cpp +++ b/platforms/opencl/tests/TestOpenCLCheckpoints.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2013 Stanford University and the Authors. * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,45 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests creating and loading checkpoints with the OpenCL platform. - */ - -#include "OpenCLPlatform.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void compareStates(State& s1, State& s2) { - ASSERT_EQUAL_TOL(s1.getTime(), s2.getTime(), TOL); - int numParticles = s1.getPositions().size(); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s2.getVelocities()[i], TOL); - Vec3 a1, b1, c1, a2, b2, c2; - s1.getPeriodicBoxVectors(a1, b1, c1); - s2.getPeriodicBoxVectors(a2, b2, c2); - ASSERT_EQUAL_VEC(a1, a2, TOL); - ASSERT_EQUAL_VEC(b1, b2, TOL); - ASSERT_EQUAL_VEC(c1, c2, TOL); - for (map::const_iterator iter = s1.getParameters().begin(); iter != s1.getParameters().end(); ++iter) - ASSERT_EQUAL(iter->second, (*s2.getParameters().find(iter->first)).second); - } -} +#include "OpenCLTests.h" +#include "TestCheckpoints.h" void testCheckpoint() { const int numParticles = 100; @@ -159,71 +122,6 @@ void testCheckpoint() { compareStates(s6, s8); } -void testSetState() { - const int numParticles = 10; - const double boxSize = 3.0; - const double temperature = 200.0; - System system; - system.addForce(new AndersenThermostat(0.0, 100.0)); - NonbondedForce* nonbonded = new NonbondedForce(); - system.addForce(nonbonded); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - } - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature); - - // Run for a little while. - - integrator.step(100); - - // Record the current state. - - State s1 = context.getState(State::Positions | State::Velocities | State::Parameters); - - // Continue the simulation for a few more steps and record a partial state. - - integrator.step(10); - State s2 = context.getState(State::Positions); - - // Restore the original state and see if everything gets restored correctly. - - context.setPeriodicBoxVectors(Vec3(2*boxSize, 0, 0), Vec3(0, 2*boxSize, 0), Vec3(0, 0, 2*boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature+10); - context.setState(s1); - State s3 = context.getState(State::Positions | State::Velocities | State::Parameters); - compareStates(s1, s3); - - // Set the partial state and see if the correct things were set. - - context.setState(s2); - State s4 = context.getState(State::Positions | State::Velocities | State::Parameters); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s2.getPositions()[i], s4.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s4.getVelocities()[i], TOL); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testCheckpoint(); - testSetState(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testCheckpoint(); } diff --git a/platforms/opencl/tests/TestOpenCLCustomAngleForce.cpp b/platforms/opencl/tests/TestOpenCLCustomAngleForce.cpp index 19a4befc9ef3bac2d7e657e0815886a1581e88e4..30757bc2ab51cb2e5304debd45dda9d432b486d2 100644 --- a/platforms/opencl/tests/TestOpenCLCustomAngleForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomAngleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,109 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomAngleForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomAngleForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -static OpenCLPlatform platform; - -void testAngles() { - // Create a system using a CustomAngleForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomAngleForce* custom = new CustomAngleForce("scale*k*(theta-theta0)^2"); - custom->addPerAngleParameter("theta0"); - custom->addPerAngleParameter("k"); - custom->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - custom->addAngle(0, 1, 2, parameters); - parameters[0] = 2.0; - parameters[1] = 0.5; - custom->addAngle(1, 2, 3, parameters); - customSystem.addForce(custom); - - // Create an identical system using a HarmonicAngleForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - HarmonicAngleForce* harmonic = new HarmonicAngleForce(); - harmonic->addAngle(0, 1, 2, 1.5, 0.8); - harmonic->addAngle(1, 2, 3, 2.0, 0.5); - harmonicSystem.addForce(harmonic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(4); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - custom->setAngleParameters(0, 0, 1, 2, parameters); - parameters[0] = 2.1; - parameters[1] = 0.6; - custom->setAngleParameters(1, 1, 2, 3, parameters); - custom->updateParametersInContext(c1); - harmonic->setAngleParameters(0, 0, 1, 2, 1.6, 0.9); - harmonic->setAngleParameters(1, 1, 2, 3, 2.1, 0.6); - harmonic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} +#include "OpenCLTests.h" +#include "TestCustomAngleForce.h" void testParallelComputation() { System system; @@ -162,20 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testAngles(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - - - diff --git a/platforms/opencl/tests/TestOpenCLCustomBondForce.cpp b/platforms/opencl/tests/TestOpenCLCustomBondForce.cpp index 357b674b87ae35aeb615ba4b454f1a38c271a1a0..8153c0ea6db148c1aa42b667873f8150041f5753 100644 --- a/platforms/opencl/tests/TestOpenCLCustomBondForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,111 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomBondForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomBondForce* forceField = new CustomBondForce("scale*k*(r-r0)^2"); - forceField->addPerBondParameter("r0"); - forceField->addPerBondParameter("k"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - forceField->addBond(0, 1, parameters); - parameters[0] = 1.2; - parameters[1] = 0.7; - forceField->addBond(1, 2, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - forceField->setBondParameters(0, 0, 1, parameters); - parameters[0] = 1.3; - parameters[1] = 0.8; - forceField->setBondParameters(1, 1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomBondForce* forceField = new CustomBondForce("(a+b+c+d+e+f+g+h+i)*r"); - forceField->addPerBondParameter("a"); - forceField->addPerBondParameter("b"); - forceField->addPerBondParameter("c"); - forceField->addPerBondParameter("d"); - forceField->addPerBondParameter("e"); - forceField->addPerBondParameter("f"); - forceField->addPerBondParameter("g"); - forceField->addPerBondParameter("h"); - forceField->addPerBondParameter("i"); - vector parameters(forceField->getNumPerBondParameters()); - for (int i = 0; i < (int) parameters.size(); i++) - parameters[i] = i; - forceField->addBond(0, 1, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.5, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f = 1+2+3+4+5+6+7+8; - ASSERT_EQUAL_VEC(Vec3(0, f, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(f*2.5, state.getPotentialEnergy(), TOL); -} +#include "OpenCLTests.h" +#include "TestCustomBondForce.h" void testParallelComputation() { System system; @@ -164,19 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testBonds(); - testManyParameters(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/opencl/tests/TestOpenCLCustomCentroidBondForce.cpp b/platforms/opencl/tests/TestOpenCLCustomCentroidBondForce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4b6615a22b42cd9e2a669a9ee807a21772c0a1aa --- /dev/null +++ b/platforms/opencl/tests/TestOpenCLCustomCentroidBondForce.cpp @@ -0,0 +1,36 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "OpenCLTests.h" +#include "TestCustomCentroidBondForce.h" + +void runPlatformTests() { +} diff --git a/platforms/opencl/tests/TestOpenCLCustomCompoundBondForce.cpp b/platforms/opencl/tests/TestOpenCLCustomCompoundBondForce.cpp index 8e7d6fd82c563f001319436a0e5ee972d5033e04..5cc47af23dde37082b08a5f399c4646cd1e4f733 100644 --- a/platforms/opencl/tests/TestOpenCLCustomCompoundBondForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomCompoundBondForce.cpp @@ -29,145 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomCompoundBondForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testBond() { - // Create a system using a CustomCompoundBondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(4, "0.5*kb*((distance(p1,p2)-b0)^2+(distance(p2,p3)-b0)^2)+0.5*ka*(angle(p2,p3,p4)-a0)^2+kt*(1+cos(dihedral(p1,p2,p3,p4)-t0))"); - custom->addPerBondParameter("kb"); - custom->addPerBondParameter("ka"); - custom->addPerBondParameter("kt"); - custom->addPerBondParameter("b0"); - custom->addPerBondParameter("a0"); - custom->addPerBondParameter("t0"); - vector particles(4); - particles[0] = 0; - particles[1] = 1; - particles[2] = 3; - particles[3] = 2; - vector parameters(6); - parameters[0] = 1.5; - parameters[1] = 0.8; - parameters[2] = 0.6; - parameters[3] = 1.1; - parameters[4] = 2.9; - parameters[5] = 1.3; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - - // Create an identical system using standard forces. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.1, 1.5); - bonds->addBond(1, 3, 1.1, 1.5); - standardSystem.addForce(bonds); - HarmonicAngleForce* angles = new HarmonicAngleForce(); - angles->addAngle(1, 3, 2, 2.9, 0.8); - standardSystem.addForce(angles); - PeriodicTorsionForce* torsions = new PeriodicTorsionForce(); - torsions->addTorsion(0, 1, 3, 2, 1, 1.3, 0.6); - standardSystem.addForce(torsions); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - vector positions(4); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[3] = 1.3; - custom->setBondParameters(0, particles, parameters); - custom->updateParametersInContext(c1); - bonds->setBondParameters(0, 0, 1, 1.3, 1.6); - bonds->setBondParameters(1, 1, 3, 1.3, 1.6); - bonds->updateParametersInContext(c2); - { - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -void testPositionDependence() { - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(2, "scale1*distance(p1,p2)+scale2*x1+2*y2"); - custom->addGlobalParameter("scale1", 0.3); - custom->addGlobalParameter("scale2", 0.2); - vector particles(2); - particles[0] = 1; - particles[1] = 0; - vector parameters; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - vector positions(2); - positions[0] = Vec3(1.5, 1, 0); - positions[1] = Vec3(0.5, 1, 0); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); - ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5); -} +#include "OpenCLTests.h" +#include "TestCustomCompoundBondForce.h" void testParallelComputation() { System system; @@ -202,165 +65,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testContinuous2DFunction() { - const int xsize = 10; - const int ysize = 11; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[0] = Vec3(x, y, 1.5); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1,z1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[0] = Vec3(x, y, z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y)*(1.0+z); - force[2] = -sin(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testMultipleBonds() { - // Two compound bonds using Urey-Bradley example from API doc - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(3, - "0.5*(kangle*(angle(p1,p2,p3)-theta0)^2+kbond*(distance(p1,p3)-r0)^2)"); - custom->addPerBondParameter("kangle"); - custom->addPerBondParameter("kbond"); - custom->addPerBondParameter("theta0"); - custom->addPerBondParameter("r0"); - vector parameters(4); - parameters[0] = 1.0; - parameters[1] = 1.0; - parameters[2] = 2 * M_PI / 3; - parameters[3] = sqrt(3.0) / 2; - vector particles0(3); - particles0[0] = 0; - particles0[1] = 1; - particles0[2] = 2; - vector particles1(3); - particles1[0] = 1; - particles1[1] = 2; - particles1[2] = 3; - custom->addBond(particles0, parameters); - custom->addBond(particles1, parameters); - customSystem.addForce(custom); - - vector positions(4); - positions[0] = Vec3(0, 0.5, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(0.5, 0, 0); - positions[3] = Vec3(0.6, 0, 0.4); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.199, state.getPotentialEnergy(), 1e-3); - vector forces(state.getForces()); - ASSERT_EQUAL_VEC(Vec3(-1.160, 0.112, 0.0), forces[0], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.927, 1.047, -0.638), forces[1], 1e-3); - ASSERT_EQUAL_VEC(Vec3(-0.543, -1.160, 0.721), forces[2], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.776, 0.0, -0.084), forces[3], 1e-3); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testBond(); - testPositionDependence(); - testParallelComputation(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testMultipleBonds(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/opencl/tests/TestOpenCLCustomExternalForce.cpp b/platforms/opencl/tests/TestOpenCLCustomExternalForce.cpp index 54ce2374de28c63157adc9eb7b185306e669efa8..d544018d0658fa6a48d1671e55c232ecb8376ff0 100644 --- a/platforms/opencl/tests/TestOpenCLCustomExternalForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomExternalForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,106 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomExternalForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" +#include "OpenCLTests.h" +#include "TestCustomExternalForce.h" #include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testForce() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomExternalForce* forceField = new CustomExternalForce("scale*(x+yscale*(y-y0)^2)"); - forceField->addPerParticleParameter("y0"); - forceField->addPerParticleParameter("yscale"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 0.5; - parameters[1] = 2.0; - forceField->addParticle(0, parameters); - parameters[0] = 1.5; - parameters[1] = 3.0; - forceField->addParticle(2, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 1); - positions[2] = Vec3(1, 0, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.0*2.0*1.5, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.0*1.5*1.5), state.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters[0] = 1.4; - parameters[1] = 3.5; - forceField->setParticleParameters(1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.5*2.0*1.4, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.5*1.4*1.4), state.getPotentialEnergy(), TOL); - } -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomExternalForce* forceField = new CustomExternalForce("xscale*(x-x0)^2+yscale*(y-y0)^2+zscale*(z-z0)^2"); - forceField->addPerParticleParameter("x0"); - forceField->addPerParticleParameter("y0"); - forceField->addPerParticleParameter("z0"); - forceField->addPerParticleParameter("xscale"); - forceField->addPerParticleParameter("yscale"); - forceField->addPerParticleParameter("zscale"); - vector parameters(6); - parameters[0] = 1.0; - parameters[1] = 2.0; - parameters[2] = 3.0; - parameters[3] = 0.1; - parameters[4] = 0.2; - parameters[5] = 0.3; - forceField->addParticle(0, parameters); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, -1, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2*0.1*1.0, 2*0.2*3.0, 2*0.3*3.0), forces[0], TOL); - ASSERT_EQUAL_TOL(0.1*1*1 + 0.2*3*3 + 0.3*3*3, state.getPotentialEnergy(), TOL); -} void testParallelComputation() { System system; @@ -161,21 +64,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testForce(); - testManyParameters(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - - - diff --git a/platforms/opencl/tests/TestOpenCLCustomGBForce.cpp b/platforms/opencl/tests/TestOpenCLCustomGBForce.cpp index d94e09351f5be05b78ebb5893f0dd93068f39e35..f5351d9fc225eb520f418fd118153b26bcfafaf2 100644 --- a/platforms/opencl/tests/TestOpenCLCustomGBForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomGBForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,453 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomGBForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomGBForce.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testOBC(GBSAOBCForce::NonbondedMethod obcMethod, CustomGBForce::NonbondedMethod customMethod) { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - const double cutoff = 2.0; - - // Create two systems: one with a GBSAOBCForce, and one using a CustomGBForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - GBSAOBCForce* obc = new GBSAOBCForce(); - CustomGBForce* custom = new CustomGBForce(); - obc->setCutoffDistance(cutoff); - custom->setCutoffDistance(cutoff); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("solventDielectric", obc->getSolventDielectric()); - custom->addGlobalParameter("soluteDielectric", obc->getSoluteDielectric()); - custom->addComputedValue("I", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=I*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - string invCutoffString = ""; - if (obcMethod != GBSAOBCForce::NoCutoff) { - stringstream s; - s<<(1.0/cutoff); - invCutoffString = s.str(); - } - custom->addEnergyTerm("138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2*("+invCutoffString+"-1/f);" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - obc->addParticle(1.0, 0.2, 0.5); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.5); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - obc->addParticle(1.0, 0.2, 0.8); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.8); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - obc->setNonbondedMethod(obcMethod); - custom->setNonbondedMethod(customMethod); - standardSystem.addForce(obc); - customSystem.addForce(custom); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - context1.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - context2.setVelocities(velocities); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } - - // Try changing the particle parameters and make sure it's still correct. - - for (int i = 0; i < numMolecules/2; i++) { - obc->setParticleParameters(2*i, 1.1, 0.3, 0.6); - params[0] = 1.1; - params[1] = 0.3; - params[2] = 0.6; - custom->setParticleParameters(2*i, params); - obc->setParticleParameters(2*i+1, -1.1, 0.2, 0.4); - params[0] = -1.1; - params[1] = 0.2; - params[2] = 0.4; - custom->setParticleParameters(2*i+1, params); - } - obc->updateParametersInContext(context1); - custom->updateParametersInContext(context2); - state1 = context1.getState(State::Forces | State::Energy); - state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testMembrane() { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - - // Create a system with an implicit membrane. - - System system; - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - CustomGBForce* custom = new CustomGBForce(); - custom->setCutoffDistance(2.0); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("thickness", 3); - custom->addGlobalParameter("solventDielectric", 78.3); - custom->addGlobalParameter("soluteDielectric", 1); - custom->addComputedValue("Imol", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("Imem", "(1/radius+2*log(2)/thickness)/(1+exp(7.2*(abs(z)+radius-0.5*thickness)))", CustomGBForce::SingleParticle); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=max(Imol,Imem)*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - custom->addEnergyTerm("-138.935456*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - system.addForce(custom); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-2; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); -} - -void testTabulatedFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "0", CustomGBForce::ParticlePair); - force->addEnergyTerm("fn(r)+1", CustomGBForce::ParticlePair); - force->addParticle(vector()); - force->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(std::sin(0.25*i)); - force->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -std::cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testMultipleChainRules() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "2*r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+1", CustomGBForce::SingleParticle); - force->addComputedValue("c", "2*b+a", CustomGBForce::SingleParticle); - force->addEnergyTerm("0.1*a+1*b+10*c", CustomGBForce::SingleParticle); // 0.1*(2*r) + 2*r+1 + 10*(3*a+2) = 0.2*r + 2*r+1 + 40*r+20+20*r = 62.2*r+21 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 5; i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(124.4, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-124.4, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(2*(62.2*i+21), state.getPotentialEnergy(), 0.02); - } -} - -void testPositionDependence() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+x*y", CustomGBForce::SingleParticle); - force->addEnergyTerm("b*z", CustomGBForce::SingleParticle); - force->addEnergyTerm("b1+b2", CustomGBForce::ParticlePair); // = 2*r+x1*y1+x2*y2 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - vector forces(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < 5; i++) { - positions[0] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - positions[1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - Vec3 delta = positions[0]-positions[1]; - double r = sqrt(delta.dot(delta)); - double energy = 2*r+positions[0][0]*positions[0][1]+positions[1][0]*positions[1][1]; - for (int j = 0; j < 2; j++) - energy += positions[j][2]*(r+positions[j][0]*positions[j][1]); - Vec3 force1(-(1+positions[0][2])*delta[0]/r-(1+positions[0][2])*positions[0][1]-(1+positions[1][2])*delta[0]/r, - -(1+positions[0][2])*delta[1]/r-(1+positions[0][2])*positions[0][0]-(1+positions[1][2])*delta[1]/r, - -(1+positions[0][2])*delta[2]/r-(r+positions[0][0]*positions[0][1])-(1+positions[1][2])*delta[2]/r); - Vec3 force2((1+positions[0][2])*delta[0]/r+(1+positions[1][2])*delta[0]/r-(1+positions[1][2])*positions[1][1], - (1+positions[0][2])*delta[1]/r+(1+positions[1][2])*delta[1]/r-(1+positions[1][2])*positions[1][0], - (1+positions[0][2])*delta[2]/r+(1+positions[1][2])*delta[2]/r-(r+positions[1][0]*positions[1][1])); - ASSERT_EQUAL_VEC(force1, forces[0], 1e-4); - ASSERT_EQUAL_VEC(force2, forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(2), positions3(2); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); - } -} - -void testExclusions() { - for (int i = 0; i < 4; i++) { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", i < 2 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addEnergyTerm("a", CustomGBForce::SingleParticle); - force->addEnergyTerm("(1+a1+a2)*r", i%2 == 0 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addParticle(vector()); - force->addParticle(vector()); - force->addExclusion(0, 1); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f, energy; - switch (i) - { - case 0: // e = 0 - f = 0; - energy = 0; - break; - case 1: // e = r - f = 1; - energy = 1; - break; - case 2: // e = 2r - f = 2; - energy = 2; - break; - case 3: // e = 3r + 2r^2 - f = 7; - energy = 5; - break; - default: - ASSERT(false); - } - ASSERT_EQUAL_VEC(Vec3(f, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-f, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = stepSize/norm; - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/stepSize, 1e-3*abs(state.getPotentialEnergy())); - } -} +#include "OpenCLTests.h" +#include "TestCustomGBForce.h" -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testOBC(GBSAOBCForce::NoCutoff, CustomGBForce::NoCutoff); - testOBC(GBSAOBCForce::CutoffNonPeriodic, CustomGBForce::CutoffNonPeriodic); - testOBC(GBSAOBCForce::CutoffPeriodic, CustomGBForce::CutoffPeriodic); - testMembrane(); - testTabulatedFunction(); - testMultipleChainRules(); - testPositionDependence(); - testExclusions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLCustomHbondForce.cpp b/platforms/opencl/tests/TestOpenCLCustomHbondForce.cpp index a990d23942afdb125b139af004aedf61185854d6..380fdf2e93e9c4946dec03a2628da3f39569f55f 100644 --- a/platforms/opencl/tests/TestOpenCLCustomHbondForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomHbondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,221 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomHbondForce. - */ +#include "OpenCLTests.h" +#include "TestCustomHbondForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomHbondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testHbond() { - // Create a system using a CustomHbondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomHbondForce* custom = new CustomHbondForce("0.5*kr*(distance(d1,a1)-r0)^2 + 0.5*ktheta*(angle(a1,d1,d2)-theta0)^2 + 0.5*kpsi*(angle(d1,a1,a2)-psi0)^2 + kchi*(1+cos(n*dihedral(a3,a2,a1,d1)-chi0))"); - custom->addPerDonorParameter("r0"); - custom->addPerDonorParameter("theta0"); - custom->addPerDonorParameter("psi0"); - custom->addPerAcceptorParameter("chi0"); - custom->addPerAcceptorParameter("n"); - custom->addGlobalParameter("kr", 0.4); - custom->addGlobalParameter("ktheta", 0.5); - custom->addGlobalParameter("kpsi", 0.6); - custom->addGlobalParameter("kchi", 0.7); - vector parameters(3); - parameters[0] = 1.5; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->addDonor(1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.1; - parameters[1] = 2; - custom->addAcceptor(2, 3, 4, parameters); - custom->setCutoffDistance(10.0); - customSystem.addForce(custom); - - // Create an identical system using HarmonicBondForce, HarmonicAngleForce, and PeriodicTorsionForce. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bond = new HarmonicBondForce(); - bond->addBond(1, 2, 1.5, 0.4); - standardSystem.addForce(bond); - HarmonicAngleForce* angle = new HarmonicAngleForce(); - angle->addAngle(0, 1, 2, 1.7, 0.5); - angle->addAngle(1, 2, 3, 1.9, 0.6); - standardSystem.addForce(angle); - PeriodicTorsionForce* torsion = new PeriodicTorsionForce(); - torsion->addTorsion(1, 2, 3, 4, 2, 2.1, 0.7); - standardSystem.addForce(torsion); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters.resize(3); - parameters[0] = 1.4; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->setDonorParameters(0, 1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.2; - parameters[1] = 2; - custom->setAcceptorParameters(0, 2, 3, 4, parameters); - bond->setBondParameters(0, 1, 2, 1.4, 0.4); - torsion->setTorsionParameters(0, 1, 2, 3, 4, 2, 2.2, 0.7); - custom->updateParametersInContext(c1); - bond->updateParametersInContext(c2); - torsion->updateParametersInContext(c2); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); +void runPlatformTests() { } - -void testExclusions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->addExclusion(1, 0); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->setNonbondedMethod(CustomHbondForce::CutoffNonPeriodic); - custom->setCutoffDistance(2.5); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 3, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCustomFunctions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("foo(distance(d1,a1))"); - custom->addDonor(1, 0, -1, vector()); - custom->addDonor(2, 0, -1, vector()); - custom->addAcceptor(0, 1, -1, vector()); - vector function(2); - function[0] = 0; - function[1] = 1; - custom->addTabulatedFunction("foo", new Continuous1DFunction(function, 0, 10)); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1, 0.1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -0.1, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.1, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.1*2+0.1*2, state.getPotentialEnergy(), TOL); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testHbond(); - testExclusions(); - testCutoff(); - testCustomFunctions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLCustomIntegrator.cpp b/platforms/opencl/tests/TestOpenCLCustomIntegrator.cpp index 6db85d4e5be120b138dd58028abf448d91238e14..4d3381b85d6558e3324099fb9d13d0361c281c0c 100644 --- a/platforms/opencl/tests/TestOpenCLCustomIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomIntegrator.cpp @@ -29,666 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomIntegrator. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/CustomIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -/** - * Test a simple leapfrog integrator on a single bond. - */ -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.setKineticEnergyExpression("m*v1*v1/2; v1=v+0.5*dt*f/m"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(-0.5*dt*0.5*0.5, 0, 0); - velocities[1] = Vec3(0.5*dt*0.5*0.5, 0, 0); - context.setVelocities(velocities); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 1e-4); - double expectedSpeed = -0.5*freq*std::sin(freq*(time-dt/2)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 1e-4); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(0.5*0.5*0.5, energy, 1e-4); - integrator.step(1); - } -} - -/** - * Test an integrator that enforces constraints. - */ -void testConstraints() { - const int numParticles = 8; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -/** - * Test an integrator that applies constraints directly to velocities. - */ -void testVelocityConstraints() { - const int numParticles = 10; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("x1", 0); - integrator.addComputePerDof("v", "v+0.5*dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("x1", "x"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "v+0.5*dt*f/m+(x-x1)/dt"); - integrator.addConstrainVelocities(); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - - // Constrain the first three particles with SHAKE. - - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - - // Constrain the next three with SETTLE. - - system.addConstraint(3, 4, 1.0); - system.addConstraint(5, 4, 1.0); - system.addConstraint(3, 5, sqrt(2.0)); - - // Constraint the rest with CCMA. - - for (int i = 6; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - integrator.step(2); - State state = context.getState(State::Positions | State::Velocities | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - if (i > 0) { - Vec3 v1 = state.getVelocities()[particle1]; - Vec3 v2 = state.getVelocities()[particle2]; - double vel = (v1-v2).dot(p1-p2); - ASSERT_EQUAL_TOL(0.0, vel, 2e-5); - } - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 0) - initialEnergy = energy; - else if (i > 0) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -/** - * Test an integrator with an AndersenThermostat to see if updateContextState() - * is being handled correctly. - */ -void testWithThermostat() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 5000; - System system; - CustomIntegrator integrator(0.003); - integrator.addUpdateContextState(); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - integrator.setRandomNumberSeed(thermostat->getRandomNumberSeed()); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -/** - * Test a Monte Carlo integrator that uses global variables and depends on energy. - */ -void testMonteCarlo() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - const double kT = BOLTZ*300.0; - integrator.addGlobalVariable("kT", kT); - integrator.addGlobalVariable("oldE", 0); - integrator.addGlobalVariable("accept", 0); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputeGlobal("oldE", "energy"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*gaussian"); - integrator.addComputeGlobal("accept", "step(exp((oldE-energy)/kT)-uniform)"); - integrator.addComputePerDof("x", "select(accept, x, oldx)"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 2.0, 10.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // Compute the histogram of distances and see if it satisfies a Boltzmann distribution. - - const int numBins = 100; - const double maxDist = 4.0; - const int numIterations = 5000; - vector counts(numBins, 0); - for (int i = 0; i < numIterations; ++i) { - integrator.step(10); - State state = context.getState(State::Positions); - Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; - double dist = sqrt(delta.dot(delta)); - if (dist < maxDist) - counts[(int) (numBins*dist/maxDist)]++; - } - vector expected(numBins, 0); - double sum = 0; - for (int i = 0; i < numBins; i++) { - double dist = (i+0.5)*maxDist/numBins; - expected[i] = dist*dist*exp(-5.0*(dist-2)*(dist-2)/kT); - sum += expected[i]; - } - for (int i = 0; i < numBins; i++) - ASSERT_USUALLY_EQUAL_TOL((double) counts[i]/numIterations, expected[i]/sum, 0.01); -} - -/** - * Test the ComputeSum operation. - */ -void testSum() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(i%10 == 0 ? 0.0 : 1.5); - nb->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 1) - close = true; - } - } - } - CustomIntegrator integrator(0.005); - integrator.addGlobalVariable("ke", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputeSum("ke", "m*v*v/2"); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the sum is being computed correctly. - - for (int i = 0; i < 100; ++i) { - State state = context.getState(State::Energy); - ASSERT_EQUAL_TOL(state.getKineticEnergy(), integrator.getGlobalVariable(0), 1e-5); - integrator.step(1); - } -} - -/** - * Test an integrator that both uses and modifies a context parameter. - */ -void testParameter() { - System system; - system.addParticle(1.0); - AndersenThermostat* thermostat = new AndersenThermostat(0.1, 0.1); - system.addForce(thermostat); - CustomIntegrator integrator(0.1); - integrator.addGlobalVariable("temp", 0); - integrator.addComputeGlobal("temp", "AndersenTemperature"); - integrator.addComputeGlobal("AndersenTemperature", "temp*2"); - integrator.setRandomNumberSeed(thermostat->getRandomNumberSeed()); - Context context(system, integrator, platform); - - // See if the parameter is being used correctly. - - for (int i = 0; i < 10; i++) { - integrator.step(1); - ASSERT_EQUAL_TOL(context.getParameter("AndersenTemperature"), 0.1*(1<<(i+1)), 1e-5); - } -} - -/** - * Test random number distributions. - */ -void testRandomDistributions() { - const int numParticles = 100; - const int numBins = 20; - const int numSteps = 100; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - integrator.addPerDofVariable("a", 0); - integrator.addPerDofVariable("b", 0); - integrator.addComputePerDof("a", "uniform"); - integrator.addComputePerDof("b", "gaussian"); - Context context(system, integrator, platform); - - // See if the random numbers are distributed correctly. - - vector bins(numBins); - double mean = 0.0; - double var = 0.0; - double skew = 0.0; - double kurtosis = 0.0; - vector values; - for (int i = 0; i < numSteps; i++) { - integrator.step(1); - integrator.getPerDofVariable(0, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - ASSERT(v >= 0 && v < 1); - bins[(int) (v*numBins)]++; - } - integrator.getPerDofVariable(1, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - mean += v; - var += v*v; - skew += v*v*v; - kurtosis += v*v*v*v; - } - } - - // Check the distribution of uniform randoms. - - int numValues = numParticles*numSteps*3; - double expected = numValues/(double) numBins; - double tol = 4*sqrt(expected); - for (int i = 0; i < numBins; i++) - ASSERT(bins[i] >= expected-tol && bins[i] <= expected+tol); - - // Check the distribution of gaussian randoms. - - mean /= numValues; - var /= numValues; - skew /= numValues; - kurtosis /= numValues; - double c2 = var-mean*mean; - double c3 = skew-3*var*mean+2*mean*mean*mean; - double c4 = kurtosis-4*skew*mean-3*var*var+12*var*mean*mean-6*mean*mean*mean*mean; - ASSERT_EQUAL_TOL(0.0, mean, 3.0/sqrt((double) numValues)); - ASSERT_EQUAL_TOL(1.0, c2, 3.0/pow(numValues, 1.0/3.0)); - ASSERT_EQUAL_TOL(0.0, c3, 3.0/pow(numValues, 1.0/4.0)); - ASSERT_EQUAL_TOL(0.0, c4, 3.0/pow(numValues, 1.0/4.0)); -} - -/** - * Test getting and setting per-DOF variables. - */ -void testPerDofVariables() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - nb->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.5); - nb->addParticle(i%2 == 0 ? 1 : -1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 0.1) - close = true; - } - } - } - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("temp", 0); - integrator.addPerDofVariable("pos", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("pos", "x"); - Context context(system, integrator, platform); - context.setPositions(positions); - vector initialValues(numParticles); - for (int i = 0; i < numParticles; i++) - initialValues[i] = Vec3(i+0.1, i+0.2, i+0.3); - integrator.setPerDofVariable(0, initialValues); - - // Run a simulation, then query per-DOF values and see if they are correct. - - vector values; - context.getState(State::Forces); // Cause atom reordering to happen before the first step - for (int i = 0; i < 200; ++i) { - integrator.step(1); - State state = context.getState(State::Positions); - integrator.getPerDofVariable(0, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(initialValues[j], values[j], 1e-5); - integrator.getPerDofVariable(1, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(state.getPositions()[j], values[j], 1e-5); - } -} - -/** - * Test evaluating force groups separately. - */ -void testForceGroups() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("outf", 0); - integrator.addPerDofVariable("outf1", 0); - integrator.addPerDofVariable("outf2", 0); - integrator.addGlobalVariable("oute", 0); - integrator.addGlobalVariable("oute1", 0); - integrator.addGlobalVariable("oute2", 0); - integrator.addComputePerDof("outf", "f"); - integrator.addComputePerDof("outf1", "f1"); - integrator.addComputePerDof("outf2", "f2"); - integrator.addComputeGlobal("oute", "energy"); - integrator.addComputeGlobal("oute1", "energy1"); - integrator.addComputeGlobal("oute2", "energy2"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.5, 1.1); - bonds->setForceGroup(1); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->addParticle(0.2, 1, 0); - nb->addParticle(0.2, 1, 0); - nb->setForceGroup(2); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // See if the various forces are computed correctly. - - integrator.step(1); - vector f, f1, f2; - double e1 = 0.5*1.1*0.5*0.5; - double e2 = 138.935456*0.2*0.2/2.0; - integrator.getPerDofVariable(0, f); - integrator.getPerDofVariable(1, f1); - integrator.getPerDofVariable(2, f2); - ASSERT_EQUAL_VEC(Vec3(1.1*0.5, 0, 0), f1[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-1.1*0.5, 0, 0), f1[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-138.935456*0.2*0.2/4.0, 0, 0), f2[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(138.935456*0.2*0.2/4.0, 0, 0), f2[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0]+f2[0], f[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1]+f2[1], f[1], 1e-5); - ASSERT_EQUAL_TOL(e1, integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(e2, integrator.getGlobalVariable(2), 1e-5); - ASSERT_EQUAL_TOL(e1+e2, integrator.getGlobalVariable(0), 1e-5); - - // Make sure they also match the values returned by the Context. - - State s = context.getState(State::Forces | State::Energy, false); - State s1 = context.getState(State::Forces | State::Energy, false, 2); - State s2 = context.getState(State::Forces | State::Energy, false, 4); - vector c, c1, c2; - c = context.getState(State::Forces, false).getForces(); - c1 = context.getState(State::Forces, false, 2).getForces(); - c2 = context.getState(State::Forces, false, 4).getForces(); - ASSERT_EQUAL_VEC(f[0], c[0], 1e-5); - ASSERT_EQUAL_VEC(f[1], c[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0], c1[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1], c1[1], 1e-5); - ASSERT_EQUAL_VEC(f2[0], c2[0], 1e-5); - ASSERT_EQUAL_VEC(f2[1], c2[1], 1e-5); - ASSERT_EQUAL_TOL(s.getPotentialEnergy(), integrator.getGlobalVariable(0), 1e-5); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), integrator.getGlobalVariable(2), 1e-5); -} - -/** - * Test a multiple time step r-RESPA integrator. - */ -void testRespa() { - const int numParticles = 8; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - CustomIntegrator integrator(0.002); - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - for (int i = 0; i < 2; i++) { - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - integrator.addComputePerDof("x", "x+(dt/2)*v"); - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - } - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - for (int i = 0; i < numParticles-2; i++) - bonds->addBond(i, i+1, 1.0, 0.5); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->setCutoffDistance(2.0); - nb->setNonbondedMethod(NonbondedForce::Ewald); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - nb->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - nb->setForceGroup(1); - nb->setReciprocalSpaceForceGroup(0); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and monitor energy conservations. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(2); - } -} +#include "OpenCLTests.h" +#include "TestCustomIntegrator.h" /** * Make sure random numbers are computed correctly when steps get merged. @@ -756,117 +98,6 @@ void testMergedRandoms() { } } -void testIfBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginIfBlock("a < 3.5"); - integrator.addComputeGlobal("b", "a+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Set "a" to 1.7 and verify that "b" gets set to a+1. - - integrator.setGlobalVariable(0, 1.7); - integrator.step(1); - ASSERT_EQUAL_TOL(2.7, integrator.getGlobalVariable(1), 1e-6); - - // Now set it to a value that should cause the block to be skipped. - - integrator.setGlobalVariable(0, 4.1); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); -} - -void testWhileBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginWhileBlock("b <= a"); - integrator.addComputeGlobal("b", "b+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Try a case where the loop should be skipped. - - integrator.setGlobalVariable(0, -3.3); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case it should be executed exactly once. - - integrator.setGlobalVariable(0, 1.2); - integrator.step(1); - ASSERT_EQUAL_TOL(2.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case, it should be executed several times. - - integrator.setGlobalVariable(0, 5.3); - integrator.step(1); - ASSERT_EQUAL_TOL(6.0, integrator.getGlobalVariable(1), 1e-6); -} - -/** - * Test modifying a global variable, then using it in a per-DOF computation. - */ -void testChangingGlobal() { - System system; - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - integrator.addGlobalVariable("g", 0); - integrator.addPerDofVariable("a", 0); - integrator.addPerDofVariable("b", 0); - integrator.addComputeGlobal("g", "g+1"); - integrator.addComputePerDof("a", "0.5"); - integrator.addComputePerDof("b", "a+g"); - Context context(system, integrator, platform); - - // See if everything is being calculated correctly.. - - for (int i = 0; i < 10; i++) { - integrator.step(1); - ASSERT_EQUAL_TOL(i+1.0, integrator.getGlobalVariable(0), 1e-5); - vector values; - integrator.getPerDofVariable(1, values); - ASSERT_EQUAL_VEC(Vec3(i+1.5, i+1.5, i+1.5), values[0], 1e-5); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testVelocityConstraints(); - testConstrainedMasslessParticles(); - testWithThermostat(); - testMonteCarlo(); - testSum(); - testParameter(); - testRandomDistributions(); - testPerDofVariables(); - testForceGroups(); - testRespa(); - testMergedRandoms(); - testIfBlock(); - testWhileBlock(); - testChangingGlobal(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testMergedRandoms(); } diff --git a/platforms/opencl/tests/TestOpenCLCustomManyParticleForce.cpp b/platforms/opencl/tests/TestOpenCLCustomManyParticleForce.cpp index 29b35f38709bb1ad7ce52c86c59901e4f465141a..a94e8ed35d4b35f957697cb39428c989e4c3a7ea 100644 --- a/platforms/opencl/tests/TestOpenCLCustomManyParticleForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomManyParticleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2014-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,705 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomManyParticleForce. - */ +#include "OpenCLTests.h" +#include "TestCustomManyParticleForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/CustomManyParticleForce.h" -#include "openmm/System.h" -#include "openmm/TabulatedFunction.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -const double TOL = 1e-5; - -OpenCLPlatform platform; - -Vec3 computeDelta(const Vec3& pos1, const Vec3& pos2, bool periodic, const Vec3* periodicBoxVectors) { - Vec3 diff = pos1-pos2; - if (periodic) { - diff -= periodicBoxVectors[2]*floor(diff[2]/periodicBoxVectors[2][2]+0.5); - diff -= periodicBoxVectors[1]*floor(diff[1]/periodicBoxVectors[1][1]+0.5); - diff -= periodicBoxVectors[0]*floor(diff[0]/periodicBoxVectors[0][0]+0.5); - } - return diff; -} - -void validateAxilrodTeller(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize, bool triclinic) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - Vec3 boxVectors[3]; - if (triclinic) { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0.2*boxSize, boxSize, 0); - boxVectors[2] = Vec3(-0.3*boxSize, -0.1*boxSize, boxSize); - } - else { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0, boxSize, 0); - boxVectors[2] = Vec3(0, 0, boxSize); - } - system.setDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double c = context.getParameter("C"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - bool periodic = (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic); - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = computeDelta(positions[p2], positions[p1], periodic, boxVectors); - Vec3 d13 = computeDelta(positions[p3], positions[p1], periodic, boxVectors); - Vec3 d23 = computeDelta(positions[p3], positions[p2], periodic, boxVectors); - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - double rprod = r12*r13*r23; - expectedEnergy += c*(1+3*ctheta1*ctheta2*ctheta3)/(rprod*rprod*rprod); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void validateStillingerWeber(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double L = context.getParameter("L"); - double eps = context.getParameter("eps"); - double a = context.getParameter("a"); - double gamma = context.getParameter("gamma"); - double sigma = context.getParameter("sigma"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - Vec3 d23 = positions[p3]-positions[p2]; - if (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic) { - for (int j = 0; j < 3; j++) { - d12[j] -= floor(d12[j]/boxSize+0.5f)*boxSize; - d13[j] -= floor(d13[j]/boxSize+0.5f)*boxSize; - d23[j] -= floor(d23[j]/boxSize+0.5f)*boxSize; - } - } - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - expectedEnergy += L*eps*(ctheta1+1.0/3.0)*(ctheta1+1.0/3.0)*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma)); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void testNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - int sets[4][3] = {{0,1,2}, {1,2,3}, {2,3,0}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(1.55); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - int sets[7][3] = {{0,1,2}, {0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,2,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[7]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testPeriodic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[5][3] = {{0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, false); -} - -void testTriclinic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[4][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, true); -} - -void testExclusions() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - force->addExclusion(0, 2); - force->addExclusion(0, 3); - int sets[5][3] = {{0,1,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testAllTerms() { - int numParticles = 4; - - // Create a system with a CustomManyParticleForce. - - System system1; - CustomManyParticleForce* force1 = new CustomManyParticleForce(4, - "distance(p1,p2)+angle(p1,p4,p3)+dihedral(p1,p3,p2,p4)+x1+y4+z3"); - system1.addForce(force1); - vector params; - for (int i = 0; i < numParticles; i++) { - system1.addParticle(1.0); - force1->addParticle(params, i); - } - set filter; - filter.insert(0); - force1->setTypeFilter(0, filter); - filter.clear(); - filter.insert(1); - force1->setTypeFilter(1, filter); - filter.clear(); - filter.insert(3); - force1->setTypeFilter(2, filter); - filter.clear(); - filter.insert(2); - force1->setTypeFilter(3, filter); - - // Create a system that use a CustomCompoundBondForce to compute exactly the same interactions. - - System system2; - CustomCompoundBondForce* force2 = new CustomCompoundBondForce(4, - "distance(p1,p2)+angle(p1,p3,p4)+dihedral(p1,p4,p2,p3)+x1+y3+z4"); - system2.addForce(force2); - vector particles; - particles.push_back(0); - particles.push_back(1); - particles.push_back(2); - particles.push_back(3); - force2->addBond(particles, params); - for (int i = 0; i < numParticles; i++) - system2.addParticle(1.0); - - // Create contexts for both of them. - - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system1, integrator1, platform); - Context context2(system2, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - - // See if they produce identical forces and energies. - - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state2.getPotentialEnergy(), state1.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state2.getForces()[i], state1.getForces()[i], 1e-4); -} - -void testParameters() { - // Create a system. - - int numParticles = 5; - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "C*scale1*scale2*scale3*(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))"); - force->addGlobalParameter("C", 2.0); - force->addPerParticleParameter("scale"); - vector params(1); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - params[0] = i+1; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 2.0*(i+1)*(j+1)*(k+1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); - - // Modify the parameters. - - context.setParameter("C", 3.5); - for (int i = 0; i < numParticles; i++) { - params[0] = 0.5*i-0.1; - force->setParticleParameters(i, params, 0); - } - force->updateParametersInContext(context); - - // See if the energy is still correct. - - state = context.getState(State::Energy); - expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 3.5*(0.5*i-0.1)*(0.5*j-0.1)*(0.5*k-0.1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTabulatedFunctions() { - int numParticles = 5; - - // Create two tabulated functions. - - vector values; - values.push_back(0.0); - values.push_back(50.0); - Continuous1DFunction* f1 = new Continuous1DFunction(values, 0, 100); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector c(numParticles); - for (int i = 0; i < numParticles; i++) - c[i] = genrand_real2(sfmt); - values.resize(numParticles*numParticles*numParticles); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < numParticles; j++) - for (int k = 0; k < numParticles; k++) - values[i+numParticles*j+numParticles*numParticles*k] = c[i]+c[j]+c[k]; - Discrete3DFunction* f2 = new Discrete3DFunction(numParticles, numParticles, numParticles, values); - - // Create a system. - - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "f1(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))*f2(atom1, atom2, atom3)"); - force->addPerParticleParameter("atom"); - force->addTabulatedFunction("f1", f1); - force->addTabulatedFunction("f2", f2); - vector params(1); - vector positions; - for (int i = 0; i < numParticles; i++) { - params[0] = i; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 0.5*(r12+r13+r23)*(c[i]+c[j]+c[k]); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTypeFilters() { - // Create a system. - - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CustomManyParticleForce* force = new CustomManyParticleForce(3, "c1*(distance(p1,p2)+distance(p1,p3))"); - force->addPerParticleParameter("c"); - double c[] = {1.0, 2.0, 1.3, 1.5, -2.1}; - int type[] = {0, 1, 0, 1, 5}; - vector params(1); - for (int i = 0; i < 5; i++) { - params[0] = c[i]; - force->addParticle(params, type[i]); - } - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - set f1, f2; - f1.insert(0); - f2.insert(1); - f2.insert(5); - force->setTypeFilter(0, f1); - force->setTypeFilter(1, f2); - force->setTypeFilter(2, f2); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - int sets[6][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {2,1,3}, {2,1,4}, {2,3,4}}; - for (int i = 0; i < 6; i++) { - int p1 = sets[i][0]; - int p2 = sets[i][1]; - int p3 = sets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - expectedEnergy += c[p1]*(r12+r13); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 3.0; - double spacing = boxSize/gridSize; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(0.6); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -void testCentralParticleModeNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[12][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {2,0,3}, {2, 1, 3}, {3,0,1}, {3,0,2}, {3,1,2}}; - vector expectedSets(&sets[0], &sets[12]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(0.155); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[8][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[8]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeLargeSystem() { - int gridSize = 8; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = 2.0; - double spacing = boxSize/gridSize; - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.8*0.23925); - vector params; - vector positions; - System system; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - force->addParticle(params); - positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system, integrator1, Platform::getPlatformByName("Reference")); - Context context2(system, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testNoCutoff(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testExclusions(); - testAllTerms(); - testParameters(); - testTabulatedFunctions(); - testTypeFilters(); - testLargeSystem(); - testCentralParticleModeNoCutoff(); - testCentralParticleModeCutoff(); - testCentralParticleModeLargeSystem(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLCustomNonbondedForce.cpp b/platforms/opencl/tests/TestOpenCLCustomNonbondedForce.cpp index 652ddd7a9d7cfac1c444fd92786e22b326a18152..6782c2958e5df0942d90a19556f33eb94a65f197 100644 --- a/platforms/opencl/tests/TestOpenCLCustomNonbondedForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomNonbondedForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -30,607 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the OpenCL implementation of CustomNonbondedForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomNonbondedForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSimpleExpression() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("-0.1*r^3"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = 0.1*3*(2*2); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(-0.1*(2*2*2), state.getPotentialEnergy(), TOL); -} - -void testParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("scale*a*(r*b)^3; a=a1*a2; b=c+b1+b2"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addGlobalParameter("scale", 3.0); - forceField->addGlobalParameter("c", -1.0); - vector params(2); - params[0] = 1.5; - params[1] = 2.0; - forceField->addParticle(params); - params[0] = 2.0; - params[1] = 3.0; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - context.setParameter("scale", 1.0); - context.setParameter("c", 0.0); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = -3.0*3*5.0*(10*10); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(3.0*(10*10*10), state.getPotentialEnergy(), TOL); - - // Try changing the global parameters and make sure it's still correct. - - context.setParameter("scale", 1.5); - context.setParameter("c", 1.0); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*3.0*3*6.0*(12*12); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*3.0*(12*12*12), state.getPotentialEnergy(), TOL); - - // Try changing the per-particle parameters and make sure it's still correct. - - params[0] = 1.6; - params[1] = 2.1; - forceField->setParticleParameters(0, params); - params[0] = 1.9; - params[1] = 2.8; - forceField->setParticleParameters(1, params); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*1.6*1.9*3*5.9*(11.8*11.8); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*1.6*1.9*(11.8*11.8*11.8), state.getPotentialEnergy(), TOL); -} - -void testManyParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("(a1*a2+b1*b2+c1*c2+d1*d2+e1*e2)*r"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addPerParticleParameter("c"); - forceField->addPerParticleParameter("d"); - forceField->addPerParticleParameter("e"); - vector params(5); - params[0] = 1.0; - params[1] = 2.0; - params[2] = 3.0; - params[3] = 4.0; - params[4] = 5.0; - forceField->addParticle(params); - params[0] = 1.1; - params[1] = 1.2; - params[2] = 1.3; - params[3] = 1.4; - params[4] = 1.5; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = 1*1.1 + 2*1.2 + 3*1.3 + 4*1.4 + 5*1.5; - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(2*force, state.getPotentialEnergy(), TOL); -} - -void testExclusions() { - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("a*r; a=a1+a2"); - nonbonded->addPerParticleParameter("a"); - vector params(1); - vector positions(4); - for (int i = 0; i < 4; i++) { - system.addParticle(1.0); - params[0] = i+1; - nonbonded->addParticle(params); - positions[i] = Vec3(i, 0, 0); - } - nonbonded->addExclusion(0, 1); - nonbonded->addExclusion(1, 2); - nonbonded->addExclusion(2, 3); - nonbonded->addExclusion(0, 2); - nonbonded->addExclusion(1, 3); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(1+4, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-(1+4), 0, 0), forces[3], TOL); - ASSERT_EQUAL_TOL((1+4)*3.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - forceField->setCutoffDistance(2.5); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -1, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2.0+1.0, state.getPotentialEnergy(), TOL); -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - forceField->setCutoffDistance(2.0); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.1, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -2, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.9+1+0.9, state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("r"); - nonbonded->addParticle(vector()); - nonbonded->addParticle(vector()); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta/sqrt(delta.dot(delta)); - ASSERT_EQUAL_TOL(distance, state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testContinuous1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testContinuous2DFunction() { - const int xsize = 20; - const int ysize = 21; - const double xmin = 0.4; - const double xmax = 1.5; - const double ymin = 0.0; - const double ymax = 2.1; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setParameter("b", z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testDiscrete1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Discrete1DFunction(table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i+1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} -void testDiscrete2DFunction() { - const int xsize = 10; - const int ysize = 5; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - table.push_back(sin(0.25*i)+cos(0.33*j)); - forceField->addTabulatedFunction("fn", new Discrete2DFunction(xsize, ysize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3((i%xsize)+1, 0, 0); - context.setPositions(positions); - context.setParameter("a", i/xsize); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete3DFunction() { - const int xsize = 8; - const int ysize = 5; - const int zsize = 6; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - for (int k = 0; k < zsize; k++) - table.push_back(sin(0.25*i)+cos(0.33*j)+0.12345*k); - forceField->addTabulatedFunction("fn", new Discrete3DFunction(xsize, ysize, zsize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3((i%xsize)+1, 0, 0); - context.setPositions(positions); - context.setParameter("a", (i/xsize)%ysize); - context.setParameter("b", i/(xsize*ysize)); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testCoulombLennardJones() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create two systems: one with a NonbondedForce, and one using a CustomNonbondedForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("q"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - standardNonbonded->addParticle(1.0, 0.2, 0.1); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.1); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - else { - standardNonbonded->addParticle(1.0, 0.2, 0.2); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.2); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); - customNonbonded->addExclusion(2*i, 2*i+1); - } - standardNonbonded->setNonbondedMethod(NonbondedForce::NoCutoff); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::NoCutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - Context context2(customSystem, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - context1.setVelocities(velocities); - context2.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} +#include "OpenCLTests.h" +#include "TestCustomNonbondedForce.h" void testParallelComputation() { System system; @@ -669,396 +69,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testSwitchingFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("10/r^2"); - vector params; - nonbonded->addParticle(params); - nonbonded->addParticle(params); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double expectedEnergy = 10/(r*r); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 2e-3); - } -} - -void testLongRangeCorrection() { - // Create a box of particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System standardSystem; - System customSystem; - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6); sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - int index = 0; - vector params1(2); - params1[0] = 1.1; - params1[1] = 0.5; - vector params2(2); - params2[0] = 1; - params2[1] = 1; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - if (index%2 == 0) { - standardNonbonded->addParticle(0, params1[0], params1[1]); - customNonbonded->addParticle(params1); - } - else { - standardNonbonded->addParticle(0, params2[0], params2[1]); - customNonbonded->addParticle(params2); - } - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - standardNonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - standardNonbonded->setCutoffDistance(cutoff); - customNonbonded->setCutoffDistance(cutoff); - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - standardNonbonded->setUseDispersionCorrection(true); - customNonbonded->setUseLongRangeCorrection(true); - standardNonbonded->setUseSwitchingFunction(true); - customNonbonded->setUseSwitchingFunction(true); - standardNonbonded->setSwitchingDistance(0.8*cutoff); - customNonbonded->setSwitchingDistance(0.8*cutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - - // Compute the correction for the standard force. - - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - double standardEnergy1 = context1.getState(State::Energy).getPotentialEnergy(); - standardNonbonded->setUseDispersionCorrection(false); - context1.reinitialize(); - context1.setPositions(positions); - double standardEnergy2 = context1.getState(State::Energy).getPotentialEnergy(); - - // Compute the correction for the custom force. - - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - double customEnergy1 = context2.getState(State::Energy).getPotentialEnergy(); - customNonbonded->setUseLongRangeCorrection(false); - context2.reinitialize(); - context2.setPositions(positions); - double customEnergy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // See if they agree. - - ASSERT_EQUAL_TOL(standardEnergy1-standardEnergy2, customEnergy1-customEnergy2, 1e-4); -} - -void testInteractionGroups() { - const int numParticles = 6; - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("v1+v2"); - nonbonded->addPerParticleParameter("v"); - vector params(1, 0.001); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(params); - params[0] *= 10; - } - set set1, set2, set3, set4; - set1.insert(2); - set2.insert(0); - set2.insert(1); - set2.insert(2); - set2.insert(3); - set2.insert(4); - set2.insert(5); - nonbonded->addInteractionGroup(set1, set2); // Particle 2 interacts with every other particle. - set3.insert(0); - set3.insert(1); - set4.insert(4); - set4.insert(5); - nonbonded->addInteractionGroup(set3, set4); // Particles 0 and 1 interact with 4 and 5. - nonbonded->addExclusion(1, 2); // Add an exclusion to make sure it gets skipped. - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - context.setPositions(positions); - State state = context.getState(State::Energy); - double expectedEnergy = 331.423; // Each digit is the number of interactions a particle particle is involved in. - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), TOL); -} - -void testLargeInteractionGroup() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create a large system. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - nonbonded->addPerParticleParameter("q"); - nonbonded->addPerParticleParameter("sigma"); - nonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - nonbonded->addExclusion(2*i, 2*i+1); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Compute the forces. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - - // Modify the force so only one particle interacts with everything else. - - set set1, set2; - set1.insert(151); - for (int i = 0; i < numParticles; i++) - set2.insert(i); - nonbonded->addInteractionGroup(set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - - // The force on that one particle should be the same. - - ASSERT_EQUAL_VEC(state1.getForces()[151], state2.getForces()[151], 1e-4); - - // Modify the interaction group so it includes all interactions. This should now reproduce the original forces - // on all atoms. - - for (int i = 0; i < numParticles; i++) - set1.insert(i); - nonbonded->setInteractionGroupParameters(0, set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state3.getForces()[i], 1e-4); -} - -void testInteractionGroupLongRangeCorrection() { - const int numParticles = 10; - const double boxSize = 10.0; - const double cutoff = 0.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("c1*c2*r^-4"); - nonbonded->addPerParticleParameter("c"); - vector positions(numParticles); - vector params(1); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - params[0] = (i%2 == 0 ? 1.1 : 2.0); - nonbonded->addParticle(params); - positions[i] = Vec3(0.5*i, 0, 0); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - - // Setup nonbonded groups. They involve 1 interaction of type AA, - // 2 of type BB, and 5 of type AB. - - set set1, set2, set3, set4, set5; - set1.insert(0); - set1.insert(1); - set1.insert(2); - nonbonded->addInteractionGroup(set1, set1); - set2.insert(3); - set3.insert(4); - set3.insert(6); - set3.insert(8); - nonbonded->addInteractionGroup(set2, set3); - set4.insert(5); - set5.insert(7); - set5.insert(9); - nonbonded->addInteractionGroup(set4, set5); - - // Compute energy with and without the correction. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseLongRangeCorrection(true); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - - // Check the result. - - double sum = (1.1*1.1 + 2*2.0*2.0 + 5*1.1*2.0)*2.0; - int numPairs = (numParticles*(numParticles+1))/2; - double expected = 2*M_PI*numParticles*numParticles*sum/(numPairs*boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy2-energy1, 1e-4); -} - -void testMultipleCutoffs() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - - // Add multiple nonbonded forces that have different cutoffs. - - CustomNonbondedForce* nonbonded1 = new CustomNonbondedForce("2*r"); - nonbonded1->addParticle(vector()); - nonbonded1->addParticle(vector()); - nonbonded1->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded1->setCutoffDistance(2.5); - system.addForce(nonbonded1); - CustomNonbondedForce* nonbonded2 = new CustomNonbondedForce("3*r"); - nonbonded2->addParticle(vector()); - nonbonded2->addParticle(vector()); - nonbonded2->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded2->setCutoffDistance(2.9); - nonbonded2->setForceGroup(1); - system.addForce(nonbonded2); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 0, 0); - for (double r = 2.4; r < 3.2; r += 0.2) { - positions[1][1] = r; - context.setPositions(positions); - double e1 = (r < 2.5 ? 2.0*r : 0.0); - double e2 = (r < 2.9 ? 3.0*r : 0.0); - double f1 = (r < 2.5 ? 2.0 : 0.0); - double f2 = (r < 2.9 ? 3.0 : 0.0); - - // Check the first force. - - State state = context.getState(State::Forces | State::Energy, false, 1); - ASSERT_EQUAL_VEC(Vec3(0, f1, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1, state.getPotentialEnergy(), TOL); - - // Check the second force. - - state = context.getState(State::Forces | State::Energy, false, 2); - ASSERT_EQUAL_VEC(Vec3(0, f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e2, state.getPotentialEnergy(), TOL); - - // Check the sum of both forces. - - state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_VEC(Vec3(0, f1+f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1-f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1+e2, state.getPotentialEnergy(), TOL); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSimpleExpression(); - testParameters(); - testManyParameters(); - testExclusions(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testContinuous1DFunction(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testDiscrete1DFunction(); - testDiscrete2DFunction(); - testDiscrete3DFunction(); - testCoulombLennardJones(); - testParallelComputation(); - testSwitchingFunction(); - testLongRangeCorrection(); - testInteractionGroups(); - testLargeInteractionGroup(); - testInteractionGroupLongRangeCorrection(); - testMultipleCutoffs(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/opencl/tests/TestOpenCLCustomTorsionForce.cpp b/platforms/opencl/tests/TestOpenCLCustomTorsionForce.cpp index 63a64e15e8efb2ce76fc6c36c1be570930d50eac..7be950621546d2da36f0289b92e869349cdefa56 100644 --- a/platforms/opencl/tests/TestOpenCLCustomTorsionForce.cpp +++ b/platforms/opencl/tests/TestOpenCLCustomTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,147 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of CustomTorsionForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testTorsions() { - // Create a system using a CustomTorsionForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("k*(1+cos(n*theta-theta0))"); - custom->addPerTorsionParameter("theta0"); - custom->addPerTorsionParameter("n"); - custom->addGlobalParameter("k", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 1; - custom->addTorsion(0, 1, 2, 3, parameters); - parameters[0] = 2.0; - parameters[1] = 2; - custom->addTorsion(1, 2, 3, 4, parameters); - customSystem.addForce(custom); - - // Create an identical system using a PeriodicTorsionForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 1, 1.5, 0.5); - periodic->addTorsion(1, 2, 3, 4, 2, 2.0, 0.5); - harmonicSystem.addForce(periodic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 2; - custom->setTorsionParameters(0, 0, 1, 2, 3, parameters); - parameters[0] = 2.1; - parameters[1] = 3; - custom->setTorsionParameters(1, 1, 2, 3, 4, parameters); - custom->updateParametersInContext(c1); - periodic->setTorsionParameters(0, 0, 1, 2, 3, 2, 1.6, 0.5); - periodic->setTorsionParameters(1, 1, 2, 3, 4, 3, 2.1, 0.5); - periodic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -void testRange() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("theta"); - custom->addTorsion(0, 1, 2, 3, vector()); - system.addForce(custom); - - // Set the atoms in various positions, and verify that the angle is always in the expected range. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(4); - VerletIntegrator integrator(0.01); - double minAngle = 1000; - double maxAngle = -1000; - Context context(system, integrator, platform); - for (int i = 0; i < 100; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - context.setPositions(positions); - double angle = context.getState(State::Energy).getPotentialEnergy(); - if (angle < minAngle) - minAngle = angle; - if (angle > maxAngle) - maxAngle = angle; - } - ASSERT(minAngle >= -M_PI); - ASSERT(maxAngle <= M_PI); -} +#include "OpenCLTests.h" +#include "TestCustomTorsionForce.h" void testParallelComputation() { System system; @@ -200,19 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testTorsions(); - testRange(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/opencl/tests/TestOpenCLEwald.cpp b/platforms/opencl/tests/TestOpenCLEwald.cpp index 1ac3f72bffcb79012512fc5e41172795a89f774f..a9a05d9e668231d4eacbda61f869d77cdc43c02b 100644 --- a/platforms/opencl/tests/TestOpenCLEwald.cpp +++ b/platforms/opencl/tests/TestOpenCLEwald.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,345 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the Ewald summation method OpenCL implementation of NonbondedForce. - */ +#include "OpenCLTests.h" +#include "TestEwald.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testEwaldPME(bool includeExceptions) { - -// Use amorphous NaCl system for the tests - - const int numParticles = 894; - const double cutoff = 1.2; - const double boxSize = 3.00646; - double tol = 1e-5; - - ReferencePlatform reference; - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(tol); - - for (int i = 0; i < numParticles/2; i++) - system.addParticle(22.99); - for (int i = 0; i < numParticles/2; i++) - system.addParticle(35.45); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(1.0, 1.0,0.0); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(-1.0, 1.0,0.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - vector positions(numParticles); - #include "nacl_amorph.dat" - if (includeExceptions) { - // Add some exclusions. - - for (int i = 0; i < numParticles-1; i++) { - Vec3 delta = positions[i]-positions[i+1]; - if (sqrt(delta.dot(delta)) < 0.5*cutoff) - nonbonded->addException(i, i+1, i%2 == 0 ? 0.0 : 0.5, 1.0, 0.0); - } - } - -// (1) Check whether the Reference and OpenCL platforms agree when using Ewald Method - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context clContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - clContext.setPositions(positions); - referenceContext.setPositions(positions); - State clState = clContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], clState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), clState.getPotentialEnergy(), tol); - -// (2) Check whether Ewald method in OpenCL is self-consistent - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = clState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - const double delta = 5e-3; - double step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = clState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator3(0.01); - Context clContext2(system, integrator3, platform); - clContext2.setPositions(positions); - - tol = 1e-2; - State clState2 = clContext2.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (clState2.getPotentialEnergy()-clState.getPotentialEnergy())/delta, tol) - -// (3) Check whether the Reference and OpenCL platforms agree when using PME - - nonbonded->setNonbondedMethod(NonbondedForce::PME); - clContext.reinitialize(); - referenceContext.reinitialize(); - clContext.setPositions(positions); - referenceContext.setPositions(positions); - clState = clContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - tol = 1e-2; - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(referenceState.getForces()[i], clState.getForces()[i], tol); - } - tol = 1e-5; - ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), clState.getPotentialEnergy(), tol); - -// (4) Check whether PME method in OpenCL is self-consistent - - norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = clState.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - norm = std::sqrt(norm); - step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = clState.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - VerletIntegrator integrator4(0.01); - Context clContext3(system, integrator4, platform); - clContext3.setPositions(positions); - - tol = 1e-2; - State clState3 = clContext3.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (clState3.getPotentialEnergy()-clState.getPotentialEnergy())/delta, tol) -} - -void testEwald2Ions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(-1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - nonbonded->setEwaldErrorTolerance(TOL); - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(3.048000,2.764000,3.156000); - positions[1] = Vec3(2.809000,2.888000,2.571000); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - ASSERT_EQUAL_VEC(Vec3(-123.711, 64.1877, -302.716), forces[0], 10*TOL); - ASSERT_EQUAL_VEC(Vec3( 123.711, -64.1877, 302.716), forces[1], 10*TOL); - ASSERT_EQUAL_TOL(-217.276, state.getPotentialEnergy(), 0.01/*10*TOL*/); -} - -void testTriclinic() { - // Create a triclinic box containing eight particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(2.5, 0, 0), Vec3(0.5, 3.0, 0), Vec3(0.7, 0.9, 3.5)); - for (int i = 0; i < 8; i++) - system.addParticle(1.0); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - force->setNonbondedMethod(NonbondedForce::PME); - force->setCutoffDistance(1.0); - force->setPMEParameters(3.45891, 32, 40, 48); - for (int i = 0; i < 4; i++) - force->addParticle(-1, 0.440104, 0.4184); // Cl parameters - for (int i = 0; i < 4; i++) - force->addParticle(1, 0.332840, 0.0115897); // Na parameters - vector positions(8); - positions[0] = Vec3(1.744, 2.788, 3.162); - positions[1] = Vec3(1.048, 0.762, 2.340); - positions[2] = Vec3(2.489, 1.570, 2.817); - positions[3] = Vec3(1.027, 1.893, 3.271); - positions[4] = Vec3(0.937, 0.825, 0.009); - positions[5] = Vec3(2.290, 1.887, 3.352); - positions[6] = Vec3(1.266, 1.111, 2.894); - positions[7] = Vec3(0.933, 1.862, 3.490); - - // Compute the forces and energy. - - VerletIntegrator integ(0.001); - Context context(system, integ, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // Compare them to values computed by Gromacs. - - double expectedEnergy = -963.370; - vector expectedForce(8); - expectedForce[0] = Vec3(4.25253e+01, -1.23503e+02, 1.22139e+02); - expectedForce[1] = Vec3(9.74752e+01, 1.68213e+02, 1.93169e+02); - expectedForce[2] = Vec3(-1.50348e+02, 1.29165e+02, 3.70435e+02); - expectedForce[3] = Vec3(9.18644e+02, -3.52571e+00, -1.34772e+03); - expectedForce[4] = Vec3(-1.61193e+02, 9.01528e+01, -7.12904e+01); - expectedForce[5] = Vec3(2.82630e+02, 2.78029e+01, -3.72864e+02); - expectedForce[6] = Vec3(-1.47454e+02, -2.14448e+02, -3.55789e+02); - expectedForce[7] = Vec3(-8.82195e+02, -7.39132e+01, 1.46202e+03); - for (int i = 0; i < 8; i++) { - ASSERT_EQUAL_VEC(expectedForce[i], state.getForces()[i], 1e-4); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-4); -} - -void testErrorTolerance(NonbondedForce::NonbondedMethod method) { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 5.0; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(method); - - // For various values of the cutoff and error tolerance, see if the actual error is reasonable. - - for (double cutoff = 1.0; cutoff < boxWidth/2; cutoff *= 1.2) { - force->setCutoffDistance(cutoff); - vector refForces; - double norm = 0.0; - for (double tol = 5e-5; tol < 1e-3; tol *= 2.0) { - force->setEwaldErrorTolerance(tol); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces); - if (refForces.size() == 0) { - refForces = state.getForces(); - for (int i = 0; i < numParticles; i++) - norm += refForces[i].dot(refForces[i]); - norm = sqrt(norm); - } - else { - double diff = 0.0; - for (int i = 0; i < numParticles; i++) { - Vec3 delta = refForces[i]-state.getForces()[i]; - diff += delta.dot(delta); - } - diff = sqrt(diff)/norm; - ASSERT(diff < 2*tol); - } - } - } -} - -void testPMEParameters() { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 4.7; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(NonbondedForce::PME); - - // Compute the energy with an error tolerance of 1e-3. - - force->setEwaldErrorTolerance(1e-3); - VerletIntegrator integrator1(0.01); - Context context1(system, integrator1, platform); - context1.setPositions(positions); - double energy1 = context1.getState(State::Energy).getPotentialEnergy(); - - // Try again with an error tolerance of 1e-4. - - force->setEwaldErrorTolerance(1e-4); - VerletIntegrator integrator2(0.01); - Context context2(system, integrator2, platform); - context2.setPositions(positions); - double energy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // Now explicitly set the parameters. These should match the values that were - // used for tolerance 1e-3. - - force->setPMEParameters(2.49291157051793, 32, 32, 32); - VerletIntegrator integrator3(0.01); - Context context3(system, integrator3, platform); - context3.setPositions(positions); - double energy3 = context3.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(energy1, energy3, 1e-6); - ASSERT(fabs((energy1-energy2)/energy1) > 1e-5); +void runPlatformTests() { } - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testEwaldPME(false); - testEwaldPME(true); -// testEwald2Ions(); - testTriclinic(); - testErrorTolerance(NonbondedForce::Ewald); - testErrorTolerance(NonbondedForce::PME); - testPMEParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLGBSAOBCForce.cpp b/platforms/opencl/tests/TestOpenCLGBSAOBCForce.cpp index d406c4c583f7c4a871d5555c5eb898e76d31bf80..388c3ab4ac78513e53d7ab937ba3c6a57c6bec59 100644 --- a/platforms/opencl/tests/TestOpenCLGBSAOBCForce.cpp +++ b/platforms/opencl/tests/TestOpenCLGBSAOBCForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,243 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of GBSAOBCForce. - */ +#include "OpenCLTests.h" +#include "TestGBSAOBCForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include "openmm/NonbondedForce.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleParticle() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle( 0.5, 0.15, 1); - nonbonded->addParticle(0.5, 1, 0); - system.addForce(gbsa); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); - - // Change the parameters and see if it is still correct. - - gbsa->setParticleParameters(0, 0.4, 0.25, 1); - gbsa->updateParametersInContext(context); - state = context.getState(State::Energy); - bornRadius = 0.25-0.009; // dielectric offset - bornEnergy = (-0.4*0.4/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; - extendedRadius = 0.25+0.14; - nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.25/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testGlobalSettings() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - const double soluteDielectric = 2.1; - const double solventDielectric = 35.0; - const double surfaceAreaEnergy = 0.75; - forceField->setSoluteDielectric(soluteDielectric); - forceField->setSolventDielectric(solventDielectric); - forceField->setSurfaceAreaEnergy(surfaceAreaEnergy); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/soluteDielectric-1.0/solventDielectric)/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*surfaceAreaEnergy*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testCutoffAndPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle(-1, 0.15, 1); - nonbonded->addParticle(-1, 1, 0); - gbsa->addParticle(1, 0.15, 1); - nonbonded->addParticle(1, 1, 0); - const double cutoffDistance = 3.0; - const double boxSize = 10.0; - nonbonded->setCutoffDistance(cutoffDistance); - gbsa->setCutoffDistance(cutoffDistance); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(gbsa); - system.addForce(nonbonded); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - - // Calculate the forces for both cutoff and periodic with two different atom positions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - positions[1][0]+= boxSize; - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - context.reinitialize(); - context.setPositions(positions); - State state4 = context.getState(State::Forces); - - // All forces should be identical, exception state3 which should be zero. - - ASSERT_EQUAL_VEC(state1.getForces()[0], state2.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state2.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[0], state4.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state4.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[0], Vec3(0, 0, 0), 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[1], Vec3(0, 0, 0), 0.01); +void runPlatformTests() { } - -void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBCForce::NonbondedMethod method2) { - ReferencePlatform reference; - System system; - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - double charge = i%2 == 0 ? -1 : 1; - gbsa->addParticle(charge, 0.15, 1); - nonbonded->addParticle(charge, 1, 0); - } - nonbonded->setNonbondedMethod(method); - gbsa->setNonbondedMethod(method2); - nonbonded->setCutoffDistance(3.0); - gbsa->setCutoffDistance(3.0); - int grid = (int) floor(0.5+pow(numParticles, 1.0/3.0)); - if (method == NonbondedForce::CutoffPeriodic) { - double boxSize = (grid+1)*1.1; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - } - system.addForce(gbsa); - system.addForce(nonbonded); - LangevinIntegrator integrator1(0, 0.1, 0.01); - LangevinIntegrator integrator2(0, 0.1, 0.01); - Context context(system, integrator1, platform); - Context refContext(system, integrator2, reference); - - // Set random (but uniformly distributed) positions for all the particles. - - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < grid; i++) - for (int j = 0; j < grid; j++) - for (int k = 0; k < grid; k++) - positions[i*grid*grid+j*grid+k] = Vec3(i*1.1, j*1.1, k*1.1); - for (int i = 0; i < numParticles; ++i) - positions[i] = positions[i] + Vec3(0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt)); - context.setPositions(positions); - refContext.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - State refState = refContext.getState(State::Forces | State::Energy); - - // Make sure the OpenCL and Reference platforms agree. - - double norm = 0.0; - double diff = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - Vec3 delta = f-refState.getForces()[i]; - diff += delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2]; - } - norm = std::sqrt(norm); - diff = std::sqrt(diff); - ASSERT_EQUAL_TOL(0.0, diff, 0.001*norm); - ASSERT_EQUAL_TOL(state.getPotentialEnergy(), refState.getPotentialEnergy(), 1e-3); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - // (This doesn't work with cutoffs, since the energy changes discontinuously at the cutoff distance.) - - if (method == NonbondedForce::NoCutoff) - { - const double delta = 0.3; - double step = 0.5*delta/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-2) - } -} - -int main() { - try { - testSingleParticle(); - testGlobalSettings(); - testCutoffAndPeriodic(); - for (int i = 5; i < 11; i++) { - testForce(i*i*i, NonbondedForce::NoCutoff, GBSAOBCForce::NoCutoff); - testForce(i*i*i, NonbondedForce::CutoffNonPeriodic, GBSAOBCForce::CutoffNonPeriodic); - testForce(i*i*i, NonbondedForce::CutoffPeriodic, GBSAOBCForce::CutoffPeriodic); - } - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLHarmonicAngleForce.cpp b/platforms/opencl/tests/TestOpenCLHarmonicAngleForce.cpp index ca950a229fff9513736d205c14bcacc515bf3b39..d3bacd9084f6ed2c21ceafd5fe90000e381f27b3 100644 --- a/platforms/opencl/tests/TestOpenCLHarmonicAngleForce.cpp +++ b/platforms/opencl/tests/TestOpenCLHarmonicAngleForce.cpp @@ -7,7 +7,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,74 +30,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of HarmonicAngleForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testAngles() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicAngleForce* forceField = new HarmonicAngleForce(); - forceField->addAngle(0, 1, 2, PI_M/3, 1.1); - forceField->addAngle(1, 2, 3, PI_M/2, 1.2); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(2, 1, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque1 = 1.1*PI_M/6; - double torque2 = 1.2*PI_M/4; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.1*(PI_M/6)*(PI_M/6) + 0.5*1.2*(PI_M/4)*(PI_M/4), state.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - forceField->setAngleParameters(0, 0, 1, 2, PI_M/3.1, 1.3); - forceField->setAngleParameters(1, 1, 2, 3, PI_M/2.1, 1.4); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta1 = (PI_M/2)-(PI_M/3.1); - double dtheta2 = (3*PI_M/4)-(PI_M/2.1); - double torque1 = 1.3*dtheta1; - double torque2 = 1.4*dtheta2; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.3*dtheta1*dtheta1 + 0.5*1.4*dtheta2*dtheta2, state.getPotentialEnergy(), TOL); - } -} +#include "OpenCLTests.h" +#include "TestHarmonicAngleForce.h" +#include void testParallelComputation() { System system; @@ -127,17 +62,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testAngles(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } diff --git a/platforms/opencl/tests/TestOpenCLHarmonicBondForce.cpp b/platforms/opencl/tests/TestOpenCLHarmonicBondForce.cpp index 94c50c4bce07dc0734a17e5d1795af869e38a37b..e2acdc512ef98cff7900a97ec38e3382ba6f2e41 100644 --- a/platforms/opencl/tests/TestOpenCLHarmonicBondForce.cpp +++ b/platforms/opencl/tests/TestOpenCLHarmonicBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,66 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of HarmonicBondForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include +#include "OpenCLTests.h" +#include "TestHarmonicBondForce.h" #include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 0.8); - forceField->addBond(1, 2, 1.2, 0.7); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - forceField->setBondParameters(0, 0, 1, 1.6, 0.9); - forceField->setBondParameters(1, 1, 2, 1.3, 0.8); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } -} void testParallelComputation() { System system; @@ -118,18 +61,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testBonds(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/opencl/tests/TestOpenCLLangevinIntegrator.cpp b/platforms/opencl/tests/TestOpenCLLangevinIntegrator.cpp index d423cd5d3ab36721a425ce1b0b227a0a389ae88a..ddbe4efeec65fa4745f03e4a32f5c6a04ddc2f21 100644 --- a/platforms/opencl/tests/TestOpenCLLangevinIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,256 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of LangevinIntegrator. - */ +#include "OpenCLTests.h" +#include "TestLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Not set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 10000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= 10000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt(10000.0)); -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - LangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLLocalEnergyMinimizer.cpp b/platforms/opencl/tests/TestOpenCLLocalEnergyMinimizer.cpp index 7ec3458cf0b950dede30e857d5eb5f31a40ae36f..c7012c5220535e5f2f9b1d434cf8c1cb4d670dbd 100644 --- a/platforms/opencl/tests/TestOpenCLLocalEnergyMinimizer.cpp +++ b/platforms/opencl/tests/TestOpenCLLocalEnergyMinimizer.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,188 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -#include "openmm/internal/AssertionUtilities.h" -#include "OpenCLPlatform.h" -#include "openmm/Context.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/LocalEnergyMinimizer.h" -#include "openmm/NonbondedForce.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -void testHarmonicBonds() { - const int numParticles = 10; - System system; - HarmonicBondForce* bonds = new HarmonicBondForce(); - system.addForce(bonds); - - // Create a chain of particles connected by harmonic bonds. - - vector positions(numParticles); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - positions[i] = Vec3(i, 0, 0); - if (i > 0) - bonds->addBond(i-1, i, 1+0.1*i, 1); - } - - // Minimize it and check that all bonds are at their equilibrium distances. +#include "OpenCLTests.h" +#include "TestLocalEnergyMinimizer.h" - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - LocalEnergyMinimizer::minimize(context, 1e-5); - State state = context.getState(State::Positions); - for (int i = 1; i < numParticles; i++) { - Vec3 delta = state.getPositions()[i]-state.getPositions()[i-1]; - ASSERT_EQUAL_TOL(1+0.1*i, sqrt(delta.dot(delta)), 1e-4); - } +void runPlatformTests() { } - -void testLargeSystem() { - const int numMolecules = 25; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.2, 0.2); - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 2) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} - -void testVirtualSites() { - const int numMolecules = 25; - const int numParticles = numMolecules*3; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - positions[3*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[3*i+1] = Vec3(positions[3*i][0]+1.0, positions[3*i][1], positions[3*i][2]); - positions[3*i+2] = Vec3(); - system.addConstraint(3*i, 3*i+1, 1.0); - system.setVirtualSite(3*i+2, new TwoParticleAverageSite(3*i, 3*i+1, 0.5, 0.5)); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(1e-5); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 3) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - - // Check the virtual site location. - - ASSERT_EQUAL_VEC((finalState.getPositions()[i+1]+finalState.getPositions()[i])*0.5, finalState.getPositions()[i+2], 1e-5); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testHarmonicBonds(); - testLargeSystem(); - testVirtualSites(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLMonteCarloAnisotropicBarostat.cpp b/platforms/opencl/tests/TestOpenCLMonteCarloAnisotropicBarostat.cpp index 93da2412addd8e9d53be61be1a5f331eeccc9f40..2fffb0b05f8cbf907027e295dc16567844168584 100644 --- a/platforms/opencl/tests/TestOpenCLMonteCarloAnisotropicBarostat.cpp +++ b/platforms/opencl/tests/TestOpenCLMonteCarloAnisotropicBarostat.cpp @@ -6,8 +6,8 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2015 Stanford University and the Authors. * - * Authors: Peter Eastman, Lee-Ping Wang * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * * Contributors: * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -29,449 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of MonteCarloAnisotropicBarostat. - */ +#include "OpenCLTests.h" +#include "TestMonteCarloAnisotropicBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/MonteCarloAnisotropicBarostat.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -OpenCLPlatform platform; - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], true, true, true, frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } -} - -void testIdealGasAxis(int axis) { - // Test scaling just one axis. - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - const bool scaleX = (axis == 0); - const bool scaleY = (axis == 1); - const bool scaleZ = (axis == 2); - double boxX; - double boxY; - double boxZ; - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], scaleX, scaleY, scaleZ, frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - boxX = box[0][0]; - boxY = box[1][1]; - boxZ = box[2][2]; - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - if (!scaleX) { - ASSERT(boxX == initialLength); - } - if (!scaleY) { - ASSERT(boxY == 0.5*initialLength); - } - if (!scaleZ) { - ASSERT(boxZ == 2*initialLength); - } - } -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp, true, true, true, 1); - system.addForce(barostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testTriclinic() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temperature = 300.0; - const double initialVolume = numParticles*BOLTZ*temperature/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - Vec3 initialBox[3]; - initialBox[0] = Vec3(initialLength, 0, 0); - initialBox[1] = Vec3(0.2*initialLength, initialLength, 0); - initialBox[2] = Vec3(0.1*initialLength, 0.3*initialLength, initialLength); - system.setDefaultPeriodicBoxVectors(initialBox[0], initialBox[1], initialBox[2]); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temperature, true, true, true, frequency); - system.addForce(barostat); - - // Run a simulation - - LangevinIntegrator integrator(temperature, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temperature/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - - // Make sure the box vectors have been scaled consistently. - - State state = context.getState(State::Positions); - Vec3 box[3]; - state.getPeriodicBoxVectors(box[0], box[1], box[2]); - double xscale = box[2][0]/(0.1*initialLength); - double yscale = box[2][1]/(0.3*initialLength); - double zscale = box[2][2]/(1.0*initialLength); - for (int i = 0; i < 3; i++) { - ASSERT_EQUAL_VEC(Vec3(xscale*initialBox[i][0], yscale*initialBox[i][1], zscale*initialBox[i][2]), box[i], 1e-5); - } - - // The barostat should have put all particles inside the first periodic box. One integration step - // has happened since then, so they may have moved slightly outside it. - - for (int i = 0; i < numParticles; i++) { - Vec3 pos = state.getPositions()[i]; - ASSERT(pos[2]/box[2][2] > -1 && pos[2]/box[2][2] < 2); - pos -= box[2]*floor(pos[2]/box[2][2]); - ASSERT(pos[1]/box[1][1] > -1 && pos[1]/box[1][1] < 2); - pos -= box[1]*floor(pos[1]/box[1][1]); - ASSERT(pos[0]/box[0][0] > -1 && pos[0]/box[0][0] < 2); - } -} - -/** - * Run a constant pressure simulation on an anisotropic Einstein crystal - * using isotropic and anisotropic barostats. There are a total of 15 simulations: - * - * 1) 3 pressures: 9.0, 10.0, 11.0 bar, for each of the following groups: - * 2) 3 groups of simulations that scale just one axis: x, y, z - * 3) 1 group of simulations that scales all three axes in the anisotropic barostat - * 4) 1 group of simulations that scales all three axes in the isotropic barostat - * - * Results that we will check: - * - * a) In each group of simulations, the volume should decrease with increasing pressure - * b) In the three simulation groups that scale just one axis, the compressibility (i.e. incremental volume change - * with increasing pressure) should go like kx > ky > kz (because the spring constant is largest in the z-direction) - * c) The anisotropic barostat should produce the same result as the isotropic barostat when all three axes are scaled - */ -void testEinsteinCrystal() { - const int numParticles = 64; - const int frequency = 2; - const int equil = 10000; - const int steps = 5000; - const double pressure = 10.0; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp = 300.0; // Only test one temperature since we're looking at three pressures. - const double pres3[] = {2.0, 8.0, 15.0}; - const double initialVolume = numParticles*BOLTZ*temp/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - vector initialPositions(3); - vector results; - // Run four groups of anisotropic simulations; scaling just x, y, z, then all three. - for (int a = 0; a < 4; a++) { - // Test barostat for three different pressures. - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pres3[p], pres3[p], pres3[p]), temp, (a==0||a==3), (a==1||a==3), (a==2||a==3), frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - } - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloBarostat* barostat = new MonteCarloBarostat(pres3[p], temp, frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - - // Check to see if volumes decrease with increasing pressure. - ASSERT_USUALLY_TRUE(results[0] > results[1]); - ASSERT_USUALLY_TRUE(results[1] > results[2]); - ASSERT_USUALLY_TRUE(results[3] > results[4]); - ASSERT_USUALLY_TRUE(results[4] > results[5]); - ASSERT_USUALLY_TRUE(results[6] > results[7]); - ASSERT_USUALLY_TRUE(results[7] > results[8]); - - // Check to see if incremental volume changes with increasing pressure go like kx > ky > kz. - ASSERT_USUALLY_TRUE((results[0] - results[1]) > (results[3] - results[4])); - ASSERT_USUALLY_TRUE((results[1] - results[2]) > (results[4] - results[5])); - ASSERT_USUALLY_TRUE((results[3] - results[4]) > (results[6] - results[7])); - ASSERT_USUALLY_TRUE((results[4] - results[5]) > (results[7] - results[8])); - - // Check to see if the volumes are equal for isotropic and anisotropic (all axis). - ASSERT_USUALLY_EQUAL_TOL(results[9], results[12], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[10], results[13], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[11], results[14], 3/std::sqrt((double) steps)); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testIdealGas(); - testIdealGasAxis(0); - testIdealGasAxis(1); - testIdealGasAxis(2); - testRandomSeed(); - testTriclinic(); - //testEinsteinCrystal(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLMonteCarloBarostat.cpp b/platforms/opencl/tests/TestOpenCLMonteCarloBarostat.cpp index 72053c5ecaa59e12f73ae192c804a6615479e22c..d8025599bfc90e9cc1432cc4563422e143c45014 100644 --- a/platforms/opencl/tests/TestOpenCLMonteCarloBarostat.cpp +++ b/platforms/opencl/tests/TestOpenCLMonteCarloBarostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,263 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of MonteCarloBarostat. - */ +#include "OpenCLTests.h" +#include "TestMonteCarloBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -void testChangingBoxSize() { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nb->setCutoffDistance(2.0); - nb->addParticle(1, 0.5, 0.5); - system.addForce(nb); - LangevinIntegrator integrator(300.0, 1.0, 0.01); - Context context(system, integrator, platform); - vector positions; - positions.push_back(Vec3()); - context.setPositions(positions); - Vec3 x, y, z; - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(4, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 5, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 6), z, 0); - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 9)); - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(7, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 8, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 9), z, 0); - - // Shrinking the box too small should produce an exception. - - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 3.9, 0), Vec3(0, 0, 9)); - bool ok = true; - try { - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ok = false; - } - catch (exception& ex) { - } - ASSERT(ok); -} - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp[0], frequency); - system.addForce(barostat); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - ASSERT_EQUAL_TOL(0.5*box[0][0], box[1][1], 1e-5); - ASSERT_EQUAL_TOL(2*box[0][0], box[2][2], 1e-5); - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } +void runPlatformTests() { + testWater(); } - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, 1); - system.addForce(barostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testWater() { - const int gridSize = 8; - const int numMolecules = gridSize*gridSize*gridSize; - const int frequency = 10; - const int steps = 400; - const double temp = 273.15; - const double pressure = 3; - const double spacing = 0.32; - const double angle = 109.47*M_PI/180; - const double dOH = 0.1; - const double dHH = dOH*2*std::sin(0.5*angle); - - // Create a box of SPC water molecules. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(gridSize*spacing, 0, 0), Vec3(0, gridSize*spacing, 0), Vec3(0, 0, gridSize*spacing)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setUseDispersionCorrection(true); - vector positions; - Vec3 offset1(dOH, 0, 0); - Vec3 offset2(dOH*std::cos(angle), dOH*std::sin(angle), 0); - for (int i = 0; i < gridSize; ++i) { - for (int j = 0; j < gridSize; ++j) { - for (int k = 0; k < gridSize; ++k) { - int firstParticle = system.getNumParticles(); - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - nonbonded->addParticle(-0.82, 0.316557, 0.650194); - nonbonded->addParticle(0.41, 1, 0); - nonbonded->addParticle(0.41, 1, 0); - Vec3 pos = Vec3(spacing*i, spacing*j, spacing*k); - positions.push_back(pos); - positions.push_back(pos+offset1); - positions.push_back(pos+offset2); - system.addConstraint(firstParticle, firstParticle+1, dOH); - system.addConstraint(firstParticle, firstParticle+2, dOH); - system.addConstraint(firstParticle+1, firstParticle+2, dHH); - nonbonded->addException(firstParticle, firstParticle+1, 0, 1, 0); - nonbonded->addException(firstParticle, firstParticle+2, 0, 1, 0); - nonbonded->addException(firstParticle+1, firstParticle+2, 0, 1, 0); - } - } - } - system.addForce(nonbonded); - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, frequency); - system.addForce(barostat); - - // Simulate it and see if the density matches the expected value (1 g/mL). - - LangevinIntegrator integrator(temp, 1.0, 0.002); - Context context(system, integrator, platform); - context.setPositions(positions); - integrator.step(2000); - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double density = numMolecules*18/(AVOGADRO*volume*1e-21); - ASSERT_USUALLY_EQUAL_TOL(1.0, density, 0.02); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testChangingBoxSize(); - testIdealGas(); - testRandomSeed(); - testWater(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - - diff --git a/platforms/opencl/tests/TestOpenCLNonbondedForce.cpp b/platforms/opencl/tests/TestOpenCLNonbondedForce.cpp index 16ea4cd0ab0c771a483754bb59cd5a3fbb033ea4..7ed2003dd9bb3fb115201f894cd2a0f07251c7ad 100644 --- a/platforms/opencl/tests/TestOpenCLNonbondedForce.cpp +++ b/platforms/opencl/tests/TestOpenCLNonbondedForce.cpp @@ -29,788 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of NonbondedForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/internal/ContextImpl.h" -#include "OpenCLArray.h" -#include "OpenCLNonbondedUtilities.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testCoulomb() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0.0, 0.1, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0.5, 1, 0); - forceField->addParticle(-1.5, 1, 0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = ONE_4PI_EPS0*(-0.75)/4.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(-0.75)/2.0, state.getPotentialEnergy(), TOL); -} - -void testLJ() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0.0, 0.1, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0, 1.2, 1); - forceField->addParticle(0, 1.4, 2); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.3/2.0; - double eps = SQRT_TWO; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/2.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)), state.getPotentialEnergy(), TOL); -} - -void testExclusionsAnd14() { - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - LangevinIntegrator integrator(0.0, 0.1, 0.01); - Context context(system, integrator, platform); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - vector positions(5); - const double r = 1.0; - for (int j = 0; j < 5; ++j) { - nonbonded->setParticleParameters(j, 0, 1.5, 0); - positions[j] = Vec3(0, j, 0); - } - nonbonded->setParticleParameters(0, 0, 1.5, 1); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - positions[i] = Vec3(r, 0, 0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.5/r; - double eps = 1.0; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - nonbonded->setParticleParameters(0, 2, 1.5, 0); - nonbonded->setParticleParameters(i, 2, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? 4/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*4/(r*r); - energy = ONE_4PI_EPS0*4/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0.0, 0.1, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - const double cutoff = 2.9; - forceField->setCutoffDistance(cutoff); - const double eps = 50.0; - forceField->setReactionFieldDielectric(eps); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force1 = ONE_4PI_EPS0*(1.0)*(0.25-2.0*krf*2.0); - const double force2 = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(0, -force1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force1-force2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force2, 0), forces[2], TOL); - const double energy1 = ONE_4PI_EPS0*(1.0)*(0.5+krf*4.0-crf); - const double energy2 = ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf); - ASSERT_EQUAL_TOL(energy1+energy2, state.getPotentialEnergy(), TOL); -} - -void testCutoff14() { - System system; - LangevinIntegrator integrator(0.0, 0.1, 0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - for (int i = 0; i < 5; ++i) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - const double cutoff = 3.5; - nonbonded->setCutoffDistance(cutoff); - const double eps = 30.0; - nonbonded->setReactionFieldDielectric(eps); - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(5); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(2, 0, 0); - positions[3] = Vec3(3, 0, 0); - positions[4] = Vec3(4, 0, 0); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - nonbonded->setParticleParameters(0, 0, 1.5, 1); - for (int j = 1; j < 5; ++j) - nonbonded->setParticleParameters(j, 0, 1.5, 0); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double r = positions[i][0]; - double x = 1.5/r; - double e = 1.0; - double force = 4.0*e*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*e*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - const double q = 0.7; - nonbonded->setParticleParameters(0, q, 1.5, 0); - nonbonded->setParticleParameters(i, q, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? q*q/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - context.reinitialize(); - context.setPositions(positions); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*q*q/(r*r); - energy = ONE_4PI_EPS0*q*q/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0.0, 0.1, 0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addException(0, 1, 0.0, 1.0, 0.0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - positions[2] = Vec3(3, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2*ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf), state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta*ONE_4PI_EPS0*(-1.0/(distance*distance*distance)+2.0*krf); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(1.0/distance+krf*distance*distance-crf), state.getPotentialEnergy(), 1e-4); - ASSERT_EQUAL_VEC(force, state.getForces()[0], 1e-4); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], 1e-4); - } - } -} - -void testLargeSystem() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - HarmonicBondForce* bonds = new HarmonicBondForce(); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - bonds->addBond(2*i, 2*i+1, 1.0, 0.1); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - - // Try with cutoffs but not periodic boundary conditions, and make sure the cl and Reference - // platforms agree. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.addForce(bonds); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context clContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - clContext.setPositions(positions); - clContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - State clState = clContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(clState.getPositions()[i], referenceState.getPositions()[i], tol); - ASSERT_EQUAL_VEC(clState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(clState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(clState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now do the same thing with periodic boundary conditions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - clContext.reinitialize(); - referenceContext.reinitialize(); - clContext.setPositions(positions); - clContext.setVelocities(velocities); - referenceContext.setPositions(positions); - referenceContext.setVelocities(velocities); - clState = clContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) { - double dx = clState.getPositions()[i][0]-referenceState.getPositions()[i][0]; - double dy = clState.getPositions()[i][1]-referenceState.getPositions()[i][1]; - double dz = clState.getPositions()[i][2]-referenceState.getPositions()[i][2]; - ASSERT_EQUAL_TOL(dx-floor(dx/boxSize+0.5)*boxSize, 0, tol); - ASSERT_EQUAL_TOL(dy-floor(dy/boxSize+0.5)*boxSize, 0, tol); - ASSERT_EQUAL_TOL(dz-floor(dz/boxSize+0.5)*boxSize, 0, tol); - ASSERT_EQUAL_VEC(clState.getVelocities()[i], referenceState.getVelocities()[i], tol); - ASSERT_EQUAL_VEC(clState.getForces()[i], referenceState.getForces()[i], tol); - } - ASSERT_EQUAL_TOL(clState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} -/* -void testBlockInteractions(bool periodic) { - const int blockSize = 32; - const int numBlocks = 100; - const int numParticles = blockSize*numBlocks; - const double cutoff = 1.0; - const double boxSize = (periodic ? 5.1 : 1.1); - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(1.0, 0.2, 0.2); - positions[i] = Vec3(boxSize*(3*genrand_real2(sfmt)-1), boxSize*(3*genrand_real2(sfmt)-1), boxSize*(3*genrand_real2(sfmt)-1)); - } - nonbonded->setNonbondedMethod(periodic ? NonbondedForce::CutoffPeriodic : NonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - ContextImpl* contextImpl = *reinterpret_cast(&context); - OpenCLPlatform::PlatformData& data = *static_cast(contextImpl->getPlatformData()); - OpenCLContext& clcontext = *data.contexts[0]; - OpenCLNonbondedUtilities& nb = clcontext.getNonbondedUtilities(); - State state = context.getState(State::Positions | State::Velocities | State::Forces); - nb.updateNeighborListSize(); - state = context.getState(State::Positions | State::Velocities | State::Forces); - - // Verify that the bounds of each block were calculated correctly. - - vector posq(clcontext.getPosq().getSize()); - vector blockCenters(numBlocks); - vector blockBoundingBoxes(numBlocks); - if (clcontext.getUseDoublePrecision()) { - clcontext.getPosq().download(posq); - nb.getBlockCenters().download(blockCenters); - nb.getBlockBoundingBoxes().download(blockBoundingBoxes); - } - else { - vector posqf(clcontext.getPosq().getSize()); - vector blockCentersf(numBlocks); - vector blockBoundingBoxesf(numBlocks); - clcontext.getPosq().download(posqf); - nb.getBlockCenters().download(blockCentersf); - nb.getBlockBoundingBoxes().download(blockBoundingBoxesf); - for (int i = 0; i < numParticles; i++) - posq[i] = mm_double4(posqf[i].x, posqf[i].y, posqf[i].z, posqf[i].w); - for (int i = 0; i < numBlocks; i++) { - blockCenters[i] = mm_double4(blockCentersf[i].x, blockCentersf[i].y, blockCentersf[i].z, blockCentersf[i].w); - blockBoundingBoxes[i] = mm_double4(blockBoundingBoxesf[i].x, blockBoundingBoxesf[i].y, blockBoundingBoxesf[i].z, blockBoundingBoxesf[i].w); - } - } - for (int i = 0; i < numBlocks; i++) { - mm_double4 gridSize = blockBoundingBoxes[i]; - mm_double4 center = blockCenters[i]; - if (periodic) { - ASSERT(gridSize.x < 0.5*boxSize); - ASSERT(gridSize.y < 0.5*boxSize); - ASSERT(gridSize.z < 0.5*boxSize); - } - double minx = 0.0, maxx = 0.0, miny = 0.0, maxy = 0.0, minz = 0.0, maxz = 0.0, radius = 0.0; - for (int j = 0; j < blockSize; j++) { - mm_double4 pos = posq[i*blockSize+j]; - double dx = pos.x-center.x; - double dy = pos.y-center.y; - double dz = pos.z-center.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - ASSERT(abs(dx) < gridSize.x+TOL); - ASSERT(abs(dy) < gridSize.y+TOL); - ASSERT(abs(dz) < gridSize.z+TOL); - minx = min(minx, dx); - maxx = max(maxx, dx); - miny = min(miny, dy); - maxy = max(maxy, dy); - minz = min(minz, dz); - maxz = max(maxz, dz); - } - ASSERT_EQUAL_TOL(-minx, gridSize.x, TOL); - ASSERT_EQUAL_TOL(maxx, gridSize.x, TOL); - ASSERT_EQUAL_TOL(-miny, gridSize.y, TOL); - ASSERT_EQUAL_TOL(maxy, gridSize.y, TOL); - ASSERT_EQUAL_TOL(-minz, gridSize.z, TOL); - ASSERT_EQUAL_TOL(maxz, gridSize.z, TOL); - } - - // Verify that interactions were identified correctly. - - vector interactionCount; - vector interactingTiles; - vector interactionFlags; - nb.getInteractionCount().download(interactionCount); - int numWithInteractions = interactionCount[0]; - vector hasInteractions(numBlocks*(numBlocks+1)/2, false); - nb.getInteractingTiles().download(interactingTiles); - if (clcontext.getSIMDWidth() == 32) - nb.getInteractionFlags().download(interactionFlags); - const unsigned int atoms = clcontext.getPaddedNumAtoms(); - const unsigned int grid = OpenCLContext::TileSize; - const unsigned int dim = clcontext.getNumAtomBlocks(); - for (int i = 0; i < numWithInteractions; i++) { - unsigned int x = interactingTiles[i].x; - unsigned int y = interactingTiles[i].y; - int index = (x > y ? x+y*dim-y*(y+1)/2 : y+x*dim-x*(x+1)/2); - hasInteractions[index] = true; - - // Make sure this tile really should have been flagged based on bounding volumes. - - mm_double4 gridSize1 = blockBoundingBoxes[x]; - mm_double4 gridSize2 = blockBoundingBoxes[y]; - mm_double4 center1 = blockCenters[x]; - mm_double4 center2 = blockCenters[y]; - double dx = center1.x-center2.x; - double dy = center1.y-center2.y; - double dz = center1.z-center2.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - dx = max(0.0, abs(dx)-gridSize1.x-gridSize2.x); - dy = max(0.0, abs(dy)-gridSize1.y-gridSize2.y); - dz = max(0.0, abs(dz)-gridSize1.z-gridSize2.z); - ASSERT(sqrt(dx*dx+dy*dy+dz*dz) < cutoff+TOL); - - // Check the interaction flags. - - if (clcontext.getSIMDWidth() == 32) { - unsigned int flags = interactionFlags[i]; - for (int atom2 = 0; atom2 < 32; atom2++) { - if ((flags & 1) == 0) { - mm_double4 pos2 = posq[y*blockSize+atom2]; - for (int atom1 = 0; atom1 < blockSize; ++atom1) { - mm_double4 pos1 = posq[x*blockSize+atom1]; - double dx = pos2.x-pos1.x; - double dy = pos2.y-pos1.y; - double dz = pos2.z-pos1.z; - if (periodic) { - dx -= floor(0.5+dx/boxSize)*boxSize; - dy -= floor(0.5+dy/boxSize)*boxSize; - dz -= floor(0.5+dz/boxSize)*boxSize; - } - ASSERT(dx*dx+dy*dy+dz*dz > cutoff*cutoff); - } - } - flags >>= 1; - } - } - } - - // Check the tiles that did not have interactions to make sure all atoms are beyond the cutoff. - - for (int i = 0; i < (int) hasInteractions.size(); i++) - if (!hasInteractions[i]) { - unsigned int y = (unsigned int) std::floor(numBlocks+0.5-std::sqrt((numBlocks+0.5)*(numBlocks+0.5)-2*i)); - unsigned int x = (i-y*numBlocks+y*(y+1)/2); - for (int atom1 = 0; atom1 < blockSize; ++atom1) { - mm_double4 pos1 = posq[x*blockSize+atom1]; - for (int atom2 = 0; atom2 < blockSize; ++atom2) { - mm_double4 pos2 = posq[y*blockSize+atom2]; - double dx = pos1.x-pos2.x; - double dy = pos1.y-pos2.y; - double dz = pos1.z-pos2.z; - if (periodic) { - dx -= (floor(0.5+dx/boxSize)*boxSize); - dy -= (floor(0.5+dy/boxSize)*boxSize); - dz -= (floor(0.5+dz/boxSize)*boxSize); - } - ASSERT(dx*dx+dy*dy+dz*dz > cutoff*cutoff); - } - } - } -} -*/ -void testDispersionCorrection() { - // Create a box full of identical particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - int index = 0; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.1, 0.5); - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - // See if the correction has the correct value. - - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(false); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - double term1 = (0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - double term2 = (0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - double expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); - - // Now modify half the particles to be different, and see if it is still correct. - - int numType2 = 0; - for (int i = 0; i < numParticles; i += 2) { - nonbonded->setParticleParameters(i, 0, 1, 1); - numType2++; - } - int numType1 = numParticles-numType2; - nonbonded->updateParametersInContext(context); - energy2 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(true); - context.reinitialize(); - context.setPositions(positions); - energy1 = context.getState(State::Energy).getPotentialEnergy(); - term1 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - term2 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - term1 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 12)/pow(cutoff, 9))/9; - term2 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 6)/pow(cutoff, 3))/3; - double combinedSigma = 0.5*(1+1.1); - double combinedEpsilon = sqrt(1*0.5); - term1 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 12)/pow(cutoff, 9))/9; - term2 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 6)/pow(cutoff, 3))/3; - term1 /= (numParticles*(numParticles+1))/2; - term2 /= (numParticles*(numParticles+1))/2; - expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); -} - -void testChangingParameters() { - const int numMolecules = 600; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 20.0; - const double tol = 2e-3; - ReferencePlatform reference; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - nonbonded->addParticle(-1.0, 0.2, 0.1); - nonbonded->addParticle(1.0, 0.1, 0.1); - } - else { - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.1, 0.2); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); - } - nonbonded->setNonbondedMethod(NonbondedForce::PME); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - - // See if Reference and OpenCL give the same forces and energies. - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context clContext(system, integrator1, platform); - Context referenceContext(system, integrator2, reference); - clContext.setPositions(positions); - referenceContext.setPositions(positions); - State clState = clContext.getState(State::Forces | State::Energy); - State referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(clState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(clState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); - - // Now modify parameters and see if they still agree. - - for (int i = 0; i < numParticles; i += 5) { - double charge, sigma, epsilon; - nonbonded->getParticleParameters(i, charge, sigma, epsilon); - nonbonded->setParticleParameters(i, 1.5*charge, 1.1*sigma, 1.7*epsilon); - } - nonbonded->updateParametersInContext(clContext); - nonbonded->updateParametersInContext(referenceContext); - clState = clContext.getState(State::Forces | State::Energy); - referenceState = referenceContext.getState(State::Forces | State::Energy); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(clState.getForces()[i], referenceState.getForces()[i], tol); - ASSERT_EQUAL_TOL(clState.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); -} +#include "OpenCLTests.h" +#include "TestNonbondedForce.h" void testParallelComputation(NonbondedForce::NonbondedMethod method) { System system; @@ -871,61 +91,6 @@ void testParallelComputation(NonbondedForce::NonbondedMethod method) { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -void testSwitchingFunction(NonbondedForce::NonbondedMethod method) { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(0, 1.2, 1); - nonbonded->addParticle(0, 1.4, 2); - nonbonded->setNonbondedMethod(method); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - nonbonded->setUseDispersionCorrection(false); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - double eps = SQRT_TWO; - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double x = 1.3/r; - double expectedEnergy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - void testReordering() { // Check that reordering of atoms doesn't alter their positions. @@ -953,34 +118,9 @@ void testReordering() { } } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testCoulomb(); - testLJ(); - testExclusionsAnd14(); - testCutoff(); - testCutoff14(); - testPeriodic(); - testTriclinic(); - testLargeSystem(); -// testBlockInteractions(false); -// testBlockInteractions(true); - testDispersionCorrection(); - testChangingParameters(); - testParallelComputation(NonbondedForce::NoCutoff); - testParallelComputation(NonbondedForce::Ewald); - testParallelComputation(NonbondedForce::PME); - testSwitchingFunction(NonbondedForce::CutoffNonPeriodic); - testSwitchingFunction(NonbondedForce::PME); - testReordering(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(NonbondedForce::NoCutoff); + testParallelComputation(NonbondedForce::Ewald); + testParallelComputation(NonbondedForce::PME); + testReordering(); } - diff --git a/platforms/opencl/tests/TestOpenCLPeriodicTorsionForce.cpp b/platforms/opencl/tests/TestOpenCLPeriodicTorsionForce.cpp index 5b60ce940822916b74c1ab6dd170e7f00d30ee37..8710f8d21c897e6ea3c0740b4451276755af74ab 100644 --- a/platforms/opencl/tests/TestOpenCLPeriodicTorsionForce.cpp +++ b/platforms/opencl/tests/TestOpenCLPeriodicTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,69 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of PeriodicTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testPeriodicTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* forceField = new PeriodicTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 2); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque = -2*1.1*std::sin(2*PI_M/3); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.1*(1+std::cos(2*PI_M/3)), state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 3, PI_M/3.2, 1.3); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta = (3*PI_M/2)-(PI_M/3.2); - double torque = -3*1.3*std::sin(dtheta); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.3*(1+std::cos(dtheta)), state.getPotentialEnergy(), TOL); - } -} +#include "OpenCLTests.h" +#include "TestPeriodicTorsionForce.h" void testParallelComputation() { System system; @@ -121,18 +60,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testPeriodicTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/opencl/tests/TestOpenCLRBTorsionForce.cpp b/platforms/opencl/tests/TestOpenCLRBTorsionForce.cpp index e5da88f6a39aaa1c4c07e1e79cb032a7e3685242..3525af580e5a3e76c8ca0d01c023e567e52acaec 100644 --- a/platforms/opencl/tests/TestOpenCLRBTorsionForce.cpp +++ b/platforms/opencl/tests/TestOpenCLRBTorsionForce.cpp @@ -29,88 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of RBTorsionForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/RBTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testRBTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - RBTorsionForce* forceField = new RBTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 1, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.1*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.1*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.11*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.11*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} +#include "OpenCLTests.h" +#include "TestRBTorsionForce.h" void testParallelComputation() { System system; @@ -140,18 +60,6 @@ void testParallelComputation() { ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-5); } -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testRBTorsions(); - testParallelComputation(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testParallelComputation(); } - diff --git a/platforms/opencl/tests/TestOpenCLSettle.cpp b/platforms/opencl/tests/TestOpenCLSettle.cpp index 919d5647c165a3fa1150fd935abffa75c58825fa..93d89da27afaf65e5dceb7a04afcf514ea201d69 100644 --- a/platforms/opencl/tests/TestOpenCLSettle.cpp +++ b/platforms/opencl/tests/TestOpenCLSettle.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,90 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of the SETTLE algorithm. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -void testConstraints() { - const int numMolecules = 10; - const int numParticles = numMolecules*3; - const int numConstraints = numMolecules*3; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numMolecules; ++i) { - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - forceField->addParticle(-0.82, 0.317, 0.65); - forceField->addParticle(0.41, 1.0, 0.0); - forceField->addParticle(0.41, 1.0, 0.0); - system.addConstraint(i*3, i*3+1, 0.1); - system.addConstraint(i*3, i*3+2, 0.1); - system.addConstraint(i*3+1, i*3+2, 0.163); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; ++i) { - positions[i*3] = Vec3((i%4)*0.4, (i/4)*0.4, 0); - positions[i*3+1] = positions[i*3]+Vec3(0.1, 0, 0); - positions[i*3+2] = positions[i*3]+Vec3(-0.03333, 0.09428, 0); - velocities[i*3] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+1] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+2] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-5); - } - } -} +#include "OpenCLTests.h" +#include "TestSettle.h" -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testConstraints(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLVariableLangevinIntegrator.cpp b/platforms/opencl/tests/TestOpenCLVariableLangevinIntegrator.cpp index 613e4acf02107b230b21022cf2829d6469aca86d..dd424404faf6bdf7d02ff14a8c094ccd641756e3 100644 --- a/platforms/opencl/tests/TestOpenCLVariableLangevinIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLVariableLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,311 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of VariableLangevinIntegrator. - */ +#include "OpenCLTests.h" +#include "TestVariableLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableLangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableLangevinIntegrator integrator(0, 0.1, 1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Now set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 5.0, 5e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 5000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(5); - } - ke /= 5000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - integrator.setConstraintTolerance(1e-5); - integrator.setRandomNumberSeed(0); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableLangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - int numParticles = 0; - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - ++numParticles; - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableLangevinIntegrator integrator(temp, 6.0, 1e-4); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(2.0); - - // Make sure the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 1000; ++i) { - double t = 2.0 + 0.02 * (i + 1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - } - ke /= 1000; - double expected = 1.5 * numParticles * BOLTZ * temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLVariableVerletIntegrator.cpp b/platforms/opencl/tests/TestOpenCLVariableVerletIntegrator.cpp index 523462e6a37a9f336e756ca17f29c4b97afeecfb..c8ca9155ec7c25c8dd4de6901fc23c22abf2ac7b 100644 --- a/platforms/opencl/tests/TestOpenCLVariableVerletIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLVariableVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,289 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of VariableVerletIntegrator. - */ +#include "OpenCLTests.h" +#include "TestVariableVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableVerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableVerletIntegrator integrator(1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - double finalTime = context.getState(State::Positions).getTime(); - ASSERT(finalTime > 0.1); - - // Now try the stepTo() method. - - finalTime += 0.5; - integrator.stepTo(finalTime); - ASSERT_EQUAL(finalTime, context.getState(State::Positions).getTime()); -} - -void testConstrainedClusters() { - const int numParticles = 7; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - ASSERT(context.getState(State::Positions).getTime() > 0.1); -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableVerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableVerletIntegrator integrator(1e-5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(1.0); - - // Simulate it and see whether energy remains constant. - - State state0 = context.getState(State::Energy); - double initialEnergy = state0.getKineticEnergy() + state0.getPotentialEnergy(); - for (int i = 0; i < 20; i++) { - double t = 1.0 + 0.05*(i+1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy() + state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/opencl/tests/TestOpenCLVerletIntegrator.cpp b/platforms/opencl/tests/TestOpenCLVerletIntegrator.cpp index ae1a7f588e468fc95bdce6c61fdc3acbc1f63b3b..681b748422bcdce141697a91c486879b3f265375 100644 --- a/platforms/opencl/tests/TestOpenCLVerletIntegrator.cpp +++ b/platforms/opencl/tests/TestOpenCLVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,223 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of VerletIntegrator. - */ +#include "OpenCLTests.h" +#include "TestVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstraints() { - const int numParticles = 8; - const int numConstraints = 5; - System system; - VerletIntegrator integrator(0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - system.addConstraint(2, 3, 1.0); - system.addConstraint(4, 5, 1.0); - system.addConstraint(6, 7, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-4); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } +void runPlatformTests() { } - -void testConstrainedClusters() { - const int numParticles = 7; - System system; - VerletIntegrator integrator(0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/opencl/tests/TestOpenCLVirtualSites.cpp b/platforms/opencl/tests/TestOpenCLVirtualSites.cpp index 09e690fe142c424ec1ead4bcc8f9cd6152ef5e0a..1cc5cdca5b6a683bce287a30eed85e676fc442f2 100644 --- a/platforms/opencl/tests/TestOpenCLVirtualSites.cpp +++ b/platforms/opencl/tests/TestOpenCLVirtualSites.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2014 Stanford University and the Authors. * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,394 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the OpenCL implementation of virtual sites. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "OpenCLPlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -static OpenCLPlatform platform; - -/** - * Check that massless particles are handled correctly. - */ -void testMasslessParticle() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - CustomBondForce* bonds = new CustomBondForce("-1/r"); - system.addForce(bonds); - vector params; - bonds->addBond(0, 1, params); - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(0, 0, 0); - velocities[1] = Vec3(0, 1, 0); - context.setVelocities(velocities); - - // The second particle should move in a circular orbit around the first one. - // Compare it to the analytical solution. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Forces); - double time = state.getTime(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getPositions()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getVelocities()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(cos(time), sin(time), 0), state.getPositions()[1], 0.01); - ASSERT_EQUAL_VEC(Vec3(-sin(time), cos(time), 0), state.getVelocities()[1], 0.01); - integrator.step(1); - } -} - -/** - * Test a TwoParticleAverageSite virtual site. - */ -void testTwoParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.8, 0.2)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.8+pos[1]*0.2, pos[2], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.1+0.3*0.8, 0, 0), state.getForces()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.2+0.3*0.2, 0, 0), state.getForces()[1], 1e-4); - integrator.step(1); - } -} - -/** - * Test a ThreeParticleAverageSite virtual site. - */ -void testThreeParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new ThreeParticleAverageSite(0, 1, 2, 0.2, 0.3, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.2+pos[1]*0.3+pos[2]*0.5, pos[3], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4*0.2, 0, 0), state.getForces()[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.2+0.4*0.3, 0, 0), state.getForces()[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3+0.4*0.5, 0, 0), state.getForces()[2], 1e-5); - integrator.step(1); - } -} - -/** - * Test an OutOfPlaneSite virtual site. - */ -void testOutOfPlane() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new OutOfPlaneSite(0, 1, 2, 0.3, 0.4, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 v12 = pos[1]-pos[0]; - Vec3 v13 = pos[2]-pos[0]; - Vec3 cross = v12.cross(v13); - ASSERT_EQUAL_VEC(pos[0]+v12*0.3+v13*0.4+cross*0.5, pos[3], 1e-5); - const vector& f = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1+0.2+0.3+0.4, 0, 0), f[0]+f[1]+f[2], 1e-5); - Vec3 f2(0.4*0.3, 0.4*0.5*v13[2], -0.4*0.5*v13[1]); - Vec3 f3(0.4*0.4, -0.4*0.5*v12[2], 0.4*0.5*v12[1]); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4, 0, 0)-f2-f3, f[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.2, 0, 0)+f2, f[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3, 0, 0)+f3, f[2], 1e-5); - integrator.step(1); - } -} - -/** - * Test a LocalCoordinatesSite virtual site. - */ -void testLocalCoordinates() { - const Vec3 originWeights(0.2, 0.3, 0.5); - const Vec3 xWeights(-1.0, 0.5, 0.5); - const Vec3 yWeights(0.0, -1.0, 1.0); - const Vec3 localPosition(0.4, 0.3, 0.2); - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new LocalCoordinatesSite(0, 1, 2, originWeights, xWeights, yWeights, localPosition)); - CustomExternalForce* forceField = new CustomExternalForce("2*x^2+3*y^2+4*z^2"); - system.addForce(forceField); - vector params; - forceField->addParticle(0, params); - forceField->addParticle(1, params); - forceField->addParticle(2, params); - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4), positions2(4), positions3(4); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < 100; i++) { - // Set the particles at random positions. - - Vec3 xdir, ydir, zdir; - do { - for (int j = 0; j < 3; j++) - positions[j] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - xdir = positions[0]*xWeights[0] + positions[1]*xWeights[1] + positions[2]*xWeights[2]; - ydir = positions[0]*yWeights[0] + positions[1]*yWeights[1] + positions[2]*yWeights[2]; - zdir = xdir.cross(ydir); - if (sqrt(xdir.dot(xdir)) > 0.1 && sqrt(ydir.dot(ydir)) > 0.1 && sqrt(zdir.dot(zdir)) > 0.1) - break; // These positions give a reasonable coordinate system. - } while (true); - context.setPositions(positions); - context.applyConstraints(0.0001); - - // See if the virtual site is positioned correctly. - - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 origin = pos[0]*originWeights[0] + pos[1]*originWeights[1] + pos[2]*originWeights[2]; - xdir /= sqrt(xdir.dot(xdir)); - zdir /= sqrt(zdir.dot(zdir)); - ydir = zdir.cross(xdir); - ASSERT_EQUAL_VEC(origin+xdir*localPosition[0]+ydir*localPosition[1]+zdir*localPosition[2], pos[3], 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < 3; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - norm = std::sqrt(norm); - const double delta = 1e-2; - double step = 0.5*delta/norm; - for (int i = 0; i < 3; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - context.applyConstraints(0.0001); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - context.applyConstraints(0.0001); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-3) - } -} - -/** - * Make sure that energy, linear momentum, and angular momentum are all conserved - * when using virtual sites. - */ -void testConservationLaws() { - System system; - NonbondedForce* forceField = new NonbondedForce(); - system.addForce(forceField); - vector positions; - - // Create a linear molecule with a TwoParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.4, 0.6)); - system.addConstraint(0, 1, 2.0); - for (int i = 0; i < 3; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i, j, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(2, 0, 0)); - positions.push_back(Vec3()); - - // Create a planar molecule with a ThreeParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(6, new ThreeParticleAverageSite(3, 4, 5, 0.3, 0.5, 0.2)); - system.addConstraint(3, 4, 1.0); - system.addConstraint(3, 5, 1.0); - system.addConstraint(4, 5, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+3, j+3, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 1)); - positions.push_back(Vec3(1, 0, 1)); - positions.push_back(Vec3(0, 1, 1)); - positions.push_back(Vec3()); - - // Create a tetrahedral molecule with an OutOfPlane virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(10, new OutOfPlaneSite(7, 8, 9, 0.3, 0.5, 0.2)); - system.addConstraint(7, 8, 1.0); - system.addConstraint(7, 9, 1.0); - system.addConstraint(8, 9, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+7, j+7, 0, 1, 0); - } - positions.push_back(Vec3(1, 0, -1)); - positions.push_back(Vec3(2, 0, -1)); - positions.push_back(Vec3(1, 1, -1)); - positions.push_back(Vec3()); - - // Create a molecule with a LocalCoordinatesSite virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(14, new LocalCoordinatesSite(11, 12, 13, Vec3(0.3, 0.3, 0.4), Vec3(1.0, -0.5, -0.5), Vec3(0, -1.0, 1.0), Vec3(0.2, 0.2, 1.0))); - system.addConstraint(11, 12, 1.0); - system.addConstraint(11, 13, 1.0); - system.addConstraint(12, 13, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+11, j+11, 0, 1, 0); - } - positions.push_back(Vec3(1, 2, 0)); - positions.push_back(Vec3(2, 2, 0)); - positions.push_back(Vec3(1, 3, 0)); - positions.push_back(Vec3()); - - // Simulate it and check conservation laws. - - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(0.0001); - int numParticles = system.getNumParticles(); - double initialEnergy; - Vec3 initialMomentum, initialAngularMomentum; - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - const vector& pos = state.getPositions(); - const vector& vel = state.getVelocities(); - const vector& f = state.getForces(); - double energy = state.getPotentialEnergy(); - for (int j = 0; j < numParticles; j++) { - Vec3 v = vel[j] + f[j]*0.5*integrator.getStepSize(); - energy += 0.5*system.getParticleMass(j)*v.dot(v); - } - if (i == 0) - initialEnergy = energy; - else - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - Vec3 momentum; - for (int j = 0; j < numParticles; j++) - momentum += vel[j]*system.getParticleMass(j); - if (i == 0) - initialMomentum = momentum; - else - ASSERT_EQUAL_VEC(initialMomentum, momentum, 0.02); - Vec3 angularMomentum; - for (int j = 0; j < numParticles; j++) - angularMomentum += pos[j].cross(vel[j])*system.getParticleMass(j); - if (i == 0) - initialAngularMomentum = angularMomentum; - else - ASSERT_EQUAL_VEC(initialAngularMomentum, angularMomentum, 0.05); - integrator.step(1); - } -} +#include "OpenCLTests.h" +#include "TestVirtualSites.h" /** * Make sure that atom reordering respects virtual sites. @@ -524,64 +138,6 @@ void testReordering() { } } -/** - * Test a System where multiple virtual sites are all calculated from the same particles. - */ -void testOverlappingSites() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - NonbondedForce* nonbonded = new NonbondedForce(); - system.addForce(nonbonded); - nonbonded->addParticle(1.0, 0.0, 0.0); - nonbonded->addParticle(-0.5, 0.0, 0.0); - nonbonded->addParticle(-0.5, 0.0, 0.0); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(10, 0, 0)); - positions.push_back(Vec3(0, 10, 0)); - for (int i = 0; i < 20; i++) { - system.addParticle(0.0); - double u = 0.1*((i+1)%4); - double v = 0.05*i; - system.setVirtualSite(3+i, new ThreeParticleAverageSite(0, 1, 2, u, v, 1-u-v)); - nonbonded->addParticle(i%2 == 0 ? -1.0 : 1.0, 0.0, 0.0); - positions.push_back(Vec3()); - } - VerletIntegrator i1(0.002); - VerletIntegrator i2(0.002); - Context c1(system, i1, Platform::getPlatformByName("Reference")); - Context c2(system, i2, platform); - c1.setPositions(positions); - c2.setPositions(positions); - c1.applyConstraints(0.0001); - c2.applyConstraints(0.0001); - State s1 = c1.getState(State::Positions | State::Forces); - State s2 = c2.getState(State::Positions | State::Forces); - for (int i = 0; i < system.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], 1e-5); - for (int i = 0; i < 3; i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 1e-5); -} - -int main(int argc, char* argv[]) { - try { - if (argc > 1) - platform.setPropertyDefaultValue("OpenCLPrecision", string(argv[1])); - testMasslessParticle(); - testTwoParticleAverage(); - testThreeParticleAverage(); - testOutOfPlane(); - testLocalCoordinates(); - testConservationLaws(); - testReordering(); - testOverlappingSites(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testReordering(); } diff --git a/platforms/opencl/tests/nacl_amorph.dat b/platforms/opencl/tests/nacl_amorph.dat deleted file mode 100644 index 7e8cbafdf6d6339aea85d8303ea91c547314f0ed..0000000000000000000000000000000000000000 --- a/platforms/opencl/tests/nacl_amorph.dat +++ /dev/null @@ -1,894 +0,0 @@ -positions[0] = Vec3(1.066000,1.628000,0.835000); -positions[1] = Vec3(1.072000,0.428000,0.190000); -positions[2] = Vec3(0.524000,1.442000,1.160000); -positions[3] = Vec3(2.383000,1.524000,1.119000); -positions[4] = Vec3(0.390000,1.441000,0.575000); -positions[5] = Vec3(0.618000,0.399000,0.819000); -positions[6] = Vec3(1.003000,1.257000,1.543000); -positions[7] = Vec3(2.933000,1.569000,0.642000); -positions[8] = Vec3(0.849000,0.739000,0.089000); -positions[9] = Vec3(0.060000,0.794000,0.766000); -positions[10] = Vec3(1.652000,1.405000,1.010000); -positions[11] = Vec3(2.843000,1.533000,1.781000); -positions[12] = Vec3(0.952000,1.309000,0.996000); -positions[13] = Vec3(1.847000,1.402000,0.313000); -positions[14] = Vec3(2.674000,0.083000,1.691000); -positions[15] = Vec3(1.763000,2.104000,0.728000); -positions[16] = Vec3(0.914000,0.574000,0.982000); -positions[17] = Vec3(0.514000,0.078000,0.891000); -positions[18] = Vec3(0.538000,0.766000,1.110000); -positions[19] = Vec3(0.808000,0.676000,0.570000); -positions[20] = Vec3(0.178000,0.014000,0.628000); -positions[21] = Vec3(1.329000,1.333000,0.339000); -positions[22] = Vec3(1.029000,1.678000,0.503000); -positions[23] = Vec3(1.423000,1.767000,1.104000); -positions[24] = Vec3(1.966000,1.051000,0.282000); -positions[25] = Vec3(1.596000,1.971000,0.194000); -positions[26] = Vec3(1.025000,1.043000,2.809000); -positions[27] = Vec3(1.628000,2.614000,0.088000); -positions[28] = Vec3(0.440000,0.606000,0.141000); -positions[29] = Vec3(1.050000,2.821000,2.517000); -positions[30] = Vec3(0.644000,1.604000,0.770000); -positions[31] = Vec3(0.637000,0.917000,0.392000); -positions[32] = Vec3(0.611000,2.768000,0.013000); -positions[33] = Vec3(1.892000,0.660000,0.473000); -positions[34] = Vec3(1.052000,2.081000,0.982000); -positions[35] = Vec3(1.508000,2.300000,0.439000); -positions[36] = Vec3(2.617000,0.328000,1.099000); -positions[37] = Vec3(0.910000,0.040000,0.259000); -positions[38] = Vec3(1.195000,1.494000,1.202000); -positions[39] = Vec3(2.657000,0.997000,0.564000); -positions[40] = Vec3(1.465000,1.580000,0.648000); -positions[41] = Vec3(0.154000,2.538000,1.331000); -positions[42] = Vec3(0.849000,1.476000,1.365000); -positions[43] = Vec3(0.898000,0.987000,1.178000); -positions[44] = Vec3(0.958000,0.656000,1.358000); -positions[45] = Vec3(1.067000,0.934000,0.211000); -positions[46] = Vec3(1.030000,0.319000,1.281000); -positions[47] = Vec3(2.709000,0.807000,0.240000); -positions[48] = Vec3(0.837000,1.362000,0.588000); -positions[49] = Vec3(2.080000,0.791000,2.947000); -positions[50] = Vec3(0.200000,0.266000,1.474000); -positions[51] = Vec3(0.848000,0.379000,1.625000); -positions[52] = Vec3(0.637000,1.071000,0.821000); -positions[53] = Vec3(1.324000,0.757000,2.951000); -positions[54] = Vec3(2.666000,0.935000,1.373000); -positions[55] = Vec3(1.584000,1.025000,1.703000); -positions[56] = Vec3(1.699000,0.636000,0.038000); -positions[57] = Vec3(1.099000,1.644000,1.879000); -positions[58] = Vec3(2.897000,1.302000,1.522000); -positions[59] = Vec3(1.753000,0.949000,2.885000); -positions[60] = Vec3(2.502000,1.321000,0.752000); -positions[61] = Vec3(0.545000,0.193000,1.959000); -positions[62] = Vec3(1.098000,2.646000,1.706000); -positions[63] = Vec3(0.001000,1.205000,0.670000); -positions[64] = Vec3(2.997000,0.061000,1.040000); -positions[65] = Vec3(0.662000,0.828000,1.535000); -positions[66] = Vec3(1.252000,1.246000,0.780000); -positions[67] = Vec3(1.173000,0.472000,0.810000); -positions[68] = Vec3(0.124000,0.622000,2.992000); -positions[69] = Vec3(1.036000,0.883000,0.848000); -positions[70] = Vec3(1.423000,2.146000,1.340000); -positions[71] = Vec3(2.391000,1.136000,1.165000); -positions[72] = Vec3(1.189000,2.961000,0.425000); -positions[73] = Vec3(1.584000,2.500000,0.782000); -positions[74] = Vec3(0.565000,1.122000,1.240000); -positions[75] = Vec3(1.733000,1.716000,1.763000); -positions[76] = Vec3(1.548000,1.522000,0.041000); -positions[77] = Vec3(1.485000,0.561000,0.369000); -positions[78] = Vec3(0.350000,1.661000,0.928000); -positions[79] = Vec3(1.653000,1.223000,0.578000); -positions[80] = Vec3(0.648000,1.349000,0.253000); -positions[81] = Vec3(0.340000,1.820000,0.483000); -positions[82] = Vec3(2.926000,0.119000,1.421000); -positions[83] = Vec3(1.512000,1.084000,0.156000); -positions[84] = Vec3(1.600000,2.115000,1.792000); -positions[85] = Vec3(1.089000,0.934000,1.584000); -positions[86] = Vec3(1.276000,1.104000,1.230000); -positions[87] = Vec3(0.485000,0.305000,0.428000); -positions[88] = Vec3(1.317000,1.261000,1.795000); -positions[89] = Vec3(0.039000,1.413000,1.085000); -positions[90] = Vec3(0.453000,0.701000,0.605000); -positions[91] = Vec3(1.283000,1.937000,0.752000); -positions[92] = Vec3(0.212000,1.416000,1.447000); -positions[93] = Vec3(0.203000,0.358000,0.723000); -positions[94] = Vec3(0.556000,0.445000,1.364000); -positions[95] = Vec3(1.436000,0.861000,0.911000); -positions[96] = Vec3(0.358000,0.966000,0.176000); -positions[97] = Vec3(1.478000,2.715000,0.427000); -positions[98] = Vec3(1.581000,0.575000,0.809000); -positions[99] = Vec3(1.007000,2.153000,2.887000); -positions[100] = Vec3(2.343000,0.663000,2.513000); -positions[101] = Vec3(2.105000,0.649000,1.635000); -positions[102] = Vec3(0.875000,0.743000,2.459000); -positions[103] = Vec3(0.229000,1.315000,1.879000); -positions[104] = Vec3(0.285000,0.935000,1.700000); -positions[105] = Vec3(2.269000,1.284000,2.234000); -positions[106] = Vec3(1.406000,1.149000,2.767000); -positions[107] = Vec3(1.076000,0.220000,1.849000); -positions[108] = Vec3(2.001000,1.532000,2.881000); -positions[109] = Vec3(2.893000,0.485000,1.860000); -positions[110] = Vec3(1.621000,1.786000,2.624000); -positions[111] = Vec3(0.500000,0.616000,1.818000); -positions[112] = Vec3(0.938000,2.978000,2.104000); -positions[113] = Vec3(0.550000,2.081000,0.454000); -positions[114] = Vec3(1.121000,0.685000,2.196000); -positions[115] = Vec3(1.088000,1.385000,2.184000); -positions[116] = Vec3(1.122000,2.705000,2.080000); -positions[117] = Vec3(0.918000,1.767000,2.861000); -positions[118] = Vec3(2.748000,0.232000,2.126000); -positions[119] = Vec3(1.238000,2.766000,0.109000); -positions[120] = Vec3(1.380000,0.785000,1.961000); -positions[121] = Vec3(1.236000,1.757000,0.150000); -positions[122] = Vec3(1.339000,2.187000,2.592000); -positions[123] = Vec3(1.414000,0.342000,2.714000); -positions[124] = Vec3(1.310000,0.770000,2.589000); -positions[125] = Vec3(1.686000,0.765000,2.321000); -positions[126] = Vec3(1.659000,1.367000,2.780000); -positions[127] = Vec3(0.141000,0.095000,1.903000); -positions[128] = Vec3(2.084000,1.002000,2.520000); -positions[129] = Vec3(2.819000,1.286000,2.626000); -positions[130] = Vec3(1.257000,1.044000,2.401000); -positions[131] = Vec3(1.064000,0.546000,2.839000); -positions[132] = Vec3(0.078000,1.246000,0.010000); -positions[133] = Vec3(1.506000,0.420000,2.223000); -positions[134] = Vec3(1.778000,0.699000,1.920000); -positions[135] = Vec3(1.315000,1.721000,2.733000); -positions[136] = Vec3(0.114000,0.281000,0.279000); -positions[137] = Vec3(1.082000,1.421000,2.596000); -positions[138] = Vec3(3.001000,0.592000,2.276000); -positions[139] = Vec3(1.384000,2.227000,2.992000); -positions[140] = Vec3(1.353000,0.044000,1.985000); -positions[141] = Vec3(1.367000,1.832000,2.383000); -positions[142] = Vec3(0.853000,1.119000,2.230000); -positions[143] = Vec3(1.675000,1.482000,2.295000); -positions[144] = Vec3(1.334000,1.890000,1.904000); -positions[145] = Vec3(1.630000,0.140000,2.939000); -positions[146] = Vec3(0.195000,1.290000,2.300000); -positions[147] = Vec3(2.178000,1.173000,3.001000); -positions[148] = Vec3(0.637000,0.655000,2.126000); -positions[149] = Vec3(0.993000,1.796000,2.529000); -positions[150] = Vec3(0.910000,0.701000,1.845000); -positions[151] = Vec3(0.191000,2.128000,0.355000); -positions[152] = Vec3(0.692000,1.163000,2.578000); -positions[153] = Vec3(1.154000,1.052000,1.974000); -positions[154] = Vec3(1.682000,0.335000,2.509000); -positions[155] = Vec3(0.569000,1.032000,1.895000); -positions[156] = Vec3(1.800000,2.796000,1.295000); -positions[157] = Vec3(2.517000,2.347000,2.878000); -positions[158] = Vec3(0.639000,2.470000,1.678000); -positions[159] = Vec3(0.634000,2.006000,1.829000); -positions[160] = Vec3(0.892000,0.215000,0.566000); -positions[161] = Vec3(1.800000,2.143000,1.491000); -positions[162] = Vec3(1.898000,0.226000,2.765000); -positions[163] = Vec3(0.791000,1.738000,0.260000); -positions[164] = Vec3(0.437000,1.740000,2.048000); -positions[165] = Vec3(1.687000,2.438000,1.166000); -positions[166] = Vec3(1.337000,2.304000,1.643000); -positions[167] = Vec3(1.270000,2.397000,1.033000); -positions[168] = Vec3(0.702000,2.429000,0.591000); -positions[169] = Vec3(0.842000,1.976000,0.724000); -positions[170] = Vec3(1.965000,0.095000,1.206000); -positions[171] = Vec3(0.355000,2.710000,0.618000); -positions[172] = Vec3(0.745000,1.434000,2.781000); -positions[173] = Vec3(0.707000,2.171000,1.502000); -positions[174] = Vec3(1.294000,2.696000,0.847000); -positions[175] = Vec3(1.143000,2.075000,0.276000); -positions[176] = Vec3(1.111000,2.474000,0.312000); -positions[177] = Vec3(1.144000,2.316000,0.633000); -positions[178] = Vec3(1.335000,0.292000,0.515000); -positions[179] = Vec3(1.926000,2.813000,2.703000); -positions[180] = Vec3(0.559000,2.314000,2.904000); -positions[181] = Vec3(1.308000,1.605000,1.534000); -positions[182] = Vec3(0.773000,2.913000,1.217000); -positions[183] = Vec3(1.612000,0.082000,1.027000); -positions[184] = Vec3(1.510000,0.287000,1.787000); -positions[185] = Vec3(0.716000,1.424000,1.843000); -positions[186] = Vec3(1.267000,0.685000,1.160000); -positions[187] = Vec3(0.306000,1.653000,1.717000); -positions[188] = Vec3(0.349000,0.020000,1.275000); -positions[189] = Vec3(0.166000,1.979000,0.804000); -positions[190] = Vec3(1.523000,2.992000,0.711000); -positions[191] = Vec3(1.998000,2.146000,0.088000); -positions[192] = Vec3(0.047000,2.513000,0.642000); -positions[193] = Vec3(0.501000,1.793000,1.438000); -positions[194] = Vec3(1.099000,2.010000,1.626000); -positions[195] = Vec3(2.580000,2.854000,1.328000); -positions[196] = Vec3(1.080000,2.779000,1.190000); -positions[197] = Vec3(0.901000,2.561000,0.948000); -positions[198] = Vec3(0.920000,2.990000,0.844000); -positions[199] = Vec3(0.819000,2.924000,1.711000); -positions[200] = Vec3(0.434000,1.516000,0.063000); -positions[201] = Vec3(1.470000,0.058000,0.231000); -positions[202] = Vec3(0.530000,3.005000,1.550000); -positions[203] = Vec3(0.447000,2.330000,1.277000); -positions[204] = Vec3(1.632000,2.683000,1.593000); -positions[205] = Vec3(0.885000,1.835000,2.072000); -positions[206] = Vec3(0.868000,2.601000,1.425000); -positions[207] = Vec3(0.720000,2.242000,0.907000); -positions[208] = Vec3(1.194000,0.144000,1.065000); -positions[209] = Vec3(0.448000,2.485000,0.959000); -positions[210] = Vec3(1.377000,2.694000,1.352000); -positions[211] = Vec3(1.305000,2.928000,2.713000); -positions[212] = Vec3(1.784000,2.456000,1.981000); -positions[213] = Vec3(0.354000,2.136000,1.563000); -positions[214] = Vec3(0.489000,2.000000,1.108000); -positions[215] = Vec3(1.884000,2.221000,0.461000); -positions[216] = Vec3(1.860000,2.540000,0.306000); -positions[217] = Vec3(1.753000,2.335000,2.768000); -positions[218] = Vec3(1.536000,2.441000,2.344000); -positions[219] = Vec3(0.531000,0.025000,2.235000); -positions[220] = Vec3(0.809000,0.011000,2.834000); -positions[221] = Vec3(0.289000,2.614000,2.879000); -positions[222] = Vec3(0.613000,1.891000,2.337000); -positions[223] = Vec3(0.507000,0.037000,2.694000); -positions[224] = Vec3(0.882000,2.185000,2.583000); -positions[225] = Vec3(0.503000,2.051000,2.615000); -positions[226] = Vec3(1.907000,1.956000,2.831000); -positions[227] = Vec3(2.833000,2.769000,1.644000); -positions[228] = Vec3(1.141000,0.113000,2.945000); -positions[229] = Vec3(0.600000,1.338000,2.200000); -positions[230] = Vec3(0.904000,2.360000,1.952000); -positions[231] = Vec3(0.738000,1.568000,2.437000); -positions[232] = Vec3(1.136000,2.535000,2.805000); -positions[233] = Vec3(1.430000,2.767000,2.321000); -positions[234] = Vec3(1.078000,2.470000,2.385000); -positions[235] = Vec3(0.296000,2.376000,2.560000); -positions[236] = Vec3(0.719000,0.300000,0.075000); -positions[237] = Vec3(0.518000,1.911000,0.080000); -positions[238] = Vec3(0.381000,1.570000,2.450000); -positions[239] = Vec3(0.716000,2.581000,2.697000); -positions[240] = Vec3(1.473000,2.617000,1.936000); -positions[241] = Vec3(0.421000,2.449000,0.229000); -positions[242] = Vec3(0.425000,2.817000,1.910000); -positions[243] = Vec3(1.312000,2.294000,2.057000); -positions[244] = Vec3(1.239000,0.007000,1.539000); -positions[245] = Vec3(0.822000,0.379000,2.086000); -positions[246] = Vec3(0.560000,2.562000,2.227000); -positions[247] = Vec3(0.863000,2.417000,0.050000); -positions[248] = Vec3(1.263000,0.151000,2.332000); -positions[249] = Vec3(0.237000,0.208000,2.336000); -positions[250] = Vec3(0.437000,2.370000,1.910000); -positions[251] = Vec3(1.119000,2.058000,2.207000); -positions[252] = Vec3(1.960000,1.749000,0.118000); -positions[253] = Vec3(2.415000,0.870000,2.757000); -positions[254] = Vec3(1.781000,0.342000,0.366000); -positions[255] = Vec3(2.172000,1.279000,1.421000); -positions[256] = Vec3(1.986000,0.715000,1.301000); -positions[257] = Vec3(1.657000,1.804000,0.810000); -positions[258] = Vec3(2.405000,1.202000,0.416000); -positions[259] = Vec3(1.932000,1.457000,0.786000); -positions[260] = Vec3(1.901000,1.271000,1.207000); -positions[261] = Vec3(1.864000,0.301000,0.810000); -positions[262] = Vec3(1.658000,0.673000,1.558000); -positions[263] = Vec3(2.637000,2.247000,0.396000); -positions[264] = Vec3(1.353000,0.369000,1.438000); -positions[265] = Vec3(0.530000,2.688000,1.346000); -positions[266] = Vec3(0.237000,0.485000,1.047000); -positions[267] = Vec3(2.806000,0.601000,0.822000); -positions[268] = Vec3(1.617000,2.018000,2.136000); -positions[269] = Vec3(2.000000,2.898000,0.022000); -positions[270] = Vec3(2.049000,1.883000,1.001000); -positions[271] = Vec3(2.477000,0.355000,1.786000); -positions[272] = Vec3(1.646000,0.983000,1.266000); -positions[273] = Vec3(1.683000,2.097000,1.114000); -positions[274] = Vec3(2.161000,0.921000,1.065000); -positions[275] = Vec3(2.099000,0.463000,1.942000); -positions[276] = Vec3(2.561000,1.638000,0.572000); -positions[277] = Vec3(2.205000,0.395000,1.005000); -positions[278] = Vec3(2.836000,0.203000,0.698000); -positions[279] = Vec3(2.662000,0.909000,0.966000); -positions[280] = Vec3(0.334000,0.350000,2.767000); -positions[281] = Vec3(2.241000,2.934000,1.248000); -positions[282] = Vec3(2.599000,2.953000,0.921000); -positions[283] = Vec3(2.219000,0.262000,0.058000); -positions[284] = Vec3(0.274000,0.656000,1.456000); -positions[285] = Vec3(1.814000,1.008000,0.882000); -positions[286] = Vec3(2.793000,1.395000,0.316000); -positions[287] = Vec3(0.773000,1.753000,1.639000); -positions[288] = Vec3(2.321000,0.994000,1.591000); -positions[289] = Vec3(2.243000,2.255000,1.690000); -positions[290] = Vec3(0.178000,1.342000,0.327000); -positions[291] = Vec3(1.623000,1.756000,1.426000); -positions[292] = Vec3(2.252000,0.109000,0.375000); -positions[293] = Vec3(3.003000,1.895000,1.895000); -positions[294] = Vec3(0.407000,0.831000,2.756000); -positions[295] = Vec3(2.193000,0.956000,0.632000); -positions[296] = Vec3(2.405000,0.641000,1.107000); -positions[297] = Vec3(2.361000,0.958000,0.162000); -positions[298] = Vec3(2.173000,1.544000,0.528000); -positions[299] = Vec3(1.565000,1.380000,1.428000); -positions[300] = Vec3(2.342000,0.538000,0.253000); -positions[301] = Vec3(1.910000,0.701000,0.954000); -positions[302] = Vec3(2.910000,0.288000,2.938000); -positions[303] = Vec3(0.257000,1.189000,0.958000); -positions[304] = Vec3(0.134000,1.775000,1.243000); -positions[305] = Vec3(2.476000,1.583000,1.956000); -positions[306] = Vec3(1.838000,1.791000,2.354000); -positions[307] = Vec3(1.906000,1.338000,1.696000); -positions[308] = Vec3(2.413000,2.869000,0.166000); -positions[309] = Vec3(3.006000,1.038000,1.322000); -positions[310] = Vec3(1.961000,0.962000,1.605000); -positions[311] = Vec3(0.082000,2.857000,0.020000); -positions[312] = Vec3(2.408000,1.499000,0.062000); -positions[313] = Vec3(2.349000,0.267000,1.415000); -positions[314] = Vec3(2.327000,1.717000,2.350000); -positions[315] = Vec3(2.928000,0.810000,1.582000); -positions[316] = Vec3(2.150000,0.336000,0.576000); -positions[317] = Vec3(2.664000,1.085000,2.962000); -positions[318] = Vec3(2.851000,0.670000,1.174000); -positions[319] = Vec3(1.954000,1.013000,1.975000); -positions[320] = Vec3(2.474000,1.542000,1.545000); -positions[321] = Vec3(2.826000,0.455000,1.490000); -positions[322] = Vec3(2.140000,2.826000,0.558000); -positions[323] = Vec3(2.151000,1.684000,1.780000); -positions[324] = Vec3(0.174000,0.673000,0.397000); -positions[325] = Vec3(0.066000,1.708000,0.160000); -positions[326] = Vec3(2.158000,0.303000,2.582000); -positions[327] = Vec3(2.602000,1.611000,2.632000); -positions[328] = Vec3(2.566000,1.138000,2.465000); -positions[329] = Vec3(2.026000,1.443000,2.477000); -positions[330] = Vec3(2.365000,0.309000,2.255000); -positions[331] = Vec3(1.636000,1.107000,2.058000); -positions[332] = Vec3(2.522000,2.584000,2.399000); -positions[333] = Vec3(2.537000,2.900000,2.158000); -positions[334] = Vec3(2.660000,0.537000,2.577000); -positions[335] = Vec3(2.679000,1.158000,1.724000); -positions[336] = Vec3(0.220000,1.894000,2.498000); -positions[337] = Vec3(2.266000,1.248000,1.837000); -positions[338] = Vec3(0.055000,1.656000,2.128000); -positions[339] = Vec3(2.899000,1.902000,2.823000); -positions[340] = Vec3(0.085000,2.994000,2.720000); -positions[341] = Vec3(0.013000,0.889000,2.468000); -positions[342] = Vec3(1.804000,0.372000,1.636000); -positions[343] = Vec3(0.201000,1.616000,2.824000); -positions[344] = Vec3(0.369000,1.273000,2.699000); -positions[345] = Vec3(2.996000,0.355000,2.596000); -positions[346] = Vec3(2.867000,1.314000,2.107000); -positions[347] = Vec3(2.611000,0.563000,2.140000); -positions[348] = Vec3(2.676000,2.954000,2.955000); -positions[349] = Vec3(0.256000,0.848000,2.062000); -positions[350] = Vec3(2.530000,0.028000,2.528000); -positions[351] = Vec3(0.537000,1.273000,1.596000); -positions[352] = Vec3(0.004000,1.004000,0.401000); -positions[353] = Vec3(1.676000,1.060000,2.463000); -positions[354] = Vec3(2.622000,1.473000,2.257000); -positions[355] = Vec3(2.917000,2.991000,2.316000); -positions[356] = Vec3(0.672000,1.123000,2.984000); -positions[357] = Vec3(2.229000,1.806000,2.673000); -positions[358] = Vec3(0.463000,0.951000,2.383000); -positions[359] = Vec3(2.126000,0.049000,2.037000); -positions[360] = Vec3(2.868000,0.876000,2.015000); -positions[361] = Vec3(2.720000,2.582000,0.079000); -positions[362] = Vec3(1.966000,0.693000,2.624000); -positions[363] = Vec3(1.971000,0.398000,2.318000); -positions[364] = Vec3(0.337000,0.630000,2.458000); -positions[365] = Vec3(2.562000,1.044000,2.040000); -positions[366] = Vec3(2.817000,1.485000,2.963000); -positions[367] = Vec3(2.514000,0.621000,2.992000); -positions[368] = Vec3(3.000000,1.551000,2.496000); -positions[369] = Vec3(0.698000,2.167000,2.180000); -positions[370] = Vec3(2.693000,0.849000,2.389000); -positions[371] = Vec3(2.092000,2.565000,2.986000); -positions[372] = Vec3(2.010000,3.001000,0.819000); -positions[373] = Vec3(2.392000,2.622000,1.636000); -positions[374] = Vec3(2.086000,2.325000,1.340000); -positions[375] = Vec3(2.578000,2.971000,0.502000); -positions[376] = Vec3(1.871000,2.789000,2.225000); -positions[377] = Vec3(2.230000,2.985000,1.594000); -positions[378] = Vec3(2.860000,2.788000,0.729000); -positions[379] = Vec3(2.051000,1.928000,1.472000); -positions[380] = Vec3(2.307000,2.219000,1.067000); -positions[381] = Vec3(2.369000,2.572000,1.289000); -positions[382] = Vec3(2.206000,1.924000,0.693000); -positions[383] = Vec3(1.984000,2.058000,2.005000); -positions[384] = Vec3(2.287000,1.854000,0.317000); -positions[385] = Vec3(2.525000,0.345000,0.686000); -positions[386] = Vec3(2.933000,1.920000,1.053000); -positions[387] = Vec3(0.324000,2.324000,0.601000); -positions[388] = Vec3(2.042000,1.576000,1.277000); -positions[389] = Vec3(0.031000,2.376000,0.949000); -positions[390] = Vec3(2.519000,2.250000,1.465000); -positions[391] = Vec3(0.221000,2.722000,1.652000); -positions[392] = Vec3(2.409000,2.361000,2.051000); -positions[393] = Vec3(2.472000,1.917000,1.673000); -positions[394] = Vec3(0.999000,2.715000,0.562000); -positions[395] = Vec3(1.669000,0.017000,1.508000); -positions[396] = Vec3(1.924000,1.777000,0.542000); -positions[397] = Vec3(2.635000,2.634000,1.905000); -positions[398] = Vec3(2.042000,2.628000,1.025000); -positions[399] = Vec3(2.694000,1.974000,2.009000); -positions[400] = Vec3(2.988000,2.221000,1.333000); -positions[401] = Vec3(1.772000,0.196000,1.978000); -positions[402] = Vec3(2.893000,2.961000,0.283000); -positions[403] = Vec3(2.615000,0.261000,0.245000); -positions[404] = Vec3(2.797000,2.521000,1.412000); -positions[405] = Vec3(0.013000,2.497000,0.246000); -positions[406] = Vec3(1.875000,2.861000,1.801000); -positions[407] = Vec3(2.800000,2.617000,1.049000); -positions[408] = Vec3(2.824000,1.858000,1.487000); -positions[409] = Vec3(2.434000,1.868000,1.275000); -positions[410] = Vec3(2.814000,0.526000,0.384000); -positions[411] = Vec3(2.844000,2.545000,2.246000); -positions[412] = Vec3(1.896000,2.587000,0.719000); -positions[413] = Vec3(0.350000,0.055000,0.076000); -positions[414] = Vec3(2.686000,1.784000,0.222000); -positions[415] = Vec3(2.724000,1.604000,0.989000); -positions[416] = Vec3(0.807000,1.761000,1.122000); -positions[417] = Vec3(2.120000,2.382000,2.226000); -positions[418] = Vec3(2.058000,1.587000,2.067000); -positions[419] = Vec3(2.904000,2.571000,2.686000); -positions[420] = Vec3(2.228000,2.910000,2.410000); -positions[421] = Vec3(2.797000,2.142000,0.114000); -positions[422] = Vec3(2.905000,1.875000,0.480000); -positions[423] = Vec3(1.881000,2.565000,2.469000); -positions[424] = Vec3(2.404000,1.929000,2.999000); -positions[425] = Vec3(2.389000,2.814000,2.782000); -positions[426] = Vec3(2.520000,0.301000,2.815000); -positions[427] = Vec3(2.726000,1.907000,2.339000); -positions[428] = Vec3(2.880000,2.273000,2.500000); -positions[429] = Vec3(2.574000,2.045000,2.716000); -positions[430] = Vec3(2.988000,2.288000,2.001000); -positions[431] = Vec3(0.011000,2.341000,2.904000); -positions[432] = Vec3(0.215000,2.265000,2.257000); -positions[433] = Vec3(2.268000,2.311000,0.234000); -positions[434] = Vec3(2.462000,2.621000,0.550000); -positions[435] = Vec3(1.530000,2.540000,2.728000); -positions[436] = Vec3(2.162000,2.306000,2.687000); -positions[437] = Vec3(2.748000,2.301000,1.734000); -positions[438] = Vec3(2.334000,1.976000,2.041000); -positions[439] = Vec3(1.981000,2.076000,2.443000); -positions[440] = Vec3(2.301000,1.367000,2.665000); -positions[441] = Vec3(2.399000,2.164000,2.403000); -positions[442] = Vec3(0.244000,2.713000,2.257000); -positions[443] = Vec3(0.683000,0.488000,2.781000); -positions[444] = Vec3(2.194000,2.711000,1.993000); -positions[445] = Vec3(2.947000,2.848000,2.001000); -positions[446] = Vec3(0.223000,1.981000,2.913000); -positions[447] = Vec3(0.010000,1.226000,0.917000); -positions[448] = Vec3(1.911000,0.426000,0.582000); -positions[449] = Vec3(2.204000,0.015000,0.136000); -positions[450] = Vec3(0.927000,0.138000,1.645000); -positions[451] = Vec3(0.155000,0.885000,1.479000); -positions[452] = Vec3(1.550000,1.933000,1.261000); -positions[453] = Vec3(1.304000,0.407000,0.287000); -positions[454] = Vec3(0.270000,1.384000,2.910000); -positions[455] = Vec3(0.516000,1.817000,1.695000); -positions[456] = Vec3(1.458000,2.879000,1.523000); -positions[457] = Vec3(1.702000,1.670000,0.593000); -positions[458] = Vec3(1.974000,1.380000,0.534000); -positions[459] = Vec3(2.835000,1.185000,0.479000); -positions[460] = Vec3(0.548000,2.979000,1.126000); -positions[461] = Vec3(1.202000,2.174000,1.466000); -positions[462] = Vec3(1.237000,1.701000,0.653000); -positions[463] = Vec3(2.939000,0.761000,0.349000); -positions[464] = Vec3(1.667000,2.119000,0.377000); -positions[465] = Vec3(1.196000,0.552000,1.372000); -positions[466] = Vec3(1.416000,0.901000,1.178000); -positions[467] = Vec3(0.519000,1.577000,2.227000); -positions[468] = Vec3(1.214000,1.281000,1.063000); -positions[469] = Vec3(0.822000,0.433000,1.375000); -positions[470] = Vec3(0.095000,2.760000,0.604000); -positions[471] = Vec3(1.325000,2.144000,1.848000); -positions[472] = Vec3(0.681000,0.896000,1.285000); -positions[473] = Vec3(0.406000,2.936000,0.717000); -positions[474] = Vec3(0.565000,1.852000,0.349000); -positions[475] = Vec3(0.597000,1.651000,1.020000); -positions[476] = Vec3(1.236000,0.170000,1.335000); -positions[477] = Vec3(0.586000,0.441000,1.980000); -positions[478] = Vec3(1.443000,1.208000,1.575000); -positions[479] = Vec3(0.247000,0.243000,0.502000); -positions[480] = Vec3(1.386000,1.564000,0.236000); -positions[481] = Vec3(0.871000,1.063000,0.930000); -positions[482] = Vec3(0.136000,0.992000,0.621000); -positions[483] = Vec3(0.889000,0.986000,0.010000); -positions[484] = Vec3(1.107000,2.731000,1.452000); -positions[485] = Vec3(0.942000,2.471000,0.517000); -positions[486] = Vec3(0.989000,0.652000,0.747000); -positions[487] = Vec3(0.899000,1.235000,2.707000); -positions[488] = Vec3(1.105000,0.684000,0.068000); -positions[489] = Vec3(1.660000,1.235000,2.276000); -positions[490] = Vec3(1.593000,1.883000,1.915000); -positions[491] = Vec3(1.528000,1.613000,0.920000); -positions[492] = Vec3(0.459000,1.046000,1.011000); -positions[493] = Vec3(0.213000,0.612000,0.644000); -positions[494] = Vec3(0.078000,1.392000,1.676000); -positions[495] = Vec3(0.605000,0.491000,0.574000); -positions[496] = Vec3(0.990000,1.586000,1.076000); -positions[497] = Vec3(0.297000,1.434000,1.028000); -positions[498] = Vec3(1.101000,1.471000,1.443000); -positions[499] = Vec3(0.072000,0.139000,1.653000); -positions[500] = Vec3(0.633000,0.884000,0.645000); -positions[501] = Vec3(0.352000,2.841000,1.463000); -positions[502] = Vec3(0.418000,0.774000,0.350000); -positions[503] = Vec3(2.641000,0.198000,0.869000); -positions[504] = Vec3(0.608000,1.341000,0.695000); -positions[505] = Vec3(1.778000,1.151000,1.830000); -positions[506] = Vec3(1.669000,0.342000,2.768000); -positions[507] = Vec3(1.256000,0.994000,0.798000); -positions[508] = Vec3(1.068000,0.375000,1.036000); -positions[509] = Vec3(0.910000,0.758000,1.589000); -positions[510] = Vec3(0.243000,2.452000,0.805000); -positions[511] = Vec3(1.018000,0.764000,1.122000); -positions[512] = Vec3(2.464000,1.089000,1.404000); -positions[513] = Vec3(0.670000,0.564000,0.034000); -positions[514] = Vec3(0.030000,1.296000,1.310000); -positions[515] = Vec3(1.210000,1.785000,1.691000); -positions[516] = Vec3(0.022000,0.620000,0.974000); -positions[517] = Vec3(1.499000,1.277000,2.986000); -positions[518] = Vec3(1.227000,1.896000,1.006000); -positions[519] = Vec3(0.528000,1.022000,1.635000); -positions[520] = Vec3(1.887000,2.670000,0.089000); -positions[521] = Vec3(1.661000,0.825000,0.793000); -positions[522] = Vec3(0.831000,1.494000,0.374000); -positions[523] = Vec3(1.356000,0.613000,0.930000); -positions[524] = Vec3(0.667000,0.600000,0.968000); -positions[525] = Vec3(1.154000,1.702000,2.925000); -positions[526] = Vec3(1.420000,1.581000,1.289000); -positions[527] = Vec3(1.383000,0.041000,0.932000); -positions[528] = Vec3(1.727000,0.140000,1.725000); -positions[529] = Vec3(0.711000,1.215000,2.004000); -positions[530] = Vec3(1.061000,1.067000,1.366000); -positions[531] = Vec3(0.377000,0.597000,1.224000); -positions[532] = Vec3(0.274000,0.719000,1.842000); -positions[533] = Vec3(0.840000,1.658000,1.874000); -positions[534] = Vec3(0.877000,0.290000,0.311000); -positions[535] = Vec3(2.130000,1.153000,1.196000); -positions[536] = Vec3(1.028000,1.379000,0.747000); -positions[537] = Vec3(1.107000,2.450000,2.079000); -positions[538] = Vec3(1.419000,1.333000,0.585000); -positions[539] = Vec3(0.430000,1.305000,1.369000); -positions[540] = Vec3(0.775000,1.363000,1.596000); -positions[541] = Vec3(1.522000,2.009000,0.736000); -positions[542] = Vec3(0.857000,1.722000,0.696000); -positions[543] = Vec3(0.722000,2.831000,1.478000); -positions[544] = Vec3(0.411000,1.673000,0.681000); -positions[545] = Vec3(1.511000,0.456000,0.597000); -positions[546] = Vec3(2.684000,0.820000,2.996000); -positions[547] = Vec3(1.593000,1.713000,2.369000); -positions[548] = Vec3(1.113000,0.803000,1.958000); -positions[549] = Vec3(1.267000,1.095000,0.254000); -positions[550] = Vec3(2.120000,0.540000,2.477000); -positions[551] = Vec3(0.566000,1.409000,2.588000); -positions[552] = Vec3(0.261000,0.872000,2.546000); -positions[553] = Vec3(1.878000,1.446000,2.680000); -positions[554] = Vec3(0.878000,1.606000,2.658000); -positions[555] = Vec3(1.564000,0.749000,1.786000); -positions[556] = Vec3(1.412000,1.942000,2.625000); -positions[557] = Vec3(1.660000,1.114000,2.710000); -positions[558] = Vec3(1.118000,0.813000,2.424000); -positions[559] = Vec3(1.482000,0.893000,2.434000); -positions[560] = Vec3(1.093000,1.129000,1.740000); -positions[561] = Vec3(2.163000,0.849000,2.709000); -positions[562] = Vec3(1.201000,1.429000,1.957000); -positions[563] = Vec3(0.235000,2.258000,2.002000); -positions[564] = Vec3(0.413000,1.444000,0.314000); -positions[565] = Vec3(0.164000,0.450000,2.408000); -positions[566] = Vec3(1.551000,0.851000,0.033000); -positions[567] = Vec3(0.659000,0.228000,2.807000); -positions[568] = Vec3(0.741000,0.131000,2.124000); -positions[569] = Vec3(0.455000,0.567000,2.682000); -positions[570] = Vec3(0.729000,0.971000,2.408000); -positions[571] = Vec3(1.487000,2.820000,0.162000); -positions[572] = Vec3(1.855000,0.700000,2.858000); -positions[573] = Vec3(0.305000,1.074000,1.926000); -positions[574] = Vec3(1.300000,0.153000,1.747000); -positions[575] = Vec3(1.272000,1.249000,2.568000); -positions[576] = Vec3(0.431000,0.743000,2.238000); -positions[577] = Vec3(0.493000,0.240000,0.184000); -positions[578] = Vec3(1.734000,0.506000,2.317000); -positions[579] = Vec3(0.874000,0.631000,2.692000); -positions[580] = Vec3(0.473000,2.790000,2.161000); -positions[581] = Vec3(1.310000,0.571000,2.759000); -positions[582] = Vec3(0.677000,0.798000,1.916000); -positions[583] = Vec3(0.944000,0.442000,1.858000); -positions[584] = Vec3(3.006000,2.098000,2.976000); -positions[585] = Vec3(0.864000,0.592000,2.231000); -positions[586] = Vec3(1.366000,0.611000,2.147000); -positions[587] = Vec3(2.871000,1.217000,2.880000); -positions[588] = Vec3(1.674000,2.664000,2.336000); -positions[589] = Vec3(1.757000,0.879000,2.101000); -positions[590] = Vec3(1.293000,2.939000,2.457000); -positions[591] = Vec3(1.108000,1.131000,2.206000); -positions[592] = Vec3(1.207000,1.658000,2.498000); -positions[593] = Vec3(0.850000,1.373000,2.312000); -positions[594] = Vec3(1.413000,1.060000,1.939000); -positions[595] = Vec3(1.138000,0.140000,2.102000); -positions[596] = Vec3(0.752000,1.307000,1.190000); -positions[597] = Vec3(1.254000,0.942000,2.790000); -positions[598] = Vec3(1.544000,1.614000,2.800000); -positions[599] = Vec3(2.128000,0.302000,2.833000); -positions[600] = Vec3(0.300000,1.744000,0.027000); -positions[601] = Vec3(1.878000,2.986000,2.060000); -positions[602] = Vec3(1.528000,0.233000,2.045000); -positions[603] = Vec3(1.146000,1.817000,2.067000); -positions[604] = Vec3(1.037000,2.746000,0.813000); -positions[605] = Vec3(0.524000,0.610000,1.566000); -positions[606] = Vec3(0.945000,2.964000,0.503000); -positions[607] = Vec3(1.788000,2.565000,0.965000); -positions[608] = Vec3(0.471000,2.510000,0.491000); -positions[609] = Vec3(0.512000,2.043000,1.371000); -positions[610] = Vec3(2.316000,2.423000,1.494000); -positions[611] = Vec3(1.575000,2.394000,2.953000); -positions[612] = Vec3(2.845000,2.869000,0.985000); -positions[613] = Vec3(1.016000,2.335000,1.003000); -positions[614] = Vec3(0.998000,2.830000,1.879000); -positions[615] = Vec3(0.624000,2.508000,0.075000); -positions[616] = Vec3(1.362000,2.808000,2.069000); -positions[617] = Vec3(1.747000,0.068000,0.810000); -positions[618] = Vec3(1.768000,2.355000,0.661000); -positions[619] = Vec3(1.535000,2.410000,2.085000); -positions[620] = Vec3(0.844000,2.004000,1.646000); -positions[621] = Vec3(1.124000,0.280000,0.649000); -positions[622] = Vec3(0.689000,2.170000,0.648000); -positions[623] = Vec3(0.849000,2.666000,1.175000); -positions[624] = Vec3(2.975000,1.963000,1.308000); -positions[625] = Vec3(1.074000,2.082000,0.714000); -positions[626] = Vec3(1.284000,2.651000,1.110000); -positions[627] = Vec3(1.669000,0.205000,0.180000); -positions[628] = Vec3(1.716000,0.047000,1.253000); -positions[629] = Vec3(0.501000,2.241000,1.043000); -positions[630] = Vec3(1.038000,1.833000,0.305000); -positions[631] = Vec3(0.646000,2.431000,1.424000); -positions[632] = Vec3(1.383000,2.059000,2.230000); -positions[633] = Vec3(0.370000,2.566000,1.192000); -positions[634] = Vec3(1.355000,2.006000,0.120000); -positions[635] = Vec3(2.113000,0.075000,0.589000); -positions[636] = Vec3(1.850000,0.448000,1.890000); -positions[637] = Vec3(1.215000,2.704000,0.405000); -positions[638] = Vec3(0.575000,2.997000,1.798000); -positions[639] = Vec3(0.967000,2.586000,2.603000); -positions[640] = Vec3(0.276000,1.669000,1.430000); -positions[641] = Vec3(1.483000,2.284000,1.128000); -positions[642] = Vec3(0.983000,3.003000,1.099000); -positions[643] = Vec3(0.539000,2.222000,1.720000); -positions[644] = Vec3(0.648000,2.826000,2.751000); -positions[645] = Vec3(0.803000,1.994000,0.993000); -positions[646] = Vec3(0.451000,0.216000,1.438000); -positions[647] = Vec3(1.604000,2.512000,0.334000); -positions[648] = Vec3(1.980000,2.022000,0.588000); -positions[649] = Vec3(1.843000,2.834000,1.544000); -positions[650] = Vec3(1.835000,3.005000,2.858000); -positions[651] = Vec3(0.679000,2.499000,0.838000); -positions[652] = Vec3(0.012000,2.637000,1.524000); -positions[653] = Vec3(0.314000,2.065000,0.602000); -positions[654] = Vec3(1.157000,0.004000,0.173000); -positions[655] = Vec3(0.736000,1.705000,1.382000); -positions[656] = Vec3(1.511000,2.736000,0.690000); -positions[657] = Vec3(1.330000,2.541000,1.735000); -positions[658] = Vec3(0.744000,0.170000,0.785000); -positions[659] = Vec3(2.593000,2.794000,0.703000); -positions[660] = Vec3(0.275000,1.872000,1.043000); -positions[661] = Vec3(1.624000,2.608000,1.341000); -positions[662] = Vec3(1.382000,0.122000,2.855000); -positions[663] = Vec3(1.326000,2.434000,0.783000); -positions[664] = Vec3(0.117000,0.116000,1.254000); -positions[665] = Vec3(1.045000,2.970000,2.748000); -positions[666] = Vec3(1.341000,2.692000,2.799000); -positions[667] = Vec3(1.797000,2.586000,2.709000); -positions[668] = Vec3(0.890000,2.484000,1.716000); -positions[669] = Vec3(2.373000,2.558000,1.889000); -positions[670] = Vec3(1.566000,2.323000,2.574000); -positions[671] = Vec3(1.257000,2.280000,0.399000); -positions[672] = Vec3(0.679000,2.130000,2.434000); -positions[673] = Vec3(2.016000,2.334000,2.462000); -positions[674] = Vec3(1.077000,2.213000,2.416000); -positions[675] = Vec3(0.581000,1.950000,2.081000); -positions[676] = Vec3(0.805000,2.315000,2.810000); -positions[677] = Vec3(0.844000,1.787000,2.322000); -positions[678] = Vec3(0.980000,2.205000,0.129000); -positions[679] = Vec3(2.468000,0.603000,2.740000); -positions[680] = Vec3(2.366000,2.403000,2.299000); -positions[681] = Vec3(0.337000,2.487000,2.329000); -positions[682] = Vec3(2.007000,2.793000,2.452000); -positions[683] = Vec3(1.072000,2.571000,0.063000); -positions[684] = Vec3(1.217000,2.283000,2.806000); -positions[685] = Vec3(0.459000,2.477000,2.728000); -positions[686] = Vec3(0.958000,1.975000,2.710000); -positions[687] = Vec3(0.914000,2.111000,2.052000); -positions[688] = Vec3(0.768000,2.958000,0.075000); -positions[689] = Vec3(0.474000,1.805000,2.533000); -positions[690] = Vec3(1.313000,2.552000,2.395000); -positions[691] = Vec3(1.853000,2.014000,2.229000); -positions[692] = Vec3(2.405000,2.230000,2.658000); -positions[693] = Vec3(0.727000,1.781000,0.016000); -positions[694] = Vec3(0.974000,2.791000,2.271000); -positions[695] = Vec3(0.438000,0.096000,2.457000); -positions[696] = Vec3(0.652000,2.392000,2.064000); -positions[697] = Vec3(1.972000,2.209000,2.834000); -positions[698] = Vec3(0.333000,0.141000,2.088000); -positions[699] = Vec3(1.813000,1.952000,0.063000); -positions[700] = Vec3(0.166000,2.838000,1.877000); -positions[701] = Vec3(1.772000,0.487000,0.951000); -positions[702] = Vec3(1.924000,1.404000,1.434000); -positions[703] = Vec3(2.734000,0.348000,1.712000); -positions[704] = Vec3(2.874000,0.729000,1.811000); -positions[705] = Vec3(1.841000,0.877000,1.137000); -positions[706] = Vec3(2.327000,1.491000,1.768000); -positions[707] = Vec3(1.916000,1.483000,1.057000); -positions[708] = Vec3(2.783000,0.850000,0.745000); -positions[709] = Vec3(1.829000,1.526000,0.085000); -positions[710] = Vec3(2.426000,1.082000,0.652000); -positions[711] = Vec3(1.645000,1.241000,1.217000); -positions[712] = Vec3(2.286000,0.725000,0.084000); -positions[713] = Vec3(2.755000,0.691000,1.421000); -positions[714] = Vec3(2.651000,0.591000,1.023000); -positions[715] = Vec3(2.040000,0.863000,0.442000); -positions[716] = Vec3(0.035000,0.109000,2.497000); -positions[717] = Vec3(0.127000,1.410000,0.572000); -positions[718] = Vec3(2.174000,0.357000,0.307000); -positions[719] = Vec3(2.705000,1.508000,0.758000); -positions[720] = Vec3(2.223000,1.407000,2.913000); -positions[721] = Vec3(2.528000,1.722000,1.088000); -positions[722] = Vec3(2.860000,0.345000,0.198000); -positions[723] = Vec3(2.580000,1.789000,1.479000); -positions[724] = Vec3(2.779000,0.295000,1.295000); -positions[725] = Vec3(0.097000,0.434000,2.826000); -positions[726] = Vec3(2.952000,1.654000,1.091000); -positions[727] = Vec3(0.119000,1.878000,0.343000); -positions[728] = Vec3(1.718000,1.173000,0.327000); -positions[729] = Vec3(2.833000,0.016000,0.527000); -positions[730] = Vec3(2.085000,1.779000,2.888000); -positions[731] = Vec3(2.754000,2.952000,1.485000); -positions[732] = Vec3(2.826000,0.935000,1.162000); -positions[733] = Vec3(1.564000,1.585000,1.615000); -positions[734] = Vec3(2.132000,0.645000,1.093000); -positions[735] = Vec3(2.294000,1.490000,1.350000); -positions[736] = Vec3(0.081000,0.490000,1.479000); -positions[737] = Vec3(2.118000,1.165000,1.642000); -positions[738] = Vec3(2.141000,0.121000,1.390000); -positions[739] = Vec3(2.385000,0.389000,1.196000); -positions[740] = Vec3(0.049000,0.166000,0.817000); -positions[741] = Vec3(1.993000,0.806000,1.814000); -positions[742] = Vec3(0.006000,1.450000,0.171000); -positions[743] = Vec3(2.297000,0.428000,0.764000); -positions[744] = Vec3(2.851000,0.469000,2.114000); -positions[745] = Vec3(1.814000,1.957000,0.945000); -positions[746] = Vec3(0.386000,0.327000,0.902000); -positions[747] = Vec3(2.452000,1.070000,1.807000); -positions[748] = Vec3(2.309000,1.537000,2.159000); -positions[749] = Vec3(2.712000,1.497000,2.007000); -positions[750] = Vec3(1.727000,0.924000,1.503000); -positions[751] = Vec3(0.861000,0.801000,0.344000); -positions[752] = Vec3(1.740000,1.245000,0.819000); -positions[753] = Vec3(0.117000,0.042000,0.197000); -positions[754] = Vec3(2.557000,0.996000,0.317000); -positions[755] = Vec3(2.228000,1.588000,2.548000); -positions[756] = Vec3(2.849000,1.557000,2.708000); -positions[757] = Vec3(0.152000,1.107000,0.219000); -positions[758] = Vec3(2.460000,1.318000,1.002000); -positions[759] = Vec3(2.405000,1.436000,0.528000); -positions[760] = Vec3(2.135000,1.179000,2.046000); -positions[761] = Vec3(1.726000,0.588000,0.286000); -positions[762] = Vec3(2.831000,1.053000,1.538000); -positions[763] = Vec3(1.932000,1.556000,1.833000); -positions[764] = Vec3(2.423000,0.900000,1.064000); -positions[765] = Vec3(3.001000,1.807000,0.709000); -positions[766] = Vec3(0.578000,1.095000,0.223000); -positions[767] = Vec3(2.215000,1.160000,0.252000); -positions[768] = Vec3(2.050000,0.921000,0.835000); -positions[769] = Vec3(2.080000,1.682000,0.738000); -positions[770] = Vec3(2.851000,1.753000,0.027000); -positions[771] = Vec3(0.203000,0.509000,0.202000); -positions[772] = Vec3(1.967000,1.018000,0.018000); -positions[773] = Vec3(1.869000,0.878000,2.472000); -positions[774] = Vec3(1.917000,0.228000,2.507000); -positions[775] = Vec3(0.316000,0.795000,2.991000); -positions[776] = Vec3(2.175000,1.229000,2.472000); -positions[777] = Vec3(2.405000,1.062000,2.931000); -positions[778] = Vec3(2.501000,0.511000,2.369000); -positions[779] = Vec3(2.641000,0.819000,2.141000); -positions[780] = Vec3(0.649000,1.384000,3.006000); -positions[781] = Vec3(1.012000,0.329000,2.963000); -positions[782] = Vec3(2.755000,0.350000,2.718000); -positions[783] = Vec3(2.315000,0.153000,2.454000); -positions[784] = Vec3(2.583000,1.696000,2.389000); -positions[785] = Vec3(0.439000,2.593000,1.776000); -positions[786] = Vec3(2.630000,1.390000,0.116000); -positions[787] = Vec3(2.854000,0.669000,2.478000); -positions[788] = Vec3(2.551000,1.342000,2.621000); -positions[789] = Vec3(2.533000,2.734000,2.987000); -positions[790] = Vec3(2.772000,2.446000,2.875000); -positions[791] = Vec3(2.817000,1.051000,2.498000); -positions[792] = Vec3(2.688000,1.404000,1.621000); -positions[793] = Vec3(0.083000,2.737000,2.775000); -positions[794] = Vec3(2.514000,0.322000,2.041000); -positions[795] = Vec3(2.470000,0.900000,2.504000); -positions[796] = Vec3(2.790000,0.444000,0.624000); -positions[797] = Vec3(0.040000,0.840000,2.202000); -positions[798] = Vec3(0.530000,1.067000,2.764000); -positions[799] = Vec3(0.191000,1.385000,2.541000); -positions[800] = Vec3(2.465000,0.363000,0.051000); -positions[801] = Vec3(1.850000,1.902000,2.592000); -positions[802] = Vec3(1.432000,0.306000,2.449000); -positions[803] = Vec3(2.259000,0.489000,1.753000); -positions[804] = Vec3(2.803000,1.118000,1.956000); -positions[805] = Vec3(2.426000,0.147000,1.636000); -positions[806] = Vec3(2.880000,1.846000,2.133000); -positions[807] = Vec3(2.862000,2.110000,1.867000); -positions[808] = Vec3(0.424000,1.184000,2.299000); -positions[809] = Vec3(2.518000,1.218000,2.228000); -positions[810] = Vec3(2.153000,0.834000,1.468000); -positions[811] = Vec3(0.105000,1.397000,2.088000); -positions[812] = Vec3(2.579000,0.601000,0.316000); -positions[813] = Vec3(2.594000,2.106000,2.968000); -positions[814] = Vec3(0.448000,1.435000,1.783000); -positions[815] = Vec3(2.125000,0.299000,2.132000); -positions[816] = Vec3(2.849000,1.402000,2.356000); -positions[817] = Vec3(2.956000,0.091000,2.078000); -positions[818] = Vec3(0.156000,1.696000,2.357000); -positions[819] = Vec3(1.566000,2.211000,1.557000); -positions[820] = Vec3(2.047000,0.194000,0.985000); -positions[821] = Vec3(1.947000,2.680000,0.488000); -positions[822] = Vec3(2.343000,2.796000,1.447000); -positions[823] = Vec3(2.006000,2.332000,0.265000); -positions[824] = Vec3(2.396000,1.834000,0.546000); -positions[825] = Vec3(2.538000,2.059000,2.207000); -positions[826] = Vec3(0.110000,2.360000,0.447000); -positions[827] = Vec3(2.198000,2.448000,1.136000); -positions[828] = Vec3(2.420000,2.121000,1.271000); -positions[829] = Vec3(0.422000,2.192000,0.260000); -positions[830] = Vec3(2.145000,2.767000,2.839000); -positions[831] = Vec3(2.434000,2.398000,0.421000); -positions[832] = Vec3(2.489000,2.175000,1.718000); -positions[833] = Vec3(2.870000,2.527000,0.814000); -positions[834] = Vec3(2.741000,2.016000,0.337000); -positions[835] = Vec3(1.997000,2.574000,2.107000); -positions[836] = Vec3(0.002000,2.128000,0.932000); -positions[837] = Vec3(2.787000,2.375000,0.234000); -positions[838] = Vec3(2.235000,1.852000,1.620000); -positions[839] = Vec3(2.782000,1.642000,0.422000); -positions[840] = Vec3(2.915000,1.760000,1.699000); -positions[841] = Vec3(2.047000,2.178000,1.549000); -positions[842] = Vec3(1.808000,1.878000,1.556000); -positions[843] = Vec3(2.224000,2.043000,0.913000); -positions[844] = Vec3(2.619000,2.611000,1.237000); -positions[845] = Vec3(2.916000,2.726000,0.168000); -positions[846] = Vec3(2.021000,2.833000,1.176000); -positions[847] = Vec3(2.967000,2.308000,2.258000); -positions[848] = Vec3(2.778000,2.270000,1.477000); -positions[849] = Vec3(2.121000,1.834000,2.002000); -positions[850] = Vec3(2.097000,2.752000,0.808000); -positions[851] = Vec3(1.897000,0.566000,1.501000); -positions[852] = Vec3(0.359000,2.802000,0.036000); -positions[853] = Vec3(2.966000,2.454000,1.186000); -positions[854] = Vec3(2.461000,2.964000,1.132000); -positions[855] = Vec3(2.093000,1.821000,1.243000); -positions[856] = Vec3(1.706000,2.659000,1.841000); -positions[857] = Vec3(2.074000,1.709000,0.342000); -positions[858] = Vec3(2.137000,2.894000,1.813000); -positions[859] = Vec3(0.223000,2.293000,1.417000); -positions[860] = Vec3(2.637000,0.007000,0.197000); -positions[861] = Vec3(1.416000,0.050000,0.483000); -positions[862] = Vec3(1.845000,2.250000,1.251000); -positions[863] = Vec3(2.906000,0.034000,2.896000); -positions[864] = Vec3(2.481000,0.204000,0.474000); -positions[865] = Vec3(2.234000,2.051000,0.158000); -positions[866] = Vec3(0.185000,2.453000,0.055000); -positions[867] = Vec3(2.509000,0.048000,2.786000); -positions[868] = Vec3(2.202000,2.206000,2.027000); -positions[869] = Vec3(0.061000,2.367000,2.656000); -positions[870] = Vec3(3.003000,2.755000,2.241000); -positions[871] = Vec3(0.297000,2.131000,2.463000); -positions[872] = Vec3(1.553000,0.429000,1.573000); -positions[873] = Vec3(2.506000,1.832000,1.911000); -positions[874] = Vec3(2.472000,1.814000,2.759000); -positions[875] = Vec3(1.922000,1.563000,2.278000); -positions[876] = Vec3(2.623000,2.666000,2.169000); -positions[877] = Vec3(0.120000,1.834000,2.723000); -positions[878] = Vec3(0.294000,0.103000,2.826000); -positions[879] = Vec3(2.364000,2.821000,0.417000); -positions[880] = Vec3(2.446000,1.734000,0.153000); -positions[881] = Vec3(2.777000,2.037000,2.565000); -positions[882] = Vec3(2.837000,2.477000,1.924000); -positions[883] = Vec3(2.221000,1.961000,2.443000); -positions[884] = Vec3(2.284000,2.895000,2.157000); -positions[885] = Vec3(2.728000,2.880000,1.861000); -positions[886] = Vec3(0.454000,2.080000,2.868000); -positions[887] = Vec3(2.430000,2.790000,2.524000); -positions[888] = Vec3(1.808000,2.213000,1.899000); -positions[889] = Vec3(2.666000,0.053000,2.309000); -positions[890] = Vec3(2.290000,2.408000,2.995000); -positions[891] = Vec3(2.646000,2.592000,1.625000); -positions[892] = Vec3(2.750000,2.508000,2.489000); -positions[893] = Vec3(0.211000,1.753000,1.939000); diff --git a/platforms/reference/include/ReferenceAngleBondIxn.h b/platforms/reference/include/ReferenceAngleBondIxn.h index 4a18be67e4b44dab279260b581b831a15a6641a0..c85f1fe8a5d6845c3e4dec698cbe3692dbf28659 100644 --- a/platforms/reference/include/ReferenceAngleBondIxn.h +++ b/platforms/reference/include/ReferenceAngleBondIxn.h @@ -29,7 +29,7 @@ namespace OpenMM { -class ReferenceAngleBondIxn : public ReferenceBondIxn { +class OPENMM_EXPORT ReferenceAngleBondIxn : public ReferenceBondIxn { private: diff --git a/platforms/reference/include/ReferenceCustomCentroidBondIxn.h b/platforms/reference/include/ReferenceCustomCentroidBondIxn.h new file mode 100644 index 0000000000000000000000000000000000000000..0fd1548ee20f0f9cff6ea7f8160c98b79469d7e2 --- /dev/null +++ b/platforms/reference/include/ReferenceCustomCentroidBondIxn.h @@ -0,0 +1,177 @@ + +/* Portions copyright (c) 2009-2015 Stanford University and Simbios. + * Contributors: Peter Eastman + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject + * to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef __ReferenceCustomCentroidBondIxn_H__ +#define __ReferenceCustomCentroidBondIxn_H__ + +#include "ReferenceBondIxn.h" +#include "lepton/ExpressionProgram.h" +#include "lepton/ParsedExpression.h" +#include +#include + +namespace OpenMM { + +class ReferenceCustomCentroidBondIxn : public ReferenceBondIxn { + + private: + + class PositionTermInfo; + class DistanceTermInfo; + class AngleTermInfo; + class DihedralTermInfo; + std::vector > groupAtoms; + std::vector > normalizedWeights; + std::vector > bondGroups; + Lepton::ExpressionProgram energyExpression; + std::vector bondParamNames; + std::vector positionTerms; + std::vector distanceTerms; + std::vector angleTerms; + std::vector dihedralTerms; + + + /**--------------------------------------------------------------------------------------- + + Calculate custom interaction for one bond + + @param bond the index of the bond + @param groupCenters group center coordinates + @param variables the values of variables that may appear in expressions + @param forces force array (forces added) + @param totalEnergy total energy + + --------------------------------------------------------------------------------------- */ + + void calculateOneIxn(int bond, std::vector& groupCenters, + std::map& variables, std::vector& forces, + RealOpenMM* totalEnergy) const; + + void computeDelta(int group1, int group2, RealOpenMM* delta, std::vector& groupCenters) const; + + static RealOpenMM computeAngle(RealOpenMM* vec1, RealOpenMM* vec2); + + + public: + + /**--------------------------------------------------------------------------------------- + + Constructor + + --------------------------------------------------------------------------------------- */ + + ReferenceCustomCentroidBondIxn(int numGroupsPerBond, const std::vector >& groupAtoms, + const std::vector >& normalizedWeights, const std::vector >& bondGroups, const Lepton::ParsedExpression& energyExpression, + const std::vector& bondParameterNames, const std::map >& distances, + const std::map >& angles, const std::map >& dihedrals); + + /**--------------------------------------------------------------------------------------- + + Destructor + + --------------------------------------------------------------------------------------- */ + + ~ReferenceCustomCentroidBondIxn(); + + /**--------------------------------------------------------------------------------------- + + Get the list of groups in each bond. + + --------------------------------------------------------------------------------------- */ + + const std::vector >& getBondGroups() const { + return bondGroups; + } + + /**--------------------------------------------------------------------------------------- + + Calculate custom compound bond interaction + + @param atomCoordinates atom coordinates + @param bondParameters bond parameters values bondParameters[bondIndex][parameterIndex] + @param globalParameters the values of global parameters + @param forces force array (forces added) + @param totalEnergy total energy + + --------------------------------------------------------------------------------------- */ + + void calculatePairIxn(std::vector& atomCoordinates, RealOpenMM** bondParameters, + const std::map& globalParameters, + std::vector& forces, RealOpenMM* totalEnergy) const; + +// --------------------------------------------------------------------------------------- + +}; + +class ReferenceCustomCentroidBondIxn::PositionTermInfo { +public: + std::string name; + int group, component; + Lepton::ExpressionProgram forceExpression; + PositionTermInfo(const std::string& name, int group, int component, const Lepton::ExpressionProgram& forceExpression) : + name(name), group(group), component(component), forceExpression(forceExpression) { + } +}; + +class ReferenceCustomCentroidBondIxn::DistanceTermInfo { +public: + std::string name; + int g1, g2; + Lepton::ExpressionProgram forceExpression; + mutable RealOpenMM delta[ReferenceForce::LastDeltaRIndex]; + DistanceTermInfo(const std::string& name, const std::vector& groups, const Lepton::ExpressionProgram& forceExpression) : + name(name), g1(groups[0]), g2(groups[1]), forceExpression(forceExpression) { + } +}; + +class ReferenceCustomCentroidBondIxn::AngleTermInfo { +public: + std::string name; + int g1, g2, g3; + Lepton::ExpressionProgram forceExpression; + mutable RealOpenMM delta1[ReferenceForce::LastDeltaRIndex]; + mutable RealOpenMM delta2[ReferenceForce::LastDeltaRIndex]; + AngleTermInfo(const std::string& name, const std::vector& groups, const Lepton::ExpressionProgram& forceExpression) : + name(name), g1(groups[0]), g2(groups[1]), g3(groups[2]), forceExpression(forceExpression) { + } +}; + +class ReferenceCustomCentroidBondIxn::DihedralTermInfo { +public: + std::string name; + int g1, g2, g3, g4; + Lepton::ExpressionProgram forceExpression; + mutable RealOpenMM delta1[ReferenceForce::LastDeltaRIndex]; + mutable RealOpenMM delta2[ReferenceForce::LastDeltaRIndex]; + mutable RealOpenMM delta3[ReferenceForce::LastDeltaRIndex]; + mutable RealOpenMM cross1[3]; + mutable RealOpenMM cross2[3]; + DihedralTermInfo(const std::string& name, const std::vector& groups, const Lepton::ExpressionProgram& forceExpression) : + name(name), g1(groups[0]), g2(groups[1]), g3(groups[2]), g4(groups[3]), forceExpression(forceExpression) { + } +}; + +} // namespace OpenMM + +#endif // __ReferenceCustomCentroidBondIxn_H__ diff --git a/platforms/reference/include/ReferenceKernels.h b/platforms/reference/include/ReferenceKernels.h index e064fd76d8bdf470a5fe82e4a591af394091d74b..ca14215e9c581c9c330fea0be6fbe2cb86f95b2e 100644 --- a/platforms/reference/include/ReferenceKernels.h +++ b/platforms/reference/include/ReferenceKernels.h @@ -37,6 +37,7 @@ #include "SimTKOpenMMRealType.h" #include "ReferenceNeighborList.h" #include "lepton/CompiledExpression.h" +#include "lepton/CustomFunction.h" #include "lepton/ExpressionProgram.h" namespace OpenMM { @@ -44,6 +45,7 @@ namespace OpenMM { class ReferenceObc; class ReferenceGBVI; class ReferenceAndersenThermostat; +class ReferenceCustomCentroidBondIxn; class ReferenceCustomCompoundBondIxn; class ReferenceCustomHbondIxn; class ReferenceCustomManyParticleIxn; @@ -577,6 +579,15 @@ public: * @param force the NonbondedForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const NonbondedForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: int numParticles, num14; int **bonded14IndexArray; @@ -785,11 +796,23 @@ public: */ void copyParametersToContext(ContextImpl& context, const CustomExternalForce& force); private: + class PeriodicDistanceFunction; int numParticles; std::vector particles; RealOpenMM **particleParamArray; Lepton::CompiledExpression energyExpression, forceExpressionX, forceExpressionY, forceExpressionZ; std::vector parameterNames, globalParameterNames; + RealVec* boxVectors; +}; + +class ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction : public Lepton::CustomFunction { +public: + RealVec** boxVectorHandle; + PeriodicDistanceFunction(RealVec** boxVectorHandle); + int getNumArguments() const; + double evaluate(const double* arguments) const; + double evaluateDerivative(const double* arguments, const int* derivOrder) const; + Lepton::CustomFunction* clone() const; }; /** @@ -833,6 +856,44 @@ private: std::vector globalParameterNames; }; +/** + * This kernel is invoked by CustomCentroidBondForce to calculate the forces acting on the system. + */ +class ReferenceCalcCustomCentroidBondForceKernel : public CalcCustomCentroidBondForceKernel { +public: + ReferenceCalcCustomCentroidBondForceKernel(std::string name, const Platform& platform) : CalcCustomCentroidBondForceKernel(name, platform), ixn(NULL) { + } + ~ReferenceCalcCustomCentroidBondForceKernel(); + /** + * Initialize the kernel. + * + * @param system the System this kernel will be applied to + * @param force the CustomCentroidBondForce this kernel will be used for + */ + void initialize(const System& system, const CustomCentroidBondForce& force); + /** + * Execute the kernel to calculate the forces and/or energy. + * + * @param context the context in which to execute this kernel + * @param includeForces true if forces should be calculated + * @param includeEnergy true if the energy should be calculated + * @return the potential energy due to the force + */ + double execute(ContextImpl& context, bool includeForces, bool includeEnergy); + /** + * Copy changed parameters over to a context. + * + * @param context the context to copy parameters to + * @param force the CustomCentroidBondForce to copy the parameters from + */ + void copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force); +private: + int numBonds, numParticles; + RealOpenMM **bondParamArray; + ReferenceCustomCentroidBondIxn* ixn; + std::vector globalParameterNames; +}; + /** * This kernel is invoked by CustomCompoundBondForce to calculate the forces acting on the system. */ @@ -865,7 +926,7 @@ public: */ void copyParametersToContext(ContextImpl& context, const CustomCompoundBondForce& force); private: - int numBonds, numParticles; + int numBonds; RealOpenMM **bondParamArray; ReferenceCustomCompoundBondIxn* ixn; std::vector globalParameterNames; diff --git a/platforms/reference/include/ReferenceStochasticDynamics.h b/platforms/reference/include/ReferenceStochasticDynamics.h index d11ece3ecbdbc7a18bc5a9ceab0812f7f4f2c3de..3a8b52a4594a6bc46f7cfdc0204a9cbf22478ccf 100644 --- a/platforms/reference/include/ReferenceStochasticDynamics.h +++ b/platforms/reference/include/ReferenceStochasticDynamics.h @@ -111,13 +111,26 @@ class OPENMM_EXPORT ReferenceStochasticDynamics : public ReferenceDynamics { @param atomCoordinates atom coordinates @param velocities velocities @param forces forces - @param masses atom masses + @param inverseMasses inverse atom masses --------------------------------------------------------------------------------------- */ virtual void updatePart2(int numberOfAtoms, std::vector& atomCoordinates, std::vector& velocities, std::vector& forces, std::vector& inverseMasses, std::vector& xPrime); + /**--------------------------------------------------------------------------------------- + + Third update + + @param numberOfAtoms number of atoms + @param atomCoordinates atom coordinates + @param velocities velocities + @param inverseMasses inverse atom masses + + --------------------------------------------------------------------------------------- */ + + virtual void updatePart3(int numberOfAtoms, std::vector& atomCoordinates, std::vector& velocities, + std::vector& inverseMasses, std::vector& xPrime); }; } // namespace OpenMM diff --git a/platforms/reference/src/ReferenceKernelFactory.cpp b/platforms/reference/src/ReferenceKernelFactory.cpp index b7be168a9610aec64433995aef8606a41b95f1d2..73f77081a519a83566854a6fbca0eca8ee689ddb 100644 --- a/platforms/reference/src/ReferenceKernelFactory.cpp +++ b/platforms/reference/src/ReferenceKernelFactory.cpp @@ -78,6 +78,8 @@ KernelImpl* ReferenceKernelFactory::createKernelImpl(std::string name, const Pla return new ReferenceCalcCustomExternalForceKernel(name, platform); if (name == CalcCustomHbondForceKernel::Name()) return new ReferenceCalcCustomHbondForceKernel(name, platform); + if (name == CalcCustomCentroidBondForceKernel::Name()) + return new ReferenceCalcCustomCentroidBondForceKernel(name, platform); if (name == CalcCustomCompoundBondForceKernel::Name()) return new ReferenceCalcCustomCompoundBondForceKernel(name, platform); if (name == CalcCustomManyParticleForceKernel::Name()) diff --git a/platforms/reference/src/ReferenceKernels.cpp b/platforms/reference/src/ReferenceKernels.cpp index 41fcbf41772c950ca91db0f9ab93194123c221b0..36d048e9aef1147e6e44bc481d8ab5afc53e9566 100644 --- a/platforms/reference/src/ReferenceKernels.cpp +++ b/platforms/reference/src/ReferenceKernels.cpp @@ -41,6 +41,7 @@ #include "ReferenceConstraints.h" #include "ReferenceCustomAngleIxn.h" #include "ReferenceCustomBondIxn.h" +#include "ReferenceCustomCentroidBondIxn.h" #include "ReferenceCustomCompoundBondIxn.h" #include "ReferenceCustomDynamics.h" #include "ReferenceCustomExternalIxn.h" @@ -66,6 +67,7 @@ #include "openmm/System.h" #include "openmm/internal/AndersenThermostatImpl.h" #include "openmm/internal/ContextImpl.h" +#include "openmm/internal/CustomCentroidBondForceImpl.h" #include "openmm/internal/CustomCompoundBondForceImpl.h" #include "openmm/internal/CustomHbondForceImpl.h" #include "openmm/internal/CustomNonbondedForceImpl.h" @@ -75,6 +77,7 @@ #include "openmm/OpenMMException.h" #include "SimTKOpenMMUtilities.h" #include "lepton/CustomFunction.h" +#include "lepton/Operation.h" #include "lepton/Parser.h" #include "lepton/ParsedExpression.h" #include @@ -144,6 +147,17 @@ static ReferenceConstraints& extractConstraints(ContextImpl& context) { return *(ReferenceConstraints*) data->constraints; } +/** + * Make sure an expression doesn't use any undefined variables. + */ +static void validateVariables(const Lepton::ExpressionTreeNode& node, const set& variables) { + const Lepton::Operation& op = node.getOperation(); + if (op.getId() == Lepton::Operation::VARIABLE && variables.find(op.getName()) == variables.end()) + throw OpenMMException("Unknown variable in expression: "+op.getName()); + for (int i = 0; i < (int) node.getChildren().size(); i++) + validateVariables(node.getChildren()[i], variables); +} + /** * Compute the kinetic energy of the system, possibly shifting the velocities in time to account * for a leapfrog integrator. @@ -420,6 +434,11 @@ void ReferenceCalcCustomBondForceKernel::initialize(const System& system, const parameterNames.push_back(force.getPerBondParameterName(i)); for (int i = 0; i < force.getNumGlobalParameters(); i++) globalParameterNames.push_back(force.getGlobalParameterName(i)); + set variables; + variables.insert("r"); + variables.insert(parameterNames.begin(), parameterNames.end()); + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); } double ReferenceCalcCustomBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { @@ -534,6 +553,11 @@ void ReferenceCalcCustomAngleForceKernel::initialize(const System& system, const parameterNames.push_back(force.getPerAngleParameterName(i)); for (int i = 0; i < force.getNumGlobalParameters(); i++) globalParameterNames.push_back(force.getGlobalParameterName(i)); + set variables; + variables.insert("theta"); + variables.insert(parameterNames.begin(), parameterNames.end()); + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); } double ReferenceCalcCustomAngleForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { @@ -778,6 +802,11 @@ void ReferenceCalcCustomTorsionForceKernel::initialize(const System& system, con parameterNames.push_back(force.getPerTorsionParameterName(i)); for (int i = 0; i < force.getNumGlobalParameters(); i++) globalParameterNames.push_back(force.getGlobalParameterName(i)); + set variables; + variables.insert("theta"); + variables.insert(parameterNames.begin(), parameterNames.end()); + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); } double ReferenceCalcCustomTorsionForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { @@ -967,6 +996,15 @@ void ReferenceCalcNonbondedForceKernel::copyParametersToContext(ContextImpl& con dispersionCoefficient = NonbondedForceImpl::calcDispersionCorrection(context.getSystem(), force); } +void ReferenceCalcNonbondedForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (nonbondedMethod != PME) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + alpha = ewaldAlpha; + nx = gridSize[0]; + ny = gridSize[1]; + nz = gridSize[2]; +} + ReferenceCalcCustomNonbondedForceKernel::~ReferenceCalcCustomNonbondedForceKernel() { disposeRealArray(particleParamArray, numParticles); if (neighborList != NULL) @@ -1027,6 +1065,14 @@ void ReferenceCalcCustomNonbondedForceKernel::initialize(const System& system, c globalParameterNames.push_back(force.getGlobalParameterName(i)); globalParamValues[force.getGlobalParameterName(i)] = force.getGlobalParameterDefaultValue(i); } + set variables; + variables.insert("r"); + for (int i = 0; i < numParameters; i++) { + variables.insert(parameterNames[i]+"1"); + variables.insert(parameterNames[i]+"2"); + } + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); // Delete the custom functions. @@ -1303,6 +1349,18 @@ void ReferenceCalcCustomGBForceKernel::initialize(const System& system, const Cu valueDerivExpressions.resize(force.getNumComputedValues()); valueGradientExpressions.resize(force.getNumComputedValues()); + set particleVariables, pairVariables; + pairVariables.insert("r"); + particleVariables.insert("x"); + particleVariables.insert("y"); + particleVariables.insert("z"); + for (int i = 0; i < numPerParticleParameters; i++) { + particleVariables.insert(particleParameterNames[i]); + pairVariables.insert(particleParameterNames[i]+"1"); + pairVariables.insert(particleParameterNames[i]+"2"); + } + particleVariables.insert(globalParameterNames.begin(), globalParameterNames.end()); + pairVariables.insert(globalParameterNames.begin(), globalParameterNames.end()); for (int i = 0; i < force.getNumComputedValues(); i++) { string name, expression; CustomGBForce::ComputationType type; @@ -1311,15 +1369,21 @@ void ReferenceCalcCustomGBForceKernel::initialize(const System& system, const Cu valueExpressions.push_back(ex.createProgram()); valueTypes.push_back(type); valueNames.push_back(name); - if (i == 0) + if (i == 0) { valueDerivExpressions[i].push_back(ex.differentiate("r").optimize().createProgram()); + validateVariables(ex.getRootNode(), pairVariables); + } else { valueGradientExpressions[i].push_back(ex.differentiate("x").optimize().createProgram()); valueGradientExpressions[i].push_back(ex.differentiate("y").optimize().createProgram()); valueGradientExpressions[i].push_back(ex.differentiate("z").optimize().createProgram()); for (int j = 0; j < i; j++) valueDerivExpressions[i].push_back(ex.differentiate(valueNames[j]).optimize().createProgram()); + validateVariables(ex.getRootNode(), particleVariables); } + particleVariables.insert(name); + pairVariables.insert(name+"1"); + pairVariables.insert(name+"2"); } // Parse the expressions for energy terms. @@ -1341,10 +1405,12 @@ void ReferenceCalcCustomGBForceKernel::initialize(const System& system, const Cu energyGradientExpressions[i].push_back(ex.differentiate("x").optimize().createProgram()); energyGradientExpressions[i].push_back(ex.differentiate("y").optimize().createProgram()); energyGradientExpressions[i].push_back(ex.differentiate("z").optimize().createProgram()); + validateVariables(ex.getRootNode(), particleVariables); } else { energyDerivExpressions[i].push_back(ex.differentiate(valueNames[j]+"1").optimize().createProgram()); energyDerivExpressions[i].push_back(ex.differentiate(valueNames[j]+"2").optimize().createProgram()); + validateVariables(ex.getRootNode(), pairVariables); } } } @@ -1391,6 +1457,48 @@ void ReferenceCalcCustomGBForceKernel::copyParametersToContext(ContextImpl& cont } } +ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction::PeriodicDistanceFunction(RealVec** boxVectorHandle) : boxVectorHandle(boxVectorHandle) { +} + +int ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction::getNumArguments() const { + return 6; +} + +double ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction::evaluate(const double* arguments) const { + RealVec* boxVectors = *boxVectorHandle; + RealVec delta = RealVec(arguments[0], arguments[1], arguments[2])-RealVec(arguments[3], arguments[4], arguments[5]); + delta -= boxVectors[2]*floor(delta[2]/boxVectors[2][2]+0.5); + delta -= boxVectors[1]*floor(delta[1]/boxVectors[1][1]+0.5); + delta -= boxVectors[0]*floor(delta[0]/boxVectors[0][0]+0.5); + return sqrt(delta.dot(delta)); +} + +double ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction::evaluateDerivative(const double* arguments, const int* derivOrder) const { + int argIndex = -1; + for (int i = 0; i < 6; i++) { + if (derivOrder[i] > 0) { + if (derivOrder[i] > 1 || argIndex != -1) + throw OpenMMException("Unsupported derivative of periodicdistance"); // Should be impossible for this to happen. + argIndex = i; + } + } + RealVec* boxVectors = *boxVectorHandle; + RealVec delta = RealVec(arguments[0], arguments[1], arguments[2])-RealVec(arguments[3], arguments[4], arguments[5]); + delta -= boxVectors[2]*floor(delta[2]/boxVectors[2][2]+0.5); + delta -= boxVectors[1]*floor(delta[1]/boxVectors[1][1]+0.5); + delta -= boxVectors[0]*floor(delta[0]/boxVectors[0][0]+0.5); + double r = sqrt(delta.dot(delta)); + if (r == 0) + return 0.0; + if (argIndex < 3) + return delta[argIndex]/r; + return -delta[argIndex-3]/r; +} + +Lepton::CustomFunction* ReferenceCalcCustomExternalForceKernel::PeriodicDistanceFunction::clone() const { + return new PeriodicDistanceFunction(boxVectorHandle); +} + ReferenceCalcCustomExternalForceKernel::~ReferenceCalcCustomExternalForceKernel() { disposeRealArray(particleParamArray, numParticles); } @@ -1412,7 +1520,10 @@ void ReferenceCalcCustomExternalForceKernel::initialize(const System& system, co // Parse the expression used to calculate the force. - Lepton::ParsedExpression expression = Lepton::Parser::parse(force.getEnergyFunction()).optimize(); + map functions; + PeriodicDistanceFunction periodicDistance(&boxVectors); + functions["periodicdistance"] = &periodicDistance; + Lepton::ParsedExpression expression = Lepton::Parser::parse(force.getEnergyFunction(), functions).optimize(); energyExpression = expression.createCompiledExpression(); forceExpressionX = expression.differentiate("x").createCompiledExpression(); forceExpressionY = expression.differentiate("y").createCompiledExpression(); @@ -1421,11 +1532,19 @@ void ReferenceCalcCustomExternalForceKernel::initialize(const System& system, co parameterNames.push_back(force.getPerParticleParameterName(i)); for (int i = 0; i < force.getNumGlobalParameters(); i++) globalParameterNames.push_back(force.getGlobalParameterName(i)); + set variables; + variables.insert("x"); + variables.insert("y"); + variables.insert("z"); + variables.insert(parameterNames.begin(), parameterNames.end()); + variables.insert(globalParameterNames.begin(), globalParameterNames.end()); + validateVariables(expression.getRootNode(), variables); } double ReferenceCalcCustomExternalForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { vector& posData = extractPositions(context); vector& forceData = extractForces(context); + boxVectors = extractBoxVectors(context); RealOpenMM energy = 0; map globalParameters; for (int i = 0; i < (int) globalParameterNames.size(); i++) @@ -1582,6 +1701,90 @@ void ReferenceCalcCustomHbondForceKernel::copyParametersToContext(ContextImpl& c } } +ReferenceCalcCustomCentroidBondForceKernel::~ReferenceCalcCustomCentroidBondForceKernel() { + disposeRealArray(bondParamArray, numBonds); + if (ixn != NULL) + delete ixn; +} + +void ReferenceCalcCustomCentroidBondForceKernel::initialize(const System& system, const CustomCentroidBondForce& force) { + + // Build the arrays. + + int numGroups = force.getNumGroups(); + vector > groupAtoms(numGroups); + vector ignored; + for (int i = 0; i < numGroups; i++) + force.getGroupParameters(i, groupAtoms[i], ignored); + vector > normalizedWeights; + CustomCentroidBondForceImpl::computeNormalizedWeights(force, system, normalizedWeights); + numBonds = force.getNumBonds(); + vector > bondGroups(numBonds); + int numBondParameters = force.getNumPerBondParameters(); + bondParamArray = allocateRealArray(numBonds, numBondParameters); + for (int i = 0; i < numBonds; ++i) { + vector parameters; + force.getBondParameters(i, bondGroups[i], parameters); + for (int j = 0; j < numBondParameters; j++) + bondParamArray[i][j] = static_cast(parameters[j]); + } + + // Create custom functions for the tabulated functions. + + map functions; + for (int i = 0; i < force.getNumFunctions(); i++) + functions[force.getTabulatedFunctionName(i)] = createReferenceTabulatedFunction(force.getTabulatedFunction(i)); + + // Parse the expression and create the object used to calculate the interaction. + + map > distances; + map > angles; + map > dihedrals; + Lepton::ParsedExpression energyExpression = CustomCentroidBondForceImpl::prepareExpression(force, functions, distances, angles, dihedrals); + vector bondParameterNames; + for (int i = 0; i < numBondParameters; i++) + bondParameterNames.push_back(force.getPerBondParameterName(i)); + for (int i = 0; i < force.getNumGlobalParameters(); i++) + globalParameterNames.push_back(force.getGlobalParameterName(i)); + ixn = new ReferenceCustomCentroidBondIxn(force.getNumGroupsPerBond(), groupAtoms, normalizedWeights, bondGroups, energyExpression, bondParameterNames, distances, angles, dihedrals); + + // Delete the custom functions. + + for (map::iterator iter = functions.begin(); iter != functions.end(); iter++) + delete iter->second; +} + +double ReferenceCalcCustomCentroidBondForceKernel::execute(ContextImpl& context, bool includeForces, bool includeEnergy) { + vector& posData = extractPositions(context); + vector& forceData = extractForces(context); + RealOpenMM energy = 0; + map globalParameters; + for (int i = 0; i < (int) globalParameterNames.size(); i++) + globalParameters[globalParameterNames[i]] = context.getParameter(globalParameterNames[i]); + ixn->calculatePairIxn(posData, bondParamArray, globalParameters, forceData, includeEnergy ? &energy : NULL); + return energy; +} + +void ReferenceCalcCustomCentroidBondForceKernel::copyParametersToContext(ContextImpl& context, const CustomCentroidBondForce& force) { + if (numBonds != force.getNumBonds()) + throw OpenMMException("updateParametersInContext: The number of bonds has changed"); + + // Record the values. + + int numParameters = force.getNumPerBondParameters(); + const vector >& bondGroups = ixn->getBondGroups(); + vector groups; + vector params; + for (int i = 0; i < numBonds; ++i) { + force.getBondParameters(i, groups, params); + for (int j = 0; j < groups.size(); j++) + if (groups[j] != bondGroups[i][j]) + throw OpenMMException("updateParametersInContext: The set of groups in a bond has changed"); + for (int j = 0; j < numParameters; j++) + bondParamArray[i][j] = (RealOpenMM) params[j]; + } +} + ReferenceCalcCustomCompoundBondForceKernel::~ReferenceCalcCustomCompoundBondForceKernel() { disposeRealArray(bondParamArray, numBonds); if (ixn != NULL) @@ -1593,7 +1796,6 @@ void ReferenceCalcCustomCompoundBondForceKernel::initialize(const System& system // Build the arrays. numBonds = force.getNumBonds(); - numParticles = system.getNumParticles(); vector > bondParticles(numBonds); int numBondParameters = force.getNumPerBondParameters(); bondParamArray = allocateRealArray(numBonds, numBondParameters); @@ -1652,7 +1854,7 @@ void ReferenceCalcCustomCompoundBondForceKernel::copyParametersToContext(Context vector params; for (int i = 0; i < numBonds; ++i) { force.getBondParameters(i, particles, params); - for (int j = 0; j < numParticles; j++) + for (int j = 0; j < particles.size(); j++) if (particles[j] != bondAtoms[i][j]) throw OpenMMException("updateParametersInContext: The set of particles in a bond has changed"); for (int j = 0; j < numParameters; j++) diff --git a/platforms/reference/src/ReferencePlatform.cpp b/platforms/reference/src/ReferencePlatform.cpp index 190efec35efb320c2f4dd27a2690caa8ded702bb..ef007844d9d8c939632b884389212d7f6e753043 100644 --- a/platforms/reference/src/ReferencePlatform.cpp +++ b/platforms/reference/src/ReferencePlatform.cpp @@ -62,6 +62,7 @@ ReferencePlatform::ReferencePlatform() { registerKernelFactory(CalcCustomGBForceKernel::Name(), factory); registerKernelFactory(CalcCustomExternalForceKernel::Name(), factory); registerKernelFactory(CalcCustomHbondForceKernel::Name(), factory); + registerKernelFactory(CalcCustomCentroidBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomCompoundBondForceKernel::Name(), factory); registerKernelFactory(CalcCustomManyParticleForceKernel::Name(), factory); registerKernelFactory(IntegrateVerletStepKernel::Name(), factory); diff --git a/platforms/reference/src/SimTKReference/ReferenceConstraints.cpp b/platforms/reference/src/SimTKReference/ReferenceConstraints.cpp index d3b52bda86960df4547a5fb768a892c04893c171..59750e3986244636d540bdeae48eb1278d40287f 100644 --- a/platforms/reference/src/SimTKReference/ReferenceConstraints.cpp +++ b/platforms/reference/src/SimTKReference/ReferenceConstraints.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -98,14 +98,13 @@ ReferenceConstraints::ReferenceConstraints(const System& system) : ccma(NULL), s // Record the SETTLE clusters. vector isSettleAtom(numParticles, false); - int numSETTLE = settleClusters.size(); - if (numSETTLE > 0) { - vector atom1(numSETTLE); - vector atom2(numSETTLE); - vector atom3(numSETTLE); - vector distance1(numSETTLE); - vector distance2(numSETTLE); - for (int i = 0; i < numSETTLE; i++) { + if (settleClusters.size() > 0) { + vector atom1; + vector atom2; + vector atom3; + vector distance1; + vector distance2; + for (int i = 0; i < settleClusters.size(); i++) { int p1 = settleClusters[i]; int p2 = settleConstraints[p1].begin()->first; int p3 = (++settleConstraints[p1].begin())->first; @@ -114,35 +113,36 @@ ReferenceConstraints::ReferenceConstraints(const System& system) : ccma(NULL), s float dist23 = settleConstraints[p2].find(p3)->second; if (dist12 == dist13) { // p1 is the central atom - atom1[i] = p1; - atom2[i] = p2; - atom3[i] = p3; - distance1[i] = dist12; - distance2[i] = dist23; + atom1.push_back(p1); + atom2.push_back(p2); + atom3.push_back(p3); + distance1.push_back(dist12); + distance2.push_back(dist23); } else if (dist12 == dist23) { // p2 is the central atom - atom1[i] = p2; - atom2[i] = p1; - atom3[i] = p3; - distance1[i] = dist12; - distance2[i] = dist13; + atom1.push_back(p2); + atom2.push_back(p1); + atom3.push_back(p3); + distance1.push_back(dist12); + distance2.push_back(dist13); } else if (dist13 == dist23) { // p3 is the central atom - atom1[i] = p3; - atom2[i] = p1; - atom3[i] = p2; - distance1[i] = dist13; - distance2[i] = dist12; + atom1.push_back(p3); + atom2.push_back(p1); + atom3.push_back(p2); + distance1.push_back(dist13); + distance2.push_back(dist12); } else - throw OpenMMException("Two of the three distances constrained with SETTLE must be the same."); + continue; // We can't handle this with SETTLE isSettleAtom[p1] = true; isSettleAtom[p2] = true; isSettleAtom[p3] = true; } - settle = new ReferenceSETTLEAlgorithm(atom1, atom2, atom3, distance1, distance2, masses); + if (atom1.size() > 0) + settle = new ReferenceSETTLEAlgorithm(atom1, atom2, atom3, distance1, distance2, masses); } // All other constraints are handled with CCMA. diff --git a/platforms/reference/src/SimTKReference/ReferenceCustomCentroidBondIxn.cpp b/platforms/reference/src/SimTKReference/ReferenceCustomCentroidBondIxn.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5588c3f597fb6d92895f14d5d6c1893ac355eade --- /dev/null +++ b/platforms/reference/src/SimTKReference/ReferenceCustomCentroidBondIxn.cpp @@ -0,0 +1,232 @@ + +/* Portions copyright (c) 2009-2015 Stanford University and Simbios. + * Contributors: Peter Eastman + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject + * to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include + +#include "SimTKOpenMMUtilities.h" +#include "ReferenceForce.h" +#include "ReferenceCustomCentroidBondIxn.h" + +using std::map; +using std::pair; +using std::string; +using std::stringstream; +using std::vector; +using namespace OpenMM; + +ReferenceCustomCentroidBondIxn::ReferenceCustomCentroidBondIxn(int numGroupsPerBond, const vector >& groupAtoms, + const vector >& normalizedWeights, const vector >& bondGroups, + const Lepton::ParsedExpression& energyExpression, const vector& bondParameterNames, + const map >& distances, const map >& angles, const map >& dihedrals) : + groupAtoms(groupAtoms), normalizedWeights(normalizedWeights), bondGroups(bondGroups), energyExpression(energyExpression.createProgram()), bondParamNames(bondParameterNames) { + for (int i = 0; i < numGroupsPerBond; i++) { + stringstream xname, yname, zname; + xname << 'x' << (i+1); + yname << 'y' << (i+1); + zname << 'z' << (i+1); + positionTerms.push_back(ReferenceCustomCentroidBondIxn::PositionTermInfo(xname.str(), i, 0, energyExpression.differentiate(xname.str()).optimize().createProgram())); + positionTerms.push_back(ReferenceCustomCentroidBondIxn::PositionTermInfo(yname.str(), i, 1, energyExpression.differentiate(yname.str()).optimize().createProgram())); + positionTerms.push_back(ReferenceCustomCentroidBondIxn::PositionTermInfo(zname.str(), i, 2, energyExpression.differentiate(zname.str()).optimize().createProgram())); + } + for (map >::const_iterator iter = distances.begin(); iter != distances.end(); ++iter) + distanceTerms.push_back(ReferenceCustomCentroidBondIxn::DistanceTermInfo(iter->first, iter->second, energyExpression.differentiate(iter->first).optimize().createProgram())); + for (map >::const_iterator iter = angles.begin(); iter != angles.end(); ++iter) + angleTerms.push_back(ReferenceCustomCentroidBondIxn::AngleTermInfo(iter->first, iter->second, energyExpression.differentiate(iter->first).optimize().createProgram())); + for (map >::const_iterator iter = dihedrals.begin(); iter != dihedrals.end(); ++iter) + dihedralTerms.push_back(ReferenceCustomCentroidBondIxn::DihedralTermInfo(iter->first, iter->second, energyExpression.differentiate(iter->first).optimize().createProgram())); +} + +ReferenceCustomCentroidBondIxn::~ReferenceCustomCentroidBondIxn() { +} + +void ReferenceCustomCentroidBondIxn::calculatePairIxn(vector& atomCoordinates, RealOpenMM** bondParameters, + const map& globalParameters, vector& forces, + RealOpenMM* totalEnergy) const { + + // First compute the center of each group. + + int numGroups = groupAtoms.size(); + vector groupCenters(numGroups); + for (int group = 0; group < numGroups; group++) { + for (int i = 0; i < groupAtoms[group].size(); i++) + groupCenters[group] += atomCoordinates[groupAtoms[group][i]]*normalizedWeights[group][i]; + } + + // Compute the forces on groups. + + map variables = globalParameters; + vector groupForces(numGroups); + int numBonds = bondGroups.size(); + for (int bond = 0; bond < numBonds; bond++) { + for (int j = 0; j < (int) bondParamNames.size(); j++) + variables[bondParamNames[j]] = bondParameters[bond][j]; + calculateOneIxn(bond, groupCenters, variables, groupForces, totalEnergy); + } + + // Apply the forces to the individual atoms. + + for (int group = 0; group < numGroups; group++) { + for (int i = 0; i < groupAtoms[group].size(); i++) + forces[groupAtoms[group][i]] += groupForces[group]*normalizedWeights[group][i]; + } +} + +void ReferenceCustomCentroidBondIxn::calculateOneIxn(int bond, vector& groupCenters, + map& variables, vector& forces, RealOpenMM* totalEnergy) const { + + // --------------------------------------------------------------------------------------- + + static const std::string methodName = "\nReferenceCustomCentroidBondIxn::calculateOneIxn"; + + // --------------------------------------------------------------------------------------- + + // Compute all of the variables the energy can depend on. + + const vector& groups = bondGroups[bond]; + for (int i = 0; i < (int) positionTerms.size(); i++) { + const PositionTermInfo& term = positionTerms[i]; + variables[term.name] = groupCenters[groups[term.group]][term.component]; + } + for (int i = 0; i < (int) distanceTerms.size(); i++) { + const DistanceTermInfo& term = distanceTerms[i]; + computeDelta(groups[term.g1], groups[term.g2], term.delta, groupCenters); + variables[term.name] = term.delta[ReferenceForce::RIndex]; + } + for (int i = 0; i < (int) angleTerms.size(); i++) { + const AngleTermInfo& term = angleTerms[i]; + computeDelta(groups[term.g1], groups[term.g2], term.delta1, groupCenters); + computeDelta(groups[term.g3], groups[term.g2], term.delta2, groupCenters); + variables[term.name] = computeAngle(term.delta1, term.delta2); + } + for (int i = 0; i < (int) dihedralTerms.size(); i++) { + const DihedralTermInfo& term = dihedralTerms[i]; + computeDelta(groups[term.g2], groups[term.g1], term.delta1, groupCenters); + computeDelta(groups[term.g2], groups[term.g3], term.delta2, groupCenters); + computeDelta(groups[term.g4], groups[term.g3], term.delta3, groupCenters); + RealOpenMM dotDihedral, signOfDihedral; + RealOpenMM* crossProduct[] = {term.cross1, term.cross2}; + variables[term.name] = getDihedralAngleBetweenThreeVectors(term.delta1, term.delta2, term.delta3, crossProduct, &dotDihedral, term.delta1, &signOfDihedral, 1); + } + + // Apply forces based on individual particle coordinates. + + for (int i = 0; i < (int) positionTerms.size(); i++) { + const PositionTermInfo& term = positionTerms[i]; + forces[groups[term.group]][term.component] -= term.forceExpression.evaluate(variables); + } + + // Apply forces based on distances. + + for (int i = 0; i < (int) distanceTerms.size(); i++) { + const DistanceTermInfo& term = distanceTerms[i]; + RealOpenMM dEdR = (RealOpenMM) (term.forceExpression.evaluate(variables)/(term.delta[ReferenceForce::RIndex])); + for (int i = 0; i < 3; i++) { + RealOpenMM force = -dEdR*term.delta[i]; + forces[groups[term.g1]][i] -= force; + forces[groups[term.g2]][i] += force; + } + } + + // Apply forces based on angles. + + for (int i = 0; i < (int) angleTerms.size(); i++) { + const AngleTermInfo& term = angleTerms[i]; + RealOpenMM dEdTheta = (RealOpenMM) term.forceExpression.evaluate(variables); + RealOpenMM thetaCross[ReferenceForce::LastDeltaRIndex]; + SimTKOpenMMUtilities::crossProductVector3(term.delta1, term.delta2, thetaCross); + RealOpenMM lengthThetaCross = SQRT(DOT3(thetaCross, thetaCross)); + if (lengthThetaCross < 1.0e-06) + lengthThetaCross = (RealOpenMM) 1.0e-06; + RealOpenMM termA = dEdTheta/(term.delta1[ReferenceForce::R2Index]*lengthThetaCross); + RealOpenMM termC = -dEdTheta/(term.delta2[ReferenceForce::R2Index]*lengthThetaCross); + RealOpenMM deltaCrossP[3][3]; + SimTKOpenMMUtilities::crossProductVector3(term.delta1, thetaCross, deltaCrossP[0]); + SimTKOpenMMUtilities::crossProductVector3(term.delta2, thetaCross, deltaCrossP[2]); + for (int i = 0; i < 3; i++) { + deltaCrossP[0][i] *= termA; + deltaCrossP[2][i] *= termC; + deltaCrossP[1][i] = -(deltaCrossP[0][i]+deltaCrossP[2][i]); + } + for (int i = 0; i < 3; i++) { + forces[groups[term.g1]][i] += deltaCrossP[0][i]; + forces[groups[term.g2]][i] += deltaCrossP[1][i]; + forces[groups[term.g3]][i] += deltaCrossP[2][i]; + } + } + + // Apply forces based on dihedrals. + + for (int i = 0; i < (int) dihedralTerms.size(); i++) { + const DihedralTermInfo& term = dihedralTerms[i]; + RealOpenMM dEdTheta = (RealOpenMM) term.forceExpression.evaluate(variables); + RealOpenMM internalF[4][3]; + RealOpenMM forceFactors[4]; + RealOpenMM normCross1 = DOT3(term.cross1, term.cross1); + RealOpenMM normBC = term.delta2[ReferenceForce::RIndex]; + forceFactors[0] = (-dEdTheta*normBC)/normCross1; + RealOpenMM normCross2 = DOT3(term.cross2, term.cross2); + forceFactors[3] = (dEdTheta*normBC)/normCross2; + forceFactors[1] = DOT3(term.delta1, term.delta2); + forceFactors[1] /= term.delta2[ReferenceForce::R2Index]; + forceFactors[2] = DOT3(term.delta3, term.delta2); + forceFactors[2] /= term.delta2[ReferenceForce::R2Index]; + for (int i = 0; i < 3; i++) { + internalF[0][i] = forceFactors[0]*term.cross1[i]; + internalF[3][i] = forceFactors[3]*term.cross2[i]; + RealOpenMM s = forceFactors[1]*internalF[0][i] - forceFactors[2]*internalF[3][i]; + internalF[1][i] = internalF[0][i] - s; + internalF[2][i] = internalF[3][i] + s; + } + for (int i = 0; i < 3; i++) { + forces[groups[term.g1]][i] += internalF[0][i]; + forces[groups[term.g2]][i] -= internalF[1][i]; + forces[groups[term.g3]][i] -= internalF[2][i]; + forces[groups[term.g4]][i] += internalF[3][i]; + } + } + + // Add the energy + + if (totalEnergy) + *totalEnergy += (RealOpenMM) energyExpression.evaluate(variables); +} + +void ReferenceCustomCentroidBondIxn::computeDelta(int group1, int group2, RealOpenMM* delta, vector& groupCenters) const { + ReferenceForce::getDeltaR(groupCenters[group1], groupCenters[group2], delta); +} + +RealOpenMM ReferenceCustomCentroidBondIxn::computeAngle(RealOpenMM* vec1, RealOpenMM* vec2) { + RealOpenMM dot = DOT3(vec1, vec2); + RealOpenMM cosine = dot/SQRT((vec1[ReferenceForce::R2Index]*vec2[ReferenceForce::R2Index])); + RealOpenMM angle; + if (cosine >= 1) + angle = 0; + else if (cosine <= -1) + angle = PI_M; + else + angle = ACOS(cosine); + return angle; +} diff --git a/platforms/reference/src/SimTKReference/ReferenceStochasticDynamics.cpp b/platforms/reference/src/SimTKReference/ReferenceStochasticDynamics.cpp index eb2637ff27f97f04fed708a03aae4a873578886e..e9033a51efd83bdaf6f3ff4026a99699829e167c 100644 --- a/platforms/reference/src/SimTKReference/ReferenceStochasticDynamics.cpp +++ b/platforms/reference/src/SimTKReference/ReferenceStochasticDynamics.cpp @@ -163,11 +163,21 @@ void ReferenceStochasticDynamics::updatePart2(int numberOfAtoms, vector for (int ii = 0; ii < numberOfAtoms; ii++) { if (inverseMasses[ii] != 0.0) - for (int jj = 0; jj < 3; jj++) - xPrime[ii][jj] = atomCoordinates[ii][jj]+getDeltaT()*velocities[ii][jj]; + xPrime[ii] = atomCoordinates[ii]+velocities[ii]*getDeltaT(); } } +void ReferenceStochasticDynamics::updatePart3(int numberOfAtoms, vector& atomCoordinates, + vector& velocities, vector& inverseMasses, + vector& xPrime) { + RealOpenMM invStepSize = 1.0/getDeltaT(); + for (int i = 0; i < numberOfAtoms; ++i) + if (inverseMasses[i] != 0) { + velocities[i] = (xPrime[i]-atomCoordinates[i])*invStepSize; + atomCoordinates[i] = xPrime[i]; + } +} + /**--------------------------------------------------------------------------------------- Update -- driver routine for performing stochastic dynamics update of coordinates @@ -221,13 +231,7 @@ void ReferenceStochasticDynamics::update(const OpenMM::System& system, vector atomCoordinates - RealOpenMM invStepSize = 1.0/getDeltaT(); - for (int i = 0; i < numberOfAtoms; ++i) - if (masses[i] != zero) - for (int j = 0; j < 3; ++j) { - velocities[i][j] = invStepSize*(xPrime[i][j]-atomCoordinates[i][j]); - atomCoordinates[i][j] = xPrime[i][j]; - } + updatePart3(numberOfAtoms, atomCoordinates, velocities, inverseMasses, xPrime); ReferenceVirtualSites::computePositions(system, atomCoordinates); incrementTimeStep(); diff --git a/platforms/reference/tests/CMakeLists.txt b/platforms/reference/tests/CMakeLists.txt index 2f5b027a8805feabcb3c6cb35470813402e92dc2..cac562167859e7b29b0807212496ce8bd5548f23 100644 --- a/platforms/reference/tests/CMakeLists.txt +++ b/platforms/reference/tests/CMakeLists.txt @@ -15,7 +15,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ELSE (OPENMM_BUILD_SHARED_LIB) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${STATIC_TARGET}) ENDIF (OPENMM_BUILD_SHARED_LIB) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/platforms/reference/tests/ReferenceTests.h b/platforms/reference/tests/ReferenceTests.h new file mode 100644 index 0000000000000000000000000000000000000000..d128ad5573a50e97055e601b9a06ea01f5904330 --- /dev/null +++ b/platforms/reference/tests/ReferenceTests.h @@ -0,0 +1,40 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "ReferencePlatform.h" + +OpenMM::ReferencePlatform platform; + +void initializeTests(int argc, char* argv[]) { +} diff --git a/platforms/reference/tests/TestReferenceAndersenThermostat.cpp b/platforms/reference/tests/TestReferenceAndersenThermostat.cpp index 5e61024ce6fd97aa938c4e94673b3bc3e7694c3d..39a79bb6e64b22f0f2989bf83721d8ce7f3dee0c 100644 --- a/platforms/reference/tests/TestReferenceAndersenThermostat.cpp +++ b/platforms/reference/tests/TestReferenceAndersenThermostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,190 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of AndersenThermostat. - */ +#include "ReferenceTests.h" +#include "TestAndersenThermostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 5000; - System system; - VerletIntegrator integrator(0.003); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - ASSERT(!thermostat->usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 15000; - System system; - VerletIntegrator integrator(0.004); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - system.addConstraint(0, 1, 1); - system.addConstraint(1, 2, 1); - system.addConstraint(2, 3, 1); - system.addConstraint(3, 0, 1); - system.addConstraint(4, 5, 1); - system.addConstraint(5, 6, 1); - system.addConstraint(6, 7, 1); - system.addConstraint(7, 4, 1); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(1, 1, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(1, 0, 1); - positions[5] = Vec3(1, 1, 1); - positions[6] = Vec3(0, 1, 1); - positions[7] = Vec3(0, 0, 1); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= numSteps; - double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - thermostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - thermostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main() { - try { - testTemperature(); - testConstraints(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceBrownianIntegrator.cpp b/platforms/reference/tests/TestReferenceBrownianIntegrator.cpp index c50e9ffc22246ae76bfe44207bc371fe099206c2..71d19d0f4768e89812282a20ae1f721dcfa52a48 100644 --- a/platforms/reference/tests/TestReferenceBrownianIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceBrownianIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,241 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of BrownianIntegrator. - */ +#include "ReferenceTests.h" +#include "TestBrownianIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/BrownianIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - double dt = 0.01; - BrownianIntegrator integrator(0, 0.1, dt); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply an overdamped harmonic oscillator, so compare it to the analytical solution. - - double rate = 2*1.0/(0.1*2.0); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-rate*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - if (i > 0) { - double expectedSpeed = -0.5*rate*std::exp(-rate*(time-0.5*dt)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.11); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.11); - } - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const int numBonds = numParticles-1; - const double temp = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - } - for (int i = 0; i < numBonds; ++i) - forceField->addBond(i, i+1, 1.0, 5.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3(i, 0, 0); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double pe = 0.0; - const int steps = 50000; - for (int i = 0; i < steps; ++i) { - State state = context.getState(State::Energy); - pe += state.getPotentialEnergy(); - integrator.step(1); - } - pe /= steps; - double expected = 0.5*numBonds*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, pe, 0.1*expected); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - BrownianIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - BrownianIntegrator integrator(temp, 2.0, 0.001); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main() { - try { - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceCMAPTorsionForce.cpp b/platforms/reference/tests/TestReferenceCMAPTorsionForce.cpp index f0e7223658ea12ffe0db73e75c23063501bcf6cd..b84f408b4bc7b7b368322abec4a4ff8d4ecced17 100644 --- a/platforms/reference/tests/TestReferenceCMAPTorsionForce.cpp +++ b/platforms/reference/tests/TestReferenceCMAPTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,152 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CMAPTorsionForce. - */ +#include "ReferenceTests.h" +#include "TestCMAPTorsionForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CMAPTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testCMAPTorsions() { - const int mapSize = 36; - - // Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion - // that approximates the same force. - - System system1; - for (int i = 0; i < 5; i++) - system1.addParticle(1.0); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 2, M_PI/4, 1.5); - periodic->addTorsion(1, 2, 3, 4, 3, M_PI/3, 2.0); - system1.addForce(periodic); - ASSERT(!periodic->usesPeriodicBoundaryConditions()); - ASSERT(!system1.usesPeriodicBoundaryConditions()); - System system2; - for (int i = 0; i < 5; i++) - system2.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = 1.5*(1+cos(2*angle1-M_PI/4)); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 2.0*(1+cos(3*angle2-M_PI/3)); - mapEnergy[i+j*mapSize] = energy1+energy2; - } - } - cmap->addMap(mapSize, mapEnergy); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system2.addForce(cmap); - ASSERT(!cmap->usesPeriodicBoundaryConditions()); - ASSERT(!system2.usesPeriodicBoundaryConditions()); - - // Set the atoms in various positions, and verify that both systems give equal forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(system1, integrator1, platform); - Context c2(system2, integrator2, platform); - for (int i = 0; i < 50; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < system1.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 0.05); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), 1e-3); - } -} - -void testChangingParameters() { - // Create a system with two maps and one torsion. - - const int mapSize = 8; - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CMAPTorsionForce* cmap = new CMAPTorsionForce(); - vector mapEnergy1(mapSize*mapSize); - vector mapEnergy2(mapSize*mapSize); - for (int i = 0; i < mapSize; i++) { - double angle1 = i*2*M_PI/mapSize; - double energy1 = cos(angle1); - for (int j = 0; j < mapSize; j++) { - double angle2 = j*2*M_PI/mapSize; - double energy2 = 10*sin(angle2); - mapEnergy1[i+j*mapSize] = energy1+energy2; - mapEnergy2[i+j*mapSize] = energy1-energy2; - } - } - cmap->addMap(mapSize, mapEnergy1); - cmap->addMap(mapSize, mapEnergy2); - cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); - system.addForce(cmap); - - // Set particle positions so angle1=0 and angle2=PI/4. - - vector positions(5); - positions[0] = Vec3(0, 0, 1); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 1); - positions[4] = Vec3(0.5, -0.5, 1); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Check that the energy is correct. - - double energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(1+10*sin(M_PI/4), energy, 1e-5); - - // Modify the parameters. - - cmap->setTorsionParameters(0, 1, 0, 1, 2, 3, 1, 2, 3, 4); - for (int i = 0; i < mapSize*mapSize; i++) - mapEnergy2[i] *= 2.0; - cmap->setMapParameters(1, mapSize, mapEnergy2); - cmap->updateParametersInContext(context); - - // See if the results are correct. - - energy = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(2-20*sin(M_PI/4), energy, 1e-5); +void runPlatformTests() { } - -int main() { - try { - testCMAPTorsions(); - testChangingParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceCMMotionRemover.cpp b/platforms/reference/tests/TestReferenceCMMotionRemover.cpp index 7e8403277da5b16230aeb8f8f182f0d3b44a3fab..200223e8703c47be0579edd8e71e9749526cb973 100644 --- a/platforms/reference/tests/TestReferenceCMMotionRemover.cpp +++ b/platforms/reference/tests/TestReferenceCMMotionRemover.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,89 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of AndersenThermostat. - */ +#include "ReferenceTests.h" +#include "TestCMMotionRemover.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CMMotionRemover.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -Vec3 calcCM(const vector& values, System& system) { - Vec3 cm; - for (int j = 0; j < system.getNumParticles(); ++j) { - cm[0] += values[j][0]*system.getParticleMass(j); - cm[1] += values[j][1]*system.getParticleMass(j); - cm[2] += values[j][2]*system.getParticleMass(j); - } - return cm; -} - -void testMotionRemoval() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - VerletIntegrator integrator(0.01); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(2, 3, 2.0, 0.5); - system.addForce(bonds); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i+1); - nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(nonbonded); - CMMotionRemover* remover = new CMMotionRemover(); - system.addForce(remover); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Now run it for a while and see if the center of mass remains fixed. - - Vec3 cmPos = calcCM(context.getState(State::Positions).getPositions(), system); - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Velocities); - Vec3 pos = calcCM(state.getPositions(), system); - ASSERT_EQUAL_VEC(cmPos, pos, 1e-2); - Vec3 vel = calcCM(state.getVelocities(), system); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), vel, 1e-2); - } -} - -int main() { - try { - testMotionRemoval(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceCheckpoints.cpp b/platforms/reference/tests/TestReferenceCheckpoints.cpp index 4356494b286ef61413c00bb3614e98f18466af8b..b2c2d5a08ecf3a74599e1ce311a18297d9212084 100644 --- a/platforms/reference/tests/TestReferenceCheckpoints.cpp +++ b/platforms/reference/tests/TestReferenceCheckpoints.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2013 Stanford University and the Authors. * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,49 +29,12 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests creating and loading checkpoints with the reference platform. - */ - -#include "ReferencePlatform.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/Context.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void compareStates(State& s1, State& s2) { - ASSERT_EQUAL_TOL(s1.getTime(), s2.getTime(), TOL); - int numParticles = s1.getPositions().size(); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s2.getVelocities()[i], TOL); - Vec3 a1, b1, c1, a2, b2, c2; - s1.getPeriodicBoxVectors(a1, b1, c1); - s2.getPeriodicBoxVectors(a2, b2, c2); - ASSERT_EQUAL_VEC(a1, a2, TOL); - ASSERT_EQUAL_VEC(b1, b2, TOL); - ASSERT_EQUAL_VEC(c1, c2, TOL); - for (map::const_iterator iter = s1.getParameters().begin(); iter != s1.getParameters().end(); ++iter) - ASSERT_EQUAL(iter->second, (*s2.getParameters().find(iter->first)).second); - } -} +#include "ReferenceTests.h" +#include "TestCheckpoints.h" void testCheckpoint() { - const int numParticles = 10; - const double boxSize = 3.0; + const int numParticles = 100; + const double boxSize = 5.0; const double temperature = 200.0; System system; system.addForce(new AndersenThermostat(0.0, 100.0)); @@ -84,7 +47,16 @@ void testCheckpoint() { for (int i = 0; i < numParticles; i++) { system.addParticle(1.0); nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + bool clash; + do { + clash = false; + positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + for (int j = 0; j < i; j++) { + Vec3 delta = positions[i]-positions[j]; + if (sqrt(delta.dot(delta)) < 0.1) + clash = true; + } + } while (clash); } VerletIntegrator integrator(0.001); Context context(system, integrator, platform); @@ -122,69 +94,6 @@ void testCheckpoint() { compareStates(s2, s4); } -void testSetState() { - const int numParticles = 10; - const double boxSize = 3.0; - const double temperature = 200.0; - System system; - system.addForce(new AndersenThermostat(0.0, 100.0)); - NonbondedForce* nonbonded = new NonbondedForce(); - system.addForce(nonbonded); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - } - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature); - - // Run for a little while. - - integrator.step(100); - - // Record the current state. - - State s1 = context.getState(State::Positions | State::Velocities | State::Parameters); - - // Continue the simulation for a few more steps and record a partial state. - - integrator.step(10); - State s2 = context.getState(State::Positions); - - // Restore the original state and see if everything gets restored correctly. - - context.setPeriodicBoxVectors(Vec3(2*boxSize, 0, 0), Vec3(0, 2*boxSize, 0), Vec3(0, 0, 2*boxSize)); - context.setParameter(AndersenThermostat::Temperature(), temperature+10); - context.setState(s1); - State s3 = context.getState(State::Positions | State::Velocities | State::Parameters); - compareStates(s1, s3); - - // Set the partial state and see if the correct things were set. - - context.setState(s2); - State s4 = context.getState(State::Positions | State::Velocities | State::Parameters); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(s2.getPositions()[i], s4.getPositions()[i], TOL); - ASSERT_EQUAL_VEC(s1.getVelocities()[i], s4.getVelocities()[i], TOL); - } -} - -int main() { - try { - testCheckpoint(); - testSetState(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { + testCheckpoint(); } diff --git a/platforms/reference/tests/TestReferenceCustomAngleForce.cpp b/platforms/reference/tests/TestReferenceCustomAngleForce.cpp index b892397e6408807e21cf99b08a34214ffa10656c..98eb5e2bb8128f0a1682488801a2a28fe34f4590 100644 --- a/platforms/reference/tests/TestReferenceCustomAngleForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomAngleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,122 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomAngleForce. - */ -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomAngleForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include +#include "ReferenceTests.h" +#include "TestCustomAngleForce.h" -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testAngles() { - // Create a system using a CustomAngleForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomAngleForce* custom = new CustomAngleForce("scale*k*(theta-theta0)^2"); - custom->addPerAngleParameter("theta0"); - custom->addPerAngleParameter("k"); - custom->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - custom->addAngle(0, 1, 2, parameters); - parameters[0] = 2.0; - parameters[1] = 0.5; - custom->addAngle(1, 2, 3, parameters); - customSystem.addForce(custom); - ASSERT(!custom->usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - - // Create an identical system using a HarmonicAngleForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - HarmonicAngleForce* harmonic = new HarmonicAngleForce(); - harmonic->addAngle(0, 1, 2, 1.5, 0.8); - harmonic->addAngle(1, 2, 3, 2.0, 0.5); - harmonicSystem.addForce(harmonic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(4); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - custom->setAngleParameters(0, 0, 1, 2, parameters); - parameters[0] = 2.1; - parameters[1] = 0.6; - custom->setAngleParameters(1, 1, 2, 3, parameters); - custom->updateParametersInContext(c1); - harmonic->setAngleParameters(0, 0, 1, 2, 1.6, 0.9); - harmonic->setAngleParameters(1, 1, 2, 3, 2.1, 0.6); - harmonic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -int main() { - try { - testAngles(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } - - diff --git a/platforms/reference/tests/TestReferenceCustomBondForce.cpp b/platforms/reference/tests/TestReferenceCustomBondForce.cpp index a50bc3e01981c9776269f873aaef3e6df1aa7952..b149d62351624f5fc31ba9a028e4b9bbfafd4a77 100644 --- a/platforms/reference/tests/TestReferenceCustomBondForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,90 +29,9 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomBondForce. - */ -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include +#include "ReferenceTests.h" +#include "TestCustomBondForce.h" -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomBondForce* forceField = new CustomBondForce("scale*k*(r-r0)^2"); - forceField->addPerBondParameter("r0"); - forceField->addPerBondParameter("k"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 0.8; - forceField->addBond(0, 1, parameters); - parameters[0] = 1.2; - parameters[1] = 0.7; - forceField->addBond(1, 2, parameters); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 0.9; - forceField->setBondParameters(0, 0, 1, parameters); - parameters[0] = 1.3; - parameters[1] = 0.8; - forceField->setBondParameters(1, 1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } +void runPlatformTests() { } - -int main() { - try { - testBonds(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceCustomCentroidBondForce.cpp b/platforms/reference/tests/TestReferenceCustomCentroidBondForce.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ea7fb8d73a966404362ba90fbf4bd6ad3bbd4337 --- /dev/null +++ b/platforms/reference/tests/TestReferenceCustomCentroidBondForce.cpp @@ -0,0 +1,36 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "ReferenceTests.h" +#include "TestCustomCentroidBondForce.h" + +void runPlatformTests() { +} diff --git a/platforms/reference/tests/TestReferenceCustomCompoundBondForce.cpp b/platforms/reference/tests/TestReferenceCustomCompoundBondForce.cpp index 00c109c754cd1322be9856c1e7248b0a0dc1645b..d93d9b619d055fe189d2004cee8d536943dce594 100644 --- a/platforms/reference/tests/TestReferenceCustomCompoundBondForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomCompoundBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,306 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomCompoundBondForce. - */ +#include "ReferenceTests.h" +#include "TestCustomCompoundBondForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testBond() { - // Create a system using a CustomCompoundBondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(4, "0.5*kb*((distance(p1,p2)-b0)^2+(distance(p2,p3)-b0)^2)+0.5*ka*(angle(p2,p3,p4)-a0)^2+kt*(1+cos(dihedral(p1,p2,p3,p4)-t0))"); - custom->addPerBondParameter("kb"); - custom->addPerBondParameter("ka"); - custom->addPerBondParameter("kt"); - custom->addPerBondParameter("b0"); - custom->addPerBondParameter("a0"); - custom->addPerBondParameter("t0"); - vector particles(4); - particles[0] = 0; - particles[1] = 1; - particles[2] = 3; - particles[3] = 2; - vector parameters(6); - parameters[0] = 1.5; - parameters[1] = 0.8; - parameters[2] = 0.6; - parameters[3] = 1.1; - parameters[4] = 2.9; - parameters[5] = 1.3; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - ASSERT(!custom->usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - - // Create an identical system using standard forces. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.1, 1.5); - bonds->addBond(1, 3, 1.1, 1.5); - standardSystem.addForce(bonds); - HarmonicAngleForce* angles = new HarmonicAngleForce(); - angles->addAngle(1, 3, 2, 2.9, 0.8); - standardSystem.addForce(angles); - PeriodicTorsionForce* torsions = new PeriodicTorsionForce(); - torsions->addTorsion(0, 1, 3, 2, 1, 1.3, 0.6); - standardSystem.addForce(torsions); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - vector positions(4); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[3] = 1.3; - custom->setBondParameters(0, particles, parameters); - custom->updateParametersInContext(c1); - bonds->setBondParameters(0, 0, 1, 1.3, 1.6); - bonds->setBondParameters(1, 1, 3, 1.3, 1.6); - bonds->updateParametersInContext(c2); - { - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } -} - -void testPositionDependence() { - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(2, "scale1*distance(p1,p2)+scale2*x1+2*y2"); - custom->addGlobalParameter("scale1", 0.3); - custom->addGlobalParameter("scale2", 0.2); - vector particles(2); - particles[0] = 1; - particles[1] = 0; - vector parameters; - custom->addBond(particles, parameters); - customSystem.addForce(custom); - vector positions(2); - positions[0] = Vec3(1.5, 1, 0); - positions[1] = Vec3(0.5, 1, 0); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); - ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5); +void runPlatformTests() { } - -void testContinuous2DFunction() { - const int xsize = 10; - const int ysize = 11; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[0] = Vec3(x, y, 1.5); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.4; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.9; - const double zmin = 0.2; - const double zmax = 1.3; - System system; - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1,z1)+1"); - vector particles(1, 0); - forceField->addBond(particles, vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(1); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[0] = Vec3(x, y, z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - Vec3 force(0, 0, 0); - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1; - force[0] = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - force[1] = 0.3*sin(0.25*x)*sin(0.33*y)*(1.0+z); - force[2] = -sin(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(force, forces[0], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testMultipleBonds() { - // Two compound bonds using Urey-Bradley example from API doc - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomCompoundBondForce* custom = new CustomCompoundBondForce(3, - "0.5*(kangle*(angle(p1,p2,p3)-theta0)^2+kbond*(distance(p1,p3)-r0)^2)"); - custom->addPerBondParameter("kangle"); - custom->addPerBondParameter("kbond"); - custom->addPerBondParameter("theta0"); - custom->addPerBondParameter("r0"); - vector parameters(4); - parameters[0] = 1.0; - parameters[1] = 1.0; - parameters[2] = 2 * M_PI / 3; - parameters[3] = sqrt(3.0) / 2; - vector particles0(3); - particles0[0] = 0; - particles0[1] = 1; - particles0[2] = 2; - vector particles1(3); - particles1[0] = 1; - particles1[1] = 2; - particles1[2] = 3; - custom->addBond(particles0, parameters); - custom->addBond(particles1, parameters); - customSystem.addForce(custom); - - vector positions(4); - positions[0] = Vec3(0, 0.5, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(0.5, 0, 0); - positions[3] = Vec3(0.6, 0, 0.4); - VerletIntegrator integrator(0.01); - Context context(customSystem, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(0.199, state.getPotentialEnergy(), 1e-3); - vector forces(state.getForces()); - ASSERT_EQUAL_VEC(Vec3(-1.160, 0.112, 0.0), forces[0], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.927, 1.047, -0.638), forces[1], 1e-3); - ASSERT_EQUAL_VEC(Vec3(-0.543, -1.160, 0.721), forces[2], 1e-3); - ASSERT_EQUAL_VEC(Vec3(0.776, 0.0, -0.084), forces[3], 1e-3); -} - -int main() { - try { - testBond(); - testPositionDependence(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testMultipleBonds(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - - diff --git a/platforms/reference/tests/TestReferenceCustomExternalForce.cpp b/platforms/reference/tests/TestReferenceCustomExternalForce.cpp index e9ae2ff391cb58a5ed1636e4754739d9afaa050e..ab5f703141d3120ef8f5dd807c3b468df6e4c8f8 100644 --- a/platforms/reference/tests/TestReferenceCustomExternalForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomExternalForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,88 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomExternalForce. - */ +#include "ReferenceTests.h" +#include "TestCustomExternalForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testForce() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomExternalForce* forceField = new CustomExternalForce("scale*(x+yscale*(y-y0)^2)"); - forceField->addPerParticleParameter("y0"); - forceField->addPerParticleParameter("yscale"); - forceField->addGlobalParameter("scale", 0.5); - vector parameters(2); - parameters[0] = 0.5; - parameters[1] = 2.0; - forceField->addParticle(0, parameters); - parameters[0] = 1.5; - parameters[1] = 3.0; - forceField->addParticle(2, parameters); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 1); - positions[2] = Vec3(1, 0, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.0*2.0*1.5, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.0*1.5*1.5), state.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters[0] = 1.4; - parameters[1] = 3.5; - forceField->setParticleParameters(1, 2, parameters); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.5*2.0*1.4, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.5*1.4*1.4), state.getPotentialEnergy(), TOL); - } +void runPlatformTests() { } - -int main() { - try { - testForce(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - - diff --git a/platforms/reference/tests/TestReferenceCustomGBForce.cpp b/platforms/reference/tests/TestReferenceCustomGBForce.cpp index 1997566b3f3dff63a4311d9183453dc78c4ca885..2f4612c2033e04196a2e8743bc3d2f54631e1f42 100644 --- a/platforms/reference/tests/TestReferenceCustomGBForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomGBForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,882 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of CustomGBForce. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomGBForce.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/GBVIForce.h" -#include "openmm/OpenMMException.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testOBC(GBSAOBCForce::NonbondedMethod obcMethod, CustomGBForce::NonbondedMethod customMethod) { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - const double cutoff = 2.0; - - // Create two systems: one with a GBSAOBCForce, and one using a CustomGBForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - GBSAOBCForce* obc = new GBSAOBCForce(); - CustomGBForce* custom = new CustomGBForce(); - obc->setCutoffDistance(cutoff); - custom->setCutoffDistance(cutoff); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("solventDielectric", obc->getSolventDielectric()); - custom->addGlobalParameter("soluteDielectric", obc->getSoluteDielectric()); - custom->addComputedValue("I", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=I*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935485*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - string invCutoffString = ""; - if (obcMethod != GBSAOBCForce::NoCutoff) { - stringstream s; - s<<(1.0/cutoff); - invCutoffString = s.str(); - } - custom->addEnergyTerm("138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2*("+invCutoffString+"-1/f);" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - obc->addParticle(1.0, 0.2, 0.5); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.5); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - obc->addParticle(1.0, 0.2, 0.8); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - obc->addParticle(-1.0, 0.1, 0.8); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - obc->setNonbondedMethod(obcMethod); - custom->setNonbondedMethod(customMethod); - standardSystem.addForce(obc); - customSystem.addForce(custom); - if (customMethod == CustomGBForce::CutoffPeriodic) { - ASSERT(custom->usesPeriodicBoundaryConditions()); - ASSERT(obc->usesPeriodicBoundaryConditions()); - ASSERT(standardSystem.usesPeriodicBoundaryConditions()); - ASSERT(customSystem.usesPeriodicBoundaryConditions()); - } - else { - ASSERT(!custom->usesPeriodicBoundaryConditions()); - ASSERT(!obc->usesPeriodicBoundaryConditions()); - ASSERT(!standardSystem.usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - } - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - context1.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - context2.setVelocities(velocities); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } - - // Try changing the particle parameters and make sure it's still correct. - - for (int i = 0; i < numMolecules/2; i++) { - obc->setParticleParameters(2*i, 1.1, 0.3, 0.6); - params[0] = 1.1; - params[1] = 0.3; - params[2] = 0.6; - custom->setParticleParameters(2*i, params); - obc->setParticleParameters(2*i+1, -1.1, 0.2, 0.4); - params[0] = -1.1; - params[1] = 0.2; - params[2] = 0.4; - custom->setParticleParameters(2*i+1, params); - } - obc->updateParametersInContext(context1); - custom->updateParametersInContext(context2); - state1 = context1.getState(State::Forces | State::Energy); - state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testMembrane() { - const int numMolecules = 70; - const int numParticles = numMolecules*2; - const double boxSize = 10.0; - - // Create a system with an implicit membrane. - - System system; - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - } - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - CustomGBForce* custom = new CustomGBForce(); - custom->setCutoffDistance(2.0); - custom->addPerParticleParameter("q"); - custom->addPerParticleParameter("radius"); - custom->addPerParticleParameter("scale"); - custom->addGlobalParameter("thickness", 3); - custom->addGlobalParameter("solventDielectric", 78.3); - custom->addGlobalParameter("soluteDielectric", 1); - custom->addComputedValue("Imol", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" - "U=r+sr2;" - "C=2*(1/or1-1/L)*step(sr2-r-or1);" - "L=max(or1, D);" - "D=abs(r-sr2);" - "sr2 = scale2*or2;" - "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); - custom->addComputedValue("Imem", "(1/radius+2*log(2)/thickness)/(1+exp(7.2*(abs(z)+radius-0.5*thickness)))", CustomGBForce::SingleParticle); - custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" - "psi=max(Imol,Imem)*or; or=radius-0.009", CustomGBForce::SingleParticle); - custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); - custom->addEnergyTerm("-138.935456*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.5; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.8; - custom->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - custom->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - system.addForce(custom); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-2; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); -} - -void testTabulatedFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "0", CustomGBForce::ParticlePair); - force->addEnergyTerm("fn(r)+1", CustomGBForce::ParticlePair); - force->addParticle(vector()); - force->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(std::sin(0.25*i)); - force->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -std::cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } -} - -void testMultipleChainRules() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "2*r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+1", CustomGBForce::SingleParticle); - force->addComputedValue("c", "2*b+a", CustomGBForce::SingleParticle); - force->addEnergyTerm("0.1*a+1*b+10*c", CustomGBForce::SingleParticle); // 0.1*(2*r) + 2*r+1 + 10*(3*a+2) = 0.2*r + 2*r+1 + 40*r+20+20*r = 62.2*r+21 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 5; i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(124.4, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-124.4, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(2*(62.2*i+21), state.getPotentialEnergy(), 0.02); - } -} - -void testPositionDependence() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", CustomGBForce::ParticlePair); - force->addComputedValue("b", "a+x*y", CustomGBForce::SingleParticle); - force->addEnergyTerm("b*z", CustomGBForce::SingleParticle); - force->addEnergyTerm("b1+b2", CustomGBForce::ParticlePair); // = 2*r+x1*y1+x2*y2 - force->addParticle(vector()); - force->addParticle(vector()); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - vector forces(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < 5; i++) { - positions[0] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - positions[1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - Vec3 delta = positions[0]-positions[1]; - double r = sqrt(delta.dot(delta)); - double energy = 2*r+positions[0][0]*positions[0][1]+positions[1][0]*positions[1][1]; - for (int j = 0; j < 2; j++) - energy += positions[j][2]*(r+positions[j][0]*positions[j][1]); - Vec3 force1(-(1+positions[0][2])*delta[0]/r-(1+positions[0][2])*positions[0][1]-(1+positions[1][2])*delta[0]/r, - -(1+positions[0][2])*delta[1]/r-(1+positions[0][2])*positions[0][0]-(1+positions[1][2])*delta[1]/r, - -(1+positions[0][2])*delta[2]/r-(r+positions[0][0]*positions[0][1])-(1+positions[1][2])*delta[2]/r); - Vec3 force2((1+positions[0][2])*delta[0]/r+(1+positions[1][2])*delta[0]/r-(1+positions[1][2])*positions[1][1], - (1+positions[0][2])*delta[1]/r+(1+positions[1][2])*delta[1]/r-(1+positions[1][2])*positions[1][0], - (1+positions[0][2])*delta[2]/r+(1+positions[1][2])*delta[2]/r-(r+positions[1][0]*positions[1][1])); - ASSERT_EQUAL_VEC(force1, forces[0], 1e-4); - ASSERT_EQUAL_VEC(force2, forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(2), positions3(2); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); - } -} - -void testExclusions() { - for (int i = 3; i < 4; i++) { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomGBForce* force = new CustomGBForce(); - force->addComputedValue("a", "r", i < 2 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addEnergyTerm("a", CustomGBForce::SingleParticle); - force->addEnergyTerm("(1+a1+a2)*r", i%2 == 0 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); - force->addParticle(vector()); - force->addParticle(vector()); - force->addExclusion(0, 1); - system.addForce(force); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double f, energy; - switch (i) - { - case 0: // e = 0 - f = 0; - energy = 0; - break; - case 1: // e = r - f = 1; - energy = 1; - break; - case 2: // e = 2r - f = 2; - energy = 2; - break; - case 3: // e = 3r + 2r^2 - f = 7; - energy = 5; - break; - default: - ASSERT(false); - } - ASSERT_EQUAL_VEC(Vec3(f, 0, 0), forces[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(-f, 0, 0), forces[1], 1e-4); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = stepSize/norm; - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/stepSize, 1e-3*abs(state.getPotentialEnergy())); - } -} - -// create custom GB/VI force - -static CustomGBForce* createCustomGBVI(double solventDielectric, double soluteDielectric) { - - CustomGBForce* customGbviForce = new CustomGBForce(); - - customGbviForce->setCutoffDistance(2.0); - - customGbviForce->addPerParticleParameter("q"); - customGbviForce->addPerParticleParameter("radius"); - customGbviForce->addPerParticleParameter("scaleFactor"); // derived in GBVIForce implmentation, but parameter here - customGbviForce->addPerParticleParameter("gamma"); - - customGbviForce->addGlobalParameter("solventDielectric", solventDielectric); - customGbviForce->addGlobalParameter("soluteDielectric", soluteDielectric); - - customGbviForce->addComputedValue("V", " uL - lL + factor3/(radius1*radius1*radius1);" - "uL = 1.5*x2uI*(0.25*rI-0.33333*xuI+0.125*(r2-S2)*rI*x2uI);" - "lL = 1.5*x2lI*(0.25*rI-0.33333*xlI+0.125*(r2-S2)*rI*x2lI);" - "x2lI = 1.0/(xl*xl);" - "xlI = 1.0/(xl);" - "xuI = 1.0/(xu);" - "x2uI = 1.0/(xu*xu);" - "xu = (r+scaleFactor2);" - "rI = 1.0/(r);" - "r2 = (r*r);" - "xl = factor1*lMax + factor2*xuu + factor3*(r-scaleFactor2);" - "xuu = (r+scaleFactor2);" - "S2 = (scaleFactor2*scaleFactor2);" - "factor1 = step(r-absRadiusScaleDiff);" - "absRadiusScaleDiff = abs(radiusScaleDiff);" - "radiusScaleDiff = (radius1-scaleFactor2);" - "factor2 = step(radius1-scaleFactor2-r);" - "factor3 = step(scaleFactor2-radius1-r);" - "lMax = max(radius1,r-scaleFactor2);" - , CustomGBForce::ParticlePairNoExclusions); - - customGbviForce->addComputedValue("B", "(1.0/(radius*radius*radius)-V)^(-0.33333333)", CustomGBForce::SingleParticle); - - // nonpolar term + polar self energy - - customGbviForce->addEnergyTerm("(-138.935485*0.5*((1.0/soluteDielectric)-(1.0/solventDielectric))*q^2/B)-((1.0/soluteDielectric)-(1.0/solventDielectric))*((gamma*(radius/B)^3))", CustomGBForce::SingleParticle); - - // polar pair energy - - customGbviForce->addEnergyTerm("-138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" - "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); - - return customGbviForce; -} - -// ethance GB/VI test case - -static void buildEthane(GBVIForce* gbviForce, std::vector& positions) { - - const int numParticles = 8; - - double C_HBondDistance = 0.1097; - double C_CBondDistance = 0.1504; - double C_radius, C_gamma, C_charge, H_radius, H_gamma, H_charge; - - int AM1_BCC = 1; - H_charge = -0.053; - C_charge = -3.0*H_charge; - if (AM1_BCC) { - C_radius = 0.180; - C_gamma = -0.2863; - H_radius = 0.125; - H_gamma = 0.2437; - } - else { - C_radius = 0.215; - C_gamma = -1.1087; - H_radius = 0.150; - H_gamma = 0.1237; - } - - for (int i = 0; i < numParticles; i++) { - gbviForce->addParticle(H_charge, H_radius, H_gamma); - } - gbviForce->setParticleParameters(1, C_charge, C_radius, C_gamma); - gbviForce->setParticleParameters(4, C_charge, C_radius, C_gamma); - - gbviForce->addBond(0, 1, C_HBondDistance); - gbviForce->addBond(2, 1, C_HBondDistance); - gbviForce->addBond(3, 1, C_HBondDistance); - gbviForce->addBond(1, 4, C_CBondDistance); - gbviForce->addBond(5, 4, C_HBondDistance); - gbviForce->addBond(6, 4, C_HBondDistance); - gbviForce->addBond(7, 4, C_HBondDistance); - - std::vector > bondExceptions; - std::vector bondDistances; - - bondExceptions.push_back(pair(0, 1)); - bondDistances.push_back(C_HBondDistance); - - bondExceptions.push_back(pair(2, 1)); - bondDistances.push_back(C_HBondDistance); - - bondExceptions.push_back(pair(3, 1)); - bondDistances.push_back(C_HBondDistance); - - bondExceptions.push_back(pair(1, 4)); - bondDistances.push_back(C_CBondDistance); - - bondExceptions.push_back(pair(5, 4)); - bondDistances.push_back(C_HBondDistance); - - bondExceptions.push_back(pair(6, 4)); - bondDistances.push_back(C_HBondDistance); - - bondExceptions.push_back(pair(7, 4)); - bondDistances.push_back(C_HBondDistance); - - positions.resize(numParticles); - positions[0] = Vec3(0.5480, 1.7661, 0.0000); - positions[1] = Vec3(0.7286, 0.8978, 0.6468); - positions[2] = Vec3(0.4974, 0.0000, 0.0588); - positions[3] = Vec3(0.0000, 0.9459, 1.4666); - positions[4] = Vec3(2.1421, 0.8746, 1.1615); - positions[5] = Vec3(2.3239, 0.0050, 1.8065); - positions[6] = Vec3(2.8705, 0.8295, 0.3416); - positions[7] = Vec3(2.3722, 1.7711, 1.7518); - -} - -// dimer GB/VI test case - -static void buildDimer(GBVIForce* gbviForce, std::vector& positions) { - - const int numParticles = 2; - - double C_HBondDistance = 0.1097; - double C_CBondDistance = 0.1504; - double C_radius, C_gamma, C_charge, H_radius, H_gamma, H_charge; - - int AM1_BCC = 1; - H_charge = -0.053; - C_charge = -3.0*H_charge; - - H_charge = 0.0; - C_charge = 0.0; - if (AM1_BCC) { - C_radius = 0.180; - C_gamma = -0.2863; - H_radius = 0.125; - H_gamma = 0.2437; - } - else { - C_radius = 0.215; - C_gamma = -1.1087; - H_radius = 0.150; - H_gamma = 0.1237; - } - - for (int i = 0; i < numParticles; i++) { - gbviForce->addParticle(H_charge, H_radius, H_gamma); - } - gbviForce->setParticleParameters(1, C_charge, C_radius, C_gamma); - - gbviForce->addBond(0, 1, C_HBondDistance); - std::vector > bondExceptions; - std::vector bondDistances; - - bondExceptions.push_back(pair(0, 1)); - bondDistances.push_back(C_HBondDistance); - - positions.resize(numParticles); - positions[0] = Vec3(0.0, 0.0, 0.0); - positions[1] = Vec3(0.15, 0.0, 0.0); -} - -// monomer GB/VI test case - -static void buildMonomer(GBVIForce* gbviForce, std::vector& positions) { - - const int numParticles = 1; - - double H_radius, H_gamma, H_charge; - - H_charge = 1.0; - H_radius = 0.125; - H_gamma = 0.2437; - - for (int i = 0; i < numParticles; i++) { - gbviForce->addParticle(H_charge, H_radius, H_gamma); - } - positions.resize(numParticles); - positions[0] = Vec3(0.0, 0.0, 0.0); -} - -// taken from gbviForceImpl class -// computes the scaled radii based on covalent info and atomic radii - -static void findScaledRadii(GBVIForce& gbviForce, std::vector & scaledRadii) { - - int numberOfParticles = gbviForce.getNumParticles(); - int numberOfBonds = gbviForce.getNumBonds(); - - // load 1-2 atom pairs along w/ bond distance using HarmonicBondForce & constraints - // numberOfBonds < 1, indicating they were not set by the user - - std::vector< std::vector > bondIndices; - bondIndices.resize(numberOfBonds); - - std::vector bondLengths; - bondLengths.resize(numberOfBonds); - - scaledRadii.resize(numberOfParticles); - for (int i = 0; i < numberOfParticles; i++) { - double charge, radius, gamma; - gbviForce.getParticleParameters(i, charge, radius, gamma); - scaledRadii[i] = radius; - } - - for (int i = 0; i < numberOfBonds; i++) { - int particle1, particle2; - double bondLength; - gbviForce.getBondParameters(i, particle1, particle2, bondLength); - if (particle1 < 0 || particle1 >= gbviForce.getNumParticles()) { - std::stringstream msg; - msg << "GBVISoftcoreForce: Illegal particle index: "; - msg << particle1; - throw OpenMMException(msg.str()); - } - if (particle2 < 0 || particle2 >= gbviForce.getNumParticles()) { - std::stringstream msg; - msg << "GBVISoftcoreForce: Illegal particle index: "; - msg << particle2; - throw OpenMMException(msg.str()); - } - if (bondLength < 0) { - std::stringstream msg; - msg << "GBVISoftcoreForce: negative bondlength: "; - msg << bondLength; - throw OpenMMException(msg.str()); - } - bondIndices[i].push_back(particle1); - bondIndices[i].push_back(particle2); - bondLengths[i] = bondLength; - } - - - // load 1-2 indicies for each atom - - std::vector > bonded12(numberOfParticles); +#include "ReferenceTests.h" +#include "TestCustomGBForce.h" - for (int i = 0; i < (int) bondIndices.size(); ++i) { - bonded12[bondIndices[i][0]].push_back(i); - bonded12[bondIndices[i][1]].push_back(i); - } - - int errors = 0; - - // compute scaled radii (Eq. 5 of Labute paper [JCC 29 p. 1693-1698 2008]) - - for (int j = 0; j < (int) bonded12.size(); ++j) { - - double charge; - double gamma; - double radiusJ; - double scaledRadiusJ; - - gbviForce.getParticleParameters(j, charge, radiusJ, gamma); - - if ( bonded12[j].size() == 0) { - scaledRadiusJ = radiusJ; -// errors++; - } - else { - - double rJ2 = radiusJ*radiusJ; - - // loop over bonded neighbors of atom j, applying Eq. 5 in Labute - - scaledRadiusJ = 0.0; - for (int i = 0; i < (int) bonded12[j].size(); ++i) { - - int index = bonded12[j][i]; - int bondedAtomIndex = (j == bondIndices[index][0]) ? bondIndices[index][1] : bondIndices[index][0]; - - double radiusI; - gbviForce.getParticleParameters(bondedAtomIndex, charge, radiusI, gamma); - double rI2 = radiusI*radiusI; - - double a_ij = (radiusI - bondLengths[index]); - a_ij *= a_ij; - a_ij = (rJ2 - a_ij)/(2.0*bondLengths[index]); - - double a_ji = radiusJ - bondLengths[index]; - a_ji *= a_ji; - a_ji = (rI2 - a_ji)/(2.0*bondLengths[index]); - - scaledRadiusJ += a_ij*a_ij*(3.0*radiusI - a_ij) + a_ji*a_ji*(3.0*radiusJ - a_ji); - } - - scaledRadiusJ = (radiusJ*radiusJ*radiusJ) - 0.125*scaledRadiusJ; - if (scaledRadiusJ > 0.0) { - scaledRadiusJ = 0.95*pow(scaledRadiusJ, (1.0/3.0)); - } - else { - scaledRadiusJ = 0.0; - } - } - scaledRadii[j] = scaledRadiusJ; - - } - - // abort if errors - - if (errors) { - throw OpenMMException("GBVIForceImpl::findScaledRadii errors -- aborting"); - } +void runPlatformTests() { } - -// load parameters from gbviForce to customGbviForce -// findScaledRadii() is called to calculate the scaled radii (S) -// S is derived quantity in GBVIForce, not a parameter is the case here - -static void loadGbviParameters(GBVIForce* gbviForce, CustomGBForce* customGbviForce) { - - int numParticles = gbviForce->getNumParticles(); - - // charge, radius, scale factor, gamma - - vector params(4); - std::vector scaledRadii; - findScaledRadii(*gbviForce, scaledRadii); - - for (int ii = 0; ii < numParticles; ii++) { - double charge, radius, gamma; - gbviForce->getParticleParameters(ii, charge, radius, gamma); - params[0] = charge; - params[1] = radius; - params[2] = scaledRadii[ii]; - params[3] = gamma; - customGbviForce->addParticle(params); - } - -} - -void testGBVI(GBVIForce::NonbondedMethod gbviMethod, CustomGBForce::NonbondedMethod customGbviMethod, std::string molecule) { - - const int numMolecules = 1; - const double boxSize = 10.0; - - GBVIForce* gbvi = new GBVIForce(); - std::vector positions; - - // select molecule - - if (molecule == "Monomer") { - buildMonomer(gbvi, positions); - } - else if (molecule == "Dimer") { - buildDimer(gbvi, positions); - } - else { - buildEthane(gbvi, positions); - } - - int numParticles = gbvi->getNumParticles(); - System standardSystem; - System customGbviSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customGbviSystem.addParticle(1.0); - } - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - customGbviSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); - gbvi->setCutoffDistance(2.0); - - // create customGbviForce GBVI force - - CustomGBForce* customGbviForce = createCustomGBVI(gbvi->getSolventDielectric(), gbvi->getSoluteDielectric()); - customGbviForce->setCutoffDistance(2.0); - - // load parameters from gbvi to customGbviForce - - loadGbviParameters(gbvi, customGbviForce); - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector velocities(numParticles); - for (int ii = 0; ii < numParticles; ii++) { - velocities[ii] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - } - gbvi->setNonbondedMethod(gbviMethod); - customGbviForce->setNonbondedMethod(customGbviMethod); - - standardSystem.addForce(gbvi); - customGbviSystem.addForce(customGbviForce); - - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - context1.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - - Context context2(customGbviSystem, integrator2, platform); - context2.setPositions(positions); - context2.setVelocities(velocities); - State state2 = context2.getState(State::Forces | State::Energy); - - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -int main() { - - try { - testOBC(GBSAOBCForce::NoCutoff, CustomGBForce::NoCutoff); - testOBC(GBSAOBCForce::CutoffNonPeriodic, CustomGBForce::CutoffNonPeriodic); - testOBC(GBSAOBCForce::CutoffPeriodic, CustomGBForce::CutoffPeriodic); - testMembrane(); - testTabulatedFunction(); - testMultipleChainRules(); - testPositionDependence(); - testExclusions(); - - // GBVI tests - - testGBVI(GBVIForce::NoCutoff, CustomGBForce::NoCutoff, "Monomer"); - testGBVI(GBVIForce::NoCutoff, CustomGBForce::NoCutoff, "Dimer"); - testGBVI(GBVIForce::NoCutoff, CustomGBForce::NoCutoff, "Ethane"); - - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceCustomHbondForce.cpp b/platforms/reference/tests/TestReferenceCustomHbondForce.cpp index e0dd8c1dd01bd1a50aab2aff00ea080a6e7af66b..a477075e8375c18c0ec08329479dd02b19af87ef 100644 --- a/platforms/reference/tests/TestReferenceCustomHbondForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomHbondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,221 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomHbondForce. - */ +#include "ReferenceTests.h" +#include "TestCustomHbondForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomHbondForce.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testHbond() { - // Create a system using a CustomHbondForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomHbondForce* custom = new CustomHbondForce("0.5*kr*(distance(d1,a1)-r0)^2 + 0.5*ktheta*(angle(a1,d1,d2)-theta0)^2 + 0.5*kpsi*(angle(d1,a1,a2)-psi0)^2 + kchi*(1+cos(n*dihedral(a3,a2,a1,d1)-chi0))"); - custom->addPerDonorParameter("r0"); - custom->addPerDonorParameter("theta0"); - custom->addPerDonorParameter("psi0"); - custom->addPerAcceptorParameter("chi0"); - custom->addPerAcceptorParameter("n"); - custom->addGlobalParameter("kr", 0.4); - custom->addGlobalParameter("ktheta", 0.5); - custom->addGlobalParameter("kpsi", 0.6); - custom->addGlobalParameter("kchi", 0.7); - vector parameters(3); - parameters[0] = 1.5; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->addDonor(1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.1; - parameters[1] = 2; - custom->addAcceptor(2, 3, 4, parameters); - custom->setCutoffDistance(10.0); - customSystem.addForce(custom); - ASSERT(!custom->usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - - // Create an identical system using HarmonicBondForce, HarmonicAngleForce, and PeriodicTorsionForce. - - System standardSystem; - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - standardSystem.addParticle(1.0); - HarmonicBondForce* bond = new HarmonicBondForce(); - bond->addBond(1, 2, 1.5, 0.4); - standardSystem.addForce(bond); - HarmonicAngleForce* angle = new HarmonicAngleForce(); - angle->addAngle(0, 1, 2, 1.7, 0.5); - angle->addAngle(1, 2, 3, 1.9, 0.6); - standardSystem.addForce(angle); - PeriodicTorsionForce* torsion = new PeriodicTorsionForce(); - torsion->addTorsion(1, 2, 3, 4, 2, 2.1, 0.7); - standardSystem.addForce(torsion); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(standardSystem, integrator2, platform); - for (int i = 0; i < 10; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); - } - - // Try changing the parameters and make sure it's still correct. - - parameters.resize(3); - parameters[0] = 1.4; - parameters[1] = 1.7; - parameters[2] = 1.9; - custom->setDonorParameters(0, 1, 0, -1, parameters); - parameters.resize(2); - parameters[0] = 2.2; - parameters[1] = 2; - custom->setAcceptorParameters(0, 2, 3, 4, parameters); - bond->setBondParameters(0, 1, 2, 1.4, 0.4); - torsion->setTorsionParameters(0, 1, 2, 3, 4, 2, 2.2, 0.7); - custom->updateParametersInContext(c1); - bond->updateParametersInContext(c2); - torsion->updateParametersInContext(c2); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); +void runPlatformTests() { } - -void testExclusions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->addExclusion(1, 0); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); - custom->addDonor(0, 1, -1, vector()); - custom->addDonor(1, 0, -1, vector()); - custom->addAcceptor(2, 0, -1, vector()); - custom->setNonbondedMethod(CustomHbondForce::CutoffNonPeriodic); - custom->setCutoffDistance(2.5); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 3, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); -} - -void testCustomFunctions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomHbondForce* custom = new CustomHbondForce("foo(distance(d1,a1))"); - custom->addDonor(1, 0, -1, vector()); - custom->addDonor(2, 0, -1, vector()); - custom->addAcceptor(0, 1, -1, vector()); - vector function(2); - function[0] = 0; - function[1] = 1; - custom->addTabulatedFunction("foo", new Continuous1DFunction(function, 0, 10)); - system.addForce(custom); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1, 0.1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -0.1, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.1, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(0.1*2+0.1*2, state.getPotentialEnergy(), TOL); -} - -int main() { - try { - testHbond(); - testExclusions(); - testCutoff(); - testCustomFunctions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceCustomIntegrator.cpp b/platforms/reference/tests/TestReferenceCustomIntegrator.cpp index 01090cc3534d243e639b6e7ee4a3ea72f8d18fe6..d2e9c74324c17443ef0ee98b7b1d99989b5b586f 100644 --- a/platforms/reference/tests/TestReferenceCustomIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceCustomIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,747 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomIntegrator. - */ +#include "ReferenceTests.h" +#include "TestCustomIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/AndersenThermostat.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/CustomIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -/** - * Test a simple leapfrog integrator on a single bond. - */ -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.setKineticEnergyExpression("m*v1*v1/2; v1=v+0.5*dt*f/m"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(-0.5*dt*0.5*0.5, 0, 0); - velocities[1] = Vec3(0.5*dt*0.5*0.5, 0, 0); - context.setVelocities(velocities); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 1e-4); - double expectedSpeed = -0.5*freq*std::sin(freq*(time-dt/2)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 1e-4); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 1e-4); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(0.5*0.5*0.5, energy, 1e-4); - integrator.step(1); - } -} - -/** - * Test an integrator that enforces constraints. - */ -void testConstraints() { - const int numParticles = 8; - const double temp = 500.0; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -/** - * Test an integrator that applies constraints directly to velocities. - */ -void testVelocityConstraints() { - const int numParticles = 10; - System system; - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("x1", 0); - integrator.addComputePerDof("v", "v+0.5*dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("x1", "x"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "v+0.5*dt*f/m+(x-x1)/dt"); - integrator.addConstrainVelocities(); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - - // Constrain the first three particles with SHAKE. - - system.addConstraint(0, 1, 1.0); - system.addConstraint(1, 2, 1.0); - - // Constrain the next three with SETTLE. - - system.addConstraint(3, 4, 1.0); - system.addConstraint(5, 4, 1.0); - system.addConstraint(3, 5, sqrt(2.0)); - - // Constraint the rest with CCMA. - - for (int i = 6; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - integrator.step(2); - State state = context.getState(State::Positions | State::Velocities | State::Energy); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - if (i > 0) { - Vec3 v1 = state.getVelocities()[particle1]; - Vec3 v2 = state.getVelocities()[particle2]; - double vel = (v1-v2).dot(p1-p2); - ASSERT_EQUAL_TOL(0.0, vel, 2e-5); - } - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 0) - initialEnergy = energy; - else if (i > 0) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - CustomIntegrator integrator(0.002); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addConstrainPositions(); - integrator.addComputePerDof("v", "(x-oldx)/dt"); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -/** - * Test an integrator with an AndersenThermostat to see if updateContextState() - * is being handled correctly. - */ -void testWithThermostat() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - const int numSteps = 5000; - System system; - CustomIntegrator integrator(0.003); - integrator.addUpdateContextState(); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); - system.addForce(thermostat); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < numSteps; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(10); - } - ke /= numSteps; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -/** - * Test a Monte Carlo integrator that uses global variables and depends on energy. - */ -void testMonteCarlo() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - const double kT = BOLTZ*300.0; - integrator.addGlobalVariable("kT", kT); - integrator.addGlobalVariable("oldE", 0); - integrator.addGlobalVariable("accept", 0); - integrator.addPerDofVariable("oldx", 0); - integrator.addComputeGlobal("oldE", "energy"); - integrator.addComputePerDof("oldx", "x"); - integrator.addComputePerDof("x", "x+dt*gaussian"); - integrator.addComputeGlobal("accept", "step(exp((oldE-energy)/kT)-uniform)"); - integrator.addComputePerDof("x", "select(accept, x, oldx)"); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 2.0, 10.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // Compute the histogram of distances and see if it satisfies a Boltzmann distribution. - - const int numBins = 100; - const double maxDist = 4.0; - const int numIterations = 5000; - vector counts(numBins, 0); - for (int i = 0; i < numIterations; ++i) { - integrator.step(10); - State state = context.getState(State::Positions); - Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; - double dist = sqrt(delta.dot(delta)); - if (dist < maxDist) - counts[(int) (numBins*dist/maxDist)]++; - } - vector expected(numBins, 0); - double sum = 0; - for (int i = 0; i < numBins; i++) { - double dist = (i+0.5)*maxDist/numBins; - expected[i] = dist*dist*exp(-5.0*(dist-2)*(dist-2)/kT); - sum += expected[i]; - } - for (int i = 0; i < numBins; i++) - ASSERT_USUALLY_EQUAL_TOL((double) counts[i]/numIterations, expected[i]/sum, 0.01); -} - -/** - * Test the ComputeSum operation. - */ -void testSum() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(i%10 == 0 ? 0.0 : 1.5); - nb->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 1) - close = true; - } - } - } - CustomIntegrator integrator(0.005); - integrator.addGlobalVariable("ke", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputeSum("ke", "m*v*v/2"); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the sum is being computed correctly. - - for (int i = 0; i < 100; ++i) { - State state = context.getState(State::Energy); - ASSERT_EQUAL_TOL(state.getKineticEnergy(), integrator.getGlobalVariable(0), 1e-5); - integrator.step(1); - } -} - -/** - * Test an integrator that both uses and modifies a context parameter. - */ -void testParameter() { - System system; - system.addParticle(1.0); - AndersenThermostat* thermostat = new AndersenThermostat(0.1, 0.1); - system.addForce(thermostat); - CustomIntegrator integrator(0.1); - integrator.addGlobalVariable("temp", 0); - integrator.addComputeGlobal("temp", "AndersenTemperature"); - integrator.addComputeGlobal("AndersenTemperature", "temp*2"); - Context context(system, integrator, platform); - - // See if the parameter is being used correctly. - - for (int i = 0; i < 10; i++) { - integrator.step(1); - ASSERT_EQUAL_TOL(context.getParameter("AndersenTemperature"), 0.1*(1<<(i+1)), 1e-10); - } -} - -/** - * Test random number distributions. - */ -void testRandomDistributions() { - const int numParticles = 100; - const int numBins = 20; - const int numSteps = 100; - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomIntegrator integrator(0.1); - integrator.addPerDofVariable("a", 0); - integrator.addPerDofVariable("b", 0); - integrator.addComputePerDof("a", "uniform"); - integrator.addComputePerDof("b", "gaussian"); - Context context(system, integrator, platform); - - // See if the random numbers are distributed correctly. - - vector bins(numBins); - double mean = 0.0; - double var = 0.0; - double skew = 0.0; - double kurtosis = 0.0; - vector values; - for (int i = 0; i < numSteps; i++) { - integrator.step(1); - integrator.getPerDofVariable(0, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - ASSERT(v >= 0 && v < 1); - bins[(int) (v*numBins)]++; - } - integrator.getPerDofVariable(1, values); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < 3; j++) { - double v = values[i][j]; - mean += v; - var += v*v; - skew += v*v*v; - kurtosis += v*v*v*v; - } - } - - // Check the distribution of uniform randoms. - - int numValues = numParticles*numSteps*3; - double expected = numValues/(double) numBins; - double tol = 4*sqrt(expected); - for (int i = 0; i < numBins; i++) - ASSERT(bins[i] >= expected-tol && bins[i] <= expected+tol); - - // Check the distribution of gaussian randoms. - - mean /= numValues; - var /= numValues; - skew /= numValues; - kurtosis /= numValues; - double c2 = var-mean*mean; - double c3 = skew-3*var*mean+2*mean*mean*mean; - double c4 = kurtosis-4*skew*mean-3*var*var+12*var*mean*mean-6*mean*mean*mean*mean; - ASSERT_EQUAL_TOL(0.0, mean, 3.0/sqrt((double) numValues)); - ASSERT_EQUAL_TOL(1.0, c2, 3.0/pow(numValues, 1.0/3.0)); - ASSERT_EQUAL_TOL(0.0, c3, 3.0/pow(numValues, 1.0/4.0)); - ASSERT_EQUAL_TOL(0.0, c4, 3.0/pow(numValues, 1.0/4.0)); -} - -/** - * Test getting and setting per-DOF variables. - */ -void testPerDofVariables() { - const int numParticles = 200; - const double boxSize = 10; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nb = new NonbondedForce(); - system.addForce(nb); - nb->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.5); - nb->addParticle(i%2 == 0 ? 1 : -1, 0.1, 1); - bool close = true; - while (close) { - positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - close = false; - for (int j = 0; j < i; ++j) { - Vec3 delta = positions[i]-positions[j]; - if (delta.dot(delta) < 0.1) - close = true; - } - } - } - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("temp", 0); - integrator.addPerDofVariable("pos", 0); - integrator.addComputePerDof("v", "v+dt*f/m"); - integrator.addComputePerDof("x", "x+dt*v"); - integrator.addComputePerDof("pos", "x"); - Context context(system, integrator, platform); - context.setPositions(positions); - vector initialValues(numParticles); - for (int i = 0; i < numParticles; i++) - initialValues[i] = Vec3(i+0.1, i+0.2, i+0.3); - integrator.setPerDofVariable(0, initialValues); - - // Run a simulation, then query per-DOF values and see if they are correct. - - vector values; - for (int i = 0; i < 100; ++i) { - integrator.step(1); - State state = context.getState(State::Positions); - integrator.getPerDofVariable(0, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(initialValues[j], values[j], 1e-5); - integrator.getPerDofVariable(1, values); - for (int j = 0; j < numParticles; j++) - ASSERT_EQUAL_VEC(state.getPositions()[j], values[j], 1e-5); - } -} - -/** - * Test evaluating force groups separately. - */ -void testForceGroups() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - CustomIntegrator integrator(0.01); - integrator.addPerDofVariable("outf", 0); - integrator.addPerDofVariable("outf1", 0); - integrator.addPerDofVariable("outf2", 0); - integrator.addGlobalVariable("oute", 0); - integrator.addGlobalVariable("oute1", 0); - integrator.addGlobalVariable("oute2", 0); - integrator.addComputePerDof("outf", "f"); - integrator.addComputePerDof("outf1", "f1"); - integrator.addComputePerDof("outf2", "f2"); - integrator.addComputeGlobal("oute", "energy"); - integrator.addComputeGlobal("oute1", "energy1"); - integrator.addComputeGlobal("oute2", "energy2"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - bonds->addBond(0, 1, 1.5, 1.1); - bonds->setForceGroup(1); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->addParticle(0.2, 1, 0); - nb->addParticle(0.2, 1, 0); - nb->setForceGroup(2); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // See if the various forces are computed correctly. - - integrator.step(1); - vector f, f1, f2; - double e1 = 0.5*1.1*0.5*0.5; - double e2 = 138.935456*0.2*0.2/2.0; - integrator.getPerDofVariable(0, f); - integrator.getPerDofVariable(1, f1); - integrator.getPerDofVariable(2, f2); - ASSERT_EQUAL_VEC(Vec3(1.1*0.5, 0, 0), f1[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-1.1*0.5, 0, 0), f1[1], 1e-5); - ASSERT_EQUAL_VEC(Vec3(-138.935456*0.2*0.2/4.0, 0, 0), f2[0], 1e-5); - ASSERT_EQUAL_VEC(Vec3(138.935456*0.2*0.2/4.0, 0, 0), f2[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0]+f2[0], f[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1]+f2[1], f[1], 1e-5); - ASSERT_EQUAL_TOL(e1, integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(e2, integrator.getGlobalVariable(2), 1e-5); - ASSERT_EQUAL_TOL(e1+e2, integrator.getGlobalVariable(0), 1e-5); - - // Make sure they also match the values returned by the Context. - - State s = context.getState(State::Forces | State::Energy, false); - State s1 = context.getState(State::Forces | State::Energy, false, 2); - State s2 = context.getState(State::Forces | State::Energy, false, 4); - vector c, c1, c2; - c = context.getState(State::Forces, false).getForces(); - c1 = context.getState(State::Forces, false, 2).getForces(); - c2 = context.getState(State::Forces, false, 4).getForces(); - ASSERT_EQUAL_VEC(f[0], c[0], 1e-5); - ASSERT_EQUAL_VEC(f[1], c[1], 1e-5); - ASSERT_EQUAL_VEC(f1[0], c1[0], 1e-5); - ASSERT_EQUAL_VEC(f1[1], c1[1], 1e-5); - ASSERT_EQUAL_VEC(f2[0], c2[0], 1e-5); - ASSERT_EQUAL_VEC(f2[1], c2[1], 1e-5); - ASSERT_EQUAL_TOL(s.getPotentialEnergy(), integrator.getGlobalVariable(0), 1e-5); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), integrator.getGlobalVariable(1), 1e-5); - ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), integrator.getGlobalVariable(2), 1e-5); -} - -/** - * Test a multiple time step r-RESPA integrator. - */ -void testRespa() { - const int numParticles = 8; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - CustomIntegrator integrator(0.002); - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - for (int i = 0; i < 2; i++) { - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - integrator.addComputePerDof("x", "x+(dt/2)*v"); - integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); - } - integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); - HarmonicBondForce* bonds = new HarmonicBondForce(); - for (int i = 0; i < numParticles-2; i++) - bonds->addBond(i, i+1, 1.0, 0.5); - system.addForce(bonds); - NonbondedForce* nb = new NonbondedForce(); - nb->setCutoffDistance(2.0); - nb->setNonbondedMethod(NonbondedForce::Ewald); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - nb->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - nb->setForceGroup(1); - nb->setReciprocalSpaceForceGroup(0); - system.addForce(nb); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and monitor energy conservations. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(2); - } -} - -void testIfBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginIfBlock("a < 3.5"); - integrator.addComputeGlobal("b", "a+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Set "a" to 1.7 and verify that "b" gets set to a+1. - - integrator.setGlobalVariable(0, 1.7); - integrator.step(1); - ASSERT_EQUAL_TOL(2.7, integrator.getGlobalVariable(1), 1e-6); - - // Now set it to a value that should cause the block to be skipped. - - integrator.setGlobalVariable(0, 4.1); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); -} - -void testWhileBlock() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - const double dt = 0.01; - CustomIntegrator integrator(dt); - integrator.addGlobalVariable("a", 0); - integrator.addGlobalVariable("b", 0); - integrator.addComputeGlobal("b", "1"); - integrator.beginWhileBlock("b <= a"); - integrator.addComputeGlobal("b", "b+1"); - integrator.endBlock(); - Context context(system, integrator, platform); - - // Try a case where the loop should be skipped. - - integrator.setGlobalVariable(0, -3.3); - integrator.step(1); - ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case it should be executed exactly once. - - integrator.setGlobalVariable(0, 1.2); - integrator.step(1); - ASSERT_EQUAL_TOL(2.0, integrator.getGlobalVariable(1), 1e-6); - - // In this case, it should be executed several times. - - integrator.setGlobalVariable(0, 5.3); - integrator.step(1); - ASSERT_EQUAL_TOL(6.0, integrator.getGlobalVariable(1), 1e-6); -} - - -int main() { - try { - testSingleBond(); - testConstraints(); - testVelocityConstraints(); - testConstrainedMasslessParticles(); - testWithThermostat(); - testMonteCarlo(); - testSum(); - testParameter(); - testRandomDistributions(); - testPerDofVariables(); - testForceGroups(); - testRespa(); - testIfBlock(); - testWhileBlock(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceCustomManyParticleForce.cpp b/platforms/reference/tests/TestReferenceCustomManyParticleForce.cpp index ec3f926a5cacb04ffa1d78d297f81b983c1b0dbf..92036f04901f6c196bf856b8dfe515f52df5240e 100644 --- a/platforms/reference/tests/TestReferenceCustomManyParticleForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomManyParticleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,627 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomManyParticleForce. - */ +#include "ReferenceTests.h" +#include "TestCustomManyParticleForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomCompoundBondForce.h" -#include "openmm/CustomManyParticleForce.h" -#include "openmm/System.h" -#include "openmm/TabulatedFunction.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -Vec3 computeDelta(const Vec3& pos1, const Vec3& pos2, bool periodic, const Vec3* periodicBoxVectors) { - Vec3 diff = pos1-pos2; - if (periodic) { - diff -= periodicBoxVectors[2]*floor(diff[2]/periodicBoxVectors[2][2]+0.5); - diff -= periodicBoxVectors[1]*floor(diff[1]/periodicBoxVectors[1][1]+0.5); - diff -= periodicBoxVectors[0]*floor(diff[0]/periodicBoxVectors[0][0]+0.5); - } - return diff; -} - -void validateAxilrodTeller(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize, bool triclinic) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - Vec3 boxVectors[3]; - if (triclinic) { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0.2*boxSize, boxSize, 0); - boxVectors[2] = Vec3(-0.3*boxSize, -0.1*boxSize, boxSize); - } - else { - boxVectors[0] = Vec3(boxSize, 0, 0); - boxVectors[1] = Vec3(0, boxSize, 0); - boxVectors[2] = Vec3(0, 0, boxSize); - } - system.setDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); - system.addForce(force); - if (force->getNonbondedMethod() == CustomManyParticleForce::CutoffPeriodic) { - ASSERT(force->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - } - else { - ASSERT(!force->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - } - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double c = context.getParameter("C"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - bool periodic = (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic); - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = computeDelta(positions[p2], positions[p1], periodic, boxVectors); - Vec3 d13 = computeDelta(positions[p3], positions[p1], periodic, boxVectors); - Vec3 d23 = computeDelta(positions[p3], positions[p2], periodic, boxVectors); - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - double rprod = r12*r13*r23; - expectedEnergy += c*(1+3*ctheta1*ctheta2*ctheta3)/(rprod*rprod*rprod); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void validateStillingerWeber(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize) { - // Create a System and Context. - - int numParticles = force->getNumParticles(); - CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); - System system; - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - double L = context.getParameter("L"); - double eps = context.getParameter("eps"); - double a = context.getParameter("a"); - double gamma = context.getParameter("gamma"); - double sigma = context.getParameter("sigma"); - - // See if the energy matches the expected value. - - double expectedEnergy = 0; - for (int i = 0; i < (int) expectedSets.size(); i++) { - int p1 = expectedSets[i][0]; - int p2 = expectedSets[i][1]; - int p3 = expectedSets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - Vec3 d23 = positions[p3]-positions[p2]; - if (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic) { - for (int j = 0; j < 3; j++) { - d12[j] -= floor(d12[j]/boxSize+0.5f)*boxSize; - d13[j] -= floor(d13[j]/boxSize+0.5f)*boxSize; - d23[j] -= floor(d23[j]/boxSize+0.5f)*boxSize; - } - } - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - double ctheta1 = d12.dot(d13)/(r12*r13); - double ctheta2 = -d12.dot(d23)/(r12*r23); - double ctheta3 = d13.dot(d23)/(r13*r23); - expectedEnergy += L*eps*(ctheta1+1.0/3.0)*(ctheta1+1.0/3.0)*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma)); - } - ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - const vector& forces = state1.getForces(); - double norm = 0.0; - for (int i = 0; i < (int) forces.size(); ++i) - norm += forces[i].dot(forces[i]); - norm = std::sqrt(norm); - const double stepSize = 1e-3; - double step = 0.5*stepSize/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < (int) positions.size(); ++i) { - Vec3 p = positions[i]; - Vec3 f = forces[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); -} - -void testNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - int sets[4][3] = {{0,1,2}, {1,2,3}, {2,3,0}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(1.55); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - int sets[7][3] = {{0,1,2}, {0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,2,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[7]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testPeriodic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[5][3] = {{0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, false); -} - -void testTriclinic() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); - force->setCutoffDistance(1.05); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - double boxSize = 2.1; - int sets[4][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {1,3,4}}; - vector expectedSets(&sets[0], &sets[4]); - validateAxilrodTeller(force, positions, expectedSets, boxSize, true); -} - -void testExclusions() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" - "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" - "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); - force->addGlobalParameter("C", 1.5); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - force->addExclusion(0, 2); - force->addExclusion(0, 3); - int sets[5][3] = {{0,1,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}}; - vector expectedSets(&sets[0], &sets[5]); - validateAxilrodTeller(force, positions, expectedSets, 2.0, false); -} - -void testAllTerms() { - int numParticles = 4; - - // Create a system with a CustomManyParticleForce. - - System system1; - CustomManyParticleForce* force1 = new CustomManyParticleForce(4, - "distance(p1,p2)+angle(p1,p4,p3)+dihedral(p1,p3,p2,p4)+x1+y4+z3"); - system1.addForce(force1); - vector params; - for (int i = 0; i < numParticles; i++) { - system1.addParticle(1.0); - force1->addParticle(params, i); - } - set filter; - filter.insert(0); - force1->setTypeFilter(0, filter); - filter.clear(); - filter.insert(1); - force1->setTypeFilter(1, filter); - filter.clear(); - filter.insert(3); - force1->setTypeFilter(2, filter); - filter.clear(); - filter.insert(2); - force1->setTypeFilter(3, filter); - - // Create a system that use a CustomCompoundBondForce to compute exactly the same interactions. - - System system2; - CustomCompoundBondForce* force2 = new CustomCompoundBondForce(4, - "distance(p1,p2)+angle(p1,p3,p4)+dihedral(p1,p4,p2,p3)+x1+y3+z4"); - system2.addForce(force2); - vector particles; - particles.push_back(0); - particles.push_back(1); - particles.push_back(2); - particles.push_back(3); - force2->addBond(particles, params); - for (int i = 0; i < numParticles; i++) - system2.addParticle(1.0); - - // Create contexts for both of them. - - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - VerletIntegrator integrator1(0.001); - VerletIntegrator integrator2(0.001); - Context context1(system1, integrator1, platform); - Context context2(system2, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - - // See if they produce identical forces and energies. - - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state2.getPotentialEnergy(), state1.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state2.getForces()[i], state1.getForces()[i], 1e-4); -} - -void testParameters() { - // Create a system. - - int numParticles = 5; - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "C*scale1*scale2*scale3*(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))"); - force->addGlobalParameter("C", 2.0); - force->addPerParticleParameter("scale"); - vector params(1); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; i++) { - params[0] = i+1; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 2.0*(i+1)*(j+1)*(k+1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); - - // Modify the parameters. - - context.setParameter("C", 3.5); - for (int i = 0; i < numParticles; i++) { - params[0] = 0.5*i-0.1; - force->setParticleParameters(i, params, 0); - } - force->updateParametersInContext(context); - - // See if the energy is still correct. - - state = context.getState(State::Energy); - expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 3.5*(0.5*i-0.1)*(0.5*j-0.1)*(0.5*k-0.1)*(r12+r13+r23); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTabulatedFunctions() { - int numParticles = 5; - - // Create two tabulated functions. - - vector values; - values.push_back(0.0); - values.push_back(50.0); - Continuous1DFunction* f1 = new Continuous1DFunction(values, 0, 100); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector c(numParticles); - for (int i = 0; i < numParticles; i++) - c[i] = genrand_real2(sfmt); - values.resize(numParticles*numParticles*numParticles); - for (int i = 0; i < numParticles; i++) - for (int j = 0; j < numParticles; j++) - for (int k = 0; k < numParticles; k++) - values[i+numParticles*j+numParticles*numParticles*k] = c[i]+c[j]+c[k]; - Discrete3DFunction* f2 = new Discrete3DFunction(numParticles, numParticles, numParticles, values); - - // Create a system. - - System system; - CustomManyParticleForce* force = new CustomManyParticleForce(3, "f1(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))*f2(atom1, atom2, atom3)"); - force->addPerParticleParameter("atom"); - force->addTabulatedFunction("f1", f1); - force->addTabulatedFunction("f2", f2); - vector params(1); - vector positions; - for (int i = 0; i < numParticles; i++) { - params[0] = i; - force->addParticle(params); - positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); - system.addParticle(1.0); - } - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - for (int i = 0; i < numParticles; i++) - for (int j = i+1; j < numParticles; j++) - for (int k = j+1; k < numParticles; k++) { - Vec3 d12 = positions[j]-positions[i]; - Vec3 d13 = positions[k]-positions[i]; - Vec3 d23 = positions[k]-positions[j]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - double r23 = sqrt(d23.dot(d23)); - expectedEnergy += 0.5*(r12+r13+r23)*(c[i]+c[j]+c[k]); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testTypeFilters() { - // Create a system. - - System system; - for (int i = 0; i < 5; i++) - system.addParticle(1.0); - CustomManyParticleForce* force = new CustomManyParticleForce(3, "c1*(distance(p1,p2)+distance(p1,p3))"); - force->addPerParticleParameter("c"); - double c[] = {1.0, 2.0, 1.3, 1.5, -2.1}; - int type[] = {0, 1, 0, 1, 5}; - vector params(1); - for (int i = 0; i < 5; i++) { - params[0] = c[i]; - force->addParticle(params, type[i]); - } - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(1, 0, 0)); - positions.push_back(Vec3(0, 1.1, 0.3)); - positions.push_back(Vec3(0.4, 0, -0.8)); - positions.push_back(Vec3(0.2, 0.5, -0.1)); - set f1, f2; - f1.insert(0); - f2.insert(1); - f2.insert(5); - force->setTypeFilter(0, f1); - force->setTypeFilter(1, f2); - force->setTypeFilter(2, f2); - system.addForce(force); - VerletIntegrator integrator(0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - - // See if the energy is correct. - - State state = context.getState(State::Energy); - double expectedEnergy = 0; - int sets[6][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {2,1,3}, {2,1,4}, {2,3,4}}; - for (int i = 0; i < 6; i++) { - int p1 = sets[i][0]; - int p2 = sets[i][1]; - int p3 = sets[i][2]; - Vec3 d12 = positions[p2]-positions[p1]; - Vec3 d13 = positions[p3]-positions[p1]; - double r12 = sqrt(d12.dot(d12)); - double r13 = sqrt(d13.dot(d13)); - expectedEnergy += c[p1]*(r12+r13); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); -} - -void testCentralParticleModeNoCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[12][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {2,0,3}, {2, 1, 3}, {3,0,1}, {3,0,2}, {3,1,2}}; - vector expectedSets(&sets[0], &sets[12]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -void testCentralParticleModeCutoff() { - CustomManyParticleForce* force = new CustomManyParticleForce(3, - "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" - "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); - force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); - force->addGlobalParameter("L", 23.13); - force->addGlobalParameter("eps", 25.894776); - force->addGlobalParameter("a", 1.8); - force->addGlobalParameter("sigma", 0.23925); - force->addGlobalParameter("gamma", 1.2); - force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); - force->setCutoffDistance(0.155); - vector params; - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - force->addParticle(params); - vector positions; - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(0.1, 0, 0)); - positions.push_back(Vec3(0, 0.11, 0.03)); - positions.push_back(Vec3(0.04, 0, -0.08)); - int sets[8][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {3,0,1}}; - vector expectedSets(&sets[0], &sets[8]); - validateStillingerWeber(force, positions, expectedSets, 2.0); -} - -int main() { - try { - testNoCutoff(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testExclusions(); - testAllTerms(); - testParameters(); - testTabulatedFunctions(); - testTypeFilters(); - testCentralParticleModeNoCutoff(); - testCentralParticleModeCutoff(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceCustomNonbondedForce.cpp b/platforms/reference/tests/TestReferenceCustomNonbondedForce.cpp index f922c3ffe53606f90afad9434306006a358b9f14..3ed4bfcd195810a812f5e11ad774658ed3a7ece0 100644 --- a/platforms/reference/tests/TestReferenceCustomNonbondedForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomNonbondedForce.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,964 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of CustomNonbondedForce. - */ - -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "sfmt/SFMT.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomNonbondedForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include -#include -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSimpleExpression() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("-0.1*r^3"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = 0.1*3*(2*2); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(-0.1*(2*2*2), state.getPotentialEnergy(), TOL); -} - -void testParameters() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("scale*a*(r*b)^3; a=a1*a2; b=c+b1+b2"); - forceField->addPerParticleParameter("a"); - forceField->addPerParticleParameter("b"); - forceField->addGlobalParameter("scale", 3.0); - forceField->addGlobalParameter("c", -1.0); - vector params(2); - params[0] = 1.5; - params[1] = 2.0; - forceField->addParticle(params); - params[0] = 2.0; - params[1] = 3.0; - forceField->addParticle(params); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - context.setParameter("scale", 1.0); - context.setParameter("c", 0.0); - State state = context.getState(State::Forces | State::Energy); - vector forces = state.getForces(); - double force = -3.0*3*5.0*(10*10); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(3.0*(10*10*10), state.getPotentialEnergy(), TOL); - - // Try changing the global parameters and make sure it's still correct. - - context.setParameter("scale", 1.5); - context.setParameter("c", 1.0); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*3.0*3*6.0*(12*12); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*3.0*(12*12*12), state.getPotentialEnergy(), TOL); - - // Try changing the per-particle parameters and make sure it's still correct. - - params[0] = 1.6; - params[1] = 2.1; - forceField->setParticleParameters(0, params); - params[0] = 1.9; - params[1] = 2.8; - forceField->setParticleParameters(1, params); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - forces = state.getForces(); - force = -1.5*1.6*1.9*3*5.9*(11.8*11.8); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(1.5*1.6*1.9*(11.8*11.8*11.8), state.getPotentialEnergy(), TOL); -} - -void testExclusions() { - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("a*r; a=a1+a2"); - nonbonded->addPerParticleParameter("a"); - vector params(1); - vector positions(4); - for (int i = 0; i < 4; i++) { - system.addParticle(1.0); - params[0] = i+1; - nonbonded->addParticle(params); - positions[i] = Vec3(i, 0, 0); - } - nonbonded->addExclusion(0, 1); - nonbonded->addExclusion(1, 2); - nonbonded->addExclusion(2, 3); - nonbonded->addExclusion(0, 2); - nonbonded->addExclusion(1, 3); - system.addForce(nonbonded); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(1+4, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-(1+4), 0, 0), forces[3], TOL); - ASSERT_EQUAL_TOL((1+4)*3.0, state.getPotentialEnergy(), TOL); -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - forceField->setCutoffDistance(2.5); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -1, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2.0+1.0, state.getPotentialEnergy(), TOL); -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - forceField->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - forceField->setCutoffDistance(2.0); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(forceField); - ASSERT(forceField->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2.1, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -2, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(1.9+1+0.9, state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("r"); - nonbonded->addParticle(vector()); - nonbonded->addParticle(vector()); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta/sqrt(delta.dot(delta)); - ASSERT_EQUAL_TOL(distance, state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testContinuous1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 1; i < 30; i++) { - double x = (7.0/30.0)*i; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = (x < 1.0 || x > 6.0 ? 0.0 : -cos(x-1.0)); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - for (int i = 1; i < 20; i++) { - double x = 0.25*i+1.0; - positions[1] = Vec3(x, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); - } -} - -void testContinuous2DFunction() { - const int xsize = 20; - const int ysize = 21; - const double xmin = 0.4; - const double xmax = 1.5; - const double ymin = 0.0; - const double ymax = 2.1; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); - } - } - forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { - energy = sin(0.25*x)*cos(0.33*y)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); - } - } -} - -void testContinuous3DFunction() { - const int xsize = 10; - const int ysize = 11; - const int zsize = 12; - const double xmin = 0.6; - const double xmax = 1.1; - const double ymin = 0.0; - const double ymax = 0.7; - const double zmin = 0.2; - const double zmax = 0.9; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table(xsize*ysize*zsize); - for (int i = 0; i < xsize; i++) { - for (int j = 0; j < ysize; j++) { - for (int k = 0; k < zsize; k++) { - double x = xmin + i*(xmax-xmin)/xsize; - double y = ymin + j*(ymax-ymin)/ysize; - double z = zmin + k*(zmax-zmin)/zsize; - table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); - } - } - } - forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { - for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { - for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { - positions[1] = Vec3(x, 0, 0); - context.setParameter("a", y); - context.setParameter("b", z); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double energy = 1; - double force = 0; - if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { - energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1.0; - force = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); - } - } - } -} - -void testDiscrete1DFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < 21; i++) - table.push_back(sin(0.25*i)); - forceField->addTabulatedFunction("fn", new Discrete1DFunction(table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete2DFunction() { - const int xsize = 10; - const int ysize = 5; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - table.push_back(sin(0.25*i)+cos(0.33*j)); - forceField->addTabulatedFunction("fn", new Discrete2DFunction(xsize, ysize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i%xsize, 0, 0); - context.setPositions(positions); - context.setParameter("a", i/xsize); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testDiscrete3DFunction() { - const int xsize = 8; - const int ysize = 5; - const int zsize = 6; - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); - forceField->addGlobalParameter("a", 0.0); - forceField->addGlobalParameter("b", 0.0); - forceField->addParticle(vector()); - forceField->addParticle(vector()); - vector table; - for (int i = 0; i < xsize; i++) - for (int j = 0; j < ysize; j++) - for (int k = 0; k < zsize; k++) - table.push_back(sin(0.25*i)+cos(0.33*j)+0.12345*k); - forceField->addTabulatedFunction("fn", new Discrete3DFunction(xsize, ysize, zsize, table)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - for (int i = 0; i < (int) table.size(); i++) { - positions[1] = Vec3(i%xsize, 0, 0); - context.setPositions(positions); - context.setParameter("a", (i/xsize)%ysize); - context.setParameter("b", i/(xsize*ysize)); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); - ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); - } -} - -void testCoulombLennardJones() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create two systems: one with a NonbondedForce, and one using a CustomNonbondedForce to implement the same interaction. - - System standardSystem; - System customSystem; - for (int i = 0; i < numParticles; i++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - } - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("q"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - standardNonbonded->addParticle(1.0, 0.2, 0.1); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.1); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - else { - standardNonbonded->addParticle(1.0, 0.2, 0.2); - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - customNonbonded->addParticle(params); - standardNonbonded->addParticle(-1.0, 0.1, 0.2); - params[0] = -1.0; - params[1] = 0.1; - customNonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); - customNonbonded->addExclusion(2*i, 2*i+1); - } - standardNonbonded->setNonbondedMethod(NonbondedForce::NoCutoff); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::NoCutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - ASSERT(!customNonbonded->usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context context1(standardSystem, integrator1, platform); - Context context2(customSystem, integrator2, platform); - context1.setPositions(positions); - context2.setPositions(positions); - context1.setVelocities(velocities); - context2.setVelocities(velocities); - State state1 = context1.getState(State::Forces | State::Energy); - State state2 = context2.getState(State::Forces | State::Energy); - ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); - for (int i = 0; i < numParticles; i++) { - ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); - } -} - -void testSwitchingFunction() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("10/r^2"); - vector params; - nonbonded->addParticle(params); - nonbonded->addParticle(params); - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double expectedEnergy = 10/(r*r); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - -void testLongRangeCorrection() { - // Create a box of particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System standardSystem; - System customSystem; - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - NonbondedForce* standardNonbonded = new NonbondedForce(); - CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6); sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - customNonbonded->addPerParticleParameter("sigma"); - customNonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - int index = 0; - vector params1(2); - params1[0] = 1.1; - params1[1] = 0.5; - vector params2(2); - params2[0] = 1; - params2[1] = 1; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - standardSystem.addParticle(1.0); - customSystem.addParticle(1.0); - if (index%2 == 0) { - standardNonbonded->addParticle(0, params1[0], params1[1]); - customNonbonded->addParticle(params1); - } - else { - standardNonbonded->addParticle(0, params2[0], params2[1]); - customNonbonded->addParticle(params2); - } - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - standardNonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - customNonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - standardNonbonded->setCutoffDistance(cutoff); - customNonbonded->setCutoffDistance(cutoff); - standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - standardNonbonded->setUseDispersionCorrection(true); - customNonbonded->setUseLongRangeCorrection(true); - standardNonbonded->setUseSwitchingFunction(true); - customNonbonded->setUseSwitchingFunction(true); - standardNonbonded->setSwitchingDistance(0.8*cutoff); - customNonbonded->setSwitchingDistance(0.8*cutoff); - standardSystem.addForce(standardNonbonded); - customSystem.addForce(customNonbonded); - - // Compute the correction for the standard force. - - Context context1(standardSystem, integrator1, platform); - context1.setPositions(positions); - double standardEnergy1 = context1.getState(State::Energy).getPotentialEnergy(); - standardNonbonded->setUseDispersionCorrection(false); - context1.reinitialize(); - context1.setPositions(positions); - double standardEnergy2 = context1.getState(State::Energy).getPotentialEnergy(); - - // Compute the correction for the custom force. - - Context context2(customSystem, integrator2, platform); - context2.setPositions(positions); - double customEnergy1 = context2.getState(State::Energy).getPotentialEnergy(); - customNonbonded->setUseLongRangeCorrection(false); - context2.reinitialize(); - context2.setPositions(positions); - double customEnergy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // See if they agree. - - ASSERT_EQUAL_TOL(standardEnergy1-standardEnergy2, customEnergy1-customEnergy2, 1e-4); -} - -void testInteractionGroups() { - const int numParticles = 6; - System system; - VerletIntegrator integrator(0.01); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("v1+v2"); - nonbonded->addPerParticleParameter("v"); - vector params(1, 0.001); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - nonbonded->addParticle(params); - params[0] *= 10; - } - set set1, set2, set3, set4; - set1.insert(2); - set2.insert(0); - set2.insert(1); - set2.insert(2); - set2.insert(3); - set2.insert(4); - set2.insert(5); - nonbonded->addInteractionGroup(set1, set2); // Particle 2 interacts with every other particle. - set3.insert(0); - set3.insert(1); - set4.insert(4); - set4.insert(5); - nonbonded->addInteractionGroup(set3, set4); // Particles 0 and 1 interact with 4 and 5. - nonbonded->addExclusion(1, 2); // Add an exclusion to make sure it gets skipped. - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - context.setPositions(positions); - State state = context.getState(State::Energy); - double expectedEnergy = 331.423; // Each digit is the number of interactions a particle particle is involved in. - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), TOL); -} - -void testLargeInteractionGroup() { - const int numMolecules = 300; - const int numParticles = numMolecules*2; - const double boxSize = 20.0; - - // Create a large system. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - for (int i = 0; i < numParticles; i++) - system.addParticle(1.0); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); - nonbonded->addPerParticleParameter("q"); - nonbonded->addPerParticleParameter("sigma"); - nonbonded->addPerParticleParameter("eps"); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector params(3); - for (int i = 0; i < numMolecules; i++) { - if (i < numMolecules/2) { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.1; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - else { - params[0] = 1.0; - params[1] = 0.2; - params[2] = 0.2; - nonbonded->addParticle(params); - params[0] = -1.0; - params[1] = 0.1; - nonbonded->addParticle(params); - } - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - nonbonded->addExclusion(2*i, 2*i+1); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Compute the forces. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - - // Modify the force so only one particle interacts with everything else. - - set set1, set2; - set1.insert(151); - for (int i = 0; i < numParticles; i++) - set2.insert(i); - nonbonded->addInteractionGroup(set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - - // The force on that one particle should be the same. - - ASSERT_EQUAL_VEC(state1.getForces()[151], state2.getForces()[151], 1e-4); - - // Modify the interaction group so it includes all interactions. This should now reproduce the original forces - // on all atoms. - - for (int i = 0; i < numParticles; i++) - set1.insert(i); - nonbonded->setInteractionGroupParameters(0, set1, set2); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - for (int i = 0; i < numParticles; i++) - ASSERT_EQUAL_VEC(state1.getForces()[i], state3.getForces()[i], 1e-4); -} - -void testInteractionGroupLongRangeCorrection() { - const int numParticles = 10; - const double boxSize = 10.0; - const double cutoff = 0.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - CustomNonbondedForce* nonbonded = new CustomNonbondedForce("c1*c2*r^-4"); - nonbonded->addPerParticleParameter("c"); - vector positions(numParticles); - vector params(1); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - params[0] = (i%2 == 0 ? 1.1 : 2.0); - nonbonded->addParticle(params); - positions[i] = Vec3(0.5*i, 0, 0); - } - nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - - // Setup nonbonded groups. They involve 1 interaction of type AA, - // 2 of type BB, and 5 of type AB. - - set set1, set2, set3, set4, set5; - set1.insert(0); - set1.insert(1); - set1.insert(2); - nonbonded->addInteractionGroup(set1, set1); - set2.insert(3); - set3.insert(4); - set3.insert(6); - set3.insert(8); - nonbonded->addInteractionGroup(set2, set3); - set4.insert(5); - set5.insert(7); - set5.insert(9); - nonbonded->addInteractionGroup(set4, set5); - - // Compute energy with and without the correction. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseLongRangeCorrection(true); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - - // Check the result. - - double sum = (1.1*1.1 + 2*2.0*2.0 + 5*1.1*2.0)*2.0; - int numPairs = (numParticles*(numParticles+1))/2; - double expected = 2*M_PI*numParticles*numParticles*sum/(numPairs*boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy2-energy1, 1e-4); -} - -void testMultipleCutoffs() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - - // Add multiple nonbonded forces that have different cutoffs. - - CustomNonbondedForce* nonbonded1 = new CustomNonbondedForce("2*r"); - nonbonded1->addParticle(vector()); - nonbonded1->addParticle(vector()); - nonbonded1->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded1->setCutoffDistance(2.5); - system.addForce(nonbonded1); - CustomNonbondedForce* nonbonded2 = new CustomNonbondedForce("3*r"); - nonbonded2->addParticle(vector()); - nonbonded2->addParticle(vector()); - nonbonded2->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); - nonbonded2->setCutoffDistance(2.9); - nonbonded2->setForceGroup(1); - system.addForce(nonbonded2); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 0, 0); - for (double r = 2.4; r < 3.2; r += 0.2) { - positions[1][1] = r; - context.setPositions(positions); - double e1 = (r < 2.5 ? 2.0*r : 0.0); - double e2 = (r < 2.9 ? 3.0*r : 0.0); - double f1 = (r < 2.5 ? 2.0 : 0.0); - double f2 = (r < 2.9 ? 3.0 : 0.0); - - // Check the first force. - - State state = context.getState(State::Forces | State::Energy, false, 1); - ASSERT_EQUAL_VEC(Vec3(0, f1, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1, state.getPotentialEnergy(), TOL); - - // Check the second force. - - state = context.getState(State::Forces | State::Energy, false, 2); - ASSERT_EQUAL_VEC(Vec3(0, f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e2, state.getPotentialEnergy(), TOL); - - // Check the sum of both forces. - - state = context.getState(State::Forces | State::Energy); - ASSERT_EQUAL_VEC(Vec3(0, f1+f2, 0), state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, -f1-f2, 0), state.getForces()[1], TOL); - ASSERT_EQUAL_TOL(e1+e2, state.getPotentialEnergy(), TOL); - } -} +#include "ReferenceTests.h" +#include "TestCustomNonbondedForce.h" -int main() { - try { - testSimpleExpression(); - testParameters(); - testExclusions(); - testCutoff(); - testPeriodic(); - testTriclinic(); - testContinuous1DFunction(); - testContinuous2DFunction(); - testContinuous3DFunction(); - testDiscrete1DFunction(); - testDiscrete2DFunction(); - testDiscrete3DFunction(); - testCoulombLennardJones(); - testSwitchingFunction(); - testLongRangeCorrection(); - testInteractionGroups(); - testLargeInteractionGroup(); - testInteractionGroupLongRangeCorrection(); - testMultipleCutoffs(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceCustomTorsionForce.cpp b/platforms/reference/tests/TestReferenceCustomTorsionForce.cpp index b2dcb3e5bf96fd380ad4e1b1b78516e190b80f9f..20516986777bf4e2c3c2844e94f594b47db1fb7e 100644 --- a/platforms/reference/tests/TestReferenceCustomTorsionForce.cpp +++ b/platforms/reference/tests/TestReferenceCustomTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,162 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of CustomTorsionForce. - */ +#include "ReferenceTests.h" +#include "TestCustomTorsionForce.h" -#ifdef WIN32 - #define _USE_MATH_DEFINES // Needed to get M_PI -#endif -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomTorsionForce.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testTorsions() { - // Create a system using a CustomTorsionForce. - - System customSystem; - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - customSystem.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("k*(1+cos(n*theta-theta0))"); - custom->addPerTorsionParameter("theta0"); - custom->addPerTorsionParameter("n"); - custom->addGlobalParameter("k", 0.5); - vector parameters(2); - parameters[0] = 1.5; - parameters[1] = 1; - custom->addTorsion(0, 1, 2, 3, parameters); - parameters[0] = 2.0; - parameters[1] = 2; - custom->addTorsion(1, 2, 3, 4, parameters); - customSystem.addForce(custom); - ASSERT(!custom->usesPeriodicBoundaryConditions()); - ASSERT(!customSystem.usesPeriodicBoundaryConditions()); - - // Create an identical system using a PeriodicTorsionForce. - - System harmonicSystem; - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - harmonicSystem.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); - periodic->addTorsion(0, 1, 2, 3, 1, 1.5, 0.5); - periodic->addTorsion(1, 2, 3, 4, 2, 2.0, 0.5); - harmonicSystem.addForce(periodic); - - // Set the atoms in various positions, and verify that both systems give identical forces and energy. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - vector positions(5); - VerletIntegrator integrator1(0.01); - VerletIntegrator integrator2(0.01); - Context c1(customSystem, integrator1, platform); - Context c2(harmonicSystem, integrator2, platform); - for (int i = 0; i < 50; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - parameters[0] = 1.6; - parameters[1] = 2; - custom->setTorsionParameters(0, 0, 1, 2, 3, parameters); - parameters[0] = 2.1; - parameters[1] = 3; - custom->setTorsionParameters(1, 1, 2, 3, 4, parameters); - custom->updateParametersInContext(c1); - periodic->setTorsionParameters(0, 0, 1, 2, 3, 2, 1.6, 0.5); - periodic->setTorsionParameters(1, 1, 2, 3, 4, 3, 2.1, 0.5); - periodic->updateParametersInContext(c2); - { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - c1.setPositions(positions); - c2.setPositions(positions); - State s1 = c1.getState(State::Forces | State::Energy); - State s2 = c2.getState(State::Forces | State::Energy); - const vector& forces = s1.getForces(); - for (int i = 0; i < customSystem.getNumParticles(); i++) - ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); - ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); - } +void runPlatformTests() { } - -void testRange() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - CustomTorsionForce* custom = new CustomTorsionForce("theta"); - custom->addTorsion(0, 1, 2, 3, vector()); - system.addForce(custom); - - // Set the atoms in various positions, and verify that the angle is always in the expected range. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(4); - VerletIntegrator integrator(0.01); - double minAngle = 1000; - double maxAngle = -1000; - Context context(system, integrator, platform); - for (int i = 0; i < 100; i++) { - for (int j = 0; j < (int) positions.size(); j++) - positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - context.setPositions(positions); - double angle = context.getState(State::Energy).getPotentialEnergy(); - if (angle < minAngle) - minAngle = angle; - if (angle > maxAngle) - maxAngle = angle; - } - ASSERT(minAngle >= -M_PI); - ASSERT(maxAngle <= M_PI); -} - -int main() { - try { - testTorsions(); - testRange(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - - - diff --git a/platforms/reference/tests/TestReferenceEwald.cpp b/platforms/reference/tests/TestReferenceEwald.cpp index 25f8b1898e0729a909fb3ad34a447484f66795dc..eb9e7a3ee9bf8e74bdb88280bcb776bc3cf7caab 100644 --- a/platforms/reference/tests/TestReferenceEwald.cpp +++ b/platforms/reference/tests/TestReferenceEwald.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,441 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the Eewald summation method reference implementation of NonbondedForce. - */ +#include "ReferenceTests.h" +#include "TestEwald.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include "openmm/HarmonicBondForce.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double EWALD_TOL = 1e-5; -const double PME_TOL = 5e-5; - -void testEwaldExact() { - -// Use a NaCl crystal to compare the calculated and Madelung energies - - const int numParticles = 1000; - const double cutoff = 1.0; - const double boxSize = 2.82; - - System system; - for (int i = 0; i < numParticles/2; i++) - system.addParticle(22.99); - for (int i = 0; i < numParticles/2; i++) - system.addParticle(35.45); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(1.0, 1.0,0.0); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(-1.0, 1.0,0.0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - nonbonded->setEwaldErrorTolerance(EWALD_TOL); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - #include "nacl_crystal.dat" - context.setPositions(positions); - - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - -// The potential energy of an ion in a crystal is -// E = - (M*e^2/ 4*pi*epsilon0*a0), -// where -// M : Madelung constant (dimensionless, for FCC cells such as NaCl it is 1.7476) -// e : 1.6022 × 10−19 C -// 4*pi*epsilon0: 1.112 × 10−10 C²/(J m) -// a0 : 0.282 x 10-9 m (perfect cell) -// -// E is then the energy per pair of ions, so for our case -// E has to be divided by 2 (per ion), multiplied by N(avogadro), multiplied by number of particles, and divided by 1000 for kJ - double exactEnergy = - (1.7476 * 1.6022e-19 * 1.6022e-19 * 6.02214e+23 * numParticles) / (1.112e-10 * 0.282e-9 * 2 * 1000); - //cout << "exact\t\t: " << exactEnergy << endl; - //cout << "calc\t\t: " << state.getPotentialEnergy() << endl; - ASSERT_EQUAL_TOL(exactEnergy, state.getPotentialEnergy(), 100*EWALD_TOL); - -} - -void testEwaldPME() { - - double tol = 1e-5; - const double boxSize = 3.00646; - const double cutoff = 1.2; - const int numParticles = 894; - -// Use amorphous NaCl system -// The particles are simple charges, no VdW interactions - - System system; - for (int i = 0; i < numParticles/2; i++) - system.addParticle(22.99); - for (int i = 0; i < numParticles/2; i++) - system.addParticle(35.45); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(1.0, 1.0,0.0); - for (int i = 0; i < numParticles/2; i++) - nonbonded->addParticle(-1.0, 1.0,0.0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - nonbonded->setEwaldErrorTolerance(EWALD_TOL); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - #include "nacl_amorph.dat" - context.setPositions(positions); - - State state1 = context.getState(State::Forces | State::Energy); - const vector& forces1 = state1.getForces(); - -// (1) CHECK EXACT VALUE OF EWALD ENERGY (Against Gromacs output) - - tol = 1e-4; - ASSERT_EQUAL_TOL(-3.82047e+05, state1.getPotentialEnergy(), tol); - -// (2) CHECK WHETHER THE EWALD FORCES ARE THE SAME AS THE GROMACS OUTPUT -// these are forces for alpha: 2.82756, kmax(x/y/z) = 11 - - tol = 1e-2; -// #include "nacl_amorph_GromacsForcesEwald.dat" - -// (3) CHECK SELF-CONSISTENCY - - // Take a small step in the direction of the energy gradient. - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state1.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - - norm = std::sqrt(norm); - const double delta = 1e-2; - double step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state1.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - - // See whether the potential energy changed by the expected amount. - - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state1.getPotentialEnergy())/delta, fabs(EWALD_TOL*state2.getPotentialEnergy()/(state2.getPotentialEnergy()-state1.getPotentialEnergy()))) - -// (4) CHECK EXACT VALUE OF PME ENERGY - - nonbonded->setNonbondedMethod(NonbondedForce::PME); - nonbonded->setEwaldErrorTolerance(PME_TOL); - context.reinitialize(); - #include "nacl_amorph.dat" - context.setPositions(positions); - State state3 = context.getState(State::Forces | State::Energy); - -// Gromacs PME energy for the same mesh - tol = 1e-4; - ASSERT_EQUAL_TOL(-3.82047e+05, state3.getPotentialEnergy(), tol); - -// (5) CHECK WHETHER PME FORCES ARE THE SAME AS THE GROMACS OUTPUT USING EWALD - - tol = 1e-1; -// #include "nacl_amorph_GromacsForcesEwald.dat" - -// (6) CHECK PME FOR SELF-CONSISTENCY - - // Take a small step in the direction of the energy gradient. - - norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state3.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - norm = std::sqrt(norm); - step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state3.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - - // See whether the potential energy changed by the expected amount. - - State state4 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state4.getPotentialEnergy()-state3.getPotentialEnergy())/delta, fabs(PME_TOL*state4.getPotentialEnergy()/(state4.getPotentialEnergy()-state3.getPotentialEnergy()))) -} - -void testEwald2Ions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(-1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - nonbonded->setEwaldErrorTolerance(EWALD_TOL); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(3.048000,2.764000,3.156000); - positions[1] = Vec3(2.809000,2.888000,2.571000); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(-123.711, 64.1877, -302.716), forces[0], 10*EWALD_TOL); - ASSERT_EQUAL_VEC(Vec3(123.711, -64.1877, 302.716), forces[1], 10*EWALD_TOL); - ASSERT_EQUAL_TOL(-217.276, state.getPotentialEnergy(), 10*EWALD_TOL); -} - -void testWaterSystem() { - System system; - static int numParticles = 648; - const double boxSize = 1.86206; - - for (int i = 0 ; i < numParticles ; i++) - { - system.addParticle(1.0); - } - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0 ; i < numParticles/3 ; i++) - { - nonbonded->addParticle(-0.82, 1, 0); - nonbonded->addParticle(0.41, 1, 0); - nonbonded->addParticle(0.41, 1, 0); - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 0.8; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - nonbonded->setEwaldErrorTolerance(EWALD_TOL); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(numParticles); - #include "water.dat" - context.setPositions(positions); - State state1 = context.getState(State::Forces | State::Energy); - const vector& forces = state1.getForces(); - -// Take a small step in the direction of the energy gradient. - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state1.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - - - norm = std::sqrt(norm); - const double delta = 1e-3; - double step = delta/norm; - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state1.getForces()[i]; - positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - } - context.setPositions(positions); - - // See whether the potential energy changed by the expected amount. - - nonbonded->setNonbondedMethod(NonbondedForce::Ewald); - State state2 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state1.getPotentialEnergy())/delta, 0.01) - - -} - -void testTriclinic() { - // Create a triclinic box containing eight particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(2.5, 0, 0), Vec3(0.5, 3.0, 0), Vec3(0.7, 0.9, 3.5)); - for (int i = 0; i < 8; i++) - system.addParticle(1.0); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - force->setNonbondedMethod(NonbondedForce::PME); - force->setCutoffDistance(1.0); - force->setPMEParameters(3.45891, 32, 40, 48); - for (int i = 0; i < 4; i++) - force->addParticle(-1, 0.440104, 0.4184); // Cl parameters - for (int i = 0; i < 4; i++) - force->addParticle(1, 0.332840, 0.0115897); // Na parameters - vector positions(8); - positions[0] = Vec3(1.744, 2.788, 3.162); - positions[1] = Vec3(1.048, 0.762, 2.340); - positions[2] = Vec3(2.489, 1.570, 2.817); - positions[3] = Vec3(1.027, 1.893, 3.271); - positions[4] = Vec3(0.937, 0.825, 0.009); - positions[5] = Vec3(2.290, 1.887, 3.352); - positions[6] = Vec3(1.266, 1.111, 2.894); - positions[7] = Vec3(0.933, 1.862, 3.490); - - // Compute the forces and energy. - - VerletIntegrator integ(0.001); - Context context(system, integ, platform); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // Compare them to values computed by Gromacs. - - double expectedEnergy = -963.370; - vector expectedForce(8); - expectedForce[0] = Vec3(4.25253e+01, -1.23503e+02, 1.22139e+02); - expectedForce[1] = Vec3(9.74752e+01, 1.68213e+02, 1.93169e+02); - expectedForce[2] = Vec3(-1.50348e+02, 1.29165e+02, 3.70435e+02); - expectedForce[3] = Vec3(9.18644e+02, -3.52571e+00, -1.34772e+03); - expectedForce[4] = Vec3(-1.61193e+02, 9.01528e+01, -7.12904e+01); - expectedForce[5] = Vec3(2.82630e+02, 2.78029e+01, -3.72864e+02); - expectedForce[6] = Vec3(-1.47454e+02, -2.14448e+02, -3.55789e+02); - expectedForce[7] = Vec3(-8.82195e+02, -7.39132e+01, 1.46202e+03); - for (int i = 0; i < 8; i++) { - ASSERT_EQUAL_VEC(expectedForce[i], state.getForces()[i], 1e-4); - } - ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-4); -} - -void testErrorTolerance(NonbondedForce::NonbondedMethod method) { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 5.0; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(method); - - // For various values of the cutoff and error tolerance, see if the actual error is reasonable. - - for (double cutoff = 1.0; cutoff < boxWidth/2; cutoff *= 1.2) { - force->setCutoffDistance(cutoff); - vector refForces; - double norm = 0.0; - for (double tol = 5e-5; tol < 1e-3; tol *= 2.0) { - force->setEwaldErrorTolerance(tol); - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State state = context.getState(State::Forces); - if (refForces.size() == 0) { - refForces = state.getForces(); - for (int i = 0; i < numParticles; i++) - norm += refForces[i].dot(refForces[i]); - norm = sqrt(norm); - } - else { - double diff = 0.0; - for (int i = 0; i < numParticles; i++) { - Vec3 delta = refForces[i]-state.getForces()[i]; - diff += delta.dot(delta); - } - diff = sqrt(diff)/norm; - ASSERT(diff < 2*tol); - } - } - } -} - -void testPMEParameters() { - // Create a cloud of random point charges. - - const int numParticles = 51; - const double boxWidth = 4.7; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); - NonbondedForce* force = new NonbondedForce(); - system.addForce(force); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); - positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); - } - force->setNonbondedMethod(NonbondedForce::PME); - - // Compute the energy with an error tolerance of 1e-3. - - force->setEwaldErrorTolerance(1e-3); - VerletIntegrator integrator1(0.01); - Context context1(system, integrator1, platform); - context1.setPositions(positions); - double energy1 = context1.getState(State::Energy).getPotentialEnergy(); - - // Try again with an error tolerance of 1e-4. - - force->setEwaldErrorTolerance(1e-4); - VerletIntegrator integrator2(0.01); - Context context2(system, integrator2, platform); - context2.setPositions(positions); - double energy2 = context2.getState(State::Energy).getPotentialEnergy(); - - // Now explicitly set the parameters. These should match the values that were - // used for tolerance 1e-3. - - force->setPMEParameters(2.49291157051793, 32, 32, 32); - VerletIntegrator integrator3(0.01); - Context context3(system, integrator3, platform); - context3.setPositions(positions); - double energy3 = context3.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL(energy1, energy3, 1e-6); - ASSERT(fabs((energy1-energy2)/energy1) > 1e-5); -} - -int main() { - try { - testEwaldExact(); - testEwaldPME(); -// testEwald2Ions(); -// testWaterSystem(); - testTriclinic(); - testErrorTolerance(NonbondedForce::Ewald); - testErrorTolerance(NonbondedForce::PME); - testPMEParameters(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceGBSAOBCForce.cpp b/platforms/reference/tests/TestReferenceGBSAOBCForce.cpp index c50c64f961c03a6942911ec79c6e69670ee7d614..d233ee3f0ec954809b0f5b29eb5339003bd19b85 100644 --- a/platforms/reference/tests/TestReferenceGBSAOBCForce.cpp +++ b/platforms/reference/tests/TestReferenceGBSAOBCForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,216 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of GBSAOBCForce. - */ +#include "ReferenceTests.h" +#include "TestGBSAOBCForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/GBSAOBCForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/NonbondedForce.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleParticle() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/forceField->getSoluteDielectric()-1.0/forceField->getSolventDielectric())/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); - - // Change the parameters and see if it is still correct. - - forceField->setParticleParameters(0, 0.4, 0.25, 1); - forceField->updateParametersInContext(context); - state = context.getState(State::Energy); - bornRadius = 0.25-0.009; // dielectric offset - bornEnergy = (-0.4*0.4/(8*PI_M*eps0))*(1.0/forceField->getSoluteDielectric()-1.0/forceField->getSolventDielectric())/bornRadius; - extendedRadius = 0.25+0.14; - nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.25/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testGlobalSettings() { - System system; - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - forceField->addParticle(0.5, 0.15, 1); - const double soluteDielectric = 2.1; - const double solventDielectric = 35.0; - const double surfaceAreaEnergy = 0.75; - forceField->setSoluteDielectric(soluteDielectric); - forceField->setSolventDielectric(solventDielectric); - forceField->setSurfaceAreaEnergy(surfaceAreaEnergy); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(1); - positions[0] = Vec3(0, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Energy); - double bornRadius = 0.15-0.009; // dielectric offset - double eps0 = EPSILON0; - double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/soluteDielectric-1.0/solventDielectric)/bornRadius; - double extendedRadius = 0.15+0.14; // probe radius - double nonpolarEnergy = 4*PI_M*surfaceAreaEnergy*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); - ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); -} - -void testCutoffAndPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* gbsa = new GBSAOBCForce(); - NonbondedForce* nonbonded = new NonbondedForce(); - gbsa->addParticle(-1, 0.15, 1); - nonbonded->addParticle(-1, 1, 0); - gbsa->addParticle(1, 0.15, 1); - nonbonded->addParticle(1, 1, 0); - const double cutoffDistance = 3.0; - const double boxSize = 10.0; - nonbonded->setCutoffDistance(cutoffDistance); - gbsa->setCutoffDistance(cutoffDistance); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(gbsa); - system.addForce(nonbonded); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - - // Calculate the forces for both cutoff and periodic with two different atom positions. - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(!gbsa->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - context.setPositions(positions); - State state1 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - ASSERT(nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(gbsa->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - context.reinitialize(); - context.setPositions(positions); - State state2 = context.getState(State::Forces); - positions[1][0]+= boxSize; - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); - ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(!gbsa->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - context.reinitialize(); - context.setPositions(positions); - State state3 = context.getState(State::Forces); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); - ASSERT(nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(gbsa->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - context.reinitialize(); - context.setPositions(positions); - State state4 = context.getState(State::Forces); - - // All forces should be identical, exception state3 which should be zero. - - ASSERT_EQUAL_VEC(state1.getForces()[0], state2.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state2.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[0], state4.getForces()[0], 0.01); - ASSERT_EQUAL_VEC(state1.getForces()[1], state4.getForces()[1], 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[0], Vec3(0, 0, 0), 0.01); - ASSERT_EQUAL_VEC(state3.getForces()[1], Vec3(0, 0, 0), 0.01); -} - -void testForce() { - const int numParticles = 10; - System system; - LangevinIntegrator integrator(0, 0.1, 0.01); - GBSAOBCForce* forceField = new GBSAOBCForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - forceField->addParticle(i%2 == 0 ? -1 : 1, 0.15, 1); - } - system.addForce(forceField); - Context context(system, integrator, platform); - - // Set random positions for all the particles. - - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < numParticles; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - norm = std::sqrt(norm); - const double delta = 1e-2; - double step = 0.5*delta/norm; - vector positions2(numParticles), positions3(numParticles); - for (int i = 0; i < numParticles; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-3) -} - -int main() { - try { - testSingleParticle(); - testGlobalSettings(); - testCutoffAndPeriodic(); - testForce(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceHarmonicAngleForce.cpp b/platforms/reference/tests/TestReferenceHarmonicAngleForce.cpp index c8b70172560d63993f32b724406732050a5a47e9..cef07b8a033d4d63c2eff7024bde4a8b1e77524c 100644 --- a/platforms/reference/tests/TestReferenceHarmonicAngleForce.cpp +++ b/platforms/reference/tests/TestReferenceHarmonicAngleForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,85 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of HarmonicAngleForce. - */ +#include "ReferenceTests.h" +#include "TestHarmonicAngleForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicAngleForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testAngles() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicAngleForce* forceField = new HarmonicAngleForce(); - forceField->addAngle(0, 1, 2, PI_M/3, 1.1); - forceField->addAngle(1, 2, 3, PI_M/2, 1.2); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(2, 1, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque1 = 1.1*PI_M/6; - double torque2 = 1.2*PI_M/4; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.1*(PI_M/6)*(PI_M/6) + 0.5*1.2*(PI_M/4)*(PI_M/4), state.getPotentialEnergy(), TOL); - } - - // Try changing the angle parameters and make sure it's still correct. - - forceField->setAngleParameters(0, 0, 1, 2, PI_M/3.1, 1.3); - forceField->setAngleParameters(1, 1, 2, 3, PI_M/2.1, 1.4); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta1 = (PI_M/2)-(PI_M/3.1); - double dtheta2 = (3*PI_M/4)-(PI_M/2.1); - double torque1 = 1.3*dtheta1; - double torque2 = 1.4*dtheta2; - ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(0.5*1.3*dtheta1*dtheta1 + 0.5*1.4*dtheta2*dtheta2, state.getPotentialEnergy(), TOL); - } -} - -int main() { - try { - testAngles(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceHarmonicBondForce.cpp b/platforms/reference/tests/TestReferenceHarmonicBondForce.cpp index cccf3c4f3d4723838d33cd40a3afc2c5551f3132..6c51f37f37c837a2e62d3dd65e376a54938fd20a 100644 --- a/platforms/reference/tests/TestReferenceHarmonicBondForce.cpp +++ b/platforms/reference/tests/TestReferenceHarmonicBondForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,79 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of HarmonicBondForce. - */ +#include "ReferenceTests.h" +#include "TestHarmonicBondForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testBonds() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 0.8); - forceField->addBond(1, 2, 1.2, 0.7); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 2, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); - } - - // Try changing the bond parameters and make sure it's still correct. - - forceField->setBondParameters(0, 0, 1, 1.6, 0.9); - forceField->setBondParameters(1, 1, 2, 1.3, 0.8); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); - ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); - ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); - } -} - -int main() { - try { - cout << "Running test..." << endl; - testBonds(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - cout << "FAIL - ERROR. Test failed." << endl; - return 1; - } - cout << "PASS - Test succeeded." << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceLangevinIntegrator.cpp b/platforms/reference/tests/TestReferenceLangevinIntegrator.cpp index c2ccefe205a3cfcc97b9e1f9c0b85657cce90747..d1ae238b8e9a39f70eb00dc3ce06b3441f6af4c3 100644 --- a/platforms/reference/tests/TestReferenceLangevinIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,248 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of LangevinIntegrator. - */ +#include "ReferenceTests.h" +#include "TestLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - LangevinIntegrator integrator(0, 0.1, 0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Not set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 10000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(1); - } - ke /= 10000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt(10000.0)); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - LangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double collisionFreq = 10.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.01); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -int main() { - try { - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceLocalEnergyMinimizer.cpp b/platforms/reference/tests/TestReferenceLocalEnergyMinimizer.cpp index 44e2da4131013df56f72fd4bad47fdd31226b25f..23df183f1b9ff8d139b5bf47b3e38e89a7465ceb 100644 --- a/platforms/reference/tests/TestReferenceLocalEnergyMinimizer.cpp +++ b/platforms/reference/tests/TestReferenceLocalEnergyMinimizer.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,185 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -#include "openmm/internal/AssertionUtilities.h" -#include "ReferencePlatform.h" -#include "openmm/Context.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/LocalEnergyMinimizer.h" -#include "openmm/NonbondedForce.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -void testHarmonicBonds() { - const int numParticles = 10; - System system; - HarmonicBondForce* bonds = new HarmonicBondForce(); - system.addForce(bonds); - - // Create a chain of particles connected by harmonic bonds. - - vector positions(numParticles); - for (int i = 0; i < numParticles; i++) { - system.addParticle(1.0); - positions[i] = Vec3(i, 0, 0); - if (i > 0) - bonds->addBond(i-1, i, 1+0.1*i, 1); - } - - // Minimize it and check that all bonds are at their equilibrium distances. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - LocalEnergyMinimizer::minimize(context, 1e-5); - State state = context.getState(State::Positions); - for (int i = 1; i < numParticles; i++) { - Vec3 delta = state.getPositions()[i]-state.getPositions()[i-1]; - ASSERT_EQUAL_TOL(1+0.1*i, sqrt(delta.dot(delta)), 1e-4); - } -} - -void testLargeSystem() { - const int numMolecules = 25; - const int numParticles = numMolecules*2; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(1.0, 0.2, 0.2); - positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); - system.addConstraint(2*i, 2*i+1, 1.0); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 2) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} - -void testVirtualSites() { - const int numMolecules = 25; - const int numParticles = numMolecules*3; - const double cutoff = 2.0; - const double boxSize = 4.0; - const double tolerance = 5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->setCutoffDistance(cutoff); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - system.addForce(nonbonded); - - // Create a cloud of molecules. - - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - vector positions(numParticles); - for (int i = 0; i < numMolecules; i++) { - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - nonbonded->addParticle(-1.0, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - nonbonded->addParticle(0.5, 0.2, 0.2); - positions[3*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); - positions[3*i+1] = Vec3(positions[3*i][0]+1.0, positions[3*i][1], positions[3*i][2]); - positions[3*i+2] = Vec3(); - system.addConstraint(3*i, 3*i+1, 1.0); - system.setVirtualSite(3*i+2, new TwoParticleAverageSite(3*i, 3*i+1, 0.5, 0.5)); - } - - // Minimize it and verify that the energy has decreased. - - VerletIntegrator integrator(0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(1e-5); - State initialState = context.getState(State::Forces | State::Energy); - LocalEnergyMinimizer::minimize(context, tolerance); - State finalState = context.getState(State::Forces | State::Energy | State::Positions); - ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); - - // Compute the force magnitude, subtracting off any component parallel to a constraint, and - // check that it satisfies the requested tolerance. - - double forceNorm = 0.0; - for (int i = 0; i < numParticles; i += 3) { - Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; - double distance = sqrt(dir.dot(dir)); - dir *= 1.0/distance; - Vec3 f = finalState.getForces()[i]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - f = finalState.getForces()[i+1]; - f -= dir*dir.dot(f); - forceNorm += f.dot(f); - - // Check the virtual site location. - - ASSERT_EQUAL_VEC((finalState.getPositions()[i+1]+finalState.getPositions()[i])*0.5, finalState.getPositions()[i+2], 1e-5); - } - forceNorm = sqrt(forceNorm/(5*numMolecules)); - ASSERT(forceNorm < 2*tolerance); -} +#include "ReferenceTests.h" +#include "TestLocalEnergyMinimizer.h" -int main() { - try { - testHarmonicBonds(); - testLargeSystem(); - testVirtualSites(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceMonteCarloAnisotropicBarostat.cpp b/platforms/reference/tests/TestReferenceMonteCarloAnisotropicBarostat.cpp index 031b8c9f58fc853093d8a1cea9a61c1077ea64b3..977e30f3e3536be92b62e324de33f85e73eb36e2 100644 --- a/platforms/reference/tests/TestReferenceMonteCarloAnisotropicBarostat.cpp +++ b/platforms/reference/tests/TestReferenceMonteCarloAnisotropicBarostat.cpp @@ -6,8 +6,8 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * - * Authors: Peter Eastman, Lee-Ping Wang * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * * Contributors: * * * * Permission is hereby granted, free of charge, to any person obtaining a * @@ -29,454 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of MonteCarloAnisotropicBarostat. - */ +#include "ReferenceTests.h" +#include "TestMonteCarloAnisotropicBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/MonteCarloAnisotropicBarostat.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], true, true, true, frequency); - system.addForce(barostat); - ASSERT(barostat->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } -} - -void testIdealGasAxis(int axis) { - // Test scaling just one axis. - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - const bool scaleX = (axis == 0); - const bool scaleY = (axis == 1); - const bool scaleZ = (axis == 2); - double boxX; - double boxY; - double boxZ; - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], scaleX, scaleY, scaleZ, frequency); - system.addForce(barostat); - ASSERT(barostat->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - boxX = box[0][0]; - boxY = box[1][1]; - boxZ = box[2][2]; - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - if (!scaleX) { - ASSERT(boxX == initialLength); - } - if (!scaleY) { - ASSERT(boxY == 0.5*initialLength); - } - if (!scaleZ) { - ASSERT(boxZ == 2*initialLength); - } - } -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp, true, true, true, 1); - system.addForce(barostat); - ASSERT(barostat->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } +void runPlatformTests() { } - -void testTriclinic() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temperature = 300.0; - const double initialVolume = numParticles*BOLTZ*temperature/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - Vec3 initialBox[3]; - initialBox[0] = Vec3(initialLength, 0, 0); - initialBox[1] = Vec3(0.2*initialLength, initialLength, 0); - initialBox[2] = Vec3(0.1*initialLength, 0.3*initialLength, initialLength); - system.setDefaultPeriodicBoxVectors(initialBox[0], initialBox[1], initialBox[2]); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt)); - } - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temperature, true, true, true, frequency); - system.addForce(barostat); - - // Run a simulation - - LangevinIntegrator integrator(temperature, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temperature/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - - // Make sure the box vectors have been scaled consistently. - - State state = context.getState(State::Positions); - Vec3 box[3]; - state.getPeriodicBoxVectors(box[0], box[1], box[2]); - double xscale = box[2][0]/(0.1*initialLength); - double yscale = box[2][1]/(0.3*initialLength); - double zscale = box[2][2]/(1.0*initialLength); - for (int i = 0; i < 3; i++) { - ASSERT_EQUAL_VEC(Vec3(xscale*initialBox[i][0], yscale*initialBox[i][1], zscale*initialBox[i][2]), box[i], 1e-5); - } - - // The barostat should have put all particles inside the first periodic box. One integration step - // has happened since then, so they may have moved slightly outside it. - - for (int i = 0; i < numParticles; i++) { - Vec3 pos = state.getPositions()[i]; - ASSERT(pos[2]/box[2][2] > -1 && pos[2]/box[2][2] < 2); - pos -= box[2]*floor(pos[2]/box[2][2]); - ASSERT(pos[1]/box[1][1] > -1 && pos[1]/box[1][1] < 2); - pos -= box[1]*floor(pos[1]/box[1][1]); - ASSERT(pos[0]/box[0][0] > -1 && pos[0]/box[0][0] < 2); - } -} - -/** - * Run a constant pressure simulation on an anisotropic Einstein crystal - * using isotropic and anisotropic barostats. There are a total of 15 simulations: - * - * 1) 3 pressures: 9.0, 10.0, 11.0 bar, for each of the following groups: - * 2) 3 groups of simulations that scale just one axis: x, y, z - * 3) 1 group of simulations that scales all three axes in the anisotropic barostat - * 4) 1 group of simulations that scales all three axes in the isotropic barostat - * - * Results that we will check: - * - * a) In each group of simulations, the volume should decrease with increasing pressure - * b) In the three simulation groups that scale just one axis, the compressibility (i.e. incremental volume change - * with increasing pressure) should go like kx > ky > kz (because the spring constant is largest in the z-direction) - * c) The anisotropic barostat should produce the same result as the isotropic barostat when all three axes are scaled - */ -void testEinsteinCrystal() { - const int numParticles = 64; - const int frequency = 2; - const int equil = 10000; - const int steps = 5000; - const double pressure = 10.0; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp = 300.0; // Only test one temperature since we're looking at three pressures. - const double pres3[] = {2.0, 8.0, 15.0}; - const double initialVolume = numParticles*BOLTZ*temp/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - vector initialPositions(3); - vector results; - // Run four groups of anisotropic simulations; scaling just x, y, z, then all three. - for (int a = 0; a < 4; a++) { - // Test barostat for three different pressures. - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pres3[p], pres3[p], pres3[p]), temp, (a==0||a==3), (a==1||a==3), (a==2||a==3), frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - } - for (int p = 0; p < 3; p++) { - // Create a system of noninteracting particles attached by harmonic springs to their initial positions. - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - // Anisotropic force constants. - CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); - force->addPerParticleParameter("x0"); - force->addPerParticleParameter("y0"); - force->addPerParticleParameter("z0"); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); - initialPositions[0] = positions[i][0]; - initialPositions[1] = positions[i][1]; - initialPositions[2] = positions[i][2]; - force->addParticle(i, initialPositions); - nb->addParticle(0, initialLength/6, 0.1); - } - system.addForce(force); - system.addForce(nb); - // Create the barostat. - MonteCarloBarostat* barostat = new MonteCarloBarostat(pres3[p], temp, frequency); - system.addForce(barostat); - barostat->setTemperature(temp); - LangevinIntegrator integrator(temp, 0.1, 0.001); - Context context(system, integrator, platform); - context.setPositions(positions); - // Let it equilibrate. - integrator.step(equil); - // Now run it for a while and see if the volume is correct. - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - integrator.step(frequency); - } - volume /= steps; - results.push_back(volume); - } - - // Check to see if volumes decrease with increasing pressure. - ASSERT_USUALLY_TRUE(results[0] > results[1]); - ASSERT_USUALLY_TRUE(results[1] > results[2]); - ASSERT_USUALLY_TRUE(results[3] > results[4]); - ASSERT_USUALLY_TRUE(results[4] > results[5]); - ASSERT_USUALLY_TRUE(results[6] > results[7]); - ASSERT_USUALLY_TRUE(results[7] > results[8]); - - // Check to see if incremental volume changes with increasing pressure go like kx > ky > kz. - ASSERT_USUALLY_TRUE((results[0] - results[1]) > (results[3] - results[4])); - ASSERT_USUALLY_TRUE((results[1] - results[2]) > (results[4] - results[5])); - ASSERT_USUALLY_TRUE((results[3] - results[4]) > (results[6] - results[7])); - ASSERT_USUALLY_TRUE((results[4] - results[5]) > (results[7] - results[8])); - - // Check to see if the volumes are equal for isotropic and anisotropic (all axis). - ASSERT_USUALLY_EQUAL_TOL(results[9], results[12], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[10], results[13], 3/std::sqrt((double) steps)); - ASSERT_USUALLY_EQUAL_TOL(results[11], results[14], 3/std::sqrt((double) steps)); -} - -int main() { - try { - testIdealGas(); - testIdealGasAxis(0); - testIdealGasAxis(1); - testIdealGasAxis(2); - testRandomSeed(); - testTriclinic(); - //testEinsteinCrystal(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceMonteCarloBarostat.cpp b/platforms/reference/tests/TestReferenceMonteCarloBarostat.cpp index 65c513e96d960849bd47fdf164364200445fd451..1bd119dfc3eddf1acbf1ba327a32735eec90deae 100644 --- a/platforms/reference/tests/TestReferenceMonteCarloBarostat.cpp +++ b/platforms/reference/tests/TestReferenceMonteCarloBarostat.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2010 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,196 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of MonteCarloBarostat. - */ +#include "ReferenceTests.h" +#include "TestMonteCarloBarostat.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/MonteCarloBarostat.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/VerletIntegrator.h" -#include "sfmt/SFMT.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -void testChangingBoxSize() { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - NonbondedForce* nb = new NonbondedForce(); - nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nb->setCutoffDistance(2.0); - nb->addParticle(1, 0.5, 0.5); - system.addForce(nb); - LangevinIntegrator integrator(300.0, 1.0, 0.01); - Context context(system, integrator, platform); - vector positions; - positions.push_back(Vec3()); - context.setPositions(positions); - Vec3 x, y, z; - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(4, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 5, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 6), z, 0); - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 9)); - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ASSERT_EQUAL_VEC(Vec3(7, 0, 0), x, 0); - ASSERT_EQUAL_VEC(Vec3(0, 8, 0), y, 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 9), z, 0); - - // Shrinking the box too small should produce an exception. - - context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 3.9, 0), Vec3(0, 0, 9)); - bool ok = true; - try { - context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); - ok = false; - } - catch (exception& ex) { - } - ASSERT(ok); -} - -void testIdealGas() { - const int numParticles = 64; - const int frequency = 10; - const int steps = 1000; - const double pressure = 1.5; - const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 - const double temp[] = {300.0, 600.0, 1000.0}; - const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; - const double initialLength = std::pow(initialVolume, 1.0/3.0); - - // Create a gas of noninteracting particles. - - System system; - system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); - vector positions(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(1.0); - positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); - } - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp[0], frequency); - system.addForce(barostat); - ASSERT(barostat->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - - // Test it for three different temperatures. - - for (int i = 0; i < 3; i++) { - barostat->setTemperature(temp[i]); - LangevinIntegrator integrator(temp[i], 0.1, 0.01); - Context context(system, integrator, platform); - context.setPositions(positions); - - // Let it equilibrate. - - integrator.step(10000); - - // Now run it for a while and see if the volume is correct. - - double volume = 0.0; - for (int j = 0; j < steps; ++j) { - Vec3 box[3]; - context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); - volume += box[0][0]*box[1][1]*box[2][2]; - ASSERT_EQUAL_TOL(0.5*box[0][0], box[1][1], 1e-5); - ASSERT_EQUAL_TOL(2*box[0][0], box[2][2], 1e-5); - integrator.step(frequency); - } - volume /= steps; - double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; - ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); - } -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - const double pressure = 1.5; - System system; - system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, 1); - system.addForce(barostat); - ASSERT(barostat->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - barostat->setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - barostat->setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } +void runPlatformTests() { } - -int main() { - try { - testChangingBoxSize(); - testIdealGas(); - testRandomSeed(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceNonbondedForce.cpp b/platforms/reference/tests/TestReferenceNonbondedForce.cpp index 2f3a52e57ee448ba2a201444f0846a27036c142f..20c51385ec9aba6f4796b0d0bf1a9101228a980b 100644 --- a/platforms/reference/tests/TestReferenceNonbondedForce.cpp +++ b/platforms/reference/tests/TestReferenceNonbondedForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,546 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of NonbondedForce. - */ +#include "ReferenceTests.h" +#include "TestNonbondedForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "openmm/HarmonicBondForce.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testCoulomb() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0.5, 1, 0); - forceField->addParticle(-1.5, 1, 0); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double force = ONE_4PI_EPS0*(-0.75)/4.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(-0.75)/2.0, state.getPotentialEnergy(), TOL); -} - -void testLJ() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(0, 1.2, 1); - forceField->addParticle(0, 1.4, 2); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.3/2.0; - double eps = SQRT_TWO; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/2.0; - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_TOL(4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)), state.getPotentialEnergy(), TOL); -} - -void testExclusionsAnd14() { - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < 5; i++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - Context context(system, integrator, platform); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - vector positions(5); - const double r = 1.0; - for (int j = 0; j < 5; ++j) { - nonbonded->setParticleParameters(j, 0, 1.5, 0); - positions[j] = Vec3(0, j, 0); - } - nonbonded->setParticleParameters(0, 0, 1.5, 1); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - positions[i] = Vec3(r, 0, 0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double x = 1.5/r; - double eps = 1.0; - double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - nonbonded->setParticleParameters(0, 2, 1.5, 0); - nonbonded->setParticleParameters(i, 2, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? 4/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - nonbonded->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*4/(r*r); - energy = ONE_4PI_EPS0*4/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testCutoff() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* forceField = new NonbondedForce(); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->addParticle(1.0, 1, 0); - forceField->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - const double cutoff = 2.9; - forceField->setCutoffDistance(cutoff); - const double eps = 50.0; - forceField->setReactionFieldDielectric(eps); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(0, 2, 0); - positions[2] = Vec3(0, 3, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force1 = ONE_4PI_EPS0*(1.0)*(0.25-2.0*krf*2.0); - const double force2 = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(0, -force1, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force1-force2, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, force2, 0), forces[2], TOL); - const double energy1 = ONE_4PI_EPS0*(1.0)*(0.5+krf*4.0-crf); - const double energy2 = ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf); - ASSERT_EQUAL_TOL(energy1+energy2, state.getPotentialEnergy(), TOL); -} - -void testCutoff14() { - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - for (int i = 0; i < 5; i++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.5, 0); - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); - const double cutoff = 3.5; - nonbonded->setCutoffDistance(cutoff); - const double eps = 30.0; - nonbonded->setReactionFieldDielectric(eps); - vector > bonds; - bonds.push_back(pair(0, 1)); - bonds.push_back(pair(1, 2)); - bonds.push_back(pair(2, 3)); - bonds.push_back(pair(3, 4)); - nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); - int first14, second14; - for (int i = 0; i < nonbonded->getNumExceptions(); i++) { - int particle1, particle2; - double chargeProd, sigma, epsilon; - nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); - if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) - first14 = i; - if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) - second14 = i; - } - system.addForce(nonbonded); - ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(5); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(2, 0, 0); - positions[3] = Vec3(3, 0, 0); - positions[4] = Vec3(4, 0, 0); - for (int i = 1; i < 5; ++i) { - - // Test LJ forces - - nonbonded->setParticleParameters(0, 0, 1.5, 1); - for (int j = 1; j < 5; ++j) - nonbonded->setParticleParameters(j, 0, 1.5, 0); - nonbonded->setParticleParameters(i, 0, 1.5, 1); - nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); - context.reinitialize(); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - double r = positions[i][0]; - double x = 1.5/r; - double e = 1.0; - double force = 4.0*e*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; - double energy = 4.0*e*(std::pow(x, 12.0)-std::pow(x, 6.0)); - if (i == 3) { - force *= 0.5; - energy *= 0.5; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - - // Test Coulomb forces - - const double q = 0.7; - nonbonded->setParticleParameters(0, q, 1.5, 0); - nonbonded->setParticleParameters(i, q, 1.5, 0); - nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? q*q/1.2 : 0, 1.5, 0); - nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); - nonbonded->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - const vector& forces2 = state.getForces(); - force = ONE_4PI_EPS0*q*q/(r*r); - energy = ONE_4PI_EPS0*q*q/r; - if (i == 3) { - force /= 1.2; - energy /= 1.2; - } - if (i < 3 || r > cutoff) { - force = 0; - energy = 0; - } - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -void testPeriodic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addException(0, 1, 0.0, 1.0, 0.0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 2.0; - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); - system.addForce(nonbonded); - ASSERT(nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(2, 0, 0); - positions[2] = Vec3(3, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - const vector& forces = state.getForces(); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - const double force = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); - ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); - ASSERT_EQUAL_TOL(2*ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf), state.getPotentialEnergy(), TOL); -} - -void testTriclinic() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - Vec3 a(3.1, 0, 0); - Vec3 b(0.4, 3.5, 0); - Vec3 c(-0.1, -0.5, 4.0); - system.setDefaultPeriodicBoxVectors(a, b, c); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->addParticle(1.0, 1, 0); - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - const double cutoff = 1.5; - nonbonded->setCutoffDistance(cutoff); - system.addForce(nonbonded); - Context context(system, integrator, platform); - vector positions(2); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const double eps = 78.3; - const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); - const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); - for (int iteration = 0; iteration < 50; iteration++) { - // Generate random positions for the two particles. - - positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); - context.setPositions(positions); - - // Loop over all possible periodic copies and find the nearest one. - - Vec3 delta; - double distance2 = 100.0; - for (int i = -1; i < 2; i++) - for (int j = -1; j < 2; j++) - for (int k = -1; k < 2; k++) { - Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; - if (d.dot(d) < distance2) { - delta = d; - distance2 = d.dot(d); - } - } - double distance = sqrt(distance2); - - // See if the force and energy are correct. - - State state = context.getState(State::Forces | State::Energy); - if (distance >= cutoff) { - ASSERT_EQUAL(0.0, state.getPotentialEnergy()); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); - } - else { - const Vec3 force = delta*ONE_4PI_EPS0*(-1.0/(distance*distance*distance)+2.0*krf); - ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(1.0/distance+krf*distance*distance-crf), state.getPotentialEnergy(), TOL); - ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); - ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); - } - } -} - -void testDispersionCorrection() { - // Create a box full of identical particles. - - int gridSize = 5; - int numParticles = gridSize*gridSize*gridSize; - double boxSize = gridSize*0.7; - double cutoff = boxSize/3; - System system; - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions(numParticles); - int index = 0; - for (int i = 0; i < gridSize; i++) - for (int j = 0; j < gridSize; j++) - for (int k = 0; k < gridSize; k++) { - system.addParticle(1.0); - nonbonded->addParticle(0, 1.1, 0.5); - positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); - index++; - } - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - ASSERT(nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - - // See if the correction has the correct value. - - Context context(system, integrator, platform); - context.setPositions(positions); - double energy1 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(false); - context.reinitialize(); - context.setPositions(positions); - double energy2 = context.getState(State::Energy).getPotentialEnergy(); - double term1 = (0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - double term2 = (0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - double expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); - - // Now modify half the particles to be different, and see if it is still correct. - - int numType2 = 0; - for (int i = 0; i < numParticles; i += 2) { - nonbonded->setParticleParameters(i, 0, 1, 1); - numType2++; - } - int numType1 = numParticles-numType2; - nonbonded->updateParametersInContext(context); - energy2 = context.getState(State::Energy).getPotentialEnergy(); - nonbonded->setUseDispersionCorrection(true); - context.reinitialize(); - context.setPositions(positions); - energy1 = context.getState(State::Energy).getPotentialEnergy(); - term1 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 12)/pow(cutoff, 9))/9; - term2 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 6)/pow(cutoff, 3))/3; - term1 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 12)/pow(cutoff, 9))/9; - term2 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 6)/pow(cutoff, 3))/3; - double combinedSigma = 0.5*(1+1.1); - double combinedEpsilon = sqrt(1*0.5); - term1 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 12)/pow(cutoff, 9))/9; - term2 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 6)/pow(cutoff, 3))/3; - term1 /= (numParticles*(numParticles+1))/2; - term2 /= (numParticles*(numParticles+1))/2; - expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); - ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); -} - -void testSwitchingFunction(NonbondedForce::NonbondedMethod method) { - System system; - system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - NonbondedForce* nonbonded = new NonbondedForce(); - nonbonded->addParticle(0, 1.2, 1); - nonbonded->addParticle(0, 1.4, 2); - nonbonded->setNonbondedMethod(method); - nonbonded->setCutoffDistance(2.0); - nonbonded->setUseSwitchingFunction(true); - nonbonded->setSwitchingDistance(1.5); - nonbonded->setUseDispersionCorrection(false); - system.addForce(nonbonded); - if (method == NonbondedForce::PME) { - ASSERT(nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(system.usesPeriodicBoundaryConditions()); - } - else { - ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - } - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - double eps = SQRT_TWO; - - // Compute the interaction at various distances. - - for (double r = 1.0; r < 2.5; r += 0.1) { - positions[1] = Vec3(r, 0, 0); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - - // See if the energy is correct. - - double x = 1.3/r; - double expectedEnergy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); - double switchValue; - if (r <= 1.5) - switchValue = 1; - else if (r >= 2.0) - switchValue = 0; - else { - double t = (r-1.5)/0.5; - switchValue = 1+t*t*t*(-10+t*(15-t*6)); - } - ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); - - // See if the force is the gradient of the energy. - - double delta = 1e-3; - positions[1] = Vec3(r-delta, 0, 0); - context.setPositions(positions); - double e1 = context.getState(State::Energy).getPotentialEnergy(); - positions[1] = Vec3(r+delta, 0, 0); - context.setPositions(positions); - double e2 = context.getState(State::Energy).getPotentialEnergy(); - ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); - } -} - -int main() { - try { - testCoulomb(); - testLJ(); - testExclusionsAnd14(); - testCutoff(); - testCutoff14(); - testPeriodic(); - testTriclinic(); - testDispersionCorrection(); - testSwitchingFunction(NonbondedForce::CutoffNonPeriodic); - testSwitchingFunction(NonbondedForce::PME); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferencePeriodicTorsionForce.cpp b/platforms/reference/tests/TestReferencePeriodicTorsionForce.cpp index ba7580b6c459e24863d4b167f03e5e5b4d455f87..c872e849c30d46e7172e5379b031e587bcf58552 100644 --- a/platforms/reference/tests/TestReferencePeriodicTorsionForce.cpp +++ b/platforms/reference/tests/TestReferencePeriodicTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,80 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of PeriodicTorsionForce. - */ +#include "ReferenceTests.h" +#include "TestPeriodicTorsionForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/PeriodicTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testPeriodicTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - PeriodicTorsionForce* forceField = new PeriodicTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 0, 2); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double torque = -2*1.1*std::sin(2*PI_M/3); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.1*(1+std::cos(2*PI_M/3)), state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 3, PI_M/3.2, 1.3); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double dtheta = (3*PI_M/2)-(PI_M/3.2); - double torque = -3*1.3*std::sin(dtheta); - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - ASSERT_EQUAL_TOL(1.3*(1+std::cos(dtheta)), state.getPotentialEnergy(), TOL); - } -} - -int main() { - try { - testPeriodicTorsions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceRBTorsionForce.cpp b/platforms/reference/tests/TestReferenceRBTorsionForce.cpp index c7f80b6c9001db9abd79d83a1e1154f1d2d5c833..266f5a5c942d1100d48275caa5242d1015550262 100644 --- a/platforms/reference/tests/TestReferenceRBTorsionForce.cpp +++ b/platforms/reference/tests/TestReferenceRBTorsionForce.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,99 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests all the different force terms in the reference implementation of RBTorsionForce. - */ +#include "ReferenceTests.h" +#include "TestRBTorsionForce.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/RBTorsionForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testRBTorsions() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - VerletIntegrator integrator(0.01); - RBTorsionForce* forceField = new RBTorsionForce(); - forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); - system.addForce(forceField); - ASSERT(!forceField->usesPeriodicBoundaryConditions()); - ASSERT(!system.usesPeriodicBoundaryConditions()); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 1, 0); - positions[1] = Vec3(0, 0, 0); - positions[2] = Vec3(1, 0, 0); - positions[3] = Vec3(1, 1, 1); - context.setPositions(positions); - State state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.1*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.1*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } - - // Try changing the torsion parameters and make sure it's still correct. - - forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66); - forceField->updateParametersInContext(context); - state = context.getState(State::Forces | State::Energy); - { - const vector& forces = state.getForces(); - double psi = 0.25*PI_M - PI_M; - double torque = 0.0; - for (int i = 1; i < 6; ++i) { - double c = 0.11*(i+1); - torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); - } - ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); - ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); - ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); - double energy = 0.0; - for (int i = 0; i < 6; ++i) { - double c = 0.11*(i+1); - energy += c*std::pow(std::cos(psi), i); - } - ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); - } -} - -int main() { - try { - testRBTorsions(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceSettle.cpp b/platforms/reference/tests/TestReferenceSettle.cpp index e63892bd96aefcdb6978edbb65f746c3ec02e8f0..658e14be695cc1db53d63ef042b40e31886bf340 100644 --- a/platforms/reference/tests/TestReferenceSettle.cpp +++ b/platforms/reference/tests/TestReferenceSettle.cpp @@ -1,4 +1,3 @@ - /* -------------------------------------------------------------------------- * * OpenMM * * -------------------------------------------------------------------------- * @@ -7,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,88 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of the SETTLE algorithm. - */ - -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/LangevinIntegrator.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -void testConstraints() { - const int numMolecules = 10; - const int numParticles = numMolecules*3; - const int numConstraints = numMolecules*3; - const double temp = 100.0; - System system; - LangevinIntegrator integrator(temp, 2.0, 0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numMolecules; ++i) { - system.addParticle(16.0); - system.addParticle(1.0); - system.addParticle(1.0); - forceField->addParticle(-0.82, 0.317, 0.65); - forceField->addParticle(0.41, 1.0, 0.0); - forceField->addParticle(0.41, 1.0, 0.0); - system.addConstraint(i*3, i*3+1, 0.1); - system.addConstraint(i*3, i*3+2, 0.1); - system.addConstraint(i*3+1, i*3+2, 0.163); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numMolecules; ++i) { - positions[i*3] = Vec3((i%4)*0.4, (i/4)*0.4, 0); - positions[i*3+1] = positions[i*3]+Vec3(0.1, 0, 0); - positions[i*3+2] = positions[i*3]+Vec3(-0.03333, 0.09428, 0); - velocities[i*3] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+1] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - velocities[i*3+2] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - integrator.step(1); - State state = context.getState(State::Positions | State::Forces); - for (int j = 0; j < numConstraints; ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 1e-5); - } - } -} +#include "ReferenceTests.h" +#include "TestSettle.h" -int main(int argc, char* argv[]) { - try { - testConstraints(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceVariableLangevinIntegrator.cpp b/platforms/reference/tests/TestReferenceVariableLangevinIntegrator.cpp index d6fa874fc939587c8e40530578a9190df016e0b1..e201686a23837d34a42ad631861e3a67d9b6a4df 100644 --- a/platforms/reference/tests/TestReferenceVariableLangevinIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceVariableLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,309 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of VariableLangevinIntegrator. - */ +#include "ReferenceTests.h" +#include "TestVariableLangevinIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableLangevinIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableLangevinIntegrator integrator(0, 0.1, 1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a damped harmonic oscillator, so compare it to the analytical solution. - - double freq = std::sqrt(1-0.05*0.05); - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - integrator.step(1); - } - - // Now set the friction to a tiny value and see if it conserves energy. - - integrator.setFriction(5e-5); - context.setPositions(positions); - State state = context.getState(State::Energy); - double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Energy); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } -} - -void testTemperature() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 5.0, 5e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - for (int i = 0; i < numParticles; ++i) - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Let it equilibrate. - - integrator.step(5000); - - // Now run it for a while and see if the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 5000; ++i) { - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - integrator.step(5); - } - ke /= 5000; - double expected = 0.5*numParticles*3*BOLTZ*temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - integrator.setConstraintTolerance(1e-5); - integrator.setRandomNumberSeed(0); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions); - for (int j = 0; j < numParticles-1; ++j) { - Vec3 p1 = state.getPositions()[j]; - Vec3 p2 = state.getPositions()[j+1]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(1.0, dist, 2e-5); - } - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableLangevinIntegrator integrator(300.0, 2.0, 0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -void testRandomSeed() { - const int numParticles = 8; - const double temp = 100.0; - System system; - VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(2.0); - forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); - } - system.addForce(forceField); - vector positions(numParticles); - vector velocities(numParticles); - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); - velocities[i] = Vec3(0, 0, 0); - } - - // Try twice with the same random seed. - - integrator.setRandomNumberSeed(5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state1 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state2 = context.getState(State::Positions); - - // Try twice with a different random seed. - - integrator.setRandomNumberSeed(10); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state3 = context.getState(State::Positions); - context.reinitialize(); - context.setPositions(positions); - context.setVelocities(velocities); - integrator.step(10); - State state4 = context.getState(State::Positions); - - // Compare the results. - - for (int i = 0; i < numParticles; i++) { - for (int j = 0; j < 3; j++) { - ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); - ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); - ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); - } - } -} - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - int numParticles = 0; - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - ++numParticles; - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableLangevinIntegrator integrator(temp, 6.0, 1e-4); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(2.0); - - // Make sure the temperature is correct. - - double ke = 0.0; - for (int i = 0; i < 1000; ++i) { - double t = 2.0 + 0.02 * (i + 1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - ke += state.getKineticEnergy(); - } - ke /= 1000; - double expected = 1.5 * numParticles * BOLTZ * temp; - ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); -} - -int main() { - try { - testSingleBond(); - testTemperature(); - testConstraints(); - testConstrainedMasslessParticles(); - testRandomSeed(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceVariableVerletIntegrator.cpp b/platforms/reference/tests/TestReferenceVariableVerletIntegrator.cpp index 1204004864836a284fc58263a5fdf895ef000a71..dc0abd34ce1bd853e7d871e97cd3eb711720e568 100644 --- a/platforms/reference/tests/TestReferenceVariableVerletIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceVariableVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2009 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,286 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of VariableVerletIntegrator. - */ +#include "ReferenceTests.h" +#include "TestVariableVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VariableVerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VariableVerletIntegrator integrator(1e-6); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); - integrator.step(1); - } - ASSERT(state.getTime() > 1.0); -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 500.0; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - double finalTime = context.getState(State::Positions).getTime(); - ASSERT(finalTime > 0.1); - - // Now try the stepTo() method. - - finalTime += 0.5; - integrator.stepTo(finalTime); - ASSERT_EQUAL(finalTime, context.getState(State::Positions).getTime()); -} - -void testConstrainedClusters() { - const int numParticles = 7; - const double temp = 500.0; - System system; - VariableVerletIntegrator integrator(1e-5); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } - ASSERT(context.getState(State::Positions).getTime() > 0.1); -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VariableVerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +void runPlatformTests() { } - -void testArgonBox() { - const int gridSize = 8; - const double mass = 40.0; // Ar atomic mass - const double temp = 120.0; // K - const double epsilon = BOLTZ * temp; // L-J well depth for Ar - const double sigma = 0.34; // L-J size for Ar in nm - const double density = 0.8; // atoms / sigma^3 - double cellSize = sigma / pow(density, 0.333); - double boxSize = gridSize * cellSize; - double cutoff = 2.0 * sigma; - - // Create a box of argon atoms. - - System system; - NonbondedForce* nonbonded = new NonbondedForce(); - vector positions; - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - const Vec3 half(0.5, 0.5, 0.5); - for (int i = 0; i < gridSize; i++) { - for (int j = 0; j < gridSize; j++) { - for (int k = 0; k < gridSize; k++) { - system.addParticle(mass); - nonbonded->addParticle(0, sigma, epsilon); - positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); - } - } - } - - nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); - nonbonded->setCutoffDistance(cutoff); - system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); - system.addForce(nonbonded); - - VariableVerletIntegrator integrator(1e-5); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(temp); - - // Equilibrate. - - integrator.stepTo(1.0); - - // Simulate it and see whether energy remains constant. - - State state0 = context.getState(State::Energy); - double initialEnergy = state0.getKineticEnergy() + state0.getPotentialEnergy(); - for (int i = 0; i < 20; i++) { - double t = 1.0 + 0.05*(i+1); - integrator.stepTo(t); - State state = context.getState(State::Energy); - double energy = state.getKineticEnergy() + state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - } -} - -int main() { - try { - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - testArgonBox(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; -} - diff --git a/platforms/reference/tests/TestReferenceVerletIntegrator.cpp b/platforms/reference/tests/TestReferenceVerletIntegrator.cpp index c3eb060e895b34ddc93264b2d5b7f28d6db05edf..48c1a11d8fe3386f130b1f166cf7b1c763136166 100644 --- a/platforms/reference/tests/TestReferenceVerletIntegrator.cpp +++ b/platforms/reference/tests/TestReferenceVerletIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,218 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of VerletIntegrator. - */ +#include "ReferenceTests.h" +#include "TestVerletIntegrator.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/HarmonicBondForce.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "SimTKOpenMMRealType.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -const double TOL = 1e-5; - -void testSingleBond() { - System system; - system.addParticle(2.0); - system.addParticle(2.0); - VerletIntegrator integrator(0.01); - HarmonicBondForce* forceField = new HarmonicBondForce(); - forceField->addBond(0, 1, 1.5, 1); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - - // This is simply a harmonic oscillator, so compare it to the analytical solution. - - const double freq = 1.0;; - State state = context.getState(State::Energy); - const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); - for (int i = 0; i < 1000; ++i) { - state = context.getState(State::Positions | State::Velocities | State::Energy); - double time = state.getTime(); - double expectedDist = 1.5+0.5*std::cos(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); - double expectedSpeed = -0.5*freq*std::sin(freq*time); - ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); - ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); - double energy = state.getKineticEnergy()+state.getPotentialEnergy(); - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstraints() { - const int numParticles = 8; - const double temp = 500.0; - System system; - VerletIntegrator integrator(0.002); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i%2 == 0 ? 5.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - for (int i = 0; i < numParticles-1; ++i) - system.addConstraint(i, i+1, 1.0); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) { - positions[i] = Vec3(i/2, (i+1)/2, 0); - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - } - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getPotentialEnergy()+state.getKineticEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstrainedClusters() { - const int numParticles = 7; - const double temp = 500.0; - System system; - VerletIntegrator integrator(0.001); - integrator.setConstraintTolerance(1e-5); - NonbondedForce* forceField = new NonbondedForce(); - for (int i = 0; i < numParticles; ++i) { - system.addParticle(i > 1 ? 1.0 : 10.0); - forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); - } - system.addConstraint(0, 1, 1.0); - system.addConstraint(0, 2, 1.0); - system.addConstraint(0, 3, 1.0); - system.addConstraint(0, 4, 1.0); - system.addConstraint(1, 5, 1.0); - system.addConstraint(1, 6, 1.0); - system.addConstraint(2, 3, sqrt(2.0)); - system.addConstraint(2, 4, sqrt(2.0)); - system.addConstraint(3, 4, sqrt(2.0)); - system.addConstraint(5, 6, sqrt(2.0)); - system.addForce(forceField); - Context context(system, integrator, platform); - vector positions(numParticles); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(-1, 0, 0); - positions[3] = Vec3(0, 1, 0); - positions[4] = Vec3(0, 0, 1); - positions[5] = Vec3(2, 0, 0); - positions[6] = Vec3(1, 1, 0); - vector velocities(numParticles); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - - for (int i = 0; i < numParticles; ++i) - velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); - context.setPositions(positions); - context.setVelocities(velocities); - - // Simulate it and see whether the constraints remain satisfied. - - double initialEnergy = 0.0; - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); - for (int j = 0; j < system.getNumConstraints(); ++j) { - int particle1, particle2; - double distance; - system.getConstraintParameters(j, particle1, particle2, distance); - Vec3 p1 = state.getPositions()[particle1]; - Vec3 p2 = state.getPositions()[particle2]; - double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); - ASSERT_EQUAL_TOL(distance, dist, 2e-5); - } - double energy = state.getPotentialEnergy()+state.getKineticEnergy(); - if (i == 1) - initialEnergy = energy; - else if (i > 1) - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - integrator.step(1); - } -} - -void testConstrainedMasslessParticles() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - system.addConstraint(0, 1, 1.5); - vector positions(2); - positions[0] = Vec3(-1, 0, 0); - positions[1] = Vec3(1, 0, 0); - VerletIntegrator integrator(0.01); - bool failed = false; - try { - // This should throw an exception. - - Context context(system, integrator, platform); - } - catch (exception& ex) { - failed = true; - } - ASSERT(failed); - - // Now make both particles massless, which should work. - - system.setParticleMass(1, 0.0); - Context context(system, integrator, platform); - context.setPositions(positions); - context.setVelocitiesToTemperature(300.0); - integrator.step(1); - State state = context.getState(State::Velocities | State::Positions); - ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); -} - -int main() { - try { - testSingleBond(); - testConstraints(); - testConstrainedClusters(); - testConstrainedMasslessParticles(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/TestReferenceVirtualSites.cpp b/platforms/reference/tests/TestReferenceVirtualSites.cpp index ff4afab9e5e0f2d86a8ff8423dc55260ad9697a4..57be3478dd350f91353b9c07ef9f8be931d9dd1c 100644 --- a/platforms/reference/tests/TestReferenceVirtualSites.cpp +++ b/platforms/reference/tests/TestReferenceVirtualSites.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2012-2014 Stanford University and the Authors. * + * Portions copyright (c) 2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -29,408 +29,8 @@ * USE OR OTHER DEALINGS IN THE SOFTWARE. * * -------------------------------------------------------------------------- */ -/** - * This tests the reference implementation of virtual sites. - */ +#include "ReferenceTests.h" +#include "TestVirtualSites.h" -#include "openmm/internal/AssertionUtilities.h" -#include "openmm/Context.h" -#include "ReferencePlatform.h" -#include "openmm/CustomBondForce.h" -#include "openmm/CustomExternalForce.h" -#include "openmm/LangevinIntegrator.h" -#include "openmm/NonbondedForce.h" -#include "openmm/System.h" -#include "openmm/VerletIntegrator.h" -#include "openmm/VirtualSite.h" -#include "sfmt/SFMT.h" -#include -#include - -using namespace OpenMM; -using namespace std; - -ReferencePlatform platform; - -/** - * Check that massless particles are handled correctly. - */ -void testMasslessParticle() { - System system; - system.addParticle(0.0); - system.addParticle(1.0); - CustomBondForce* bonds = new CustomBondForce("-1/r"); - system.addForce(bonds); - vector params; - bonds->addBond(0, 1, params); - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - vector positions(2); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - vector velocities(2); - velocities[0] = Vec3(0, 0, 0); - velocities[1] = Vec3(0, 1, 0); - context.setVelocities(velocities); - - // The second particle should move in a circular orbit around the first one. - // Compare it to the analytical solution. - - for (int i = 0; i < 1000; ++i) { - State state = context.getState(State::Positions | State::Velocities | State::Forces); - double time = state.getTime(); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getPositions()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getVelocities()[0], 0.0); - ASSERT_EQUAL_VEC(Vec3(cos(time), sin(time), 0), state.getPositions()[1], 0.01); - ASSERT_EQUAL_VEC(Vec3(-sin(time), cos(time), 0), state.getVelocities()[1], 0.01); - integrator.step(1); - } -} - -/** - * Test a TwoParticleAverageSite virtual site. - */ -void testTwoParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.8, 0.2)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(3); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.8+pos[1]*0.2, pos[2], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.1+0.3*0.8, 0, 0), state.getForces()[0], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.2+0.3*0.2, 0, 0), state.getForces()[1], 1e-10); - integrator.step(1); - } -} - -/** - * Test a ThreeParticleAverageSite virtual site. - */ -void testThreeParticleAverage() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new ThreeParticleAverageSite(0, 1, 2, 0.2, 0.3, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - ASSERT_EQUAL_VEC(pos[0]*0.2+pos[1]*0.3+pos[2]*0.5, pos[3], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4*0.2, 0, 0), state.getForces()[0], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.2+0.4*0.3, 0, 0), state.getForces()[1], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.3+0.4*0.5, 0, 0), state.getForces()[2], 1e-10); - integrator.step(1); - } -} - -/** - * Test an OutOfPlaneSite virtual site. - */ -void testOutOfPlane() { - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new OutOfPlaneSite(0, 1, 2, 0.3, 0.4, 0.5)); - CustomExternalForce* forceField = new CustomExternalForce("-a*x"); - system.addForce(forceField); - forceField->addPerParticleParameter("a"); - vector params(1); - params[0] = 0.1; - forceField->addParticle(0, params); - params[0] = 0.2; - forceField->addParticle(1, params); - params[0] = 0.3; - forceField->addParticle(2, params); - params[0] = 0.4; - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4); - positions[0] = Vec3(0, 0, 0); - positions[1] = Vec3(1, 0, 0); - positions[2] = Vec3(0, 1, 0); - context.setPositions(positions); - context.applyConstraints(0.0001); - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 v12 = pos[1]-pos[0]; - Vec3 v13 = pos[2]-pos[0]; - Vec3 cross = v12.cross(v13); - ASSERT_EQUAL_VEC(pos[0]+v12*0.3+v13*0.4+cross*0.5, pos[3], 1e-10); - const vector& f = state.getForces(); - ASSERT_EQUAL_VEC(Vec3(0.1+0.2+0.3+0.4, 0, 0), f[0]+f[1]+f[2], 1e-10); - Vec3 f2(0.4*0.3, 0.4*0.5*v13[2], -0.4*0.5*v13[1]); - Vec3 f3(0.4*0.4, -0.4*0.5*v12[2], 0.4*0.5*v12[1]); - ASSERT_EQUAL_VEC(Vec3(0.1+0.4, 0, 0)-f2-f3, f[0], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.2, 0, 0)+f2, f[1], 1e-10); - ASSERT_EQUAL_VEC(Vec3(0.3, 0, 0)+f3, f[2], 1e-10); - integrator.step(1); - } -} - -/** - * Test a LocalCoordinatesSite virtual site. - */ -void testLocalCoordinates() { - const Vec3 originWeights(0.2, 0.3, 0.5); - const Vec3 xWeights(-1.0, 0.5, 0.5); - const Vec3 yWeights(0.0, -1.0, 1.0); - const Vec3 localPosition(0.4, 0.3, 0.2); - System system; - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(3, new LocalCoordinatesSite(0, 1, 2, originWeights, xWeights, yWeights, localPosition)); - CustomExternalForce* forceField = new CustomExternalForce("2*x^2+3*y^2+4*z^2"); - system.addForce(forceField); - vector params; - forceField->addParticle(0, params); - forceField->addParticle(1, params); - forceField->addParticle(2, params); - forceField->addParticle(3, params); - LangevinIntegrator integrator(300.0, 0.1, 0.002); - Context context(system, integrator, platform); - vector positions(4), positions2(4), positions3(4); - OpenMM_SFMT::SFMT sfmt; - init_gen_rand(0, sfmt); - for (int i = 0; i < 100; i++) { - // Set the particles at random positions. - - Vec3 xdir, ydir, zdir; - do { - for (int j = 0; j < 3; j++) - positions[j] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); - xdir = positions[0]*xWeights[0] + positions[1]*xWeights[1] + positions[2]*xWeights[2]; - ydir = positions[0]*yWeights[0] + positions[1]*yWeights[1] + positions[2]*yWeights[2]; - zdir = xdir.cross(ydir); - if (sqrt(xdir.dot(xdir)) > 0.1 && sqrt(ydir.dot(ydir)) > 0.1 && sqrt(zdir.dot(zdir)) > 0.1) - break; // These positions give a reasonable coordinate system. - } while (true); - context.setPositions(positions); - context.applyConstraints(0.0001); - - // See if the virtual site is positioned correctly. - - State state = context.getState(State::Positions | State::Forces); - const vector& pos = state.getPositions(); - Vec3 origin = pos[0]*originWeights[0] + pos[1]*originWeights[1] + pos[2]*originWeights[2]; - xdir /= sqrt(xdir.dot(xdir)); - zdir /= sqrt(zdir.dot(zdir)); - ydir = zdir.cross(xdir); - ASSERT_EQUAL_VEC(origin+xdir*localPosition[0]+ydir*localPosition[1]+zdir*localPosition[2], pos[3], 1e-10); - - // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. - - double norm = 0.0; - for (int i = 0; i < 3; ++i) { - Vec3 f = state.getForces()[i]; - norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; - } - norm = std::sqrt(norm); - const double delta = 1e-2; - double step = 0.5*delta/norm; - for (int i = 0; i < 3; ++i) { - Vec3 p = positions[i]; - Vec3 f = state.getForces()[i]; - positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); - positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); - } - context.setPositions(positions2); - context.applyConstraints(0.0001); - State state2 = context.getState(State::Energy); - context.setPositions(positions3); - context.applyConstraints(0.0001); - State state3 = context.getState(State::Energy); - ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-3) - } -} - -/** - * Make sure that energy, linear momentum, and angular momentum are all conserved - * when using virtual sites. - */ -void testConservationLaws() { - System system; - NonbondedForce* forceField = new NonbondedForce(); - system.addForce(forceField); - vector positions; - - // Create a linear molecule with a TwoParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.4, 0.6)); - system.addConstraint(0, 1, 2.0); - for (int i = 0; i < 3; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i, j, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 0)); - positions.push_back(Vec3(2, 0, 0)); - positions.push_back(Vec3()); - - // Create a planar molecule with a ThreeParticleAverage virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(6, new ThreeParticleAverageSite(3, 4, 5, 0.3, 0.5, 0.2)); - system.addConstraint(3, 4, 1.0); - system.addConstraint(3, 5, 1.0); - system.addConstraint(4, 5, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+3, j+3, 0, 1, 0); - } - positions.push_back(Vec3(0, 0, 1)); - positions.push_back(Vec3(1, 0, 1)); - positions.push_back(Vec3(0, 1, 1)); - positions.push_back(Vec3()); - - // Create a tetrahedral molecule with an OutOfPlane virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(10, new OutOfPlaneSite(7, 8, 9, 0.3, 0.5, 0.2)); - system.addConstraint(7, 8, 1.0); - system.addConstraint(7, 9, 1.0); - system.addConstraint(8, 9, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+7, j+7, 0, 1, 0); - } - positions.push_back(Vec3(1, 0, -1)); - positions.push_back(Vec3(2, 0, -1)); - positions.push_back(Vec3(1, 1, -1)); - positions.push_back(Vec3()); - - // Create a molecule with a LocalCoordinatesSite virtual site. - - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(1.0); - system.addParticle(0.0); - system.setVirtualSite(14, new LocalCoordinatesSite(11, 12, 13, Vec3(0.3, 0.3, 0.4), Vec3(1.0, -0.5, -0.5), Vec3(0, -1.0, 1.0), Vec3(0.2, 0.2, 1.0))); - system.addConstraint(11, 12, 1.0); - system.addConstraint(11, 13, 1.0); - system.addConstraint(12, 13, sqrt(2.0)); - for (int i = 0; i < 4; i++) { - forceField->addParticle(0, 1, 10); - for (int j = 0; j < i; j++) - forceField->addException(i+11, j+11, 0, 1, 0); - } - positions.push_back(Vec3(1, 2, 0)); - positions.push_back(Vec3(2, 2, 0)); - positions.push_back(Vec3(1, 3, 0)); - positions.push_back(Vec3()); - - // Simulate it and check conservation laws. - - VerletIntegrator integrator(0.002); - Context context(system, integrator, platform); - context.setPositions(positions); - context.applyConstraints(0.0001); - int numParticles = system.getNumParticles(); - double initialEnergy; - Vec3 initialMomentum, initialAngularMomentum; - for (int i = 0; i < 1000; i++) { - State state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); - const vector& pos = state.getPositions(); - const vector& vel = state.getVelocities(); - const vector& f = state.getForces(); - double energy = state.getPotentialEnergy(); - for (int j = 0; j < numParticles; j++) { - Vec3 v = vel[j] + f[j]*0.5*integrator.getStepSize(); - energy += 0.5*system.getParticleMass(j)*v.dot(v); - } - if (i == 0) - initialEnergy = energy; - else - ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); - Vec3 momentum; - for (int j = 0; j < numParticles; j++) - momentum += vel[j]*system.getParticleMass(j); - if (i == 0) - initialMomentum = momentum; - else - ASSERT_EQUAL_VEC(initialMomentum, momentum, 1e-10); - Vec3 angularMomentum; - for (int j = 0; j < numParticles; j++) - angularMomentum += pos[j].cross(vel[j])*system.getParticleMass(j); - if (i == 0) - initialAngularMomentum = angularMomentum; - else - ASSERT_EQUAL_VEC(initialAngularMomentum, angularMomentum, 1e-10); - integrator.step(1); - } -} - -int main() { - try { - testMasslessParticle(); - testTwoParticleAverage(); - testThreeParticleAverage(); - testOutOfPlane(); - testLocalCoordinates(); - testConservationLaws(); - } - catch(const exception& e) { - cout << "exception: " << e.what() << endl; - return 1; - } - cout << "Done" << endl; - return 0; +void runPlatformTests() { } diff --git a/platforms/reference/tests/nacl_amorph.dat b/platforms/reference/tests/nacl_amorph.dat deleted file mode 100644 index 7e8cbafdf6d6339aea85d8303ea91c547314f0ed..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/nacl_amorph.dat +++ /dev/null @@ -1,894 +0,0 @@ -positions[0] = Vec3(1.066000,1.628000,0.835000); -positions[1] = Vec3(1.072000,0.428000,0.190000); -positions[2] = Vec3(0.524000,1.442000,1.160000); -positions[3] = Vec3(2.383000,1.524000,1.119000); -positions[4] = Vec3(0.390000,1.441000,0.575000); -positions[5] = Vec3(0.618000,0.399000,0.819000); -positions[6] = Vec3(1.003000,1.257000,1.543000); -positions[7] = Vec3(2.933000,1.569000,0.642000); -positions[8] = Vec3(0.849000,0.739000,0.089000); -positions[9] = Vec3(0.060000,0.794000,0.766000); -positions[10] = Vec3(1.652000,1.405000,1.010000); -positions[11] = Vec3(2.843000,1.533000,1.781000); -positions[12] = Vec3(0.952000,1.309000,0.996000); -positions[13] = Vec3(1.847000,1.402000,0.313000); -positions[14] = Vec3(2.674000,0.083000,1.691000); -positions[15] = Vec3(1.763000,2.104000,0.728000); -positions[16] = Vec3(0.914000,0.574000,0.982000); -positions[17] = Vec3(0.514000,0.078000,0.891000); -positions[18] = Vec3(0.538000,0.766000,1.110000); -positions[19] = Vec3(0.808000,0.676000,0.570000); -positions[20] = Vec3(0.178000,0.014000,0.628000); -positions[21] = Vec3(1.329000,1.333000,0.339000); -positions[22] = Vec3(1.029000,1.678000,0.503000); -positions[23] = Vec3(1.423000,1.767000,1.104000); -positions[24] = Vec3(1.966000,1.051000,0.282000); -positions[25] = Vec3(1.596000,1.971000,0.194000); -positions[26] = Vec3(1.025000,1.043000,2.809000); -positions[27] = Vec3(1.628000,2.614000,0.088000); -positions[28] = Vec3(0.440000,0.606000,0.141000); -positions[29] = Vec3(1.050000,2.821000,2.517000); -positions[30] = Vec3(0.644000,1.604000,0.770000); -positions[31] = Vec3(0.637000,0.917000,0.392000); -positions[32] = Vec3(0.611000,2.768000,0.013000); -positions[33] = Vec3(1.892000,0.660000,0.473000); -positions[34] = Vec3(1.052000,2.081000,0.982000); -positions[35] = Vec3(1.508000,2.300000,0.439000); -positions[36] = Vec3(2.617000,0.328000,1.099000); -positions[37] = Vec3(0.910000,0.040000,0.259000); -positions[38] = Vec3(1.195000,1.494000,1.202000); -positions[39] = Vec3(2.657000,0.997000,0.564000); -positions[40] = Vec3(1.465000,1.580000,0.648000); -positions[41] = Vec3(0.154000,2.538000,1.331000); -positions[42] = Vec3(0.849000,1.476000,1.365000); -positions[43] = Vec3(0.898000,0.987000,1.178000); -positions[44] = Vec3(0.958000,0.656000,1.358000); -positions[45] = Vec3(1.067000,0.934000,0.211000); -positions[46] = Vec3(1.030000,0.319000,1.281000); -positions[47] = Vec3(2.709000,0.807000,0.240000); -positions[48] = Vec3(0.837000,1.362000,0.588000); -positions[49] = Vec3(2.080000,0.791000,2.947000); -positions[50] = Vec3(0.200000,0.266000,1.474000); -positions[51] = Vec3(0.848000,0.379000,1.625000); -positions[52] = Vec3(0.637000,1.071000,0.821000); -positions[53] = Vec3(1.324000,0.757000,2.951000); -positions[54] = Vec3(2.666000,0.935000,1.373000); -positions[55] = Vec3(1.584000,1.025000,1.703000); -positions[56] = Vec3(1.699000,0.636000,0.038000); -positions[57] = Vec3(1.099000,1.644000,1.879000); -positions[58] = Vec3(2.897000,1.302000,1.522000); -positions[59] = Vec3(1.753000,0.949000,2.885000); -positions[60] = Vec3(2.502000,1.321000,0.752000); -positions[61] = Vec3(0.545000,0.193000,1.959000); -positions[62] = Vec3(1.098000,2.646000,1.706000); -positions[63] = Vec3(0.001000,1.205000,0.670000); -positions[64] = Vec3(2.997000,0.061000,1.040000); -positions[65] = Vec3(0.662000,0.828000,1.535000); -positions[66] = Vec3(1.252000,1.246000,0.780000); -positions[67] = Vec3(1.173000,0.472000,0.810000); -positions[68] = Vec3(0.124000,0.622000,2.992000); -positions[69] = Vec3(1.036000,0.883000,0.848000); -positions[70] = Vec3(1.423000,2.146000,1.340000); -positions[71] = Vec3(2.391000,1.136000,1.165000); -positions[72] = Vec3(1.189000,2.961000,0.425000); -positions[73] = Vec3(1.584000,2.500000,0.782000); -positions[74] = Vec3(0.565000,1.122000,1.240000); -positions[75] = Vec3(1.733000,1.716000,1.763000); -positions[76] = Vec3(1.548000,1.522000,0.041000); -positions[77] = Vec3(1.485000,0.561000,0.369000); -positions[78] = Vec3(0.350000,1.661000,0.928000); -positions[79] = Vec3(1.653000,1.223000,0.578000); -positions[80] = Vec3(0.648000,1.349000,0.253000); -positions[81] = Vec3(0.340000,1.820000,0.483000); -positions[82] = Vec3(2.926000,0.119000,1.421000); -positions[83] = Vec3(1.512000,1.084000,0.156000); -positions[84] = Vec3(1.600000,2.115000,1.792000); -positions[85] = Vec3(1.089000,0.934000,1.584000); -positions[86] = Vec3(1.276000,1.104000,1.230000); -positions[87] = Vec3(0.485000,0.305000,0.428000); -positions[88] = Vec3(1.317000,1.261000,1.795000); -positions[89] = Vec3(0.039000,1.413000,1.085000); -positions[90] = Vec3(0.453000,0.701000,0.605000); -positions[91] = Vec3(1.283000,1.937000,0.752000); -positions[92] = Vec3(0.212000,1.416000,1.447000); -positions[93] = Vec3(0.203000,0.358000,0.723000); -positions[94] = Vec3(0.556000,0.445000,1.364000); -positions[95] = Vec3(1.436000,0.861000,0.911000); -positions[96] = Vec3(0.358000,0.966000,0.176000); -positions[97] = Vec3(1.478000,2.715000,0.427000); -positions[98] = Vec3(1.581000,0.575000,0.809000); -positions[99] = Vec3(1.007000,2.153000,2.887000); -positions[100] = Vec3(2.343000,0.663000,2.513000); -positions[101] = Vec3(2.105000,0.649000,1.635000); -positions[102] = Vec3(0.875000,0.743000,2.459000); -positions[103] = Vec3(0.229000,1.315000,1.879000); -positions[104] = Vec3(0.285000,0.935000,1.700000); -positions[105] = Vec3(2.269000,1.284000,2.234000); -positions[106] = Vec3(1.406000,1.149000,2.767000); -positions[107] = Vec3(1.076000,0.220000,1.849000); -positions[108] = Vec3(2.001000,1.532000,2.881000); -positions[109] = Vec3(2.893000,0.485000,1.860000); -positions[110] = Vec3(1.621000,1.786000,2.624000); -positions[111] = Vec3(0.500000,0.616000,1.818000); -positions[112] = Vec3(0.938000,2.978000,2.104000); -positions[113] = Vec3(0.550000,2.081000,0.454000); -positions[114] = Vec3(1.121000,0.685000,2.196000); -positions[115] = Vec3(1.088000,1.385000,2.184000); -positions[116] = Vec3(1.122000,2.705000,2.080000); -positions[117] = Vec3(0.918000,1.767000,2.861000); -positions[118] = Vec3(2.748000,0.232000,2.126000); -positions[119] = Vec3(1.238000,2.766000,0.109000); -positions[120] = Vec3(1.380000,0.785000,1.961000); -positions[121] = Vec3(1.236000,1.757000,0.150000); -positions[122] = Vec3(1.339000,2.187000,2.592000); -positions[123] = Vec3(1.414000,0.342000,2.714000); -positions[124] = Vec3(1.310000,0.770000,2.589000); -positions[125] = Vec3(1.686000,0.765000,2.321000); -positions[126] = Vec3(1.659000,1.367000,2.780000); -positions[127] = Vec3(0.141000,0.095000,1.903000); -positions[128] = Vec3(2.084000,1.002000,2.520000); -positions[129] = Vec3(2.819000,1.286000,2.626000); -positions[130] = Vec3(1.257000,1.044000,2.401000); -positions[131] = Vec3(1.064000,0.546000,2.839000); -positions[132] = Vec3(0.078000,1.246000,0.010000); -positions[133] = Vec3(1.506000,0.420000,2.223000); -positions[134] = Vec3(1.778000,0.699000,1.920000); -positions[135] = Vec3(1.315000,1.721000,2.733000); -positions[136] = Vec3(0.114000,0.281000,0.279000); -positions[137] = Vec3(1.082000,1.421000,2.596000); -positions[138] = Vec3(3.001000,0.592000,2.276000); -positions[139] = Vec3(1.384000,2.227000,2.992000); -positions[140] = Vec3(1.353000,0.044000,1.985000); -positions[141] = Vec3(1.367000,1.832000,2.383000); -positions[142] = Vec3(0.853000,1.119000,2.230000); -positions[143] = Vec3(1.675000,1.482000,2.295000); -positions[144] = Vec3(1.334000,1.890000,1.904000); -positions[145] = Vec3(1.630000,0.140000,2.939000); -positions[146] = Vec3(0.195000,1.290000,2.300000); -positions[147] = Vec3(2.178000,1.173000,3.001000); -positions[148] = Vec3(0.637000,0.655000,2.126000); -positions[149] = Vec3(0.993000,1.796000,2.529000); -positions[150] = Vec3(0.910000,0.701000,1.845000); -positions[151] = Vec3(0.191000,2.128000,0.355000); -positions[152] = Vec3(0.692000,1.163000,2.578000); -positions[153] = Vec3(1.154000,1.052000,1.974000); -positions[154] = Vec3(1.682000,0.335000,2.509000); -positions[155] = Vec3(0.569000,1.032000,1.895000); -positions[156] = Vec3(1.800000,2.796000,1.295000); -positions[157] = Vec3(2.517000,2.347000,2.878000); -positions[158] = Vec3(0.639000,2.470000,1.678000); -positions[159] = Vec3(0.634000,2.006000,1.829000); -positions[160] = Vec3(0.892000,0.215000,0.566000); -positions[161] = Vec3(1.800000,2.143000,1.491000); -positions[162] = Vec3(1.898000,0.226000,2.765000); -positions[163] = Vec3(0.791000,1.738000,0.260000); -positions[164] = Vec3(0.437000,1.740000,2.048000); -positions[165] = Vec3(1.687000,2.438000,1.166000); -positions[166] = Vec3(1.337000,2.304000,1.643000); -positions[167] = Vec3(1.270000,2.397000,1.033000); -positions[168] = Vec3(0.702000,2.429000,0.591000); -positions[169] = Vec3(0.842000,1.976000,0.724000); -positions[170] = Vec3(1.965000,0.095000,1.206000); -positions[171] = Vec3(0.355000,2.710000,0.618000); -positions[172] = Vec3(0.745000,1.434000,2.781000); -positions[173] = Vec3(0.707000,2.171000,1.502000); -positions[174] = Vec3(1.294000,2.696000,0.847000); -positions[175] = Vec3(1.143000,2.075000,0.276000); -positions[176] = Vec3(1.111000,2.474000,0.312000); -positions[177] = Vec3(1.144000,2.316000,0.633000); -positions[178] = Vec3(1.335000,0.292000,0.515000); -positions[179] = Vec3(1.926000,2.813000,2.703000); -positions[180] = Vec3(0.559000,2.314000,2.904000); -positions[181] = Vec3(1.308000,1.605000,1.534000); -positions[182] = Vec3(0.773000,2.913000,1.217000); -positions[183] = Vec3(1.612000,0.082000,1.027000); -positions[184] = Vec3(1.510000,0.287000,1.787000); -positions[185] = Vec3(0.716000,1.424000,1.843000); -positions[186] = Vec3(1.267000,0.685000,1.160000); -positions[187] = Vec3(0.306000,1.653000,1.717000); -positions[188] = Vec3(0.349000,0.020000,1.275000); -positions[189] = Vec3(0.166000,1.979000,0.804000); -positions[190] = Vec3(1.523000,2.992000,0.711000); -positions[191] = Vec3(1.998000,2.146000,0.088000); -positions[192] = Vec3(0.047000,2.513000,0.642000); -positions[193] = Vec3(0.501000,1.793000,1.438000); -positions[194] = Vec3(1.099000,2.010000,1.626000); -positions[195] = Vec3(2.580000,2.854000,1.328000); -positions[196] = Vec3(1.080000,2.779000,1.190000); -positions[197] = Vec3(0.901000,2.561000,0.948000); -positions[198] = Vec3(0.920000,2.990000,0.844000); -positions[199] = Vec3(0.819000,2.924000,1.711000); -positions[200] = Vec3(0.434000,1.516000,0.063000); -positions[201] = Vec3(1.470000,0.058000,0.231000); -positions[202] = Vec3(0.530000,3.005000,1.550000); -positions[203] = Vec3(0.447000,2.330000,1.277000); -positions[204] = Vec3(1.632000,2.683000,1.593000); -positions[205] = Vec3(0.885000,1.835000,2.072000); -positions[206] = Vec3(0.868000,2.601000,1.425000); -positions[207] = Vec3(0.720000,2.242000,0.907000); -positions[208] = Vec3(1.194000,0.144000,1.065000); -positions[209] = Vec3(0.448000,2.485000,0.959000); -positions[210] = Vec3(1.377000,2.694000,1.352000); -positions[211] = Vec3(1.305000,2.928000,2.713000); -positions[212] = Vec3(1.784000,2.456000,1.981000); -positions[213] = Vec3(0.354000,2.136000,1.563000); -positions[214] = Vec3(0.489000,2.000000,1.108000); -positions[215] = Vec3(1.884000,2.221000,0.461000); -positions[216] = Vec3(1.860000,2.540000,0.306000); -positions[217] = Vec3(1.753000,2.335000,2.768000); -positions[218] = Vec3(1.536000,2.441000,2.344000); -positions[219] = Vec3(0.531000,0.025000,2.235000); -positions[220] = Vec3(0.809000,0.011000,2.834000); -positions[221] = Vec3(0.289000,2.614000,2.879000); -positions[222] = Vec3(0.613000,1.891000,2.337000); -positions[223] = Vec3(0.507000,0.037000,2.694000); -positions[224] = Vec3(0.882000,2.185000,2.583000); -positions[225] = Vec3(0.503000,2.051000,2.615000); -positions[226] = Vec3(1.907000,1.956000,2.831000); -positions[227] = Vec3(2.833000,2.769000,1.644000); -positions[228] = Vec3(1.141000,0.113000,2.945000); -positions[229] = Vec3(0.600000,1.338000,2.200000); -positions[230] = Vec3(0.904000,2.360000,1.952000); -positions[231] = Vec3(0.738000,1.568000,2.437000); -positions[232] = Vec3(1.136000,2.535000,2.805000); -positions[233] = Vec3(1.430000,2.767000,2.321000); -positions[234] = Vec3(1.078000,2.470000,2.385000); -positions[235] = Vec3(0.296000,2.376000,2.560000); -positions[236] = Vec3(0.719000,0.300000,0.075000); -positions[237] = Vec3(0.518000,1.911000,0.080000); -positions[238] = Vec3(0.381000,1.570000,2.450000); -positions[239] = Vec3(0.716000,2.581000,2.697000); -positions[240] = Vec3(1.473000,2.617000,1.936000); -positions[241] = Vec3(0.421000,2.449000,0.229000); -positions[242] = Vec3(0.425000,2.817000,1.910000); -positions[243] = Vec3(1.312000,2.294000,2.057000); -positions[244] = Vec3(1.239000,0.007000,1.539000); -positions[245] = Vec3(0.822000,0.379000,2.086000); -positions[246] = Vec3(0.560000,2.562000,2.227000); -positions[247] = Vec3(0.863000,2.417000,0.050000); -positions[248] = Vec3(1.263000,0.151000,2.332000); -positions[249] = Vec3(0.237000,0.208000,2.336000); -positions[250] = Vec3(0.437000,2.370000,1.910000); -positions[251] = Vec3(1.119000,2.058000,2.207000); -positions[252] = Vec3(1.960000,1.749000,0.118000); -positions[253] = Vec3(2.415000,0.870000,2.757000); -positions[254] = Vec3(1.781000,0.342000,0.366000); -positions[255] = Vec3(2.172000,1.279000,1.421000); -positions[256] = Vec3(1.986000,0.715000,1.301000); -positions[257] = Vec3(1.657000,1.804000,0.810000); -positions[258] = Vec3(2.405000,1.202000,0.416000); -positions[259] = Vec3(1.932000,1.457000,0.786000); -positions[260] = Vec3(1.901000,1.271000,1.207000); -positions[261] = Vec3(1.864000,0.301000,0.810000); -positions[262] = Vec3(1.658000,0.673000,1.558000); -positions[263] = Vec3(2.637000,2.247000,0.396000); -positions[264] = Vec3(1.353000,0.369000,1.438000); -positions[265] = Vec3(0.530000,2.688000,1.346000); -positions[266] = Vec3(0.237000,0.485000,1.047000); -positions[267] = Vec3(2.806000,0.601000,0.822000); -positions[268] = Vec3(1.617000,2.018000,2.136000); -positions[269] = Vec3(2.000000,2.898000,0.022000); -positions[270] = Vec3(2.049000,1.883000,1.001000); -positions[271] = Vec3(2.477000,0.355000,1.786000); -positions[272] = Vec3(1.646000,0.983000,1.266000); -positions[273] = Vec3(1.683000,2.097000,1.114000); -positions[274] = Vec3(2.161000,0.921000,1.065000); -positions[275] = Vec3(2.099000,0.463000,1.942000); -positions[276] = Vec3(2.561000,1.638000,0.572000); -positions[277] = Vec3(2.205000,0.395000,1.005000); -positions[278] = Vec3(2.836000,0.203000,0.698000); -positions[279] = Vec3(2.662000,0.909000,0.966000); -positions[280] = Vec3(0.334000,0.350000,2.767000); -positions[281] = Vec3(2.241000,2.934000,1.248000); -positions[282] = Vec3(2.599000,2.953000,0.921000); -positions[283] = Vec3(2.219000,0.262000,0.058000); -positions[284] = Vec3(0.274000,0.656000,1.456000); -positions[285] = Vec3(1.814000,1.008000,0.882000); -positions[286] = Vec3(2.793000,1.395000,0.316000); -positions[287] = Vec3(0.773000,1.753000,1.639000); -positions[288] = Vec3(2.321000,0.994000,1.591000); -positions[289] = Vec3(2.243000,2.255000,1.690000); -positions[290] = Vec3(0.178000,1.342000,0.327000); -positions[291] = Vec3(1.623000,1.756000,1.426000); -positions[292] = Vec3(2.252000,0.109000,0.375000); -positions[293] = Vec3(3.003000,1.895000,1.895000); -positions[294] = Vec3(0.407000,0.831000,2.756000); -positions[295] = Vec3(2.193000,0.956000,0.632000); -positions[296] = Vec3(2.405000,0.641000,1.107000); -positions[297] = Vec3(2.361000,0.958000,0.162000); -positions[298] = Vec3(2.173000,1.544000,0.528000); -positions[299] = Vec3(1.565000,1.380000,1.428000); -positions[300] = Vec3(2.342000,0.538000,0.253000); -positions[301] = Vec3(1.910000,0.701000,0.954000); -positions[302] = Vec3(2.910000,0.288000,2.938000); -positions[303] = Vec3(0.257000,1.189000,0.958000); -positions[304] = Vec3(0.134000,1.775000,1.243000); -positions[305] = Vec3(2.476000,1.583000,1.956000); -positions[306] = Vec3(1.838000,1.791000,2.354000); -positions[307] = Vec3(1.906000,1.338000,1.696000); -positions[308] = Vec3(2.413000,2.869000,0.166000); -positions[309] = Vec3(3.006000,1.038000,1.322000); -positions[310] = Vec3(1.961000,0.962000,1.605000); -positions[311] = Vec3(0.082000,2.857000,0.020000); -positions[312] = Vec3(2.408000,1.499000,0.062000); -positions[313] = Vec3(2.349000,0.267000,1.415000); -positions[314] = Vec3(2.327000,1.717000,2.350000); -positions[315] = Vec3(2.928000,0.810000,1.582000); -positions[316] = Vec3(2.150000,0.336000,0.576000); -positions[317] = Vec3(2.664000,1.085000,2.962000); -positions[318] = Vec3(2.851000,0.670000,1.174000); -positions[319] = Vec3(1.954000,1.013000,1.975000); -positions[320] = Vec3(2.474000,1.542000,1.545000); -positions[321] = Vec3(2.826000,0.455000,1.490000); -positions[322] = Vec3(2.140000,2.826000,0.558000); -positions[323] = Vec3(2.151000,1.684000,1.780000); -positions[324] = Vec3(0.174000,0.673000,0.397000); -positions[325] = Vec3(0.066000,1.708000,0.160000); -positions[326] = Vec3(2.158000,0.303000,2.582000); -positions[327] = Vec3(2.602000,1.611000,2.632000); -positions[328] = Vec3(2.566000,1.138000,2.465000); -positions[329] = Vec3(2.026000,1.443000,2.477000); -positions[330] = Vec3(2.365000,0.309000,2.255000); -positions[331] = Vec3(1.636000,1.107000,2.058000); -positions[332] = Vec3(2.522000,2.584000,2.399000); -positions[333] = Vec3(2.537000,2.900000,2.158000); -positions[334] = Vec3(2.660000,0.537000,2.577000); -positions[335] = Vec3(2.679000,1.158000,1.724000); -positions[336] = Vec3(0.220000,1.894000,2.498000); -positions[337] = Vec3(2.266000,1.248000,1.837000); -positions[338] = Vec3(0.055000,1.656000,2.128000); -positions[339] = Vec3(2.899000,1.902000,2.823000); -positions[340] = Vec3(0.085000,2.994000,2.720000); -positions[341] = Vec3(0.013000,0.889000,2.468000); -positions[342] = Vec3(1.804000,0.372000,1.636000); -positions[343] = Vec3(0.201000,1.616000,2.824000); -positions[344] = Vec3(0.369000,1.273000,2.699000); -positions[345] = Vec3(2.996000,0.355000,2.596000); -positions[346] = Vec3(2.867000,1.314000,2.107000); -positions[347] = Vec3(2.611000,0.563000,2.140000); -positions[348] = Vec3(2.676000,2.954000,2.955000); -positions[349] = Vec3(0.256000,0.848000,2.062000); -positions[350] = Vec3(2.530000,0.028000,2.528000); -positions[351] = Vec3(0.537000,1.273000,1.596000); -positions[352] = Vec3(0.004000,1.004000,0.401000); -positions[353] = Vec3(1.676000,1.060000,2.463000); -positions[354] = Vec3(2.622000,1.473000,2.257000); -positions[355] = Vec3(2.917000,2.991000,2.316000); -positions[356] = Vec3(0.672000,1.123000,2.984000); -positions[357] = Vec3(2.229000,1.806000,2.673000); -positions[358] = Vec3(0.463000,0.951000,2.383000); -positions[359] = Vec3(2.126000,0.049000,2.037000); -positions[360] = Vec3(2.868000,0.876000,2.015000); -positions[361] = Vec3(2.720000,2.582000,0.079000); -positions[362] = Vec3(1.966000,0.693000,2.624000); -positions[363] = Vec3(1.971000,0.398000,2.318000); -positions[364] = Vec3(0.337000,0.630000,2.458000); -positions[365] = Vec3(2.562000,1.044000,2.040000); -positions[366] = Vec3(2.817000,1.485000,2.963000); -positions[367] = Vec3(2.514000,0.621000,2.992000); -positions[368] = Vec3(3.000000,1.551000,2.496000); -positions[369] = Vec3(0.698000,2.167000,2.180000); -positions[370] = Vec3(2.693000,0.849000,2.389000); -positions[371] = Vec3(2.092000,2.565000,2.986000); -positions[372] = Vec3(2.010000,3.001000,0.819000); -positions[373] = Vec3(2.392000,2.622000,1.636000); -positions[374] = Vec3(2.086000,2.325000,1.340000); -positions[375] = Vec3(2.578000,2.971000,0.502000); -positions[376] = Vec3(1.871000,2.789000,2.225000); -positions[377] = Vec3(2.230000,2.985000,1.594000); -positions[378] = Vec3(2.860000,2.788000,0.729000); -positions[379] = Vec3(2.051000,1.928000,1.472000); -positions[380] = Vec3(2.307000,2.219000,1.067000); -positions[381] = Vec3(2.369000,2.572000,1.289000); -positions[382] = Vec3(2.206000,1.924000,0.693000); -positions[383] = Vec3(1.984000,2.058000,2.005000); -positions[384] = Vec3(2.287000,1.854000,0.317000); -positions[385] = Vec3(2.525000,0.345000,0.686000); -positions[386] = Vec3(2.933000,1.920000,1.053000); -positions[387] = Vec3(0.324000,2.324000,0.601000); -positions[388] = Vec3(2.042000,1.576000,1.277000); -positions[389] = Vec3(0.031000,2.376000,0.949000); -positions[390] = Vec3(2.519000,2.250000,1.465000); -positions[391] = Vec3(0.221000,2.722000,1.652000); -positions[392] = Vec3(2.409000,2.361000,2.051000); -positions[393] = Vec3(2.472000,1.917000,1.673000); -positions[394] = Vec3(0.999000,2.715000,0.562000); -positions[395] = Vec3(1.669000,0.017000,1.508000); -positions[396] = Vec3(1.924000,1.777000,0.542000); -positions[397] = Vec3(2.635000,2.634000,1.905000); -positions[398] = Vec3(2.042000,2.628000,1.025000); -positions[399] = Vec3(2.694000,1.974000,2.009000); -positions[400] = Vec3(2.988000,2.221000,1.333000); -positions[401] = Vec3(1.772000,0.196000,1.978000); -positions[402] = Vec3(2.893000,2.961000,0.283000); -positions[403] = Vec3(2.615000,0.261000,0.245000); -positions[404] = Vec3(2.797000,2.521000,1.412000); -positions[405] = Vec3(0.013000,2.497000,0.246000); -positions[406] = Vec3(1.875000,2.861000,1.801000); -positions[407] = Vec3(2.800000,2.617000,1.049000); -positions[408] = Vec3(2.824000,1.858000,1.487000); -positions[409] = Vec3(2.434000,1.868000,1.275000); -positions[410] = Vec3(2.814000,0.526000,0.384000); -positions[411] = Vec3(2.844000,2.545000,2.246000); -positions[412] = Vec3(1.896000,2.587000,0.719000); -positions[413] = Vec3(0.350000,0.055000,0.076000); -positions[414] = Vec3(2.686000,1.784000,0.222000); -positions[415] = Vec3(2.724000,1.604000,0.989000); -positions[416] = Vec3(0.807000,1.761000,1.122000); -positions[417] = Vec3(2.120000,2.382000,2.226000); -positions[418] = Vec3(2.058000,1.587000,2.067000); -positions[419] = Vec3(2.904000,2.571000,2.686000); -positions[420] = Vec3(2.228000,2.910000,2.410000); -positions[421] = Vec3(2.797000,2.142000,0.114000); -positions[422] = Vec3(2.905000,1.875000,0.480000); -positions[423] = Vec3(1.881000,2.565000,2.469000); -positions[424] = Vec3(2.404000,1.929000,2.999000); -positions[425] = Vec3(2.389000,2.814000,2.782000); -positions[426] = Vec3(2.520000,0.301000,2.815000); -positions[427] = Vec3(2.726000,1.907000,2.339000); -positions[428] = Vec3(2.880000,2.273000,2.500000); -positions[429] = Vec3(2.574000,2.045000,2.716000); -positions[430] = Vec3(2.988000,2.288000,2.001000); -positions[431] = Vec3(0.011000,2.341000,2.904000); -positions[432] = Vec3(0.215000,2.265000,2.257000); -positions[433] = Vec3(2.268000,2.311000,0.234000); -positions[434] = Vec3(2.462000,2.621000,0.550000); -positions[435] = Vec3(1.530000,2.540000,2.728000); -positions[436] = Vec3(2.162000,2.306000,2.687000); -positions[437] = Vec3(2.748000,2.301000,1.734000); -positions[438] = Vec3(2.334000,1.976000,2.041000); -positions[439] = Vec3(1.981000,2.076000,2.443000); -positions[440] = Vec3(2.301000,1.367000,2.665000); -positions[441] = Vec3(2.399000,2.164000,2.403000); -positions[442] = Vec3(0.244000,2.713000,2.257000); -positions[443] = Vec3(0.683000,0.488000,2.781000); -positions[444] = Vec3(2.194000,2.711000,1.993000); -positions[445] = Vec3(2.947000,2.848000,2.001000); -positions[446] = Vec3(0.223000,1.981000,2.913000); -positions[447] = Vec3(0.010000,1.226000,0.917000); -positions[448] = Vec3(1.911000,0.426000,0.582000); -positions[449] = Vec3(2.204000,0.015000,0.136000); -positions[450] = Vec3(0.927000,0.138000,1.645000); -positions[451] = Vec3(0.155000,0.885000,1.479000); -positions[452] = Vec3(1.550000,1.933000,1.261000); -positions[453] = Vec3(1.304000,0.407000,0.287000); -positions[454] = Vec3(0.270000,1.384000,2.910000); -positions[455] = Vec3(0.516000,1.817000,1.695000); -positions[456] = Vec3(1.458000,2.879000,1.523000); -positions[457] = Vec3(1.702000,1.670000,0.593000); -positions[458] = Vec3(1.974000,1.380000,0.534000); -positions[459] = Vec3(2.835000,1.185000,0.479000); -positions[460] = Vec3(0.548000,2.979000,1.126000); -positions[461] = Vec3(1.202000,2.174000,1.466000); -positions[462] = Vec3(1.237000,1.701000,0.653000); -positions[463] = Vec3(2.939000,0.761000,0.349000); -positions[464] = Vec3(1.667000,2.119000,0.377000); -positions[465] = Vec3(1.196000,0.552000,1.372000); -positions[466] = Vec3(1.416000,0.901000,1.178000); -positions[467] = Vec3(0.519000,1.577000,2.227000); -positions[468] = Vec3(1.214000,1.281000,1.063000); -positions[469] = Vec3(0.822000,0.433000,1.375000); -positions[470] = Vec3(0.095000,2.760000,0.604000); -positions[471] = Vec3(1.325000,2.144000,1.848000); -positions[472] = Vec3(0.681000,0.896000,1.285000); -positions[473] = Vec3(0.406000,2.936000,0.717000); -positions[474] = Vec3(0.565000,1.852000,0.349000); -positions[475] = Vec3(0.597000,1.651000,1.020000); -positions[476] = Vec3(1.236000,0.170000,1.335000); -positions[477] = Vec3(0.586000,0.441000,1.980000); -positions[478] = Vec3(1.443000,1.208000,1.575000); -positions[479] = Vec3(0.247000,0.243000,0.502000); -positions[480] = Vec3(1.386000,1.564000,0.236000); -positions[481] = Vec3(0.871000,1.063000,0.930000); -positions[482] = Vec3(0.136000,0.992000,0.621000); -positions[483] = Vec3(0.889000,0.986000,0.010000); -positions[484] = Vec3(1.107000,2.731000,1.452000); -positions[485] = Vec3(0.942000,2.471000,0.517000); -positions[486] = Vec3(0.989000,0.652000,0.747000); -positions[487] = Vec3(0.899000,1.235000,2.707000); -positions[488] = Vec3(1.105000,0.684000,0.068000); -positions[489] = Vec3(1.660000,1.235000,2.276000); -positions[490] = Vec3(1.593000,1.883000,1.915000); -positions[491] = Vec3(1.528000,1.613000,0.920000); -positions[492] = Vec3(0.459000,1.046000,1.011000); -positions[493] = Vec3(0.213000,0.612000,0.644000); -positions[494] = Vec3(0.078000,1.392000,1.676000); -positions[495] = Vec3(0.605000,0.491000,0.574000); -positions[496] = Vec3(0.990000,1.586000,1.076000); -positions[497] = Vec3(0.297000,1.434000,1.028000); -positions[498] = Vec3(1.101000,1.471000,1.443000); -positions[499] = Vec3(0.072000,0.139000,1.653000); -positions[500] = Vec3(0.633000,0.884000,0.645000); -positions[501] = Vec3(0.352000,2.841000,1.463000); -positions[502] = Vec3(0.418000,0.774000,0.350000); -positions[503] = Vec3(2.641000,0.198000,0.869000); -positions[504] = Vec3(0.608000,1.341000,0.695000); -positions[505] = Vec3(1.778000,1.151000,1.830000); -positions[506] = Vec3(1.669000,0.342000,2.768000); -positions[507] = Vec3(1.256000,0.994000,0.798000); -positions[508] = Vec3(1.068000,0.375000,1.036000); -positions[509] = Vec3(0.910000,0.758000,1.589000); -positions[510] = Vec3(0.243000,2.452000,0.805000); -positions[511] = Vec3(1.018000,0.764000,1.122000); -positions[512] = Vec3(2.464000,1.089000,1.404000); -positions[513] = Vec3(0.670000,0.564000,0.034000); -positions[514] = Vec3(0.030000,1.296000,1.310000); -positions[515] = Vec3(1.210000,1.785000,1.691000); -positions[516] = Vec3(0.022000,0.620000,0.974000); -positions[517] = Vec3(1.499000,1.277000,2.986000); -positions[518] = Vec3(1.227000,1.896000,1.006000); -positions[519] = Vec3(0.528000,1.022000,1.635000); -positions[520] = Vec3(1.887000,2.670000,0.089000); -positions[521] = Vec3(1.661000,0.825000,0.793000); -positions[522] = Vec3(0.831000,1.494000,0.374000); -positions[523] = Vec3(1.356000,0.613000,0.930000); -positions[524] = Vec3(0.667000,0.600000,0.968000); -positions[525] = Vec3(1.154000,1.702000,2.925000); -positions[526] = Vec3(1.420000,1.581000,1.289000); -positions[527] = Vec3(1.383000,0.041000,0.932000); -positions[528] = Vec3(1.727000,0.140000,1.725000); -positions[529] = Vec3(0.711000,1.215000,2.004000); -positions[530] = Vec3(1.061000,1.067000,1.366000); -positions[531] = Vec3(0.377000,0.597000,1.224000); -positions[532] = Vec3(0.274000,0.719000,1.842000); -positions[533] = Vec3(0.840000,1.658000,1.874000); -positions[534] = Vec3(0.877000,0.290000,0.311000); -positions[535] = Vec3(2.130000,1.153000,1.196000); -positions[536] = Vec3(1.028000,1.379000,0.747000); -positions[537] = Vec3(1.107000,2.450000,2.079000); -positions[538] = Vec3(1.419000,1.333000,0.585000); -positions[539] = Vec3(0.430000,1.305000,1.369000); -positions[540] = Vec3(0.775000,1.363000,1.596000); -positions[541] = Vec3(1.522000,2.009000,0.736000); -positions[542] = Vec3(0.857000,1.722000,0.696000); -positions[543] = Vec3(0.722000,2.831000,1.478000); -positions[544] = Vec3(0.411000,1.673000,0.681000); -positions[545] = Vec3(1.511000,0.456000,0.597000); -positions[546] = Vec3(2.684000,0.820000,2.996000); -positions[547] = Vec3(1.593000,1.713000,2.369000); -positions[548] = Vec3(1.113000,0.803000,1.958000); -positions[549] = Vec3(1.267000,1.095000,0.254000); -positions[550] = Vec3(2.120000,0.540000,2.477000); -positions[551] = Vec3(0.566000,1.409000,2.588000); -positions[552] = Vec3(0.261000,0.872000,2.546000); -positions[553] = Vec3(1.878000,1.446000,2.680000); -positions[554] = Vec3(0.878000,1.606000,2.658000); -positions[555] = Vec3(1.564000,0.749000,1.786000); -positions[556] = Vec3(1.412000,1.942000,2.625000); -positions[557] = Vec3(1.660000,1.114000,2.710000); -positions[558] = Vec3(1.118000,0.813000,2.424000); -positions[559] = Vec3(1.482000,0.893000,2.434000); -positions[560] = Vec3(1.093000,1.129000,1.740000); -positions[561] = Vec3(2.163000,0.849000,2.709000); -positions[562] = Vec3(1.201000,1.429000,1.957000); -positions[563] = Vec3(0.235000,2.258000,2.002000); -positions[564] = Vec3(0.413000,1.444000,0.314000); -positions[565] = Vec3(0.164000,0.450000,2.408000); -positions[566] = Vec3(1.551000,0.851000,0.033000); -positions[567] = Vec3(0.659000,0.228000,2.807000); -positions[568] = Vec3(0.741000,0.131000,2.124000); -positions[569] = Vec3(0.455000,0.567000,2.682000); -positions[570] = Vec3(0.729000,0.971000,2.408000); -positions[571] = Vec3(1.487000,2.820000,0.162000); -positions[572] = Vec3(1.855000,0.700000,2.858000); -positions[573] = Vec3(0.305000,1.074000,1.926000); -positions[574] = Vec3(1.300000,0.153000,1.747000); -positions[575] = Vec3(1.272000,1.249000,2.568000); -positions[576] = Vec3(0.431000,0.743000,2.238000); -positions[577] = Vec3(0.493000,0.240000,0.184000); -positions[578] = Vec3(1.734000,0.506000,2.317000); -positions[579] = Vec3(0.874000,0.631000,2.692000); -positions[580] = Vec3(0.473000,2.790000,2.161000); -positions[581] = Vec3(1.310000,0.571000,2.759000); -positions[582] = Vec3(0.677000,0.798000,1.916000); -positions[583] = Vec3(0.944000,0.442000,1.858000); -positions[584] = Vec3(3.006000,2.098000,2.976000); -positions[585] = Vec3(0.864000,0.592000,2.231000); -positions[586] = Vec3(1.366000,0.611000,2.147000); -positions[587] = Vec3(2.871000,1.217000,2.880000); -positions[588] = Vec3(1.674000,2.664000,2.336000); -positions[589] = Vec3(1.757000,0.879000,2.101000); -positions[590] = Vec3(1.293000,2.939000,2.457000); -positions[591] = Vec3(1.108000,1.131000,2.206000); -positions[592] = Vec3(1.207000,1.658000,2.498000); -positions[593] = Vec3(0.850000,1.373000,2.312000); -positions[594] = Vec3(1.413000,1.060000,1.939000); -positions[595] = Vec3(1.138000,0.140000,2.102000); -positions[596] = Vec3(0.752000,1.307000,1.190000); -positions[597] = Vec3(1.254000,0.942000,2.790000); -positions[598] = Vec3(1.544000,1.614000,2.800000); -positions[599] = Vec3(2.128000,0.302000,2.833000); -positions[600] = Vec3(0.300000,1.744000,0.027000); -positions[601] = Vec3(1.878000,2.986000,2.060000); -positions[602] = Vec3(1.528000,0.233000,2.045000); -positions[603] = Vec3(1.146000,1.817000,2.067000); -positions[604] = Vec3(1.037000,2.746000,0.813000); -positions[605] = Vec3(0.524000,0.610000,1.566000); -positions[606] = Vec3(0.945000,2.964000,0.503000); -positions[607] = Vec3(1.788000,2.565000,0.965000); -positions[608] = Vec3(0.471000,2.510000,0.491000); -positions[609] = Vec3(0.512000,2.043000,1.371000); -positions[610] = Vec3(2.316000,2.423000,1.494000); -positions[611] = Vec3(1.575000,2.394000,2.953000); -positions[612] = Vec3(2.845000,2.869000,0.985000); -positions[613] = Vec3(1.016000,2.335000,1.003000); -positions[614] = Vec3(0.998000,2.830000,1.879000); -positions[615] = Vec3(0.624000,2.508000,0.075000); -positions[616] = Vec3(1.362000,2.808000,2.069000); -positions[617] = Vec3(1.747000,0.068000,0.810000); -positions[618] = Vec3(1.768000,2.355000,0.661000); -positions[619] = Vec3(1.535000,2.410000,2.085000); -positions[620] = Vec3(0.844000,2.004000,1.646000); -positions[621] = Vec3(1.124000,0.280000,0.649000); -positions[622] = Vec3(0.689000,2.170000,0.648000); -positions[623] = Vec3(0.849000,2.666000,1.175000); -positions[624] = Vec3(2.975000,1.963000,1.308000); -positions[625] = Vec3(1.074000,2.082000,0.714000); -positions[626] = Vec3(1.284000,2.651000,1.110000); -positions[627] = Vec3(1.669000,0.205000,0.180000); -positions[628] = Vec3(1.716000,0.047000,1.253000); -positions[629] = Vec3(0.501000,2.241000,1.043000); -positions[630] = Vec3(1.038000,1.833000,0.305000); -positions[631] = Vec3(0.646000,2.431000,1.424000); -positions[632] = Vec3(1.383000,2.059000,2.230000); -positions[633] = Vec3(0.370000,2.566000,1.192000); -positions[634] = Vec3(1.355000,2.006000,0.120000); -positions[635] = Vec3(2.113000,0.075000,0.589000); -positions[636] = Vec3(1.850000,0.448000,1.890000); -positions[637] = Vec3(1.215000,2.704000,0.405000); -positions[638] = Vec3(0.575000,2.997000,1.798000); -positions[639] = Vec3(0.967000,2.586000,2.603000); -positions[640] = Vec3(0.276000,1.669000,1.430000); -positions[641] = Vec3(1.483000,2.284000,1.128000); -positions[642] = Vec3(0.983000,3.003000,1.099000); -positions[643] = Vec3(0.539000,2.222000,1.720000); -positions[644] = Vec3(0.648000,2.826000,2.751000); -positions[645] = Vec3(0.803000,1.994000,0.993000); -positions[646] = Vec3(0.451000,0.216000,1.438000); -positions[647] = Vec3(1.604000,2.512000,0.334000); -positions[648] = Vec3(1.980000,2.022000,0.588000); -positions[649] = Vec3(1.843000,2.834000,1.544000); -positions[650] = Vec3(1.835000,3.005000,2.858000); -positions[651] = Vec3(0.679000,2.499000,0.838000); -positions[652] = Vec3(0.012000,2.637000,1.524000); -positions[653] = Vec3(0.314000,2.065000,0.602000); -positions[654] = Vec3(1.157000,0.004000,0.173000); -positions[655] = Vec3(0.736000,1.705000,1.382000); -positions[656] = Vec3(1.511000,2.736000,0.690000); -positions[657] = Vec3(1.330000,2.541000,1.735000); -positions[658] = Vec3(0.744000,0.170000,0.785000); -positions[659] = Vec3(2.593000,2.794000,0.703000); -positions[660] = Vec3(0.275000,1.872000,1.043000); -positions[661] = Vec3(1.624000,2.608000,1.341000); -positions[662] = Vec3(1.382000,0.122000,2.855000); -positions[663] = Vec3(1.326000,2.434000,0.783000); -positions[664] = Vec3(0.117000,0.116000,1.254000); -positions[665] = Vec3(1.045000,2.970000,2.748000); -positions[666] = Vec3(1.341000,2.692000,2.799000); -positions[667] = Vec3(1.797000,2.586000,2.709000); -positions[668] = Vec3(0.890000,2.484000,1.716000); -positions[669] = Vec3(2.373000,2.558000,1.889000); -positions[670] = Vec3(1.566000,2.323000,2.574000); -positions[671] = Vec3(1.257000,2.280000,0.399000); -positions[672] = Vec3(0.679000,2.130000,2.434000); -positions[673] = Vec3(2.016000,2.334000,2.462000); -positions[674] = Vec3(1.077000,2.213000,2.416000); -positions[675] = Vec3(0.581000,1.950000,2.081000); -positions[676] = Vec3(0.805000,2.315000,2.810000); -positions[677] = Vec3(0.844000,1.787000,2.322000); -positions[678] = Vec3(0.980000,2.205000,0.129000); -positions[679] = Vec3(2.468000,0.603000,2.740000); -positions[680] = Vec3(2.366000,2.403000,2.299000); -positions[681] = Vec3(0.337000,2.487000,2.329000); -positions[682] = Vec3(2.007000,2.793000,2.452000); -positions[683] = Vec3(1.072000,2.571000,0.063000); -positions[684] = Vec3(1.217000,2.283000,2.806000); -positions[685] = Vec3(0.459000,2.477000,2.728000); -positions[686] = Vec3(0.958000,1.975000,2.710000); -positions[687] = Vec3(0.914000,2.111000,2.052000); -positions[688] = Vec3(0.768000,2.958000,0.075000); -positions[689] = Vec3(0.474000,1.805000,2.533000); -positions[690] = Vec3(1.313000,2.552000,2.395000); -positions[691] = Vec3(1.853000,2.014000,2.229000); -positions[692] = Vec3(2.405000,2.230000,2.658000); -positions[693] = Vec3(0.727000,1.781000,0.016000); -positions[694] = Vec3(0.974000,2.791000,2.271000); -positions[695] = Vec3(0.438000,0.096000,2.457000); -positions[696] = Vec3(0.652000,2.392000,2.064000); -positions[697] = Vec3(1.972000,2.209000,2.834000); -positions[698] = Vec3(0.333000,0.141000,2.088000); -positions[699] = Vec3(1.813000,1.952000,0.063000); -positions[700] = Vec3(0.166000,2.838000,1.877000); -positions[701] = Vec3(1.772000,0.487000,0.951000); -positions[702] = Vec3(1.924000,1.404000,1.434000); -positions[703] = Vec3(2.734000,0.348000,1.712000); -positions[704] = Vec3(2.874000,0.729000,1.811000); -positions[705] = Vec3(1.841000,0.877000,1.137000); -positions[706] = Vec3(2.327000,1.491000,1.768000); -positions[707] = Vec3(1.916000,1.483000,1.057000); -positions[708] = Vec3(2.783000,0.850000,0.745000); -positions[709] = Vec3(1.829000,1.526000,0.085000); -positions[710] = Vec3(2.426000,1.082000,0.652000); -positions[711] = Vec3(1.645000,1.241000,1.217000); -positions[712] = Vec3(2.286000,0.725000,0.084000); -positions[713] = Vec3(2.755000,0.691000,1.421000); -positions[714] = Vec3(2.651000,0.591000,1.023000); -positions[715] = Vec3(2.040000,0.863000,0.442000); -positions[716] = Vec3(0.035000,0.109000,2.497000); -positions[717] = Vec3(0.127000,1.410000,0.572000); -positions[718] = Vec3(2.174000,0.357000,0.307000); -positions[719] = Vec3(2.705000,1.508000,0.758000); -positions[720] = Vec3(2.223000,1.407000,2.913000); -positions[721] = Vec3(2.528000,1.722000,1.088000); -positions[722] = Vec3(2.860000,0.345000,0.198000); -positions[723] = Vec3(2.580000,1.789000,1.479000); -positions[724] = Vec3(2.779000,0.295000,1.295000); -positions[725] = Vec3(0.097000,0.434000,2.826000); -positions[726] = Vec3(2.952000,1.654000,1.091000); -positions[727] = Vec3(0.119000,1.878000,0.343000); -positions[728] = Vec3(1.718000,1.173000,0.327000); -positions[729] = Vec3(2.833000,0.016000,0.527000); -positions[730] = Vec3(2.085000,1.779000,2.888000); -positions[731] = Vec3(2.754000,2.952000,1.485000); -positions[732] = Vec3(2.826000,0.935000,1.162000); -positions[733] = Vec3(1.564000,1.585000,1.615000); -positions[734] = Vec3(2.132000,0.645000,1.093000); -positions[735] = Vec3(2.294000,1.490000,1.350000); -positions[736] = Vec3(0.081000,0.490000,1.479000); -positions[737] = Vec3(2.118000,1.165000,1.642000); -positions[738] = Vec3(2.141000,0.121000,1.390000); -positions[739] = Vec3(2.385000,0.389000,1.196000); -positions[740] = Vec3(0.049000,0.166000,0.817000); -positions[741] = Vec3(1.993000,0.806000,1.814000); -positions[742] = Vec3(0.006000,1.450000,0.171000); -positions[743] = Vec3(2.297000,0.428000,0.764000); -positions[744] = Vec3(2.851000,0.469000,2.114000); -positions[745] = Vec3(1.814000,1.957000,0.945000); -positions[746] = Vec3(0.386000,0.327000,0.902000); -positions[747] = Vec3(2.452000,1.070000,1.807000); -positions[748] = Vec3(2.309000,1.537000,2.159000); -positions[749] = Vec3(2.712000,1.497000,2.007000); -positions[750] = Vec3(1.727000,0.924000,1.503000); -positions[751] = Vec3(0.861000,0.801000,0.344000); -positions[752] = Vec3(1.740000,1.245000,0.819000); -positions[753] = Vec3(0.117000,0.042000,0.197000); -positions[754] = Vec3(2.557000,0.996000,0.317000); -positions[755] = Vec3(2.228000,1.588000,2.548000); -positions[756] = Vec3(2.849000,1.557000,2.708000); -positions[757] = Vec3(0.152000,1.107000,0.219000); -positions[758] = Vec3(2.460000,1.318000,1.002000); -positions[759] = Vec3(2.405000,1.436000,0.528000); -positions[760] = Vec3(2.135000,1.179000,2.046000); -positions[761] = Vec3(1.726000,0.588000,0.286000); -positions[762] = Vec3(2.831000,1.053000,1.538000); -positions[763] = Vec3(1.932000,1.556000,1.833000); -positions[764] = Vec3(2.423000,0.900000,1.064000); -positions[765] = Vec3(3.001000,1.807000,0.709000); -positions[766] = Vec3(0.578000,1.095000,0.223000); -positions[767] = Vec3(2.215000,1.160000,0.252000); -positions[768] = Vec3(2.050000,0.921000,0.835000); -positions[769] = Vec3(2.080000,1.682000,0.738000); -positions[770] = Vec3(2.851000,1.753000,0.027000); -positions[771] = Vec3(0.203000,0.509000,0.202000); -positions[772] = Vec3(1.967000,1.018000,0.018000); -positions[773] = Vec3(1.869000,0.878000,2.472000); -positions[774] = Vec3(1.917000,0.228000,2.507000); -positions[775] = Vec3(0.316000,0.795000,2.991000); -positions[776] = Vec3(2.175000,1.229000,2.472000); -positions[777] = Vec3(2.405000,1.062000,2.931000); -positions[778] = Vec3(2.501000,0.511000,2.369000); -positions[779] = Vec3(2.641000,0.819000,2.141000); -positions[780] = Vec3(0.649000,1.384000,3.006000); -positions[781] = Vec3(1.012000,0.329000,2.963000); -positions[782] = Vec3(2.755000,0.350000,2.718000); -positions[783] = Vec3(2.315000,0.153000,2.454000); -positions[784] = Vec3(2.583000,1.696000,2.389000); -positions[785] = Vec3(0.439000,2.593000,1.776000); -positions[786] = Vec3(2.630000,1.390000,0.116000); -positions[787] = Vec3(2.854000,0.669000,2.478000); -positions[788] = Vec3(2.551000,1.342000,2.621000); -positions[789] = Vec3(2.533000,2.734000,2.987000); -positions[790] = Vec3(2.772000,2.446000,2.875000); -positions[791] = Vec3(2.817000,1.051000,2.498000); -positions[792] = Vec3(2.688000,1.404000,1.621000); -positions[793] = Vec3(0.083000,2.737000,2.775000); -positions[794] = Vec3(2.514000,0.322000,2.041000); -positions[795] = Vec3(2.470000,0.900000,2.504000); -positions[796] = Vec3(2.790000,0.444000,0.624000); -positions[797] = Vec3(0.040000,0.840000,2.202000); -positions[798] = Vec3(0.530000,1.067000,2.764000); -positions[799] = Vec3(0.191000,1.385000,2.541000); -positions[800] = Vec3(2.465000,0.363000,0.051000); -positions[801] = Vec3(1.850000,1.902000,2.592000); -positions[802] = Vec3(1.432000,0.306000,2.449000); -positions[803] = Vec3(2.259000,0.489000,1.753000); -positions[804] = Vec3(2.803000,1.118000,1.956000); -positions[805] = Vec3(2.426000,0.147000,1.636000); -positions[806] = Vec3(2.880000,1.846000,2.133000); -positions[807] = Vec3(2.862000,2.110000,1.867000); -positions[808] = Vec3(0.424000,1.184000,2.299000); -positions[809] = Vec3(2.518000,1.218000,2.228000); -positions[810] = Vec3(2.153000,0.834000,1.468000); -positions[811] = Vec3(0.105000,1.397000,2.088000); -positions[812] = Vec3(2.579000,0.601000,0.316000); -positions[813] = Vec3(2.594000,2.106000,2.968000); -positions[814] = Vec3(0.448000,1.435000,1.783000); -positions[815] = Vec3(2.125000,0.299000,2.132000); -positions[816] = Vec3(2.849000,1.402000,2.356000); -positions[817] = Vec3(2.956000,0.091000,2.078000); -positions[818] = Vec3(0.156000,1.696000,2.357000); -positions[819] = Vec3(1.566000,2.211000,1.557000); -positions[820] = Vec3(2.047000,0.194000,0.985000); -positions[821] = Vec3(1.947000,2.680000,0.488000); -positions[822] = Vec3(2.343000,2.796000,1.447000); -positions[823] = Vec3(2.006000,2.332000,0.265000); -positions[824] = Vec3(2.396000,1.834000,0.546000); -positions[825] = Vec3(2.538000,2.059000,2.207000); -positions[826] = Vec3(0.110000,2.360000,0.447000); -positions[827] = Vec3(2.198000,2.448000,1.136000); -positions[828] = Vec3(2.420000,2.121000,1.271000); -positions[829] = Vec3(0.422000,2.192000,0.260000); -positions[830] = Vec3(2.145000,2.767000,2.839000); -positions[831] = Vec3(2.434000,2.398000,0.421000); -positions[832] = Vec3(2.489000,2.175000,1.718000); -positions[833] = Vec3(2.870000,2.527000,0.814000); -positions[834] = Vec3(2.741000,2.016000,0.337000); -positions[835] = Vec3(1.997000,2.574000,2.107000); -positions[836] = Vec3(0.002000,2.128000,0.932000); -positions[837] = Vec3(2.787000,2.375000,0.234000); -positions[838] = Vec3(2.235000,1.852000,1.620000); -positions[839] = Vec3(2.782000,1.642000,0.422000); -positions[840] = Vec3(2.915000,1.760000,1.699000); -positions[841] = Vec3(2.047000,2.178000,1.549000); -positions[842] = Vec3(1.808000,1.878000,1.556000); -positions[843] = Vec3(2.224000,2.043000,0.913000); -positions[844] = Vec3(2.619000,2.611000,1.237000); -positions[845] = Vec3(2.916000,2.726000,0.168000); -positions[846] = Vec3(2.021000,2.833000,1.176000); -positions[847] = Vec3(2.967000,2.308000,2.258000); -positions[848] = Vec3(2.778000,2.270000,1.477000); -positions[849] = Vec3(2.121000,1.834000,2.002000); -positions[850] = Vec3(2.097000,2.752000,0.808000); -positions[851] = Vec3(1.897000,0.566000,1.501000); -positions[852] = Vec3(0.359000,2.802000,0.036000); -positions[853] = Vec3(2.966000,2.454000,1.186000); -positions[854] = Vec3(2.461000,2.964000,1.132000); -positions[855] = Vec3(2.093000,1.821000,1.243000); -positions[856] = Vec3(1.706000,2.659000,1.841000); -positions[857] = Vec3(2.074000,1.709000,0.342000); -positions[858] = Vec3(2.137000,2.894000,1.813000); -positions[859] = Vec3(0.223000,2.293000,1.417000); -positions[860] = Vec3(2.637000,0.007000,0.197000); -positions[861] = Vec3(1.416000,0.050000,0.483000); -positions[862] = Vec3(1.845000,2.250000,1.251000); -positions[863] = Vec3(2.906000,0.034000,2.896000); -positions[864] = Vec3(2.481000,0.204000,0.474000); -positions[865] = Vec3(2.234000,2.051000,0.158000); -positions[866] = Vec3(0.185000,2.453000,0.055000); -positions[867] = Vec3(2.509000,0.048000,2.786000); -positions[868] = Vec3(2.202000,2.206000,2.027000); -positions[869] = Vec3(0.061000,2.367000,2.656000); -positions[870] = Vec3(3.003000,2.755000,2.241000); -positions[871] = Vec3(0.297000,2.131000,2.463000); -positions[872] = Vec3(1.553000,0.429000,1.573000); -positions[873] = Vec3(2.506000,1.832000,1.911000); -positions[874] = Vec3(2.472000,1.814000,2.759000); -positions[875] = Vec3(1.922000,1.563000,2.278000); -positions[876] = Vec3(2.623000,2.666000,2.169000); -positions[877] = Vec3(0.120000,1.834000,2.723000); -positions[878] = Vec3(0.294000,0.103000,2.826000); -positions[879] = Vec3(2.364000,2.821000,0.417000); -positions[880] = Vec3(2.446000,1.734000,0.153000); -positions[881] = Vec3(2.777000,2.037000,2.565000); -positions[882] = Vec3(2.837000,2.477000,1.924000); -positions[883] = Vec3(2.221000,1.961000,2.443000); -positions[884] = Vec3(2.284000,2.895000,2.157000); -positions[885] = Vec3(2.728000,2.880000,1.861000); -positions[886] = Vec3(0.454000,2.080000,2.868000); -positions[887] = Vec3(2.430000,2.790000,2.524000); -positions[888] = Vec3(1.808000,2.213000,1.899000); -positions[889] = Vec3(2.666000,0.053000,2.309000); -positions[890] = Vec3(2.290000,2.408000,2.995000); -positions[891] = Vec3(2.646000,2.592000,1.625000); -positions[892] = Vec3(2.750000,2.508000,2.489000); -positions[893] = Vec3(0.211000,1.753000,1.939000); diff --git a/platforms/reference/tests/nacl_amorph_GromacsForcesEwald.dat b/platforms/reference/tests/nacl_amorph_GromacsForcesEwald.dat deleted file mode 100644 index 1a48685b334b37e434ea3ee890ee5c8905b94784..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/nacl_amorph_GromacsForcesEwald.dat +++ /dev/null @@ -1,894 +0,0 @@ -ASSERT_EQUAL_VEC(Vec3(-1.98249623e+02, -2.23814501e+02, -1.02563796e+02), forces1[0], tol); -ASSERT_EQUAL_VEC(Vec3( 4.44017199e+02, -3.90390764e+02, -8.09518867e+01), forces1[1], tol); -ASSERT_EQUAL_VEC(Vec3(-8.60789585e+01, -1.05598857e+01, -1.87798624e+02), forces1[2], tol); -ASSERT_EQUAL_VEC(Vec3( 7.05363534e+02, -1.69549058e+02, 2.72466252e+02), forces1[3], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19333527e+01, 5.33284079e+02, -4.56197740e+01), forces1[4], tol); -ASSERT_EQUAL_VEC(Vec3(-3.04281837e+02, 2.02941152e+02, 1.20252918e+02), forces1[5], tol); -ASSERT_EQUAL_VEC(Vec3( 1.14210928e+02, 1.21079746e+02, 3.40929279e+02), forces1[6], tol); -ASSERT_EQUAL_VEC(Vec3(-4.02295448e+01, 3.78740176e+02, 1.07262493e+02), forces1[7], tol); -ASSERT_EQUAL_VEC(Vec3( 9.42807014e+01, 1.00891659e+01, 1.57729175e+02), forces1[8], tol); -ASSERT_EQUAL_VEC(Vec3( 2.98424830e+02, 1.18614285e+02, -4.17503362e+02), forces1[9], tol); -ASSERT_EQUAL_VEC(Vec3( 4.74881296e+01, -5.56206792e+00, -1.92332367e+02), forces1[10], tol); -ASSERT_EQUAL_VEC(Vec3(-3.61201909e+02, 4.00192313e+02, -3.38469181e+02), forces1[11], tol); -ASSERT_EQUAL_VEC(Vec3( 1.59855287e+02, -2.22184057e+02, -1.71814608e+02), forces1[12], tol); -ASSERT_EQUAL_VEC(Vec3( 8.02099562e+01, -2.46176977e+02, 1.49725960e+02), forces1[13], tol); -ASSERT_EQUAL_VEC(Vec3(-2.41478578e+02, -8.22327152e+01, -4.19802587e+02), forces1[14], tol); -ASSERT_EQUAL_VEC(Vec3(-2.42767767e+02, 4.99651070e+00, 1.89314504e+01), forces1[15], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32048202e+02, 2.91141605e+02, -1.56147406e+02), forces1[16], tol); -ASSERT_EQUAL_VEC(Vec3(-8.77435572e+01, -4.75580602e+02, -2.02736231e+02), forces1[17], tol); -ASSERT_EQUAL_VEC(Vec3( 3.96101687e+02, -6.37149049e+02, 1.78647561e+02), forces1[18], tol); -ASSERT_EQUAL_VEC(Vec3( 3.72219707e+02, 1.17763530e+02, 2.14244129e+02), forces1[19], tol); -ASSERT_EQUAL_VEC(Vec3( 4.50062822e+02, -1.37575208e+01, 2.39948230e+02), forces1[20], tol); -ASSERT_EQUAL_VEC(Vec3( 2.00029587e+02, 3.30130171e+01, 8.51610501e+01), forces1[21], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97192878e+02, 7.33293743e+02, 2.15221280e+01), forces1[22], tol); -ASSERT_EQUAL_VEC(Vec3(-1.44377368e+02, 9.15716307e+01, 3.18892747e+01), forces1[23], tol); -ASSERT_EQUAL_VEC(Vec3( 2.94552317e+02, -3.69040394e+02, 2.70288945e+00), forces1[24], tol); -ASSERT_EQUAL_VEC(Vec3( 3.23120142e+02, 8.86114454e+02, 3.24450894e+02), forces1[25], tol); -ASSERT_EQUAL_VEC(Vec3(-6.03295072e+01, 1.68456989e+02, 2.31869997e+02), forces1[26], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93194241e+01, 5.76413549e+01, 3.64010103e+02), forces1[27], tol); -ASSERT_EQUAL_VEC(Vec3( 3.27452172e-01, 1.34469263e+02, -4.39755475e+01), forces1[28], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38717677e+02, -2.99570604e+02, -2.80339165e+02), forces1[29], tol); -ASSERT_EQUAL_VEC(Vec3(-8.27937873e+01, 4.40618490e+02, 9.65587062e+01), forces1[30], tol); -ASSERT_EQUAL_VEC(Vec3( 2.03855205e+01, -4.37745725e+01, -5.06881413e+01), forces1[31], tol); -ASSERT_EQUAL_VEC(Vec3(-2.60745980e+02, 3.70683505e+02, 1.28613276e+02), forces1[32], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97960989e+02, -1.51970994e+01, -2.85732029e+02), forces1[33], tol); -ASSERT_EQUAL_VEC(Vec3(-2.63675933e+01, -1.29448310e+01, -2.36632787e+02), forces1[34], tol); -ASSERT_EQUAL_VEC(Vec3( 2.13614470e+02, -2.29632590e+02, -7.72843645e+02), forces1[35], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26287747e+01, 9.00718113e+01, 3.48807737e+02), forces1[36], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27779547e+02, -8.46450565e+00, -3.25578367e+02), forces1[37], tol); -ASSERT_EQUAL_VEC(Vec3(-8.32052751e+01, -2.50968185e+02, 5.80103845e+01), forces1[38], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32232234e+02, 1.30470270e+02, 6.06495521e+00), forces1[39], tol); -ASSERT_EQUAL_VEC(Vec3(-1.14455494e+02, -3.48721419e+01, -8.76129455e+01), forces1[40], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55340689e+02, -2.79204188e+02, -1.68792912e+02), forces1[41], tol); -ASSERT_EQUAL_VEC(Vec3(-2.02307452e+02, 1.47895858e+02, 1.75220456e+02), forces1[42], tol); -ASSERT_EQUAL_VEC(Vec3( 2.63185604e+01, -4.46985150e+02, -2.38821173e+00), forces1[43], tol); -ASSERT_EQUAL_VEC(Vec3( 2.55944000e+02, -2.93439747e+02, 3.28025974e+02), forces1[44], tol); -ASSERT_EQUAL_VEC(Vec3( 1.14311082e+02, 2.24380865e+02, -8.29696179e+01), forces1[45], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43326861e+01, 2.46491923e+02, -3.75165407e+02), forces1[46], tol); -ASSERT_EQUAL_VEC(Vec3(-4.34792273e+02, -9.73250775e+01, -1.91085096e+02), forces1[47], tol); -ASSERT_EQUAL_VEC(Vec3( 5.23123306e+01, 5.50975366e+02, 2.90221875e+02), forces1[48], tol); -ASSERT_EQUAL_VEC(Vec3(-4.83894734e+01, 1.71476996e+02, -3.42294535e+02), forces1[49], tol); -ASSERT_EQUAL_VEC(Vec3(-2.61463419e+02, 9.01733107e+01, 3.64114372e+02), forces1[50], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43625180e+02, -5.19324924e+02, -7.74662441e+01), forces1[51], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15611073e+02, -5.54577351e+02, 1.71371860e+02), forces1[52], tol); -ASSERT_EQUAL_VEC(Vec3(-2.14763168e+02, 3.56711285e+02, -3.71984643e+02), forces1[53], tol); -ASSERT_EQUAL_VEC(Vec3( 2.22124509e+02, 2.73223318e+02, 1.61942563e+02), forces1[54], tol); -ASSERT_EQUAL_VEC(Vec3( 2.85121911e+02, 3.19143598e+02, -1.98763562e+02), forces1[55], tol); -ASSERT_EQUAL_VEC(Vec3( 3.90039513e+02, 5.91179187e+02, 8.76217046e+01), forces1[56], tol); -ASSERT_EQUAL_VEC(Vec3( 1.69060954e+02, -9.43142940e+01, 3.42180838e+02), forces1[57], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93242309e+01, -1.03060738e+02, 5.38025654e+01), forces1[58], tol); -ASSERT_EQUAL_VEC(Vec3( 4.09077298e+01, 1.30026064e+02, -7.16489622e+01), forces1[59], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89926185e+02, 5.52058739e+00, 4.53549674e+02), forces1[60], tol); -ASSERT_EQUAL_VEC(Vec3(-1.11572641e+02, 1.24178624e+02, 4.53016222e+02), forces1[61], tol); -ASSERT_EQUAL_VEC(Vec3( 1.54599730e+02, -2.70150115e+02, -7.89492689e+01), forces1[62], tol); -ASSERT_EQUAL_VEC(Vec3( 2.84023026e+02, -8.89934391e+01, 3.24522873e+02), forces1[63], tol); -ASSERT_EQUAL_VEC(Vec3( 1.44364280e+02, -7.96613821e+01, -2.53253756e+02), forces1[64], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77719009e+02, 8.42958696e+01, -1.41078307e+02), forces1[65], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69676443e+02, -5.26499439e+02, -1.04061540e+02), forces1[66], tol); -ASSERT_EQUAL_VEC(Vec3(-2.41597419e+02, -9.41368613e+01, 3.30311173e+01), forces1[67], tol); -ASSERT_EQUAL_VEC(Vec3( 6.81038324e+02, -5.79215726e+02, -9.61706079e-01), forces1[68], tol); -ASSERT_EQUAL_VEC(Vec3( 2.88768459e+02, 2.41571264e+02, -1.90674774e+02), forces1[69], tol); -ASSERT_EQUAL_VEC(Vec3(-1.31534697e+01, 1.14188032e+01, 4.13763857e+01), forces1[70], tol); -ASSERT_EQUAL_VEC(Vec3( 5.14246004e+01, -9.72308438e+01, 1.27291275e+01), forces1[71], tol); -ASSERT_EQUAL_VEC(Vec3( 7.15804377e+01, -1.94144101e+02, -2.48994830e+02), forces1[72], tol); -ASSERT_EQUAL_VEC(Vec3(-9.16897832e+01, 1.23379998e+02, -2.86172337e+02), forces1[73], tol); -ASSERT_EQUAL_VEC(Vec3( 9.82636682e+01, -7.07069901e+01, -1.29205135e+02), forces1[74], tol); -ASSERT_EQUAL_VEC(Vec3(-2.15565256e+02, -1.43101075e+02, -1.96437192e+02), forces1[75], tol); -ASSERT_EQUAL_VEC(Vec3(-4.61171340e+02, -4.03099962e+02, -4.56004212e+01), forces1[76], tol); -ASSERT_EQUAL_VEC(Vec3( 1.52879441e+02, -9.37786956e+02, 2.93596349e+02), forces1[77], tol); -ASSERT_EQUAL_VEC(Vec3( 2.45712108e+02, 1.99809051e+01, 1.17930077e+02), forces1[78], tol); -ASSERT_EQUAL_VEC(Vec3(-2.37060951e+02, 2.49499642e+02, 2.13427566e+02), forces1[79], tol); -ASSERT_EQUAL_VEC(Vec3(-2.90549561e+02, 1.91148461e+02, -4.24254939e+02), forces1[80], tol); -ASSERT_EQUAL_VEC(Vec3( 2.98836434e+02, -5.77088507e+00, 2.66616885e+02), forces1[81], tol); -ASSERT_EQUAL_VEC(Vec3(-3.26780820e+02, -2.54755214e+02, -3.00078477e+02), forces1[82], tol); -ASSERT_EQUAL_VEC(Vec3(-2.95124543e+02, 1.21754917e+02, -2.83484560e+02), forces1[83], tol); -ASSERT_EQUAL_VEC(Vec3( 4.04593126e+02, 1.66803214e+02, -5.58277653e+01), forces1[84], tol); -ASSERT_EQUAL_VEC(Vec3(-8.21659385e+02, 5.19877016e+02, 5.32042741e+01), forces1[85], tol); -ASSERT_EQUAL_VEC(Vec3(-3.49440439e+02, -1.47667513e+02, -4.95516065e+02), forces1[86], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48873387e+02, -7.41398759e+01, -4.28615258e+02), forces1[87], tol); -ASSERT_EQUAL_VEC(Vec3(-1.97035390e+02, -3.40619723e+02, 2.10014966e+00), forces1[88], tol); -ASSERT_EQUAL_VEC(Vec3( 9.52521998e+01, -4.20785075e+02, 5.76686444e+01), forces1[89], tol); -ASSERT_EQUAL_VEC(Vec3( 1.21817965e+02, -1.40423441e+02, -2.93286277e+02), forces1[90], tol); -ASSERT_EQUAL_VEC(Vec3( 2.10624944e+02, 5.87898789e+01, 7.23535437e+01), forces1[91], tol); -ASSERT_EQUAL_VEC(Vec3( 6.72728656e+01, -1.46951701e+02, -2.63713434e+02), forces1[92], tol); -ASSERT_EQUAL_VEC(Vec3( 3.96770378e+02, -4.38652663e+02, -2.57914104e+02), forces1[93], tol); -ASSERT_EQUAL_VEC(Vec3(-2.66188937e+01, 1.59124875e+01, 4.36635801e+02), forces1[94], tol); -ASSERT_EQUAL_VEC(Vec3(-3.00011356e+02, -6.20659688e+01, -4.29149613e+02), forces1[95], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77048319e+02, 5.58928761e+01, 1.05662322e+02), forces1[96], tol); -ASSERT_EQUAL_VEC(Vec3(-6.92523247e+01, -5.45436653e+02, -2.10975756e+01), forces1[97], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90136268e+01, -1.21131977e+02, 1.68383284e+01), forces1[98], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19709988e+01, 1.51713780e+02, -3.39192065e+01), forces1[99], tol); -ASSERT_EQUAL_VEC(Vec3( 9.20577922e+01, -4.22560191e+02, -1.80919327e+01), forces1[100], tol); -ASSERT_EQUAL_VEC(Vec3( 5.80665653e+01, 1.45405257e+02, -4.53162940e+01), forces1[101], tol); -ASSERT_EQUAL_VEC(Vec3( 6.12566193e+02, -1.41221826e+01, 2.13579029e+02), forces1[102], tol); -ASSERT_EQUAL_VEC(Vec3(-1.02954777e+02, -8.76455433e+01, 2.20912307e+02), forces1[103], tol); -ASSERT_EQUAL_VEC(Vec3( 1.44791352e+02, -2.88999813e+02, 1.68134104e+02), forces1[104], tol); -ASSERT_EQUAL_VEC(Vec3( 9.68813543e+01, -2.62260178e+02, -3.07286290e+02), forces1[105], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09040958e+02, -2.43241310e+02, -2.45238041e+02), forces1[106], tol); -ASSERT_EQUAL_VEC(Vec3( 1.89550491e+02, 1.49319105e+02, -3.74285248e+02), forces1[107], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20763399e+02, -1.66082622e+02, -4.46381843e+02), forces1[108], tol); -ASSERT_EQUAL_VEC(Vec3(-6.91025497e+02, 6.62244311e+02, 3.06047534e+01), forces1[109], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61280438e+02, 8.89755700e+01, -3.35630671e+01), forces1[110], tol); -ASSERT_EQUAL_VEC(Vec3(-4.17338144e+02, 4.26061590e+01, -7.77158559e+01), forces1[111], tol); -ASSERT_EQUAL_VEC(Vec3(-4.01742893e+01, 8.24881666e+01, 4.51855292e+02), forces1[112], tol); -ASSERT_EQUAL_VEC(Vec3(-1.40970558e+01, -2.40647487e+02, -1.27598454e+02), forces1[113], tol); -ASSERT_EQUAL_VEC(Vec3( 2.83839724e+02, 2.31041423e+02, 1.33456841e+01), forces1[114], tol); -ASSERT_EQUAL_VEC(Vec3( 5.10867089e+01, -7.13361227e+02, -4.07617467e+02), forces1[115], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56090473e+02, -1.33121120e+02, 2.25952345e+02), forces1[116], tol); -ASSERT_EQUAL_VEC(Vec3( 3.69607528e+01, -1.35106805e+01, 1.10579378e+02), forces1[117], tol); -ASSERT_EQUAL_VEC(Vec3( 3.37809441e+02, 8.10519215e+01, -5.39817090e+01), forces1[118], tol); -ASSERT_EQUAL_VEC(Vec3( 5.49975558e+01, 7.55006073e+01, 1.80545525e+02), forces1[119], tol); -ASSERT_EQUAL_VEC(Vec3( 1.10971245e+02, -3.83971391e+02, 2.77991517e+01), forces1[120], tol); -ASSERT_EQUAL_VEC(Vec3(-2.63190529e+02, -3.16285880e+02, -3.95218767e+02), forces1[121], tol); -ASSERT_EQUAL_VEC(Vec3( 3.42556090e+02, -2.35748098e+02, 4.60355306e+02), forces1[122], tol); -ASSERT_EQUAL_VEC(Vec3( 2.47668934e+02, 2.42870015e+02, 1.52218275e+02), forces1[123], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70198409e+02, 2.08574994e+02, -1.86859372e+02), forces1[124], tol); -ASSERT_EQUAL_VEC(Vec3( 3.24104326e+02, 2.55001752e+02, -1.10880955e+02), forces1[125], tol); -ASSERT_EQUAL_VEC(Vec3( 5.16197105e+02, -5.06150948e+01, -2.80857737e+02), forces1[126], tol); -ASSERT_EQUAL_VEC(Vec3(-3.30849573e+02, -3.47291965e+02, 1.45237748e+02), forces1[127], tol); -ASSERT_EQUAL_VEC(Vec3(-1.28356764e+02, 7.69134918e+01, 2.14911544e+02), forces1[128], tol); -ASSERT_EQUAL_VEC(Vec3(-1.91469755e+02, -2.11473339e+02, 1.35333200e+02), forces1[129], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69887152e+02, 1.11337990e+02, -8.98463460e+01), forces1[130], tol); -ASSERT_EQUAL_VEC(Vec3(-1.36374172e+02, -2.14238377e+02, -5.83866682e+01), forces1[131], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38562455e+02, 2.36128851e+02, -2.08960526e+01), forces1[132], tol); -ASSERT_EQUAL_VEC(Vec3(-2.47599869e+02, 3.98208933e+02, -1.64765063e+02), forces1[133], tol); -ASSERT_EQUAL_VEC(Vec3(-8.37476276e+01, 4.07965070e+02, -1.24163988e+02), forces1[134], tol); -ASSERT_EQUAL_VEC(Vec3(-1.60159071e+02, -6.49998978e+00, 3.55060364e+02), forces1[135], tol); -ASSERT_EQUAL_VEC(Vec3( 3.58249937e+02, -2.81395872e+02, -1.28020722e+02), forces1[136], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33746078e+02, -3.31207307e+02, -2.41631386e+01), forces1[137], tol); -ASSERT_EQUAL_VEC(Vec3(-3.00676509e+02, -1.70097272e+02, 8.30597971e+01), forces1[138], tol); -ASSERT_EQUAL_VEC(Vec3(-1.94891185e+01, 1.35846931e+02, -3.65144038e+02), forces1[139], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77181788e+02, 4.44531481e+01, 2.11474121e+02), forces1[140], tol); -ASSERT_EQUAL_VEC(Vec3( 4.59275521e+02, -3.23637233e+02, 3.67800802e+02), forces1[141], tol); -ASSERT_EQUAL_VEC(Vec3( 4.22121423e+02, 2.22068413e+02, 2.92465809e+02), forces1[142], tol); -ASSERT_EQUAL_VEC(Vec3( 2.83763316e+02, -2.92602600e+02, 8.18013996e+01), forces1[143], tol); -ASSERT_EQUAL_VEC(Vec3(-5.70559390e+01, 2.40295170e+02, -3.40862650e+01), forces1[144], tol); -ASSERT_EQUAL_VEC(Vec3( 1.04075222e+02, 1.58996510e+02, 1.10304777e+01), forces1[145], tol); -ASSERT_EQUAL_VEC(Vec3( 5.88502616e+02, 2.07880339e+02, -7.36908474e+01), forces1[146], tol); -ASSERT_EQUAL_VEC(Vec3( 2.82632623e+02, 2.25995810e+02, 2.16745828e+02), forces1[147], tol); -ASSERT_EQUAL_VEC(Vec3(-2.02435189e+02, 1.65899995e+02, -1.47471730e+02), forces1[148], tol); -ASSERT_EQUAL_VEC(Vec3(-2.96622169e+02, -4.87423685e+02, 1.60844164e+02), forces1[149], tol); -ASSERT_EQUAL_VEC(Vec3( 2.94715891e+02, 1.30347848e+02, 2.82729974e+01), forces1[150], tol); -ASSERT_EQUAL_VEC(Vec3( 3.70885287e+02, 3.22229123e+01, 8.74581871e+01), forces1[151], tol); -ASSERT_EQUAL_VEC(Vec3( 3.43994702e+02, -2.07935556e+02, 3.49067383e+02), forces1[152], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43099882e+01, -2.80336001e+02, 5.69626314e+01), forces1[153], tol); -ASSERT_EQUAL_VEC(Vec3( 9.71948870e+01, 1.42192042e+01, 1.00139441e+02), forces1[154], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56990028e+02, -1.87993683e+01, -1.07611017e+02), forces1[155], tol); -ASSERT_EQUAL_VEC(Vec3( 4.20275466e+02, 1.16943633e+02, 4.29575935e+02), forces1[156], tol); -ASSERT_EQUAL_VEC(Vec3(-2.05593618e+02, -2.74949188e+02, 1.32851151e+02), forces1[157], tol); -ASSERT_EQUAL_VEC(Vec3( 2.88917359e+01, 1.07824736e+01, -2.09437913e+02), forces1[158], tol); -ASSERT_EQUAL_VEC(Vec3(-4.54601782e+02, -2.58268961e+01, -2.66964578e+02), forces1[159], tol); -ASSERT_EQUAL_VEC(Vec3( 5.91049307e+02, -7.76470493e+01, 9.29094217e+01), forces1[160], tol); -ASSERT_EQUAL_VEC(Vec3(-8.26256556e+00, 2.39614788e+02, 1.04874825e+02), forces1[161], tol); -ASSERT_EQUAL_VEC(Vec3( 4.79904829e+01, -1.73703832e+02, -5.98140813e+01), forces1[162], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26007450e+02, 1.64300309e+02, -4.23289873e+02), forces1[163], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03205374e+02, 1.46921807e+02, 2.50701909e+02), forces1[164], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38813652e+02, 1.32930267e+02, 2.75556760e+02), forces1[165], tol); -ASSERT_EQUAL_VEC(Vec3( 9.19035624e+01, -1.55653738e+02, 1.24210719e+02), forces1[166], tol); -ASSERT_EQUAL_VEC(Vec3( 2.09938122e+02, 1.26973729e+02, -3.32817155e+02), forces1[167], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56206143e+02, 6.10122855e+00, 3.42771101e+02), forces1[168], tol); -ASSERT_EQUAL_VEC(Vec3( 3.11438984e+02, 9.42198048e+01, -8.51953228e+00), forces1[169], tol); -ASSERT_EQUAL_VEC(Vec3( 1.78692126e+02, -1.36964221e+01, -2.21830640e+01), forces1[170], tol); -ASSERT_EQUAL_VEC(Vec3(-4.69093086e+01, 5.77169523e+02, 1.04262190e+02), forces1[171], tol); -ASSERT_EQUAL_VEC(Vec3( 1.31254187e+02, 7.57774979e+01, -9.08207172e+01), forces1[172], tol); -ASSERT_EQUAL_VEC(Vec3(-1.69436483e+02, -3.62015361e+02, 2.68889227e+02), forces1[173], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68463797e+02, -2.62627703e+02, 7.41106664e+01), forces1[174], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53154790e+02, 2.68914173e+02, -3.92489521e+02), forces1[175], tol); -ASSERT_EQUAL_VEC(Vec3( 1.95110073e+02, -5.76611142e+01, 3.91951958e+02), forces1[176], tol); -ASSERT_EQUAL_VEC(Vec3( 2.43338357e+02, -3.91477149e+02, -8.63953114e+01), forces1[177], tol); -ASSERT_EQUAL_VEC(Vec3(-1.34179863e+02, 1.46591166e+02, 1.19878040e+02), forces1[178], tol); -ASSERT_EQUAL_VEC(Vec3( 1.63174304e+02, -2.66960106e+02, 1.65770978e+02), forces1[179], tol); -ASSERT_EQUAL_VEC(Vec3( 5.46495327e+01, 6.58671492e+01, -4.94244139e+02), forces1[180], tol); -ASSERT_EQUAL_VEC(Vec3(-1.62957088e+02, 1.53806002e+02, 2.72147870e+01), forces1[181], tol); -ASSERT_EQUAL_VEC(Vec3(-1.97769720e+02, -9.08099669e+01, -5.59653565e+02), forces1[182], tol); -ASSERT_EQUAL_VEC(Vec3(-9.59272102e+01, -3.67219179e+02, -1.37098968e+02), forces1[183], tol); -ASSERT_EQUAL_VEC(Vec3(-3.13273853e+02, -4.77528382e+02, -2.82320271e+02), forces1[184], tol); -ASSERT_EQUAL_VEC(Vec3( 3.47090516e+01, -1.51861017e+02, -2.71782882e+02), forces1[185], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09985174e+02, 7.60658358e+01, -1.90751868e+02), forces1[186], tol); -ASSERT_EQUAL_VEC(Vec3( 3.49595143e+02, 1.52747707e+02, 4.22488620e+02), forces1[187], tol); -ASSERT_EQUAL_VEC(Vec3(-3.59725754e+01, 3.55475701e+01, -7.87334885e+01), forces1[188], tol); -ASSERT_EQUAL_VEC(Vec3(-5.53788647e+02, 1.58101235e+02, -5.47105678e+01), forces1[189], tol); -ASSERT_EQUAL_VEC(Vec3( 8.55520733e+01, -2.88444498e+02, 2.54318577e+01), forces1[190], tol); -ASSERT_EQUAL_VEC(Vec3( 1.96800399e+02, 1.69077439e+02, 2.41074010e+02), forces1[191], tol); -ASSERT_EQUAL_VEC(Vec3( 7.64011738e+01, 3.05710609e+02, 2.76162549e+02), forces1[192], tol); -ASSERT_EQUAL_VEC(Vec3( 1.23265853e+02, 8.57500919e+01, 3.46722858e+02), forces1[193], tol); -ASSERT_EQUAL_VEC(Vec3(-9.05651135e+01, 5.50685032e+01, -4.12462772e+02), forces1[194], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70875191e+00, 1.30545633e+02, -1.55140021e+02), forces1[195], tol); -ASSERT_EQUAL_VEC(Vec3(-1.37389162e+02, -2.94304654e+02, -1.24611408e+02), forces1[196], tol); -ASSERT_EQUAL_VEC(Vec3(-3.56088703e+02, -9.03800091e+01, 3.14895993e+02), forces1[197], tol); -ASSERT_EQUAL_VEC(Vec3(-7.79280727e+01, 1.12179786e+02, 3.86364249e+02), forces1[198], tol); -ASSERT_EQUAL_VEC(Vec3( 2.43080372e+02, 5.36466609e+02, -9.47357535e+01), forces1[199], tol); -ASSERT_EQUAL_VEC(Vec3(-7.39441823e+01, -3.53188450e+02, 1.42886370e+01), forces1[200], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56556933e+02, -2.80423857e+02, 2.95738831e+02), forces1[201], tol); -ASSERT_EQUAL_VEC(Vec3(-2.72306632e+02, -1.44066176e+02, 2.55684522e+02), forces1[202], tol); -ASSERT_EQUAL_VEC(Vec3(-3.75638941e+01, 2.99415967e+02, -4.12490294e+02), forces1[203], tol); -ASSERT_EQUAL_VEC(Vec3( 3.64685442e+02, 3.39117459e+02, -8.08643870e+01), forces1[204], tol); -ASSERT_EQUAL_VEC(Vec3( 4.32799610e+02, -1.78895030e+02, 3.86635331e+02), forces1[205], tol); -ASSERT_EQUAL_VEC(Vec3(-9.04462035e+01, 3.89960088e+02, -5.47950733e+02), forces1[206], tol); -ASSERT_EQUAL_VEC(Vec3(-6.35043448e+02, 1.85486756e+01, 3.17016236e+01), forces1[207], tol); -ASSERT_EQUAL_VEC(Vec3(-5.92896097e+01, -2.85274924e+02, -1.42348620e+02), forces1[208], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35207298e+02, -3.56081009e+02, 1.07991189e+02), forces1[209], tol); -ASSERT_EQUAL_VEC(Vec3( 3.94900105e+02, 9.99453126e+01, -1.57827968e+02), forces1[210], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56528334e+02, -1.66144237e+02, -4.78550980e+00), forces1[211], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77280437e+02, -9.51924294e+01, -3.42048132e+02), forces1[212], tol); -ASSERT_EQUAL_VEC(Vec3( 2.97739381e+02, 7.18137153e+02, -4.94774385e+02), forces1[213], tol); -ASSERT_EQUAL_VEC(Vec3(-5.12807812e+02, 7.63618980e+02, -5.44479748e+01), forces1[214], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55718099e+02, -4.46413837e+02, -1.72488334e+02), forces1[215], tol); -ASSERT_EQUAL_VEC(Vec3( 3.15155213e+02, 5.62372598e+02, 2.42573447e+02), forces1[216], tol); -ASSERT_EQUAL_VEC(Vec3(-2.90686044e+01, 3.91008419e+02, 1.36603112e+02), forces1[217], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26382270e+02, 5.13937396e+02, 8.38021440e+01), forces1[218], tol); -ASSERT_EQUAL_VEC(Vec3(-2.88415254e+02, 6.41404241e+01, 3.02418529e+02), forces1[219], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13264423e+01, -3.20432026e+02, 1.98735533e+02), forces1[220], tol); -ASSERT_EQUAL_VEC(Vec3(-1.73201040e+02, 2.09799717e+02, 2.60748570e+02), forces1[221], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34181587e+02, -1.25026352e+02, 2.52906543e+02), forces1[222], tol); -ASSERT_EQUAL_VEC(Vec3(-3.09528945e+02, 2.63415228e+02, -2.33523213e+02), forces1[223], tol); -ASSERT_EQUAL_VEC(Vec3( 8.65524156e+01, -5.32178407e+02, -2.36443769e+02), forces1[224], tol); -ASSERT_EQUAL_VEC(Vec3(-1.74965243e+02, -2.30177295e+02, -1.33679144e+02), forces1[225], tol); -ASSERT_EQUAL_VEC(Vec3( 1.53826901e+02, -1.24391764e+02, -3.93679341e+01), forces1[226], tol); -ASSERT_EQUAL_VEC(Vec3(-4.51778358e+02, -7.75156480e+01, -5.36133859e+02), forces1[227], tol); -ASSERT_EQUAL_VEC(Vec3( 5.99205686e+01, 2.97292572e+02, 5.99156789e+01), forces1[228], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10624444e+02, 2.94567470e+00, -3.63693136e+01), forces1[229], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85876747e+02, 1.41639709e+02, 2.75108543e+02), forces1[230], tol); -ASSERT_EQUAL_VEC(Vec3( 5.43221531e+02, -3.20245253e+02, -3.02057882e+01), forces1[231], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85583563e+02, 6.64091011e+01, -3.49559777e+01), forces1[232], tol); -ASSERT_EQUAL_VEC(Vec3(-4.52863518e+02, -3.40704717e+02, 1.28905508e+02), forces1[233], tol); -ASSERT_EQUAL_VEC(Vec3( 9.34276939e+02, -1.39482274e+02, 3.57869403e+02), forces1[234], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03067148e+02, 7.44441061e+01, 9.27320006e+01), forces1[235], tol); -ASSERT_EQUAL_VEC(Vec3(-5.97531539e+02, 1.26804078e+02, 2.78893030e+02), forces1[236], tol); -ASSERT_EQUAL_VEC(Vec3( 5.67860193e+02, -5.34681659e+02, -1.84230283e+02), forces1[237], tol); -ASSERT_EQUAL_VEC(Vec3( 2.13190333e+02, 2.99783610e+02, -2.66458597e+02), forces1[238], tol); -ASSERT_EQUAL_VEC(Vec3( 3.11473403e+01, 4.54685224e+02, 3.81034869e+01), forces1[239], tol); -ASSERT_EQUAL_VEC(Vec3( 1.57514487e+02, 3.19318405e+01, -1.57720436e+02), forces1[240], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34917141e+02, -4.69320639e+02, -3.96620193e+01), forces1[241], tol); -ASSERT_EQUAL_VEC(Vec3(-3.54127895e+01, -1.00145510e+02, 7.07653587e+01), forces1[242], tol); -ASSERT_EQUAL_VEC(Vec3( 3.29669760e+02, 3.63920894e+02, -3.89179023e+02), forces1[243], tol); -ASSERT_EQUAL_VEC(Vec3( 7.63985812e+02, 2.97343162e+02, -5.39992884e+01), forces1[244], tol); -ASSERT_EQUAL_VEC(Vec3(-2.67917290e+02, 2.23564800e+02, -1.67266290e+02), forces1[245], tol); -ASSERT_EQUAL_VEC(Vec3(-6.45289709e+02, -9.38444040e+00, -5.71116404e+02), forces1[246], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48220582e+02, -1.78737448e+02, 8.43814640e+01), forces1[247], tol); -ASSERT_EQUAL_VEC(Vec3( 3.26731869e+02, -3.84524983e+02, 2.88339532e+02), forces1[248], tol); -ASSERT_EQUAL_VEC(Vec3( 2.58365914e+02, 5.43905231e+01, 3.38641536e+02), forces1[249], tol); -ASSERT_EQUAL_VEC(Vec3(-3.51600062e+02, -3.06740536e+02, -2.99454859e+01), forces1[250], tol); -ASSERT_EQUAL_VEC(Vec3(-2.78580097e+01, 2.36156123e+02, 1.06081152e+01), forces1[251], tol); -ASSERT_EQUAL_VEC(Vec3(-1.75899733e+02, -9.38608562e+00, 1.84207408e+02), forces1[252], tol); -ASSERT_EQUAL_VEC(Vec3(-5.60399133e+02, 1.90145998e+02, -2.90215623e+02), forces1[253], tol); -ASSERT_EQUAL_VEC(Vec3(-1.69434526e+02, 2.23702263e+02, -3.41994449e+02), forces1[254], tol); -ASSERT_EQUAL_VEC(Vec3(-6.96578236e+01, 1.66438449e+02, -6.77499321e+00), forces1[255], tol); -ASSERT_EQUAL_VEC(Vec3( 2.73655591e+02, 1.49071325e+00, 7.80565008e+01), forces1[256], tol); -ASSERT_EQUAL_VEC(Vec3(-2.58366132e+02, 8.46288614e+01, -9.42098129e+01), forces1[257], tol); -ASSERT_EQUAL_VEC(Vec3(-4.25847146e+02, 9.84292470e+00, 6.39709870e+01), forces1[258], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12083087e+02, 6.10255158e+01, -1.38662830e+02), forces1[259], tol); -ASSERT_EQUAL_VEC(Vec3( 3.21828259e+01, 3.67493765e+02, 6.86972453e+01), forces1[260], tol); -ASSERT_EQUAL_VEC(Vec3(-3.72206379e+02, 3.36289489e+02, 3.15273168e+02), forces1[261], tol); -ASSERT_EQUAL_VEC(Vec3( 4.28443395e+01, 5.93339946e+01, 4.86905134e+02), forces1[262], tol); -ASSERT_EQUAL_VEC(Vec3( 3.03267567e+01, 3.70293845e+02, -5.83420472e+02), forces1[263], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61738517e+02, 3.70576503e+02, -2.03659425e+01), forces1[264], tol); -ASSERT_EQUAL_VEC(Vec3(-6.67229637e+02, -1.24339105e+01, -9.41959187e+01), forces1[265], tol); -ASSERT_EQUAL_VEC(Vec3( 4.66955725e+02, 3.49515015e+02, 2.04652411e+02), forces1[266], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52483062e+02, -1.24093769e+01, 2.24828418e+01), forces1[267], tol); -ASSERT_EQUAL_VEC(Vec3( 4.58746968e+01, -2.20898924e+02, 7.64552584e+01), forces1[268], tol); -ASSERT_EQUAL_VEC(Vec3(-4.43630058e+01, -1.14899930e+02, -2.87900025e+02), forces1[269], tol); -ASSERT_EQUAL_VEC(Vec3(-9.22312443e+01, 6.40883419e+02, 3.17836134e+02), forces1[270], tol); -ASSERT_EQUAL_VEC(Vec3(-2.15623653e+02, -2.05460783e+02, 6.85627383e+01), forces1[271], tol); -ASSERT_EQUAL_VEC(Vec3( 2.24218604e+02, -1.43080040e+02, -4.17826551e+01), forces1[272], tol); -ASSERT_EQUAL_VEC(Vec3( 1.79823435e+02, -3.72425962e+02, 2.12155872e+02), forces1[273], tol); -ASSERT_EQUAL_VEC(Vec3( 9.74694224e+01, 7.66864835e+01, -5.04542197e+02), forces1[274], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18132641e+01, -5.76171362e+02, -3.23926383e+02), forces1[275], tol); -ASSERT_EQUAL_VEC(Vec3(-2.97073240e+02, -1.47150317e+02, -1.56565197e+02), forces1[276], tol); -ASSERT_EQUAL_VEC(Vec3( 4.21710637e+01, -2.91447830e+02, -1.50257335e+02), forces1[277], tol); -ASSERT_EQUAL_VEC(Vec3( 1.75442608e+02, -9.12859677e+01, 6.45491342e+01), forces1[278], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50392869e+02, -1.42464974e+02, 2.67956841e+02), forces1[279], tol); -ASSERT_EQUAL_VEC(Vec3(-4.86651400e+02, -2.18667898e+01, 1.45713495e+02), forces1[280], tol); -ASSERT_EQUAL_VEC(Vec3( 9.28412896e+01, -6.94874667e+01, -8.89080435e+00), forces1[281], tol); -ASSERT_EQUAL_VEC(Vec3(-5.85240520e+01, 2.84901112e+02, 4.82507287e+02), forces1[282], tol); -ASSERT_EQUAL_VEC(Vec3(-2.83558886e+01, -1.73735212e+02, -3.77887550e+02), forces1[283], tol); -ASSERT_EQUAL_VEC(Vec3(-4.34949543e+02, -1.30350821e+02, -3.31882572e+02), forces1[284], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85307564e+01, -2.54990214e+02, -5.18576435e+02), forces1[285], tol); -ASSERT_EQUAL_VEC(Vec3(-7.78941445e+01, 1.25379603e+02, -3.80663737e+02), forces1[286], tol); -ASSERT_EQUAL_VEC(Vec3(-1.27210929e+02, 3.88670263e+02, 9.40643492e+01), forces1[287], tol); -ASSERT_EQUAL_VEC(Vec3( 1.39431191e+02, 4.03532370e+02, -4.33316557e+02), forces1[288], tol); -ASSERT_EQUAL_VEC(Vec3(-2.89025871e+00, -2.06301323e+02, -7.48588265e+02), forces1[289], tol); -ASSERT_EQUAL_VEC(Vec3( 1.07859207e+01, 2.35870879e+02, -1.38371079e+02), forces1[290], tol); -ASSERT_EQUAL_VEC(Vec3( 8.60427044e+01, 5.74941322e+02, 1.95760444e+02), forces1[291], tol); -ASSERT_EQUAL_VEC(Vec3(-2.45607229e+02, 1.95528757e+02, 1.22011573e+02), forces1[292], tol); -ASSERT_EQUAL_VEC(Vec3(-3.33845399e+02, -2.71367745e+02, -3.43358433e+02), forces1[293], tol); -ASSERT_EQUAL_VEC(Vec3(-4.28617139e+02, 1.60904342e+02, 2.18072650e+02), forces1[294], tol); -ASSERT_EQUAL_VEC(Vec3(-5.40064874e+02, -1.47448303e+02, 4.35229212e+02), forces1[295], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48815476e+02, 3.45639218e+01, -1.25812382e+02), forces1[296], tol); -ASSERT_EQUAL_VEC(Vec3( 3.39107837e+02, 3.68504225e+01, 2.99572367e+01), forces1[297], tol); -ASSERT_EQUAL_VEC(Vec3(-1.67736264e+02, -2.84608426e+02, 3.88526274e+01), forces1[298], tol); -ASSERT_EQUAL_VEC(Vec3(-3.21480824e+02, -4.49315290e+02, 1.41881616e+02), forces1[299], tol); -ASSERT_EQUAL_VEC(Vec3( 1.16232320e+02, 6.79621131e+00, -1.08227149e+02), forces1[300], tol); -ASSERT_EQUAL_VEC(Vec3(-1.85570778e+02, -2.95260833e+02, 5.01922551e+02), forces1[301], tol); -ASSERT_EQUAL_VEC(Vec3( 9.27568700e+01, -3.83929681e+02, -2.77944844e+02), forces1[302], tol); -ASSERT_EQUAL_VEC(Vec3(-3.97618765e+01, 2.84553517e+02, 2.33447892e+02), forces1[303], tol); -ASSERT_EQUAL_VEC(Vec3( 1.40428160e+00, 2.25397804e+02, 9.47967922e+01), forces1[304], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06100768e+02, 2.06346469e+02, -2.00231208e+02), forces1[305], tol); -ASSERT_EQUAL_VEC(Vec3(-3.33973365e+02, -3.09218137e+01, -9.23886091e+01), forces1[306], tol); -ASSERT_EQUAL_VEC(Vec3( 1.47272865e+01, 1.47732830e+02, 2.61213219e+02), forces1[307], tol); -ASSERT_EQUAL_VEC(Vec3( 4.44151506e+01, 1.15101400e+02, 1.21319924e+02), forces1[308], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53470761e+02, 2.00350042e+02, 3.38960006e+01), forces1[309], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06594777e+02, -1.16077611e+02, 5.96359334e+01), forces1[310], tol); -ASSERT_EQUAL_VEC(Vec3(-2.01610478e+02, 4.15967754e+01, 4.19293914e+02), forces1[311], tol); -ASSERT_EQUAL_VEC(Vec3( 4.40516207e+02, 1.34417352e+02, 7.74205210e+01), forces1[312], tol); -ASSERT_EQUAL_VEC(Vec3(-3.89160154e+02, -2.83344572e+02, -4.23546685e+02), forces1[313], tol); -ASSERT_EQUAL_VEC(Vec3( 2.42068089e+02, -6.45978033e+02, 3.91506210e+02), forces1[314], tol); -ASSERT_EQUAL_VEC(Vec3(-3.71531404e+02, -4.54039493e+01, 5.02846871e+02), forces1[315], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52589600e+02, 8.61061306e+01, 2.63798519e+02), forces1[316], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18337261e+01, -1.24898517e+02, -2.32012734e+02), forces1[317], tol); -ASSERT_EQUAL_VEC(Vec3(-4.28763733e+02, 2.69298277e+02, -1.63307373e+02), forces1[318], tol); -ASSERT_EQUAL_VEC(Vec3( 6.90348283e+01, 2.01119799e+02, -1.25394407e+02), forces1[319], tol); -ASSERT_EQUAL_VEC(Vec3( 4.42904652e+01, -1.48495330e+02, 9.26084336e+01), forces1[320], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52950825e+01, 1.28676758e+02, -3.63357597e+02), forces1[321], tol); -ASSERT_EQUAL_VEC(Vec3(-5.24105679e+02, -9.42729828e+01, 1.18442536e+01), forces1[322], tol); -ASSERT_EQUAL_VEC(Vec3( 2.26120919e+02, 3.21635617e+02, -3.90518982e+02), forces1[323], tol); -ASSERT_EQUAL_VEC(Vec3( 3.59312804e+01, -3.07405817e+02, -5.38361197e+01), forces1[324], tol); -ASSERT_EQUAL_VEC(Vec3(-1.17174424e+02, 2.29573805e+02, 1.57259382e+02), forces1[325], tol); -ASSERT_EQUAL_VEC(Vec3(-9.86427642e+01, -2.13494062e+02, 9.34926885e+01), forces1[326], tol); -ASSERT_EQUAL_VEC(Vec3( 2.32229566e+02, 6.06664996e+01, -3.57479293e+02), forces1[327], tol); -ASSERT_EQUAL_VEC(Vec3(-4.16211931e+01, 1.12554898e+02, -2.00660318e+02), forces1[328], tol); -ASSERT_EQUAL_VEC(Vec3(-5.14819799e+01, 2.96285849e+02, 3.68505357e+02), forces1[329], tol); -ASSERT_EQUAL_VEC(Vec3( 1.02082491e+02, -9.70741301e+01, 3.02493232e+01), forces1[330], tol); -ASSERT_EQUAL_VEC(Vec3(-1.03774260e+02, -1.54760894e+02, 2.10251674e+02), forces1[331], tol); -ASSERT_EQUAL_VEC(Vec3( 1.90529911e+02, 6.04211367e+01, -9.59263387e+01), forces1[332], tol); -ASSERT_EQUAL_VEC(Vec3(-1.16797386e+02, -5.22831328e+02, 5.66578589e+02), forces1[333], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18104094e+02, -1.37421044e+02, 1.53038417e+02), forces1[334], tol); -ASSERT_EQUAL_VEC(Vec3(-9.04351491e+01, -1.47606538e+02, 8.89490712e+01), forces1[335], tol); -ASSERT_EQUAL_VEC(Vec3( 2.09976599e+01, -2.05500194e+02, 1.26830512e+02), forces1[336], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68042754e+02, -2.97763125e+02, -1.20743571e+02), forces1[337], tol); -ASSERT_EQUAL_VEC(Vec3( 3.99127236e+02, 2.95151794e+02, 3.91132406e+02), forces1[338], tol); -ASSERT_EQUAL_VEC(Vec3( 6.84892471e+02, -2.36108313e+02, 3.42251555e+02), forces1[339], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26672745e+02, 1.75724905e+02, 1.84788262e+02), forces1[340], tol); -ASSERT_EQUAL_VEC(Vec3(-1.32600337e+01, 4.13643381e+01, -7.23942729e+01), forces1[341], tol); -ASSERT_EQUAL_VEC(Vec3(-2.77915476e+02, 3.10253507e+02, 1.84685854e+01), forces1[342], tol); -ASSERT_EQUAL_VEC(Vec3( 1.17778181e+02, 2.88287609e+02, 2.83205737e+02), forces1[343], tol); -ASSERT_EQUAL_VEC(Vec3(-2.14268136e+01, 5.21209080e+02, 1.00248187e+02), forces1[344], tol); -ASSERT_EQUAL_VEC(Vec3( 1.24343155e+02, -1.12330818e+02, 2.11958643e+02), forces1[345], tol); -ASSERT_EQUAL_VEC(Vec3( 6.50667567e+00, 2.20334635e+02, -3.03866910e+02), forces1[346], tol); -ASSERT_EQUAL_VEC(Vec3( 3.27052657e+02, 1.14360733e+02, 4.53348042e+02), forces1[347], tol); -ASSERT_EQUAL_VEC(Vec3( 3.89440847e+01, 3.55283477e+02, 2.25739503e+01), forces1[348], tol); -ASSERT_EQUAL_VEC(Vec3(-2.25235013e+02, -2.30566443e+02, -2.32657384e+02), forces1[349], tol); -ASSERT_EQUAL_VEC(Vec3(-4.40565237e+02, -4.18860845e+01, -8.73230334e+01), forces1[350], tol); -ASSERT_EQUAL_VEC(Vec3( 2.03282144e+02, -7.41935514e+01, -3.11210179e+02), forces1[351], tol); -ASSERT_EQUAL_VEC(Vec3( 3.14039162e+02, -4.52223142e+01, 1.15692941e+02), forces1[352], tol); -ASSERT_EQUAL_VEC(Vec3(-3.05758853e+02, -8.44053388e+01, 2.77050868e+02), forces1[353], tol); -ASSERT_EQUAL_VEC(Vec3( 6.03148128e+02, 7.49868064e+01, 1.08098034e+02), forces1[354], tol); -ASSERT_EQUAL_VEC(Vec3( 1.19374260e+02, 3.21999447e+02, 1.19594257e+01), forces1[355], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06938874e+02, 2.87582961e+01, 2.37371892e+02), forces1[356], tol); -ASSERT_EQUAL_VEC(Vec3( 3.21431483e+02, -7.92928539e+02, 4.18517370e+01), forces1[357], tol); -ASSERT_EQUAL_VEC(Vec3(-1.08651668e+02, 2.36736551e+02, -5.75424218e+02), forces1[358], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53739502e+02, -4.66583392e+02, 3.71587906e+02), forces1[359], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56290228e+02, -8.97065131e+01, -3.26308160e+02), forces1[360], tol); -ASSERT_EQUAL_VEC(Vec3( 3.42780206e+02, -3.18082387e+01, -4.08917799e+02), forces1[361], tol); -ASSERT_EQUAL_VEC(Vec3( 1.47584556e+02, 4.76918724e+02, 4.19802714e+01), forces1[362], tol); -ASSERT_EQUAL_VEC(Vec3( 6.13790369e-01, -4.13596811e+01, 4.39898790e+02), forces1[363], tol); -ASSERT_EQUAL_VEC(Vec3(-2.56833301e+02, -1.83037454e+02, 5.99913896e+01), forces1[364], tol); -ASSERT_EQUAL_VEC(Vec3( 2.48242646e+02, 5.50143719e+01, -1.55138787e+01), forces1[365], tol); -ASSERT_EQUAL_VEC(Vec3(-1.93628316e+02, -1.86534319e+01, 6.08100347e-01), forces1[366], tol); -ASSERT_EQUAL_VEC(Vec3(-1.63211080e+02, 1.90023269e+02, -4.93452441e+02), forces1[367], tol); -ASSERT_EQUAL_VEC(Vec3(-2.85383893e+01, -4.66032637e+02, -2.10849424e+02), forces1[368], tol); -ASSERT_EQUAL_VEC(Vec3( 2.27151522e+02, 1.52613464e+01, -1.64052797e+02), forces1[369], tol); -ASSERT_EQUAL_VEC(Vec3(-1.07153893e+02, 2.01257828e+01, 6.04845684e+01), forces1[370], tol); -ASSERT_EQUAL_VEC(Vec3( 2.41332167e+02, 4.05683718e+02, -8.71412268e+01), forces1[371], tol); -ASSERT_EQUAL_VEC(Vec3( 1.33799918e+02, 1.72174836e+02, -1.15342391e+02), forces1[372], tol); -ASSERT_EQUAL_VEC(Vec3( 4.19296496e+02, -4.68248373e+02, -3.30514440e+02), forces1[373], tol); -ASSERT_EQUAL_VEC(Vec3(-1.88005342e+02, -2.43525310e+02, 8.87016270e+01), forces1[374], tol); -ASSERT_EQUAL_VEC(Vec3( 1.54021861e+02, 2.52343848e+02, 1.76403306e+02), forces1[375], tol); -ASSERT_EQUAL_VEC(Vec3(-1.10645837e+02, 3.33150389e+01, 1.23771287e+02), forces1[376], tol); -ASSERT_EQUAL_VEC(Vec3( 1.64776571e+02, 8.96065400e-01, 1.56210970e+02), forces1[377], tol); -ASSERT_EQUAL_VEC(Vec3(-1.65400014e+02, -1.50236349e+02, 2.41793992e+02), forces1[378], tol); -ASSERT_EQUAL_VEC(Vec3( 4.78064936e+02, -2.36432797e+02, 4.04933329e+02), forces1[379], tol); -ASSERT_EQUAL_VEC(Vec3(-2.33366235e+02, -7.47065850e+02, 1.09704004e+02), forces1[380], tol); -ASSERT_EQUAL_VEC(Vec3( 1.09391089e+02, -3.37517532e+02, 1.99876556e+02), forces1[381], tol); -ASSERT_EQUAL_VEC(Vec3( 1.45367287e+02, 1.34686504e+02, 3.46411849e+02), forces1[382], tol); -ASSERT_EQUAL_VEC(Vec3(-8.86938780e+01, 1.70740693e+02, 1.86633045e+02), forces1[383], tol); -ASSERT_EQUAL_VEC(Vec3( 1.03267086e+02, -2.54994757e+02, -2.04500741e+01), forces1[384], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06124981e+02, -3.72066492e+02, 9.10787327e+01), forces1[385], tol); -ASSERT_EQUAL_VEC(Vec3( 4.33830100e+02, 5.30903070e+02, 1.18187318e+02), forces1[386], tol); -ASSERT_EQUAL_VEC(Vec3(-3.34819970e+02, 2.29884568e+02, 1.73578789e+02), forces1[387], tol); -ASSERT_EQUAL_VEC(Vec3(-3.26221462e+00, 3.50944116e+02, -5.69053250e+00), forces1[388], tol); -ASSERT_EQUAL_VEC(Vec3(-3.18235913e+02, -4.16037121e+02, 3.93503581e+00), forces1[389], tol); -ASSERT_EQUAL_VEC(Vec3(-9.01641240e+01, -2.83129838e+02, -1.78590049e+02), forces1[390], tol); -ASSERT_EQUAL_VEC(Vec3(-1.86933795e+02, 2.96536275e+02, -1.29641779e+02), forces1[391], tol); -ASSERT_EQUAL_VEC(Vec3(-7.78116915e+02, 3.37770325e+02, 2.46251396e+02), forces1[392], tol); -ASSERT_EQUAL_VEC(Vec3(-4.88284661e+02, -3.62815567e+02, 1.09199755e+02), forces1[393], tol); -ASSERT_EQUAL_VEC(Vec3( 1.68815587e+02, -1.54091010e+02, 2.44129524e+02), forces1[394], tol); -ASSERT_EQUAL_VEC(Vec3( 8.59930047e+01, -4.73421243e+02, 1.81326697e+02), forces1[395], tol); -ASSERT_EQUAL_VEC(Vec3(-5.15421845e+01, 3.80615163e+01, 1.48495241e+02), forces1[396], tol); -ASSERT_EQUAL_VEC(Vec3( 4.40902491e+02, -9.36772951e+01, 2.19937945e+02), forces1[397], tol); -ASSERT_EQUAL_VEC(Vec3( 4.55969069e+01, 5.74615780e+02, -5.74937832e+01), forces1[398], tol); -ASSERT_EQUAL_VEC(Vec3( 1.07815006e+02, -3.19754972e+02, 1.16024132e+01), forces1[399], tol); -ASSERT_EQUAL_VEC(Vec3(-1.73815462e+02, -1.72653517e+02, 3.26124498e+02), forces1[400], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48598839e+02, -4.95402699e+02, -1.37769354e+02), forces1[401], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43484140e+02, -7.71666828e+01, 1.27161815e+02), forces1[402], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26016451e+02, -3.81399993e+02, -2.85764454e+02), forces1[403], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53052241e+02, -2.67885549e+02, 1.51849847e+02), forces1[404], tol); -ASSERT_EQUAL_VEC(Vec3(-1.01063516e+02, -1.79837645e+02, -2.05759531e+02), forces1[405], tol); -ASSERT_EQUAL_VEC(Vec3( 1.32065714e+02, -2.56988983e+02, -4.06119988e+02), forces1[406], tol); -ASSERT_EQUAL_VEC(Vec3( 5.49845413e+01, 5.21020888e+01, -2.40829321e+01), forces1[407], tol); -ASSERT_EQUAL_VEC(Vec3(-3.04151550e+01, -3.45385052e+02, 3.52732396e+02), forces1[408], tol); -ASSERT_EQUAL_VEC(Vec3( 5.76196622e+02, 2.51408790e+02, -2.05694905e+02), forces1[409], tol); -ASSERT_EQUAL_VEC(Vec3(-5.46232631e+02, -3.81426810e+01, 1.55940692e+02), forces1[410], tol); -ASSERT_EQUAL_VEC(Vec3(-1.00759671e+02, 2.13338964e+02, 3.33068075e+02), forces1[411], tol); -ASSERT_EQUAL_VEC(Vec3( 8.00270910e+01, 1.85305844e+02, -4.43363841e+02), forces1[412], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53961901e+02, 1.76452569e+01, 5.07044493e+01), forces1[413], tol); -ASSERT_EQUAL_VEC(Vec3(-2.54074128e+01, -1.01739609e+02, -1.47118371e+02), forces1[414], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53018564e+02, 2.89709169e+02, -1.78282141e+02), forces1[415], tol); -ASSERT_EQUAL_VEC(Vec3(-1.30257510e+02, -4.66610129e+02, -3.53374887e+02), forces1[416], tol); -ASSERT_EQUAL_VEC(Vec3( 1.82472116e+02, 3.77974857e+02, 1.90476251e+02), forces1[417], tol); -ASSERT_EQUAL_VEC(Vec3(-2.59801797e+02, 3.29708022e+02, 3.93439213e+02), forces1[418], tol); -ASSERT_EQUAL_VEC(Vec3(-1.08573872e+01, -5.30931700e+02, -1.53102646e+01), forces1[419], tol); -ASSERT_EQUAL_VEC(Vec3(-3.27827015e+01, -3.45915139e+02, -1.45604367e+02), forces1[420], tol); -ASSERT_EQUAL_VEC(Vec3(-1.92424159e+02, 3.69087390e+00, -1.26537763e+02), forces1[421], tol); -ASSERT_EQUAL_VEC(Vec3( 2.61430852e+02, -1.63239575e+02, -1.22742408e+02), forces1[422], tol); -ASSERT_EQUAL_VEC(Vec3(-1.42902423e+02, 4.15429338e+02, 5.04220960e+02), forces1[423], tol); -ASSERT_EQUAL_VEC(Vec3( 3.36581855e+02, -1.06051528e+02, 4.54169047e+02), forces1[424], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32221397e+02, -1.86391490e+00, 4.48412526e+01), forces1[425], tol); -ASSERT_EQUAL_VEC(Vec3( 4.12435657e+02, -5.04677016e+02, 4.00894902e+02), forces1[426], tol); -ASSERT_EQUAL_VEC(Vec3(-1.54630518e+02, -2.68571764e+02, -1.52962938e+01), forces1[427], tol); -ASSERT_EQUAL_VEC(Vec3( 2.69725750e+02, 2.18570974e+02, -1.75370463e+02), forces1[428], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77174496e+01, -4.66383654e+01, 6.24325771e+01), forces1[429], tol); -ASSERT_EQUAL_VEC(Vec3(-1.29891497e+02, 8.07513513e+01, 1.84796034e+01), forces1[430], tol); -ASSERT_EQUAL_VEC(Vec3( 1.76173623e+02, -3.20023221e+02, -2.47794470e+02), forces1[431], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68165877e+02, 2.05742253e+02, -1.17371622e+02), forces1[432], tol); -ASSERT_EQUAL_VEC(Vec3(-1.93368937e+02, 7.77030375e+01, -1.60942447e+02), forces1[433], tol); -ASSERT_EQUAL_VEC(Vec3(-8.97795426e+01, 2.56568674e+02, -3.94711205e+02), forces1[434], tol); -ASSERT_EQUAL_VEC(Vec3(-2.33025806e+02, 9.53111817e+01, 3.02984350e+02), forces1[435], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34416040e+01, -4.44341362e+02, -4.99903855e+00), forces1[436], tol); -ASSERT_EQUAL_VEC(Vec3( 3.32041110e+02, -4.10874874e+02, -6.13697373e+01), forces1[437], tol); -ASSERT_EQUAL_VEC(Vec3(-1.45971034e+02, -2.28311940e+02, -2.99006034e+02), forces1[438], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38544644e+02, -1.27394726e+02, -2.93844502e+02), forces1[439], tol); -ASSERT_EQUAL_VEC(Vec3( 2.97433737e+02, 3.38274025e+02, -2.14834485e+02), forces1[440], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49325388e+01, 1.88464224e+02, -8.02957242e+01), forces1[441], tol); -ASSERT_EQUAL_VEC(Vec3(-1.32436289e+02, -3.86539713e+02, -6.69802109e+01), forces1[442], tol); -ASSERT_EQUAL_VEC(Vec3( 1.84591010e+01, 2.24796153e+02, -1.36943849e+02), forces1[443], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15317088e+02, 1.06092575e+02, -1.25718903e+02), forces1[444], tol); -ASSERT_EQUAL_VEC(Vec3( 3.07793097e+02, 4.34340797e+02, 2.17184869e+01), forces1[445], tol); -ASSERT_EQUAL_VEC(Vec3( 8.06779109e+00, 4.99925960e+01, -3.14233384e+02), forces1[446], tol); -ASSERT_EQUAL_VEC(Vec3( 1.36943103e+03, 6.44803649e+02, -3.85109067e+02), forces1[447], tol); -ASSERT_EQUAL_VEC(Vec3( 3.32242272e+02, -1.04208324e+02, -4.08589589e+02), forces1[448], tol); -ASSERT_EQUAL_VEC(Vec3( 3.73255876e+02, 2.70951542e+02, 3.80697548e+02), forces1[449], tol); -ASSERT_EQUAL_VEC(Vec3(-2.09798900e+02, 4.29900198e+02, 8.40839028e+02), forces1[450], tol); -ASSERT_EQUAL_VEC(Vec3(-3.48538763e+02, -3.63130308e+02, 5.10379446e+02), forces1[451], tol); -ASSERT_EQUAL_VEC(Vec3(-3.28341714e+00, 4.69698489e-01, -6.05231376e+00), forces1[452], tol); -ASSERT_EQUAL_VEC(Vec3( 3.83253792e+01, 3.59830676e+02, 8.67060383e+02), forces1[453], tol); -ASSERT_EQUAL_VEC(Vec3(-1.57391804e+02, 5.68715567e+02, -1.87718510e+02), forces1[454], tol); -ASSERT_EQUAL_VEC(Vec3( 4.16155580e+02, 5.83079478e+01, -5.75730469e+02), forces1[455], tol); -ASSERT_EQUAL_VEC(Vec3( 2.58779906e+02, -1.00655656e+02, -4.43420159e+02), forces1[456], tol); -ASSERT_EQUAL_VEC(Vec3( 1.38953668e+02, 4.93490759e+02, 9.06786307e+02), forces1[457], tol); -ASSERT_EQUAL_VEC(Vec3(-4.81272447e+01, 9.53310029e+02, -1.83936453e+02), forces1[458], tol); -ASSERT_EQUAL_VEC(Vec3( 6.64523579e+02, -3.77321549e+02, 1.93098326e+02), forces1[459], tol); -ASSERT_EQUAL_VEC(Vec3( 8.34547360e+01, 1.77795489e+02, 4.70670853e+02), forces1[460], tol); -ASSERT_EQUAL_VEC(Vec3( 9.98948440e+02, -3.98575936e+02, 9.83617396e+02), forces1[461], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06587875e+02, -4.10766357e+01, 4.75189712e+02), forces1[462], tol); -ASSERT_EQUAL_VEC(Vec3(-7.58615745e+01, 1.45234354e+02, 4.52909546e+01), forces1[463], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13502225e+02, 5.29861493e+02, -3.00954235e+02), forces1[464], tol); -ASSERT_EQUAL_VEC(Vec3(-1.46461752e+02, -3.86629519e+02, -6.42383694e+02), forces1[465], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70141632e+02, 3.67195269e+02, -1.78826923e+02), forces1[466], tol); -ASSERT_EQUAL_VEC(Vec3(-1.23815721e+02, -1.77323218e+02, 2.37363709e+02), forces1[467], tol); -ASSERT_EQUAL_VEC(Vec3(-4.94036325e+02, 1.34870851e+02, 6.98764302e+02), forces1[468], tol); -ASSERT_EQUAL_VEC(Vec3( 7.08752797e+02, 1.85258249e+02, 5.51159246e+02), forces1[469], tol); -ASSERT_EQUAL_VEC(Vec3( 2.01291495e+02, -5.84720738e+02, 5.82921267e+02), forces1[470], tol); -ASSERT_EQUAL_VEC(Vec3( 5.29650511e+02, 4.07054187e+01, 9.99156291e+01), forces1[471], tol); -ASSERT_EQUAL_VEC(Vec3(-1.19707215e+02, 4.42978965e+02, -2.70437350e+02), forces1[472], tol); -ASSERT_EQUAL_VEC(Vec3(-6.87780787e+02, -1.32227443e+02, -7.35818874e+01), forces1[473], tol); -ASSERT_EQUAL_VEC(Vec3(-2.99625888e+02, 8.14649386e+02, 2.72145234e+01), forces1[474], tol); -ASSERT_EQUAL_VEC(Vec3(-2.26042622e+02, -3.49838280e+02, -2.73671757e+02), forces1[475], tol); -ASSERT_EQUAL_VEC(Vec3(-3.38859328e+02, 8.74208207e+02, 2.98575880e+02), forces1[476], tol); -ASSERT_EQUAL_VEC(Vec3( 5.63054826e+02, 1.51181551e+02, -1.10341988e+02), forces1[477], tol); -ASSERT_EQUAL_VEC(Vec3( 3.44122544e+02, 2.73292900e+02, 5.44577027e+02), forces1[478], tol); -ASSERT_EQUAL_VEC(Vec3( 3.29121922e+01, 3.66764263e+02, 3.30304492e+02), forces1[479], tol); -ASSERT_EQUAL_VEC(Vec3(-4.98111364e+01, -3.26335514e+02, -6.47508532e+02), forces1[480], tol); -ASSERT_EQUAL_VEC(Vec3( 6.05970391e+01, -1.41039500e+02, 4.05545963e+02), forces1[481], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35191146e+03, 5.06763950e+01, -1.40076012e+02), forces1[482], tol); -ASSERT_EQUAL_VEC(Vec3( 7.70144671e+01, -2.68985491e+02, -1.75067707e+02), forces1[483], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89547256e+02, -2.32975097e+02, -2.54877338e+02), forces1[484], tol); -ASSERT_EQUAL_VEC(Vec3( 2.37141279e+02, 6.49194662e+02, 1.01757997e+02), forces1[485], tol); -ASSERT_EQUAL_VEC(Vec3(-3.38583468e+02, 1.34692366e+02, 7.89810999e+02), forces1[486], tol); -ASSERT_EQUAL_VEC(Vec3(-5.59974436e+02, -1.46817839e+02, 3.62598852e+01), forces1[487], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52715734e+02, 1.16573021e+02, -4.55490471e+02), forces1[488], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56757625e+01, 1.02550774e+02, -9.81490452e+01), forces1[489], tol); -ASSERT_EQUAL_VEC(Vec3(-4.22997875e+02, 8.89168040e+02, -9.19714230e+01), forces1[490], tol); -ASSERT_EQUAL_VEC(Vec3( 5.13351576e+02, 4.56111157e+02, -6.86014949e+01), forces1[491], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12137269e+02, 6.84704993e+02, 4.44636019e+01), forces1[492], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15980740e+02, 3.33093803e+02, -4.41281918e+02), forces1[493], tol); -ASSERT_EQUAL_VEC(Vec3(-4.77801486e-01, -2.16935238e+02, -5.39082462e+02), forces1[494], tol); -ASSERT_EQUAL_VEC(Vec3(-3.91584043e+02, 2.80049288e+02, 4.50318805e+02), forces1[495], tol); -ASSERT_EQUAL_VEC(Vec3( 2.40458755e+02, -1.24624268e+02, -2.70106867e+02), forces1[496], tol); -ASSERT_EQUAL_VEC(Vec3( 7.23763468e+01, 1.59346249e+01, -5.23998896e+01), forces1[497], tol); -ASSERT_EQUAL_VEC(Vec3(-1.41166795e+02, -3.23959396e+02, -4.05099054e+02), forces1[498], tol); -ASSERT_EQUAL_VEC(Vec3( 3.93723518e+02, 3.77829620e+02, -4.56301133e+02), forces1[499], tol); -ASSERT_EQUAL_VEC(Vec3(-2.68009341e+02, -2.12736933e+02, -7.96445111e+02), forces1[500], tol); -ASSERT_EQUAL_VEC(Vec3( 9.59480600e+02, 1.74115813e+02, 1.16126031e+01), forces1[501], tol); -ASSERT_EQUAL_VEC(Vec3(-3.93575465e+01, 1.29079012e+01, -1.89350441e+02), forces1[502], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49464458e+02, 7.84144311e+01, -4.78252942e+02), forces1[503], tol); -ASSERT_EQUAL_VEC(Vec3( 5.16031453e+02, 6.52899912e+02, -5.05259519e+02), forces1[504], tol); -ASSERT_EQUAL_VEC(Vec3( 5.10845388e+01, -5.19606468e+02, 6.82761515e+00), forces1[505], tol); -ASSERT_EQUAL_VEC(Vec3(-7.68910836e+01, -1.13215494e+03, -7.05213833e+02), forces1[506], tol); -ASSERT_EQUAL_VEC(Vec3(-2.13058157e+02, 1.70549578e+00, 8.26365735e+02), forces1[507], tol); -ASSERT_EQUAL_VEC(Vec3( 1.86647493e+01, 1.91383875e+02, 4.18426660e+02), forces1[508], tol); -ASSERT_EQUAL_VEC(Vec3( 2.35361629e+02, 3.79668975e+02, -3.13824585e+02), forces1[509], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26205360e+02, -2.59705171e+02, -6.76333230e+02), forces1[510], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38240856e+02, -3.38607085e+02, 2.20460843e+02), forces1[511], tol); -ASSERT_EQUAL_VEC(Vec3(-2.25429800e+02, -7.80817051e+02, -2.43643666e+02), forces1[512], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10585529e+01, 4.16080403e+01, 6.15476974e+01), forces1[513], tol); -ASSERT_EQUAL_VEC(Vec3( 6.75639613e+01, 9.67778416e+01, 6.03424295e+02), forces1[514], tol); -ASSERT_EQUAL_VEC(Vec3(-1.27080812e+02, -4.74945218e+01, 4.67735437e+02), forces1[515], tol); -ASSERT_EQUAL_VEC(Vec3(-2.72716149e+02, 3.30769806e+01, -2.81976538e+02), forces1[516], tol); -ASSERT_EQUAL_VEC(Vec3( 4.78709091e+02, 8.27541480e+01, -3.32366235e+02), forces1[517], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48574421e+02, 1.88635391e+02, -5.92117141e+02), forces1[518], tol); -ASSERT_EQUAL_VEC(Vec3(-9.24795792e+01, 6.86826191e+01, 5.16804407e+02), forces1[519], tol); -ASSERT_EQUAL_VEC(Vec3( 4.32902806e+02, -4.67485932e+02, 1.09369501e+02), forces1[520], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19075642e+02, 2.09097287e+00, 1.05235595e+03), forces1[521], tol); -ASSERT_EQUAL_VEC(Vec3(-3.95717922e+02, -3.31346394e+02, 6.33930848e+02), forces1[522], tol); -ASSERT_EQUAL_VEC(Vec3( 2.29152652e+01, 5.34146722e+02, 3.47887307e+01), forces1[523], tol); -ASSERT_EQUAL_VEC(Vec3( 4.58874513e+02, -2.39333403e+02, 5.46784973e+01), forces1[524], tol); -ASSERT_EQUAL_VEC(Vec3( 9.97690238e+01, 6.32211339e+02, -2.38267224e+02), forces1[525], tol); -ASSERT_EQUAL_VEC(Vec3(-5.41815785e+02, 2.23592441e+02, 3.43988502e+02), forces1[526], tol); -ASSERT_EQUAL_VEC(Vec3( 6.66020295e+02, 4.01173887e+02, 3.95444004e+02), forces1[527], tol); -ASSERT_EQUAL_VEC(Vec3(-3.06415141e+02, 9.39706150e+02, -8.27903644e+01), forces1[528], tol); -ASSERT_EQUAL_VEC(Vec3(-6.74078464e+02, 3.08248161e+02, 3.73260958e+02), forces1[529], tol); -ASSERT_EQUAL_VEC(Vec3( 2.12314396e+02, -1.45381664e+02, 2.64300301e+02), forces1[530], tol); -ASSERT_EQUAL_VEC(Vec3( 5.45322328e+01, -8.21066892e+01, 1.51406100e+01), forces1[531], tol); -ASSERT_EQUAL_VEC(Vec3( 1.18910001e+03, 9.92330102e+02, 1.56915624e+02), forces1[532], tol); -ASSERT_EQUAL_VEC(Vec3( 4.27125646e+02, 1.57551086e+02, -3.44348874e+02), forces1[533], tol); -ASSERT_EQUAL_VEC(Vec3( 4.25889733e+02, -8.14519408e+02, -2.37525602e+02), forces1[534], tol); -ASSERT_EQUAL_VEC(Vec3( 1.28754744e+02, 2.55775344e+02, 4.07880224e+02), forces1[535], tol); -ASSERT_EQUAL_VEC(Vec3(-4.27463797e+02, 1.69782847e+02, 1.81381656e+02), forces1[536], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35673145e+01, 6.03614577e+01, -2.72320347e+02), forces1[537], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33191831e+02, 2.70237134e+02, -1.39415972e+02), forces1[538], tol); -ASSERT_EQUAL_VEC(Vec3( 4.27473593e+02, 1.39188845e+02, 1.50065516e+02), forces1[539], tol); -ASSERT_EQUAL_VEC(Vec3(-8.29214695e+01, -1.00138197e+02, -6.82077450e+01), forces1[540], tol); -ASSERT_EQUAL_VEC(Vec3( 4.42484380e+02, -8.63519014e+02, 5.13464509e+02), forces1[541], tol); -ASSERT_EQUAL_VEC(Vec3( 2.60684466e+02, -6.37356238e+01, 1.70982604e+02), forces1[542], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90400226e+02, -6.79695956e+01, -2.36488456e+02), forces1[543], tol); -ASSERT_EQUAL_VEC(Vec3( 2.47126838e+02, -6.89575321e+02, 2.32358423e+02), forces1[544], tol); -ASSERT_EQUAL_VEC(Vec3(-5.36761583e+02, 2.88858194e+02, -6.13643573e+02), forces1[545], tol); -ASSERT_EQUAL_VEC(Vec3(-7.93525749e+02, 1.07662863e+02, 1.05022658e+03), forces1[546], tol); -ASSERT_EQUAL_VEC(Vec3( 5.82900512e+02, 1.51819356e+02, 4.23873744e+02), forces1[547], tol); -ASSERT_EQUAL_VEC(Vec3( 1.88325572e+02, 3.18360865e+02, 2.45830156e+02), forces1[548], tol); -ASSERT_EQUAL_VEC(Vec3( 2.61705414e+02, 2.14134022e+02, -1.84880999e+02), forces1[549], tol); -ASSERT_EQUAL_VEC(Vec3(-6.23192888e+01, -3.92071740e+02, 3.63685367e+02), forces1[550], tol); -ASSERT_EQUAL_VEC(Vec3( 2.19338376e+02, -3.09058211e+02, 2.60284559e+02), forces1[551], tol); -ASSERT_EQUAL_VEC(Vec3( 5.02128707e+02, -5.84024469e+02, -2.55784996e+02), forces1[552], tol); -ASSERT_EQUAL_VEC(Vec3( 3.03909158e+02, 8.14707135e+01, 3.89632253e+02), forces1[553], tol); -ASSERT_EQUAL_VEC(Vec3(-1.63583654e+01, -1.20664911e+02, -1.80828909e+02), forces1[554], tol); -ASSERT_EQUAL_VEC(Vec3( 5.41992468e+02, 1.88563930e+02, 1.13691301e+02), forces1[555], tol); -ASSERT_EQUAL_VEC(Vec3( 1.22553432e+01, -7.61799733e+02, -5.24485038e+02), forces1[556], tol); -ASSERT_EQUAL_VEC(Vec3(-4.66745376e+02, 1.60550422e+02, 1.60943530e+02), forces1[557], tol); -ASSERT_EQUAL_VEC(Vec3( 1.52464706e+02, -2.28608668e+02, -5.94662997e+01), forces1[558], tol); -ASSERT_EQUAL_VEC(Vec3( 1.80874781e+02, 2.02580348e+02, 2.57314201e+02), forces1[559], tol); -ASSERT_EQUAL_VEC(Vec3( 6.16836590e+02, -3.58505580e+02, -5.69821380e+02), forces1[560], tol); -ASSERT_EQUAL_VEC(Vec3(-1.57121513e+02, -1.13551528e+02, -1.64421656e+02), forces1[561], tol); -ASSERT_EQUAL_VEC(Vec3(-5.95579860e+02, 1.76709860e+02, -1.20420471e+02), forces1[562], tol); -ASSERT_EQUAL_VEC(Vec3(-6.71038012e+01, 7.56227414e+02, 5.71572718e+02), forces1[563], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03114489e+02, -5.27279840e+02, -8.87711978e+01), forces1[564], tol); -ASSERT_EQUAL_VEC(Vec3(-1.55593136e+02, 2.45854044e+02, 3.01808246e+01), forces1[565], tol); -ASSERT_EQUAL_VEC(Vec3( 1.30686350e+02, -2.25620374e+02, -3.22214134e+02), forces1[566], tol); -ASSERT_EQUAL_VEC(Vec3( 8.49438622e+00, -1.67348790e+02, 1.64216652e+02), forces1[567], tol); -ASSERT_EQUAL_VEC(Vec3(-2.31492960e+02, -5.94613152e+00, -4.92415232e+02), forces1[568], tol); -ASSERT_EQUAL_VEC(Vec3(-1.99398672e+02, -1.39998676e+02, 2.20660038e+01), forces1[569], tol); -ASSERT_EQUAL_VEC(Vec3(-2.65259682e+02, 6.41897575e+02, 2.96772423e+01), forces1[570], tol); -ASSERT_EQUAL_VEC(Vec3(-6.43663438e+02, -9.18800569e+01, 4.59932589e+02), forces1[571], tol); -ASSERT_EQUAL_VEC(Vec3( 3.08969568e+02, 8.15568208e+02, 4.66102799e+02), forces1[572], tol); -ASSERT_EQUAL_VEC(Vec3( 3.27967531e+02, -3.65749496e+02, -7.14744561e+02), forces1[573], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27124135e+01, 1.71611100e+02, 5.53831720e+02), forces1[574], tol); -ASSERT_EQUAL_VEC(Vec3(-3.66175366e+02, -4.26970546e+02, 4.19237233e+02), forces1[575], tol); -ASSERT_EQUAL_VEC(Vec3( 3.35350939e+02, 4.34257827e+02, 3.88519433e+02), forces1[576], tol); -ASSERT_EQUAL_VEC(Vec3( 1.92391997e+02, 3.19970198e+01, 2.85801367e+02), forces1[577], tol); -ASSERT_EQUAL_VEC(Vec3(-1.98802026e+02, -5.26322826e+02, 3.78354799e+02), forces1[578], tol); -ASSERT_EQUAL_VEC(Vec3( 1.45671139e+01, -4.73231557e+02, 1.99919499e+02), forces1[579], tol); -ASSERT_EQUAL_VEC(Vec3(-4.54983469e+02, -4.41701623e+02, -1.24425267e+01), forces1[580], tol); -ASSERT_EQUAL_VEC(Vec3(-4.14904603e+02, 2.39751623e+02, 1.50738334e+02), forces1[581], tol); -ASSERT_EQUAL_VEC(Vec3(-3.06008464e+02, -5.48479559e+02, 1.68208702e+02), forces1[582], tol); -ASSERT_EQUAL_VEC(Vec3(-4.75151928e+02, -5.13940177e+02, -3.05856025e+02), forces1[583], tol); -ASSERT_EQUAL_VEC(Vec3(-1.94335510e+02, 1.30203790e+02, -3.61867940e+02), forces1[584], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90897312e+02, 9.91504462e+01, -5.15012540e+02), forces1[585], tol); -ASSERT_EQUAL_VEC(Vec3(-6.84365306e+01, 4.13335965e+01, -2.50193483e+02), forces1[586], tol); -ASSERT_EQUAL_VEC(Vec3(-1.33552662e+02, 4.37424563e+02, 3.93116748e+02), forces1[587], tol); -ASSERT_EQUAL_VEC(Vec3( 2.17908981e+02, -3.56944423e+02, -2.19072785e+01), forces1[588], tol); -ASSERT_EQUAL_VEC(Vec3(-6.71090167e+01, -2.85234245e+01, -4.77739167e+02), forces1[589], tol); -ASSERT_EQUAL_VEC(Vec3(-1.52916503e+02, 1.00727331e+02, 7.10681385e+01), forces1[590], tol); -ASSERT_EQUAL_VEC(Vec3(-4.51746452e+02, 3.40018663e+02, -4.62193306e+02), forces1[591], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10163906e+02, 9.78195399e+02, 6.76387827e+02), forces1[592], tol); -ASSERT_EQUAL_VEC(Vec3(-3.27558084e+02, -1.79605758e+02, -2.92242524e+02), forces1[593], tol); -ASSERT_EQUAL_VEC(Vec3(-1.59840534e+02, 2.90890718e+01, -2.88814524e+02), forces1[594], tol); -ASSERT_EQUAL_VEC(Vec3( 2.51648228e+02, -6.16115272e+02, -2.74650686e+02), forces1[595], tol); -ASSERT_EQUAL_VEC(Vec3(-4.29795517e+02, 2.97846602e+02, 2.42790721e+02), forces1[596], tol); -ASSERT_EQUAL_VEC(Vec3(-6.54290494e+01, -3.71027774e+00, 1.09362533e+02), forces1[597], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13635998e+02, 1.22421969e+02, -1.64181430e+02), forces1[598], tol); -ASSERT_EQUAL_VEC(Vec3(-4.58014050e+02, -5.24237205e+02, -4.23517393e+02), forces1[599], tol); -ASSERT_EQUAL_VEC(Vec3(-4.01134799e+02, -3.10910001e+02, -4.86430772e+02), forces1[600], tol); -ASSERT_EQUAL_VEC(Vec3( 5.98531056e+02, 2.14442508e+02, -3.57310754e+02), forces1[601], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56644787e+02, 7.12047294e+01, -6.74281621e+02), forces1[602], tol); -ASSERT_EQUAL_VEC(Vec3(-4.29285173e+02, 3.33264141e+02, -9.12908079e+02), forces1[603], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69676355e+01, -1.31676984e+02, -3.65274088e+02), forces1[604], tol); -ASSERT_EQUAL_VEC(Vec3(-9.51192754e+00, 3.29563459e+02, 1.84451527e+01), forces1[605], tol); -ASSERT_EQUAL_VEC(Vec3( 1.01475969e+03, 8.03401303e+01, -6.28558583e+02), forces1[606], tol); -ASSERT_EQUAL_VEC(Vec3( 2.39384773e+02, -4.08077252e+02, -1.62875513e+02), forces1[607], tol); -ASSERT_EQUAL_VEC(Vec3(-3.93619429e+02, -5.17089524e+02, 5.21862274e+02), forces1[608], tol); -ASSERT_EQUAL_VEC(Vec3(-1.37188342e+02, -3.86301530e+01, 4.26852072e+02), forces1[609], tol); -ASSERT_EQUAL_VEC(Vec3( 4.56729328e+02, 1.63797747e+02, 1.01225457e+01), forces1[610], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53128373e+02, 1.02270086e+02, -7.27501148e+02), forces1[611], tol); -ASSERT_EQUAL_VEC(Vec3(-1.82095738e+02, 7.23918424e+00, -5.10663887e+02), forces1[612], tol); -ASSERT_EQUAL_VEC(Vec3( 3.54485642e+02, -8.64332815e+01, -4.10166872e+02), forces1[613], tol); -ASSERT_EQUAL_VEC(Vec3(-6.67557801e+01, -7.57917504e+01, 7.77239103e+01), forces1[614], tol); -ASSERT_EQUAL_VEC(Vec3( 5.34069903e+01, -3.49052174e+02, -4.41040697e+02), forces1[615], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55993121e+02, -1.85106916e+02, -1.67700877e+01), forces1[616], tol); -ASSERT_EQUAL_VEC(Vec3(-2.60226735e+02, 4.50682021e+02, 6.87571461e+02), forces1[617], tol); -ASSERT_EQUAL_VEC(Vec3(-4.84797099e+01, -1.47670701e+02, 1.30460152e+02), forces1[618], tol); -ASSERT_EQUAL_VEC(Vec3(-5.03867743e+02, 3.00373068e+02, 2.90989581e+01), forces1[619], tol); -ASSERT_EQUAL_VEC(Vec3(-3.26901569e+02, -2.54115591e+02, -1.97292733e+02), forces1[620], tol); -ASSERT_EQUAL_VEC(Vec3( 2.23124353e+02, 4.31821924e+02, -3.45785529e+02), forces1[621], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69721533e+00, -7.70690632e+01, -4.19805145e-01), forces1[622], tol); -ASSERT_EQUAL_VEC(Vec3( 8.20412852e+02, 7.99595268e+02, 4.14368303e+02), forces1[623], tol); -ASSERT_EQUAL_VEC(Vec3(-6.20301649e+01, -4.27145295e+02, -3.70568508e+02), forces1[624], tol); -ASSERT_EQUAL_VEC(Vec3(-2.49452268e+01, -1.44630413e+02, 7.41551042e+02), forces1[625], tol); -ASSERT_EQUAL_VEC(Vec3(-6.41685916e+02, 6.29980324e+01, 1.57997582e+02), forces1[626], tol); -ASSERT_EQUAL_VEC(Vec3(-5.89339824e+02, -2.66715415e+02, 7.40290187e+01), forces1[627], tol); -ASSERT_EQUAL_VEC(Vec3( 5.26893408e+02, -4.19407888e+02, -2.37125726e+02), forces1[628], tol); -ASSERT_EQUAL_VEC(Vec3( 4.42841034e+02, -3.91060128e+00, 5.35417838e+02), forces1[629], tol); -ASSERT_EQUAL_VEC(Vec3( 2.38357324e+02, -5.34613334e+02, 2.63026026e+02), forces1[630], tol); -ASSERT_EQUAL_VEC(Vec3(-2.48018560e+02, -1.44967289e+01, 7.55539331e+02), forces1[631], tol); -ASSERT_EQUAL_VEC(Vec3(-8.06994987e+01, -4.42696335e+02, -4.11279013e+02), forces1[632], tol); -ASSERT_EQUAL_VEC(Vec3( 4.64135556e+02, -7.82576620e+02, 7.48567804e+02), forces1[633], tol); -ASSERT_EQUAL_VEC(Vec3( 3.75022611e+02, 3.06926438e+02, 2.76985876e+02), forces1[634], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43672142e+02, -1.70168440e+02, -2.61360725e+02), forces1[635], tol); -ASSERT_EQUAL_VEC(Vec3( 5.20775219e+02, -7.66015101e+00, -2.76123645e+02), forces1[636], tol); -ASSERT_EQUAL_VEC(Vec3(-2.28464032e+02, 5.33849652e+02, -3.58040265e+01), forces1[637], tol); -ASSERT_EQUAL_VEC(Vec3(-1.70105892e+02, -7.30464804e+01, -3.73115603e+02), forces1[638], tol); -ASSERT_EQUAL_VEC(Vec3( 1.90860772e+02, 1.53722926e+02, -9.75608771e+00), forces1[639], tol); -ASSERT_EQUAL_VEC(Vec3( 2.59606432e+02, 2.75260084e+01, -2.02338885e+02), forces1[640], tol); -ASSERT_EQUAL_VEC(Vec3( 3.25211743e+02, 2.78186538e+01, 5.21700978e+02), forces1[641], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12827984e+02, -6.70115666e+02, -7.85972574e+01), forces1[642], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09776266e+01, -4.90753809e+01, -2.91319708e+02), forces1[643], tol); -ASSERT_EQUAL_VEC(Vec3( 2.77337771e+02, 2.29328824e+02, 5.59770839e+02), forces1[644], tol); -ASSERT_EQUAL_VEC(Vec3( 4.59572121e+02, 1.21311799e+02, -4.79315463e+02), forces1[645], tol); -ASSERT_EQUAL_VEC(Vec3(-5.30617073e+02, -3.96120276e+02, -4.37634971e+01), forces1[646], tol); -ASSERT_EQUAL_VEC(Vec3( 5.87394968e+01, 3.74984490e+02, -4.60404623e+00), forces1[647], tol); -ASSERT_EQUAL_VEC(Vec3(-5.72051098e+02, -3.24819120e+02, -5.11080203e+01), forces1[648], tol); -ASSERT_EQUAL_VEC(Vec3(-1.51869992e+03, 1.63914081e+02, -7.68191132e+01), forces1[649], tol); -ASSERT_EQUAL_VEC(Vec3( 4.86996174e+02, 5.16874032e+02, -7.62783455e+01), forces1[650], tol); -ASSERT_EQUAL_VEC(Vec3( 2.48291844e+02, -8.90767951e+02, 6.71591151e+01), forces1[651], tol); -ASSERT_EQUAL_VEC(Vec3(-1.55902671e+00, 1.36945322e+02, -1.04198745e+02), forces1[652], tol); -ASSERT_EQUAL_VEC(Vec3(-1.20204512e+02, 2.89617545e+02, -6.63132635e+02), forces1[653], tol); -ASSERT_EQUAL_VEC(Vec3(-1.59431738e+02, -4.16178632e+02, 2.79410323e+02), forces1[654], tol); -ASSERT_EQUAL_VEC(Vec3(-2.98742818e+02, -2.96272331e+02, 3.36156942e+02), forces1[655], tol); -ASSERT_EQUAL_VEC(Vec3(-4.91918911e+02, -4.26618142e+01, 1.25349379e+01), forces1[656], tol); -ASSERT_EQUAL_VEC(Vec3(-2.47949202e+02, -2.67488422e+02, 2.21868927e+02), forces1[657], tol); -ASSERT_EQUAL_VEC(Vec3(-2.42806912e+01, 2.61371857e+01, -6.65056079e+01), forces1[658], tol); -ASSERT_EQUAL_VEC(Vec3( 3.64167110e+02, 4.13052005e+02, -5.51357152e+02), forces1[659], tol); -ASSERT_EQUAL_VEC(Vec3( 3.74835025e+02, -6.33613808e+02, 5.37740565e+00), forces1[660], tol); -ASSERT_EQUAL_VEC(Vec3( 6.51925635e+01, 5.97066743e+02, 2.54479164e+01), forces1[661], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53444698e+02, -7.31192246e-02, -3.64183108e+02), forces1[662], tol); -ASSERT_EQUAL_VEC(Vec3(-4.19912375e+01, 5.32489389e+02, 5.67529873e+02), forces1[663], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18364904e+01, -2.88671495e+02, 2.73914838e+02), forces1[664], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56684383e+02, 1.75277073e+02, 2.67819228e+02), forces1[665], tol); -ASSERT_EQUAL_VEC(Vec3(-1.42021939e+02, -1.93549789e+02, -4.45927086e+02), forces1[666], tol); -ASSERT_EQUAL_VEC(Vec3(-5.74451363e+01, -4.30855207e+02, -7.59667162e+02), forces1[667], tol); -ASSERT_EQUAL_VEC(Vec3(-4.90348302e+02, 2.12533193e+02, 1.21388630e+02), forces1[668], tol); -ASSERT_EQUAL_VEC(Vec3( 1.94617803e+02, 1.32085507e+02, 1.71425945e+02), forces1[669], tol); -ASSERT_EQUAL_VEC(Vec3(-2.73616831e+02, 7.78021634e+02, 2.78045494e+02), forces1[670], tol); -ASSERT_EQUAL_VEC(Vec3(-2.62086498e+02, 3.53986939e+02, 1.59714894e+02), forces1[671], tol); -ASSERT_EQUAL_VEC(Vec3( 3.73999411e+01, -6.21073575e+02, -1.89719863e+02), forces1[672], tol); -ASSERT_EQUAL_VEC(Vec3( 2.70260860e+02, -1.98707881e+02, -1.68446389e+02), forces1[673], tol); -ASSERT_EQUAL_VEC(Vec3(-3.72177189e+02, 2.16561917e+02, -7.51668953e+01), forces1[674], tol); -ASSERT_EQUAL_VEC(Vec3( 4.60661709e+02, -2.41016609e+02, 1.87547311e+02), forces1[675], tol); -ASSERT_EQUAL_VEC(Vec3(-8.64826359e+00, -4.96643240e+01, 4.14108827e+02), forces1[676], tol); -ASSERT_EQUAL_VEC(Vec3(-5.53564746e+02, 2.02028062e+02, 2.48782202e+02), forces1[677], tol); -ASSERT_EQUAL_VEC(Vec3( 4.12907277e+02, 3.97611070e+02, -7.77110932e+02), forces1[678], tol); -ASSERT_EQUAL_VEC(Vec3( 4.37842786e+02, 3.87794283e+02, -2.57117992e+02), forces1[679], tol); -ASSERT_EQUAL_VEC(Vec3(-1.99542679e+02, -5.31843337e+02, -7.08353449e+02), forces1[680], tol); -ASSERT_EQUAL_VEC(Vec3( 7.16866224e+01, 2.15343692e+02, -2.17970964e+02), forces1[681], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27242549e+02, -3.33098733e+02, -8.95890783e+01), forces1[682], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12351413e+02, -2.81401181e+02, 1.84388002e+02), forces1[683], tol); -ASSERT_EQUAL_VEC(Vec3( 5.30452008e+01, -1.73617150e+02, 3.80454625e+02), forces1[684], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53115972e+02, -4.19542700e+02, 3.62046980e+02), forces1[685], tol); -ASSERT_EQUAL_VEC(Vec3(-8.25931831e+01, 1.22022997e+02, -2.05397162e+01), forces1[686], tol); -ASSERT_EQUAL_VEC(Vec3(-4.09536810e+02, 3.88110352e+01, 7.34591479e+02), forces1[687], tol); -ASSERT_EQUAL_VEC(Vec3( 2.30482332e+02, 4.58992821e+01, -3.44448449e+02), forces1[688], tol); -ASSERT_EQUAL_VEC(Vec3(-2.99021647e+02, 6.71173507e+02, -1.01234738e+03), forces1[689], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93609447e+02, -1.62689588e+01, -5.52892039e+02), forces1[690], tol); -ASSERT_EQUAL_VEC(Vec3(-1.41608406e+02, -4.87778496e+02, 2.73057317e+02), forces1[691], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26623333e+02, -4.36398742e+02, 7.19789728e+01), forces1[692], tol); -ASSERT_EQUAL_VEC(Vec3( 1.33484619e+02, 2.25668941e+02, 5.65772889e+02), forces1[693], tol); -ASSERT_EQUAL_VEC(Vec3( 7.34328437e+02, 4.69241195e+02, -5.53029876e+02), forces1[694], tol); -ASSERT_EQUAL_VEC(Vec3(-6.36703964e+01, -2.05105546e+02, -4.73051447e+02), forces1[695], tol); -ASSERT_EQUAL_VEC(Vec3(-3.35917709e+02, -2.75962396e+02, 4.10424916e+02), forces1[696], tol); -ASSERT_EQUAL_VEC(Vec3(-1.98439482e+02, -2.81389872e+02, -1.48450243e+02), forces1[697], tol); -ASSERT_EQUAL_VEC(Vec3( 6.96988850e+02, -2.08391821e+02, -1.22085562e+02), forces1[698], tol); -ASSERT_EQUAL_VEC(Vec3( 6.16645748e+02, -2.04946166e+02, -2.28454418e+02), forces1[699], tol); -ASSERT_EQUAL_VEC(Vec3( 1.59003207e+02, 2.68316786e+02, -1.13415654e+02), forces1[700], tol); -ASSERT_EQUAL_VEC(Vec3( 2.52361394e+02, 3.78641684e+02, -1.30511196e+03), forces1[701], tol); -ASSERT_EQUAL_VEC(Vec3( 7.30824903e+02, -3.70993861e+02, -6.60674538e+02), forces1[702], tol); -ASSERT_EQUAL_VEC(Vec3(-4.64466620e+01, 1.28056043e+02, 8.75616746e+01), forces1[703], tol); -ASSERT_EQUAL_VEC(Vec3( 3.26209378e+02, -1.75823502e+02, 7.02935072e+01), forces1[704], tol); -ASSERT_EQUAL_VEC(Vec3( 9.80733438e+01, -2.26694393e+02, -2.00005470e+02), forces1[705], tol); -ASSERT_EQUAL_VEC(Vec3( 5.01964740e+01, 2.67230250e+02, 5.24657350e+02), forces1[706], tol); -ASSERT_EQUAL_VEC(Vec3(-2.52920558e+02, -8.04959983e+02, 4.03061082e+02), forces1[707], tol); -ASSERT_EQUAL_VEC(Vec3(-2.40233840e+02, -2.54317274e+02, 5.06457155e+02), forces1[708], tol); -ASSERT_EQUAL_VEC(Vec3( 4.48943662e+02, 3.49500783e+02, 2.88397394e+02), forces1[709], tol); -ASSERT_EQUAL_VEC(Vec3( 3.10154028e+02, 3.91036441e+02, -9.77447313e+02), forces1[710], tol); -ASSERT_EQUAL_VEC(Vec3( 7.63180049e+02, 2.06937000e+02, 1.03491184e+02), forces1[711], tol); -ASSERT_EQUAL_VEC(Vec3( 4.64445959e+02, 2.52682144e+02, 7.37736774e+01), forces1[712], tol); -ASSERT_EQUAL_VEC(Vec3( 9.14937811e+02, 3.40042036e+02, -2.99018712e+02), forces1[713], tol); -ASSERT_EQUAL_VEC(Vec3( 5.05299633e+02, 1.59569259e+02, -9.12327108e+00), forces1[714], tol); -ASSERT_EQUAL_VEC(Vec3(-3.46682702e+02, 1.40007400e+02, 1.54710821e+02), forces1[715], tol); -ASSERT_EQUAL_VEC(Vec3(-1.66209573e+01, -4.02206977e+01, -1.23824382e+02), forces1[716], tol); -ASSERT_EQUAL_VEC(Vec3(-7.57122358e+01, -4.48068180e+02, -4.21106487e+02), forces1[717], tol); -ASSERT_EQUAL_VEC(Vec3( 1.04054861e+03, -2.36054466e+02, 1.43176151e+01), forces1[718], tol); -ASSERT_EQUAL_VEC(Vec3(-2.65447945e+01, 6.06566369e+02, 4.91348853e+01), forces1[719], tol); -ASSERT_EQUAL_VEC(Vec3(-1.33799337e+02, -3.09748236e+02, 2.79834422e+01), forces1[720], tol); -ASSERT_EQUAL_VEC(Vec3(-9.76340308e+01, -1.13791543e+03, 4.60481356e+02), forces1[721], tol); -ASSERT_EQUAL_VEC(Vec3(-2.56814290e+02, 9.31514446e+01, 3.24980766e+02), forces1[722], tol); -ASSERT_EQUAL_VEC(Vec3(-8.66006627e+01, 5.60562069e+02, 2.96440803e+02), forces1[723], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26231775e+02, 1.40946887e+02, 3.97459193e+02), forces1[724], tol); -ASSERT_EQUAL_VEC(Vec3( 1.03134630e+02, -1.43345076e+02, 1.91574929e+02), forces1[725], tol); -ASSERT_EQUAL_VEC(Vec3(-9.29586783e+01, 4.44777503e+01, -9.69828338e+01), forces1[726], tol); -ASSERT_EQUAL_VEC(Vec3(-1.07833245e+02, 4.40219598e+01, 2.20888632e+02), forces1[727], tol); -ASSERT_EQUAL_VEC(Vec3( 2.92915083e+02, 5.54179388e+02, 3.57016084e+02), forces1[728], tol); -ASSERT_EQUAL_VEC(Vec3(-6.11696651e+02, 1.34361189e+02, 4.74917740e+01), forces1[729], tol); -ASSERT_EQUAL_VEC(Vec3(-8.07629704e+02, 1.63946818e+01, -2.56529488e+02), forces1[730], tol); -ASSERT_EQUAL_VEC(Vec3( 5.08866790e+01, 1.35087356e+01, 4.82186568e+02), forces1[731], tol); -ASSERT_EQUAL_VEC(Vec3(-5.01056820e+02, -7.35300196e+02, 6.67917664e+02), forces1[732], tol); -ASSERT_EQUAL_VEC(Vec3(-1.75353826e+00, 6.70720055e+02, -1.03873923e+03), forces1[733], tol); -ASSERT_EQUAL_VEC(Vec3(-1.95461285e+02, 4.63755838e+02, 7.41243174e+01), forces1[734], tol); -ASSERT_EQUAL_VEC(Vec3(-2.73265807e+02, -4.33952751e+02, -5.86859952e+02), forces1[735], tol); -ASSERT_EQUAL_VEC(Vec3( 3.87492595e+02, -3.57416581e+02, -1.22674219e+02), forces1[736], tol); -ASSERT_EQUAL_VEC(Vec3( 2.10277679e+02, -8.24319147e+01, -3.92467268e+02), forces1[737], tol); -ASSERT_EQUAL_VEC(Vec3( 8.30183105e+02, -6.58248549e+02, -4.70873747e+02), forces1[738], tol); -ASSERT_EQUAL_VEC(Vec3( 1.32224273e+02, 1.07242154e+02, -2.42599632e+02), forces1[739], tol); -ASSERT_EQUAL_VEC(Vec3(-4.36748065e+02, 2.00463318e+01, -3.45993944e+02), forces1[740], tol); -ASSERT_EQUAL_VEC(Vec3(-5.77263697e+02, 1.27439720e+02, -4.58810491e+02), forces1[741], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97481946e+02, -2.58388548e+02, 1.34658918e+02), forces1[742], tol); -ASSERT_EQUAL_VEC(Vec3( 3.87665419e+01, -8.11439393e+02, -2.37617083e+02), forces1[743], tol); -ASSERT_EQUAL_VEC(Vec3(-5.43756717e+02, 7.08678099e+01, -1.18510886e+02), forces1[744], tol); -ASSERT_EQUAL_VEC(Vec3(-4.18101023e+02, 9.12399127e+01, -3.26402702e+02), forces1[745], tol); -ASSERT_EQUAL_VEC(Vec3(-1.04715128e+02, 4.73092172e+02, -5.52394413e+02), forces1[746], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50377202e+02, 6.74569790e+02, -8.65206460e+01), forces1[747], tol); -ASSERT_EQUAL_VEC(Vec3(-4.91854971e+01, 9.70238350e+01, 4.14795171e+01), forces1[748], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53136450e+02, -3.14704270e+02, 1.64509568e+02), forces1[749], tol); -ASSERT_EQUAL_VEC(Vec3( 5.38381589e-01, -2.20857586e+02, 2.62858346e+02), forces1[750], tol); -ASSERT_EQUAL_VEC(Vec3(-6.92118459e+02, 2.00416528e+02, -2.65829388e+02), forces1[751], tol); -ASSERT_EQUAL_VEC(Vec3( 3.79128765e+01, -1.05184233e+02, -3.82602540e+01), forces1[752], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53012338e+02, 2.11976275e+02, -3.81671037e+02), forces1[753], tol); -ASSERT_EQUAL_VEC(Vec3(-2.51271776e+02, -3.93332088e+02, -1.33288963e+01), forces1[754], tol); -ASSERT_EQUAL_VEC(Vec3(-3.01457396e+01, 1.45589903e+02, -6.30529431e+01), forces1[755], tol); -ASSERT_EQUAL_VEC(Vec3(-2.76296961e+02, -4.61689259e+02, -2.69337581e+02), forces1[756], tol); -ASSERT_EQUAL_VEC(Vec3( 6.48638526e+01, 3.68743791e+02, 2.32261042e+02), forces1[757], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48058548e+02, 4.24011162e+02, 2.00613297e+02), forces1[758], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50464122e+01, -7.33758427e+01, 4.00841100e+02), forces1[759], tol); -ASSERT_EQUAL_VEC(Vec3( 4.06782738e+02, 1.22303609e+02, -3.26339153e+02), forces1[760], tol); -ASSERT_EQUAL_VEC(Vec3(-3.55711012e+02, -4.23650736e+02, 1.92960061e+02), forces1[761], tol); -ASSERT_EQUAL_VEC(Vec3(-4.78915336e+01, 1.13386663e+02, -4.55722593e+02), forces1[762], tol); -ASSERT_EQUAL_VEC(Vec3( 5.50242083e+02, 3.20971060e+02, -2.04129569e+02), forces1[763], tol); -ASSERT_EQUAL_VEC(Vec3(-3.98415518e+01, 6.43149241e+01, 2.62918629e+02), forces1[764], tol); -ASSERT_EQUAL_VEC(Vec3(-7.85279974e+01, -7.50534137e+01, -7.62991530e+02), forces1[765], tol); -ASSERT_EQUAL_VEC(Vec3( 9.55632719e+00, -3.95488033e+02, -8.95724718e+01), forces1[766], tol); -ASSERT_EQUAL_VEC(Vec3( 4.83248484e+02, -7.40432533e+02, -5.32388436e+02), forces1[767], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61825590e+02, 8.15278549e+01, 4.71854738e+02), forces1[768], tol); -ASSERT_EQUAL_VEC(Vec3(-3.30808156e+02, -4.21996977e+01, -1.05047553e+03), forces1[769], tol); -ASSERT_EQUAL_VEC(Vec3( 3.34236506e+02, -1.34581292e+02, 3.33945615e+02), forces1[770], tol); -ASSERT_EQUAL_VEC(Vec3( 2.25548584e+01, 6.94629483e+02, 3.48264737e+01), forces1[771], tol); -ASSERT_EQUAL_VEC(Vec3( 4.92311713e+02, -3.56653650e+02, 7.11601228e+01), forces1[772], tol); -ASSERT_EQUAL_VEC(Vec3( 2.17161427e+02, 4.05017188e+01, 3.47168571e+02), forces1[773], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61160760e+01, 1.47265327e+03, 5.49839208e+02), forces1[774], tol); -ASSERT_EQUAL_VEC(Vec3( 8.39508346e+01, -4.18462111e+02, 2.34856125e+02), forces1[775], tol); -ASSERT_EQUAL_VEC(Vec3(-2.31363191e+02, 2.37282362e+02, 6.61594930e+01), forces1[776], tol); -ASSERT_EQUAL_VEC(Vec3(-6.23920550e+01, -7.00163723e+02, 4.91292544e+02), forces1[777], tol); -ASSERT_EQUAL_VEC(Vec3( 2.68222410e+01, 2.46989964e+02, 6.49012925e-01), forces1[778], tol); -ASSERT_EQUAL_VEC(Vec3( 5.26234504e+02, 1.10220781e+02, 3.46422754e+02), forces1[779], tol); -ASSERT_EQUAL_VEC(Vec3(-3.29262429e+02, -3.87187275e+02, 8.51736504e+01), forces1[780], tol); -ASSERT_EQUAL_VEC(Vec3( 6.42859552e+02, 2.34857815e+02, 3.71368125e+02), forces1[781], tol); -ASSERT_EQUAL_VEC(Vec3(-3.24691537e+02, 5.64035803e+02, -4.45828642e+01), forces1[782], tol); -ASSERT_EQUAL_VEC(Vec3( 5.74664181e+01, 1.20257138e+02, -5.84616728e+01), forces1[783], tol); -ASSERT_EQUAL_VEC(Vec3(-2.83822896e+02, -2.10782913e+02, 1.66012284e+02), forces1[784], tol); -ASSERT_EQUAL_VEC(Vec3( 4.01591578e+02, -2.85111660e+02, 2.49467396e+02), forces1[785], tol); -ASSERT_EQUAL_VEC(Vec3( 3.05502334e+02, 7.04806702e+02, -5.94571548e+01), forces1[786], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06843754e+02, 3.13614505e+02, -7.30043017e+02), forces1[787], tol); -ASSERT_EQUAL_VEC(Vec3(-1.65622368e+02, -1.02579327e+02, -4.10521389e+02), forces1[788], tol); -ASSERT_EQUAL_VEC(Vec3( 2.50016463e+02, 9.82377276e+02, 3.08289476e+02), forces1[789], tol); -ASSERT_EQUAL_VEC(Vec3( 3.60198825e+02, 3.06200915e+02, 4.01455745e+02), forces1[790], tol); -ASSERT_EQUAL_VEC(Vec3(-5.15582709e+02, -3.80887100e+02, -2.65984423e+02), forces1[791], tol); -ASSERT_EQUAL_VEC(Vec3( 9.16914445e+02, -2.70992304e+02, 2.88892766e+02), forces1[792], tol); -ASSERT_EQUAL_VEC(Vec3( 5.58063411e+01, 1.28556880e+02, 4.36834411e+02), forces1[793], tol); -ASSERT_EQUAL_VEC(Vec3( 3.48855713e+02, 3.63953389e+02, 3.78554885e+02), forces1[794], tol); -ASSERT_EQUAL_VEC(Vec3( 6.36625415e+02, -1.91568531e+02, 4.14269326e+02), forces1[795], tol); -ASSERT_EQUAL_VEC(Vec3(-3.31399256e+01, -1.47717726e+02, 3.03791102e+02), forces1[796], tol); -ASSERT_EQUAL_VEC(Vec3(-8.19625890e+01, -5.66609696e+02, -7.77438618e+01), forces1[797], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20348179e+02, 3.66643084e+02, -2.38052731e+02), forces1[798], tol); -ASSERT_EQUAL_VEC(Vec3( 3.60705602e+02, 4.45404187e+02, -6.03564902e+02), forces1[799], tol); -ASSERT_EQUAL_VEC(Vec3(-8.71394660e+01, 1.63937553e+02, -1.43929941e+02), forces1[800], tol); -ASSERT_EQUAL_VEC(Vec3(-9.99012969e+01, 1.96050644e+01, -5.85512840e+01), forces1[801], tol); -ASSERT_EQUAL_VEC(Vec3( 4.81464959e+02, -7.04133234e+01, -2.08003335e+02), forces1[802], tol); -ASSERT_EQUAL_VEC(Vec3(-7.69383659e+02, 5.40518266e+01, 5.38423746e+02), forces1[803], tol); -ASSERT_EQUAL_VEC(Vec3(-6.60834570e+02, -1.87942951e+02, 4.11979846e+02), forces1[804], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06277928e+02, 3.55317856e+02, -2.27807465e+02), forces1[805], tol); -ASSERT_EQUAL_VEC(Vec3(-2.66112993e+02, 2.41378629e+02, -4.99239330e+02), forces1[806], tol); -ASSERT_EQUAL_VEC(Vec3(-5.23091617e+01, 9.33588668e+01, 7.23830549e+02), forces1[807], tol); -ASSERT_EQUAL_VEC(Vec3( 2.82159908e+00, 6.04185043e+01, 1.65510623e+02), forces1[808], tol); -ASSERT_EQUAL_VEC(Vec3(-2.97249356e+02, -5.53850820e+01, 3.87132557e+02), forces1[809], tol); -ASSERT_EQUAL_VEC(Vec3(-8.18654835e+02, -2.66089588e+02, 1.07282779e+03), forces1[810], tol); -ASSERT_EQUAL_VEC(Vec3(-2.43727371e+02, -2.51641252e+02, 3.46339026e+02), forces1[811], tol); -ASSERT_EQUAL_VEC(Vec3( 4.04775249e+02, 1.12602806e+02, -6.66755260e+02), forces1[812], tol); -ASSERT_EQUAL_VEC(Vec3(-8.30889004e+01, -9.75627382e+01, -5.15294649e+02), forces1[813], tol); -ASSERT_EQUAL_VEC(Vec3(-8.88900158e+01, -2.43585030e+02, -4.28254176e+02), forces1[814], tol); -ASSERT_EQUAL_VEC(Vec3(-9.15239756e+01, 4.50356816e+02, -2.64185924e+02), forces1[815], tol); -ASSERT_EQUAL_VEC(Vec3(-9.11727906e+01, 4.24890801e+02, -1.85085639e+02), forces1[816], tol); -ASSERT_EQUAL_VEC(Vec3(-3.91190277e+02, -6.86391314e+02, 1.52743025e+02), forces1[817], tol); -ASSERT_EQUAL_VEC(Vec3(-8.21031361e+01, -2.49525239e+02, 5.27536153e+02), forces1[818], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09414974e+02, -6.29098191e+02, 3.34955724e+02), forces1[819], tol); -ASSERT_EQUAL_VEC(Vec3(-4.17387560e+02, -9.10777301e+01, -3.54885448e+01), forces1[820], tol); -ASSERT_EQUAL_VEC(Vec3( 2.79543439e+02, -5.39041840e+02, 5.07374351e+02), forces1[821], tol); -ASSERT_EQUAL_VEC(Vec3( 2.14822336e+02, 1.92270744e+01, -3.14848497e+02), forces1[822], tol); -ASSERT_EQUAL_VEC(Vec3(-1.92605165e+02, -4.26132560e+02, -6.22677382e+00), forces1[823], tol); -ASSERT_EQUAL_VEC(Vec3(-6.55145464e+02, -4.86073333e+02, -3.89399825e+02), forces1[824], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89867341e+02, -3.77315894e+02, -1.36214663e+02), forces1[825], tol); -ASSERT_EQUAL_VEC(Vec3( 4.60001225e+02, 1.99094537e+02, 2.82584474e+02), forces1[826], tol); -ASSERT_EQUAL_VEC(Vec3( 1.21553284e+02, -1.21203683e+02, 7.24058067e+02), forces1[827], tol); -ASSERT_EQUAL_VEC(Vec3(-9.16986437e+01, 7.09307382e+01, 7.89267421e+01), forces1[828], tol); -ASSERT_EQUAL_VEC(Vec3(-3.83808972e+02, 8.44796287e+01, 1.09604935e+03), forces1[829], tol); -ASSERT_EQUAL_VEC(Vec3(-3.65392705e+02, -1.88802374e+02, 4.62347013e+02), forces1[830], tol); -ASSERT_EQUAL_VEC(Vec3( 5.76337730e+02, -9.41995570e+01, -1.98141882e+02), forces1[831], tol); -ASSERT_EQUAL_VEC(Vec3(-4.21540736e+02, -5.96961388e+01, -8.33517850e+02), forces1[832], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20307619e+03, 4.53518250e+02, 2.29372510e+02), forces1[833], tol); -ASSERT_EQUAL_VEC(Vec3( 2.92097304e+02, 4.13164379e+01, -3.61110495e+02), forces1[834], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49877930e+02, -1.26742169e+02, 2.01739900e+02), forces1[835], tol); -ASSERT_EQUAL_VEC(Vec3( 4.82075008e+02, -4.36717554e+02, 2.10931182e+02), forces1[836], tol); -ASSERT_EQUAL_VEC(Vec3( 7.40048230e+00, -3.07870679e+02, -2.19267744e+02), forces1[837], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77929397e+02, -1.78455309e+02, 3.27383377e+02), forces1[838], tol); -ASSERT_EQUAL_VEC(Vec3(-1.43502125e+02, 2.36677035e+02, 1.76250580e+02), forces1[839], tol); -ASSERT_EQUAL_VEC(Vec3(-3.11015280e+02, 3.30102369e+01, 2.29419157e+02), forces1[840], tol); -ASSERT_EQUAL_VEC(Vec3( 7.16636078e+01, -1.43182827e+00, -8.22939586e+02), forces1[841], tol); -ASSERT_EQUAL_VEC(Vec3(-2.21647238e+02, -4.50480586e+01, -4.49964194e+02), forces1[842], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26322975e+02, -2.93336811e+02, 2.05038938e+02), forces1[843], tol); -ASSERT_EQUAL_VEC(Vec3( 8.06775958e+01, 3.83777410e+02, 4.54379037e+02), forces1[844], tol); -ASSERT_EQUAL_VEC(Vec3( 1.36404637e+01, -1.12124193e+02, -2.08562538e+02), forces1[845], tol); -ASSERT_EQUAL_VEC(Vec3(-4.31330496e+01, 1.28721913e+02, 2.41017400e+02), forces1[846], tol); -ASSERT_EQUAL_VEC(Vec3( 3.71916499e+02, 3.66494598e+02, -1.02567885e+02), forces1[847], tol); -ASSERT_EQUAL_VEC(Vec3(-2.30281354e+02, 7.54907643e+02, 1.07586282e+02), forces1[848], tol); -ASSERT_EQUAL_VEC(Vec3( 2.67865075e+02, -1.51751902e+01, -1.70086059e+02), forces1[849], tol); -ASSERT_EQUAL_VEC(Vec3(-9.39303971e+02, 5.64031361e+01, -2.22408474e+02), forces1[850], tol); -ASSERT_EQUAL_VEC(Vec3(-1.01324797e+02, 3.31075650e+02, 7.07373134e+02), forces1[851], tol); -ASSERT_EQUAL_VEC(Vec3( 1.78185244e+02, 8.50185531e+01, -6.39941165e+02), forces1[852], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33075565e+02, 9.10263334e+01, 1.20466005e+02), forces1[853], tol); -ASSERT_EQUAL_VEC(Vec3( 4.22270537e+01, -7.37202915e+02, 6.08451352e+02), forces1[854], tol); -ASSERT_EQUAL_VEC(Vec3(-4.16913834e+02, -4.82510498e+02, 3.91902755e+01), forces1[855], tol); -ASSERT_EQUAL_VEC(Vec3(-4.09087109e+02, -1.95401814e+02, -1.49030786e+02), forces1[856], tol); -ASSERT_EQUAL_VEC(Vec3(-2.89287185e+01, 3.78198264e+02, 2.19689536e+02), forces1[857], tol); -ASSERT_EQUAL_VEC(Vec3(-2.77576965e+02, 7.90464050e+01, 3.49478331e+02), forces1[858], tol); -ASSERT_EQUAL_VEC(Vec3( 4.71047132e+02, -1.88937165e+02, -2.48124657e+02), forces1[859], tol); -ASSERT_EQUAL_VEC(Vec3(-1.51518383e+02, 4.96193568e+01, -2.65467571e+02), forces1[860], tol); -ASSERT_EQUAL_VEC(Vec3(-7.66418994e+02, 8.46521518e+01, -3.64791094e+02), forces1[861], tol); -ASSERT_EQUAL_VEC(Vec3(-5.09774310e+02, 2.10742961e+01, 3.01814635e+02), forces1[862], tol); -ASSERT_EQUAL_VEC(Vec3(-9.75620816e+00, 7.12587243e+01, 9.37836693e+01), forces1[863], tol); -ASSERT_EQUAL_VEC(Vec3( 9.17385110e+01, -4.41182772e+02, -1.00398188e+02), forces1[864], tol); -ASSERT_EQUAL_VEC(Vec3(-2.52943928e+01, -1.90239695e+02, 4.81670302e+01), forces1[865], tol); -ASSERT_EQUAL_VEC(Vec3(-5.44266700e+02, 2.54811263e+02, -1.75181268e+02), forces1[866], tol); -ASSERT_EQUAL_VEC(Vec3( 4.08120113e+02, -1.23559887e+02, -2.06942160e+02), forces1[867], tol); -ASSERT_EQUAL_VEC(Vec3( 4.38405816e+02, -1.73677702e+02, 4.68119374e+02), forces1[868], tol); -ASSERT_EQUAL_VEC(Vec3(-3.66077262e+02, 3.32534980e+02, 2.43501977e+02), forces1[869], tol); -ASSERT_EQUAL_VEC(Vec3( 2.09710096e+02, 2.98077408e+02, -4.55256035e+02), forces1[870], tol); -ASSERT_EQUAL_VEC(Vec3( 4.70548055e+01, -8.03931446e+01, 1.44535738e+02), forces1[871], tol); -ASSERT_EQUAL_VEC(Vec3( 4.51389996e+01, -3.68239965e+02, 2.65390908e+02), forces1[872], tol); -ASSERT_EQUAL_VEC(Vec3(-2.22430692e+02, 4.99756041e+02, 1.50958469e+02), forces1[873], tol); -ASSERT_EQUAL_VEC(Vec3(-3.32911574e+02, 7.08248783e+02, -2.53293033e+02), forces1[874], tol); -ASSERT_EQUAL_VEC(Vec3(-2.24293564e+02, 3.61202816e+02, 3.14067039e+02), forces1[875], tol); -ASSERT_EQUAL_VEC(Vec3( 2.85994423e+01, 3.62421372e+02, -2.25792435e+01), forces1[876], tol); -ASSERT_EQUAL_VEC(Vec3( 3.25319985e+02, -8.59870785e+01, 6.05364581e+02), forces1[877], tol); -ASSERT_EQUAL_VEC(Vec3( 3.08171871e+02, 2.08420326e+02, -3.04923980e+02), forces1[878], tol); -ASSERT_EQUAL_VEC(Vec3( 3.65570529e+02, 1.38310252e+02, 2.10363363e+02), forces1[879], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56661313e+01, 4.58001752e+02, -1.05217312e+02), forces1[880], tol); -ASSERT_EQUAL_VEC(Vec3(-7.04591192e+02, 1.95857268e+02, 6.29174462e+01), forces1[881], tol); -ASSERT_EQUAL_VEC(Vec3(-5.03143865e+02, -4.91096731e+02, 2.40904263e+00), forces1[882], tol); -ASSERT_EQUAL_VEC(Vec3(-6.84583679e+01, 8.09254534e+01, 2.50188730e+02), forces1[883], tol); -ASSERT_EQUAL_VEC(Vec3(-5.35217316e+01, 1.91746428e+02, -1.93678243e+02), forces1[884], tol); -ASSERT_EQUAL_VEC(Vec3( 5.56342532e+02, -6.69136606e+02, -2.99835083e+02), forces1[885], tol); -ASSERT_EQUAL_VEC(Vec3(-3.35801693e+02, 5.18603710e+01, -2.16409061e+02), forces1[886], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13151480e+02, 6.23015348e+02, -1.73858304e+01), forces1[887], tol); -ASSERT_EQUAL_VEC(Vec3(-4.64256120e+02, -2.03157899e+02, 4.33730698e+02), forces1[888], tol); -ASSERT_EQUAL_VEC(Vec3( 5.74737750e+01, -4.61823893e+02, -4.22521242e+02), forces1[889], tol); -ASSERT_EQUAL_VEC(Vec3(-3.53693728e+02, 1.03991649e+02, 1.47435093e+02), forces1[890], tol); -ASSERT_EQUAL_VEC(Vec3( 9.55664834e+01, 4.15286634e+02, 1.37712413e+02), forces1[891], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43136857e+02, -3.70066034e+01, -4.01965849e+02), forces1[892], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26699422e+02, -2.55274151e+02, 1.49229513e+02), forces1[893], tol); diff --git a/platforms/reference/tests/nacl_amorph_GromacsForcesPME.dat b/platforms/reference/tests/nacl_amorph_GromacsForcesPME.dat deleted file mode 100644 index 9eed185006576281d79f90a9a1b5141d2031edd9..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/nacl_amorph_GromacsForcesPME.dat +++ /dev/null @@ -1,894 +0,0 @@ -ASSERT_EQUAL_VEC(Vec3(-1.98238e+02, -2.23819e+02, -1.02566e+02), forces1[0], tol); -ASSERT_EQUAL_VEC(Vec3( 4.44029e+02, -3.90395e+02, -8.09590e+01), forces1[1], tol); -ASSERT_EQUAL_VEC(Vec3(-8.60870e+01, -1.05622e+01, -1.87777e+02), forces1[2], tol); -ASSERT_EQUAL_VEC(Vec3( 7.05375e+02, -1.69584e+02, 2.72477e+02), forces1[3], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19351e+01, 5.33294e+02, -4.56194e+01), forces1[4], tol); -ASSERT_EQUAL_VEC(Vec3(-3.04277e+02, 2.02922e+02, 1.20245e+02), forces1[5], tol); -ASSERT_EQUAL_VEC(Vec3( 1.14214e+02, 1.21102e+02, 3.40941e+02), forces1[6], tol); -ASSERT_EQUAL_VEC(Vec3(-4.02332e+01, 3.78737e+02, 1.07247e+02), forces1[7], tol); -ASSERT_EQUAL_VEC(Vec3( 9.42963e+01, 1.00871e+01, 1.57706e+02), forces1[8], tol); -ASSERT_EQUAL_VEC(Vec3( 2.98432e+02, 1.18617e+02, -4.17515e+02), forces1[9], tol); -ASSERT_EQUAL_VEC(Vec3( 4.75037e+01, -5.56223e+00, -1.92343e+02), forces1[10], tol); -ASSERT_EQUAL_VEC(Vec3(-3.61212e+02, 4.00194e+02, -3.38480e+02), forces1[11], tol); -ASSERT_EQUAL_VEC(Vec3( 1.59872e+02, -2.22188e+02, -1.71809e+02), forces1[12], tol); -ASSERT_EQUAL_VEC(Vec3( 8.02097e+01, -2.46192e+02, 1.49732e+02), forces1[13], tol); -ASSERT_EQUAL_VEC(Vec3(-2.41490e+02, -8.22349e+01, -4.19816e+02), forces1[14], tol); -ASSERT_EQUAL_VEC(Vec3(-2.42760e+02, 4.99404e+00, 1.89251e+01), forces1[15], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32033e+02, 2.91123e+02, -1.56148e+02), forces1[16], tol); -ASSERT_EQUAL_VEC(Vec3(-8.77282e+01, -4.75575e+02, -2.02740e+02), forces1[17], tol); -ASSERT_EQUAL_VEC(Vec3( 3.96090e+02, -6.37135e+02, 1.78663e+02), forces1[18], tol); -ASSERT_EQUAL_VEC(Vec3( 3.72230e+02, 1.17758e+02, 2.14245e+02), forces1[19], tol); -ASSERT_EQUAL_VEC(Vec3( 4.50070e+02, -1.37646e+01, 2.39932e+02), forces1[20], tol); -ASSERT_EQUAL_VEC(Vec3( 2.00016e+02, 3.30198e+01, 8.51831e+01), forces1[21], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97199e+02, 7.33301e+02, 2.15197e+01), forces1[22], tol); -ASSERT_EQUAL_VEC(Vec3(-1.44369e+02, 9.15743e+01, 3.18981e+01), forces1[23], tol); -ASSERT_EQUAL_VEC(Vec3( 2.94560e+02, -3.69029e+02, 2.70469e+00), forces1[24], tol); -ASSERT_EQUAL_VEC(Vec3( 3.23107e+02, 8.86120e+02, 3.24425e+02), forces1[25], tol); -ASSERT_EQUAL_VEC(Vec3(-6.03139e+01, 1.68441e+02, 2.31890e+02), forces1[26], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93353e+01, 5.76451e+01, 3.63994e+02), forces1[27], tol); -ASSERT_EQUAL_VEC(Vec3( 3.18489e-01, 1.34475e+02, -4.39831e+01), forces1[28], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38709e+02, -2.99570e+02, -2.80326e+02), forces1[29], tol); -ASSERT_EQUAL_VEC(Vec3(-8.28155e+01, 4.40624e+02, 9.65531e+01), forces1[30], tol); -ASSERT_EQUAL_VEC(Vec3( 2.03774e+01, -4.37685e+01, -5.06727e+01), forces1[31], tol); -ASSERT_EQUAL_VEC(Vec3(-2.60759e+02, 3.70684e+02, 1.28621e+02), forces1[32], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97964e+02, -1.52120e+01, -2.85728e+02), forces1[33], tol); -ASSERT_EQUAL_VEC(Vec3(-2.63683e+01, -1.29412e+01, -2.36630e+02), forces1[34], tol); -ASSERT_EQUAL_VEC(Vec3( 2.13607e+02, -2.29651e+02, -7.72846e+02), forces1[35], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26326e+01, 9.00722e+01, 3.48806e+02), forces1[36], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27760e+02, -8.49427e+00, -3.25568e+02), forces1[37], tol); -ASSERT_EQUAL_VEC(Vec3(-8.32014e+01, -2.50950e+02, 5.80192e+01), forces1[38], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32232e+02, 1.30458e+02, 6.05363e+00), forces1[39], tol); -ASSERT_EQUAL_VEC(Vec3(-1.14431e+02, -3.48761e+01, -8.76148e+01), forces1[40], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55342e+02, -2.79189e+02, -1.68749e+02), forces1[41], tol); -ASSERT_EQUAL_VEC(Vec3(-2.02321e+02, 1.47907e+02, 1.75227e+02), forces1[42], tol); -ASSERT_EQUAL_VEC(Vec3( 2.63248e+01, -4.46996e+02, -2.37737e+00), forces1[43], tol); -ASSERT_EQUAL_VEC(Vec3( 2.55965e+02, -2.93440e+02, 3.28023e+02), forces1[44], tol); -ASSERT_EQUAL_VEC(Vec3( 1.14323e+02, 2.24373e+02, -8.29717e+01), forces1[45], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43347e+01, 2.46486e+02, -3.75145e+02), forces1[46], tol); -ASSERT_EQUAL_VEC(Vec3(-4.34804e+02, -9.73177e+01, -1.91079e+02), forces1[47], tol); -ASSERT_EQUAL_VEC(Vec3( 5.22940e+01, 5.50944e+02, 2.90237e+02), forces1[48], tol); -ASSERT_EQUAL_VEC(Vec3(-4.83950e+01, 1.71484e+02, -3.42302e+02), forces1[49], tol); -ASSERT_EQUAL_VEC(Vec3(-2.61453e+02, 9.01727e+01, 3.64102e+02), forces1[50], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43627e+02, -5.19312e+02, -7.74800e+01), forces1[51], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15597e+02, -5.54586e+02, 1.71365e+02), forces1[52], tol); -ASSERT_EQUAL_VEC(Vec3(-2.14777e+02, 3.56724e+02, -3.71997e+02), forces1[53], tol); -ASSERT_EQUAL_VEC(Vec3( 2.22118e+02, 2.73200e+02, 1.61950e+02), forces1[54], tol); -ASSERT_EQUAL_VEC(Vec3( 2.85119e+02, 3.19144e+02, -1.98761e+02), forces1[55], tol); -ASSERT_EQUAL_VEC(Vec3( 3.90047e+02, 5.91187e+02, 8.76052e+01), forces1[56], tol); -ASSERT_EQUAL_VEC(Vec3( 1.69067e+02, -9.43258e+01, 3.42177e+02), forces1[57], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93040e+01, -1.03068e+02, 5.37913e+01), forces1[58], tol); -ASSERT_EQUAL_VEC(Vec3( 4.08998e+01, 1.30025e+02, -7.16616e+01), forces1[59], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89925e+02, 5.51894e+00, 4.53550e+02), forces1[60], tol); -ASSERT_EQUAL_VEC(Vec3(-1.11554e+02, 1.24171e+02, 4.53012e+02), forces1[61], tol); -ASSERT_EQUAL_VEC(Vec3( 1.54597e+02, -2.70144e+02, -7.89501e+01), forces1[62], tol); -ASSERT_EQUAL_VEC(Vec3( 2.84029e+02, -8.89897e+01, 3.24511e+02), forces1[63], tol); -ASSERT_EQUAL_VEC(Vec3( 1.44360e+02, -7.96586e+01, -2.53245e+02), forces1[64], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77734e+02, 8.42945e+01, -1.41070e+02), forces1[65], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69652e+02, -5.26516e+02, -1.04064e+02), forces1[66], tol); -ASSERT_EQUAL_VEC(Vec3(-2.41602e+02, -9.41429e+01, 3.30147e+01), forces1[67], tol); -ASSERT_EQUAL_VEC(Vec3( 6.81069e+02, -5.79240e+02, -9.71642e-01), forces1[68], tol); -ASSERT_EQUAL_VEC(Vec3( 2.88769e+02, 2.41582e+02, -1.90685e+02), forces1[69], tol); -ASSERT_EQUAL_VEC(Vec3(-1.31603e+01, 1.14262e+01, 4.13776e+01), forces1[70], tol); -ASSERT_EQUAL_VEC(Vec3( 5.14411e+01, -9.72283e+01, 1.27245e+01), forces1[71], tol); -ASSERT_EQUAL_VEC(Vec3( 7.15737e+01, -1.94134e+02, -2.48980e+02), forces1[72], tol); -ASSERT_EQUAL_VEC(Vec3(-9.16921e+01, 1.23396e+02, -2.86180e+02), forces1[73], tol); -ASSERT_EQUAL_VEC(Vec3( 9.82499e+01, -7.07136e+01, -1.29192e+02), forces1[74], tol); -ASSERT_EQUAL_VEC(Vec3(-2.15576e+02, -1.43100e+02, -1.96438e+02), forces1[75], tol); -ASSERT_EQUAL_VEC(Vec3(-4.61162e+02, -4.03097e+02, -4.56028e+01), forces1[76], tol); -ASSERT_EQUAL_VEC(Vec3( 1.52885e+02, -9.37800e+02, 2.93600e+02), forces1[77], tol); -ASSERT_EQUAL_VEC(Vec3( 2.45711e+02, 1.99845e+01, 1.17917e+02), forces1[78], tol); -ASSERT_EQUAL_VEC(Vec3(-2.37050e+02, 2.49524e+02, 2.13426e+02), forces1[79], tol); -ASSERT_EQUAL_VEC(Vec3(-2.90554e+02, 1.91128e+02, -4.24254e+02), forces1[80], tol); -ASSERT_EQUAL_VEC(Vec3( 2.98841e+02, -5.76039e+00, 2.66632e+02), forces1[81], tol); -ASSERT_EQUAL_VEC(Vec3(-3.26781e+02, -2.54764e+02, -3.00077e+02), forces1[82], tol); -ASSERT_EQUAL_VEC(Vec3(-2.95144e+02, 1.21764e+02, -2.83475e+02), forces1[83], tol); -ASSERT_EQUAL_VEC(Vec3( 4.04598e+02, 1.66819e+02, -5.58132e+01), forces1[84], tol); -ASSERT_EQUAL_VEC(Vec3(-8.21664e+02, 5.19844e+02, 5.32043e+01), forces1[85], tol); -ASSERT_EQUAL_VEC(Vec3(-3.49444e+02, -1.47683e+02, -4.95512e+02), forces1[86], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48878e+02, -7.41503e+01, -4.28596e+02), forces1[87], tol); -ASSERT_EQUAL_VEC(Vec3(-1.97044e+02, -3.40603e+02, 2.10204e+00), forces1[88], tol); -ASSERT_EQUAL_VEC(Vec3( 9.52481e+01, -4.20783e+02, 5.76746e+01), forces1[89], tol); -ASSERT_EQUAL_VEC(Vec3( 1.21807e+02, -1.40400e+02, -2.93285e+02), forces1[90], tol); -ASSERT_EQUAL_VEC(Vec3( 2.10629e+02, 5.88038e+01, 7.23663e+01), forces1[91], tol); -ASSERT_EQUAL_VEC(Vec3( 6.72915e+01, -1.46949e+02, -2.63710e+02), forces1[92], tol); -ASSERT_EQUAL_VEC(Vec3( 3.96779e+02, -4.38664e+02, -2.57916e+02), forces1[93], tol); -ASSERT_EQUAL_VEC(Vec3(-2.66189e+01, 1.59116e+01, 4.36637e+02), forces1[94], tol); -ASSERT_EQUAL_VEC(Vec3(-3.00015e+02, -6.20522e+01, -4.29146e+02), forces1[95], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77047e+02, 5.58882e+01, 1.05674e+02), forces1[96], tol); -ASSERT_EQUAL_VEC(Vec3(-6.92728e+01, -5.45431e+02, -2.10884e+01), forces1[97], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90061e+01, -1.21126e+02, 1.68310e+01), forces1[98], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19576e+01, 1.51712e+02, -3.39292e+01), forces1[99], tol); -ASSERT_EQUAL_VEC(Vec3( 9.20478e+01, -4.22547e+02, -1.81073e+01), forces1[100], tol); -ASSERT_EQUAL_VEC(Vec3( 5.80549e+01, 1.45413e+02, -4.53187e+01), forces1[101], tol); -ASSERT_EQUAL_VEC(Vec3( 6.12578e+02, -1.41330e+01, 2.13583e+02), forces1[102], tol); -ASSERT_EQUAL_VEC(Vec3(-1.02947e+02, -8.76472e+01, 2.20906e+02), forces1[103], tol); -ASSERT_EQUAL_VEC(Vec3( 1.44800e+02, -2.89016e+02, 1.68141e+02), forces1[104], tol); -ASSERT_EQUAL_VEC(Vec3( 9.68802e+01, -2.62265e+02, -3.07293e+02), forces1[105], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09044e+02, -2.43250e+02, -2.45232e+02), forces1[106], tol); -ASSERT_EQUAL_VEC(Vec3( 1.89553e+02, 1.49335e+02, -3.74288e+02), forces1[107], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20770e+02, -1.66095e+02, -4.46390e+02), forces1[108], tol); -ASSERT_EQUAL_VEC(Vec3(-6.91040e+02, 6.62259e+02, 3.06075e+01), forces1[109], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61286e+02, 8.89662e+01, -3.35508e+01), forces1[110], tol); -ASSERT_EQUAL_VEC(Vec3(-4.17337e+02, 4.26282e+01, -7.77221e+01), forces1[111], tol); -ASSERT_EQUAL_VEC(Vec3(-4.01777e+01, 8.24730e+01, 4.51851e+02), forces1[112], tol); -ASSERT_EQUAL_VEC(Vec3(-1.40974e+01, -2.40650e+02, -1.27611e+02), forces1[113], tol); -ASSERT_EQUAL_VEC(Vec3( 2.83838e+02, 2.31052e+02, 1.33440e+01), forces1[114], tol); -ASSERT_EQUAL_VEC(Vec3( 5.10743e+01, -7.13353e+02, -4.07609e+02), forces1[115], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56084e+02, -1.33127e+02, 2.25953e+02), forces1[116], tol); -ASSERT_EQUAL_VEC(Vec3( 3.69751e+01, -1.35050e+01, 1.10570e+02), forces1[117], tol); -ASSERT_EQUAL_VEC(Vec3( 3.37822e+02, 8.10444e+01, -5.39664e+01), forces1[118], tol); -ASSERT_EQUAL_VEC(Vec3( 5.49925e+01, 7.55077e+01, 1.80537e+02), forces1[119], tol); -ASSERT_EQUAL_VEC(Vec3( 1.10959e+02, -3.83960e+02, 2.78081e+01), forces1[120], tol); -ASSERT_EQUAL_VEC(Vec3(-2.63191e+02, -3.16263e+02, -3.95227e+02), forces1[121], tol); -ASSERT_EQUAL_VEC(Vec3( 3.42551e+02, -2.35755e+02, 4.60349e+02), forces1[122], tol); -ASSERT_EQUAL_VEC(Vec3( 2.47660e+02, 2.42873e+02, 1.52219e+02), forces1[123], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70208e+02, 2.08577e+02, -1.86857e+02), forces1[124], tol); -ASSERT_EQUAL_VEC(Vec3( 3.24091e+02, 2.55006e+02, -1.10874e+02), forces1[125], tol); -ASSERT_EQUAL_VEC(Vec3( 5.16198e+02, -5.06223e+01, -2.80862e+02), forces1[126], tol); -ASSERT_EQUAL_VEC(Vec3(-3.30850e+02, -3.47287e+02, 1.45245e+02), forces1[127], tol); -ASSERT_EQUAL_VEC(Vec3(-1.28351e+02, 7.69111e+01, 2.14899e+02), forces1[128], tol); -ASSERT_EQUAL_VEC(Vec3(-1.91475e+02, -2.11487e+02, 1.35327e+02), forces1[129], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69888e+02, 1.11316e+02, -8.98475e+01), forces1[130], tol); -ASSERT_EQUAL_VEC(Vec3(-1.36356e+02, -2.14227e+02, -5.83946e+01), forces1[131], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38558e+02, 2.36118e+02, -2.08878e+01), forces1[132], tol); -ASSERT_EQUAL_VEC(Vec3(-2.47603e+02, 3.98194e+02, -1.64773e+02), forces1[133], tol); -ASSERT_EQUAL_VEC(Vec3(-8.37474e+01, 4.07950e+02, -1.24164e+02), forces1[134], tol); -ASSERT_EQUAL_VEC(Vec3(-1.60152e+02, -6.50199e+00, 3.55060e+02), forces1[135], tol); -ASSERT_EQUAL_VEC(Vec3( 3.58257e+02, -2.81406e+02, -1.28029e+02), forces1[136], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33746e+02, -3.31207e+02, -2.41567e+01), forces1[137], tol); -ASSERT_EQUAL_VEC(Vec3(-3.00677e+02, -1.70094e+02, 8.30774e+01), forces1[138], tol); -ASSERT_EQUAL_VEC(Vec3(-1.94848e+01, 1.35839e+02, -3.65168e+02), forces1[139], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77179e+02, 4.44424e+01, 2.11476e+02), forces1[140], tol); -ASSERT_EQUAL_VEC(Vec3( 4.59288e+02, -3.23648e+02, 3.67802e+02), forces1[141], tol); -ASSERT_EQUAL_VEC(Vec3( 4.22135e+02, 2.22083e+02, 2.92481e+02), forces1[142], tol); -ASSERT_EQUAL_VEC(Vec3( 2.83734e+02, -2.92595e+02, 8.17914e+01), forces1[143], tol); -ASSERT_EQUAL_VEC(Vec3(-5.70476e+01, 2.40284e+02, -3.40876e+01), forces1[144], tol); -ASSERT_EQUAL_VEC(Vec3( 1.04088e+02, 1.58977e+02, 1.10182e+01), forces1[145], tol); -ASSERT_EQUAL_VEC(Vec3( 5.88504e+02, 2.07873e+02, -7.36857e+01), forces1[146], tol); -ASSERT_EQUAL_VEC(Vec3( 2.82644e+02, 2.25984e+02, 2.16741e+02), forces1[147], tol); -ASSERT_EQUAL_VEC(Vec3(-2.02425e+02, 1.65903e+02, -1.47473e+02), forces1[148], tol); -ASSERT_EQUAL_VEC(Vec3(-2.96634e+02, -4.87422e+02, 1.60837e+02), forces1[149], tol); -ASSERT_EQUAL_VEC(Vec3( 2.94716e+02, 1.30350e+02, 2.82786e+01), forces1[150], tol); -ASSERT_EQUAL_VEC(Vec3( 3.70883e+02, 3.22177e+01, 8.74457e+01), forces1[151], tol); -ASSERT_EQUAL_VEC(Vec3( 3.44000e+02, -2.07929e+02, 3.49059e+02), forces1[152], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43030e+01, -2.80350e+02, 5.69624e+01), forces1[153], tol); -ASSERT_EQUAL_VEC(Vec3( 9.71900e+01, 1.42411e+01, 1.00140e+02), forces1[154], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56963e+02, -1.88089e+01, -1.07623e+02), forces1[155], tol); -ASSERT_EQUAL_VEC(Vec3( 4.20295e+02, 1.16954e+02, 4.29566e+02), forces1[156], tol); -ASSERT_EQUAL_VEC(Vec3(-2.05593e+02, -2.74959e+02, 1.32855e+02), forces1[157], tol); -ASSERT_EQUAL_VEC(Vec3( 2.89209e+01, 1.07778e+01, -2.09463e+02), forces1[158], tol); -ASSERT_EQUAL_VEC(Vec3(-4.54593e+02, -2.58228e+01, -2.66965e+02), forces1[159], tol); -ASSERT_EQUAL_VEC(Vec3( 5.91052e+02, -7.76642e+01, 9.29134e+01), forces1[160], tol); -ASSERT_EQUAL_VEC(Vec3(-8.26339e+00, 2.39612e+02, 1.04877e+02), forces1[161], tol); -ASSERT_EQUAL_VEC(Vec3( 4.79939e+01, -1.73697e+02, -5.98017e+01), forces1[162], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26010e+02, 1.64321e+02, -4.23292e+02), forces1[163], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03195e+02, 1.46922e+02, 2.50713e+02), forces1[164], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38811e+02, 1.32928e+02, 2.75566e+02), forces1[165], tol); -ASSERT_EQUAL_VEC(Vec3( 9.19090e+01, -1.55644e+02, 1.24224e+02), forces1[166], tol); -ASSERT_EQUAL_VEC(Vec3( 2.09934e+02, 1.26972e+02, -3.32816e+02), forces1[167], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56192e+02, 6.10657e+00, 3.42782e+02), forces1[168], tol); -ASSERT_EQUAL_VEC(Vec3( 3.11423e+02, 9.42269e+01, -8.52675e+00), forces1[169], tol); -ASSERT_EQUAL_VEC(Vec3( 1.78684e+02, -1.37283e+01, -2.21919e+01), forces1[170], tol); -ASSERT_EQUAL_VEC(Vec3(-4.69160e+01, 5.77174e+02, 1.04228e+02), forces1[171], tol); -ASSERT_EQUAL_VEC(Vec3( 1.31260e+02, 7.57898e+01, -9.08328e+01), forces1[172], tol); -ASSERT_EQUAL_VEC(Vec3(-1.69432e+02, -3.62007e+02, 2.68885e+02), forces1[173], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68470e+02, -2.62621e+02, 7.40996e+01), forces1[174], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53156e+02, 2.68902e+02, -3.92489e+02), forces1[175], tol); -ASSERT_EQUAL_VEC(Vec3( 1.95127e+02, -5.76545e+01, 3.91956e+02), forces1[176], tol); -ASSERT_EQUAL_VEC(Vec3( 2.43341e+02, -3.91473e+02, -8.63941e+01), forces1[177], tol); -ASSERT_EQUAL_VEC(Vec3(-1.34182e+02, 1.46584e+02, 1.19870e+02), forces1[178], tol); -ASSERT_EQUAL_VEC(Vec3( 1.63164e+02, -2.66967e+02, 1.65791e+02), forces1[179], tol); -ASSERT_EQUAL_VEC(Vec3( 5.46590e+01, 6.58743e+01, -4.94241e+02), forces1[180], tol); -ASSERT_EQUAL_VEC(Vec3(-1.62967e+02, 1.53812e+02, 2.72243e+01), forces1[181], tol); -ASSERT_EQUAL_VEC(Vec3(-1.97753e+02, -9.07862e+01, -5.59637e+02), forces1[182], tol); -ASSERT_EQUAL_VEC(Vec3(-9.59328e+01, -3.67223e+02, -1.37096e+02), forces1[183], tol); -ASSERT_EQUAL_VEC(Vec3(-3.13273e+02, -4.77523e+02, -2.82321e+02), forces1[184], tol); -ASSERT_EQUAL_VEC(Vec3( 3.47114e+01, -1.51858e+02, -2.71784e+02), forces1[185], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09989e+02, 7.60839e+01, -1.90745e+02), forces1[186], tol); -ASSERT_EQUAL_VEC(Vec3( 3.49591e+02, 1.52748e+02, 4.22478e+02), forces1[187], tol); -ASSERT_EQUAL_VEC(Vec3(-3.59778e+01, 3.55514e+01, -7.87122e+01), forces1[188], tol); -ASSERT_EQUAL_VEC(Vec3(-5.53788e+02, 1.58097e+02, -5.47413e+01), forces1[189], tol); -ASSERT_EQUAL_VEC(Vec3( 8.55383e+01, -2.88446e+02, 2.54335e+01), forces1[190], tol); -ASSERT_EQUAL_VEC(Vec3( 1.96776e+02, 1.69083e+02, 2.41079e+02), forces1[191], tol); -ASSERT_EQUAL_VEC(Vec3( 7.63954e+01, 3.05700e+02, 2.76177e+02), forces1[192], tol); -ASSERT_EQUAL_VEC(Vec3( 1.23270e+02, 8.57544e+01, 3.46732e+02), forces1[193], tol); -ASSERT_EQUAL_VEC(Vec3(-9.05524e+01, 5.50783e+01, -4.12477e+02), forces1[194], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70275e+00, 1.30545e+02, -1.55114e+02), forces1[195], tol); -ASSERT_EQUAL_VEC(Vec3(-1.37391e+02, -2.94314e+02, -1.24617e+02), forces1[196], tol); -ASSERT_EQUAL_VEC(Vec3(-3.56081e+02, -9.03717e+01, 3.14903e+02), forces1[197], tol); -ASSERT_EQUAL_VEC(Vec3(-7.79201e+01, 1.12169e+02, 3.86360e+02), forces1[198], tol); -ASSERT_EQUAL_VEC(Vec3( 2.43084e+02, 5.36465e+02, -9.47472e+01), forces1[199], tol); -ASSERT_EQUAL_VEC(Vec3(-7.39515e+01, -3.53203e+02, 1.42906e+01), forces1[200], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56525e+02, -2.80413e+02, 2.95738e+02), forces1[201], tol); -ASSERT_EQUAL_VEC(Vec3(-2.72295e+02, -1.44068e+02, 2.55682e+02), forces1[202], tol); -ASSERT_EQUAL_VEC(Vec3(-3.75581e+01, 2.99407e+02, -4.12452e+02), forces1[203], tol); -ASSERT_EQUAL_VEC(Vec3( 3.64683e+02, 3.39099e+02, -8.08627e+01), forces1[204], tol); -ASSERT_EQUAL_VEC(Vec3( 4.32794e+02, -1.78902e+02, 3.86635e+02), forces1[205], tol); -ASSERT_EQUAL_VEC(Vec3(-9.04431e+01, 3.89962e+02, -5.47942e+02), forces1[206], tol); -ASSERT_EQUAL_VEC(Vec3(-6.35047e+02, 1.85340e+01, 3.17100e+01), forces1[207], tol); -ASSERT_EQUAL_VEC(Vec3(-5.92927e+01, -2.85278e+02, -1.42336e+02), forces1[208], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35200e+02, -3.56060e+02, 1.07958e+02), forces1[209], tol); -ASSERT_EQUAL_VEC(Vec3( 3.94881e+02, 9.99543e+01, -1.57851e+02), forces1[210], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56550e+02, -1.66155e+02, -4.76763e+00), forces1[211], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77273e+02, -9.51984e+01, -3.42047e+02), forces1[212], tol); -ASSERT_EQUAL_VEC(Vec3( 2.97728e+02, 7.18136e+02, -4.94807e+02), forces1[213], tol); -ASSERT_EQUAL_VEC(Vec3(-5.12783e+02, 7.63620e+02, -5.44394e+01), forces1[214], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55726e+02, -4.46420e+02, -1.72489e+02), forces1[215], tol); -ASSERT_EQUAL_VEC(Vec3( 3.15171e+02, 5.62389e+02, 2.42576e+02), forces1[216], tol); -ASSERT_EQUAL_VEC(Vec3(-2.90712e+01, 3.91014e+02, 1.36611e+02), forces1[217], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26378e+02, 5.13932e+02, 8.37934e+01), forces1[218], tol); -ASSERT_EQUAL_VEC(Vec3(-2.88401e+02, 6.41261e+01, 3.02429e+02), forces1[219], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13219e+01, -3.20436e+02, 1.98720e+02), forces1[220], tol); -ASSERT_EQUAL_VEC(Vec3(-1.73195e+02, 2.09809e+02, 2.60748e+02), forces1[221], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34172e+02, -1.25036e+02, 2.52922e+02), forces1[222], tol); -ASSERT_EQUAL_VEC(Vec3(-3.09527e+02, 2.63414e+02, -2.33511e+02), forces1[223], tol); -ASSERT_EQUAL_VEC(Vec3( 8.65417e+01, -5.32174e+02, -2.36445e+02), forces1[224], tol); -ASSERT_EQUAL_VEC(Vec3(-1.74956e+02, -2.30188e+02, -1.33696e+02), forces1[225], tol); -ASSERT_EQUAL_VEC(Vec3( 1.53827e+02, -1.24376e+02, -3.93704e+01), forces1[226], tol); -ASSERT_EQUAL_VEC(Vec3(-4.51770e+02, -7.75099e+01, -5.36164e+02), forces1[227], tol); -ASSERT_EQUAL_VEC(Vec3( 5.99182e+01, 2.97286e+02, 5.99064e+01), forces1[228], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10611e+02, 2.95975e+00, -3.63666e+01), forces1[229], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85866e+02, 1.41628e+02, 2.75110e+02), forces1[230], tol); -ASSERT_EQUAL_VEC(Vec3( 5.43212e+02, -3.20236e+02, -3.02040e+01), forces1[231], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85594e+02, 6.64254e+01, -3.49438e+01), forces1[232], tol); -ASSERT_EQUAL_VEC(Vec3(-4.52870e+02, -3.40699e+02, 1.28895e+02), forces1[233], tol); -ASSERT_EQUAL_VEC(Vec3( 9.34274e+02, -1.39499e+02, 3.57860e+02), forces1[234], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03059e+02, 7.44587e+01, 9.27241e+01), forces1[235], tol); -ASSERT_EQUAL_VEC(Vec3(-5.97529e+02, 1.26808e+02, 2.78892e+02), forces1[236], tol); -ASSERT_EQUAL_VEC(Vec3( 5.67859e+02, -5.34679e+02, -1.84220e+02), forces1[237], tol); -ASSERT_EQUAL_VEC(Vec3( 2.13200e+02, 2.99785e+02, -2.66449e+02), forces1[238], tol); -ASSERT_EQUAL_VEC(Vec3( 3.11287e+01, 4.54671e+02, 3.80933e+01), forces1[239], tol); -ASSERT_EQUAL_VEC(Vec3( 1.57505e+02, 3.19189e+01, -1.57725e+02), forces1[240], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34917e+02, -4.69304e+02, -3.96804e+01), forces1[241], tol); -ASSERT_EQUAL_VEC(Vec3(-3.54012e+01, -1.00149e+02, 7.07594e+01), forces1[242], tol); -ASSERT_EQUAL_VEC(Vec3( 3.29664e+02, 3.63915e+02, -3.89187e+02), forces1[243], tol); -ASSERT_EQUAL_VEC(Vec3( 7.63973e+02, 2.97338e+02, -5.40126e+01), forces1[244], tol); -ASSERT_EQUAL_VEC(Vec3(-2.67921e+02, 2.23572e+02, -1.67260e+02), forces1[245], tol); -ASSERT_EQUAL_VEC(Vec3(-6.45303e+02, -9.38934e+00, -5.71083e+02), forces1[246], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48206e+02, -1.78758e+02, 8.43606e+01), forces1[247], tol); -ASSERT_EQUAL_VEC(Vec3( 3.26733e+02, -3.84541e+02, 2.88339e+02), forces1[248], tol); -ASSERT_EQUAL_VEC(Vec3( 2.58355e+02, 5.43926e+01, 3.38657e+02), forces1[249], tol); -ASSERT_EQUAL_VEC(Vec3(-3.51580e+02, -3.06746e+02, -2.99583e+01), forces1[250], tol); -ASSERT_EQUAL_VEC(Vec3(-2.78564e+01, 2.36171e+02, 1.06051e+01), forces1[251], tol); -ASSERT_EQUAL_VEC(Vec3(-1.75884e+02, -9.36825e+00, 1.84217e+02), forces1[252], tol); -ASSERT_EQUAL_VEC(Vec3(-5.60414e+02, 1.90158e+02, -2.90241e+02), forces1[253], tol); -ASSERT_EQUAL_VEC(Vec3(-1.69419e+02, 2.23708e+02, -3.41993e+02), forces1[254], tol); -ASSERT_EQUAL_VEC(Vec3(-6.96442e+01, 1.66443e+02, -6.76290e+00), forces1[255], tol); -ASSERT_EQUAL_VEC(Vec3( 2.73634e+02, 1.47945e+00, 7.80674e+01), forces1[256], tol); -ASSERT_EQUAL_VEC(Vec3(-2.58360e+02, 8.46506e+01, -9.41941e+01), forces1[257], tol); -ASSERT_EQUAL_VEC(Vec3(-4.25856e+02, 9.84269e+00, 6.39688e+01), forces1[258], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12074e+02, 6.10175e+01, -1.38671e+02), forces1[259], tol); -ASSERT_EQUAL_VEC(Vec3( 3.21742e+01, 3.67503e+02, 6.86820e+01), forces1[260], tol); -ASSERT_EQUAL_VEC(Vec3(-3.72197e+02, 3.36299e+02, 3.15267e+02), forces1[261], tol); -ASSERT_EQUAL_VEC(Vec3( 4.28544e+01, 5.93439e+01, 4.86904e+02), forces1[262], tol); -ASSERT_EQUAL_VEC(Vec3( 3.03218e+01, 3.70289e+02, -5.83427e+02), forces1[263], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61746e+02, 3.70556e+02, -2.03554e+01), forces1[264], tol); -ASSERT_EQUAL_VEC(Vec3(-6.67228e+02, -1.24405e+01, -9.41848e+01), forces1[265], tol); -ASSERT_EQUAL_VEC(Vec3( 4.66963e+02, 3.49517e+02, 2.04653e+02), forces1[266], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52489e+02, -1.24054e+01, 2.24698e+01), forces1[267], tol); -ASSERT_EQUAL_VEC(Vec3( 4.58673e+01, -2.20882e+02, 7.64532e+01), forces1[268], tol); -ASSERT_EQUAL_VEC(Vec3(-4.43759e+01, -1.14901e+02, -2.87908e+02), forces1[269], tol); -ASSERT_EQUAL_VEC(Vec3(-9.22294e+01, 6.40897e+02, 3.17837e+02), forces1[270], tol); -ASSERT_EQUAL_VEC(Vec3(-2.15619e+02, -2.05476e+02, 6.85753e+01), forces1[271], tol); -ASSERT_EQUAL_VEC(Vec3( 2.24210e+02, -1.43086e+02, -4.17853e+01), forces1[272], tol); -ASSERT_EQUAL_VEC(Vec3( 1.79801e+02, -3.72431e+02, 2.12152e+02), forces1[273], tol); -ASSERT_EQUAL_VEC(Vec3( 9.74712e+01, 7.66879e+01, -5.04532e+02), forces1[274], tol); -ASSERT_EQUAL_VEC(Vec3( 2.17851e+01, -5.76193e+02, -3.23925e+02), forces1[275], tol); -ASSERT_EQUAL_VEC(Vec3(-2.97069e+02, -1.47147e+02, -1.56571e+02), forces1[276], tol); -ASSERT_EQUAL_VEC(Vec3( 4.21716e+01, -2.91447e+02, -1.50265e+02), forces1[277], tol); -ASSERT_EQUAL_VEC(Vec3( 1.75434e+02, -9.12760e+01, 6.45501e+01), forces1[278], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50375e+02, -1.42450e+02, 2.67953e+02), forces1[279], tol); -ASSERT_EQUAL_VEC(Vec3(-4.86647e+02, -2.18743e+01, 1.45714e+02), forces1[280], tol); -ASSERT_EQUAL_VEC(Vec3( 9.28419e+01, -6.94980e+01, -8.90565e+00), forces1[281], tol); -ASSERT_EQUAL_VEC(Vec3(-5.85243e+01, 2.84897e+02, 4.82514e+02), forces1[282], tol); -ASSERT_EQUAL_VEC(Vec3(-2.83552e+01, -1.73734e+02, -3.77885e+02), forces1[283], tol); -ASSERT_EQUAL_VEC(Vec3(-4.34939e+02, -1.30344e+02, -3.31885e+02), forces1[284], tol); -ASSERT_EQUAL_VEC(Vec3( 3.85318e+01, -2.54993e+02, -5.18580e+02), forces1[285], tol); -ASSERT_EQUAL_VEC(Vec3(-7.78898e+01, 1.25376e+02, -3.80651e+02), forces1[286], tol); -ASSERT_EQUAL_VEC(Vec3(-1.27219e+02, 3.88677e+02, 9.40603e+01), forces1[287], tol); -ASSERT_EQUAL_VEC(Vec3( 1.39438e+02, 4.03527e+02, -4.33294e+02), forces1[288], tol); -ASSERT_EQUAL_VEC(Vec3(-2.88829e+00, -2.06320e+02, -7.48585e+02), forces1[289], tol); -ASSERT_EQUAL_VEC(Vec3( 1.07981e+01, 2.35861e+02, -1.38359e+02), forces1[290], tol); -ASSERT_EQUAL_VEC(Vec3( 8.60284e+01, 5.74943e+02, 1.95762e+02), forces1[291], tol); -ASSERT_EQUAL_VEC(Vec3(-2.45605e+02, 1.95528e+02, 1.22031e+02), forces1[292], tol); -ASSERT_EQUAL_VEC(Vec3(-3.33844e+02, -2.71363e+02, -3.43370e+02), forces1[293], tol); -ASSERT_EQUAL_VEC(Vec3(-4.28638e+02, 1.60891e+02, 2.18049e+02), forces1[294], tol); -ASSERT_EQUAL_VEC(Vec3(-5.40059e+02, -1.47441e+02, 4.35219e+02), forces1[295], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48834e+02, 3.45734e+01, -1.25812e+02), forces1[296], tol); -ASSERT_EQUAL_VEC(Vec3( 3.39094e+02, 3.68778e+01, 2.99734e+01), forces1[297], tol); -ASSERT_EQUAL_VEC(Vec3(-1.67733e+02, -2.84609e+02, 3.88550e+01), forces1[298], tol); -ASSERT_EQUAL_VEC(Vec3(-3.21477e+02, -4.49303e+02, 1.41885e+02), forces1[299], tol); -ASSERT_EQUAL_VEC(Vec3( 1.16243e+02, 6.78513e+00, -1.08225e+02), forces1[300], tol); -ASSERT_EQUAL_VEC(Vec3(-1.85556e+02, -2.95254e+02, 5.01916e+02), forces1[301], tol); -ASSERT_EQUAL_VEC(Vec3( 9.27468e+01, -3.83936e+02, -2.77959e+02), forces1[302], tol); -ASSERT_EQUAL_VEC(Vec3(-3.97651e+01, 2.84541e+02, 2.33443e+02), forces1[303], tol); -ASSERT_EQUAL_VEC(Vec3( 1.40072e+00, 2.25399e+02, 9.48102e+01), forces1[304], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06096e+02, 2.06345e+02, -2.00217e+02), forces1[305], tol); -ASSERT_EQUAL_VEC(Vec3(-3.33985e+02, -3.09147e+01, -9.24046e+01), forces1[306], tol); -ASSERT_EQUAL_VEC(Vec3( 1.47346e+01, 1.47720e+02, 2.61218e+02), forces1[307], tol); -ASSERT_EQUAL_VEC(Vec3( 4.44221e+01, 1.15106e+02, 1.21336e+02), forces1[308], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53468e+02, 2.00343e+02, 3.39205e+01), forces1[309], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06608e+02, -1.16082e+02, 5.96468e+01), forces1[310], tol); -ASSERT_EQUAL_VEC(Vec3(-2.01600e+02, 4.15917e+01, 4.19308e+02), forces1[311], tol); -ASSERT_EQUAL_VEC(Vec3( 4.40503e+02, 1.34424e+02, 7.74282e+01), forces1[312], tol); -ASSERT_EQUAL_VEC(Vec3(-3.89154e+02, -2.83347e+02, -4.23560e+02), forces1[313], tol); -ASSERT_EQUAL_VEC(Vec3( 2.42086e+02, -6.45962e+02, 3.91500e+02), forces1[314], tol); -ASSERT_EQUAL_VEC(Vec3(-3.71539e+02, -4.53999e+01, 5.02838e+02), forces1[315], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52594e+02, 8.61216e+01, 2.63794e+02), forces1[316], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18403e+01, -1.24903e+02, -2.32014e+02), forces1[317], tol); -ASSERT_EQUAL_VEC(Vec3(-4.28776e+02, 2.69290e+02, -1.63292e+02), forces1[318], tol); -ASSERT_EQUAL_VEC(Vec3( 6.90376e+01, 2.01126e+02, -1.25394e+02), forces1[319], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43084e+01, -1.48482e+02, 9.25935e+01), forces1[320], tol); -ASSERT_EQUAL_VEC(Vec3(-3.53044e+01, 1.28686e+02, -3.63353e+02), forces1[321], tol); -ASSERT_EQUAL_VEC(Vec3(-5.24106e+02, -9.42773e+01, 1.18349e+01), forces1[322], tol); -ASSERT_EQUAL_VEC(Vec3( 2.26116e+02, 3.21645e+02, -3.90520e+02), forces1[323], tol); -ASSERT_EQUAL_VEC(Vec3( 3.59470e+01, -3.07422e+02, -5.38345e+01), forces1[324], tol); -ASSERT_EQUAL_VEC(Vec3(-1.17162e+02, 2.29578e+02, 1.57257e+02), forces1[325], tol); -ASSERT_EQUAL_VEC(Vec3(-9.86447e+01, -2.13510e+02, 9.34945e+01), forces1[326], tol); -ASSERT_EQUAL_VEC(Vec3( 2.32239e+02, 6.06792e+01, -3.57488e+02), forces1[327], tol); -ASSERT_EQUAL_VEC(Vec3(-4.16208e+01, 1.12534e+02, -2.00673e+02), forces1[328], tol); -ASSERT_EQUAL_VEC(Vec3(-5.14797e+01, 2.96279e+02, 3.68486e+02), forces1[329], tol); -ASSERT_EQUAL_VEC(Vec3( 1.02087e+02, -9.70760e+01, 3.02447e+01), forces1[330], tol); -ASSERT_EQUAL_VEC(Vec3(-1.03773e+02, -1.54768e+02, 2.10252e+02), forces1[331], tol); -ASSERT_EQUAL_VEC(Vec3( 1.90526e+02, 6.04195e+01, -9.59270e+01), forces1[332], tol); -ASSERT_EQUAL_VEC(Vec3(-1.16808e+02, -5.22817e+02, 5.66574e+02), forces1[333], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18109e+02, -1.37414e+02, 1.53024e+02), forces1[334], tol); -ASSERT_EQUAL_VEC(Vec3(-9.04344e+01, -1.47623e+02, 8.89515e+01), forces1[335], tol); -ASSERT_EQUAL_VEC(Vec3( 2.10214e+01, -2.05509e+02, 1.26834e+02), forces1[336], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68046e+02, -2.97773e+02, -1.20748e+02), forces1[337], tol); -ASSERT_EQUAL_VEC(Vec3( 3.99130e+02, 2.95164e+02, 3.91133e+02), forces1[338], tol); -ASSERT_EQUAL_VEC(Vec3( 6.84897e+02, -2.36112e+02, 3.42241e+02), forces1[339], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26674e+02, 1.75741e+02, 1.84784e+02), forces1[340], tol); -ASSERT_EQUAL_VEC(Vec3(-1.32552e+01, 4.13616e+01, -7.24209e+01), forces1[341], tol); -ASSERT_EQUAL_VEC(Vec3(-2.77910e+02, 3.10252e+02, 1.84772e+01), forces1[342], tol); -ASSERT_EQUAL_VEC(Vec3( 1.17751e+02, 2.88285e+02, 2.83196e+02), forces1[343], tol); -ASSERT_EQUAL_VEC(Vec3(-2.14324e+01, 5.21203e+02, 1.00240e+02), forces1[344], tol); -ASSERT_EQUAL_VEC(Vec3( 1.24356e+02, -1.12357e+02, 2.11950e+02), forces1[345], tol); -ASSERT_EQUAL_VEC(Vec3( 6.49096e+00, 2.20316e+02, -3.03863e+02), forces1[346], tol); -ASSERT_EQUAL_VEC(Vec3( 3.27054e+02, 1.14349e+02, 4.53346e+02), forces1[347], tol); -ASSERT_EQUAL_VEC(Vec3( 3.89302e+01, 3.55284e+02, 2.25739e+01), forces1[348], tol); -ASSERT_EQUAL_VEC(Vec3(-2.25217e+02, -2.30560e+02, -2.32663e+02), forces1[349], tol); -ASSERT_EQUAL_VEC(Vec3(-4.40572e+02, -4.18868e+01, -8.73193e+01), forces1[350], tol); -ASSERT_EQUAL_VEC(Vec3( 2.03285e+02, -7.41876e+01, -3.11213e+02), forces1[351], tol); -ASSERT_EQUAL_VEC(Vec3( 3.14048e+02, -4.52169e+01, 1.15684e+02), forces1[352], tol); -ASSERT_EQUAL_VEC(Vec3(-3.05766e+02, -8.44138e+01, 2.77051e+02), forces1[353], tol); -ASSERT_EQUAL_VEC(Vec3( 6.03142e+02, 7.49854e+01, 1.08102e+02), forces1[354], tol); -ASSERT_EQUAL_VEC(Vec3( 1.19382e+02, 3.21995e+02, 1.19502e+01), forces1[355], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06924e+02, 2.87624e+01, 2.37383e+02), forces1[356], tol); -ASSERT_EQUAL_VEC(Vec3( 3.21440e+02, -7.92932e+02, 4.18479e+01), forces1[357], tol); -ASSERT_EQUAL_VEC(Vec3(-1.08675e+02, 2.36719e+02, -5.75404e+02), forces1[358], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53731e+02, -4.66587e+02, 3.71577e+02), forces1[359], tol); -ASSERT_EQUAL_VEC(Vec3(-1.56295e+02, -8.97020e+01, -3.26310e+02), forces1[360], tol); -ASSERT_EQUAL_VEC(Vec3( 3.42777e+02, -3.18031e+01, -4.08905e+02), forces1[361], tol); -ASSERT_EQUAL_VEC(Vec3( 1.47602e+02, 4.76918e+02, 4.19650e+01), forces1[362], tol); -ASSERT_EQUAL_VEC(Vec3( 6.19970e-01, -4.13644e+01, 4.39906e+02), forces1[363], tol); -ASSERT_EQUAL_VEC(Vec3(-2.56834e+02, -1.83029e+02, 5.99876e+01), forces1[364], tol); -ASSERT_EQUAL_VEC(Vec3( 2.48250e+02, 5.50128e+01, -1.55098e+01), forces1[365], tol); -ASSERT_EQUAL_VEC(Vec3(-1.93630e+02, -1.86414e+01, 6.10783e-01), forces1[366], tol); -ASSERT_EQUAL_VEC(Vec3(-1.63225e+02, 1.90017e+02, -4.93447e+02), forces1[367], tol); -ASSERT_EQUAL_VEC(Vec3(-2.85285e+01, -4.66015e+02, -2.10844e+02), forces1[368], tol); -ASSERT_EQUAL_VEC(Vec3( 2.27175e+02, 1.52519e+01, -1.64037e+02), forces1[369], tol); -ASSERT_EQUAL_VEC(Vec3(-1.07158e+02, 2.01372e+01, 6.04946e+01), forces1[370], tol); -ASSERT_EQUAL_VEC(Vec3( 2.41288e+02, 4.05688e+02, -8.71414e+01), forces1[371], tol); -ASSERT_EQUAL_VEC(Vec3( 1.33810e+02, 1.72165e+02, -1.15347e+02), forces1[372], tol); -ASSERT_EQUAL_VEC(Vec3( 4.19305e+02, -4.68244e+02, -3.30524e+02), forces1[373], tol); -ASSERT_EQUAL_VEC(Vec3(-1.88000e+02, -2.43516e+02, 8.87125e+01), forces1[374], tol); -ASSERT_EQUAL_VEC(Vec3( 1.54008e+02, 2.52337e+02, 1.76385e+02), forces1[375], tol); -ASSERT_EQUAL_VEC(Vec3(-1.10634e+02, 3.33134e+01, 1.23764e+02), forces1[376], tol); -ASSERT_EQUAL_VEC(Vec3( 1.64797e+02, 8.89785e-01, 1.56187e+02), forces1[377], tol); -ASSERT_EQUAL_VEC(Vec3(-1.65397e+02, -1.50246e+02, 2.41784e+02), forces1[378], tol); -ASSERT_EQUAL_VEC(Vec3( 4.78079e+02, -2.36417e+02, 4.04919e+02), forces1[379], tol); -ASSERT_EQUAL_VEC(Vec3(-2.33373e+02, -7.47052e+02, 1.09725e+02), forces1[380], tol); -ASSERT_EQUAL_VEC(Vec3( 1.09374e+02, -3.37524e+02, 1.99891e+02), forces1[381], tol); -ASSERT_EQUAL_VEC(Vec3( 1.45367e+02, 1.34685e+02, 3.46407e+02), forces1[382], tol); -ASSERT_EQUAL_VEC(Vec3(-8.86795e+01, 1.70743e+02, 1.86635e+02), forces1[383], tol); -ASSERT_EQUAL_VEC(Vec3( 1.03271e+02, -2.54982e+02, -2.04505e+01), forces1[384], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06120e+02, -3.72063e+02, 9.10667e+01), forces1[385], tol); -ASSERT_EQUAL_VEC(Vec3( 4.33821e+02, 5.30907e+02, 1.18197e+02), forces1[386], tol); -ASSERT_EQUAL_VEC(Vec3(-3.34808e+02, 2.29883e+02, 1.73589e+02), forces1[387], tol); -ASSERT_EQUAL_VEC(Vec3(-3.27223e+00, 3.50940e+02, -5.66750e+00), forces1[388], tol); -ASSERT_EQUAL_VEC(Vec3(-3.18249e+02, -4.16016e+02, 3.93821e+00), forces1[389], tol); -ASSERT_EQUAL_VEC(Vec3(-9.01726e+01, -2.83141e+02, -1.78609e+02), forces1[390], tol); -ASSERT_EQUAL_VEC(Vec3(-1.86960e+02, 2.96534e+02, -1.29666e+02), forces1[391], tol); -ASSERT_EQUAL_VEC(Vec3(-7.78140e+02, 3.37747e+02, 2.46235e+02), forces1[392], tol); -ASSERT_EQUAL_VEC(Vec3(-4.88292e+02, -3.62809e+02, 1.09196e+02), forces1[393], tol); -ASSERT_EQUAL_VEC(Vec3( 1.68815e+02, -1.54070e+02, 2.44122e+02), forces1[394], tol); -ASSERT_EQUAL_VEC(Vec3( 8.59883e+01, -4.73417e+02, 1.81318e+02), forces1[395], tol); -ASSERT_EQUAL_VEC(Vec3(-5.15453e+01, 3.80575e+01, 1.48501e+02), forces1[396], tol); -ASSERT_EQUAL_VEC(Vec3( 4.40890e+02, -9.36667e+01, 2.19946e+02), forces1[397], tol); -ASSERT_EQUAL_VEC(Vec3( 4.55989e+01, 5.74616e+02, -5.74981e+01), forces1[398], tol); -ASSERT_EQUAL_VEC(Vec3( 1.07793e+02, -3.19752e+02, 1.16186e+01), forces1[399], tol); -ASSERT_EQUAL_VEC(Vec3(-1.73817e+02, -1.72672e+02, 3.26164e+02), forces1[400], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48594e+02, -4.95425e+02, -1.37767e+02), forces1[401], tol); -ASSERT_EQUAL_VEC(Vec3( 1.43480e+02, -7.71741e+01, 1.27160e+02), forces1[402], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26017e+02, -3.81397e+02, -2.85760e+02), forces1[403], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53035e+02, -2.67890e+02, 1.51840e+02), forces1[404], tol); -ASSERT_EQUAL_VEC(Vec3(-1.01060e+02, -1.79828e+02, -2.05754e+02), forces1[405], tol); -ASSERT_EQUAL_VEC(Vec3( 1.32075e+02, -2.56994e+02, -4.06095e+02), forces1[406], tol); -ASSERT_EQUAL_VEC(Vec3( 5.49913e+01, 5.21043e+01, -2.40692e+01), forces1[407], tol); -ASSERT_EQUAL_VEC(Vec3(-3.04198e+01, -3.45366e+02, 3.52724e+02), forces1[408], tol); -ASSERT_EQUAL_VEC(Vec3( 5.76204e+02, 2.51419e+02, -2.05669e+02), forces1[409], tol); -ASSERT_EQUAL_VEC(Vec3(-5.46249e+02, -3.81508e+01, 1.55947e+02), forces1[410], tol); -ASSERT_EQUAL_VEC(Vec3(-1.00739e+02, 2.13319e+02, 3.33076e+02), forces1[411], tol); -ASSERT_EQUAL_VEC(Vec3( 8.00363e+01, 1.85321e+02, -4.43381e+02), forces1[412], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53965e+02, 1.76341e+01, 5.07046e+01), forces1[413], tol); -ASSERT_EQUAL_VEC(Vec3(-2.54115e+01, -1.01737e+02, -1.47105e+02), forces1[414], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53030e+02, 2.89729e+02, -1.78282e+02), forces1[415], tol); -ASSERT_EQUAL_VEC(Vec3(-1.30262e+02, -4.66600e+02, -3.53368e+02), forces1[416], tol); -ASSERT_EQUAL_VEC(Vec3( 1.82473e+02, 3.77989e+02, 1.90480e+02), forces1[417], tol); -ASSERT_EQUAL_VEC(Vec3(-2.59797e+02, 3.29719e+02, 3.93445e+02), forces1[418], tol); -ASSERT_EQUAL_VEC(Vec3(-1.08424e+01, -5.30928e+02, -1.53190e+01), forces1[419], tol); -ASSERT_EQUAL_VEC(Vec3(-3.27758e+01, -3.45905e+02, -1.45609e+02), forces1[420], tol); -ASSERT_EQUAL_VEC(Vec3(-1.92427e+02, 3.70108e+00, -1.26539e+02), forces1[421], tol); -ASSERT_EQUAL_VEC(Vec3( 2.61433e+02, -1.63237e+02, -1.22721e+02), forces1[422], tol); -ASSERT_EQUAL_VEC(Vec3(-1.42907e+02, 4.15425e+02, 5.04223e+02), forces1[423], tol); -ASSERT_EQUAL_VEC(Vec3( 3.36579e+02, -1.06048e+02, 4.54179e+02), forces1[424], tol); -ASSERT_EQUAL_VEC(Vec3(-2.32219e+02, -1.84431e+00, 4.48455e+01), forces1[425], tol); -ASSERT_EQUAL_VEC(Vec3( 4.12408e+02, -5.04695e+02, 4.00897e+02), forces1[426], tol); -ASSERT_EQUAL_VEC(Vec3(-1.54644e+02, -2.68563e+02, -1.53010e+01), forces1[427], tol); -ASSERT_EQUAL_VEC(Vec3( 2.69725e+02, 2.18578e+02, -1.75382e+02), forces1[428], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77257e+01, -4.66563e+01, 6.24304e+01), forces1[429], tol); -ASSERT_EQUAL_VEC(Vec3(-1.29886e+02, 8.07543e+01, 1.84899e+01), forces1[430], tol); -ASSERT_EQUAL_VEC(Vec3( 1.76179e+02, -3.20023e+02, -2.47777e+02), forces1[431], tol); -ASSERT_EQUAL_VEC(Vec3(-1.68173e+02, 2.05763e+02, -1.17388e+02), forces1[432], tol); -ASSERT_EQUAL_VEC(Vec3(-1.93371e+02, 7.76884e+01, -1.60936e+02), forces1[433], tol); -ASSERT_EQUAL_VEC(Vec3(-8.97869e+01, 2.56574e+02, -3.94708e+02), forces1[434], tol); -ASSERT_EQUAL_VEC(Vec3(-2.33025e+02, 9.53235e+01, 3.02990e+02), forces1[435], tol); -ASSERT_EQUAL_VEC(Vec3( 4.34327e+01, -4.44348e+02, -5.00356e+00), forces1[436], tol); -ASSERT_EQUAL_VEC(Vec3( 3.32045e+02, -4.10887e+02, -6.13802e+01), forces1[437], tol); -ASSERT_EQUAL_VEC(Vec3(-1.45947e+02, -2.28307e+02, -2.99015e+02), forces1[438], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38554e+02, -1.27402e+02, -2.93859e+02), forces1[439], tol); -ASSERT_EQUAL_VEC(Vec3( 2.97418e+02, 3.38266e+02, -2.14828e+02), forces1[440], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49417e+01, 1.88462e+02, -8.02993e+01), forces1[441], tol); -ASSERT_EQUAL_VEC(Vec3(-1.32440e+02, -3.86535e+02, -6.70018e+01), forces1[442], tol); -ASSERT_EQUAL_VEC(Vec3( 1.84581e+01, 2.24810e+02, -1.36951e+02), forces1[443], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15314e+02, 1.06097e+02, -1.25729e+02), forces1[444], tol); -ASSERT_EQUAL_VEC(Vec3( 3.07808e+02, 4.34344e+02, 2.17287e+01), forces1[445], tol); -ASSERT_EQUAL_VEC(Vec3( 8.08473e+00, 4.99811e+01, -3.14217e+02), forces1[446], tol); -ASSERT_EQUAL_VEC(Vec3( 1.36944e+03, 6.44821e+02, -3.85099e+02), forces1[447], tol); -ASSERT_EQUAL_VEC(Vec3( 3.32220e+02, -1.04207e+02, -4.08594e+02), forces1[448], tol); -ASSERT_EQUAL_VEC(Vec3( 3.73256e+02, 2.70963e+02, 3.80703e+02), forces1[449], tol); -ASSERT_EQUAL_VEC(Vec3(-2.09802e+02, 4.29907e+02, 8.40858e+02), forces1[450], tol); -ASSERT_EQUAL_VEC(Vec3(-3.48550e+02, -3.63122e+02, 5.10367e+02), forces1[451], tol); -ASSERT_EQUAL_VEC(Vec3(-3.29139e+00, 4.63314e-01, -6.04797e+00), forces1[452], tol); -ASSERT_EQUAL_VEC(Vec3( 3.83320e+01, 3.59803e+02, 8.67059e+02), forces1[453], tol); -ASSERT_EQUAL_VEC(Vec3(-1.57402e+02, 5.68721e+02, -1.87722e+02), forces1[454], tol); -ASSERT_EQUAL_VEC(Vec3( 4.16157e+02, 5.83052e+01, -5.75714e+02), forces1[455], tol); -ASSERT_EQUAL_VEC(Vec3( 2.58777e+02, -1.00684e+02, -4.43414e+02), forces1[456], tol); -ASSERT_EQUAL_VEC(Vec3( 1.38944e+02, 4.93487e+02, 9.06788e+02), forces1[457], tol); -ASSERT_EQUAL_VEC(Vec3(-4.81206e+01, 9.53313e+02, -1.83923e+02), forces1[458], tol); -ASSERT_EQUAL_VEC(Vec3( 6.64525e+02, -3.77318e+02, 1.93095e+02), forces1[459], tol); -ASSERT_EQUAL_VEC(Vec3( 8.34571e+01, 1.77786e+02, 4.70682e+02), forces1[460], tol); -ASSERT_EQUAL_VEC(Vec3( 9.98937e+02, -3.98574e+02, 9.83608e+02), forces1[461], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06594e+02, -4.10896e+01, 4.75194e+02), forces1[462], tol); -ASSERT_EQUAL_VEC(Vec3(-7.58517e+01, 1.45227e+02, 4.52920e+01), forces1[463], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13510e+02, 5.29893e+02, -3.00930e+02), forces1[464], tol); -ASSERT_EQUAL_VEC(Vec3(-1.46460e+02, -3.86625e+02, -6.42393e+02), forces1[465], tol); -ASSERT_EQUAL_VEC(Vec3(-2.70142e+02, 3.67184e+02, -1.78825e+02), forces1[466], tol); -ASSERT_EQUAL_VEC(Vec3(-1.23818e+02, -1.77327e+02, 2.37348e+02), forces1[467], tol); -ASSERT_EQUAL_VEC(Vec3(-4.94038e+02, 1.34882e+02, 6.98769e+02), forces1[468], tol); -ASSERT_EQUAL_VEC(Vec3( 7.08753e+02, 1.85253e+02, 5.51151e+02), forces1[469], tol); -ASSERT_EQUAL_VEC(Vec3( 2.01280e+02, -5.84706e+02, 5.82923e+02), forces1[470], tol); -ASSERT_EQUAL_VEC(Vec3( 5.29637e+02, 4.06934e+01, 9.99138e+01), forces1[471], tol); -ASSERT_EQUAL_VEC(Vec3(-1.19702e+02, 4.42978e+02, -2.70454e+02), forces1[472], tol); -ASSERT_EQUAL_VEC(Vec3(-6.87792e+02, -1.32245e+02, -7.35776e+01), forces1[473], tol); -ASSERT_EQUAL_VEC(Vec3(-2.99619e+02, 8.14627e+02, 2.72106e+01), forces1[474], tol); -ASSERT_EQUAL_VEC(Vec3(-2.26041e+02, -3.49841e+02, -2.73664e+02), forces1[475], tol); -ASSERT_EQUAL_VEC(Vec3(-3.38853e+02, 8.74214e+02, 2.98569e+02), forces1[476], tol); -ASSERT_EQUAL_VEC(Vec3( 5.63040e+02, 1.51174e+02, -1.10341e+02), forces1[477], tol); -ASSERT_EQUAL_VEC(Vec3( 3.44129e+02, 2.73283e+02, 5.44564e+02), forces1[478], tol); -ASSERT_EQUAL_VEC(Vec3( 3.29047e+01, 3.66771e+02, 3.30305e+02), forces1[479], tol); -ASSERT_EQUAL_VEC(Vec3(-4.97987e+01, -3.26340e+02, -6.47519e+02), forces1[480], tol); -ASSERT_EQUAL_VEC(Vec3( 6.05980e+01, -1.41021e+02, 4.05550e+02), forces1[481], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35193e+03, 5.06460e+01, -1.40089e+02), forces1[482], tol); -ASSERT_EQUAL_VEC(Vec3( 7.69975e+01, -2.68983e+02, -1.75054e+02), forces1[483], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89530e+02, -2.32958e+02, -2.54876e+02), forces1[484], tol); -ASSERT_EQUAL_VEC(Vec3( 2.37140e+02, 6.49184e+02, 1.01759e+02), forces1[485], tol); -ASSERT_EQUAL_VEC(Vec3(-3.38582e+02, 1.34683e+02, 7.89826e+02), forces1[486], tol); -ASSERT_EQUAL_VEC(Vec3(-5.59991e+02, -1.46821e+02, 3.62431e+01), forces1[487], tol); -ASSERT_EQUAL_VEC(Vec3(-3.52720e+02, 1.16574e+02, -4.55489e+02), forces1[488], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56764e+01, 1.02552e+02, -9.81453e+01), forces1[489], tol); -ASSERT_EQUAL_VEC(Vec3(-4.22999e+02, 8.89176e+02, -9.19669e+01), forces1[490], tol); -ASSERT_EQUAL_VEC(Vec3( 5.13334e+02, 4.56108e+02, -6.86079e+01), forces1[491], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12135e+02, 6.84704e+02, 4.44625e+01), forces1[492], tol); -ASSERT_EQUAL_VEC(Vec3( 2.15971e+02, 3.33099e+02, -4.41275e+02), forces1[493], tol); -ASSERT_EQUAL_VEC(Vec3(-4.87370e-01, -2.16943e+02, -5.39078e+02), forces1[494], tol); -ASSERT_EQUAL_VEC(Vec3(-3.91577e+02, 2.80055e+02, 4.50317e+02), forces1[495], tol); -ASSERT_EQUAL_VEC(Vec3( 2.40450e+02, -1.24633e+02, -2.70115e+02), forces1[496], tol); -ASSERT_EQUAL_VEC(Vec3( 7.23732e+01, 1.59397e+01, -5.23970e+01), forces1[497], tol); -ASSERT_EQUAL_VEC(Vec3(-1.41172e+02, -3.23970e+02, -4.05105e+02), forces1[498], tol); -ASSERT_EQUAL_VEC(Vec3( 3.93746e+02, 3.77842e+02, -4.56281e+02), forces1[499], tol); -ASSERT_EQUAL_VEC(Vec3(-2.67998e+02, -2.12761e+02, -7.96439e+02), forces1[500], tol); -ASSERT_EQUAL_VEC(Vec3( 9.59492e+02, 1.74115e+02, 1.16152e+01), forces1[501], tol); -ASSERT_EQUAL_VEC(Vec3(-3.93501e+01, 1.29106e+01, -1.89347e+02), forces1[502], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49458e+02, 7.83930e+01, -4.78250e+02), forces1[503], tol); -ASSERT_EQUAL_VEC(Vec3( 5.16044e+02, 6.52904e+02, -5.05255e+02), forces1[504], tol); -ASSERT_EQUAL_VEC(Vec3( 5.10790e+01, -5.19600e+02, 6.82941e+00), forces1[505], tol); -ASSERT_EQUAL_VEC(Vec3(-7.68988e+01, -1.13215e+03, -7.05215e+02), forces1[506], tol); -ASSERT_EQUAL_VEC(Vec3(-2.13083e+02, 1.68863e+00, 8.26377e+02), forces1[507], tol); -ASSERT_EQUAL_VEC(Vec3( 1.86606e+01, 1.91403e+02, 4.18423e+02), forces1[508], tol); -ASSERT_EQUAL_VEC(Vec3( 2.35358e+02, 3.79667e+02, -3.13829e+02), forces1[509], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26198e+02, -2.59719e+02, -6.76311e+02), forces1[510], tol); -ASSERT_EQUAL_VEC(Vec3(-1.38258e+02, -3.38620e+02, 2.20451e+02), forces1[511], tol); -ASSERT_EQUAL_VEC(Vec3(-2.25461e+02, -7.80816e+02, -2.43646e+02), forces1[512], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10604e+01, 4.16051e+01, 6.15644e+01), forces1[513], tol); -ASSERT_EQUAL_VEC(Vec3( 6.75638e+01, 9.67799e+01, 6.03426e+02), forces1[514], tol); -ASSERT_EQUAL_VEC(Vec3(-1.27092e+02, -4.74786e+01, 4.67732e+02), forces1[515], tol); -ASSERT_EQUAL_VEC(Vec3(-2.72718e+02, 3.30904e+01, -2.81969e+02), forces1[516], tol); -ASSERT_EQUAL_VEC(Vec3( 4.78708e+02, 8.27630e+01, -3.32365e+02), forces1[517], tol); -ASSERT_EQUAL_VEC(Vec3( 1.48583e+02, 1.88623e+02, -5.92109e+02), forces1[518], tol); -ASSERT_EQUAL_VEC(Vec3(-9.24687e+01, 6.86960e+01, 5.16806e+02), forces1[519], tol); -ASSERT_EQUAL_VEC(Vec3( 4.32885e+02, -4.67487e+02, 1.09388e+02), forces1[520], tol); -ASSERT_EQUAL_VEC(Vec3(-2.19076e+02, 2.08356e+00, 1.05234e+03), forces1[521], tol); -ASSERT_EQUAL_VEC(Vec3(-3.95711e+02, -3.31334e+02, 6.33917e+02), forces1[522], tol); -ASSERT_EQUAL_VEC(Vec3( 2.29127e+01, 5.34140e+02, 3.48041e+01), forces1[523], tol); -ASSERT_EQUAL_VEC(Vec3( 4.58862e+02, -2.39332e+02, 5.46969e+01), forces1[524], tol); -ASSERT_EQUAL_VEC(Vec3( 9.97684e+01, 6.32200e+02, -2.38256e+02), forces1[525], tol); -ASSERT_EQUAL_VEC(Vec3(-5.41816e+02, 2.23588e+02, 3.43986e+02), forces1[526], tol); -ASSERT_EQUAL_VEC(Vec3( 6.66038e+02, 4.01166e+02, 3.95435e+02), forces1[527], tol); -ASSERT_EQUAL_VEC(Vec3(-3.06412e+02, 9.39713e+02, -8.27951e+01), forces1[528], tol); -ASSERT_EQUAL_VEC(Vec3(-6.74084e+02, 3.08236e+02, 3.73252e+02), forces1[529], tol); -ASSERT_EQUAL_VEC(Vec3( 2.12296e+02, -1.45360e+02, 2.64306e+02), forces1[530], tol); -ASSERT_EQUAL_VEC(Vec3( 5.45245e+01, -8.21096e+01, 1.51265e+01), forces1[531], tol); -ASSERT_EQUAL_VEC(Vec3( 1.18910e+03, 9.92315e+02, 1.56912e+02), forces1[532], tol); -ASSERT_EQUAL_VEC(Vec3( 4.27129e+02, 1.57559e+02, -3.44345e+02), forces1[533], tol); -ASSERT_EQUAL_VEC(Vec3( 4.25879e+02, -8.14513e+02, -2.37537e+02), forces1[534], tol); -ASSERT_EQUAL_VEC(Vec3( 1.28753e+02, 2.55759e+02, 4.07890e+02), forces1[535], tol); -ASSERT_EQUAL_VEC(Vec3(-4.27472e+02, 1.69782e+02, 1.81400e+02), forces1[536], tol); -ASSERT_EQUAL_VEC(Vec3(-1.35803e+01, 6.03708e+01, -2.72317e+02), forces1[537], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33174e+02, 2.70226e+02, -1.39400e+02), forces1[538], tol); -ASSERT_EQUAL_VEC(Vec3( 4.27463e+02, 1.39185e+02, 1.50051e+02), forces1[539], tol); -ASSERT_EQUAL_VEC(Vec3(-8.29129e+01, -1.00155e+02, -6.82106e+01), forces1[540], tol); -ASSERT_EQUAL_VEC(Vec3( 4.42454e+02, -8.63490e+02, 5.13458e+02), forces1[541], tol); -ASSERT_EQUAL_VEC(Vec3( 2.60683e+02, -6.37510e+01, 1.70972e+02), forces1[542], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90402e+02, -6.79668e+01, -2.36492e+02), forces1[543], tol); -ASSERT_EQUAL_VEC(Vec3( 2.47134e+02, -6.89590e+02, 2.32358e+02), forces1[544], tol); -ASSERT_EQUAL_VEC(Vec3(-5.36759e+02, 2.88860e+02, -6.13641e+02), forces1[545], tol); -ASSERT_EQUAL_VEC(Vec3(-7.93522e+02, 1.07651e+02, 1.05021e+03), forces1[546], tol); -ASSERT_EQUAL_VEC(Vec3( 5.82887e+02, 1.51816e+02, 4.23889e+02), forces1[547], tol); -ASSERT_EQUAL_VEC(Vec3( 1.88325e+02, 3.18348e+02, 2.45829e+02), forces1[548], tol); -ASSERT_EQUAL_VEC(Vec3( 2.61706e+02, 2.14114e+02, -1.84884e+02), forces1[549], tol); -ASSERT_EQUAL_VEC(Vec3(-6.23135e+01, -3.92081e+02, 3.63681e+02), forces1[550], tol); -ASSERT_EQUAL_VEC(Vec3( 2.19342e+02, -3.09069e+02, 2.60297e+02), forces1[551], tol); -ASSERT_EQUAL_VEC(Vec3( 5.02121e+02, -5.84013e+02, -2.55782e+02), forces1[552], tol); -ASSERT_EQUAL_VEC(Vec3( 3.03896e+02, 8.14784e+01, 3.89611e+02), forces1[553], tol); -ASSERT_EQUAL_VEC(Vec3(-1.63570e+01, -1.20665e+02, -1.80834e+02), forces1[554], tol); -ASSERT_EQUAL_VEC(Vec3( 5.41978e+02, 1.88566e+02, 1.13688e+02), forces1[555], tol); -ASSERT_EQUAL_VEC(Vec3( 1.22433e+01, -7.61806e+02, -5.24497e+02), forces1[556], tol); -ASSERT_EQUAL_VEC(Vec3(-4.66740e+02, 1.60557e+02, 1.60939e+02), forces1[557], tol); -ASSERT_EQUAL_VEC(Vec3( 1.52457e+02, -2.28607e+02, -5.94690e+01), forces1[558], tol); -ASSERT_EQUAL_VEC(Vec3( 1.80888e+02, 2.02585e+02, 2.57319e+02), forces1[559], tol); -ASSERT_EQUAL_VEC(Vec3( 6.16843e+02, -3.58498e+02, -5.69821e+02), forces1[560], tol); -ASSERT_EQUAL_VEC(Vec3(-1.57111e+02, -1.13569e+02, -1.64406e+02), forces1[561], tol); -ASSERT_EQUAL_VEC(Vec3(-5.95573e+02, 1.76708e+02, -1.20416e+02), forces1[562], tol); -ASSERT_EQUAL_VEC(Vec3(-6.71022e+01, 7.56220e+02, 5.71559e+02), forces1[563], tol); -ASSERT_EQUAL_VEC(Vec3(-2.03120e+02, -5.27280e+02, -8.87774e+01), forces1[564], tol); -ASSERT_EQUAL_VEC(Vec3(-1.55600e+02, 2.45850e+02, 3.01861e+01), forces1[565], tol); -ASSERT_EQUAL_VEC(Vec3( 1.30693e+02, -2.25616e+02, -3.22200e+02), forces1[566], tol); -ASSERT_EQUAL_VEC(Vec3( 8.50163e+00, -1.67330e+02, 1.64207e+02), forces1[567], tol); -ASSERT_EQUAL_VEC(Vec3(-2.31496e+02, -5.93524e+00, -4.92426e+02), forces1[568], tol); -ASSERT_EQUAL_VEC(Vec3(-1.99378e+02, -1.40003e+02, 2.20600e+01), forces1[569], tol); -ASSERT_EQUAL_VEC(Vec3(-2.65254e+02, 6.41911e+02, 2.96826e+01), forces1[570], tol); -ASSERT_EQUAL_VEC(Vec3(-6.43644e+02, -9.18721e+01, 4.59939e+02), forces1[571], tol); -ASSERT_EQUAL_VEC(Vec3( 3.08964e+02, 8.15563e+02, 4.66117e+02), forces1[572], tol); -ASSERT_EQUAL_VEC(Vec3( 3.27958e+02, -3.65732e+02, -7.14736e+02), forces1[573], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27143e+01, 1.71616e+02, 5.53835e+02), forces1[574], tol); -ASSERT_EQUAL_VEC(Vec3(-3.66153e+02, -4.26970e+02, 4.19225e+02), forces1[575], tol); -ASSERT_EQUAL_VEC(Vec3( 3.35352e+02, 4.34253e+02, 3.88513e+02), forces1[576], tol); -ASSERT_EQUAL_VEC(Vec3( 1.92411e+02, 3.20021e+01, 2.85805e+02), forces1[577], tol); -ASSERT_EQUAL_VEC(Vec3(-1.98797e+02, -5.26323e+02, 3.78346e+02), forces1[578], tol); -ASSERT_EQUAL_VEC(Vec3( 1.45478e+01, -4.73229e+02, 1.99924e+02), forces1[579], tol); -ASSERT_EQUAL_VEC(Vec3(-4.54986e+02, -4.41692e+02, -1.24580e+01), forces1[580], tol); -ASSERT_EQUAL_VEC(Vec3(-4.14887e+02, 2.39737e+02, 1.50739e+02), forces1[581], tol); -ASSERT_EQUAL_VEC(Vec3(-3.05987e+02, -5.48474e+02, 1.68225e+02), forces1[582], tol); -ASSERT_EQUAL_VEC(Vec3(-4.75144e+02, -5.13947e+02, -3.05852e+02), forces1[583], tol); -ASSERT_EQUAL_VEC(Vec3(-1.94336e+02, 1.30198e+02, -3.61876e+02), forces1[584], tol); -ASSERT_EQUAL_VEC(Vec3(-3.90896e+02, 9.91483e+01, -5.15021e+02), forces1[585], tol); -ASSERT_EQUAL_VEC(Vec3(-6.84463e+01, 4.13153e+01, -2.50205e+02), forces1[586], tol); -ASSERT_EQUAL_VEC(Vec3(-1.33546e+02, 4.37436e+02, 3.93115e+02), forces1[587], tol); -ASSERT_EQUAL_VEC(Vec3( 2.17884e+02, -3.56946e+02, -2.18969e+01), forces1[588], tol); -ASSERT_EQUAL_VEC(Vec3(-6.71098e+01, -2.85177e+01, -4.77738e+02), forces1[589], tol); -ASSERT_EQUAL_VEC(Vec3(-1.52910e+02, 1.00734e+02, 7.10518e+01), forces1[590], tol); -ASSERT_EQUAL_VEC(Vec3(-4.51744e+02, 3.40012e+02, -4.62177e+02), forces1[591], tol); -ASSERT_EQUAL_VEC(Vec3(-3.10160e+02, 9.78204e+02, 6.76386e+02), forces1[592], tol); -ASSERT_EQUAL_VEC(Vec3(-3.27570e+02, -1.79611e+02, -2.92229e+02), forces1[593], tol); -ASSERT_EQUAL_VEC(Vec3(-1.59844e+02, 2.90908e+01, -2.88809e+02), forces1[594], tol); -ASSERT_EQUAL_VEC(Vec3( 2.51646e+02, -6.16089e+02, -2.74649e+02), forces1[595], tol); -ASSERT_EQUAL_VEC(Vec3(-4.29770e+02, 2.97845e+02, 2.42778e+02), forces1[596], tol); -ASSERT_EQUAL_VEC(Vec3(-6.54276e+01, -3.70145e+00, 1.09371e+02), forces1[597], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13649e+02, 1.22416e+02, -1.64174e+02), forces1[598], tol); -ASSERT_EQUAL_VEC(Vec3(-4.57994e+02, -5.24219e+02, -4.23537e+02), forces1[599], tol); -ASSERT_EQUAL_VEC(Vec3(-4.01122e+02, -3.10908e+02, -4.86433e+02), forces1[600], tol); -ASSERT_EQUAL_VEC(Vec3( 5.98525e+02, 2.14431e+02, -3.57310e+02), forces1[601], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56640e+02, 7.11992e+01, -6.74285e+02), forces1[602], tol); -ASSERT_EQUAL_VEC(Vec3(-4.29293e+02, 3.33266e+02, -9.12898e+02), forces1[603], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69637e+01, -1.31695e+02, -3.65262e+02), forces1[604], tol); -ASSERT_EQUAL_VEC(Vec3(-9.50771e+00, 3.29551e+02, 1.84445e+01), forces1[605], tol); -ASSERT_EQUAL_VEC(Vec3( 1.01475e+03, 8.03474e+01, -6.28561e+02), forces1[606], tol); -ASSERT_EQUAL_VEC(Vec3( 2.39376e+02, -4.08073e+02, -1.62858e+02), forces1[607], tol); -ASSERT_EQUAL_VEC(Vec3(-3.93618e+02, -5.17098e+02, 5.21853e+02), forces1[608], tol); -ASSERT_EQUAL_VEC(Vec3(-1.37173e+02, -3.86360e+01, 4.26832e+02), forces1[609], tol); -ASSERT_EQUAL_VEC(Vec3( 4.56735e+02, 1.63812e+02, 1.01401e+01), forces1[610], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53136e+02, 1.02274e+02, -7.27489e+02), forces1[611], tol); -ASSERT_EQUAL_VEC(Vec3(-1.82093e+02, 7.24771e+00, -5.10685e+02), forces1[612], tol); -ASSERT_EQUAL_VEC(Vec3( 3.54488e+02, -8.64195e+01, -4.10175e+02), forces1[613], tol); -ASSERT_EQUAL_VEC(Vec3(-6.67624e+01, -7.57961e+01, 7.77301e+01), forces1[614], tol); -ASSERT_EQUAL_VEC(Vec3( 5.34204e+01, -3.49058e+02, -4.41041e+02), forces1[615], tol); -ASSERT_EQUAL_VEC(Vec3(-2.55977e+02, -1.85092e+02, -1.67787e+01), forces1[616], tol); -ASSERT_EQUAL_VEC(Vec3(-2.60220e+02, 4.50663e+02, 6.87571e+02), forces1[617], tol); -ASSERT_EQUAL_VEC(Vec3(-4.84849e+01, -1.47661e+02, 1.30457e+02), forces1[618], tol); -ASSERT_EQUAL_VEC(Vec3(-5.03870e+02, 3.00380e+02, 2.91153e+01), forces1[619], tol); -ASSERT_EQUAL_VEC(Vec3(-3.26882e+02, -2.54121e+02, -1.97289e+02), forces1[620], tol); -ASSERT_EQUAL_VEC(Vec3( 2.23127e+02, 4.31849e+02, -3.45782e+02), forces1[621], tol); -ASSERT_EQUAL_VEC(Vec3(-2.69077e+00, -7.70485e+01, -4.23857e-01), forces1[622], tol); -ASSERT_EQUAL_VEC(Vec3( 8.20397e+02, 7.99593e+02, 4.14368e+02), forces1[623], tol); -ASSERT_EQUAL_VEC(Vec3(-6.20274e+01, -4.27151e+02, -3.70575e+02), forces1[624], tol); -ASSERT_EQUAL_VEC(Vec3(-2.49506e+01, -1.44622e+02, 7.41551e+02), forces1[625], tol); -ASSERT_EQUAL_VEC(Vec3(-6.41672e+02, 6.29867e+01, 1.58002e+02), forces1[626], tol); -ASSERT_EQUAL_VEC(Vec3(-5.89354e+02, -2.66715e+02, 7.40461e+01), forces1[627], tol); -ASSERT_EQUAL_VEC(Vec3( 5.26897e+02, -4.19406e+02, -2.37126e+02), forces1[628], tol); -ASSERT_EQUAL_VEC(Vec3( 4.42823e+02, -3.89602e+00, 5.35394e+02), forces1[629], tol); -ASSERT_EQUAL_VEC(Vec3( 2.38351e+02, -5.34626e+02, 2.63027e+02), forces1[630], tol); -ASSERT_EQUAL_VEC(Vec3(-2.48039e+02, -1.44724e+01, 7.55533e+02), forces1[631], tol); -ASSERT_EQUAL_VEC(Vec3(-8.06993e+01, -4.42707e+02, -4.11282e+02), forces1[632], tol); -ASSERT_EQUAL_VEC(Vec3( 4.64135e+02, -7.82572e+02, 7.48550e+02), forces1[633], tol); -ASSERT_EQUAL_VEC(Vec3( 3.75024e+02, 3.06926e+02, 2.76975e+02), forces1[634], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43670e+02, -1.70164e+02, -2.61356e+02), forces1[635], tol); -ASSERT_EQUAL_VEC(Vec3( 5.20769e+02, -7.66032e+00, -2.76126e+02), forces1[636], tol); -ASSERT_EQUAL_VEC(Vec3(-2.28461e+02, 5.33833e+02, -3.58038e+01), forces1[637], tol); -ASSERT_EQUAL_VEC(Vec3(-1.70108e+02, -7.30449e+01, -3.73102e+02), forces1[638], tol); -ASSERT_EQUAL_VEC(Vec3( 1.90864e+02, 1.53717e+02, -9.75681e+00), forces1[639], tol); -ASSERT_EQUAL_VEC(Vec3( 2.59596e+02, 2.75192e+01, -2.02348e+02), forces1[640], tol); -ASSERT_EQUAL_VEC(Vec3( 3.25228e+02, 2.78224e+01, 5.21697e+02), forces1[641], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12825e+02, -6.70108e+02, -7.86084e+01), forces1[642], tol); -ASSERT_EQUAL_VEC(Vec3(-1.10050e+01, -4.90683e+01, -2.91299e+02), forces1[643], tol); -ASSERT_EQUAL_VEC(Vec3( 2.77327e+02, 2.29323e+02, 5.59760e+02), forces1[644], tol); -ASSERT_EQUAL_VEC(Vec3( 4.59573e+02, 1.21299e+02, -4.79315e+02), forces1[645], tol); -ASSERT_EQUAL_VEC(Vec3(-5.30622e+02, -3.96117e+02, -4.37730e+01), forces1[646], tol); -ASSERT_EQUAL_VEC(Vec3( 5.87415e+01, 3.74983e+02, -4.59323e+00), forces1[647], tol); -ASSERT_EQUAL_VEC(Vec3(-5.72048e+02, -3.24796e+02, -5.11139e+01), forces1[648], tol); -ASSERT_EQUAL_VEC(Vec3(-1.51870e+03, 1.63888e+02, -7.67908e+01), forces1[649], tol); -ASSERT_EQUAL_VEC(Vec3( 4.86979e+02, 5.16872e+02, -7.62781e+01), forces1[650], tol); -ASSERT_EQUAL_VEC(Vec3( 2.48285e+02, -8.90776e+02, 6.71667e+01), forces1[651], tol); -ASSERT_EQUAL_VEC(Vec3(-1.54175e+00, 1.36939e+02, -1.04189e+02), forces1[652], tol); -ASSERT_EQUAL_VEC(Vec3(-1.20205e+02, 2.89638e+02, -6.63136e+02), forces1[653], tol); -ASSERT_EQUAL_VEC(Vec3(-1.59426e+02, -4.16181e+02, 2.79418e+02), forces1[654], tol); -ASSERT_EQUAL_VEC(Vec3(-2.98735e+02, -2.96276e+02, 3.36143e+02), forces1[655], tol); -ASSERT_EQUAL_VEC(Vec3(-4.91907e+02, -4.26747e+01, 1.25389e+01), forces1[656], tol); -ASSERT_EQUAL_VEC(Vec3(-2.47943e+02, -2.67473e+02, 2.21842e+02), forces1[657], tol); -ASSERT_EQUAL_VEC(Vec3(-2.42851e+01, 2.61470e+01, -6.65055e+01), forces1[658], tol); -ASSERT_EQUAL_VEC(Vec3( 3.64175e+02, 4.13063e+02, -5.51340e+02), forces1[659], tol); -ASSERT_EQUAL_VEC(Vec3( 3.74845e+02, -6.33619e+02, 5.37646e+00), forces1[660], tol); -ASSERT_EQUAL_VEC(Vec3( 6.51845e+01, 5.97073e+02, 2.54487e+01), forces1[661], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53437e+02, -7.70454e-02, -3.64178e+02), forces1[662], tol); -ASSERT_EQUAL_VEC(Vec3(-4.19786e+01, 5.32473e+02, 5.67523e+02), forces1[663], tol); -ASSERT_EQUAL_VEC(Vec3( 2.18380e+01, -2.88670e+02, 2.73917e+02), forces1[664], tol); -ASSERT_EQUAL_VEC(Vec3( 2.56668e+02, 1.75282e+02, 2.67811e+02), forces1[665], tol); -ASSERT_EQUAL_VEC(Vec3(-1.42006e+02, -1.93562e+02, -4.45933e+02), forces1[666], tol); -ASSERT_EQUAL_VEC(Vec3(-5.74483e+01, -4.30855e+02, -7.59684e+02), forces1[667], tol); -ASSERT_EQUAL_VEC(Vec3(-4.90370e+02, 2.12536e+02, 1.21399e+02), forces1[668], tol); -ASSERT_EQUAL_VEC(Vec3( 1.94634e+02, 1.32086e+02, 1.71425e+02), forces1[669], tol); -ASSERT_EQUAL_VEC(Vec3(-2.73623e+02, 7.78030e+02, 2.78021e+02), forces1[670], tol); -ASSERT_EQUAL_VEC(Vec3(-2.62074e+02, 3.53998e+02, 1.59712e+02), forces1[671], tol); -ASSERT_EQUAL_VEC(Vec3( 3.74175e+01, -6.21070e+02, -1.89712e+02), forces1[672], tol); -ASSERT_EQUAL_VEC(Vec3( 2.70256e+02, -1.98712e+02, -1.68453e+02), forces1[673], tol); -ASSERT_EQUAL_VEC(Vec3(-3.72180e+02, 2.16555e+02, -7.51654e+01), forces1[674], tol); -ASSERT_EQUAL_VEC(Vec3( 4.60646e+02, -2.41020e+02, 1.87544e+02), forces1[675], tol); -ASSERT_EQUAL_VEC(Vec3(-8.64562e+00, -4.96607e+01, 4.14111e+02), forces1[676], tol); -ASSERT_EQUAL_VEC(Vec3(-5.53550e+02, 2.02023e+02, 2.48778e+02), forces1[677], tol); -ASSERT_EQUAL_VEC(Vec3( 4.12902e+02, 3.97615e+02, -7.77105e+02), forces1[678], tol); -ASSERT_EQUAL_VEC(Vec3( 4.37864e+02, 3.87796e+02, -2.57117e+02), forces1[679], tol); -ASSERT_EQUAL_VEC(Vec3(-1.99545e+02, -5.31838e+02, -7.08357e+02), forces1[680], tol); -ASSERT_EQUAL_VEC(Vec3( 7.16820e+01, 2.15323e+02, -2.17986e+02), forces1[681], tol); -ASSERT_EQUAL_VEC(Vec3(-2.27238e+02, -3.33101e+02, -8.95801e+01), forces1[682], tol); -ASSERT_EQUAL_VEC(Vec3( 1.12342e+02, -2.81421e+02, 1.84405e+02), forces1[683], tol); -ASSERT_EQUAL_VEC(Vec3( 5.30416e+01, -1.73619e+02, 3.80448e+02), forces1[684], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53132e+02, -4.19546e+02, 3.62048e+02), forces1[685], tol); -ASSERT_EQUAL_VEC(Vec3(-8.26083e+01, 1.22020e+02, -2.05481e+01), forces1[686], tol); -ASSERT_EQUAL_VEC(Vec3(-4.09521e+02, 3.88078e+01, 7.34580e+02), forces1[687], tol); -ASSERT_EQUAL_VEC(Vec3( 2.30481e+02, 4.59140e+01, -3.44443e+02), forces1[688], tol); -ASSERT_EQUAL_VEC(Vec3(-2.99023e+02, 6.71185e+02, -1.01234e+03), forces1[689], tol); -ASSERT_EQUAL_VEC(Vec3( 2.93615e+02, -1.62637e+01, -5.52882e+02), forces1[690], tol); -ASSERT_EQUAL_VEC(Vec3(-1.41601e+02, -4.87777e+02, 2.73045e+02), forces1[691], tol); -ASSERT_EQUAL_VEC(Vec3(-1.26640e+02, -4.36399e+02, 7.19796e+01), forces1[692], tol); -ASSERT_EQUAL_VEC(Vec3( 1.33472e+02, 2.25647e+02, 5.65785e+02), forces1[693], tol); -ASSERT_EQUAL_VEC(Vec3( 7.34336e+02, 4.69224e+02, -5.53023e+02), forces1[694], tol); -ASSERT_EQUAL_VEC(Vec3(-6.36602e+01, -2.05110e+02, -4.73058e+02), forces1[695], tol); -ASSERT_EQUAL_VEC(Vec3(-3.35930e+02, -2.75966e+02, 4.10409e+02), forces1[696], tol); -ASSERT_EQUAL_VEC(Vec3(-1.98434e+02, -2.81395e+02, -1.48447e+02), forces1[697], tol); -ASSERT_EQUAL_VEC(Vec3( 6.97000e+02, -2.08385e+02, -1.22103e+02), forces1[698], tol); -ASSERT_EQUAL_VEC(Vec3( 6.16657e+02, -2.04959e+02, -2.28466e+02), forces1[699], tol); -ASSERT_EQUAL_VEC(Vec3( 1.59028e+02, 2.68339e+02, -1.13410e+02), forces1[700], tol); -ASSERT_EQUAL_VEC(Vec3( 2.52343e+02, 3.78670e+02, -1.30509e+03), forces1[701], tol); -ASSERT_EQUAL_VEC(Vec3( 7.30827e+02, -3.70990e+02, -6.60678e+02), forces1[702], tol); -ASSERT_EQUAL_VEC(Vec3(-4.64409e+01, 1.28066e+02, 8.75692e+01), forces1[703], tol); -ASSERT_EQUAL_VEC(Vec3( 3.26215e+02, -1.75860e+02, 7.03132e+01), forces1[704], tol); -ASSERT_EQUAL_VEC(Vec3( 9.80781e+01, -2.26689e+02, -2.00001e+02), forces1[705], tol); -ASSERT_EQUAL_VEC(Vec3( 5.01952e+01, 2.67236e+02, 5.24662e+02), forces1[706], tol); -ASSERT_EQUAL_VEC(Vec3(-2.52900e+02, -8.04961e+02, 4.03069e+02), forces1[707], tol); -ASSERT_EQUAL_VEC(Vec3(-2.40213e+02, -2.54318e+02, 5.06462e+02), forces1[708], tol); -ASSERT_EQUAL_VEC(Vec3( 4.48948e+02, 3.49506e+02, 2.88403e+02), forces1[709], tol); -ASSERT_EQUAL_VEC(Vec3( 3.10145e+02, 3.91032e+02, -9.77450e+02), forces1[710], tol); -ASSERT_EQUAL_VEC(Vec3( 7.63176e+02, 2.06934e+02, 1.03498e+02), forces1[711], tol); -ASSERT_EQUAL_VEC(Vec3( 4.64450e+02, 2.52676e+02, 7.37725e+01), forces1[712], tol); -ASSERT_EQUAL_VEC(Vec3( 9.14947e+02, 3.40040e+02, -2.99021e+02), forces1[713], tol); -ASSERT_EQUAL_VEC(Vec3( 5.05311e+02, 1.59558e+02, -9.12417e+00), forces1[714], tol); -ASSERT_EQUAL_VEC(Vec3(-3.46704e+02, 1.40018e+02, 1.54716e+02), forces1[715], tol); -ASSERT_EQUAL_VEC(Vec3(-1.66193e+01, -4.02081e+01, -1.23816e+02), forces1[716], tol); -ASSERT_EQUAL_VEC(Vec3(-7.57179e+01, -4.48049e+02, -4.21095e+02), forces1[717], tol); -ASSERT_EQUAL_VEC(Vec3( 1.04055e+03, -2.36062e+02, 1.43125e+01), forces1[718], tol); -ASSERT_EQUAL_VEC(Vec3(-2.65437e+01, 6.06573e+02, 4.91404e+01), forces1[719], tol); -ASSERT_EQUAL_VEC(Vec3(-1.33799e+02, -3.09741e+02, 2.79872e+01), forces1[720], tol); -ASSERT_EQUAL_VEC(Vec3(-9.76583e+01, -1.13792e+03, 4.60486e+02), forces1[721], tol); -ASSERT_EQUAL_VEC(Vec3(-2.56797e+02, 9.31614e+01, 3.24973e+02), forces1[722], tol); -ASSERT_EQUAL_VEC(Vec3(-8.66116e+01, 5.60535e+02, 2.96444e+02), forces1[723], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26228e+02, 1.40946e+02, 3.97444e+02), forces1[724], tol); -ASSERT_EQUAL_VEC(Vec3( 1.03121e+02, -1.43347e+02, 1.91577e+02), forces1[725], tol); -ASSERT_EQUAL_VEC(Vec3(-9.29460e+01, 4.44591e+01, -9.69787e+01), forces1[726], tol); -ASSERT_EQUAL_VEC(Vec3(-1.07841e+02, 4.40146e+01, 2.20888e+02), forces1[727], tol); -ASSERT_EQUAL_VEC(Vec3( 2.92927e+02, 5.54167e+02, 3.56991e+02), forces1[728], tol); -ASSERT_EQUAL_VEC(Vec3(-6.11691e+02, 1.34361e+02, 4.75043e+01), forces1[729], tol); -ASSERT_EQUAL_VEC(Vec3(-8.07637e+02, 1.63874e+01, -2.56526e+02), forces1[730], tol); -ASSERT_EQUAL_VEC(Vec3( 5.08711e+01, 1.35146e+01, 4.82187e+02), forces1[731], tol); -ASSERT_EQUAL_VEC(Vec3(-5.01040e+02, -7.35292e+02, 6.67901e+02), forces1[732], tol); -ASSERT_EQUAL_VEC(Vec3(-1.74444e+00, 6.70711e+02, -1.03875e+03), forces1[733], tol); -ASSERT_EQUAL_VEC(Vec3(-1.95458e+02, 4.63751e+02, 7.41370e+01), forces1[734], tol); -ASSERT_EQUAL_VEC(Vec3(-2.73273e+02, -4.33968e+02, -5.86860e+02), forces1[735], tol); -ASSERT_EQUAL_VEC(Vec3( 3.87495e+02, -3.57412e+02, -1.22672e+02), forces1[736], tol); -ASSERT_EQUAL_VEC(Vec3( 2.10269e+02, -8.24362e+01, -3.92484e+02), forces1[737], tol); -ASSERT_EQUAL_VEC(Vec3( 8.30177e+02, -6.58237e+02, -4.70878e+02), forces1[738], tol); -ASSERT_EQUAL_VEC(Vec3( 1.32212e+02, 1.07237e+02, -2.42604e+02), forces1[739], tol); -ASSERT_EQUAL_VEC(Vec3(-4.36754e+02, 2.00495e+01, -3.45995e+02), forces1[740], tol); -ASSERT_EQUAL_VEC(Vec3(-5.77243e+02, 1.27456e+02, -4.58812e+02), forces1[741], tol); -ASSERT_EQUAL_VEC(Vec3( 1.97467e+02, -2.58380e+02, 1.34659e+02), forces1[742], tol); -ASSERT_EQUAL_VEC(Vec3( 3.87615e+01, -8.11440e+02, -2.37606e+02), forces1[743], tol); -ASSERT_EQUAL_VEC(Vec3(-5.43753e+02, 7.08855e+01, -1.18515e+02), forces1[744], tol); -ASSERT_EQUAL_VEC(Vec3(-4.18102e+02, 9.12534e+01, -3.26390e+02), forces1[745], tol); -ASSERT_EQUAL_VEC(Vec3(-1.04709e+02, 4.73095e+02, -5.52378e+02), forces1[746], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50360e+02, 6.74565e+02, -8.65160e+01), forces1[747], tol); -ASSERT_EQUAL_VEC(Vec3(-4.91737e+01, 9.70173e+01, 4.14679e+01), forces1[748], tol); -ASSERT_EQUAL_VEC(Vec3(-1.53125e+02, -3.14702e+02, 1.64510e+02), forces1[749], tol); -ASSERT_EQUAL_VEC(Vec3( 5.30495e-01, -2.20851e+02, 2.62854e+02), forces1[750], tol); -ASSERT_EQUAL_VEC(Vec3(-6.92133e+02, 2.00411e+02, -2.65836e+02), forces1[751], tol); -ASSERT_EQUAL_VEC(Vec3( 3.79173e+01, -1.05185e+02, -3.82562e+01), forces1[752], tol); -ASSERT_EQUAL_VEC(Vec3(-2.53019e+02, 2.11965e+02, -3.81685e+02), forces1[753], tol); -ASSERT_EQUAL_VEC(Vec3(-2.51275e+02, -3.93318e+02, -1.33319e+01), forces1[754], tol); -ASSERT_EQUAL_VEC(Vec3(-3.01504e+01, 1.45593e+02, -6.30497e+01), forces1[755], tol); -ASSERT_EQUAL_VEC(Vec3(-2.76292e+02, -4.61698e+02, -2.69332e+02), forces1[756], tol); -ASSERT_EQUAL_VEC(Vec3( 6.48621e+01, 3.68736e+02, 2.32248e+02), forces1[757], tol); -ASSERT_EQUAL_VEC(Vec3(-4.48067e+02, 4.24009e+02, 2.00610e+02), forces1[758], tol); -ASSERT_EQUAL_VEC(Vec3( 1.50429e+01, -7.33695e+01, 4.00840e+02), forces1[759], tol); -ASSERT_EQUAL_VEC(Vec3( 4.06786e+02, 1.22307e+02, -3.26363e+02), forces1[760], tol); -ASSERT_EQUAL_VEC(Vec3(-3.55719e+02, -4.23669e+02, 1.92960e+02), forces1[761], tol); -ASSERT_EQUAL_VEC(Vec3(-4.78729e+01, 1.13402e+02, -4.55740e+02), forces1[762], tol); -ASSERT_EQUAL_VEC(Vec3( 5.50243e+02, 3.20969e+02, -2.04136e+02), forces1[763], tol); -ASSERT_EQUAL_VEC(Vec3(-3.98710e+01, 6.43079e+01, 2.62905e+02), forces1[764], tol); -ASSERT_EQUAL_VEC(Vec3(-7.85308e+01, -7.50634e+01, -7.62985e+02), forces1[765], tol); -ASSERT_EQUAL_VEC(Vec3( 9.57106e+00, -3.95503e+02, -8.95762e+01), forces1[766], tol); -ASSERT_EQUAL_VEC(Vec3( 4.83241e+02, -7.40429e+02, -5.32394e+02), forces1[767], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61812e+02, 8.15330e+01, 4.71839e+02), forces1[768], tol); -ASSERT_EQUAL_VEC(Vec3(-3.30804e+02, -4.22034e+01, -1.05047e+03), forces1[769], tol); -ASSERT_EQUAL_VEC(Vec3( 3.34235e+02, -1.34572e+02, 3.33949e+02), forces1[770], tol); -ASSERT_EQUAL_VEC(Vec3( 2.25419e+01, 6.94642e+02, 3.48219e+01), forces1[771], tol); -ASSERT_EQUAL_VEC(Vec3( 4.92303e+02, -3.56656e+02, 7.11609e+01), forces1[772], tol); -ASSERT_EQUAL_VEC(Vec3( 2.17147e+02, 4.05015e+01, 3.47170e+02), forces1[773], tol); -ASSERT_EQUAL_VEC(Vec3(-1.61124e+01, 1.47264e+03, 5.49828e+02), forces1[774], tol); -ASSERT_EQUAL_VEC(Vec3( 8.39474e+01, -4.18457e+02, 2.34855e+02), forces1[775], tol); -ASSERT_EQUAL_VEC(Vec3(-2.31366e+02, 2.37297e+02, 6.61710e+01), forces1[776], tol); -ASSERT_EQUAL_VEC(Vec3(-6.23896e+01, -7.00160e+02, 4.91298e+02), forces1[777], tol); -ASSERT_EQUAL_VEC(Vec3( 2.68205e+01, 2.46992e+02, 6.51925e-01), forces1[778], tol); -ASSERT_EQUAL_VEC(Vec3( 5.26229e+02, 1.10211e+02, 3.46425e+02), forces1[779], tol); -ASSERT_EQUAL_VEC(Vec3(-3.29259e+02, -3.87187e+02, 8.51738e+01), forces1[780], tol); -ASSERT_EQUAL_VEC(Vec3( 6.42840e+02, 2.34874e+02, 3.71367e+02), forces1[781], tol); -ASSERT_EQUAL_VEC(Vec3(-3.24670e+02, 5.64060e+02, -4.45941e+01), forces1[782], tol); -ASSERT_EQUAL_VEC(Vec3( 5.74639e+01, 1.20255e+02, -5.84555e+01), forces1[783], tol); -ASSERT_EQUAL_VEC(Vec3(-2.83818e+02, -2.10789e+02, 1.66016e+02), forces1[784], tol); -ASSERT_EQUAL_VEC(Vec3( 4.01586e+02, -2.85114e+02, 2.49462e+02), forces1[785], tol); -ASSERT_EQUAL_VEC(Vec3( 3.05493e+02, 7.04816e+02, -5.94585e+01), forces1[786], tol); -ASSERT_EQUAL_VEC(Vec3(-5.06832e+02, 3.13613e+02, -7.30025e+02), forces1[787], tol); -ASSERT_EQUAL_VEC(Vec3(-1.65633e+02, -1.02565e+02, -4.10514e+02), forces1[788], tol); -ASSERT_EQUAL_VEC(Vec3( 2.50011e+02, 9.82368e+02, 3.08282e+02), forces1[789], tol); -ASSERT_EQUAL_VEC(Vec3( 3.60209e+02, 3.06214e+02, 4.01448e+02), forces1[790], tol); -ASSERT_EQUAL_VEC(Vec3(-5.15566e+02, -3.80892e+02, -2.65987e+02), forces1[791], tol); -ASSERT_EQUAL_VEC(Vec3( 9.16906e+02, -2.70982e+02, 2.88897e+02), forces1[792], tol); -ASSERT_EQUAL_VEC(Vec3( 5.57959e+01, 1.28554e+02, 4.36834e+02), forces1[793], tol); -ASSERT_EQUAL_VEC(Vec3( 3.48851e+02, 3.63953e+02, 3.78555e+02), forces1[794], tol); -ASSERT_EQUAL_VEC(Vec3( 6.36621e+02, -1.91572e+02, 4.14270e+02), forces1[795], tol); -ASSERT_EQUAL_VEC(Vec3(-3.31253e+01, -1.47718e+02, 3.03786e+02), forces1[796], tol); -ASSERT_EQUAL_VEC(Vec3(-8.19713e+01, -5.66604e+02, -7.77410e+01), forces1[797], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20358e+02, 3.66650e+02, -2.38055e+02), forces1[798], tol); -ASSERT_EQUAL_VEC(Vec3( 3.60706e+02, 4.45401e+02, -6.03554e+02), forces1[799], tol); -ASSERT_EQUAL_VEC(Vec3(-8.71329e+01, 1.63947e+02, -1.43935e+02), forces1[800], tol); -ASSERT_EQUAL_VEC(Vec3(-9.99017e+01, 1.95915e+01, -5.85374e+01), forces1[801], tol); -ASSERT_EQUAL_VEC(Vec3( 4.81470e+02, -7.03993e+01, -2.08008e+02), forces1[802], tol); -ASSERT_EQUAL_VEC(Vec3(-7.69394e+02, 5.40411e+01, 5.38431e+02), forces1[803], tol); -ASSERT_EQUAL_VEC(Vec3(-6.60820e+02, -1.87929e+02, 4.11990e+02), forces1[804], tol); -ASSERT_EQUAL_VEC(Vec3( 1.06278e+02, 3.55326e+02, -2.27795e+02), forces1[805], tol); -ASSERT_EQUAL_VEC(Vec3(-2.66101e+02, 2.41367e+02, -4.99250e+02), forces1[806], tol); -ASSERT_EQUAL_VEC(Vec3(-5.22955e+01, 9.33616e+01, 7.23845e+02), forces1[807], tol); -ASSERT_EQUAL_VEC(Vec3( 2.82637e+00, 6.04183e+01, 1.65509e+02), forces1[808], tol); -ASSERT_EQUAL_VEC(Vec3(-2.97247e+02, -5.53685e+01, 3.87138e+02), forces1[809], tol); -ASSERT_EQUAL_VEC(Vec3(-8.18648e+02, -2.66083e+02, 1.07281e+03), forces1[810], tol); -ASSERT_EQUAL_VEC(Vec3(-2.43734e+02, -2.51644e+02, 3.46336e+02), forces1[811], tol); -ASSERT_EQUAL_VEC(Vec3( 4.04771e+02, 1.12611e+02, -6.66755e+02), forces1[812], tol); -ASSERT_EQUAL_VEC(Vec3(-8.30809e+01, -9.75613e+01, -5.15283e+02), forces1[813], tol); -ASSERT_EQUAL_VEC(Vec3(-8.88969e+01, -2.43585e+02, -4.28237e+02), forces1[814], tol); -ASSERT_EQUAL_VEC(Vec3(-9.15331e+01, 4.50369e+02, -2.64187e+02), forces1[815], tol); -ASSERT_EQUAL_VEC(Vec3(-9.11685e+01, 4.24897e+02, -1.85102e+02), forces1[816], tol); -ASSERT_EQUAL_VEC(Vec3(-3.91181e+02, -6.86407e+02, 1.52727e+02), forces1[817], tol); -ASSERT_EQUAL_VEC(Vec3(-8.21105e+01, -2.49526e+02, 5.27526e+02), forces1[818], tol); -ASSERT_EQUAL_VEC(Vec3(-1.09397e+02, -6.29100e+02, 3.34949e+02), forces1[819], tol); -ASSERT_EQUAL_VEC(Vec3(-4.17364e+02, -9.10769e+01, -3.54884e+01), forces1[820], tol); -ASSERT_EQUAL_VEC(Vec3( 2.79520e+02, -5.39057e+02, 5.07383e+02), forces1[821], tol); -ASSERT_EQUAL_VEC(Vec3( 2.14808e+02, 1.92238e+01, -3.14844e+02), forces1[822], tol); -ASSERT_EQUAL_VEC(Vec3(-1.92606e+02, -4.26137e+02, -6.21690e+00), forces1[823], tol); -ASSERT_EQUAL_VEC(Vec3(-6.55144e+02, -4.86084e+02, -3.89405e+02), forces1[824], tol); -ASSERT_EQUAL_VEC(Vec3(-1.89858e+02, -3.77314e+02, -1.36225e+02), forces1[825], tol); -ASSERT_EQUAL_VEC(Vec3( 4.60006e+02, 1.99089e+02, 2.82592e+02), forces1[826], tol); -ASSERT_EQUAL_VEC(Vec3( 1.21553e+02, -1.21221e+02, 7.24045e+02), forces1[827], tol); -ASSERT_EQUAL_VEC(Vec3(-9.16961e+01, 7.09417e+01, 7.89088e+01), forces1[828], tol); -ASSERT_EQUAL_VEC(Vec3(-3.83816e+02, 8.44889e+01, 1.09603e+03), forces1[829], tol); -ASSERT_EQUAL_VEC(Vec3(-3.65376e+02, -1.88809e+02, 4.62338e+02), forces1[830], tol); -ASSERT_EQUAL_VEC(Vec3( 5.76327e+02, -9.42016e+01, -1.98144e+02), forces1[831], tol); -ASSERT_EQUAL_VEC(Vec3(-4.21543e+02, -5.96901e+01, -8.33520e+02), forces1[832], tol); -ASSERT_EQUAL_VEC(Vec3( 1.20308e+03, 4.53517e+02, 2.29384e+02), forces1[833], tol); -ASSERT_EQUAL_VEC(Vec3( 2.92105e+02, 4.13134e+01, -3.61124e+02), forces1[834], tol); -ASSERT_EQUAL_VEC(Vec3( 2.49880e+02, -1.26751e+02, 2.01746e+02), forces1[835], tol); -ASSERT_EQUAL_VEC(Vec3( 4.82079e+02, -4.36678e+02, 2.10916e+02), forces1[836], tol); -ASSERT_EQUAL_VEC(Vec3( 7.40340e+00, -3.07867e+02, -2.19268e+02), forces1[837], tol); -ASSERT_EQUAL_VEC(Vec3(-1.77931e+02, -1.78462e+02, 3.27369e+02), forces1[838], tol); -ASSERT_EQUAL_VEC(Vec3(-1.43493e+02, 2.36669e+02, 1.76242e+02), forces1[839], tol); -ASSERT_EQUAL_VEC(Vec3(-3.11001e+02, 3.30086e+01, 2.29454e+02), forces1[840], tol); -ASSERT_EQUAL_VEC(Vec3( 7.16440e+01, -1.42656e+00, -8.22932e+02), forces1[841], tol); -ASSERT_EQUAL_VEC(Vec3(-2.21653e+02, -4.50533e+01, -4.49967e+02), forces1[842], tol); -ASSERT_EQUAL_VEC(Vec3(-4.26325e+02, -2.93355e+02, 2.05051e+02), forces1[843], tol); -ASSERT_EQUAL_VEC(Vec3( 8.06715e+01, 3.83773e+02, 4.54367e+02), forces1[844], tol); -ASSERT_EQUAL_VEC(Vec3( 1.36370e+01, -1.12119e+02, -2.08559e+02), forces1[845], tol); -ASSERT_EQUAL_VEC(Vec3(-4.31375e+01, 1.28705e+02, 2.40993e+02), forces1[846], tol); -ASSERT_EQUAL_VEC(Vec3( 3.71930e+02, 3.66483e+02, -1.02572e+02), forces1[847], tol); -ASSERT_EQUAL_VEC(Vec3(-2.30298e+02, 7.54918e+02, 1.07591e+02), forces1[848], tol); -ASSERT_EQUAL_VEC(Vec3( 2.67868e+02, -1.52050e+01, -1.70085e+02), forces1[849], tol); -ASSERT_EQUAL_VEC(Vec3(-9.39293e+02, 5.64192e+01, -2.22390e+02), forces1[850], tol); -ASSERT_EQUAL_VEC(Vec3(-1.01320e+02, 3.31059e+02, 7.07374e+02), forces1[851], tol); -ASSERT_EQUAL_VEC(Vec3( 1.78173e+02, 8.50286e+01, -6.39943e+02), forces1[852], tol); -ASSERT_EQUAL_VEC(Vec3( 3.33072e+02, 9.10202e+01, 1.20449e+02), forces1[853], tol); -ASSERT_EQUAL_VEC(Vec3( 4.22307e+01, -7.37185e+02, 6.08442e+02), forces1[854], tol); -ASSERT_EQUAL_VEC(Vec3(-4.16912e+02, -4.82533e+02, 3.91904e+01), forces1[855], tol); -ASSERT_EQUAL_VEC(Vec3(-4.09092e+02, -1.95397e+02, -1.49049e+02), forces1[856], tol); -ASSERT_EQUAL_VEC(Vec3(-2.89402e+01, 3.78193e+02, 2.19684e+02), forces1[857], tol); -ASSERT_EQUAL_VEC(Vec3(-2.77581e+02, 7.90343e+01, 3.49462e+02), forces1[858], tol); -ASSERT_EQUAL_VEC(Vec3( 4.71062e+02, -1.88929e+02, -2.48123e+02), forces1[859], tol); -ASSERT_EQUAL_VEC(Vec3(-1.51510e+02, 4.96268e+01, -2.65476e+02), forces1[860], tol); -ASSERT_EQUAL_VEC(Vec3(-7.66386e+02, 8.46641e+01, -3.64816e+02), forces1[861], tol); -ASSERT_EQUAL_VEC(Vec3(-5.09778e+02, 2.10810e+01, 3.01816e+02), forces1[862], tol); -ASSERT_EQUAL_VEC(Vec3(-9.74895e+00, 7.12371e+01, 9.37892e+01), forces1[863], tol); -ASSERT_EQUAL_VEC(Vec3( 9.17307e+01, -4.41188e+02, -1.00390e+02), forces1[864], tol); -ASSERT_EQUAL_VEC(Vec3(-2.52934e+01, -1.90242e+02, 4.81585e+01), forces1[865], tol); -ASSERT_EQUAL_VEC(Vec3(-5.44265e+02, 2.54798e+02, -1.75185e+02), forces1[866], tol); -ASSERT_EQUAL_VEC(Vec3( 4.08129e+02, -1.23564e+02, -2.06955e+02), forces1[867], tol); -ASSERT_EQUAL_VEC(Vec3( 4.38403e+02, -1.73663e+02, 4.68123e+02), forces1[868], tol); -ASSERT_EQUAL_VEC(Vec3(-3.66073e+02, 3.32526e+02, 2.43522e+02), forces1[869], tol); -ASSERT_EQUAL_VEC(Vec3( 2.09695e+02, 2.98063e+02, -4.55262e+02), forces1[870], tol); -ASSERT_EQUAL_VEC(Vec3( 4.70466e+01, -8.03891e+01, 1.44535e+02), forces1[871], tol); -ASSERT_EQUAL_VEC(Vec3( 4.51402e+01, -3.68229e+02, 2.65397e+02), forces1[872], tol); -ASSERT_EQUAL_VEC(Vec3(-2.22430e+02, 4.99723e+02, 1.50953e+02), forces1[873], tol); -ASSERT_EQUAL_VEC(Vec3(-3.32916e+02, 7.08253e+02, -2.53294e+02), forces1[874], tol); -ASSERT_EQUAL_VEC(Vec3(-2.24293e+02, 3.61211e+02, 3.14058e+02), forces1[875], tol); -ASSERT_EQUAL_VEC(Vec3( 2.86069e+01, 3.62417e+02, -2.25939e+01), forces1[876], tol); -ASSERT_EQUAL_VEC(Vec3( 3.25305e+02, -8.59847e+01, 6.05371e+02), forces1[877], tol); -ASSERT_EQUAL_VEC(Vec3( 3.08168e+02, 2.08408e+02, -3.04918e+02), forces1[878], tol); -ASSERT_EQUAL_VEC(Vec3( 3.65569e+02, 1.38315e+02, 2.10354e+02), forces1[879], tol); -ASSERT_EQUAL_VEC(Vec3( 6.56765e+01, 4.57994e+02, -1.05220e+02), forces1[880], tol); -ASSERT_EQUAL_VEC(Vec3(-7.04583e+02, 1.95861e+02, 6.29259e+01), forces1[881], tol); -ASSERT_EQUAL_VEC(Vec3(-5.03165e+02, -4.91098e+02, 2.40840e+00), forces1[882], tol); -ASSERT_EQUAL_VEC(Vec3(-6.84653e+01, 8.09254e+01, 2.50208e+02), forces1[883], tol); -ASSERT_EQUAL_VEC(Vec3(-5.35069e+01, 1.91749e+02, -1.93660e+02), forces1[884], tol); -ASSERT_EQUAL_VEC(Vec3( 5.56345e+02, -6.69144e+02, -2.99821e+02), forces1[885], tol); -ASSERT_EQUAL_VEC(Vec3(-3.35809e+02, 5.18670e+01, -2.16408e+02), forces1[886], tol); -ASSERT_EQUAL_VEC(Vec3(-1.13154e+02, 6.23001e+02, -1.73934e+01), forces1[887], tol); -ASSERT_EQUAL_VEC(Vec3(-4.64234e+02, -2.03165e+02, 4.33719e+02), forces1[888], tol); -ASSERT_EQUAL_VEC(Vec3( 5.74659e+01, -4.61823e+02, -4.22519e+02), forces1[889], tol); -ASSERT_EQUAL_VEC(Vec3(-3.53687e+02, 1.03995e+02, 1.47418e+02), forces1[890], tol); -ASSERT_EQUAL_VEC(Vec3( 9.55591e+01, 4.15281e+02, 1.37721e+02), forces1[891], tol); -ASSERT_EQUAL_VEC(Vec3( 4.43132e+02, -3.70019e+01, -4.01946e+02), forces1[892], tol); -ASSERT_EQUAL_VEC(Vec3( 1.26695e+02, -2.55273e+02, 1.49235e+02), forces1[893], tol); diff --git a/platforms/reference/tests/nacl_crystal.forces_ewald b/platforms/reference/tests/nacl_crystal.forces_ewald deleted file mode 100644 index c7b2067a4fac06ffe97013f783504495e982fef6..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/nacl_crystal.forces_ewald +++ /dev/null @@ -1,1000 +0,0 @@ -ASSERT_EQUAL_VEC(Vec3(-1.34723e-12, 1.34140e-13, -9.52623e-14), forcesEwald1[0], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.04187e-12, 2.68479e-13, -3.12203e-13), forcesEwald1[1], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.19033e-12, -2.72974e-13, -1.17325e-12), forcesEwald1[2], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.55500e-13, 3.03792e-13, -1.42362e-12), forcesEwald1[3], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.72329e-12, -1.44361e-13, -3.57021e-12), forcesEwald1[4], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.45922e-13, 1.29291e-12, 6.17080e-13), forcesEwald1[5], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.64509e-13, 9.44906e-13, 8.39154e-13), forcesEwald1[6], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.65557e-12, 8.83968e-13, 1.09292e-13), forcesEwald1[7], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.17223e-12, 1.34649e-12, 4.25484e-12), forcesEwald1[8], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.38017e-12, 3.13160e-13, -5.54905e-14), forcesEwald1[9], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.65712e-12, 1.97636e-13, -2.07437e-13), forcesEwald1[10], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.72962e-13, -1.92259e-13, -3.38762e-13), forcesEwald1[11], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.25799e-13, -3.83844e-13, -1.04405e-12), forcesEwald1[12], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.68674e-13, 8.89530e-14, -1.49909e-12), forcesEwald1[13], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.97125e-12, 6.85783e-14, -3.88406e-12), forcesEwald1[14], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.75429e-13, 1.39711e-12, 2.26411e-13), forcesEwald1[15], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.28125e-13, 8.52022e-13, 6.65930e-13), forcesEwald1[16], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.99108e-13, 7.44097e-13, 3.92401e-13), forcesEwald1[17], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.02361e-12, 1.49451e-12, 4.74191e-12), forcesEwald1[18], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.12980e-12, 1.38282e-12, 4.01078e-14), forcesEwald1[19], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.32736e-12, -1.05469e-12, -4.14514e-13), forcesEwald1[20], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.13226e-12, -8.07267e-13, -6.08231e-13), forcesEwald1[21], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.22023e-13, -9.49997e-13, -1.00993e-12), forcesEwald1[22], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.99632e-13, -7.41480e-13, -1.21048e-12), forcesEwald1[23], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.79014e-12, -9.71045e-13, -3.69459e-12), forcesEwald1[24], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.08707e-13, -2.45529e-13, -3.08884e-14), forcesEwald1[25], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.59015e-13, 7.16559e-14, 6.62334e-13), forcesEwald1[26], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.18263e-12, 1.22468e-13, 4.20933e-13), forcesEwald1[27], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.11959e-12, 8.49551e-13, 4.39294e-12), forcesEwald1[28], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05160e-12, -2.96757e-14, 3.65713e-13), forcesEwald1[29], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.59724e-13, -1.60605e-12, -9.86531e-14), forcesEwald1[30], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.05984e-13, -1.11785e-12, -7.64274e-13), forcesEwald1[31], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.55805e-13, -1.50108e-12, -9.81712e-13), forcesEwald1[32], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.66341e-14, -1.00296e-12, -1.35849e-12), forcesEwald1[33], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.10287e-13, -1.24299e-12, -3.82802e-12), forcesEwald1[34], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.92278e-13, 4.41536e-12, 1.84342e-13), forcesEwald1[35], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.61828e-12, 4.78426e-12, 1.45710e-12), forcesEwald1[36], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.21839e-12, 4.47754e-12, 7.24406e-13), forcesEwald1[37], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.54978e-13, 4.95163e-12, 4.77626e-12), forcesEwald1[38], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.64235e-13, 4.54968e-12, 2.58644e-15), forcesEwald1[39], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.98308e-13, -3.99161e-12, -2.02835e-13), forcesEwald1[40], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.33096e-12, -3.97352e-12, -6.60652e-13), forcesEwald1[41], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.29278e-12, -3.39635e-12, -1.01322e-12), forcesEwald1[42], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.08283e-13, -3.82712e-12, -1.05139e-12), forcesEwald1[43], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.54470e-13, -3.96867e-12, -3.93860e-12), forcesEwald1[44], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.47320e-13, 2.47874e-13, 2.08057e-13), forcesEwald1[45], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.11910e-12, 6.46163e-13, 1.23157e-12), forcesEwald1[46], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.32007e-12, 4.61251e-13, 2.36073e-13), forcesEwald1[47], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06413e-12, 2.19251e-13, 4.56446e-12), forcesEwald1[48], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.46004e-13, 1.69783e-13, -6.22071e-14), forcesEwald1[49], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.67018e-13, -3.71314e-14, 8.55534e-13), forcesEwald1[50], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.29704e-13, 1.37293e-13, 1.14150e-12), forcesEwald1[51], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.08639e-13, -3.67141e-14, 2.47374e-13), forcesEwald1[52], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.86071e-13, -3.44749e-14, 4.50460e-12), forcesEwald1[53], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.00385e-13, -2.05734e-13, 9.41300e-14), forcesEwald1[54], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.48031e-13, 6.40296e-13, -1.40348e-13), forcesEwald1[55], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.42020e-12, 8.67132e-13, 8.97016e-14), forcesEwald1[56], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08867e-12, 8.46260e-13, -4.79358e-13), forcesEwald1[57], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.13990e-13, 6.94982e-13, -1.32009e-12), forcesEwald1[58], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.49356e-13, 1.00625e-12, -4.01459e-12), forcesEwald1[59], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.25064e-12, -8.36315e-13, 1.45543e-12), forcesEwald1[60], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.37190e-12, -8.54381e-13, 1.13288e-12), forcesEwald1[61], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.72423e-12, -8.64046e-13, 5.14782e-14), forcesEwald1[62], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.07622e-12, -3.00590e-13, 4.39532e-12), forcesEwald1[63], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.45700e-13, -3.34589e-13, -1.49226e-13), forcesEwald1[64], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.53461e-13, 1.52073e-12, -1.80047e-13), forcesEwald1[65], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.64532e-12, 2.46364e-13, -1.05348e-13), forcesEwald1[66], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.35154e-13, 2.98891e-13, -5.53406e-13), forcesEwald1[67], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.73793e-13, 1.26050e-12, -1.26111e-12), forcesEwald1[68], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.35320e-13, 1.44110e-12, -3.65450e-12), forcesEwald1[69], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.00840e-12, -1.03389e-12, 5.02917e-13), forcesEwald1[70], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.21551e-12, -1.13927e-12, 1.00202e-12), forcesEwald1[71], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.12268e-13, -9.65425e-13, 6.47425e-13), forcesEwald1[72], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.74999e-13, -8.24343e-13, 4.64881e-12), forcesEwald1[73], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.98446e-13, -5.67281e-13, 2.59942e-13), forcesEwald1[74], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.71788e-13, 2.59543e-13, -2.69816e-13), forcesEwald1[75], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.23881e-12, -3.48780e-13, -7.69104e-13), forcesEwald1[76], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.81792e-13, -1.98044e-13, -5.58744e-13), forcesEwald1[77], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.20574e-12, -1.68982e-13, -1.00188e-12), forcesEwald1[78], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.04826e-13, -1.66206e-13, -3.90233e-12), forcesEwald1[79], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.63465e-12, -1.43797e-12, 4.69215e-13), forcesEwald1[80], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.05861e-13, -1.82247e-12, 1.19679e-12), forcesEwald1[81], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.72438e-13, -1.99041e-12, 1.18511e-12), forcesEwald1[82], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.41910e-12, -8.24315e-13, 4.98937e-12), forcesEwald1[83], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.23625e-12, -1.02910e-12, 3.96699e-13), forcesEwald1[84], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.37137e-12, 4.24728e-12, -3.22115e-13), forcesEwald1[85], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.38814e-12, 4.16683e-12, -1.10826e-12), forcesEwald1[86], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.51735e-12, 4.30920e-12, -8.82845e-13), forcesEwald1[87], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.16235e-12, 4.74609e-12, -8.55254e-13), forcesEwald1[88], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.25398e-12, 4.39370e-12, -4.06978e-12), forcesEwald1[89], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.40566e-13, -3.91356e-12, 1.64866e-13), forcesEwald1[90], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.08776e-13, -3.17498e-12, 1.25186e-12), forcesEwald1[91], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.11432e-12, -3.65701e-12, 8.78652e-13), forcesEwald1[92], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.66637e-12, -3.84314e-12, 4.84266e-12), forcesEwald1[93], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.48737e-13, -4.26117e-12, 5.16300e-14), forcesEwald1[94], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.05342e-13, -9.60037e-14, -2.06479e-13), forcesEwald1[95], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.42397e-13, 7.37242e-13, -4.13033e-13), forcesEwald1[96], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.92404e-13, 1.25263e-12, -4.38857e-13), forcesEwald1[97], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.52195e-13, 7.79702e-14, -1.32223e-12), forcesEwald1[98], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.21133e-13, 3.04888e-13, -3.78376e-12), forcesEwald1[99], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.87744e-13, -3.39545e-13, -5.88670e-14), forcesEwald1[100], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.79312e-13, 2.95589e-13, -2.95655e-13), forcesEwald1[101], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.65128e-13, 1.85540e-13, -1.02954e-12), forcesEwald1[102], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.47731e-13, 9.38203e-15, -1.45146e-12), forcesEwald1[103], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01718e-12, -3.38342e-13, -3.98201e-12), forcesEwald1[104], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.53112e-13, 6.13570e-13, 9.35603e-13), forcesEwald1[105], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.86670e-13, 1.68614e-12, 9.73381e-13), forcesEwald1[106], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.21188e-12, 1.13782e-12, -2.34965e-13), forcesEwald1[107], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.23343e-12, 1.11433e-12, 4.25538e-12), forcesEwald1[108], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.64055e-14, 3.20193e-13, -1.54854e-13), forcesEwald1[109], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.30625e-13, 3.52084e-14, -1.60719e-14), forcesEwald1[110], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.45256e-12, -2.77331e-13, 3.53604e-13), forcesEwald1[111], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.32249e-12, -4.30796e-13, -1.46617e-12), forcesEwald1[112], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08700e-12, -2.39699e-13, -1.49238e-12), forcesEwald1[113], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.97877e-12, -2.02435e-13, -4.01586e-12), forcesEwald1[114], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.01468e-13, 1.31987e-12, 7.08478e-13), forcesEwald1[115], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.48909e-12, 5.03319e-13, 9.81999e-13), forcesEwald1[116], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.38017e-12, 8.53971e-13, -2.13805e-13), forcesEwald1[117], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.03144e-12, 1.83846e-12, 4.67913e-12), forcesEwald1[118], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.57513e-13, 1.44418e-12, 1.70269e-13), forcesEwald1[119], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.08523e-13, -7.21272e-13, -1.48621e-13), forcesEwald1[120], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.35208e-12, -1.28995e-12, -4.29402e-13), forcesEwald1[121], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.78873e-13, -1.51657e-12, -1.08298e-12), forcesEwald1[122], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08183e-12, -7.63585e-13, -1.23231e-12), forcesEwald1[123], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.66143e-12, -8.85720e-13, -3.70843e-12), forcesEwald1[124], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.33872e-13, 1.84272e-13, -5.32969e-14), forcesEwald1[125], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.24508e-12, -1.41872e-13, 8.75351e-13), forcesEwald1[126], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.10569e-12, 2.57318e-13, 4.42092e-13), forcesEwald1[127], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.56922e-13, 1.23694e-12, 4.21423e-12), forcesEwald1[128], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.64719e-13, 5.12088e-13, 3.00122e-13), forcesEwald1[129], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.25530e-13, -9.61348e-13, -3.47446e-13), forcesEwald1[130], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.75918e-13, -1.29030e-12, -1.26076e-12), forcesEwald1[131], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29993e-12, -1.19773e-12, -9.09430e-13), forcesEwald1[132], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.67123e-13, -9.81521e-13, -8.59986e-13), forcesEwald1[133], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.25599e-12, -6.07748e-13, -3.82951e-12), forcesEwald1[134], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29827e-12, 4.44727e-12, -3.51689e-13), forcesEwald1[135], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.43950e-12, 4.88229e-12, 1.50953e-12), forcesEwald1[136], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29613e-12, 4.31143e-12, 9.02967e-13), forcesEwald1[137], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.21593e-12, 4.94933e-12, 5.17844e-12), forcesEwald1[138], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.59197e-13, 4.48261e-12, -7.63818e-14), forcesEwald1[139], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.51687e-13, -4.20566e-12, -3.60474e-13), forcesEwald1[140], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.44576e-13, -3.91129e-12, -1.11006e-12), forcesEwald1[141], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.42619e-13, -3.37055e-12, -6.49133e-13), forcesEwald1[142], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.57668e-13, -3.94920e-12, -8.76077e-13), forcesEwald1[143], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.11334e-12, -4.38953e-12, -3.95794e-12), forcesEwald1[144], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.68225e-13, 3.55186e-13, 1.42017e-13), forcesEwald1[145], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.92998e-13, 9.93883e-13, 9.89052e-13), forcesEwald1[146], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.63659e-13, 5.66164e-13, 1.81266e-13), forcesEwald1[147], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.60482e-13, -2.55350e-13, 4.69046e-12), forcesEwald1[148], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.12009e-14, -2.44592e-13, -1.65299e-13), forcesEwald1[149], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.99054e-12, -2.02586e-14, 5.13777e-13), forcesEwald1[150], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.96081e-12, 4.06895e-13, 1.09490e-12), forcesEwald1[151], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.78605e-12, -1.48781e-13, 3.36415e-13), forcesEwald1[152], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.05115e-12, -1.95755e-13, 4.57933e-12), forcesEwald1[153], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.00861e-12, -4.68458e-13, 1.79787e-13), forcesEwald1[154], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.59340e-12, 1.39742e-13, -2.82456e-14), forcesEwald1[155], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.13954e-12, 9.43183e-13, 3.15334e-14), forcesEwald1[156], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.08149e-12, 7.19872e-13, -5.22045e-13), forcesEwald1[157], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.09037e-12, 8.02430e-13, -1.40255e-12), forcesEwald1[158], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.79504e-12, 6.66674e-13, -3.53467e-12), forcesEwald1[159], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.43377e-12, -9.19952e-13, 1.48261e-12), forcesEwald1[160], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.66136e-12, -5.48878e-13, 1.06638e-12), forcesEwald1[161], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.51961e-12, -6.22899e-13, -1.19945e-13), forcesEwald1[162], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.51469e-12, -4.63195e-13, 4.42469e-12), forcesEwald1[163], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.18180e-12, -5.43742e-14, -9.81693e-14), forcesEwald1[164], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.82559e-12, 1.15608e-12, -4.25365e-14), forcesEwald1[165], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.65948e-12, 2.44837e-13, -1.08492e-14), forcesEwald1[166], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.87871e-12, 3.60252e-13, -5.89245e-13), forcesEwald1[167], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.27725e-12, 1.01730e-12, -1.49699e-12), forcesEwald1[168], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.01080e-12, 1.15329e-12, -3.32915e-12), forcesEwald1[169], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.31646e-12, -1.13224e-12, 5.00254e-13), forcesEwald1[170], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.78056e-12, -1.71077e-12, 1.02036e-12), forcesEwald1[171], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.73027e-12, -8.66267e-13, 3.38774e-13), forcesEwald1[172], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.91274e-12, -6.43928e-13, 4.67283e-12), forcesEwald1[173], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.12985e-12, -7.70316e-13, -2.13368e-13), forcesEwald1[174], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.28065e-12, 3.01512e-13, -2.13259e-13), forcesEwald1[175], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.97084e-12, -3.76802e-13, -4.15953e-13), forcesEwald1[176], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.89709e-12, -1.37451e-13, -3.24284e-13), forcesEwald1[177], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.10099e-12, 3.06023e-13, -1.37334e-12), forcesEwald1[178], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.74880e-12, 5.65990e-13, -3.39394e-12), forcesEwald1[179], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.12715e-12, -1.20883e-12, 3.38132e-13), forcesEwald1[180], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.13240e-12, -1.72427e-12, 1.25160e-12), forcesEwald1[181], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.51837e-12, -1.70640e-12, 7.85029e-13), forcesEwald1[182], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.79627e-12, -7.65096e-13, 5.09514e-12), forcesEwald1[183], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.74639e-12, -8.68546e-13, 1.83061e-13), forcesEwald1[184], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.87764e-12, 4.76009e-12, -4.16386e-13), forcesEwald1[185], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.35590e-12, 4.17502e-12, -8.57249e-13), forcesEwald1[186], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.43636e-12, 4.46920e-12, -4.82890e-13), forcesEwald1[187], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.47157e-12, 4.99078e-12, -9.29737e-13), forcesEwald1[188], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.04933e-12, 4.52240e-12, -3.91909e-12), forcesEwald1[189], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.63376e-12, -3.91691e-12, -3.64947e-14), forcesEwald1[190], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.39823e-12, -3.81266e-12, 1.30169e-12), forcesEwald1[191], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.11319e-12, -4.04151e-12, 7.67023e-13), forcesEwald1[192], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.32694e-12, -4.18732e-12, 5.03254e-12), forcesEwald1[193], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.90542e-12, -4.37374e-12, -4.66693e-13), forcesEwald1[194], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.16785e-12, -3.18934e-14, -5.55061e-13), forcesEwald1[195], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.26396e-12, 5.66035e-13, -3.10030e-13), forcesEwald1[196], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.25126e-12, 5.72467e-13, -2.11380e-13), forcesEwald1[197], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.23035e-12, 1.93661e-13, -1.24038e-12), forcesEwald1[198], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.42116e-12, 1.39899e-13, -3.41229e-12), forcesEwald1[199], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.19079e-13, -7.47481e-14, -1.46029e-13), forcesEwald1[200], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.86879e-13, -1.06659e-13, -2.72618e-13), forcesEwald1[201], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.49901e-13, -6.93153e-14, -8.48206e-13), forcesEwald1[202], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.97287e-13, -1.31949e-13, -1.61305e-12), forcesEwald1[203], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06168e-13, -3.81116e-13, -3.82605e-12), forcesEwald1[204], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.12391e-13, 8.10031e-13, 4.51256e-13), forcesEwald1[205], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.75905e-13, 1.28007e-12, 1.14283e-12), forcesEwald1[206], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.51410e-13, 8.91191e-13, 3.73505e-13), forcesEwald1[207], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.78406e-13, 1.11482e-12, 4.32852e-12), forcesEwald1[208], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58994e-13, 2.95226e-13, 2.95886e-13), forcesEwald1[209], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.99678e-13, 2.34543e-13, 2.09998e-13), forcesEwald1[210], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.39715e-13, -2.40247e-13, -4.19421e-13), forcesEwald1[211], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08544e-13, -2.87523e-13, -1.09144e-12), forcesEwald1[212], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.56819e-13, -2.00587e-13, -1.28046e-12), forcesEwald1[213], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.51593e-13, -2.27359e-13, -3.73533e-12), forcesEwald1[214], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.77645e-13, 1.23118e-12, 2.97541e-13), forcesEwald1[215], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.65966e-13, 1.13102e-12, 1.02486e-12), forcesEwald1[216], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.22079e-13, 1.08314e-12, 2.82750e-14), forcesEwald1[217], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.99812e-13, 1.68630e-12, 4.70139e-12), forcesEwald1[218], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.02738e-13, 1.20519e-12, 1.86207e-13), forcesEwald1[219], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.90647e-13, -1.09663e-12, 1.61836e-13), forcesEwald1[220], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.60276e-13, -1.08980e-12, -4.87767e-13), forcesEwald1[221], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.62442e-13, -1.17836e-12, -1.01698e-12), forcesEwald1[222], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.36783e-13, -6.60445e-13, -1.51339e-12), forcesEwald1[223], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.56063e-13, -1.01233e-12, -3.52163e-12), forcesEwald1[224], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.52438e-13, -1.51756e-13, -2.63168e-14), forcesEwald1[225], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.87899e-13, 1.59366e-13, 1.04341e-12), forcesEwald1[226], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.47429e-14, 4.47965e-13, 5.08753e-13), forcesEwald1[227], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.34277e-13, 1.35221e-12, 4.14791e-12), forcesEwald1[228], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.04870e-13, 2.92575e-13, -8.82576e-15), forcesEwald1[229], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.97173e-13, -1.30388e-12, -1.79529e-13), forcesEwald1[230], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.36095e-13, -1.09845e-12, -3.28645e-13), forcesEwald1[231], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.75874e-13, -1.08062e-12, -8.73160e-13), forcesEwald1[232], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.97078e-13, -7.17217e-13, -1.46014e-12), forcesEwald1[233], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.81722e-13, -4.47482e-13, -3.95952e-12), forcesEwald1[234], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.70476e-15, 4.66396e-12, 1.69245e-13), forcesEwald1[235], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01457e-12, 4.65454e-12, 1.49946e-12), forcesEwald1[236], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.21129e-13, 4.24350e-12, 5.59764e-13), forcesEwald1[237], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.31672e-14, 5.21244e-12, 4.97468e-12), forcesEwald1[238], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.91151e-13, 4.59847e-12, -2.29153e-13), forcesEwald1[239], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.82770e-13, -3.66601e-12, -3.70501e-13), forcesEwald1[240], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.80744e-13, -4.09982e-12, -6.04401e-13), forcesEwald1[241], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.56104e-13, -3.65357e-12, -8.52869e-13), forcesEwald1[242], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.75827e-13, -3.71849e-12, -9.08450e-13), forcesEwald1[243], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.38089e-13, -3.86247e-12, -4.05425e-12), forcesEwald1[244], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.03437e-13, 2.86472e-13, -4.63077e-15), forcesEwald1[245], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.94655e-13, 6.21384e-13, 9.50734e-13), forcesEwald1[246], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.44386e-13, 3.26498e-13, 4.39297e-13), forcesEwald1[247], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.32830e-13, -1.29884e-13, 4.78000e-12), forcesEwald1[248], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.12624e-12, -1.44652e-13, -2.73799e-13), forcesEwald1[249], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.90783e-13, 5.98824e-14, 5.10842e-13), forcesEwald1[250], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.74093e-13, -1.44674e-13, 1.21045e-12), forcesEwald1[251], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.67533e-13, -3.07251e-13, 2.45042e-13), forcesEwald1[252], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.21731e-13, -2.55981e-13, 4.50258e-12), forcesEwald1[253], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.85277e-13, -6.34386e-14, 1.18780e-14), forcesEwald1[254], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.00988e-13, 7.16250e-13, -1.69531e-13), forcesEwald1[255], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.00928e-12, 1.02196e-12, -5.46624e-13), forcesEwald1[256], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.15772e-13, 6.51802e-13, -3.87783e-13), forcesEwald1[257], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.71671e-13, 9.58909e-13, -1.22453e-12), forcesEwald1[258], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.22625e-12, 8.26707e-13, -3.53506e-12), forcesEwald1[259], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.67353e-12, -8.12014e-13, 7.72711e-13), forcesEwald1[260], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.24209e-12, -2.88587e-13, 8.23384e-13), forcesEwald1[261], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29224e-12, -5.23070e-13, 4.33861e-13), forcesEwald1[262], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.47184e-12, -4.56525e-13, 4.44351e-12), forcesEwald1[263], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.24368e-12, -1.09843e-13, 2.48341e-13), forcesEwald1[264], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.86105e-13, 1.19812e-12, -1.21010e-13), forcesEwald1[265], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.42276e-12, 6.39636e-13, -3.84757e-13), forcesEwald1[266], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.11347e-12, 9.49930e-13, -2.97598e-13), forcesEwald1[267], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.57654e-12, 1.57038e-12, -1.37500e-12), forcesEwald1[268], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.67580e-12, 1.43342e-12, -3.41406e-12), forcesEwald1[269], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.32300e-12, -1.45530e-12, 6.40174e-13), forcesEwald1[270], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.96142e-12, -1.25092e-12, 1.15285e-12), forcesEwald1[271], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.87442e-12, -1.40046e-12, 6.71139e-13), forcesEwald1[272], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.45188e-12, -7.57131e-13, 4.56078e-12), forcesEwald1[273], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.20987e-13, -1.49791e-12, 7.05872e-14), forcesEwald1[274], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.83057e-13, -2.42927e-13, -3.19048e-13), forcesEwald1[275], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.62590e-12, -6.43620e-13, -4.54024e-14), forcesEwald1[276], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.83244e-12, -1.46240e-13, -8.24035e-13), forcesEwald1[277], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.68258e-12, 1.20378e-13, -1.35907e-12), forcesEwald1[278], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.39769e-12, 7.62361e-14, -3.86531e-12), forcesEwald1[279], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.54695e-12, -1.35679e-12, 8.20788e-13), forcesEwald1[280], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.24682e-12, -1.61245e-12, 1.50056e-12), forcesEwald1[281], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.50133e-12, -1.87632e-12, 7.07787e-13), forcesEwald1[282], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.67689e-12, -1.14614e-12, 4.79907e-12), forcesEwald1[283], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.25221e-13, -1.26270e-12, 1.72793e-14), forcesEwald1[284], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.21087e-12, 4.13646e-12, -3.94798e-13), forcesEwald1[285], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.34870e-12, 3.81236e-12, -1.71897e-14), forcesEwald1[286], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.24325e-12, 3.78115e-12, -1.56549e-12), forcesEwald1[287], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.56128e-12, 4.46407e-12, -1.32017e-12), forcesEwald1[288], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.79896e-12, 4.04367e-12, -4.09519e-12), forcesEwald1[289], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.66324e-13, -3.34765e-12, 7.17441e-13), forcesEwald1[290], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.74519e-12, -3.78783e-12, 1.17048e-12), forcesEwald1[291], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.72279e-12, -3.91920e-12, 7.33048e-13), forcesEwald1[292], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01630e-12, -4.00711e-12, 4.57713e-12), forcesEwald1[293], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.60372e-14, -3.59645e-12, -4.60442e-13), forcesEwald1[294], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.44663e-14, 2.39279e-13, -2.19033e-13), forcesEwald1[295], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01488e-12, 3.88801e-13, -2.32534e-13), forcesEwald1[296], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.47365e-13, 4.20853e-13, -7.52461e-13), forcesEwald1[297], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.29121e-13, 2.91477e-13, -1.36139e-12), forcesEwald1[298], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.98133e-13, 3.74886e-13, -3.56859e-12), forcesEwald1[299], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.00857e-13, 3.20095e-13, -1.11971e-13), forcesEwald1[300], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.85192e-13, -4.68033e-13, -4.87599e-13), forcesEwald1[301], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.28527e-13, -5.14355e-13, -8.15904e-13), forcesEwald1[302], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.35176e-13, 1.69256e-13, -1.62788e-12), forcesEwald1[303], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.91781e-13, 7.01996e-14, -3.92916e-12), forcesEwald1[304], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.20457e-14, 7.08234e-13, 1.61323e-13), forcesEwald1[305], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.35176e-13, 4.75215e-13, 1.61760e-12), forcesEwald1[306], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.62016e-14, 6.61146e-13, 6.58689e-13), forcesEwald1[307], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.94497e-13, 1.29621e-12, 4.59120e-12), forcesEwald1[308], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.49907e-14, 8.58702e-13, 3.21233e-14), forcesEwald1[309], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.21891e-13, 1.46852e-13, -1.81299e-13), forcesEwald1[310], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.29127e-13, -2.69254e-15, -9.27365e-13), forcesEwald1[311], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.87542e-13, 1.26663e-13, -7.87571e-13), forcesEwald1[312], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.26122e-13, 2.35319e-13, -9.44791e-13), forcesEwald1[313], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.64879e-13, -1.90056e-13, -3.65717e-12), forcesEwald1[314], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.17090e-13, 1.13928e-12, -1.28503e-13), forcesEwald1[315], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.97044e-14, 1.56160e-12, 1.02318e-12), forcesEwald1[316], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.39322e-13, 1.63801e-12, 5.19624e-13), forcesEwald1[317], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.31462e-13, 1.72290e-12, 4.98948e-12), forcesEwald1[318], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.44567e-13, 1.10289e-12, -1.69122e-15), forcesEwald1[319], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.20119e-13, -1.65059e-12, -2.78951e-13), forcesEwald1[320], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.42969e-13, -1.38631e-12, -2.76229e-13), forcesEwald1[321], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.24604e-13, -5.70831e-13, -9.26237e-13), forcesEwald1[322], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.28409e-13, -5.07794e-13, -1.57492e-12), forcesEwald1[323], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.37376e-13, -1.11147e-12, -3.68615e-12), forcesEwald1[324], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.40485e-13, 3.21310e-13, 3.55920e-13), forcesEwald1[325], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.68729e-13, 6.90529e-13, 1.90420e-12), forcesEwald1[326], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.47181e-13, 7.11918e-13, 2.92080e-13), forcesEwald1[327], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.70607e-13, 9.54251e-13, 4.48571e-12), forcesEwald1[328], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.85270e-13, 3.40066e-14, -1.41445e-13), forcesEwald1[329], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.77581e-13, -1.76296e-12, -4.23836e-13), forcesEwald1[330], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.91709e-13, -9.94851e-13, 3.63096e-13), forcesEwald1[331], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.28810e-13, -6.95464e-13, -1.51097e-12), forcesEwald1[332], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.41719e-13, -1.14658e-12, -1.22575e-12), forcesEwald1[333], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.69732e-13, -1.02402e-12, -4.25272e-12), forcesEwald1[334], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.53461e-14, 4.53379e-12, 1.01142e-12), forcesEwald1[335], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.02976e-12, 4.62032e-12, 1.60437e-12), forcesEwald1[336], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.39522e-14, 4.44045e-12, -7.28874e-14), forcesEwald1[337], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.35041e-13, 4.85313e-12, 4.87142e-12), forcesEwald1[338], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.23303e-13, 4.70539e-12, -4.53487e-13), forcesEwald1[339], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.32502e-13, -3.64823e-12, -6.80330e-14), forcesEwald1[340], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.65790e-13, -4.21917e-12, 3.31857e-13), forcesEwald1[341], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.50741e-13, -4.27003e-12, -1.40061e-12), forcesEwald1[342], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.15468e-14, -3.68755e-12, -1.27676e-12), forcesEwald1[343], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.69949e-13, -3.87359e-12, -4.29792e-12), forcesEwald1[344], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.24275e-13, 3.47320e-13, 5.05833e-13), forcesEwald1[345], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.01122e-13, 1.04463e-13, 1.42052e-12), forcesEwald1[346], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.26810e-13, 4.88537e-13, 3.95001e-13), forcesEwald1[347], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.22873e-12, 3.52759e-13, 4.72833e-12), forcesEwald1[348], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.15358e-12, 2.32816e-13, -1.02579e-13), forcesEwald1[349], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.43452e-12, 2.03649e-13, 1.92953e-13), forcesEwald1[350], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.34242e-12, -4.72698e-13, 1.37796e-12), forcesEwald1[351], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.52685e-12, -2.65959e-13, 7.86049e-13), forcesEwald1[352], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.25756e-12, 2.08840e-13, 4.62071e-12), forcesEwald1[353], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.13361e-12, 3.05866e-13, 3.74681e-13), forcesEwald1[354], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.74341e-12, 1.00054e-12, -2.50829e-13), forcesEwald1[355], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.24985e-12, 3.17012e-13, -1.02278e-12), forcesEwald1[356], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.96519e-12, -1.41606e-13, -5.19542e-13), forcesEwald1[357], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.16875e-12, 4.42290e-13, -9.88932e-13), forcesEwald1[358], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.25925e-12, 9.64257e-13, -3.82212e-12), forcesEwald1[359], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.11908e-12, -4.90891e-13, -2.26599e-13), forcesEwald1[360], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.80761e-12, -4.22838e-13, 1.15280e-12), forcesEwald1[361], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.97495e-12, -5.04667e-13, 1.32124e-12), forcesEwald1[362], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.52715e-12, -2.08275e-13, 5.13581e-12), forcesEwald1[363], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.80614e-12, -1.30421e-13, 1.53021e-13), forcesEwald1[364], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.60409e-12, 9.03615e-13, -3.40853e-13), forcesEwald1[365], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.89575e-12, 1.31146e-12, -8.89475e-13), forcesEwald1[366], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.05818e-12, 1.36089e-12, -7.56428e-13), forcesEwald1[367], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.54418e-12, 1.26344e-12, -1.01118e-12), forcesEwald1[368], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.31174e-12, 1.62278e-12, -3.65979e-12), forcesEwald1[369], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.89494e-12, -1.77321e-12, 1.36320e-13), forcesEwald1[370], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.63328e-12, -1.32868e-12, 1.34734e-12), forcesEwald1[371], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.78477e-12, -1.51317e-12, 9.77555e-13), forcesEwald1[372], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.19511e-12, -1.11307e-12, 4.96457e-12), forcesEwald1[373], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.46440e-12, -1.61555e-12, -4.70400e-13), forcesEwald1[374], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.99848e-12, 1.26941e-13, -3.10656e-13), forcesEwald1[375], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.11033e-12, 9.41235e-13, -1.04775e-13), forcesEwald1[376], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.77744e-12, 8.23332e-13, -1.18781e-12), forcesEwald1[377], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.51040e-12, 2.62479e-13, -1.25999e-12), forcesEwald1[378], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.83978e-12, 1.22093e-13, -3.80627e-12), forcesEwald1[379], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.10120e-12, -1.36568e-12, 1.04403e-12), forcesEwald1[380], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.66331e-12, -6.85131e-13, 1.56795e-12), forcesEwald1[381], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.62585e-12, -1.26581e-12, 1.03111e-13), forcesEwald1[382], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.90204e-12, -1.57188e-12, 4.95891e-12), forcesEwald1[383], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.20884e-12, -1.73987e-12, -3.81965e-13), forcesEwald1[384], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.86471e-12, 4.46346e-12, -1.02610e-13), forcesEwald1[385], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.32753e-12, 4.29194e-12, 3.14574e-13), forcesEwald1[386], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.70383e-12, 4.32365e-12, -1.65005e-12), forcesEwald1[387], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.35030e-12, 4.26796e-12, -1.91362e-12), forcesEwald1[388], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.24700e-12, 4.39455e-12, -4.38560e-12), forcesEwald1[389], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.86908e-12, -3.67152e-12, 1.03768e-12), forcesEwald1[390], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.03574e-12, -4.91361e-12, 1.57582e-12), forcesEwald1[391], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.09355e-12, -4.36319e-12, 1.00918e-13), forcesEwald1[392], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.17427e-12, -3.84152e-12, 4.75949e-12), forcesEwald1[393], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.37850e-12, -3.84236e-12, -2.45604e-13), forcesEwald1[394], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.50024e-12, 7.15597e-14, -8.16641e-14), forcesEwald1[395], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.61987e-12, -3.99693e-13, -1.46895e-13), forcesEwald1[396], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.97558e-12, -3.68065e-13, -1.06069e-12), forcesEwald1[397], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.31263e-12, 6.61677e-14, -1.43698e-12), forcesEwald1[398], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.46959e-12, 4.43723e-13, -4.02541e-12), forcesEwald1[399], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.65355e-12, 3.95975e-13, 1.01311e-13), forcesEwald1[400], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.85016e-12, -6.20303e-15, -5.56212e-13), forcesEwald1[401], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.82249e-12, -4.88094e-13, -1.21382e-12), forcesEwald1[402], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.75182e-12, -7.44118e-14, -1.49277e-12), forcesEwald1[403], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.30683e-12, -1.51295e-14, -3.87995e-12), forcesEwald1[404], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.15898e-12, 6.67452e-13, 2.47480e-14), forcesEwald1[405], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.29782e-12, 1.17687e-13, 1.02848e-12), forcesEwald1[406], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.51883e-12, 3.68597e-13, 5.89730e-13), forcesEwald1[407], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.38671e-12, 8.95742e-13, 4.64907e-12), forcesEwald1[408], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.37259e-12, 7.35927e-13, 3.39048e-13), forcesEwald1[409], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.81453e-12, -3.39480e-13, -9.08799e-14), forcesEwald1[410], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.10647e-12, -4.37896e-13, -1.07780e-12), forcesEwald1[411], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.78850e-12, -2.21668e-13, -7.28946e-13), forcesEwald1[412], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.37520e-12, 2.83187e-13, -8.86007e-13), forcesEwald1[413], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.62303e-12, 3.28982e-15, -3.82018e-12), forcesEwald1[414], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.05607e-12, 1.10120e-12, -1.65016e-13), forcesEwald1[415], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.25810e-12, 1.57946e-12, 1.10439e-12), forcesEwald1[416], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.87668e-12, 1.54884e-12, 5.78782e-13), forcesEwald1[417], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.05995e-12, 1.54748e-12, 5.05423e-12), forcesEwald1[418], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.04811e-12, 1.19599e-12, -3.17768e-13), forcesEwald1[419], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.82387e-12, -1.36315e-12, -3.20366e-13), forcesEwald1[420], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.38295e-12, -5.15449e-13, -6.19557e-13), forcesEwald1[421], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.22671e-12, -9.17610e-13, -9.34959e-13), forcesEwald1[422], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.07999e-12, -1.04730e-12, -9.44297e-13), forcesEwald1[423], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.65432e-12, -1.25490e-12, -3.87190e-12), forcesEwald1[424], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.36573e-12, 4.83381e-14, 4.51036e-13), forcesEwald1[425], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.35918e-12, 6.48936e-13, 1.02437e-12), forcesEwald1[426], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.86258e-12, 4.54300e-13, 3.12748e-13), forcesEwald1[427], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.80574e-12, 4.65159e-13, 4.21251e-12), forcesEwald1[428], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.67587e-12, -2.53880e-13, -1.22370e-13), forcesEwald1[429], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.61996e-12, -1.80786e-12, 2.40749e-14), forcesEwald1[430], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.69686e-12, -1.09245e-12, 2.67605e-15), forcesEwald1[431], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.05927e-12, -9.42747e-13, -1.43402e-12), forcesEwald1[432], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.16269e-12, -1.15106e-12, -1.40968e-12), forcesEwald1[433], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.88272e-12, -1.40458e-12, -4.29182e-12), forcesEwald1[434], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.26496e-12, 4.54077e-12, 1.03067e-12), forcesEwald1[435], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.60941e-12, 4.79033e-12, 1.54185e-12), forcesEwald1[436], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.43574e-12, 4.24267e-12, -8.08309e-14), forcesEwald1[437], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.21274e-12, 5.06058e-12, 4.69779e-12), forcesEwald1[438], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.45577e-12, 4.62820e-12, -2.73750e-13), forcesEwald1[439], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.93296e-12, -3.67742e-12, 1.71131e-13), forcesEwald1[440], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.26715e-12, -4.07984e-12, -5.78532e-15), forcesEwald1[441], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.15850e-12, -3.87939e-12, -1.46592e-12), forcesEwald1[442], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.31305e-12, -3.61909e-12, -1.39736e-12), forcesEwald1[443], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.18604e-12, -3.66099e-12, -4.34015e-12), forcesEwald1[444], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.36147e-12, 4.47597e-13, 4.27429e-13), forcesEwald1[445], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.77912e-12, -7.74161e-15, 1.50805e-12), forcesEwald1[446], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.82810e-12, 2.23654e-13, 3.09573e-13), forcesEwald1[447], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.69096e-12, 2.09864e-13, 4.40560e-12), forcesEwald1[448], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.58386e-12, 5.90577e-13, 1.45066e-13), forcesEwald1[449], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.67545e-13, 2.66723e-13, 2.87936e-13), forcesEwald1[450], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.46363e-13, -4.71748e-14, 1.17036e-12), forcesEwald1[451], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.42887e-13, -2.92223e-13, -1.27504e-13), forcesEwald1[452], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.15256e-12, -4.32957e-15, 4.65917e-12), forcesEwald1[453], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.54462e-13, 1.68071e-13, -1.04775e-13), forcesEwald1[454], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.32446e-13, 1.55595e-13, -4.58073e-13), forcesEwald1[455], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.45105e-13, 4.00368e-13, -3.91231e-13), forcesEwald1[456], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.80761e-13, -1.04571e-13, -7.26342e-13), forcesEwald1[457], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.30509e-13, 6.00874e-13, -1.28037e-12), forcesEwald1[458], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.16667e-14, 9.90872e-13, -3.39197e-12), forcesEwald1[459], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.21531e-12, -1.04711e-12, 7.99287e-14), forcesEwald1[460], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.27196e-13, -6.44000e-13, 1.08024e-12), forcesEwald1[461], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.43697e-13, -5.03071e-13, 1.23109e-13), forcesEwald1[462], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.53819e-13, -1.74487e-13, 4.86822e-12), forcesEwald1[463], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.13828e-12, -9.74769e-14, -5.75249e-14), forcesEwald1[464], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.78626e-13, 1.14614e-12, -3.77621e-13), forcesEwald1[465], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05770e-12, 9.97966e-13, -3.35126e-13), forcesEwald1[466], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.76943e-13, 8.60666e-13, -3.24260e-13), forcesEwald1[467], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.27279e-13, 1.32831e-12, -1.22436e-12), forcesEwald1[468], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06508e-12, 1.23724e-12, -3.49680e-12), forcesEwald1[469], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.95398e-13, -1.18316e-12, 1.36978e-13), forcesEwald1[470], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05020e-12, -1.17489e-12, 9.28207e-13), forcesEwald1[471], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.13069e-13, -1.21239e-12, 4.01385e-13), forcesEwald1[472], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.46125e-12, -6.82421e-13, 4.92440e-12), forcesEwald1[473], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.08477e-13, -1.33705e-12, -1.83981e-13), forcesEwald1[474], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.36550e-13, -4.65481e-13, -1.32918e-13), forcesEwald1[475], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.47764e-12, -6.12978e-13, -4.26802e-13), forcesEwald1[476], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.31212e-12, -2.57401e-13, -1.18715e-12), forcesEwald1[477], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.17126e-12, -3.86197e-13, -1.25896e-12), forcesEwald1[478], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.07961e-12, -7.58387e-13, -3.65056e-12), forcesEwald1[479], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.27873e-12, -1.48156e-12, 6.10790e-13), forcesEwald1[480], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.84363e-12, -1.60577e-12, 1.08286e-12), forcesEwald1[481], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06594e-12, -1.64590e-12, 5.32135e-13), forcesEwald1[482], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.26084e-12, -1.33437e-12, 4.86637e-12), forcesEwald1[483], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.07273e-12, -1.73040e-12, 2.28958e-13), forcesEwald1[484], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.29495e-12, 4.43838e-12, -4.68431e-14), forcesEwald1[485], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.12006e-12, 4.23930e-12, -2.47453e-13), forcesEwald1[486], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.33605e-12, 4.77540e-12, -1.18793e-12), forcesEwald1[487], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.56001e-12, 5.10061e-12, -1.34966e-12), forcesEwald1[488], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.09717e-12, 4.62170e-12, -3.93053e-12), forcesEwald1[489], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.09615e-12, -3.69601e-12, 5.98408e-13), forcesEwald1[490], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.54383e-12, -3.69033e-12, 1.39409e-12), forcesEwald1[491], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.52142e-12, -3.46090e-12, -1.97019e-14), forcesEwald1[492], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.46491e-12, -3.39817e-12, 4.49683e-12), forcesEwald1[493], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.11613e-12, -3.69209e-12, -8.00944e-14), forcesEwald1[494], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.00709e-13, 4.15148e-13, -2.35865e-13), forcesEwald1[495], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.24062e-13, 2.49660e-13, 1.96352e-14), forcesEwald1[496], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.00236e-13, 2.14223e-13, -9.54781e-13), forcesEwald1[497], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.11210e-13, 1.84936e-13, -1.61151e-12), forcesEwald1[498], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.83425e-13, 3.37380e-13, -3.44943e-12), forcesEwald1[499], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.15326e-13, -4.10362e-13, -5.18694e-14), forcesEwald1[500], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.71909e-13, -6.46488e-13, 1.63327e-12), forcesEwald1[501], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.85771e-13, -3.47973e-13, 5.73959e-13), forcesEwald1[502], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.29804e-13, -2.05264e-13, 4.15464e-12), forcesEwald1[503], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.41330e-13, -5.49021e-13, 5.57230e-13), forcesEwald1[504], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.88040e-13, 5.88228e-13, 2.89777e-13), forcesEwald1[505], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.85382e-13, 1.13462e-12, -8.44640e-13), forcesEwald1[506], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.13532e-13, 8.30229e-13, -6.60917e-13), forcesEwald1[507], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.74371e-13, 8.91642e-13, -1.20786e-12), forcesEwald1[508], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.26763e-13, 1.03945e-12, -3.54870e-12), forcesEwald1[509], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.58896e-13, -6.92762e-13, 1.15589e-13), forcesEwald1[510], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.12923e-13, 3.52624e-13, 1.35174e-12), forcesEwald1[511], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.08815e-13, 5.52583e-13, 2.53025e-13), forcesEwald1[512], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.49207e-13, -6.04871e-13, 4.53848e-12), forcesEwald1[513], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.97182e-13, 4.61243e-14, 7.39156e-13), forcesEwald1[514], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.90191e-13, 2.18159e-12, 1.07119e-13), forcesEwald1[515], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.81154e-13, 2.17407e-12, -3.91994e-13), forcesEwald1[516], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.78502e-13, 2.49919e-12, -6.97596e-13), forcesEwald1[517], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.12444e-12, 2.40538e-12, -1.59152e-12), forcesEwald1[518], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.25460e-13, 2.17342e-12, -3.48025e-12), forcesEwald1[519], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.10464e-13, -8.57962e-13, 2.37749e-13), forcesEwald1[520], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.55243e-13, -5.33227e-13, 1.55917e-12), forcesEwald1[521], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.16703e-13, -6.62331e-13, 2.23631e-13), forcesEwald1[522], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.57888e-13, -7.58433e-13, 4.12597e-12), forcesEwald1[523], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.75691e-14, -1.59300e-12, 4.11472e-13), forcesEwald1[524], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.57283e-13, -1.15074e-13, 4.91614e-14), forcesEwald1[525], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.56585e-13, 8.54720e-14, -1.67408e-14), forcesEwald1[526], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.02257e-13, 2.93092e-13, -9.44249e-13), forcesEwald1[527], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.69984e-13, 6.08526e-13, -1.40570e-12), forcesEwald1[528], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.11227e-13, 5.50784e-14, -3.51872e-12), forcesEwald1[529], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.65968e-13, -1.04411e-12, 5.10309e-13), forcesEwald1[530], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.43040e-12, -1.30357e-12, 1.93159e-12), forcesEwald1[531], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.15093e-12, -1.20707e-12, 1.61796e-13), forcesEwald1[532], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.37297e-13, -1.54714e-12, 4.05093e-12), forcesEwald1[533], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.63904e-13, -6.15302e-13, 8.36408e-14), forcesEwald1[534], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.55000e-14, 4.73111e-12, -5.33667e-14), forcesEwald1[535], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.35564e-13, 4.47276e-12, -2.34307e-13), forcesEwald1[536], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.69944e-13, 4.57704e-12, -1.58902e-12), forcesEwald1[537], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.62892e-13, 5.18130e-12, -1.01161e-12), forcesEwald1[538], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.87993e-13, 4.55716e-12, -4.06829e-12), forcesEwald1[539], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.26259e-13, -3.78378e-12, 4.28902e-13), forcesEwald1[540], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.03974e-12, -3.97284e-12, 1.85539e-12), forcesEwald1[541], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.24815e-13, -3.57099e-12, 1.76014e-13), forcesEwald1[542], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.54249e-13, -4.17009e-12, 4.37443e-12), forcesEwald1[543], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.05573e-13, -3.53252e-12, 8.14256e-14), forcesEwald1[544], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.49244e-13, -9.62821e-14, 5.95868e-14), forcesEwald1[545], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.20071e-13, -4.14512e-13, -5.11231e-13), forcesEwald1[546], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.10365e-13, -2.27598e-13, -8.66046e-13), forcesEwald1[547], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.97930e-13, -2.38291e-13, -8.94229e-13), forcesEwald1[548], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.53819e-13, -7.35596e-14, -3.41119e-12), forcesEwald1[549], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.77184e-13, -1.39601e-13, -2.39067e-13), forcesEwald1[550], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.02714e-12, -7.50116e-13, -5.51786e-13), forcesEwald1[551], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.50251e-13, -7.31174e-13, 4.25463e-14), forcesEwald1[552], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.89161e-13, -5.33928e-13, -1.02116e-12), forcesEwald1[553], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.87953e-13, -4.91540e-13, -3.19305e-12), forcesEwald1[554], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.88286e-13, 1.05781e-12, 2.78563e-13), forcesEwald1[555], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.24472e-13, 6.52637e-13, 9.77886e-13), forcesEwald1[556], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.40196e-13, 1.09626e-12, 4.44337e-13), forcesEwald1[557], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.46385e-12, 1.06985e-12, 4.65127e-12), forcesEwald1[558], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.28252e-13, 1.24809e-12, 2.06887e-15), forcesEwald1[559], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.46850e-12, -8.69057e-13, -3.17962e-13), forcesEwald1[560], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.35386e-13, -5.30358e-13, -9.15348e-13), forcesEwald1[561], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.27480e-13, -3.77243e-13, 3.13270e-13), forcesEwald1[562], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.88148e-13, -7.02451e-13, -7.12132e-13), forcesEwald1[563], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.26270e-12, -1.07212e-12, -2.98300e-12), forcesEwald1[564], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05498e-12, 1.13637e-12, 7.29844e-13), forcesEwald1[565], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.69643e-13, 1.33770e-12, 1.16107e-12), forcesEwald1[566], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.58607e-13, 1.59680e-12, 6.53133e-13), forcesEwald1[567], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.58429e-12, 1.44529e-12, 4.58465e-12), forcesEwald1[568], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.11147e-12, 9.89426e-13, 1.14582e-13), forcesEwald1[569], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.37983e-13, -5.54000e-13, -2.53821e-13), forcesEwald1[570], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.13163e-12, 3.40204e-13, -2.52202e-13), forcesEwald1[571], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.75191e-13, 1.13570e-13, 8.89369e-14), forcesEwald1[572], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.28632e-12, -1.15907e-12, -1.04924e-12), forcesEwald1[573], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.04508e-13, -8.77131e-13, -3.40053e-12), forcesEwald1[574], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.03607e-12, 8.36633e-13, 1.54984e-12), forcesEwald1[575], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.37196e-12, 7.53887e-13, 1.21645e-12), forcesEwald1[576], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.26427e-12, 4.83462e-13, 7.23859e-13), forcesEwald1[577], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.78692e-12, 7.74712e-13, 4.07982e-12), forcesEwald1[578], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.54116e-13, -4.80006e-13, -1.98272e-14), forcesEwald1[579], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.10133e-12, -1.66717e-12, -1.14426e-13), forcesEwald1[580], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.30073e-12, -1.53192e-12, 1.39275e-13), forcesEwald1[581], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.52299e-13, -1.52353e-12, -1.40052e-12), forcesEwald1[582], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.23551e-12, -1.13236e-12, -1.45685e-12), forcesEwald1[583], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.80823e-13, -1.63398e-12, -3.77983e-12), forcesEwald1[584], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.14071e-12, 3.59267e-12, 1.69424e-12), forcesEwald1[585], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.14995e-12, 3.47232e-12, 1.52275e-12), forcesEwald1[586], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.81397e-12, 3.02183e-12, 4.52850e-13), forcesEwald1[587], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.90881e-12, 3.15143e-12, 4.52328e-12), forcesEwald1[588], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.27441e-13, 3.96892e-12, -2.01708e-13), forcesEwald1[589], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.04502e-13, -2.93216e-12, -1.48254e-13), forcesEwald1[590], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.63371e-13, -3.16537e-12, 9.01213e-14), forcesEwald1[591], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.20890e-12, -3.72154e-12, -4.48416e-13), forcesEwald1[592], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.67546e-13, -3.42712e-12, -9.96353e-13), forcesEwald1[593], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.36378e-13, -3.52450e-12, -3.75902e-12), forcesEwald1[594], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.69979e-13, 2.69468e-13, 9.02015e-13), forcesEwald1[595], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.50191e-13, -1.50705e-13, 9.93609e-13), forcesEwald1[596], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.24579e-13, 2.45708e-13, 1.22148e-12), forcesEwald1[597], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.24611e-12, -4.01093e-13, 4.46156e-12), forcesEwald1[598], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.37023e-13, 2.23382e-13, 1.61411e-13), forcesEwald1[599], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.16877e-12, -1.19330e-13, 7.17833e-15), forcesEwald1[600], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.79408e-12, -1.00005e-12, 9.26870e-13), forcesEwald1[601], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.40025e-12, -5.43948e-13, 3.59285e-13), forcesEwald1[602], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.20417e-12, -1.08203e-13, 4.25439e-12), forcesEwald1[603], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.54855e-12, -1.00338e-13, 5.85795e-13), forcesEwald1[604], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60004e-12, 1.23873e-12, -7.24598e-13), forcesEwald1[605], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.04283e-12, 9.81329e-13, -1.32322e-12), forcesEwald1[606], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.24866e-12, 8.16294e-13, -5.32943e-13), forcesEwald1[607], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.73241e-12, 1.43938e-12, -1.36809e-12), forcesEwald1[608], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.52733e-12, 1.13993e-12, -3.46590e-12), forcesEwald1[609], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.50384e-12, -8.44338e-13, -5.13232e-13), forcesEwald1[610], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.39445e-13, -2.34712e-13, 1.09243e-12), forcesEwald1[611], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.29333e-12, 9.39583e-14, 5.37660e-13), forcesEwald1[612], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.69274e-12, -4.66082e-13, 4.62243e-12), forcesEwald1[613], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.22849e-12, -4.76614e-13, 3.41450e-13), forcesEwald1[614], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.30853e-12, 1.13531e-12, -5.69939e-13), forcesEwald1[615], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.41036e-12, 1.96797e-12, -1.15685e-12), forcesEwald1[616], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.67208e-13, 2.55682e-12, -4.21220e-13), forcesEwald1[617], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.00811e-13, 2.26954e-12, -1.19238e-12), forcesEwald1[618], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.04678e-13, 1.70828e-12, -3.73085e-12), forcesEwald1[619], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.21619e-12, -5.06841e-13, 2.35906e-13), forcesEwald1[620], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.47070e-13, 3.05597e-13, 9.97127e-13), forcesEwald1[621], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.24540e-12, -1.55123e-13, 1.78753e-13), forcesEwald1[622], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.91583e-13, -8.56494e-13, 4.31094e-12), forcesEwald1[623], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.98903e-12, -8.34869e-13, 5.93364e-13), forcesEwald1[624], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.16087e-12, 3.69878e-13, -2.42753e-13), forcesEwald1[625], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.41983e-12, 9.13047e-13, -3.25026e-13), forcesEwald1[626], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.36901e-12, 1.13466e-12, -9.50349e-13), forcesEwald1[627], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.66201e-12, 9.75356e-13, -1.67214e-12), forcesEwald1[628], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.10296e-12, 2.60991e-13, -3.87561e-12), forcesEwald1[629], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.73063e-12, -1.97689e-12, 1.14721e-12), forcesEwald1[630], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.37649e-12, -1.14908e-12, 2.14218e-12), forcesEwald1[631], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.84177e-12, -1.25938e-12, -1.28291e-13), forcesEwald1[632], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.59600e-13, -1.42058e-12, 3.81698e-12), forcesEwald1[633], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.20507e-12, -1.53311e-12, -2.55285e-13), forcesEwald1[634], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.03683e-12, 4.21440e-12, 4.48272e-13), forcesEwald1[635], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.96429e-13, 4.09535e-12, 5.07684e-13), forcesEwald1[636], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.45123e-12, 4.11093e-12, -1.86303e-12), forcesEwald1[637], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.77987e-13, 4.35202e-12, -1.27750e-12), forcesEwald1[638], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.49164e-12, 4.21979e-12, -4.23127e-12), forcesEwald1[639], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.84254e-12, -3.18500e-12, 8.87546e-13), forcesEwald1[640], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.29749e-12, -4.13304e-12, 1.11810e-12), forcesEwald1[641], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.47890e-12, -3.77252e-12, -2.75827e-13), forcesEwald1[642], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.63030e-12, -4.28922e-12, 4.11596e-12), forcesEwald1[643], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.44502e-12, -2.84679e-12, 1.17908e-13), forcesEwald1[644], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.83249e-12, 2.75510e-13, -8.46467e-13), forcesEwald1[645], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.36579e-12, -6.04640e-13, -5.31901e-13), forcesEwald1[646], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.17769e-12, -6.35629e-13, -9.28992e-13), forcesEwald1[647], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.46793e-12, -3.65604e-13, -1.22935e-12), forcesEwald1[648], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.50463e-12, 3.58130e-13, -3.45943e-12), forcesEwald1[649], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.61220e-13, -2.24412e-14, -2.31915e-13), forcesEwald1[650], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.20551e-12, -6.77313e-13, -2.60132e-13), forcesEwald1[651], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.34220e-13, -7.11094e-13, -9.19821e-14), forcesEwald1[652], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.70684e-13, -2.32426e-14, -1.24292e-12), forcesEwald1[653], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.58158e-13, -6.29306e-14, -2.75253e-12), forcesEwald1[654], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.99919e-13, 8.91749e-13, -6.59182e-14), forcesEwald1[655], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.69172e-13, 2.62299e-13, 1.06276e-12), forcesEwald1[656], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.19322e-13, 6.80320e-13, 1.44138e-13), forcesEwald1[657], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.74210e-13, 1.46831e-12, 4.83020e-12), forcesEwald1[658], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.32233e-12, 9.03102e-13, -1.61872e-13), forcesEwald1[659], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.08464e-13, -5.21848e-14, -4.60709e-13), forcesEwald1[660], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.39871e-13, 2.14289e-13, -8.12105e-13), forcesEwald1[661], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.08212e-13, 3.02357e-13, 6.00259e-13), forcesEwald1[662], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.73319e-13, -1.77963e-13, -7.08385e-13), forcesEwald1[663], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.01484e-13, -5.59168e-13, -3.12160e-12), forcesEwald1[664], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.77214e-13, 1.50651e-12, 7.95760e-14), forcesEwald1[665], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.77960e-13, 1.75394e-12, 1.14468e-12), forcesEwald1[666], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.84149e-14, 1.49965e-12, 4.79034e-13), forcesEwald1[667], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.18157e-13, 1.50170e-12, 4.86261e-12), forcesEwald1[668], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.18285e-12, 1.28388e-12, -1.59203e-13), forcesEwald1[669], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.98000e-13, -7.67754e-13, -3.31809e-13), forcesEwald1[670], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.61357e-13, -1.32331e-13, -2.82814e-13), forcesEwald1[671], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.33165e-13, -2.55710e-13, -1.23066e-13), forcesEwald1[672], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.13479e-14, -9.77117e-13, -1.25105e-12), forcesEwald1[673], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.97163e-14, -8.97740e-13, -3.31874e-12), forcesEwald1[674], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.45556e-14, 3.79505e-13, 1.10565e-12), forcesEwald1[675], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.61714e-13, 4.61643e-13, 1.03318e-12), forcesEwald1[676], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.85266e-13, 3.65257e-13, 6.46543e-13), forcesEwald1[677], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.66901e-13, 7.39665e-13, 4.43105e-12), forcesEwald1[678], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.93623e-14, -6.77408e-13, -3.38277e-13), forcesEwald1[679], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.28211e-13, -2.02874e-12, -6.54386e-14), forcesEwald1[680], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.12852e-13, -1.35991e-12, 1.80742e-13), forcesEwald1[681], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.35290e-13, -1.62242e-12, -1.41504e-12), forcesEwald1[682], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.52466e-13, -1.78244e-12, -1.60590e-12), forcesEwald1[683], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.14049e-14, -1.75919e-12, -4.03888e-12), forcesEwald1[684], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.13980e-12, 3.89501e-12, 1.31760e-12), forcesEwald1[685], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.57688e-13, 3.52948e-12, 1.27795e-12), forcesEwald1[686], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.62959e-13, 3.18197e-12, 3.20209e-13), forcesEwald1[687], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.31840e-12, 3.13009e-12, 4.53343e-12), forcesEwald1[688], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.21690e-13, 4.00967e-12, 3.99441e-14), forcesEwald1[689], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.93649e-13, -2.76013e-12, 4.70845e-14), forcesEwald1[690], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.07469e-13, -3.59375e-12, 2.53858e-13), forcesEwald1[691], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.56758e-13, -3.78256e-12, -8.45988e-13), forcesEwald1[692], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.96838e-13, -3.77901e-12, -1.26644e-12), forcesEwald1[693], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.42506e-13, -3.35738e-12, -3.16145e-12), forcesEwald1[694], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.58836e-13, 1.10776e-13, 4.03271e-13), forcesEwald1[695], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.02189e-12, -9.05573e-14, 9.38284e-13), forcesEwald1[696], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.68646e-13, 5.00148e-13, 8.04692e-14), forcesEwald1[697], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.86131e-13, 1.20264e-13, 4.57801e-12), forcesEwald1[698], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.89934e-13, 4.47638e-13, 1.28815e-13), forcesEwald1[699], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.99164e-12, -3.79801e-13, 7.08188e-14), forcesEwald1[700], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.67358e-12, -6.62765e-13, 9.76994e-13), forcesEwald1[701], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.22896e-12, -3.88874e-13, 3.79650e-13), forcesEwald1[702], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.45203e-12, -8.83640e-14, 4.01405e-12), forcesEwald1[703], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.48531e-12, -1.19126e-13, 8.00841e-13), forcesEwald1[704], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.27188e-12, 6.95733e-13, -3.08107e-13), forcesEwald1[705], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.66575e-12, 1.19824e-12, -7.37712e-13), forcesEwald1[706], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.46697e-12, 9.80234e-13, -7.82710e-13), forcesEwald1[707], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.21456e-12, 1.32814e-12, -1.47054e-12), forcesEwald1[708], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.30571e-12, 1.06933e-12, -3.53824e-12), forcesEwald1[709], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.57715e-12, -8.27343e-13, 1.56135e-13), forcesEwald1[710], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.46564e-12, 1.17962e-13, 1.17415e-12), forcesEwald1[711], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.82368e-12, 4.67834e-13, 3.21495e-13), forcesEwald1[712], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.06293e-12, -2.46755e-13, 4.45100e-12), forcesEwald1[713], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.67001e-12, 2.86935e-14, 7.87122e-13), forcesEwald1[714], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.23914e-12, 1.46224e-12, -3.17737e-13), forcesEwald1[715], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.86593e-12, 1.87918e-12, -4.33402e-13), forcesEwald1[716], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.68501e-12, 2.06257e-12, -6.47975e-13), forcesEwald1[717], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.79754e-12, 2.04100e-12, -1.46864e-12), forcesEwald1[718], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.01505e-12, 1.71233e-12, -3.76199e-12), forcesEwald1[719], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.39311e-12, -3.24498e-13, 2.59170e-13), forcesEwald1[720], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.32890e-12, -3.50703e-13, 1.17479e-12), forcesEwald1[721], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.44984e-12, -3.42912e-13, 3.53757e-13), forcesEwald1[722], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.04374e-12, -8.61438e-13, 4.36434e-12), forcesEwald1[723], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.77012e-12, -7.65629e-13, 4.09464e-13), forcesEwald1[724], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.16767e-12, 5.94846e-13, -3.55463e-13), forcesEwald1[725], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.44431e-12, 8.95413e-13, -1.51736e-13), forcesEwald1[726], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.54641e-12, 6.60862e-13, -8.50097e-13), forcesEwald1[727], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.01995e-12, 6.08924e-13, -1.54568e-12), forcesEwald1[728], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.37647e-12, 3.03322e-13, -3.67489e-12), forcesEwald1[729], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.97691e-12, -1.04404e-12, 4.52109e-13), forcesEwald1[730], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.08870e-12, -1.28284e-12, 1.24915e-12), forcesEwald1[731], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.51305e-12, -1.38712e-12, 2.71914e-13), forcesEwald1[732], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.39656e-12, -1.59925e-12, 4.04036e-12), forcesEwald1[733], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.39265e-12, -1.53199e-12, 7.25515e-13), forcesEwald1[734], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.61075e-12, 4.22360e-12, 4.15384e-13), forcesEwald1[735], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60556e-12, 3.98845e-12, -1.22890e-13), forcesEwald1[736], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.59773e-12, 4.43862e-12, -1.49993e-12), forcesEwald1[737], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.28206e-12, 4.63297e-12, -1.31355e-12), forcesEwald1[738], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.05348e-12, 4.39685e-12, -4.05381e-12), forcesEwald1[739], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.19618e-12, -3.67667e-12, 3.58142e-13), forcesEwald1[740], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60613e-12, -3.77232e-12, 1.11167e-12), forcesEwald1[741], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.23039e-12, -3.50149e-12, 8.31962e-14), forcesEwald1[742], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.12584e-12, -4.39861e-12, 4.22605e-12), forcesEwald1[743], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.86309e-12, -3.47322e-12, 6.89931e-13), forcesEwald1[744], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.49601e-12, 4.79404e-14, -3.68849e-13), forcesEwald1[745], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.96715e-12, -2.31016e-13, -3.72582e-13), forcesEwald1[746], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.72801e-12, -2.35498e-13, -9.40875e-13), forcesEwald1[747], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.45657e-12, -3.50455e-14, -1.51928e-12), forcesEwald1[748], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.98804e-12, 1.06987e-13, -3.28448e-12), forcesEwald1[749], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.78006e-12, -3.05975e-13, -1.69076e-13), forcesEwald1[750], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.24942e-12, -1.39514e-13, -2.21323e-14), forcesEwald1[751], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.09698e-12, -3.00901e-13, -9.81040e-13), forcesEwald1[752], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.40124e-12, 1.38400e-13, -1.16950e-12), forcesEwald1[753], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.54085e-12, -3.80494e-13, -3.58560e-12), forcesEwald1[754], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.52806e-12, 8.88043e-13, 7.62866e-13), forcesEwald1[755], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.74829e-12, 5.99878e-13, 1.08296e-12), forcesEwald1[756], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58574e-12, 1.04324e-12, 9.44426e-13), forcesEwald1[757], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.23199e-13, 1.47760e-12, 4.31692e-12), forcesEwald1[758], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.44560e-12, 7.59829e-13, -2.13015e-13), forcesEwald1[759], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.27760e-12, -3.74712e-13, -3.10963e-13), forcesEwald1[760], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.76872e-12, -4.57223e-13, 6.78192e-14), forcesEwald1[761], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.00655e-12, -1.77260e-13, -5.69698e-14), forcesEwald1[762], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.80564e-12, -2.98252e-13, -8.91258e-13), forcesEwald1[763], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.61888e-12, -8.31520e-13, -3.98671e-12), forcesEwald1[764], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.86828e-12, 1.57006e-12, 7.78433e-13), forcesEwald1[765], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.04169e-12, 1.32056e-12, 1.06027e-12), forcesEwald1[766], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23581e-12, 2.06783e-12, 9.42628e-13), forcesEwald1[767], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.63590e-13, 1.43300e-12, 4.42826e-12), forcesEwald1[768], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.03292e-12, 2.18324e-12, -1.32302e-13), forcesEwald1[769], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.93050e-12, -9.98873e-13, -3.80140e-13), forcesEwald1[770], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.43231e-12, -2.66114e-13, -6.47603e-14), forcesEwald1[771], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.80922e-12, -8.94062e-13, -4.34513e-13), forcesEwald1[772], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.48361e-12, -1.41956e-12, -1.28401e-12), forcesEwald1[773], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.56376e-12, -1.49045e-12, -3.46317e-12), forcesEwald1[774], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.20093e-12, 1.03541e-12, 1.09984e-12), forcesEwald1[775], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.51051e-12, 3.93106e-13, 8.97047e-13), forcesEwald1[776], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.45644e-12, 2.83464e-13, 1.10223e-12), forcesEwald1[777], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.70121e-13, 8.11689e-13, 4.53124e-12), forcesEwald1[778], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.84143e-12, -8.05080e-14, 2.58716e-13), forcesEwald1[779], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.91281e-12, -1.19677e-12, 8.39371e-14), forcesEwald1[780], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58510e-12, -1.79861e-12, -6.82651e-13), forcesEwald1[781], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.08403e-12, -2.01537e-12, -1.35037e-12), forcesEwald1[782], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.83551e-12, -1.53020e-12, -1.47752e-12), forcesEwald1[783], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.13917e-13, -1.14776e-12, -3.90807e-12), forcesEwald1[784], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.07063e-13, 2.97949e-12, 7.47662e-13), forcesEwald1[785], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.93937e-13, 3.09302e-12, 1.18884e-12), forcesEwald1[786], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.72532e-14, 2.76001e-12, 8.83582e-13), forcesEwald1[787], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.78059e-13, 3.24139e-12, 4.65688e-12), forcesEwald1[788], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.35350e-12, 3.41457e-12, 3.04687e-13), forcesEwald1[789], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.25891e-12, -3.39089e-12, -1.02256e-13), forcesEwald1[790], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.60516e-12, -3.44752e-12, -3.41671e-13), forcesEwald1[791], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.01454e-12, -3.36314e-12, -1.10390e-12), forcesEwald1[792], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.10311e-12, -3.64771e-12, -1.03130e-12), forcesEwald1[793], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.59831e-13, -3.67126e-12, -3.72363e-12), forcesEwald1[794], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.15240e-12, 2.98493e-13, 3.41320e-13), forcesEwald1[795], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.79202e-12, 4.65352e-13, 1.17207e-12), forcesEwald1[796], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23757e-12, 5.59690e-13, 8.76988e-13), forcesEwald1[797], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.08332e-13, 1.93956e-13, 4.53500e-12), forcesEwald1[798], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.77516e-12, 1.15400e-13, 9.66166e-14), forcesEwald1[799], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.97762e-12, -3.13043e-13, 4.21191e-13), forcesEwald1[800], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.10803e-12, 1.08840e-13, 1.11871e-12), forcesEwald1[801], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.21537e-12, -2.06222e-13, 3.35818e-13), forcesEwald1[802], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.99064e-12, -1.78776e-13, 4.58602e-12), forcesEwald1[803], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.31683e-12, -5.52396e-13, 6.70895e-14), forcesEwald1[804], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.05009e-12, 3.41599e-13, -1.18074e-13), forcesEwald1[805], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.15969e-12, 1.40748e-12, 2.74744e-13), forcesEwald1[806], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.72044e-12, 1.76364e-12, -1.45286e-12), forcesEwald1[807], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.56275e-12, 1.61295e-12, -1.85990e-12), forcesEwald1[808], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.14973e-12, 7.44501e-13, -4.00088e-12), forcesEwald1[809], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.87027e-12, -4.20129e-14, 1.01473e-12), forcesEwald1[810], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.19698e-12, -7.14528e-14, 1.51807e-12), forcesEwald1[811], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.47828e-12, 6.83728e-14, 1.68182e-14), forcesEwald1[812], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.01074e-12, -4.22768e-13, 3.68383e-12), forcesEwald1[813], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.96805e-12, -3.11798e-13, -2.00074e-14), forcesEwald1[814], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.36076e-12, 2.35370e-12, 1.28469e-13), forcesEwald1[815], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.01906e-12, 1.77519e-12, 2.68063e-13), forcesEwald1[816], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.81989e-12, 1.94985e-12, -1.14959e-12), forcesEwald1[817], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.62309e-12, 1.99180e-12, -1.69723e-12), forcesEwald1[818], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.97671e-12, 2.13491e-12, -3.83738e-12), forcesEwald1[819], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60790e-12, -3.60831e-13, 3.44633e-13), forcesEwald1[820], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.02746e-12, -8.23369e-13, 1.10416e-12), forcesEwald1[821], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.52108e-12, -7.68428e-13, 3.73931e-13), forcesEwald1[822], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.29787e-12, -1.36217e-12, 4.02564e-12), forcesEwald1[823], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.69650e-12, -8.04831e-13, 3.07781e-13), forcesEwald1[824], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.18551e-12, 9.49850e-13, 1.68290e-13), forcesEwald1[825], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.48256e-12, 7.26685e-13, -4.91940e-13), forcesEwald1[826], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60926e-12, 8.40553e-13, -1.25653e-12), forcesEwald1[827], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.51492e-12, 7.14279e-13, -2.34099e-12), forcesEwald1[828], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.76696e-12, 8.35776e-13, -3.52940e-12), forcesEwald1[829], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.15543e-12, -6.42366e-13, 1.20425e-13), forcesEwald1[830], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.98630e-12, -1.13229e-12, 1.75569e-12), forcesEwald1[831], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.10700e-12, -1.15477e-12, 4.85525e-13), forcesEwald1[832], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.51383e-12, -9.19726e-13, 4.37944e-12), forcesEwald1[833], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.29682e-12, -7.32544e-13, 4.15952e-13), forcesEwald1[834], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.06503e-12, 3.60963e-12, 8.21941e-13), forcesEwald1[835], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.06017e-12, 3.77784e-12, -8.71446e-13), forcesEwald1[836], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.62119e-12, 3.90976e-12, -1.20776e-12), forcesEwald1[837], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.05476e-12, 4.67046e-12, -1.24154e-12), forcesEwald1[838], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.30132e-12, 4.53052e-12, -3.88911e-12), forcesEwald1[839], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.88928e-12, -4.10594e-12, 5.87493e-14), forcesEwald1[840], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.46181e-12, -3.80510e-12, 1.30368e-12), forcesEwald1[841], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.30418e-12, -2.87270e-12, 4.50905e-13), forcesEwald1[842], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.43945e-12, -4.07441e-12, 4.46718e-12), forcesEwald1[843], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.06772e-12, -3.38868e-12, 1.69666e-13), forcesEwald1[844], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.51981e-12, -2.28177e-13, -3.73788e-13), forcesEwald1[845], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.71147e-12, 3.09297e-13, -4.79081e-13), forcesEwald1[846], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.57510e-12, 1.54788e-13, -1.22213e-12), forcesEwald1[847], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.04510e-12, -1.47895e-13, -1.21769e-12), forcesEwald1[848], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.75380e-12, -1.89848e-13, -3.65973e-12), forcesEwald1[849], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.12718e-12, -6.49768e-13, -2.22088e-13), forcesEwald1[850], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.60631e-12, -3.25730e-13, -1.62416e-13), forcesEwald1[851], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.63628e-12, 1.19571e-13, -2.15271e-12), forcesEwald1[852], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.38290e-12, -1.83085e-13, -1.04891e-12), forcesEwald1[853], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.73642e-12, -5.54124e-13, -4.39830e-12), forcesEwald1[854], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.01400e-12, 4.34840e-13, 1.63760e-12), forcesEwald1[855], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.82115e-12, 1.12153e-12, 1.53372e-12), forcesEwald1[856], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.90606e-12, 1.30024e-12, -4.90542e-14), forcesEwald1[857], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.26122e-12, 5.13594e-13, 4.57136e-12), forcesEwald1[858], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.25024e-12, 4.92318e-13, -5.30841e-13), forcesEwald1[859], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.72232e-12, -4.54323e-13, -1.66350e-13), forcesEwald1[860], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.21228e-12, -3.10291e-13, 2.63965e-13), forcesEwald1[861], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.25565e-12, -4.49363e-13, -2.17764e-12), forcesEwald1[862], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.19226e-12, -4.30461e-13, -1.35455e-12), forcesEwald1[863], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.13131e-12, -7.82619e-13, -4.08940e-12), forcesEwald1[864], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.17050e-12, 2.39025e-12, 1.44825e-12), forcesEwald1[865], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.16229e-12, 8.61684e-13, 1.37371e-12), forcesEwald1[866], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.41651e-12, 1.83747e-12, 3.96139e-13), forcesEwald1[867], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.26605e-12, 1.40300e-12, 4.50623e-12), forcesEwald1[868], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.08376e-12, 2.11406e-12, -3.03807e-13), forcesEwald1[869], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.29801e-12, -1.27263e-12, -8.64572e-14), forcesEwald1[870], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.41057e-12, -1.39162e-12, -2.19908e-13), forcesEwald1[871], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.61698e-12, -1.35972e-12, -1.41747e-12), forcesEwald1[872], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.92136e-12, -1.31388e-12, -1.31896e-12), forcesEwald1[873], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.39799e-12, -1.35906e-12, -4.15195e-12), forcesEwald1[874], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.19767e-12, 6.81165e-13, 9.47989e-13), forcesEwald1[875], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.54486e-12, 4.25057e-13, 1.31552e-12), forcesEwald1[876], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.65016e-12, 8.93677e-13, 7.24588e-13), forcesEwald1[877], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.04483e-12, 9.28630e-13, 4.61289e-12), forcesEwald1[878], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.17787e-12, 7.15496e-13, 1.87668e-13), forcesEwald1[879], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.42473e-12, 3.18821e-14, -2.20037e-13), forcesEwald1[880], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.12981e-12, -9.12011e-13, -1.29895e-12), forcesEwald1[881], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.13664e-12, -1.80296e-12, -1.34190e-12), forcesEwald1[882], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.68086e-12, -1.28184e-12, -1.40307e-12), forcesEwald1[883], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.27523e-12, -4.53455e-13, -4.10601e-12), forcesEwald1[884], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.66621e-12, 3.55921e-12, -1.10519e-13), forcesEwald1[885], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.91980e-12, 3.37654e-12, 1.10698e-12), forcesEwald1[886], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.98515e-12, 3.12756e-12, 1.18676e-12), forcesEwald1[887], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.60379e-12, 4.22956e-12, 5.44837e-12), forcesEwald1[888], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.16117e-12, 3.79768e-12, 3.97747e-13), forcesEwald1[889], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.48189e-12, -4.25659e-12, -4.12137e-13), forcesEwald1[890], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.81451e-12, -3.93846e-12, -1.20785e-12), forcesEwald1[891], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.85877e-12, -3.67959e-12, -1.83263e-12), forcesEwald1[892], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.42036e-12, -3.95277e-12, -7.86036e-13), forcesEwald1[893], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.07289e-12, -4.23734e-12, -4.31077e-12), forcesEwald1[894], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.59465e-12, -3.21195e-13, 1.01826e-12), forcesEwald1[895], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.47669e-12, 1.10367e-13, 1.32832e-12), forcesEwald1[896], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.52223e-12, 1.80856e-14, 4.55301e-13), forcesEwald1[897], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.04399e-12, -4.57747e-13, 5.09564e-12), forcesEwald1[898], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.31017e-12, -7.31731e-13, -2.90418e-13), forcesEwald1[899], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.76754e-12, -4.07114e-13, 3.41817e-13), forcesEwald1[900], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.83688e-12, -7.23359e-15, 1.74565e-12), forcesEwald1[901], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.55439e-12, -1.80717e-13, 2.35915e-13), forcesEwald1[902], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.43185e-12, -3.46006e-13, 4.33030e-12), forcesEwald1[903], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.50682e-12, -5.88048e-13, -2.15048e-14), forcesEwald1[904], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.98756e-12, 3.89752e-13, 3.16431e-13), forcesEwald1[905], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.86895e-12, 1.49593e-12, -2.68612e-13), forcesEwald1[906], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.94453e-12, 1.30709e-12, -9.77387e-13), forcesEwald1[907], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.44713e-12, 1.21453e-12, -1.19492e-12), forcesEwald1[908], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.56160e-12, 8.99520e-13, -3.95932e-12), forcesEwald1[909], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.86438e-12, -6.48841e-13, 8.34489e-13), forcesEwald1[910], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.10551e-12, 1.53551e-14, 1.18689e-12), forcesEwald1[911], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.30708e-12, 4.92912e-14, -1.56632e-13), forcesEwald1[912], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.94442e-12, -5.77976e-13, 4.29005e-12), forcesEwald1[913], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.21516e-12, -2.47510e-13, 2.41431e-13), forcesEwald1[914], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.38711e-12, 2.58072e-12, 2.56502e-13), forcesEwald1[915], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.61427e-12, 1.60994e-12, 1.54900e-14), forcesEwald1[916], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.16086e-12, 1.70297e-12, -1.30621e-12), forcesEwald1[917], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.44753e-12, 2.35506e-12, -1.40969e-12), forcesEwald1[918], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.31142e-12, 2.24400e-12, -3.91029e-12), forcesEwald1[919], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.87711e-12, -9.80542e-13, 3.66135e-13), forcesEwald1[920], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.76118e-12, -1.11699e-12, 1.19261e-12), forcesEwald1[921], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.18419e-12, -7.42346e-13, 9.43832e-14), forcesEwald1[922], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.65570e-12, -8.32393e-13, 4.36830e-12), forcesEwald1[923], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.19159e-12, -1.00721e-12, 3.20027e-13), forcesEwald1[924], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.56819e-12, 7.73765e-13, 8.55383e-14), forcesEwald1[925], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.92888e-12, 4.11147e-13, -4.18027e-13), forcesEwald1[926], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.07977e-12, 3.55335e-13, -9.65623e-13), forcesEwald1[927], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.10019e-12, 6.95000e-13, -1.25049e-12), forcesEwald1[928], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.16041e-12, 7.40991e-13, -3.78109e-12), forcesEwald1[929], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.14604e-12, -9.73021e-13, 6.16754e-14), forcesEwald1[930], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.89739e-12, -1.39138e-12, 1.89967e-12), forcesEwald1[931], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.51146e-12, -1.04776e-12, 4.67684e-13), forcesEwald1[932], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.09900e-12, -1.06053e-12, 4.43149e-12), forcesEwald1[933], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.34563e-12, -3.85967e-13, -4.48952e-14), forcesEwald1[934], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.92230e-12, 4.41989e-12, -2.69639e-14), forcesEwald1[935], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.75444e-12, 4.26760e-12, -9.87491e-13), forcesEwald1[936], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.64323e-12, 4.41862e-12, -1.23581e-12), forcesEwald1[937], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.66794e-12, 4.95172e-12, -6.55200e-13), forcesEwald1[938], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.17874e-12, 4.88199e-12, -4.12277e-12), forcesEwald1[939], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.88732e-12, -3.69420e-12, 1.73780e-14), forcesEwald1[940], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.90298e-12, -3.44049e-12, 1.64743e-12), forcesEwald1[941], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.54119e-12, -3.46547e-12, 4.40448e-13), forcesEwald1[942], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.71037e-12, -4.03659e-12, 5.07883e-12), forcesEwald1[943], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.95321e-12, -3.73699e-12, 1.85053e-13), forcesEwald1[944], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.25689e-12, -3.47606e-13, -1.05847e-13), forcesEwald1[945], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.93705e-12, -4.42777e-14, -6.74335e-13), forcesEwald1[946], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.88650e-12, 1.22786e-13, -1.10910e-12), forcesEwald1[947], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.72501e-12, -3.93934e-13, -6.82509e-13), forcesEwald1[948], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.31199e-12, -1.54413e-13, -3.60040e-12), forcesEwald1[949], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.21059e-12, -5.01182e-13, -1.91674e-13), forcesEwald1[950], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.59324e-13, -3.98877e-13, -2.90642e-13), forcesEwald1[951], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.90052e-13, -1.45100e-13, -1.62371e-13), forcesEwald1[952], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.83107e-13, 4.22655e-14, -1.20668e-12), forcesEwald1[953], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.99133e-13, -4.63470e-13, -2.80937e-12), forcesEwald1[954], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.37279e-12, 7.15609e-13, 5.95548e-13), forcesEwald1[955], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.14260e-12, 5.32804e-13, 1.08352e-12), forcesEwald1[956], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.83324e-12, 4.23621e-13, 4.73270e-13), forcesEwald1[957], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.34251e-12, 6.28765e-13, 4.37042e-12), forcesEwald1[958], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.20425e-12, 3.25001e-13, -1.81933e-13), forcesEwald1[959], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.31953e-12, -3.21711e-13, -1.77854e-13), forcesEwald1[960], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.99395e-13, 1.49808e-13, -9.37201e-14), forcesEwald1[961], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.69985e-13, 4.41726e-14, -8.57487e-14), forcesEwald1[962], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.25729e-13, -6.55073e-13, -1.19896e-12), forcesEwald1[963], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.07973e-12, -7.09025e-13, -2.51077e-12), forcesEwald1[964], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.50558e-13, 1.29743e-12, 8.50588e-13), forcesEwald1[965], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.05950e-14, 1.28917e-12, 1.00069e-12), forcesEwald1[966], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.24437e-13, 2.05730e-12, 3.23430e-13), forcesEwald1[967], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01535e-12, 1.54958e-12, 4.50290e-12), forcesEwald1[968], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05996e-12, 1.74830e-12, 3.52671e-13), forcesEwald1[969], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.87354e-13, -9.16698e-13, -1.83253e-13), forcesEwald1[970], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.97440e-13, -3.98600e-13, 6.77768e-14), forcesEwald1[971], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.65999e-13, -4.55305e-13, -2.55094e-13), forcesEwald1[972], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.60673e-13, -1.26264e-12, -1.65663e-12), forcesEwald1[973], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.86058e-13, -1.06370e-12, -2.73017e-12), forcesEwald1[974], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.36819e-13, 3.92256e-13, 8.47419e-13), forcesEwald1[975], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.80301e-13, 4.63407e-14, 1.38628e-12), forcesEwald1[976], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.98222e-13, -1.01275e-13, 8.45154e-13), forcesEwald1[977], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.14666e-12, 1.04640e-12, 4.42555e-12), forcesEwald1[978], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.50915e-13, -3.28736e-14, -6.31594e-15), forcesEwald1[979], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.30892e-13, -1.30838e-12, -3.99828e-13), forcesEwald1[980], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.08581e-13, -1.14216e-12, -2.07203e-13), forcesEwald1[981], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08417e-12, -1.87974e-12, -1.55037e-12), forcesEwald1[982], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.28334e-13, -1.08033e-12, -1.37696e-12), forcesEwald1[983], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.63116e-13, -7.45132e-13, -3.38410e-12), forcesEwald1[984], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.96293e-13, 3.95043e-12, 5.44156e-13), forcesEwald1[985], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05572e-12, 3.54936e-12, 1.37220e-12), forcesEwald1[986], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.70267e-13, 3.04640e-12, 7.22949e-13), forcesEwald1[987], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.20212e-13, 4.09741e-12, 5.06374e-12), forcesEwald1[988], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.40740e-13, 3.67405e-12, -5.66798e-13), forcesEwald1[989], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.39430e-13, -2.75377e-12, -2.21028e-13), forcesEwald1[990], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.35793e-13, -2.73832e-12, -4.01296e-13), forcesEwald1[991], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.74333e-13, -2.99037e-12, -6.36548e-13), forcesEwald1[992], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.05541e-15, -3.61026e-12, -8.40540e-13), forcesEwald1[993], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.42106e-13, -4.10188e-12, -3.36982e-12), forcesEwald1[994], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.15796e-13, -7.69314e-14, 3.39012e-13), forcesEwald1[995], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.18692e-12, -2.25483e-13, 9.63790e-13), forcesEwald1[996], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.19276e-12, 4.82919e-14, 1.02449e-12), forcesEwald1[997], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.09072e-12, -2.56049e-13, 4.71664e-12), forcesEwald1[998], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.29054e-13, -3.26182e-13, 1.84928e-14), forcesEwald1[999], 10*TOL); diff --git a/platforms/reference/tests/water.dat b/platforms/reference/tests/water.dat deleted file mode 100644 index c6e2f5695b378ee6be7c389ab921af7c735b4377..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/water.dat +++ /dev/null @@ -1,648 +0,0 @@ -positions[0] = Vec3(0.230000,0.628000,0.113000); -positions[1] = Vec3(0.137000,0.626000,0.150000); -positions[2] = Vec3(0.231000,0.589000,0.021000); -positions[3] = Vec3(0.225000,0.275000,-0.866000); -positions[4] = Vec3(0.260000,0.258000,-0.774000); -positions[5] = Vec3(0.137000,0.230000,-0.878000); -positions[6] = Vec3(0.019000,0.368000,0.647000); -positions[7] = Vec3(-0.063000,0.411000,0.686000); -positions[8] = Vec3(-0.009000,0.295000,0.584000); -positions[9] = Vec3(0.569000,-0.587000,-0.697000); -positions[10] = Vec3(0.476000,-0.594000,-0.734000); -positions[11] = Vec3(0.580000,-0.498000,-0.653000); -positions[12] = Vec3(-0.307000,-0.351000,0.703000); -positions[13] = Vec3(-0.364000,-0.367000,0.784000); -positions[14] = Vec3(-0.366000,-0.341000,0.623000); -positions[15] = Vec3(-0.119000,0.618000,0.856000); -positions[16] = Vec3(-0.086000,0.712000,0.856000); -positions[17] = Vec3(-0.068000,0.564000,0.922000); -positions[18] = Vec3(-0.727000,0.703000,0.717000); -positions[19] = Vec3(-0.670000,0.781000,0.692000); -positions[20] = Vec3(-0.787000,0.729000,0.793000); -positions[21] = Vec3(-0.107000,0.607000,0.231000); -positions[22] = Vec3(-0.119000,0.594000,0.132000); -positions[23] = Vec3(-0.137000,0.526000,0.280000); -positions[24] = Vec3(0.768000,-0.718000,-0.839000); -positions[25] = Vec3(0.690000,-0.701000,-0.779000); -positions[26] = Vec3(0.802000,-0.631000,-0.875000); -positions[27] = Vec3(0.850000,0.798000,-0.039000); -positions[28] = Vec3(0.846000,0.874000,0.026000); -positions[29] = Vec3(0.872000,0.834000,-0.130000); -positions[30] = Vec3(0.685000,-0.850000,0.665000); -positions[31] = Vec3(0.754000,-0.866000,0.735000); -positions[32] = Vec3(0.612000,-0.793000,0.703000); -positions[33] = Vec3(0.686000,-0.701000,-0.059000); -positions[34] = Vec3(0.746000,-0.622000,-0.045000); -positions[35] = Vec3(0.600000,-0.670000,-0.100000); -positions[36] = Vec3(0.335000,-0.427000,-0.801000); -positions[37] = Vec3(0.257000,-0.458000,-0.854000); -positions[38] = Vec3(0.393000,-0.369000,-0.858000); -positions[39] = Vec3(-0.402000,-0.357000,-0.523000); -positions[40] = Vec3(-0.378000,-0.263000,-0.497000); -positions[41] = Vec3(-0.418000,-0.411000,-0.441000); -positions[42] = Vec3(0.438000,0.392000,-0.363000); -positions[43] = Vec3(0.520000,0.336000,-0.354000); -positions[44] = Vec3(0.357000,0.334000,-0.359000); -positions[45] = Vec3(-0.259000,0.447000,0.737000); -positions[46] = Vec3(-0.333000,0.493000,0.687000); -positions[47] = Vec3(-0.208000,0.515000,0.790000); -positions[48] = Vec3(0.231000,-0.149000,0.483000); -positions[49] = Vec3(0.265000,-0.072000,0.537000); -positions[50] = Vec3(0.275000,-0.149000,0.393000); -positions[51] = Vec3(-0.735000,-0.521000,-0.172000); -positions[52] = Vec3(-0.688000,-0.521000,-0.084000); -positions[53] = Vec3(-0.783000,-0.608000,-0.183000); -positions[54] = Vec3(0.230000,-0.428000,0.538000); -positions[55] = Vec3(0.204000,-0.332000,0.538000); -positions[56] = Vec3(0.159000,-0.482000,0.583000); -positions[57] = Vec3(0.240000,-0.771000,0.886000); -positions[58] = Vec3(0.254000,-0.855000,0.938000); -positions[59] = Vec3(0.185000,-0.707000,0.941000); -positions[60] = Vec3(0.620000,-0.076000,-0.423000); -positions[61] = Vec3(0.528000,-0.093000,-0.388000); -positions[62] = Vec3(0.648000,0.016000,-0.397000); -positions[63] = Vec3(0.606000,-0.898000,0.123000); -positions[64] = Vec3(0.613000,-0.814000,0.069000); -positions[65] = Vec3(0.652000,-0.885000,0.211000); -positions[66] = Vec3(-0.268000,0.114000,-0.382000); -positions[67] = Vec3(-0.286000,0.181000,-0.454000); -positions[68] = Vec3(-0.271000,0.160000,-0.293000); -positions[69] = Vec3(0.122000,0.643000,0.563000); -positions[70] = Vec3(0.077000,0.555000,0.580000); -positions[71] = Vec3(0.121000,0.697000,0.647000); -positions[72] = Vec3(-0.020000,-0.095000,0.359000); -positions[73] = Vec3(0.034000,-0.124000,0.439000); -positions[74] = Vec3(0.010000,-0.005000,0.330000); -positions[75] = Vec3(0.027000,-0.266000,0.117000); -positions[76] = Vec3(0.008000,-0.362000,0.138000); -positions[77] = Vec3(-0.006000,-0.208000,0.192000); -positions[78] = Vec3(-0.173000,0.922000,0.612000); -positions[79] = Vec3(-0.078000,0.893000,0.620000); -positions[80] = Vec3(-0.181000,0.987000,0.537000); -positions[81] = Vec3(-0.221000,-0.754000,0.432000); -positions[82] = Vec3(-0.135000,-0.752000,0.380000); -positions[83] = Vec3(-0.207000,-0.707000,0.520000); -positions[84] = Vec3(0.113000,0.737000,-0.265000); -positions[85] = Vec3(0.201000,0.724000,-0.220000); -positions[86] = Vec3(0.100000,0.834000,-0.287000); -positions[87] = Vec3(0.613000,-0.497000,0.726000); -positions[88] = Vec3(0.564000,-0.584000,0.735000); -positions[89] = Vec3(0.590000,-0.454000,0.639000); -positions[90] = Vec3(-0.569000,-0.634000,-0.439000); -positions[91] = Vec3(-0.532000,-0.707000,-0.497000); -positions[92] = Vec3(-0.517000,-0.629000,-0.354000); -positions[93] = Vec3(0.809000,0.004000,0.502000); -positions[94] = Vec3(0.849000,0.095000,0.493000); -positions[95] = Vec3(0.709000,0.012000,0.508000); -positions[96] = Vec3(0.197000,-0.886000,-0.598000); -positions[97] = Vec3(0.286000,-0.931000,-0.612000); -positions[98] = Vec3(0.124000,-0.951000,-0.617000); -positions[99] = Vec3(-0.337000,-0.863000,0.190000); -positions[100] = Vec3(-0.400000,-0.939000,0.203000); -positions[101] = Vec3(-0.289000,-0.845000,0.276000); -positions[102] = Vec3(-0.675000,-0.070000,-0.246000); -positions[103] = Vec3(-0.651000,-0.010000,-0.322000); -positions[104] = Vec3(-0.668000,-0.165000,-0.276000); -positions[105] = Vec3(0.317000,0.251000,-0.061000); -positions[106] = Vec3(0.388000,0.322000,-0.055000); -positions[107] = Vec3(0.229000,0.290000,-0.033000); -positions[108] = Vec3(-0.396000,-0.445000,-0.909000); -positions[109] = Vec3(-0.455000,-0.439000,-0.829000); -positions[110] = Vec3(-0.411000,-0.533000,-0.955000); -positions[111] = Vec3(-0.195000,-0.148000,0.572000); -positions[112] = Vec3(-0.236000,-0.171000,0.484000); -positions[113] = Vec3(-0.213000,-0.222000,0.637000); -positions[114] = Vec3(0.598000,0.729000,0.270000); -positions[115] = Vec3(0.622000,0.798000,0.202000); -positions[116] = Vec3(0.520000,0.762000,0.324000); -positions[117] = Vec3(-0.581000,0.345000,-0.918000); -positions[118] = Vec3(-0.667000,0.295000,-0.931000); -positions[119] = Vec3(-0.519000,0.291000,-0.862000); -positions[120] = Vec3(-0.286000,-0.200000,0.307000); -positions[121] = Vec3(-0.197000,-0.154000,0.310000); -positions[122] = Vec3(-0.307000,-0.224000,0.212000); -positions[123] = Vec3(0.807000,0.605000,-0.397000); -positions[124] = Vec3(0.760000,0.602000,-0.308000); -positions[125] = Vec3(0.756000,0.550000,-0.463000); -positions[126] = Vec3(-0.468000,0.469000,-0.188000); -positions[127] = Vec3(-0.488000,0.512000,-0.100000); -positions[128] = Vec3(-0.390000,0.407000,-0.179000); -positions[129] = Vec3(-0.889000,0.890000,-0.290000); -positions[130] = Vec3(-0.843000,0.806000,-0.319000); -positions[131] = Vec3(-0.945000,0.924000,-0.365000); -positions[132] = Vec3(-0.871000,0.410000,-0.620000); -positions[133] = Vec3(-0.948000,0.444000,-0.566000); -positions[134] = Vec3(-0.905000,0.359000,-0.699000); -positions[135] = Vec3(-0.821000,0.701000,0.429000); -positions[136] = Vec3(-0.795000,0.697000,0.525000); -positions[137] = Vec3(-0.906000,0.650000,0.415000); -positions[138] = Vec3(0.076000,0.811000,0.789000); -positions[139] = Vec3(0.175000,0.799000,0.798000); -positions[140] = Vec3(0.052000,0.906000,0.810000); -positions[141] = Vec3(0.130000,-0.041000,-0.291000); -positions[142] = Vec3(0.120000,-0.056000,-0.192000); -positions[143] = Vec3(0.044000,-0.005000,-0.327000); -positions[144] = Vec3(0.865000,0.348000,0.195000); -positions[145] = Vec3(0.924000,0.411000,0.146000); -positions[146] = Vec3(0.884000,0.254000,0.166000); -positions[147] = Vec3(-0.143000,0.585000,-0.031000); -positions[148] = Vec3(-0.169000,0.674000,-0.067000); -positions[149] = Vec3(-0.145000,0.517000,-0.104000); -positions[150] = Vec3(-0.500000,-0.718000,0.545000); -positions[151] = Vec3(-0.417000,-0.747000,0.497000); -positions[152] = Vec3(-0.549000,-0.651000,0.489000); -positions[153] = Vec3(0.550000,0.196000,0.885000); -positions[154] = Vec3(0.545000,0.191000,0.985000); -positions[155] = Vec3(0.552000,0.292000,0.856000); -positions[156] = Vec3(-0.854000,-0.406000,0.477000); -positions[157] = Vec3(-0.900000,-0.334000,0.425000); -positions[158] = Vec3(-0.858000,-0.386000,0.575000); -positions[159] = Vec3(0.351000,-0.061000,0.853000); -positions[160] = Vec3(0.401000,-0.147000,0.859000); -positions[161] = Vec3(0.416000,0.016000,0.850000); -positions[162] = Vec3(-0.067000,-0.796000,0.873000); -positions[163] = Vec3(-0.129000,-0.811000,0.797000); -positions[164] = Vec3(-0.119000,-0.785000,0.958000); -positions[165] = Vec3(-0.635000,-0.312000,-0.356000); -positions[166] = Vec3(-0.629000,-0.389000,-0.292000); -positions[167] = Vec3(-0.687000,-0.338000,-0.436000); -positions[168] = Vec3(0.321000,-0.919000,0.242000); -positions[169] = Vec3(0.403000,-0.880000,0.200000); -positions[170] = Vec3(0.294000,-1.001000,0.193000); -positions[171] = Vec3(-0.404000,0.735000,0.728000); -positions[172] = Vec3(-0.409000,0.670000,0.803000); -positions[173] = Vec3(-0.324000,0.794000,0.741000); -positions[174] = Vec3(0.461000,-0.596000,-0.135000); -positions[175] = Vec3(0.411000,-0.595000,-0.221000); -positions[176] = Vec3(0.398000,-0.614000,-0.059000); -positions[177] = Vec3(-0.751000,-0.086000,0.237000); -positions[178] = Vec3(-0.811000,-0.148000,0.287000); -positions[179] = Vec3(-0.720000,-0.130000,0.152000); -positions[180] = Vec3(0.202000,0.285000,-0.364000); -positions[181] = Vec3(0.122000,0.345000,-0.377000); -positions[182] = Vec3(0.192000,0.236000,-0.278000); -positions[183] = Vec3(-0.230000,-0.485000,0.081000); -positions[184] = Vec3(-0.262000,-0.391000,0.071000); -positions[185] = Vec3(-0.306000,-0.548000,0.069000); -positions[186] = Vec3(0.464000,-0.119000,0.323000); -positions[187] = Vec3(0.497000,-0.080000,0.409000); -positions[188] = Vec3(0.540000,-0.126000,0.258000); -positions[189] = Vec3(-0.462000,0.107000,0.426000); -positions[190] = Vec3(-0.486000,0.070000,0.336000); -positions[191] = Vec3(-0.363000,0.123000,0.430000); -positions[192] = Vec3(0.249000,-0.077000,-0.621000); -positions[193] = Vec3(0.306000,-0.142000,-0.571000); -positions[194] = Vec3(0.233000,-0.110000,-0.714000); -positions[195] = Vec3(-0.922000,-0.164000,0.904000); -positions[196] = Vec3(-0.842000,-0.221000,0.925000); -positions[197] = Vec3(-0.971000,-0.204000,0.827000); -positions[198] = Vec3(0.382000,0.700000,0.480000); -positions[199] = Vec3(0.427000,0.610000,0.477000); -positions[200] = Vec3(0.288000,0.689000,0.513000); -positions[201] = Vec3(-0.315000,0.222000,-0.133000); -positions[202] = Vec3(-0.320000,0.259000,-0.041000); -positions[203] = Vec3(-0.387000,0.153000,-0.145000); -positions[204] = Vec3(0.614000,0.122000,0.117000); -positions[205] = Vec3(0.712000,0.100000,0.124000); -positions[206] = Vec3(0.583000,0.105000,0.024000); -positions[207] = Vec3(0.781000,0.264000,-0.113000); -positions[208] = Vec3(0.848000,0.203000,-0.070000); -positions[209] = Vec3(0.708000,0.283000,-0.048000); -positions[210] = Vec3(0.888000,-0.348000,-0.667000); -positions[211] = Vec3(0.865000,-0.373000,-0.761000); -positions[212] = Vec3(0.949000,-0.417000,-0.628000); -positions[213] = Vec3(-0.511000,0.590000,-0.429000); -positions[214] = Vec3(-0.483000,0.547000,-0.344000); -positions[215] = Vec3(-0.486000,0.686000,-0.428000); -positions[216] = Vec3(0.803000,-0.460000,0.924000); -positions[217] = Vec3(0.893000,-0.446000,0.882000); -positions[218] = Vec3(0.732000,-0.458000,0.853000); -positions[219] = Vec3(0.922000,0.503000,0.899000); -positions[220] = Vec3(0.897000,0.494000,0.803000); -positions[221] = Vec3(0.970000,0.421000,0.930000); -positions[222] = Vec3(0.539000,0.064000,0.512000); -positions[223] = Vec3(0.458000,0.065000,0.570000); -positions[224] = Vec3(0.542000,0.147000,0.457000); -positions[225] = Vec3(-0.428000,-0.674000,0.041000); -positions[226] = Vec3(-0.396000,-0.750000,0.098000); -positions[227] = Vec3(-0.520000,-0.647000,0.071000); -positions[228] = Vec3(0.297000,0.035000,0.171000); -positions[229] = Vec3(0.346000,0.119000,0.150000); -positions[230] = Vec3(0.359000,-0.030000,0.216000); -positions[231] = Vec3(-0.927000,0.236000,0.480000); -positions[232] = Vec3(-0.975000,0.277000,0.402000); -positions[233] = Vec3(-0.828000,0.234000,0.461000); -positions[234] = Vec3(-0.786000,0.683000,-0.398000); -positions[235] = Vec3(-0.866000,0.622000,-0.395000); -positions[236] = Vec3(-0.705000,0.630000,-0.422000); -positions[237] = Vec3(-0.635000,-0.292000,0.793000); -positions[238] = Vec3(-0.614000,-0.218000,0.728000); -positions[239] = Vec3(-0.567000,-0.292000,0.866000); -positions[240] = Vec3(0.459000,-0.710000,0.741000); -positions[241] = Vec3(0.388000,-0.737000,0.806000); -positions[242] = Vec3(0.433000,-0.738000,0.648000); -positions[243] = Vec3(-0.591000,-0.065000,0.591000); -positions[244] = Vec3(-0.547000,-0.001000,0.527000); -positions[245] = Vec3(-0.641000,-0.013000,0.661000); -positions[246] = Vec3(-0.830000,0.549000,0.016000); -positions[247] = Vec3(-0.871000,0.631000,-0.023000); -positions[248] = Vec3(-0.766000,0.575000,0.089000); -positions[249] = Vec3(0.078000,0.556000,-0.476000); -positions[250] = Vec3(0.170000,0.555000,-0.517000); -positions[251] = Vec3(0.072000,0.630000,-0.409000); -positions[252] = Vec3(0.561000,0.222000,-0.715000); -positions[253] = Vec3(0.599000,0.138000,-0.678000); -positions[254] = Vec3(0.473000,0.241000,-0.671000); -positions[255] = Vec3(0.866000,0.454000,0.642000); -positions[256] = Vec3(0.834000,0.526000,0.580000); -positions[257] = Vec3(0.890000,0.373000,0.589000); -positions[258] = Vec3(-0.845000,0.039000,0.753000); -positions[259] = Vec3(-0.917000,0.044000,0.684000); -positions[260] = Vec3(-0.869000,-0.030000,0.822000); -positions[261] = Vec3(-0.433000,-0.689000,0.867000); -positions[262] = Vec3(-0.488000,-0.773000,0.860000); -positions[263] = Vec3(-0.407000,-0.660000,0.775000); -positions[264] = Vec3(-0.396000,0.590000,-0.870000); -positions[265] = Vec3(-0.426000,0.495000,-0.863000); -positions[266] = Vec3(-0.323000,0.606000,-0.804000); -positions[267] = Vec3(-0.005000,0.833000,0.377000); -positions[268] = Vec3(0.037000,0.769000,0.441000); -positions[269] = Vec3(-0.043000,0.782000,0.299000); -positions[270] = Vec3(0.488000,-0.477000,0.174000); -positions[271] = Vec3(0.401000,-0.492000,0.221000); -positions[272] = Vec3(0.471000,-0.451000,0.079000); -positions[273] = Vec3(-0.198000,-0.582000,0.657000); -positions[274] = Vec3(-0.099000,-0.574000,0.671000); -positions[275] = Vec3(-0.243000,-0.498000,0.688000); -positions[276] = Vec3(-0.472000,0.575000,0.078000); -positions[277] = Vec3(-0.526000,0.554000,0.159000); -positions[278] = Vec3(-0.381000,0.534000,0.087000); -positions[279] = Vec3(0.527000,0.256000,0.328000); -positions[280] = Vec3(0.554000,0.197000,0.253000); -positions[281] = Vec3(0.527000,0.351000,0.297000); -positions[282] = Vec3(-0.108000,-0.639000,-0.274000); -positions[283] = Vec3(-0.017000,-0.678000,-0.287000); -positions[284] = Vec3(-0.100000,-0.543000,-0.250000); -positions[285] = Vec3(-0.798000,-0.515000,-0.522000); -positions[286] = Vec3(-0.878000,-0.538000,-0.467000); -positions[287] = Vec3(-0.715000,-0.541000,-0.473000); -positions[288] = Vec3(-0.270000,-0.233000,-0.237000); -positions[289] = Vec3(-0.243000,-0.199000,-0.327000); -positions[290] = Vec3(-0.191000,-0.271000,-0.191000); -positions[291] = Vec3(-0.751000,-0.667000,-0.762000); -positions[292] = Vec3(-0.791000,-0.623000,-0.681000); -positions[293] = Vec3(-0.792000,-0.630000,-0.845000); -positions[294] = Vec3(-0.224000,-0.763000,-0.783000); -positions[295] = Vec3(-0.219000,-0.682000,-0.724000); -positions[296] = Vec3(-0.310000,-0.761000,-0.834000); -positions[297] = Vec3(0.915000,0.089000,-0.460000); -positions[298] = Vec3(0.940000,0.069000,-0.555000); -positions[299] = Vec3(0.987000,0.145000,-0.418000); -positions[300] = Vec3(-0.882000,-0.746000,-0.143000); -positions[301] = Vec3(-0.981000,-0.740000,-0.133000); -positions[302] = Vec3(-0.859000,-0.826000,-0.199000); -positions[303] = Vec3(0.705000,-0.812000,0.368000); -positions[304] = Vec3(0.691000,-0.805000,0.467000); -positions[305] = Vec3(0.789000,-0.863000,0.350000); -positions[306] = Vec3(0.410000,0.813000,-0.611000); -positions[307] = Vec3(0.496000,0.825000,-0.561000); -positions[308] = Vec3(0.368000,0.726000,-0.584000); -positions[309] = Vec3(-0.588000,0.386000,-0.600000); -positions[310] = Vec3(-0.567000,0.460000,-0.536000); -positions[311] = Vec3(-0.677000,0.403000,-0.643000); -positions[312] = Vec3(0.064000,-0.298000,-0.531000); -positions[313] = Vec3(0.018000,-0.216000,-0.565000); -positions[314] = Vec3(0.162000,-0.279000,-0.522000); -positions[315] = Vec3(0.367000,-0.762000,0.501000); -positions[316] = Vec3(0.360000,-0.679000,0.445000); -positions[317] = Vec3(0.371000,-0.842000,0.441000); -positions[318] = Vec3(0.566000,0.537000,0.865000); -positions[319] = Vec3(0.578000,0.603000,0.791000); -positions[320] = Vec3(0.612000,0.571000,0.948000); -positions[321] = Vec3(-0.610000,-0.514000,0.388000); -positions[322] = Vec3(-0.560000,-0.437000,0.428000); -positions[323] = Vec3(-0.705000,-0.512000,0.420000); -positions[324] = Vec3(-0.590000,-0.417000,-0.720000); -positions[325] = Vec3(-0.543000,-0.404000,-0.633000); -positions[326] = Vec3(-0.656000,-0.491000,-0.711000); -positions[327] = Vec3(-0.280000,0.639000,0.472000); -positions[328] = Vec3(-0.311000,0.700000,0.545000); -positions[329] = Vec3(-0.230000,0.691000,0.403000); -positions[330] = Vec3(0.354000,-0.352000,-0.533000); -positions[331] = Vec3(0.333000,-0.396000,-0.620000); -positions[332] = Vec3(0.451000,-0.326000,-0.530000); -positions[333] = Vec3(0.402000,0.751000,-0.264000); -positions[334] = Vec3(0.470000,0.806000,-0.311000); -positions[335] = Vec3(0.442000,0.663000,-0.237000); -positions[336] = Vec3(-0.275000,0.779000,-0.192000); -positions[337] = Vec3(-0.367000,0.817000,-0.197000); -positions[338] = Vec3(-0.215000,0.826000,-0.257000); -positions[339] = Vec3(-0.849000,0.105000,-0.092000); -positions[340] = Vec3(-0.843000,0.190000,-0.144000); -positions[341] = Vec3(-0.817000,0.029000,-0.149000); -positions[342] = Vec3(0.504000,0.050000,-0.122000); -positions[343] = Vec3(0.462000,-0.007000,-0.192000); -positions[344] = Vec3(0.438000,0.119000,-0.090000); -positions[345] = Vec3(0.573000,0.870000,-0.833000); -positions[346] = Vec3(0.617000,0.959000,-0.842000); -positions[347] = Vec3(0.510000,0.870000,-0.756000); -positions[348] = Vec3(-0.502000,0.862000,-0.817000); -positions[349] = Vec3(-0.577000,0.862000,-0.883000); -positions[350] = Vec3(-0.465000,0.770000,-0.808000); -positions[351] = Vec3(-0.653000,0.525000,0.275000); -positions[352] = Vec3(-0.640000,0.441000,0.329000); -positions[353] = Vec3(-0.682000,0.599000,0.335000); -positions[354] = Vec3(0.307000,0.213000,-0.631000); -positions[355] = Vec3(0.284000,0.250000,-0.541000); -positions[356] = Vec3(0.277000,0.118000,-0.637000); -positions[357] = Vec3(0.037000,-0.552000,-0.580000); -positions[358] = Vec3(0.090000,-0.601000,-0.512000); -positions[359] = Vec3(0.059000,-0.454000,-0.575000); -positions[360] = Vec3(0.732000,0.634000,-0.798000); -positions[361] = Vec3(0.791000,0.608000,-0.874000); -positions[362] = Vec3(0.704000,0.730000,-0.809000); -positions[363] = Vec3(-0.134000,-0.927000,-0.008000); -positions[364] = Vec3(-0.180000,-0.934000,-0.097000); -positions[365] = Vec3(-0.196000,-0.883000,0.058000); -positions[366] = Vec3(0.307000,0.063000,0.618000); -positions[367] = Vec3(0.296000,0.157000,0.651000); -positions[368] = Vec3(0.302000,-0.000000,0.695000); -positions[369] = Vec3(-0.240000,0.367000,0.374000); -positions[370] = Vec3(-0.238000,0.291000,0.438000); -positions[371] = Vec3(-0.288000,0.444000,0.414000); -positions[372] = Vec3(-0.839000,0.766000,-0.896000); -positions[373] = Vec3(-0.824000,0.787000,-0.800000); -positions[374] = Vec3(-0.869000,0.671000,-0.905000); -positions[375] = Vec3(-0.882000,-0.289000,-0.162000); -positions[376] = Vec3(-0.902000,-0.245000,-0.250000); -positions[377] = Vec3(-0.843000,-0.380000,-0.178000); -positions[378] = Vec3(-0.003000,-0.344000,-0.257000); -positions[379] = Vec3(0.011000,-0.317000,-0.352000); -positions[380] = Vec3(0.080000,-0.322000,-0.204000); -positions[381] = Vec3(0.350000,0.898000,-0.058000); -positions[382] = Vec3(0.426000,0.942000,-0.010000); -positions[383] = Vec3(0.385000,0.851000,-0.140000); -positions[384] = Vec3(-0.322000,0.274000,0.125000); -positions[385] = Vec3(-0.383000,0.199000,0.148000); -positions[386] = Vec3(-0.300000,0.326000,0.208000); -positions[387] = Vec3(-0.559000,0.838000,0.042000); -positions[388] = Vec3(-0.525000,0.745000,0.057000); -positions[389] = Vec3(-0.541000,0.865000,-0.053000); -positions[390] = Vec3(-0.794000,-0.529000,0.849000); -positions[391] = Vec3(-0.787000,-0.613000,0.794000); -positions[392] = Vec3(-0.732000,-0.460000,0.813000); -positions[393] = Vec3(0.319000,0.810000,-0.913000); -positions[394] = Vec3(0.412000,0.846000,-0.908000); -positions[395] = Vec3(0.313000,0.725000,-0.861000); -positions[396] = Vec3(0.339000,0.509000,-0.856000); -positions[397] = Vec3(0.287000,0.426000,-0.873000); -positions[398] = Vec3(0.416000,0.514000,-0.920000); -positions[399] = Vec3(0.511000,0.415000,-0.054000); -positions[400] = Vec3(0.493000,0.460000,0.034000); -positions[401] = Vec3(0.553000,0.480000,-0.117000); -positions[402] = Vec3(-0.724000,0.380000,-0.184000); -positions[403] = Vec3(-0.769000,0.443000,-0.120000); -positions[404] = Vec3(-0.631000,0.411000,-0.201000); -positions[405] = Vec3(-0.702000,0.207000,-0.385000); -positions[406] = Vec3(-0.702000,0.271000,-0.308000); -positions[407] = Vec3(-0.674000,0.255000,-0.468000); -positions[408] = Vec3(0.008000,-0.536000,0.200000); -positions[409] = Vec3(-0.085000,-0.515000,0.169000); -positions[410] = Vec3(0.018000,-0.635000,0.213000); -positions[411] = Vec3(0.088000,-0.061000,0.927000); -positions[412] = Vec3(0.046000,-0.147000,0.900000); -positions[413] = Vec3(0.182000,-0.058000,0.893000); -positions[414] = Vec3(0.504000,-0.294000,0.910000); -positions[415] = Vec3(0.570000,-0.220000,0.919000); -positions[416] = Vec3(0.548000,-0.373000,0.868000); -positions[417] = Vec3(-0.860000,0.796000,-0.624000); -positions[418] = Vec3(-0.819000,0.764000,-0.538000); -positions[419] = Vec3(-0.956000,0.769000,-0.627000); -positions[420] = Vec3(0.040000,0.544000,-0.748000); -positions[421] = Vec3(0.125000,0.511000,-0.789000); -positions[422] = Vec3(0.053000,0.559000,-0.650000); -positions[423] = Vec3(0.189000,0.520000,-0.140000); -positions[424] = Vec3(0.248000,0.480000,-0.210000); -positions[425] = Vec3(0.131000,0.591000,-0.181000); -positions[426] = Vec3(-0.493000,-0.912000,-0.202000); -positions[427] = Vec3(-0.454000,-0.823000,-0.182000); -positions[428] = Vec3(-0.483000,-0.932000,-0.299000); -positions[429] = Vec3(0.815000,0.572000,0.325000); -positions[430] = Vec3(0.822000,0.483000,0.279000); -positions[431] = Vec3(0.721000,0.606000,0.317000); -positions[432] = Vec3(-0.205000,0.604000,-0.656000); -positions[433] = Vec3(-0.243000,0.535000,-0.594000); -positions[434] = Vec3(-0.123000,0.568000,-0.700000); -positions[435] = Vec3(0.252000,-0.298000,-0.118000); -positions[436] = Vec3(0.222000,-0.241000,-0.042000); -positions[437] = Vec3(0.245000,-0.395000,-0.092000); -positions[438] = Vec3(0.671000,0.464000,-0.593000); -positions[439] = Vec3(0.637000,0.375000,-0.623000); -positions[440] = Vec3(0.697000,0.518000,-0.673000); -positions[441] = Vec3(0.930000,-0.184000,-0.397000); -positions[442] = Vec3(0.906000,-0.202000,-0.492000); -positions[443] = Vec3(0.960000,-0.090000,-0.387000); -positions[444] = Vec3(0.473000,0.500000,0.191000); -positions[445] = Vec3(0.534000,0.580000,0.195000); -positions[446] = Vec3(0.378000,0.531000,0.198000); -positions[447] = Vec3(0.159000,-0.725000,-0.396000); -positions[448] = Vec3(0.181000,-0.786000,-0.320000); -positions[449] = Vec3(0.169000,-0.774000,-0.482000); -positions[450] = Vec3(-0.515000,-0.803000,-0.628000); -positions[451] = Vec3(-0.491000,-0.866000,-0.702000); -positions[452] = Vec3(-0.605000,-0.763000,-0.646000); -positions[453] = Vec3(-0.560000,0.855000,0.309000); -positions[454] = Vec3(-0.646000,0.824000,0.351000); -positions[455] = Vec3(-0.564000,0.841000,0.210000); -positions[456] = Vec3(-0.103000,-0.115000,-0.708000); -positions[457] = Vec3(-0.042000,-0.085000,-0.781000); -positions[458] = Vec3(-0.141000,-0.204000,-0.730000); -positions[459] = Vec3(-0.610000,-0.131000,-0.734000); -positions[460] = Vec3(-0.526000,-0.126000,-0.788000); -positions[461] = Vec3(-0.633000,-0.227000,-0.716000); -positions[462] = Vec3(0.083000,-0.604000,-0.840000); -positions[463] = Vec3(0.078000,-0.605000,-0.740000); -positions[464] = Vec3(0.000000,-0.645000,-0.878000); -positions[465] = Vec3(0.688000,-0.200000,-0.146000); -positions[466] = Vec3(0.632000,-0.119000,-0.137000); -positions[467] = Vec3(0.740000,-0.196000,-0.232000); -positions[468] = Vec3(0.903000,0.086000,0.133000); -positions[469] = Vec3(0.954000,0.087000,0.047000); -positions[470] = Vec3(0.959000,0.044000,0.204000); -positions[471] = Vec3(-0.136000,0.135000,0.523000); -positions[472] = Vec3(-0.063000,0.118000,0.456000); -positions[473] = Vec3(-0.167000,0.048000,0.561000); -positions[474] = Vec3(-0.474000,-0.289000,0.477000); -positions[475] = Vec3(-0.407000,-0.277000,0.403000); -positions[476] = Vec3(-0.514000,-0.200000,0.500000); -positions[477] = Vec3(0.130000,-0.068000,-0.011000); -positions[478] = Vec3(0.089000,-0.142000,0.042000); -positions[479] = Vec3(0.194000,-0.017000,0.047000); -positions[480] = Vec3(-0.582000,0.927000,0.672000); -positions[481] = Vec3(-0.522000,0.846000,0.674000); -positions[482] = Vec3(-0.542000,0.996000,0.612000); -positions[483] = Vec3(0.830000,-0.589000,-0.440000); -positions[484] = Vec3(0.825000,-0.556000,-0.345000); -positions[485] = Vec3(0.744000,-0.570000,-0.486000); -positions[486] = Vec3(0.672000,-0.246000,0.154000); -positions[487] = Vec3(0.681000,-0.236000,0.055000); -positions[488] = Vec3(0.632000,-0.335000,0.175000); -positions[489] = Vec3(-0.212000,-0.142000,-0.468000); -positions[490] = Vec3(-0.159000,-0.132000,-0.552000); -positions[491] = Vec3(-0.239000,-0.052000,-0.434000); -positions[492] = Vec3(-0.021000,0.175000,-0.899000); -positions[493] = Vec3(0.018000,0.090000,-0.935000); -positions[494] = Vec3(-0.119000,0.177000,-0.918000); -positions[495] = Vec3(0.263000,0.326000,0.720000); -positions[496] = Vec3(0.184000,0.377000,0.686000); -positions[497] = Vec3(0.254000,0.311000,0.818000); -positions[498] = Vec3(-0.668000,-0.250000,0.031000); -positions[499] = Vec3(-0.662000,-0.343000,0.068000); -positions[500] = Vec3(-0.727000,-0.250000,-0.049000); -positions[501] = Vec3(0.822000,-0.860000,-0.490000); -positions[502] = Vec3(0.862000,-0.861000,-0.582000); -positions[503] = Vec3(0.832000,-0.768000,-0.450000); -positions[504] = Vec3(0.916000,0.910000,0.291000); -positions[505] = Vec3(0.979000,0.948000,0.223000); -positions[506] = Vec3(0.956000,0.827000,0.330000); -positions[507] = Vec3(-0.358000,-0.255000,0.044000); -positions[508] = Vec3(-0.450000,-0.218000,0.051000); -positions[509] = Vec3(-0.320000,-0.235000,-0.046000); -positions[510] = Vec3(0.372000,-0.574000,-0.372000); -positions[511] = Vec3(0.359000,-0.481000,-0.406000); -positions[512] = Vec3(0.288000,-0.626000,-0.385000); -positions[513] = Vec3(-0.248000,-0.570000,-0.573000); -positions[514] = Vec3(-0.188000,-0.567000,-0.493000); -positions[515] = Vec3(-0.323000,-0.506000,-0.560000); -positions[516] = Vec3(-0.823000,-0.764000,0.696000); -positions[517] = Vec3(-0.893000,-0.811000,0.750000); -positions[518] = Vec3(-0.764000,-0.832000,0.653000); -positions[519] = Vec3(-0.848000,0.236000,-0.891000); -positions[520] = Vec3(-0.856000,0.200000,-0.984000); -positions[521] = Vec3(-0.850000,0.160000,-0.826000); -positions[522] = Vec3(0.590000,-0.375000,0.491000); -positions[523] = Vec3(0.632000,-0.433000,0.421000); -positions[524] = Vec3(0.546000,-0.296000,0.447000); -positions[525] = Vec3(-0.153000,0.385000,-0.481000); -positions[526] = Vec3(-0.080000,0.454000,-0.477000); -positions[527] = Vec3(-0.125000,0.310000,-0.540000); -positions[528] = Vec3(0.255000,-0.514000,0.290000); -positions[529] = Vec3(0.159000,-0.513000,0.263000); -positions[530] = Vec3(0.267000,-0.461000,0.374000); -positions[531] = Vec3(0.105000,-0.849000,-0.136000); -positions[532] = Vec3(0.028000,-0.882000,-0.082000); -positions[533] = Vec3(0.190000,-0.879000,-0.094000); -positions[534] = Vec3(0.672000,0.203000,-0.373000); -positions[535] = Vec3(0.762000,0.187000,-0.413000); -positions[536] = Vec3(0.680000,0.208000,-0.274000); -positions[537] = Vec3(0.075000,0.345000,0.033000); -positions[538] = Vec3(-0.017000,0.317000,0.004000); -positions[539] = Vec3(0.106000,0.422000,-0.023000); -positions[540] = Vec3(-0.422000,0.856000,-0.464000); -positions[541] = Vec3(-0.479000,0.908000,-0.527000); -positions[542] = Vec3(-0.326000,0.868000,-0.488000); -positions[543] = Vec3(0.072000,0.166000,0.318000); -positions[544] = Vec3(0.055000,0.249000,0.264000); -positions[545] = Vec3(0.162000,0.129000,0.296000); -positions[546] = Vec3(-0.679000,-0.527000,0.119000); -positions[547] = Vec3(-0.778000,-0.538000,0.121000); -positions[548] = Vec3(-0.645000,-0.512000,0.212000); -positions[549] = Vec3(0.613000,0.842000,-0.431000); -positions[550] = Vec3(0.669000,0.923000,-0.448000); -positions[551] = Vec3(0.672000,0.762000,-0.428000); -positions[552] = Vec3(-0.369000,-0.095000,-0.903000); -positions[553] = Vec3(-0.336000,-0.031000,-0.972000); -positions[554] = Vec3(-0.303000,-0.101000,-0.828000); -positions[555] = Vec3(0.716000,0.565000,-0.154000); -positions[556] = Vec3(0.735000,0.630000,-0.080000); -positions[557] = Vec3(0.776000,0.485000,-0.145000); -positions[558] = Vec3(-0.412000,-0.642000,-0.229000); -positions[559] = Vec3(-0.421000,-0.652000,-0.130000); -positions[560] = Vec3(-0.316000,-0.649000,-0.255000); -positions[561] = Vec3(0.390000,-0.121000,-0.302000); -positions[562] = Vec3(0.299000,-0.080000,-0.304000); -positions[563] = Vec3(0.383000,-0.215000,-0.270000); -positions[564] = Vec3(-0.188000,0.883000,-0.608000); -positions[565] = Vec3(-0.215000,0.794000,-0.645000); -positions[566] = Vec3(-0.187000,0.951000,-0.681000); -positions[567] = Vec3(-0.637000,0.325000,0.449000); -positions[568] = Vec3(-0.572000,0.251000,0.438000); -positions[569] = Vec3(-0.617000,0.375000,0.533000); -positions[570] = Vec3(0.594000,0.745000,0.652000); -positions[571] = Vec3(0.644000,0.830000,0.633000); -positions[572] = Vec3(0.506000,0.747000,0.604000); -positions[573] = Vec3(-0.085000,0.342000,-0.220000); -positions[574] = Vec3(-0.102000,0.373000,-0.314000); -positions[575] = Vec3(-0.169000,0.305000,-0.182000); -positions[576] = Vec3(-0.132000,-0.928000,-0.345000); -positions[577] = Vec3(-0.094000,-0.837000,-0.330000); -positions[578] = Vec3(-0.140000,-0.945000,-0.444000); -positions[579] = Vec3(0.859000,-0.488000,0.016000); -positions[580] = Vec3(0.813000,-0.473000,0.104000); -positions[581] = Vec3(0.903000,-0.403000,-0.014000); -positions[582] = Vec3(0.661000,-0.072000,-0.909000); -positions[583] = Vec3(0.615000,0.016000,-0.922000); -positions[584] = Vec3(0.760000,-0.060000,-0.916000); -positions[585] = Vec3(-0.454000,-0.011000,-0.142000); -positions[586] = Vec3(-0.550000,-0.022000,-0.169000); -positions[587] = Vec3(-0.398000,-0.078000,-0.190000); -positions[588] = Vec3(0.859000,-0.906000,0.861000); -positions[589] = Vec3(0.913000,-0.975000,0.909000); -positions[590] = Vec3(0.827000,-0.837000,0.927000); -positions[591] = Vec3(-0.779000,-0.878000,0.087000); -positions[592] = Vec3(-0.802000,-0.825000,0.005000); -positions[593] = Vec3(-0.698000,-0.934000,0.068000); -positions[594] = Vec3(-0.001000,-0.293000,0.851000); -positions[595] = Vec3(-0.072000,-0.305000,0.781000); -positions[596] = Vec3(0.000000,-0.372000,0.911000); -positions[597] = Vec3(0.221000,-0.548000,-0.018000); -positions[598] = Vec3(0.156000,-0.621000,-0.039000); -positions[599] = Vec3(0.225000,-0.534000,0.080000); -positions[600] = Vec3(0.079000,-0.622000,0.653000); -positions[601] = Vec3(0.078000,-0.669000,0.741000); -positions[602] = Vec3(0.161000,-0.650000,0.602000); -positions[603] = Vec3(0.672000,-0.471000,-0.238000); -positions[604] = Vec3(0.594000,-0.521000,-0.200000); -positions[605] = Vec3(0.669000,-0.376000,-0.207000); -positions[606] = Vec3(-0.038000,0.192000,-0.635000); -positions[607] = Vec3(-0.042000,0.102000,-0.591000); -positions[608] = Vec3(-0.035000,0.181000,-0.734000); -positions[609] = Vec3(0.428000,0.424000,0.520000); -positions[610] = Vec3(0.458000,0.352000,0.458000); -positions[611] = Vec3(0.389000,0.384000,0.603000); -positions[612] = Vec3(-0.157000,-0.375000,-0.758000); -positions[613] = Vec3(-0.250000,-0.400000,-0.785000); -positions[614] = Vec3(-0.131000,-0.425000,-0.676000); -positions[615] = Vec3(0.317000,0.547000,-0.582000); -positions[616] = Vec3(0.355000,0.488000,-0.510000); -positions[617] = Vec3(0.357000,0.521000,-0.670000); -positions[618] = Vec3(0.812000,-0.276000,0.687000); -positions[619] = Vec3(0.844000,-0.266000,0.593000); -positions[620] = Vec3(0.733000,-0.338000,0.689000); -positions[621] = Vec3(-0.438000,0.214000,-0.750000); -positions[622] = Vec3(-0.386000,0.149000,-0.695000); -positions[623] = Vec3(-0.487000,0.277000,-0.689000); -positions[624] = Vec3(-0.861000,0.034000,-0.708000); -positions[625] = Vec3(-0.924000,-0.038000,-0.739000); -positions[626] = Vec3(-0.768000,-0.002000,-0.708000); -positions[627] = Vec3(0.770000,-0.532000,0.301000); -positions[628] = Vec3(0.724000,-0.619000,0.318000); -positions[629] = Vec3(0.861000,-0.535000,0.342000); -positions[630] = Vec3(0.618000,-0.295000,-0.578000); -positions[631] = Vec3(0.613000,-0.213000,-0.521000); -positions[632] = Vec3(0.707000,-0.298000,-0.623000); -positions[633] = Vec3(-0.510000,0.052000,0.168000); -positions[634] = Vec3(-0.475000,0.011000,0.084000); -positions[635] = Vec3(-0.600000,0.014000,0.188000); -positions[636] = Vec3(-0.562000,0.453000,0.691000); -positions[637] = Vec3(-0.621000,0.533000,0.695000); -positions[638] = Vec3(-0.547000,0.418000,0.784000); -positions[639] = Vec3(-0.269000,0.221000,0.882000); -positions[640] = Vec3(-0.353000,0.220000,0.936000); -positions[641] = Vec3(-0.267000,0.304000,0.826000); -positions[642] = Vec3(0.039000,-0.785000,0.300000); -positions[643] = Vec3(0.138000,-0.796000,0.291000); -positions[644] = Vec3(-0.001000,-0.871000,0.332000); -positions[645] = Vec3(0.875000,-0.216000,0.337000); -positions[646] = Vec3(0.798000,-0.251000,0.283000); -positions[647] = Vec3(0.843000,-0.145000,0.399000); diff --git a/platforms/reference/tests/water_GromacsForces.dat b/platforms/reference/tests/water_GromacsForces.dat deleted file mode 100644 index 34db43d003bc67813cf3e12fb0a6798dddee3383..0000000000000000000000000000000000000000 --- a/platforms/reference/tests/water_GromacsForces.dat +++ /dev/null @@ -1,648 +0,0 @@ -ASSERT_EQUAL_VEC(Vec3( 1.53862e+01, -9.40085e+01, 8.09974e+01), forces1[0], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.16025e+01, 3.42647e+01, 7.90920e+01), forces1[1], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.96273e+01, 7.80017e+01, 7.38545e+00), forces1[2], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.28843e+01, -1.89277e+01, -2.54913e+02), forces1[3], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.22785e+01, -3.88301e+01, -2.81351e+02), forces1[4], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.09090e+02, 1.75451e+02, -1.29874e+02), forces1[5], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.95616e+02, 5.36132e+02, -4.55554e+02), forces1[6], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.85944e+02, -1.19523e+02, 7.88721e+01), forces1[7], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.13615e+02, -6.17221e+01, 1.57270e+02), forces1[8], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.66977e+01, -6.36326e+01, 1.65651e+02), forces1[9], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.62216e+00, 1.13905e+02, -5.46500e+01), forces1[10], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.21610e+01, 2.96483e+01, -6.34852e+01), forces1[11], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.01658e+01, 1.07406e+02, 2.69335e+01), forces1[12], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.14730e+01, 9.63730e+01, 1.37884e+02), forces1[13], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.45980e+02, 2.47183e+01, 1.30466e+02), forces1[14], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.15321e+01, 2.08457e+02, 4.15324e+02), forces1[15], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.53856e+02, 6.74890e+01, -7.69439e+01), forces1[16], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.56804e+02, 1.82869e+02, 2.35455e+02), forces1[17], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.78646e+02, 4.16416e+01, -2.55139e+02), forces1[18], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.51530e+01, 3.24295e+01, 1.87664e+01), forces1[19], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.04660e+02, -2.25016e+02, 5.95159e+01), forces1[20], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.93048e+01, 3.22523e+01, 1.06075e+02), forces1[21], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.84792e+01, 1.15745e+02, 9.08190e+01), forces1[22], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.22807e+01, -3.30640e+01, 2.38179e+01), forces1[23], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.10281e+01, 5.37699e+01, 1.70935e+02), forces1[24], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.55507e+01, 2.52756e+02, 1.34829e+02), forces1[25], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.62832e+01, -6.20729e+01, -9.53832e+01), forces1[26], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.93262e+01, -8.64360e+01, -9.20284e+01), forces1[27], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.72500e+00, -1.78213e+02, 1.54062e+01), forces1[28], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.46320e+02, 1.93997e+01, -1.06660e+01), forces1[29], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.02138e+01, 1.84585e+02, -1.96791e+02), forces1[30], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.44392e+01, -1.63547e+02, -1.34078e+02), forces1[31], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.64487e+01, -1.01917e+02, -2.94291e+01), forces1[32], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.62979e+02, -8.44104e+01, 4.45776e+00), forces1[33], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.37054e+02, -1.64893e+01, 1.62445e+02), forces1[34], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.79879e+02, -1.28158e+02, 1.46225e+02), forces1[35], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.18701e+02, 1.96825e+01, 1.78171e+02), forces1[36], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.05936e+01, -1.32890e+02, 3.44742e+01), forces1[37], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.00952e+01, -2.04575e+02, 1.62082e+02), forces1[38], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.48119e+02, -5.51581e+01, 7.61226e+01), forces1[39], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.54706e+02, -7.79318e+01, -1.19613e+02), forces1[40], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.99297e+02, 1.36546e+02, 1.92910e+02), forces1[41], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.30607e+02, 9.45022e+01, -1.15484e+02), forces1[42], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.87492e+01, 3.38234e+01, -1.13593e+02), forces1[43], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.13434e+01, 1.75865e+02, 7.10201e+01), forces1[44], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.98165e+02, -1.81350e+02, -1.38226e+02), forces1[45], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58294e+02, -1.74709e+02, -1.91109e+02), forces1[46], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.09248e+02, -1.57551e+02, -2.54299e+02), forces1[47], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.75881e+01, -1.06801e+02, -8.62635e+01), forces1[48], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.96592e+02, -1.56687e+01, -9.07580e+01), forces1[49], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.07471e+02, -1.59465e+02, 1.41495e+01), forces1[50], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.97824e+02, -1.58296e+01, -3.62499e+01), forces1[51], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.93794e+01, 2.56345e+01, 5.39562e+01), forces1[52], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.00946e+02, 1.34042e+02, 8.37801e+01), forces1[53], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.44101e+01, 1.04507e+02, -7.20338e+00), forces1[54], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.36940e+02, 1.45544e+02, 7.49711e+01), forces1[55], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.50152e+00, 2.02504e+02, 1.20796e+02), forces1[56], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.94096e+02, -4.04458e+01, 5.69722e+01), forces1[57], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.39977e+01, -1.51534e+02, -4.73434e+01), forces1[58], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.19892e+01, -9.31361e+01, -3.38910e+01), forces1[59], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.17884e+01, 1.00547e+02, -1.33243e+02), forces1[60], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.71112e+01, 6.21495e+01, 1.61566e+02), forces1[61], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.56825e+01, 6.35038e+01, -1.08713e+02), forces1[62], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.42227e+02, 2.10144e+02, 1.68761e+02), forces1[63], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.92938e+02, -1.15636e+02, -2.42672e+02), forces1[64], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.46946e+01, 1.75845e+02, 2.87636e+01), forces1[65], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.35161e+01, -3.00661e+01, -1.51624e+02), forces1[66], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.77087e+01, 1.55190e+02, 2.57432e+01), forces1[67], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.98358e+00, -2.76639e+02, -2.72293e+01), forces1[68], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05003e+02, 1.07560e+02, 3.34506e+01), forces1[69], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.18245e+01, -1.75537e+01, -9.57309e+01), forces1[70], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.67253e+02, 5.59922e-01, 1.01207e+02), forces1[71], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.62670e+02, -6.88248e+01, -4.21201e+02), forces1[72], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.18113e+02, -5.78800e+01, -2.27353e+02), forces1[73], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.64922e+00, 9.21166e+01, -8.93683e+01), forces1[74], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.12201e+02, -3.27194e+01, 1.34264e+02), forces1[75], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.44131e+01, -7.40189e+01, 1.05403e+02), forces1[76], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.25775e+01, -1.36797e+02, 2.73836e+02), forces1[77], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.10304e+01, 7.16395e+01, 4.68672e+02), forces1[78], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.93444e+01, -2.15029e+02, -6.63119e+01), forces1[79], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.55389e+02, -3.73611e+02, 1.19751e+02), forces1[80], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.45909e+02, -1.24787e+02, 3.49148e+01), forces1[81], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.32739e+01, 2.95694e+02, -5.37526e+01), forces1[82], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.54390e+02, 4.53455e+02, -2.26764e+02), forces1[83], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.41532e+02, 4.99625e+01, -2.51478e+02), forces1[84], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.44295e+02, 3.25984e+02, -1.78338e+02), forces1[85], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.41100e+02, 7.63283e+01, 1.44488e+02), forces1[86], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.38640e+00, 2.32776e+02, 7.67636e+01), forces1[87], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.02516e+01, 2.34037e+02, 1.90372e+02), forces1[88], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.91986e+01, 6.06007e+01, -2.82869e+01), forces1[89], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.17690e+01, 2.95809e+02, 8.76127e+01), forces1[90], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.68695e+02, 3.01744e+02, -4.89279e+01), forces1[91], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.69699e+01, -8.28133e+01, 1.45608e+02), forces1[92], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06525e+02, -1.67708e+02, -8.84405e+01), forces1[93], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.24225e+02, -2.54622e+02, 6.45408e+01), forces1[94], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.17139e+01, 8.98704e+01, 1.46449e+02), forces1[95], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.77809e+01, -7.22944e+00, -1.54716e+02), forces1[96], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.09684e+01, -7.69721e+01, 4.92171e+01), forces1[97], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.39983e+01, -1.04019e+01, -1.19765e+02), forces1[98], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.69240e+02, -4.03667e+02, -1.80224e+01), forces1[99], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.94854e+01, 1.06162e+02, 2.06747e+02), forces1[100], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.37669e+02, 1.53252e+02, 2.04131e+02), forces1[101], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.32814e+02, 6.44910e+01, -3.37777e+02), forces1[102], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.66103e+02, 8.69357e+01, -1.09283e+02), forces1[103], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.18540e+01, 6.11078e+01, -1.30500e+02), forces1[104], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.89128e+02, -2.65106e+02, -1.28996e+02), forces1[105], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.45378e+01, -3.81579e+02, -1.11586e+02), forces1[106], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.79366e+01, -2.27092e+02, 2.32158e+02), forces1[107], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.14303e+02, 1.21953e+02, 3.08605e+01), forces1[108], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.95355e+02, 2.38433e+02, -3.78260e+01), forces1[109], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.25306e+02, -5.62806e+01, 2.93849e+02), forces1[110], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.32541e+02, 1.53253e+02, 1.18339e+02), forces1[111], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.26061e+02, 1.22366e+02, 6.31712e+00), forces1[112], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.68565e+02, 9.40491e+01, 4.12643e+01), forces1[113], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.19917e+02, -1.43527e+02, -2.21682e+02), forces1[114], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.93757e+01, 9.98556e+01, 7.38225e+01), forces1[115], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.87240e+01, -7.40610e+01, 1.37672e+02), forces1[116], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.90455e+01, -9.52131e+01, -4.21601e+02), forces1[117], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.97078e+02, 2.45509e+02, 9.26765e+01), forces1[118], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.98206e+02, 1.14032e+02, 8.71204e+01), forces1[119], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.19803e+02, 1.82722e+01, -3.52888e+00), forces1[120], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.30623e+02, 7.51475e-01, -4.84435e+01), forces1[121], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.02126e+01, 5.55326e+01, 2.67927e+00), forces1[122], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.87364e+02, 1.76214e+02, -3.09445e+02), forces1[123], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.85190e+02, -1.63720e+02, -7.15048e+01), forces1[124], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.65174e+02, -1.33924e+02, -6.94217e+01), forces1[125], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.39913e+00, 2.52232e+01, 5.05709e+01), forces1[126], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.63349e+02, 9.56277e+01, 5.30812e+01), forces1[127], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.92027e+01, -9.44704e+01, -7.51200e+00), forces1[128], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.24094e+02, 7.38856e+01, 1.76005e+02), forces1[129], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.92944e+01, 3.02317e+02, 1.39375e+02), forces1[130], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.66291e+01, 1.41333e+02, 6.15473e+00), forces1[131], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.36178e+01, -1.58532e+01, -8.84526e+00), forces1[132], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.48146e+01, -3.41461e+01, -5.24216e+01), forces1[133], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.99809e+01, 1.02879e+01, -5.01739e+01), forces1[134], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.62285e+02, -4.90274e+01, 3.03601e+01), forces1[135], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.06458e+02, -3.96124e+01, 1.03454e+02), forces1[136], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29243e+02, 6.18585e+01, -1.77272e+02), forces1[137], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.15853e+02, 2.19635e+02, -4.11751e+02), forces1[138], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.16425e+01, 8.23178e+01, 4.42405e+02), forces1[139], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.21858e+01, 4.82821e+01, 1.93947e+02), forces1[140], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.03450e+00, 2.30768e+01, 4.96796e+01), forces1[141], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.67572e+01, 7.23375e+01, 6.32957e+01), forces1[142], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.67345e+01, 1.26459e+01, 8.78382e+01), forces1[143], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.43687e+02, 1.76648e+01, 3.89767e+01), forces1[144], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.77056e+01, -9.46510e+01, -1.60263e+02), forces1[145], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.49800e+01, -2.68488e+01, 4.35106e+01), forces1[146], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.46710e+02, -5.25895e+01, -5.40524e+01), forces1[147], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.33729e+01, -4.69399e+01, -7.85015e+01), forces1[148], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.78265e+02, 3.19667e+00, -1.14997e+02), forces1[149], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.93773e+02, 7.50014e+01, -6.05331e+01), forces1[150], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.41372e+02, 1.04392e+02, -1.69148e+02), forces1[151], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.16023e+01, -7.84331e+00, -3.50072e+01), forces1[152], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.91752e+02, -8.75055e+01, 2.06764e+01), forces1[153], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.24104e+01, 2.55823e+02, 5.03937e+01), forces1[154], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.44493e+01, -1.88359e+02, -2.96664e+02), forces1[155], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.95569e+01, -1.48556e+02, -3.25981e+01), forces1[156], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.87067e+01, -3.24463e+01, -4.72036e+01), forces1[157], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.57426e+01, -4.76206e+01, -4.60343e+01), forces1[158], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.72900e+01, 5.41697e-01, -1.00543e+02), forces1[159], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.18469e+01, -6.73531e+00, 1.21198e+02), forces1[160], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.22925e+01, -1.12784e+01, 1.43764e+02), forces1[161], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.83447e+00, -1.45820e+01, -1.70105e+02), forces1[162], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.76068e+01, -7.28345e+00, -1.56973e+02), forces1[163], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.79090e+01, -1.92976e+02, -1.29871e+02), forces1[164], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.93110e+01, -1.12724e+02, 2.45046e+01), forces1[165], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.69833e+02, -9.82967e+01, 5.93923e+01), forces1[166], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.02085e+02, 9.27636e+00, 6.98988e+01), forces1[167], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.84338e+01, 1.41909e+02, -4.11691e+01), forces1[168], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.23626e+02, -1.04296e+02, 4.77490e+01), forces1[169], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.37003e+01, 4.13719e+01, 1.29790e+02), forces1[170], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.42874e+02, -8.32344e+01, -3.05737e+01), forces1[171], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.41293e+01, 7.66533e+01, 1.00918e+02), forces1[172], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.02752e+02, -3.11320e+01, -2.04248e+01), forces1[173], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.71192e+01, -3.13758e+02, 2.83511e+02), forces1[174], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.43170e+02, 1.60859e+02, 6.31587e+01), forces1[175], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.26734e+02, 1.91452e+02, -1.93402e+00), forces1[176], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.10931e+02, -1.64391e+01, -6.86948e+01), forces1[177], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.38600e+01, 2.32825e+02, -5.25593e+00), forces1[178], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.54520e+01, -1.88445e+02, -4.29131e+01), forces1[179], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.24785e+02, -1.05275e+02, -2.98944e+01), forces1[180], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05063e+02, -6.53701e+01, 3.24520e+01), forces1[181], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.53521e+01, -9.04667e+01, -1.59980e+01), forces1[182], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.53764e+01, -3.04915e+01, 1.37888e+02), forces1[183], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.08932e+02, -9.35386e+01, -1.80955e+01), forces1[184], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.64566e+02, -1.70413e+02, -1.27317e+01), forces1[185], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.22672e+02, -3.22897e+02, 3.76674e+00), forces1[186], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.09547e+01, 3.37045e+02, -2.28878e+02), forces1[187], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.33946e+01, -1.01157e+02, -5.42970e+01), forces1[188], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.88672e+01, 2.85116e+01, -8.06985e-01), forces1[189], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.46034e+01, 1.78114e+02, -8.00020e+01), forces1[190], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.94640e+01, -7.09864e+01, 1.32544e+02), forces1[191], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.87772e+01, 8.20162e+01, -9.03433e+01), forces1[192], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.88680e+00, 8.72448e+01, -2.61573e+01), forces1[193], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.28593e+01, 2.51197e+00, -5.73722e+01), forces1[194], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.80417e+01, -7.37577e+01, 1.00134e+02), forces1[195], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.56974e+01, 6.72072e+00, -3.81539e+01), forces1[196], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.19232e+01, -3.54500e+01, 8.29318e+01), forces1[197], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.04113e+01, -4.41970e+01, 1.03326e+02), forces1[198], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.90881e+01, -1.12057e+02, 4.49403e+01), forces1[199], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.92007e+01, 3.55272e+01, -2.40127e+02), forces1[200], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.43562e+02, 6.23027e+02, -2.49264e+02), forces1[201], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.76198e+02, -3.02372e+02, 1.62332e+02), forces1[202], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.20299e+02, -2.27586e+02, 5.80333e+01), forces1[203], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.39488e+01, -1.07027e+00, -2.95203e+01), forces1[204], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.73263e+01, -1.08485e+02, 5.71183e+00), forces1[205], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.00039e+01, -2.49895e+02, 3.39192e+01), forces1[206], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.29623e+01, 1.32732e+02, 2.08741e+01), forces1[207], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.25554e+02, -1.56772e+01, -1.08164e+02), forces1[208], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.38717e+01, 1.52424e+01, 4.36131e+01), forces1[209], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.76367e+01, 1.13676e+02, -8.52759e+01), forces1[210], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.96298e+01, -9.30520e+01, -2.23851e+01), forces1[211], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.75027e+01, 1.64821e+02, 6.78676e+01), forces1[212], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.64028e+02, 3.12107e+01, 8.76753e+01), forces1[213], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.72632e+01, 5.28099e+01, 1.69700e+01), forces1[214], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.40135e+02, -7.08379e+01, -1.93293e+02), forces1[215], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.76562e+01, 2.29918e+02, 1.30609e+02), forces1[216], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.81640e+01, -2.90103e+02, 1.36757e+00), forces1[217], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.79291e+01, -2.93974e+02, 1.15436e+02), forces1[218], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.17338e+02, 1.11581e+02, 3.46029e+01), forces1[219], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.13346e+01, 3.15582e+01, 8.34550e+01), forces1[220], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.57677e+01, 1.77750e+01, 1.01067e+02), forces1[221], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.49827e+02, 8.44938e+01, 1.82793e+02), forces1[222], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.35999e+02, -1.89848e+02, -2.50760e+02), forces1[223], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.41970e+02, -1.87691e+02, -2.44756e+02), forces1[224], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.37302e+02, 8.71479e+01, -2.13793e+02), forces1[225], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.45010e+01, 2.44686e+02, -1.46416e+02), forces1[226], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.31020e+02, 1.28244e+02, 7.71140e+01), forces1[227], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.53744e+01, 1.29065e+02, 2.11056e+02), forces1[228], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.21924e+01, 9.95419e+00, -1.07719e+02), forces1[229], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.85756e+01, 9.52314e+01, 8.76358e+01), forces1[230], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.93957e+00, 1.53656e+02, -1.13339e+02), forces1[231], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.02172e+02, 8.87905e+01, -2.13701e+02), forces1[232], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.68099e+01, 1.91141e+02, 4.82221e+01), forces1[233], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.92679e+02, -2.47187e+02, 6.66851e+01), forces1[234], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.09980e+02, -1.43568e+02, -3.01739e+01), forces1[235], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.33167e+02, -3.32798e+02, 5.34600e+01), forces1[236], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.24223e+01, 9.76875e+00, 4.47725e+01), forces1[237], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.69405e+01, -8.41132e+01, -5.38952e+01), forces1[238], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.12010e+01, 1.44242e+01, -1.42070e+01), forces1[239], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.96477e+02, -4.50656e+02, 1.11329e+02), forces1[240], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.39163e+02, 1.76905e+02, 5.32392e+00), forces1[241], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.19746e+02, 1.76406e+02, 1.08727e+01), forces1[242], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.59625e+01, 1.08166e+01, 1.58314e+02), forces1[243], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.06176e+00, 1.91897e+01, 1.04092e+02), forces1[244], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.25838e+02, -4.67771e+00, -5.29138e+01), forces1[245], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.85855e+01, 1.78805e+01, -1.25884e+02), forces1[246], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.10798e+02, 9.15074e+01, 1.95780e+02), forces1[247], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.10572e+01, -1.48442e+02, 4.74169e+01), forces1[248], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.25479e+02, 2.55010e+01, 8.47576e+01), forces1[249], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.10701e+02, -6.73355e+01, 1.19913e+02), forces1[250], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.70376e+01, -6.37904e+00, 1.26145e+02), forces1[251], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.37588e+02, 1.02142e+02, 3.67769e+02), forces1[252], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.52584e+01, -7.07147e+01, 1.73165e+02), forces1[253], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.33450e+01, -2.18105e+02, -1.55636e+02), forces1[254], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.29365e+02, 7.78338e+01, -3.82730e+01), forces1[255], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.57375e+02, -6.66875e+01, -5.81031e+01), forces1[256], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.78245e+01, -1.40991e+01, 3.12933e+01), forces1[257], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.87648e+01, 2.74231e+02, 7.27232e+01), forces1[258], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.14936e+02, 1.20339e+01, -1.48413e+02), forces1[259], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.06217e+02, -3.13647e+01, -1.68616e+02), forces1[260], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.25106e+02, -2.60277e+02, -1.61136e+02), forces1[261], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.70346e+02, -9.32224e+00, -5.51717e+01), forces1[262], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.83465e+01, -2.28314e+02, -2.29566e+02), forces1[263], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.96075e+01, 1.48719e+02, 9.34688e+01), forces1[264], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.71370e+02, 1.70586e+02, -9.94963e+01), forces1[265], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.40521e+01, -1.08310e+02, 3.14259e+01), forces1[266], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.40452e+02, -2.41911e+02, 1.64059e+02), forces1[267], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.58929e+02, -1.31148e+02, -5.32733e+01), forces1[268], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.63751e+01, -2.73274e+02, -8.70685e+00), forces1[269], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.31634e+02, 2.19012e+02, -9.03802e+01), forces1[270], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.18020e+02, -1.92997e+01, -5.66165e+00), forces1[271], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.73518e+01, -3.11848e+01, -1.30020e+02), forces1[272], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.17466e+01, -3.68264e+02, 2.52209e+02), forces1[273], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05037e+02, -1.84548e+02, -2.29593e+02), forces1[274], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.33053e+02, -1.07748e+02, -3.35660e+02), forces1[275], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.26641e+00, -2.78635e+00, -6.24895e+01), forces1[276], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.89712e+01, -4.30328e+01, -1.35221e+02), forces1[277], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.08792e+01, 8.56090e+01, 7.01326e+01), forces1[278], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.41320e+01, 1.50690e+02, -3.83537e+01), forces1[279], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.77423e+01, 7.38950e+01, 4.53469e+01), forces1[280], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.26780e+02, 1.02539e+02, -1.85815e+02), forces1[281], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.00799e+01, 1.14102e+02, -1.69102e+02), forces1[282], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.76513e+01, 8.40729e+01, 4.44592e+01), forces1[283], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.26467e+01, 5.77168e+01, 6.22600e+01), forces1[284], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.50347e+02, 3.61081e+02, -9.77920e+00), forces1[285], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.74580e+01, -5.17134e+01, -4.47767e+02), forces1[286], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.34437e+01, -3.97370e+02, -1.13442e+02), forces1[287], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.99880e+01, 2.09852e+02, 5.14899e+02), forces1[288], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.66190e+02, -2.26561e+02, 2.12404e+02), forces1[289], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.70999e+02, -2.62349e+02, -1.29205e+01), forces1[290], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.14337e+01, 5.49849e+01, 1.43268e+02), forces1[291], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.68620e+02, 3.93466e+00, 5.58857e+01), forces1[292], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.80270e+02, -1.13992e+01, 5.41069e+01), forces1[293], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.97739e+00, 1.29408e+02, -5.46560e+01), forces1[294], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.63236e+02, -1.28719e+02, 3.12749e+02), forces1[295], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.22808e+01, 1.12193e+02, 7.28319e+01), forces1[296], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.99596e+01, 2.53709e+02, 4.53500e+01), forces1[297], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.27720e+01, 8.59763e+01, 6.45557e+01), forces1[298], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.27058e+02, 1.22472e+01, 1.29561e+01), forces1[299], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.06664e+01, -9.58809e+01, -3.53582e+01), forces1[300], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.53970e+01, 5.12101e+01, 1.16686e+02), forces1[301], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.73120e+02, -1.27943e+02, -7.31003e+01), forces1[302], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.71294e+01, 2.17024e+02, 9.31014e+01), forces1[303], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.68161e+01, -1.85137e+02, 1.09745e+02), forces1[304], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.01521e+02, 5.92488e+00, -4.76997e+01), forces1[305], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.65074e+02, -7.65780e+01, -1.09596e+02), forces1[306], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.97306e+01, 3.84936e+01, 3.18940e+02), forces1[307], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.03733e+01, -3.14806e+01, -1.59317e+02), forces1[308], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.43092e+01, -1.29125e+02, 1.63512e+02), forces1[309], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.96060e+02, 5.77380e+01, -1.44479e+02), forces1[310], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.06352e+01, 5.46684e+00, 1.26620e+02), forces1[311], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.68377e+01, 1.94905e+02, 2.46429e+02), forces1[312], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.30349e+02, 9.49772e+01, -1.35362e+02), forces1[313], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.38512e+01, 6.40803e+01, 8.45394e+00), forces1[314], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.42175e+01, -1.59403e+00, -1.30405e+02), forces1[315], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.35848e+01, -4.54779e+00, -1.44903e+02), forces1[316], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.11989e+02, -1.18639e+01, -1.17828e+02), forces1[317], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.49970e+02, 6.35046e+01, -2.88805e+01), forces1[318], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.44126e+01, -6.56825e+01, -1.14100e+02), forces1[319], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.77255e+01, -3.66261e+01, -1.19649e+02), forces1[320], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.97007e+01, 1.88165e+01, 4.66627e+01), forces1[321], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.11016e+01, 1.60276e+01, -8.72109e+01), forces1[322], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.62297e+01, 1.86600e+02, 7.68552e+01), forces1[323], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.39138e+02, 2.21671e+02, 8.47440e+01), forces1[324], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.74277e+02, -6.06765e+01, -4.23965e+01), forces1[325], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.63159e+02, -6.13787e+01, -2.54964e+01), forces1[326], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.00529e+01, -6.56450e+01, -3.53408e+01), forces1[327], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.27153e+01, -9.16080e+01, -6.10037e+00), forces1[328], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.07795e+01, -6.31786e+01, 3.97424e+01), forces1[329], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.69043e+01, 2.05417e+02, -1.55673e+02), forces1[330], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.55098e+01, 6.25556e+01, -9.57571e+01), forces1[331], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.75174e+00, -7.00953e+01, -1.65779e+01), forces1[332], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.48906e+02, -9.37035e+01, -1.37237e+02), forces1[333], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05834e+02, -1.77865e+02, -2.97998e+02), forces1[334], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.28005e+02, -1.09597e+02, -1.57769e+02), forces1[335], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.72019e+01, -2.11978e+02, -5.75568e+01), forces1[336], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.47436e+00, -2.09055e+01, 9.54998e+01), forces1[337], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.00282e+01, -1.18118e+02, 7.20331e+01), forces1[338], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.27051e+01, 3.88512e+01, -3.37338e+02), forces1[339], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.92361e+02, 4.97166e+01, -2.72135e+02), forces1[340], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.01809e+02, 3.12384e+01, -1.44869e+02), forces1[341], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.70524e+01, 6.01604e+01, -1.29958e+01), forces1[342], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.75977e+01, -6.85964e+01, 5.29205e+01), forces1[343], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.82625e+01, 5.36498e+01, -1.27179e+02), forces1[344], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.48158e+02, 1.18954e+01, 1.03589e+02), forces1[345], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.76540e+01, 8.31945e+01, 6.88425e-01), forces1[346], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.36393e+01, 5.97150e+00, 5.92665e+01), forces1[347], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.35596e+01, -3.45187e+01, -8.71186e+01), forces1[348], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.14736e+01, 1.99758e+01, 3.17942e+01), forces1[349], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.15299e+01, -6.78140e+01, -1.20761e+02), forces1[350], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.48161e+02, 1.61995e+02, -2.00364e+01), forces1[351], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.91715e+02, 4.15257e+01, -1.01480e+02), forces1[352], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.53537e+02, 2.47464e+01, -9.32184e+01), forces1[353], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.26331e+02, -1.50752e+02, 3.87836e+02), forces1[354], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.80549e+02, -1.04529e+02, 2.64609e+02), forces1[355], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.33299e+00, -1.04191e+02, 2.43081e+02), forces1[356], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.49417e+02, -2.10331e+02, -2.12391e+02), forces1[357], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.64496e+01, -8.65224e+01, 2.09075e+02), forces1[358], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.26786e+02, -1.04116e+02, 2.42460e+02), forces1[359], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.67930e+01, 5.02589e+01, 7.66782e+01), forces1[360], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.64137e+01, -5.87259e+01, 1.21975e+02), forces1[361], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.49708e+02, -5.25609e+01, -2.18329e+02), forces1[362], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.57850e+02, 5.04311e+02, -5.05894e+01), forces1[363], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.62212e+01, -2.94583e+02, 1.54045e+02), forces1[364], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.61638e+01, -1.84431e+02, 1.13710e+02), forces1[365], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.06173e+02, 9.36425e+01, 2.20592e+02), forces1[366], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.52623e+02, 1.46025e+02, 8.97291e+01), forces1[367], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.54323e+01, 2.26018e+02, 3.46087e+02), forces1[368], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.27183e+02, -2.09440e+01, -1.89634e+02), forces1[369], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.73506e+02, 2.01241e+02, 5.03574e+01), forces1[370], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.14771e+02, 1.73517e+02, 2.04777e+02), forces1[371], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.08803e+02, -4.69136e+01, 3.13410e+01), forces1[372], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.70333e+01, -9.14230e+01, 2.67645e+01), forces1[373], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.42054e+01, -1.04732e+02, -1.88134e+00), forces1[374], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.41157e+02, -1.07118e+02, 1.67297e+02), forces1[375], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.48356e+01, -8.47055e+01, 2.43285e+02), forces1[376], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.80449e+01, -1.46446e+02, 1.85386e+01), forces1[377], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.80687e+00, -6.96210e+01, 1.25177e+01), forces1[378], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23687e+01, -9.93136e+01, 1.45164e+00), forces1[379], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.95215e+00, 1.37747e+01, 4.23959e+00), forces1[380], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.62211e+01, 5.78277e+02, 3.68049e+01), forces1[381], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.65270e+02, -1.15374e+02, 1.18132e+02), forces1[382], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.66667e+02, -8.49100e+01, 2.96994e+02), forces1[383], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.99785e+02, 2.24069e+02, 2.30458e+01), forces1[384], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.83662e+01, 2.02857e+01, 5.16795e+01), forces1[385], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.30910e+02, -2.01579e+02, 1.48973e+02), forces1[386], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.48803e+01, -2.39996e+02, -6.71369e+01), forces1[387], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.45565e+02, -2.03246e+02, -2.90114e+02), forces1[388], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.28809e+01, 1.07210e+02, 5.79218e+01), forces1[389], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.33045e+01, 4.29217e+01, -2.51884e+01), forces1[390], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.01216e+02, 7.87171e+01, -8.84528e+01), forces1[391], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.94984e+01, -1.82575e+00, 6.60948e+01), forces1[392], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.01760e+01, 1.13645e+02, 1.03720e+02), forces1[393], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.02227e+01, -1.82477e+02, -1.93295e+02), forces1[394], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.88739e+01, -7.04682e+01, -1.97902e+02), forces1[395], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.08208e+02, 2.04314e+02, -9.77061e+01), forces1[396], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.97001e+02, -3.37469e+01, 1.30428e+02), forces1[397], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.39859e+01, 1.55789e+02, 9.33634e+01), forces1[398], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.71075e+01, 1.01907e+02, -1.62363e+02), forces1[399], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.51477e+02, -1.49509e+02, 2.38020e+01), forces1[400], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.62232e+02, 1.06486e+02, 1.02031e+02), forces1[401], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.24938e+01, 1.19921e+02, -9.62759e+01), forces1[402], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.56992e+01, -1.10020e+02, 1.49108e+02), forces1[403], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.10656e+01, 2.79604e+01, 1.91755e+02), forces1[404], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.74338e+00, -7.08051e+01, -1.05929e+02), forces1[405], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.64700e+02, -1.27130e+02, -5.91595e+01), forces1[406], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.30385e+01, 2.08802e+01, -3.57840e+01), forces1[407], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.08287e+02, 2.29771e+01, -2.26233e+02), forces1[408], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58650e+02, -1.14832e+02, -1.67121e+02), forces1[409], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.19177e+02, 9.05557e+01, 3.00496e+02), forces1[410], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.59854e+01, -1.24855e+02, 1.73507e+02), forces1[411], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01537e+02, -3.21500e+01, -1.62947e+02), forces1[412], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.68513e+01, 7.25403e+01, 1.10509e+02), forces1[413], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.74676e+01, 1.99661e+02, -3.30448e+02), forces1[414], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.89877e+02, -5.06918e+01, 2.07261e+02), forces1[415], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.05311e+01, 7.99589e+01, -9.81659e+01), forces1[416], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.19039e+02, 7.86478e+01, -1.36094e+02), forces1[417], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.39276e+01, 1.04302e+02, -1.99319e+02), forces1[418], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.07836e+01, -7.02154e+01, -3.20077e+01), forces1[419], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.04021e+01, -2.95668e+01, -9.62964e+01), forces1[420], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.13789e+01, 2.11057e+01, -7.24998e+01), forces1[421], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.89102e+01, -6.59244e+01, -8.40365e+01), forces1[422], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.19672e+02, -4.01191e+01, 6.57098e+01), forces1[423], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.87553e+01, -8.69171e+01, 2.43178e+01), forces1[424], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.67881e+01, -1.94017e+02, 4.85473e+01), forces1[425], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.07150e+02, -1.99734e+02, -2.09862e+01), forces1[426], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.36179e+02, 1.95193e+01, -1.32315e+02), forces1[427], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23323e+02, -6.31094e+01, -8.32846e+01), forces1[428], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.02495e+00, -1.45980e+02, 5.02494e+02), forces1[429], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.25222e+01, 1.02561e+02, 1.77325e+01), forces1[430], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.12695e+02, 3.15051e+02, -4.46404e+01), forces1[431], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.92031e+02, -9.89024e+01, -3.74688e+02), forces1[432], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.43199e+01, 7.50213e+01, 1.10375e+02), forces1[433], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.10558e+01, 2.43859e+02, 5.47498e+01), forces1[434], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.97703e+01, -1.48364e+02, -1.17638e+02), forces1[435], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.62397e+01, 4.88941e+01, -2.71595e+02), forces1[436], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.31340e+01, -8.20624e+01, 1.16191e+02), forces1[437], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.38517e+02, -7.62394e+01, -5.88168e+00), forces1[438], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.62851e+01, 6.72427e+01, -1.80434e+01), forces1[439], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.58861e+02, 1.15957e+02, -3.78160e+01), forces1[440], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.51803e+02, -4.12446e+01, -8.91525e+01), forces1[441], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.61287e+01, -1.36689e+02, -9.23537e+00), forces1[442], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.82943e+02, 1.05844e+02, -1.72148e+02), forces1[443], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.55236e+01, 9.18378e+01, 1.24360e+01), forces1[444], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.01227e+01, 8.39026e+01, 3.96741e+02), forces1[445], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.87558e+01, 5.47395e+01, -5.73402e+00), forces1[446], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.60796e+02, -5.52985e+01, 3.17802e+01), forces1[447], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.11619e+02, 1.11090e+02, 1.51495e+02), forces1[448], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.78213e+01, -1.33902e+02, 1.13590e+02), forces1[449], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.74607e+02, -2.79326e+02, -1.00171e+02), forces1[450], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.47808e+01, -1.29366e+02, -1.92232e+02), forces1[451], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.75509e+00, 1.63688e+01, -3.24829e+02), forces1[452], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.93082e+01, -2.44679e+02, 7.91941e+01), forces1[453], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.41263e+01, 9.35389e+01, 9.69223e+01), forces1[454], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.76713e+02, 1.98982e+02, 2.68113e+01), forces1[455], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.79544e+01, 6.96513e+01, -1.90320e+02), forces1[456], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.34104e+02, 2.74828e+01, -3.93803e+01), forces1[457], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.28254e+02, -1.35572e+02, -4.32733e+01), forces1[458], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.28600e+01, 3.07094e+00, -3.78996e+01), forces1[459], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.03587e+02, 1.77989e+02, -6.99490e+01), forces1[460], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.08656e+02, -4.54770e+01, -6.76500e+01), forces1[461], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.71838e+01, 5.19782e+01, -2.94923e+01), forces1[462], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.40301e+02, 2.74572e+02, -3.56579e+01), forces1[463], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.03587e+01, -3.16257e+01, -7.72873e+01), forces1[464], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.67138e+02, -7.24846e+01, -6.24143e+01), forces1[465], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.03813e+00, 9.49458e+01, 3.72519e+01), forces1[466], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.14010e+01, 6.47582e+01, 1.42218e+02), forces1[467], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.20325e+01, 1.99039e+02, 3.65580e+02), forces1[468], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.42970e+02, -8.88587e+01, 1.72171e+02), forces1[469], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.90803e+01, -2.60758e+02, 1.15577e+02), forces1[470], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.52557e+02, -8.51485e+00, -1.82612e+02), forces1[471], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 5.19978e+00, 1.82368e+02, 4.96817e+01), forces1[472], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.60405e+02, -5.75249e+01, 4.30526e+01), forces1[473], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.05782e+01, -1.01381e+02, 5.21152e+01), forces1[474], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.98251e-01, 1.60005e+02, 2.94808e+01), forces1[475], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.38812e+02, -2.31535e+02, 1.88049e+02), forces1[476], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.81939e+01, 1.28753e+02, -1.67824e+02), forces1[477], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23875e+02, 1.55757e+02, -2.79290e+02), forces1[478], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.68146e+01, 8.00636e+01, 1.82356e+00), forces1[479], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.81555e+02, -2.44338e+02, -1.67866e+02), forces1[480], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.60882e+02, 1.64545e+02, 1.24397e+02), forces1[481], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.43347e+02, 1.22527e+02, 2.15375e+02), forces1[482], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.75592e+02, -3.02264e+02, 3.12921e+02), forces1[483], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.42347e+02, 1.64524e+02, 1.46878e+02), forces1[484], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.44791e+00, 6.90323e+01, -3.86573e+01), forces1[485], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.00184e+02, -1.07891e+02, 3.14068e+01), forces1[486], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.40711e+01, 1.27511e+01, 5.66277e+01), forces1[487], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.74580e+02, -1.14306e+02, -1.37535e+02), forces1[488], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.98657e+01, 2.19658e+02, -7.96343e+01), forces1[489], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.90069e+02, 1.36943e+02, -1.78217e+02), forces1[490], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.64334e+01, 2.56388e+02, -8.52711e+01), forces1[491], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.38510e+01, -1.61329e+02, 2.59550e+02), forces1[492], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-8.11033e+01, -7.18533e+01, 7.75259e+00), forces1[493], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05854e+02, 3.14397e+02, -4.61488e+02), forces1[494], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.69218e+02, 1.76533e+02, 2.08605e+02), forces1[495], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.06655e+01, -6.09886e+02, -6.99069e+01), forces1[496], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.19305e+02, -1.88157e+02, 1.20294e+02), forces1[497], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.74817e+01, -1.67738e+01, -7.85411e+00), forces1[498], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.56252e+00, -4.35681e+01, -6.24241e+01), forces1[499], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.73399e+01, 1.15493e+02, 9.92190e+01), forces1[500], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.58626e+01, 9.15080e+01, 3.20924e+00), forces1[501], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.09582e+01, -1.76054e+01, 6.71996e+00), forces1[502], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.59525e+01, 1.83369e+02, -1.70381e+02), forces1[503], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.32243e+01, 3.37044e+01, -6.27663e+01), forces1[504], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.91590e+01, -5.93696e+01, -7.26003e+01), forces1[505], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.74042e+00, 7.24544e+01, 5.83752e+01), forces1[506], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.35769e+01, 4.35961e+02, 7.54309e+01), forces1[507], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.81578e+02, -1.82955e+02, -1.36110e+02), forces1[508], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.53200e+02, -2.25646e+01, -1.26235e+02), forces1[509], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.02017e+01, 7.54878e+01, -9.98370e+01), forces1[510], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.56935e+01, 7.19882e+00, -3.07487e+02), forces1[511], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.60290e+01, 4.63810e+01, -1.39429e+02), forces1[512], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.36883e+02, -2.71943e+02, 1.90138e+01), forces1[513], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.95573e+01, -1.31976e+02, -1.48737e+02), forces1[514], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.61876e+02, 1.02997e+02, -1.00309e+02), forces1[515], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.73595e+00, 3.79678e+01, 9.45418e+01), forces1[516], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.60218e+00, -7.40917e+01, -2.21371e+01), forces1[517], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.27199e+02, 1.31094e+02, 1.12529e+02), forces1[518], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.04103e+02, 4.69682e+01, -1.18068e+02), forces1[519], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.12794e+01, -1.26833e+02, -4.04741e+01), forces1[520], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.09384e+01, 1.86161e+02, 3.95213e+01), forces1[521], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.91470e+02, 8.17955e+01, -9.25509e+01), forces1[522], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.33121e+01, 7.77548e-01, -1.48384e+02), forces1[523], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.52149e+02, -1.00219e+02, -7.57906e+01), forces1[524], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.46003e+02, -1.03331e+01, 1.17347e+01), forces1[525], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.09634e+00, 1.43847e+02, -1.42581e+02), forces1[526], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.68641e+02, 6.25042e+01, -7.01507e+01), forces1[527], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.49802e+01, 2.37203e+02, -2.40370e+02), forces1[528], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.85669e+01, -1.41784e+02, 4.28138e+01), forces1[529], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.75729e+01, -3.33632e+02, 1.31688e+02), forces1[530], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.04035e+02, 1.12452e+02, 7.19995e+01), forces1[531], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.61972e+00, 5.32166e+01, -9.89477e+01), forces1[532], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.19982e+01, -2.20164e+02, 9.06987e-01), forces1[533], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.71185e+01, -7.67379e+01, 8.12237e+01), forces1[534], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.80057e+01, -1.09793e+02, -2.04253e+01), forces1[535], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.16821e+02, 1.20240e+02, 5.96457e+01), forces1[536], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.64018e+01, 6.17819e+01, 9.91575e+01), forces1[537], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.55515e+01, -9.66187e+01, -8.19956e+00), forces1[538], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.17947e+01, -1.53378e+01, 1.27485e+00), forces1[539], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.02055e+02, 7.70776e+01, 1.14883e+02), forces1[540], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.43124e+01, 9.43473e+01, 8.60578e+01), forces1[541], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.81264e+01, -1.32125e+02, 2.56224e+01), forces1[542], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.25842e+01, -1.26725e+02, -8.30650e+01), forces1[543], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.50125e+01, -6.20165e+01, 2.58080e+01), forces1[544], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.55319e+01, -1.59769e+01, -7.15921e+01), forces1[545], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.34804e+01, 4.08590e+02, -8.70023e+01), forces1[546], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.53654e+01, -2.03185e+02, -4.39618e+01), forces1[547], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.62931e+01, -2.78936e+02, 5.62579e+00), forces1[548], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.92745e+01, -9.69829e+01, -3.54599e+01), forces1[549], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.58047e+01, -8.17034e+01, 5.89773e+01), forces1[550], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.75002e+01, -7.94191e+01, 7.55542e+01), forces1[551], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-9.53611e+01, 1.20621e+02, 1.49809e+02), forces1[552], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.63438e+01, -6.24402e+01, -1.12122e+01), forces1[553], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.11429e+02, -4.56045e+01, -4.59567e+01), forces1[554], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.28516e+02, -4.47595e+00, 1.81453e+02), forces1[555], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.33297e+02, 1.44805e+02, -4.27640e+01), forces1[556], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.16740e+02, -7.65847e+00, 7.66024e+01), forces1[557], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.77942e+02, -1.45939e+02, 8.07326e+01), forces1[558], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.68632e+02, 2.69537e+02, 1.22007e+02), forces1[559], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.12709e+02, 6.01408e+01, 1.54041e+02), forces1[560], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.27652e+02, -5.25610e+01, -9.60596e+01), forces1[561], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.14047e+02, -2.01466e+01, -4.96293e+01), forces1[562], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.09791e+02, 4.12161e+01, 1.83442e+02), forces1[563], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.49134e+02, -4.62596e+00, 2.20999e+01), forces1[564], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.30637e+02, -3.75250e+01, 4.14259e+01), forces1[565], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.75025e+02, 3.85962e+01, 5.80226e+01), forces1[566], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.98389e+00, -1.23933e+02, 1.30628e+02), forces1[567], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.05449e+01, -1.14065e+02, 9.70791e+01), forces1[568], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.60462e+01, -9.53328e+01, 9.89856e+01), forces1[569], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.13288e+01, -1.44056e+01, 1.39952e+02), forces1[570], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.42917e+01, 1.66166e+01, 1.91947e+02), forces1[571], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.13590e+02, -1.55874e+02, -1.13269e+02), forces1[572], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.42809e+02, 3.88945e+02, 1.47303e+02), forces1[573], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.29792e+02, -1.91594e+02, -4.64513e+01), forces1[574], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.06517e+02, -3.17549e+02, 9.06953e+00), forces1[575], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.35062e+02, -3.38933e+01, -9.66009e+01), forces1[576], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.67609e+02, 1.26402e+02, -4.97788e+01), forces1[577], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.05138e+00, 1.07362e+02, -1.02375e+02), forces1[578], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.22771e+02, -7.72250e+01, 1.66501e+02), forces1[579], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.95650e+01, 8.12102e+00, 1.03117e+02), forces1[580], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.75584e+02, 2.88991e+01, -1.17320e+02), forces1[581], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-6.91275e+01, 8.38319e+01, 4.97708e+01), forces1[582], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.51951e+02, 1.60368e+02, -2.06266e+02), forces1[583], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.31889e+01, -2.02781e+02, -8.72161e+01), forces1[584], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.92408e+02, -1.87100e+01, 2.05541e+02), forces1[585], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.73554e+02, -5.01580e+00, 2.66621e+02), forces1[586], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.59561e+02, 9.15584e+00, 1.28235e+02), forces1[587], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.11016e+01, 7.42097e+01, -4.28122e+01), forces1[588], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.03537e+02, 2.10837e+01, -1.33908e+02), forces1[589], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.16906e+01, -1.58535e+01, 4.67992e+01), forces1[590], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.44325e+02, -2.46328e+00, -1.81854e+01), forces1[591], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-5.30320e+01, 9.72891e+01, 2.06240e+01), forces1[592], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.36896e+01, 1.33852e+02, 5.19553e+01), forces1[593], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 9.50875e+00, -1.63962e+02, -7.41674e+01), forces1[594], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.07601e+02, -8.54691e+01, 3.11595e+01), forces1[595], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.65770e+02, -4.64405e+01, 8.34911e+01), forces1[596], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.44367e+01, -1.84108e+02, 1.39835e+02), forces1[597], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.24114e+02, 2.50886e+01, 2.54009e+01), forces1[598], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.16187e+02, -4.85179e+01, 1.32305e+02), forces1[599], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.37446e+01, -3.29674e+01, 1.16326e+02), forces1[600], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.68011e+01, -1.00073e+02, 8.04682e+01), forces1[601], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-4.83294e+01, -1.73859e+02, 1.36328e+01), forces1[602], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.83292e+01, 1.39303e+02, -1.01045e+02), forces1[603], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.07133e+01, 1.29633e+02, -1.90943e+02), forces1[604], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.55543e+02, 7.87557e+01, 9.29806e+01), forces1[605], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.64013e+02, -2.60759e+01, 1.75076e+02), forces1[606], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.33794e+02, -1.63774e+02, -6.37393e+01), forces1[607], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.54235e+02, 2.41512e+02, 1.60676e+02), forces1[608], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.17775e+02, 6.48107e+01, 3.84545e+01), forces1[609], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.04735e+01, 2.01260e+01, 2.39831e+01), forces1[610], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.38884e+02, 1.20777e+02, -5.46490e+01), forces1[611], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.07723e+02, 2.58444e+02, 1.48247e+02), forces1[612], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.01470e+02, -6.94941e+01, -2.70882e+02), forces1[613], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.21667e+01, -1.98769e+02, -1.54892e+02), forces1[614], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.80724e+02, 4.52486e+01, 1.40398e+02), forces1[615], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 3.86820e+02, -7.75719e+00, -1.08164e+01), forces1[616], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.42790e+02, 4.80985e+01, -6.18837e+00), forces1[617], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.76946e+02, -1.97796e+02, 2.44731e+01), forces1[618], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.47411e+02, 2.23512e+02, -4.11150e+01), forces1[619], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.04834e+01, 5.22527e+01, -2.27808e+01), forces1[620], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.52307e+02, 7.40937e+01, 1.12984e+02), forces1[621], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.32953e+01, -1.29608e+02, 1.32966e+02), forces1[622], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.23861e+01, -1.19511e+02, 1.00268e+02), forces1[623], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.50610e+01, -1.46388e+02, -7.77507e+01), forces1[624], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 8.62300e+01, -1.37666e+02, -1.20764e+02), forces1[625], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.47310e+01, -1.47118e+02, -5.18370e+01), forces1[626], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.62932e+01, 7.13690e+01, 1.43985e+02), forces1[627], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.96823e+01, -3.58054e+01, -1.45690e+02), forces1[628], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.18087e+00, 1.85480e+01, 9.50527e+01), forces1[629], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.74362e+00, 1.43052e+01, -4.25871e+01), forces1[630], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.97525e+02, -1.59562e+01, 1.90143e+01), forces1[631], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 2.57292e+01, -2.08667e+02, 2.11507e+01), forces1[632], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.01669e+01, -1.07214e+02, -2.53008e+01), forces1[633], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.18560e+02, 4.41674e+01, -1.78058e+02), forces1[634], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.93301e+00, 5.90508e+01, -3.94824e+01), forces1[635], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-7.81815e+01, 8.73784e+01, -6.35956e+01), forces1[636], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.52356e+01, 1.30136e+02, 1.52025e+01), forces1[637], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.66178e+02, -5.94385e+01, -1.04578e+02), forces1[638], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-1.19123e+02, -1.75069e+02, -2.04114e+00), forces1[639], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-3.92283e+01, 5.61702e+01, 1.27395e+02), forces1[640], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 4.74836e-01, -2.04058e+02, -4.01525e+01), forces1[641], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 6.92669e+01, 6.04519e+00, 4.03163e+01), forces1[642], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.08236e+01, 1.26554e+02, -8.63729e+01), forces1[643], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.88180e+02, -1.08833e+02, -1.18964e+02), forces1[644], 10*TOL); -ASSERT_EQUAL_VEC(Vec3(-2.76077e+01, -2.97113e+02, 5.08198e+02), forces1[645], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 1.84023e+02, 3.56521e+02, -2.17616e+02), forces1[646], 10*TOL); -ASSERT_EQUAL_VEC(Vec3( 7.81607e+01, 3.17356e+02, -1.40920e+02), forces1[647], 10*TOL); diff --git a/plugins/amoeba/CMakeLists.txt b/plugins/amoeba/CMakeLists.txt index d7acba964bb70df80653d9033f9eb53b45c675b7..828a95c720692124ad2d337bde065c6d6a4bae16 100644 --- a/plugins/amoeba/CMakeLists.txt +++ b/plugins/amoeba/CMakeLists.txt @@ -86,14 +86,14 @@ ENDIF(OPENMM_BUILD_C_AND_FORTRAN_WRAPPERS) INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/src) ADD_LIBRARY(${SHARED_AMOEBA_TARGET} SHARED ${SOURCE_AMOEBA_FILES} ${SOURCE_AMOEBA_INCLUDE_FILES} ${API_AMOEBA_ABS_INCLUDE_FILES}) -SET_TARGET_PROPERTIES(${SHARED_AMOEBA_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_AMOEBA_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_AMOEBA_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_AMOEBA_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") FILE(GLOB serialization_files ${CMAKE_CUURENT_SOURCE_DIR}/serialization/src/*.cpp) SET_SOURCE_FILES_PROPERTIES(${serialization_files} PROPERTIES COMPILE_FLAGS "-DOPENMM_AMOEBA_BUILDING_SHARED_LIBRARY -DTIXML_USE_STL") IF(OPENMM_BUILD_STATIC_LIB) ADD_LIBRARY(${STATIC_AMOEBA_TARGET} STATIC ${SOURCE_AMOEBA_FILES} ${SOURCE_AMOEBA_INCLUDE_FILES} ${API_AMOEBA_ABS_INCLUDE_FILES}) - SET_TARGET_PROPERTIES(${STATIC_AMOEBA_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_AMOEBA_BUILDING_STATIC_LIBRARY -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") + SET_TARGET_PROPERTIES(${STATIC_AMOEBA_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_AMOEBA_BUILDING_STATIC_LIBRARY -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") ENDIF(OPENMM_BUILD_STATIC_LIB) IF(OPENMM_BUILD_C_AND_FORTRAN_WRAPPERS) diff --git a/plugins/amoeba/openmmapi/include/openmm/AmoebaAngleForce.h b/plugins/amoeba/openmmapi/include/openmm/AmoebaAngleForce.h index dc778dff240ad5014898de1ed1bdd2d80c214a19..0e6a828a6673a5196ae9d044bcaa5ec7bf091d15 100644 --- a/plugins/amoeba/openmmapi/include/openmm/AmoebaAngleForce.h +++ b/plugins/amoeba/openmmapi/include/openmm/AmoebaAngleForce.h @@ -127,7 +127,7 @@ public: * @param particle1 the index of the first particle connected by the angle * @param particle2 the index of the second particle connected by the angle * @param particle3 the index of the third particle connected by the angle - * @param length the angle measured in degrees + * @param length the equilibrium angle, measured in degrees * @param quadratic k the quadratic force constant for the angle, measured in kJ/mol/radian^2 * @return the index of the angle that was added */ @@ -140,7 +140,7 @@ public: * @param particle1 the index of the first particle connected by the angle * @param particle2 the index of the second particle connected by the angle * @param particle3 the index of the third particle connected by the angle - * @param length the equilibrium angle, measured in degress + * @param length the equilibrium angle, measured in degrees * @param quadratic k the quadratic force constant for the angle, measured in kJ/mol/radian^2 */ void getAngleParameters(int index, int& particle1, int& particle2, int& particle3, double& length, double& quadraticK) const; diff --git a/plugins/amoeba/openmmapi/include/openmm/AmoebaMultipoleForce.h b/plugins/amoeba/openmmapi/include/openmm/AmoebaMultipoleForce.h index 776ee864d0632fb3718ce48c0d145907960f0ba6..db926c9991b33d8a97a3a92ecec4cadd3ce6f6cb 100644 --- a/plugins/amoeba/openmmapi/include/openmm/AmoebaMultipoleForce.h +++ b/plugins/amoeba/openmmapi/include/openmm/AmoebaMultipoleForce.h @@ -175,6 +175,20 @@ public: */ void setPmeGridDimensions(const std::vector& gridDimension); + /** + * Get the parameters being used for PME in a particular Context. Because some platforms have restrictions + * on the allowed grid sizes, the values that are actually used may be slightly different from those + * specified with setPmeGridDimensions(), or the standard values calculated based on the Ewald error tolerance. + * See the manual for details. + * + * @param context the Context for which to get the parameters + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const; + /** * Add multipole-related info for a particle * diff --git a/plugins/amoeba/openmmapi/include/openmm/AmoebaOutOfPlaneBendForce.h b/plugins/amoeba/openmmapi/include/openmm/AmoebaOutOfPlaneBendForce.h index ab4f2712914707770c1b12789c283cdf751fca1f..aaa5557589ba334fcd4976244fa957b89cc8f73d 100644 --- a/plugins/amoeba/openmmapi/include/openmm/AmoebaOutOfPlaneBendForce.h +++ b/plugins/amoeba/openmmapi/include/openmm/AmoebaOutOfPlaneBendForce.h @@ -74,7 +74,7 @@ public: * * @return global cubicK term */ - double getAmoebaGlobalOutOfPlaneBendCubic(void) const; + double getAmoebaGlobalOutOfPlaneBendCubic() const; /** * Set the global cubic term @@ -88,7 +88,7 @@ public: * * @return global quartic term */ - double getAmoebaGlobalOutOfPlaneBendQuartic(void) const; + double getAmoebaGlobalOutOfPlaneBendQuartic() const; /** * Set the global pentic term @@ -102,7 +102,7 @@ public: * * @return global penticK term */ - double getAmoebaGlobalOutOfPlaneBendPentic(void) const; + double getAmoebaGlobalOutOfPlaneBendPentic() const; /** * Set the global sextic term @@ -116,7 +116,7 @@ public: * * @return global sexticK term */ - double getAmoebaGlobalOutOfPlaneBendSextic(void) const; + double getAmoebaGlobalOutOfPlaneBendSextic() const; /** * Add an out-of-plane bend term to the force field. diff --git a/plugins/amoeba/openmmapi/include/openmm/amoebaKernels.h b/plugins/amoeba/openmmapi/include/openmm/amoebaKernels.h index c509712f7d853bd1b8bab9c5d4f3f327f8c06420..99997a905974804044dfc8549a7e3b78b1068662 100644 --- a/plugins/amoeba/openmmapi/include/openmm/amoebaKernels.h +++ b/plugins/amoeba/openmmapi/include/openmm/amoebaKernels.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2012 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: * * Contributors: * * * @@ -361,6 +361,16 @@ public: * @param force the AmoebaMultipoleForce to copy the parameters from */ virtual void copyParametersToContext(ContextImpl& context, const AmoebaMultipoleForce& force) = 0; + + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + virtual void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const = 0; }; /** diff --git a/plugins/amoeba/openmmapi/include/openmm/internal/AmoebaMultipoleForceImpl.h b/plugins/amoeba/openmmapi/include/openmm/internal/AmoebaMultipoleForceImpl.h index 2a1a9787271c9d620ca30aae2e7ba7573bfd5b8c..243ef612e18c1389594331fc617462872cdee8d7 100644 --- a/plugins/amoeba/openmmapi/include/openmm/internal/AmoebaMultipoleForceImpl.h +++ b/plugins/amoeba/openmmapi/include/openmm/internal/AmoebaMultipoleForceImpl.h @@ -89,6 +89,7 @@ public: void getSystemMultipoleMoments(ContextImpl& context, std::vector< double >& outputMultipoleMoments); void updateParametersInContext(ContextImpl& context); + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: diff --git a/plugins/amoeba/openmmapi/src/AmoebaMultipoleForce.cpp b/plugins/amoeba/openmmapi/src/AmoebaMultipoleForce.cpp index b810108a80cf54302b4ba801c830432780ccad10..4799fa6a74a88662b7a936cf6bb4444030f31209 100644 --- a/plugins/amoeba/openmmapi/src/AmoebaMultipoleForce.cpp +++ b/plugins/amoeba/openmmapi/src/AmoebaMultipoleForce.cpp @@ -103,6 +103,10 @@ void AmoebaMultipoleForce::setPmeGridDimensions(const std::vector& gridDime return; } +void AmoebaMultipoleForce::getPMEParametersInContext(const Context& context, double& alpha, int& nx, int& ny, int& nz) const { + dynamic_cast(getImplInContext(context)).getPMEParameters(alpha, nx, ny, nz); +} + int AmoebaMultipoleForce::getMutualInducedMaxIterations() const { return mutualInducedMaxIterations; } diff --git a/plugins/amoeba/openmmapi/src/AmoebaMultipoleForceImpl.cpp b/plugins/amoeba/openmmapi/src/AmoebaMultipoleForceImpl.cpp index b28733fbb7c4905e86a12f164a0a4acbae2f56d7..68f99decbcab05f3ce45370fee04d45ef67385f7 100644 --- a/plugins/amoeba/openmmapi/src/AmoebaMultipoleForceImpl.cpp +++ b/plugins/amoeba/openmmapi/src/AmoebaMultipoleForceImpl.cpp @@ -199,3 +199,7 @@ void AmoebaMultipoleForceImpl::getSystemMultipoleMoments(ContextImpl& context, s void AmoebaMultipoleForceImpl::updateParametersInContext(ContextImpl& context) { kernel.getAs().copyParametersToContext(context, owner); } + +void AmoebaMultipoleForceImpl::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + kernel.getAs().getPMEParameters(alpha, nx, ny, nz); +} diff --git a/plugins/amoeba/platforms/cuda/CMakeLists.txt b/plugins/amoeba/platforms/cuda/CMakeLists.txt index 108d5f39769e864b611eb621174b1d66d4a6b4c0..3dd9944b0799de9a544be6cd242277e1ab11faa1 100644 --- a/plugins/amoeba/platforms/cuda/CMakeLists.txt +++ b/plugins/amoeba/platforms/cuda/CMakeLists.txt @@ -94,7 +94,7 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE IF (APPLE) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.cpp b/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.cpp index 91ab85c968480eb7c95204afcda85b2f8d2a0429..8e6b8bebbe2b56b245b31948f9ec99ed4a524868 100644 --- a/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.cpp +++ b/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.cpp @@ -37,6 +37,7 @@ #include "openmm/internal/AmoebaVdwForceImpl.h" #include "openmm/internal/NonbondedForceImpl.h" #include "CudaBondedUtilities.h" +#include "CudaFFT3D.h" #include "CudaForceInfo.h" #include "CudaKernelSources.h" #include "CudaNonbondedUtilities.h" @@ -806,8 +807,8 @@ private: CudaCalcAmoebaMultipoleForceKernel::CudaCalcAmoebaMultipoleForceKernel(std::string name, const Platform& platform, CudaContext& cu, const System& system) : CalcAmoebaMultipoleForceKernel(name, platform), cu(cu), system(system), hasInitializedScaleFactors(false), hasInitializedFFT(false), multipolesAreValid(false), - multipoleParticles(NULL), molecularDipoles(NULL), molecularQuadrupoles(NULL), labFrameDipoles(NULL), labFrameQuadrupoles(NULL), fracDipoles(NULL), - fracQuadrupoles(NULL), field(NULL), fieldPolar(NULL), inducedField(NULL), inducedFieldPolar(NULL), torque(NULL), dampingAndThole(NULL), inducedDipole(NULL), + multipoleParticles(NULL), molecularDipoles(NULL), molecularQuadrupoles(NULL), labFrameDipoles(NULL), labFrameQuadrupoles(NULL), sphericalDipoles(NULL), sphericalQuadrupoles(NULL), + fracDipoles(NULL), fracQuadrupoles(NULL), field(NULL), fieldPolar(NULL), inducedField(NULL), inducedFieldPolar(NULL), torque(NULL), dampingAndThole(NULL), inducedDipole(NULL), diisCoefficients(NULL), inducedDipolePolar(NULL), inducedDipoleErrors(NULL), prevDipoles(NULL), prevDipolesPolar(NULL), prevDipolesGk(NULL), prevDipolesGkPolar(NULL), prevErrors(NULL), diisMatrix(NULL), polarizability(NULL), covalentFlags(NULL), polarizationGroupFlags(NULL), pmeGrid(NULL), pmeBsplineModuliX(NULL), pmeBsplineModuliY(NULL), pmeBsplineModuliZ(NULL), pmeIgrid(NULL), pmePhi(NULL), @@ -826,6 +827,10 @@ CudaCalcAmoebaMultipoleForceKernel::~CudaCalcAmoebaMultipoleForceKernel() { delete labFrameDipoles; if (labFrameQuadrupoles != NULL) delete labFrameQuadrupoles; + if (sphericalDipoles != NULL) + delete sphericalDipoles; + if (sphericalQuadrupoles != NULL) + delete sphericalQuadrupoles; if (fracDipoles != NULL) delete fracDipoles; if (fracQuadrupoles != NULL) @@ -898,26 +903,6 @@ CudaCalcAmoebaMultipoleForceKernel::~CudaCalcAmoebaMultipoleForceKernel() { cufftDestroy(fft); } -/** - * Select a size for an FFT that is a multiple of 2, 3, 5, and 7. - */ -static int findFFTDimension(int minimum) { - if (minimum < 1) - return 1; - while (true) { - // Attempt to factor the current value. - - int unfactored = minimum; - for (int factor = 2; factor < 8; factor++) { - while (unfactored > 1 && unfactored%factor == 0) - unfactored /= factor; - } - if (unfactored == 1) - return minimum; - minimum++; - } -} - void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const AmoebaMultipoleForce& force) { cu.setAsCurrent(); @@ -985,6 +970,8 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const int elementSize = (cu.getUseDoublePrecision() ? sizeof(double) : sizeof(float)); labFrameDipoles = new CudaArray(cu, 3*paddedNumAtoms, elementSize, "labFrameDipoles"); labFrameQuadrupoles = new CudaArray(cu, 5*paddedNumAtoms, elementSize, "labFrameQuadrupoles"); + sphericalDipoles = new CudaArray(cu, 3*paddedNumAtoms, elementSize, "sphericalDipoles"); + sphericalQuadrupoles = new CudaArray(cu, 5*paddedNumAtoms, elementSize, "sphericalQuadrupoles"); fracDipoles = new CudaArray(cu, 3*paddedNumAtoms, elementSize, "fracDipoles"); fracQuadrupoles = new CudaArray(cu, 6*paddedNumAtoms, elementSize, "fracQuadrupoles"); field = new CudaArray(cu, 3*paddedNumAtoms, sizeof(long long), "field"); @@ -1057,7 +1044,7 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const } else maxInducedIterations = 0; - bool usePME = (force.getNonbondedMethod() == AmoebaMultipoleForce::PME); + usePME = (force.getNonbondedMethod() == AmoebaMultipoleForce::PME); // See whether there's an AmoebaGeneralizedKirkwoodForce in the System. @@ -1093,8 +1080,7 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const int endExclusionIndex = (cu.getContextIndex()+1)*numExclusionTiles/numContexts; defines["FIRST_EXCLUSION_TILE"] = cu.intToString(startExclusionIndex); defines["LAST_EXCLUSION_TILE"] = cu.intToString(endExclusionIndex); - double alpha = force.getAEwald(); - int gridSizeX, gridSizeY, gridSizeZ; + alpha = force.getAEwald(); if (usePME) { vector pmeGridDimension; force.getPmeGridDimensions(pmeGridDimension); @@ -1103,13 +1089,13 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const nb.setEwaldErrorTolerance(force.getEwaldErrorTolerance()); nb.setCutoffDistance(force.getCutoffDistance()); NonbondedForceImpl::calcPMEParameters(system, nb, alpha, gridSizeX, gridSizeY, gridSizeZ); - gridSizeX = findFFTDimension(gridSizeX); - gridSizeY = findFFTDimension(gridSizeY); - gridSizeZ = findFFTDimension(gridSizeZ); + gridSizeX = CudaFFT3D::findLegalDimension(gridSizeX); + gridSizeY = CudaFFT3D::findLegalDimension(gridSizeY); + gridSizeZ = CudaFFT3D::findLegalDimension(gridSizeZ); } else { - gridSizeX = pmeGridDimension[0]; - gridSizeY = pmeGridDimension[1]; - gridSizeZ = pmeGridDimension[2]; + gridSizeX = CudaFFT3D::findLegalDimension(pmeGridDimension[0]); + gridSizeY = CudaFFT3D::findLegalDimension(pmeGridDimension[1]); + gridSizeZ = CudaFFT3D::findLegalDimension(pmeGridDimension[2]); } defines["EWALD_ALPHA"] = cu.doubleToString(alpha); defines["SQRT_PI"] = cu.doubleToString(sqrt(M_PI)); @@ -1144,6 +1130,7 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const if (maxInducedIterations > 0) { defines["THREAD_BLOCK_SIZE"] = cu.intToString(inducedFieldThreads); defines["MAX_PREV_DIIS_DIPOLES"] = cu.intToString(MaxPrevDIISDipoles); + defines["USE_MUTUAL_POLARIZATION"] = "1"; module = cu.createModule(CudaKernelSources::vectorOps+CudaAmoebaKernelSources::multipoleInducedField, defines); computeInducedFieldKernel = cu.getKernel(module, "computeInducedField"); updateInducedFieldKernel = cu.getKernel(module, "updateInducedFieldByDIIS"); @@ -1151,33 +1138,13 @@ void CudaCalcAmoebaMultipoleForceKernel::initialize(const System& system, const buildMatrixKernel = cu.getKernel(module, "computeDIISMatrix"); } stringstream electrostaticsSource; - if (usePME) { - electrostaticsSource << CudaKernelSources::vectorOps; + electrostaticsSource << CudaKernelSources::vectorOps; + electrostaticsSource << CudaAmoebaKernelSources::sphericalMultipoles; + if (usePME) electrostaticsSource << CudaAmoebaKernelSources::pmeMultipoleElectrostatics; - electrostaticsSource << (hasQuadrupoles ? CudaAmoebaKernelSources::pmeElectrostaticPairForce : CudaAmoebaKernelSources::pmeElectrostaticPairForceNoQuadrupoles); - electrostaticsSource << "#define APPLY_SCALE\n"; - electrostaticsSource << (hasQuadrupoles ? CudaAmoebaKernelSources::pmeElectrostaticPairForce : CudaAmoebaKernelSources::pmeElectrostaticPairForceNoQuadrupoles); - electrostaticsThreadMemory = 24*elementSize+3*sizeof(float)+3*sizeof(int)/(double) cu.TileSize; - if (!useShuffle) - electrostaticsThreadMemory += 3*elementSize; - } - else { - electrostaticsSource << CudaKernelSources::vectorOps; + else electrostaticsSource << CudaAmoebaKernelSources::multipoleElectrostatics; - electrostaticsSource << "#define F1\n"; - electrostaticsSource << (hasQuadrupoles ? CudaAmoebaKernelSources::electrostaticPairForce : CudaAmoebaKernelSources::electrostaticPairForceNoQuadrupoles); - electrostaticsSource << "#undef F1\n"; - electrostaticsSource << "#define T1\n"; - electrostaticsSource << (hasQuadrupoles ? CudaAmoebaKernelSources::electrostaticPairForce : CudaAmoebaKernelSources::electrostaticPairForceNoQuadrupoles); - electrostaticsSource << "#undef T1\n"; - electrostaticsSource << "#define T3\n"; - electrostaticsSource << (hasQuadrupoles ? CudaAmoebaKernelSources::electrostaticPairForce : CudaAmoebaKernelSources::electrostaticPairForceNoQuadrupoles); - electrostaticsThreadMemory = 21*elementSize+2*sizeof(float)+3*sizeof(int)/(double) cu.TileSize; - if (!useShuffle) - electrostaticsThreadMemory += 3*elementSize; - if (gk != NULL) - electrostaticsThreadMemory += 4*elementSize; - } + electrostaticsThreadMemory = 24*elementSize+3*sizeof(float)+3*sizeof(int)/(double) cu.TileSize; electrostaticsThreads = min(maxThreads, cu.computeThreadBlockSize(electrostaticsThreadMemory)); defines["THREAD_BLOCK_SIZE"] = cu.intToString(electrostaticsThreads); module = cu.createModule(electrostaticsSource.str(), defines); @@ -1433,7 +1400,8 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in void* computeMomentsArgs[] = {&cu.getPosq().getDevicePointer(), &multipoleParticles->getDevicePointer(), &molecularDipoles->getDevicePointer(), &molecularQuadrupoles->getDevicePointer(), - &labFrameDipoles->getDevicePointer(), &labFrameQuadrupoles->getDevicePointer()}; + &labFrameDipoles->getDevicePointer(), &labFrameQuadrupoles->getDevicePointer(), + &sphericalDipoles->getDevicePointer(), &sphericalQuadrupoles->getDevicePointer()}; cu.executeKernel(computeMomentsKernel, computeMomentsArgs, cu.getNumAtoms()); int startTileIndex = nb.getStartTileIndex(); int numTileIndices = nb.getNumTiles(); @@ -1497,8 +1465,8 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in void* electrostaticsArgs[] = {&cu.getForce().getDevicePointer(), &torque->getDevicePointer(), &cu.getEnergyBuffer().getDevicePointer(), &cu.getPosq().getDevicePointer(), &covalentFlags->getDevicePointer(), &polarizationGroupFlags->getDevicePointer(), &nb.getExclusionTiles().getDevicePointer(), &startTileIndex, &numTileIndices, - &labFrameDipoles->getDevicePointer(), &labFrameQuadrupoles->getDevicePointer(), &inducedDipole->getDevicePointer(), - &inducedDipolePolar->getDevicePointer(), &dampingAndThole->getDevicePointer()}; + &sphericalDipoles->getDevicePointer(), &sphericalQuadrupoles->getDevicePointer(), + &inducedDipole->getDevicePointer(), &inducedDipolePolar->getDevicePointer(), &dampingAndThole->getDevicePointer()}; cu.executeKernel(electrostaticsKernel, electrostaticsArgs, numForceThreadBlocks*electrostaticsThreads, electrostaticsThreads); if (gkKernel != NULL) gkKernel->finishComputation(*torque, *labFrameDipoles, *labFrameQuadrupoles, *inducedDipole, *inducedDipolePolar, *dampingAndThole, *covalentFlags, *polarizationGroupFlags); @@ -1652,8 +1620,8 @@ double CudaCalcAmoebaMultipoleForceKernel::execute(ContextImpl& context, bool in &nb.getInteractingTiles().getDevicePointer(), &nb.getInteractionCount().getDevicePointer(), cu.getPeriodicBoxSizePointer(), cu.getInvPeriodicBoxSizePointer(), cu.getPeriodicBoxVecXPointer(), cu.getPeriodicBoxVecYPointer(), cu.getPeriodicBoxVecZPointer(), &maxTiles, &nb.getBlockCenters().getDevicePointer(), &nb.getInteractingAtoms().getDevicePointer(), - &labFrameDipoles->getDevicePointer(), &labFrameQuadrupoles->getDevicePointer(), &inducedDipole->getDevicePointer(), - &inducedDipolePolar->getDevicePointer(), &dampingAndThole->getDevicePointer()}; + &sphericalDipoles->getDevicePointer(), &sphericalQuadrupoles->getDevicePointer(), + &inducedDipole->getDevicePointer(), &inducedDipolePolar->getDevicePointer(), &dampingAndThole->getDevicePointer()}; cu.executeKernel(electrostaticsKernel, electrostaticsArgs, numForceThreadBlocks*electrostaticsThreads, electrostaticsThreads); void* pmeTransformInducedPotentialArgs[] = {&pmePhidp->getDevicePointer(), &pmeCphi->getDevicePointer(), recipBoxVectorPointer[0], recipBoxVectorPointer[1], recipBoxVectorPointer[2]}; cu.executeKernel(pmeTransformPotentialKernel, pmeTransformInducedPotentialArgs, cu.getNumAtoms()); @@ -2047,6 +2015,15 @@ void CudaCalcAmoebaMultipoleForceKernel::copyParametersToContext(ContextImpl& co multipolesAreValid = false; } +void CudaCalcAmoebaMultipoleForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (!usePME) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + alpha = this->alpha; + nx = gridSizeX; + ny = gridSizeY; + nz = gridSizeZ; +} + /* -------------------------------------------------------------------------- * * AmoebaGeneralizedKirkwood * * -------------------------------------------------------------------------- */ @@ -2430,7 +2407,7 @@ double CudaCalcAmoebaVdwForceKernel::execute(ContextImpl& context, bool includeF &bondReductionAtoms->getDevicePointer(), &bondReductionFactors->getDevicePointer()}; cu.executeKernel(prepareKernel, prepareArgs, cu.getPaddedNumAtoms()); nonbonded->prepareInteractions(1); - nonbonded->computeInteractions(1); + nonbonded->computeInteractions(1, includeForces, includeEnergy); void* spreadArgs[] = {&cu.getForce().getDevicePointer(), &tempForces->getDevicePointer(), &bondReductionAtoms->getDevicePointer(), &bondReductionFactors->getDevicePointer()}; cu.executeKernel(spreadKernel, spreadArgs, cu.getPaddedNumAtoms()); tempPosq->copyTo(cu.getPosq()); diff --git a/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.h b/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.h index 9bd60d131407078b366d70cb5c879c96527fc923..9e9098504351c7979af65a552de91cfcd89c334f 100644 --- a/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.h +++ b/plugins/amoeba/platforms/cuda/src/AmoebaCudaKernels.h @@ -363,6 +363,15 @@ public: * @param force the AmoebaMultipoleForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const AmoebaMultipoleForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: class ForceInfo; class SortTrait : public CudaSort::SortTrait { @@ -381,8 +390,9 @@ private: template void computeSystemMultipoleMoments(ContextImpl& context, std::vector& outputMultipoleMoments); int numMultipoles, maxInducedIterations; int fixedFieldThreads, inducedFieldThreads, electrostaticsThreads; - double inducedEpsilon; - bool hasQuadrupoles, hasInitializedScaleFactors, hasInitializedFFT, multipolesAreValid; + int gridSizeX, gridSizeY, gridSizeZ; + double alpha, inducedEpsilon; + bool usePME, hasQuadrupoles, hasInitializedScaleFactors, hasInitializedFFT, multipolesAreValid; CudaContext& cu; const System& system; std::vector covalentFlagValues; @@ -392,6 +402,8 @@ private: CudaArray* molecularQuadrupoles; CudaArray* labFrameDipoles; CudaArray* labFrameQuadrupoles; + CudaArray* sphericalDipoles; + CudaArray* sphericalQuadrupoles; CudaArray* fracDipoles; CudaArray* fracQuadrupoles; CudaArray* field; diff --git a/plugins/amoeba/platforms/cuda/src/kernels/amoebaGk.cu b/plugins/amoeba/platforms/cuda/src/kernels/amoebaGk.cu index da07e67c7e4bfed41972c787bef63473d7b05117..9c784a090e7b5f270cb4eab54e58e1ac69f635b6 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/amoebaGk.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/amoebaGk.cu @@ -23,8 +23,8 @@ extern "C" __global__ void reduceBornSum(const long long* __restrict__ bornSum, /** * Apply the surface area term to the force and energy. */ -extern "C" __global__ void computeSurfaceAreaForce(long long* __restrict__ bornForce, real* __restrict__ energyBuffer, const float2* __restrict__ params, const real* __restrict__ bornRadii) { - real energy = 0; +extern "C" __global__ void computeSurfaceAreaForce(long long* __restrict__ bornForce, mixed* __restrict__ energyBuffer, const float2* __restrict__ params, const real* __restrict__ bornRadii) { + mixed energy = 0; for (unsigned int index = blockIdx.x*blockDim.x+threadIdx.x; index < NUM_ATOMS; index += blockDim.x*gridDim.x) { real bornRadius = bornRadii[index]; float radius = params[index].x; @@ -216,7 +216,7 @@ inline __device__ void zeroAtomData(AtomData2& data) { * Compute electrostatic interactions. */ extern "C" __global__ void computeGKForces( - unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, + unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, unsigned int startTileIndex, unsigned int numTileIndices, const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const real* __restrict__ bornRadii, unsigned long long* __restrict__ bornForce) { @@ -225,7 +225,7 @@ extern "C" __global__ void computeGKForces( const unsigned int numTiles = numTileIndices; unsigned int pos = (unsigned int) (startTileIndex+warp*(long long)numTiles/totalWarps); unsigned int end = (unsigned int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps); - real energy = 0; + mixed energy = 0; __shared__ AtomData2 localData[GK_FORCE_THREAD_BLOCK_SIZE]; do { @@ -605,7 +605,7 @@ __device__ float computePScaleFactor(uint2 covalent, unsigned int polarizationGr * Compute electrostatic interactions. */ extern "C" __global__ void computeEDiffForce( - unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, + unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const uint2* __restrict__ covalentFlags, const unsigned int* __restrict__ polarizationGroupFlags, const ushort2* __restrict__ exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices, const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, @@ -615,7 +615,7 @@ extern "C" __global__ void computeEDiffForce( const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); const unsigned int tbx = threadIdx.x - tgx; - real energy = 0; + mixed energy = 0; __shared__ AtomData4 localData[EDIFF_THREAD_BLOCK_SIZE]; // First loop: process tiles that contain exclusions. diff --git a/plugins/amoeba/platforms/cuda/src/kernels/amoebaWcaForce.cu b/plugins/amoeba/platforms/cuda/src/kernels/amoebaWcaForce.cu index fa6ff4439452877d776d32c6b0cf5d7ffb1080a3..0c0e151f95419a20ecd69f4fea2c1c167d1603c3 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/amoebaWcaForce.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/amoebaWcaForce.cu @@ -191,14 +191,14 @@ __device__ void computeOneInteraction(AtomData& atom1, AtomData& atom2, real rmi /** * Compute WCA interaction. */ -extern "C" __global__ void computeWCAForce(unsigned long long* __restrict__ forceBuffers, real* __restrict__ energyBuffer, +extern "C" __global__ void computeWCAForce(unsigned long long* __restrict__ forceBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, unsigned int startTileIndex, unsigned int numTileIndices, const float2* __restrict__ radiusEpsilon) { unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int numTiles = numTileIndices; unsigned int pos = (unsigned int) (startTileIndex+warp*(long long)numTiles/totalWarps); unsigned int end = (unsigned int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps); - real energy = 0; + mixed energy = 0; __shared__ AtomData localData[THREAD_BLOCK_SIZE]; do { diff --git a/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForce.cu b/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForce.cu deleted file mode 100644 index d36afcda5640af67e84bd99c1dbca2139923aa14..0000000000000000000000000000000000000000 --- a/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForce.cu +++ /dev/null @@ -1,538 +0,0 @@ -/** - * This defines three different closely related functions, depending on which constant (F1, T1, or T3) is defined. - */ - -#if defined F1 -__device__ void computeOneInteractionF1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real& energy, real3& outputForce) { -#elif defined T1 -__device__ void computeOneInteractionT1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce) { -#else -__device__ void computeOneInteractionT3(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce) { -#endif - -#ifdef F1 - const float uScale = 1; - real ddsc3_0 = 0; - real ddsc3_1 = 0; - real ddsc3_2 = 0; - - real ddsc5_0 = 0; - real ddsc5_1 = 0; - real ddsc5_2 = 0; - - real ddsc7_0 = 0; - real ddsc7_1 = 0; - real ddsc7_2 = 0; -#endif - - real xr = atom2.posq.x - atom1.posq.x; - real yr = atom2.posq.y - atom1.posq.y; - real zr = atom2.posq.z - atom1.posq.z; - - real r2 = xr*xr + yr*yr + zr*zr; - real r = SQRT(r2); - real rr1 = RECIP(r); - real rr2 = rr1*rr1; - real rr3 = rr1*rr2; - real rr5 = 3*rr3*rr2; - real rr7 = 5*rr5*rr2; - real rr9 = 7*rr7*rr2; -#ifdef F1 - real rr11 = 9*rr9*rr2; -#endif - - real scale3 = 1; - real scale5 = 1; - real scale7 = 1; - - real pdamp = atom1.damp*atom2.damp; - if (pdamp != 0) { - - real ratio = r/pdamp; - float pGamma = atom2.thole > atom1.thole ? atom1.thole : atom2.thole; - - real damp = ratio*ratio*ratio*pGamma; - real dampExp = EXP(-damp); - real damp1 = damp + 1; - real damp2 = damp*damp; - - scale3 = 1 - dampExp; - scale5 = 1 - damp1*dampExp; - scale7 = 1 - (damp1 + 0.6f*damp2)*dampExp; - -#ifdef F1 - real factor = 3*damp*dampExp*rr2; - real factor7 = -0.2f + 0.6f*damp; - - ddsc3_0 = factor*xr; - ddsc5_0 = ddsc3_0*damp; - ddsc7_0 = ddsc5_0*factor7; - - ddsc3_1 = factor*yr; - ddsc5_1 = ddsc3_1*damp; - ddsc7_1 = ddsc5_1*factor7; - - ddsc3_2 = factor*zr; - ddsc5_2 = ddsc3_2*damp; - ddsc7_2 = ddsc5_2*factor7; -#endif - - } - -#if defined F1 - real scale3i = rr3*scale3*uScale; - real scale5i = rr5*scale5*uScale; -#endif - real dsc3 = rr3*scale3*dScale; - real psc3 = rr3*scale3*pScale; - - real dsc5 = rr5*scale5*dScale; - real psc5 = rr5*scale5*pScale; - - real dsc7 = rr7*scale7*dScale; - real psc7 = rr7*scale7*pScale; - - real atom2quadrupoleZZ = -(atom2.quadrupoleXX+atom2.quadrupoleYY); - real qJr_0 = atom2.quadrupoleXX*xr + atom2.quadrupoleXY*yr + atom2.quadrupoleXZ*zr; - real qJr_1 = atom2.quadrupoleXY*xr + atom2.quadrupoleYY*yr + atom2.quadrupoleYZ*zr; - real qJr_2 = atom2.quadrupoleXZ*xr + atom2.quadrupoleYZ*yr + atom2quadrupoleZZ*zr; - - real atom1quadrupoleZZ = -(atom1.quadrupoleXX+atom1.quadrupoleYY); - real qIr_0 = atom1.quadrupoleXX*xr + atom1.quadrupoleXY*yr + atom1.quadrupoleXZ*zr; - real qIr_1 = atom1.quadrupoleXY*xr + atom1.quadrupoleYY*yr + atom1.quadrupoleYZ*zr; - real qIr_2 = atom1.quadrupoleXZ*xr + atom1.quadrupoleYZ*yr + atom1quadrupoleZZ*zr; - -#if defined F1 - real sc2 = atom1.dipole.x*atom2.dipole.x + atom1.dipole.y*atom2.dipole.y + atom1.dipole.z*atom2.dipole.z; -#endif -#if defined F1 || defined T1 - real sc4 = atom2.dipole.x*xr + atom2.dipole.y*yr + atom2.dipole.z*zr; - real sc6 = qJr_0*xr + qJr_1*yr + qJr_2*zr; -#endif - -#if defined F1 || defined T3 - real sc3 = atom1.dipole.x*xr + atom1.dipole.y*yr + atom1.dipole.z*zr; - real sc5 = qIr_0*xr + qIr_1*yr + qIr_2*zr; -#endif - -#if defined F1 - real sc7 = qIr_0*atom2.dipole.x + qIr_1*atom2.dipole.y + qIr_2*atom2.dipole.z; - real sc8 = qJr_0*atom1.dipole.x + qJr_1*atom1.dipole.y + qJr_2*atom1.dipole.z; - real sc9 = qIr_0*qJr_0 + qIr_1*qJr_1 + qIr_2*qJr_2; - - real sc10 = atom1.quadrupoleXX*atom2.quadrupoleXX + atom1.quadrupoleXY*atom2.quadrupoleXY + atom1.quadrupoleXZ*atom2.quadrupoleXZ + - atom1.quadrupoleXY*atom2.quadrupoleXY + atom1.quadrupoleYY*atom2.quadrupoleYY + atom1.quadrupoleYZ*atom2.quadrupoleYZ + - atom1.quadrupoleXZ*atom2.quadrupoleXZ + atom1.quadrupoleYZ*atom2.quadrupoleYZ + atom1quadrupoleZZ*atom2quadrupoleZZ; - - real sci1 = atom1.inducedDipole.x*atom2.dipole.x + atom1.inducedDipole.y*atom2.dipole.y + atom1.inducedDipole.z*atom2.dipole.z + - atom2.inducedDipole.x*atom1.dipole.x + atom2.inducedDipole.y*atom1.dipole.y + atom2.inducedDipole.z*atom1.dipole.z; -#endif - -#if defined F1 || defined T3 - real sci3 = atom1.inducedDipole.x*xr + atom1.inducedDipole.y*yr + atom1.inducedDipole.z*zr; -#endif -#if defined F1 - real sci7 = qIr_0*atom2.inducedDipole.x + qIr_1*atom2.inducedDipole.y + qIr_2*atom2.inducedDipole.z; - real sci8 = qJr_0*atom1.inducedDipole.x + qJr_1*atom1.inducedDipole.y + qJr_2*atom1.inducedDipole.z; -#endif -#if defined F1 || defined T1 - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; -#endif - -#if defined F1 - real scip1 = atom1.inducedDipolePolar.x*atom2.dipole.x + atom1.inducedDipolePolar.y*atom2.dipole.y + atom1.inducedDipolePolar.z*atom2.dipole.z + - atom2.inducedDipolePolar.x*atom1.dipole.x + atom2.inducedDipolePolar.y*atom1.dipole.y + atom2.inducedDipolePolar.z*atom1.dipole.z; - - real scip2 = atom1.inducedDipole.x*atom2.inducedDipolePolar.x + atom1.inducedDipole.y*atom2.inducedDipolePolar.y + atom1.inducedDipole.z*atom2.inducedDipolePolar.z + - atom2.inducedDipole.x*atom1.inducedDipolePolar.x + atom2.inducedDipole.y*atom1.inducedDipolePolar.y + atom2.inducedDipole.z*atom1.inducedDipolePolar.z; - -#endif - -#if defined F1 || defined T3 - real scip3 = ((atom1.inducedDipolePolar.x)*(xr) + (atom1.inducedDipolePolar.y)*(yr) + (atom1.inducedDipolePolar.z)*(zr)); -#endif -#if defined F1 || defined T1 - real scip4 = ((atom2.inducedDipolePolar.x)*(xr) + (atom2.inducedDipolePolar.y)*(yr) + (atom2.inducedDipolePolar.z)*(zr)); -#endif - -#ifdef F1 - real scip7 = ((qIr_0)*(atom2.inducedDipolePolar.x) + (qIr_1)*(atom2.inducedDipolePolar.y) + (qIr_2)*(atom2.inducedDipolePolar.z)); - real scip8 = ((qJr_0)*(atom1.inducedDipolePolar.x) + (qJr_1)*(atom1.inducedDipolePolar.y) + (qJr_2)*(atom1.inducedDipolePolar.z)); - - real gli1 = atom2.posq.w*sci3 - atom1.posq.w*sci4; - - real gli6 = sci1; - real glip1 = atom2.posq.w*scip3 - atom1.posq.w*scip4; - real glip6 = scip1; - real gli2 = -sc3*sci4 - sci3*sc4; - real gli3 = sci3*sc6 - sci4*sc5; - real gli7 = 2*(sci7-sci8); - - real glip2 = -sc3*scip4 - scip3*sc4; - real glip3 = scip3*sc6 - scip4*sc5; - real glip7 = 2*(scip7-scip8); - real factor3 = rr3*((gli1 + gli6)*pScale + (glip1 + glip6)*dScale); - real factor5 = rr5*((gli2 + gli7)*pScale + (glip2 + glip7)*dScale); - real factor7 = rr7*(gli3*pScale + glip3*dScale); - - real ftm2i_0 = -0.5f*(factor3*ddsc3_0 + factor5*ddsc5_0 + factor7*ddsc7_0); - real ftm2i_1 = -0.5f*(factor3*ddsc3_1 + factor5*ddsc5_1 + factor7*ddsc7_1); - real ftm2i_2 = -0.5f*(factor3*ddsc3_2 + factor5*ddsc5_2 + factor7*ddsc7_2); - - real gl0 = atom1.posq.w*atom2.posq.w; - real gl1 = atom2.posq.w*sc3 - atom1.posq.w*sc4; - real gl2 = atom1.posq.w*sc6 + atom2.posq.w*sc5 - sc3*sc4; - real gl3 = sc3*sc6 - sc4*sc5; - real gl4 = sc5*sc6; - real gl6 = sc2; - real gl7 = 2*(sc7-sc8); - real gl8 = 2*sc10; - real gl5 = -4*sc9; - - real gf1 = rr3*gl0 + rr5*(gl1+gl6) + rr7*(gl2+gl7+gl8) + rr9*(gl3+gl5) + rr11*gl4; -#endif -#if defined F1 || defined T1 - real gf2 = -atom2.posq.w*rr3 + sc4*rr5 - sc6*rr7; - real gf5 = 2*(-atom2.posq.w*rr5+sc4*rr7-sc6*rr9); -#endif -#if defined F1 || defined T3 - real gf3 = atom1.posq.w*rr3 + sc3*rr5 + sc5*rr7; - real gf6 = 2*(-atom1.posq.w*rr5-sc3*rr7-sc5*rr9); -#endif - -#ifdef F1 - real em = mScale*(rr1*gl0 + rr3*(gl1+gl6) + rr5*(gl2+gl7+gl8) + rr7*(gl3+gl5) + rr9*gl4); - real ei = 0.5f*((gli1+gli6)*psc3 + (gli2+gli7)*psc5 + gli3*psc7); - energy = em+ei; -#endif - -#if defined F1 || defined T1 - real qIdJ_0 = atom1.quadrupoleXX*atom2.dipole.x + atom1.quadrupoleXY*atom2.dipole.y + atom1.quadrupoleXZ*atom2.dipole.z; - real qIdJ_1 = atom1.quadrupoleXY*atom2.dipole.x + atom1.quadrupoleYY*atom2.dipole.y + atom1.quadrupoleYZ*atom2.dipole.z; - real qIdJ_2 = atom1.quadrupoleXZ*atom2.dipole.x + atom1.quadrupoleYZ*atom2.dipole.y + atom1quadrupoleZZ*atom2.dipole.z; - - real qIqJr_0 = atom1.quadrupoleXX*qJr_0 + atom1.quadrupoleXY*qJr_1 + atom1.quadrupoleXZ*qJr_2; - real qIqJr_1 = atom1.quadrupoleXY*qJr_0 + atom1.quadrupoleYY*qJr_1 + atom1.quadrupoleYZ*qJr_2; - real qIqJr_2 = atom1.quadrupoleXZ*qJr_0 + atom1.quadrupoleYZ*qJr_1 + atom1quadrupoleZZ*qJr_2; -#endif - -#ifdef F1 - real qkqir_0 = atom2.quadrupoleXX*qIr_0 + atom2.quadrupoleXY*qIr_1 + atom2.quadrupoleXZ*qIr_2; - real qkqir_1 = atom2.quadrupoleXY*qIr_0 + atom2.quadrupoleYY*qIr_1 + atom2.quadrupoleYZ*qIr_2; - real qkqir_2 = atom2.quadrupoleXZ*qIr_0 + atom2.quadrupoleYZ*qIr_1 + atom2quadrupoleZZ*qIr_2; - - real qkdi_0 = atom2.quadrupoleXX*atom1.dipole.x + atom2.quadrupoleXY*atom1.dipole.y + atom2.quadrupoleXZ*atom1.dipole.z; - real qkdi_1 = atom2.quadrupoleXY*atom1.dipole.x + atom2.quadrupoleYY*atom1.dipole.y + atom2.quadrupoleYZ*atom1.dipole.z; - real qkdi_2 = atom2.quadrupoleXZ*atom1.dipole.x + atom2.quadrupoleYZ*atom1.dipole.y + atom2quadrupoleZZ*atom1.dipole.z; - - real ftm2_0 = mScale*(gf1*xr + gf2*atom1.dipole.x + gf3*atom2.dipole.x + 2*rr5*(qkdi_0 - qIdJ_0) + gf5*qIr_0 + gf6*qJr_0 + 4*rr7*(qIqJr_0 + qkqir_0)); - real ftm2_1 = mScale*(gf1*yr + gf2*atom1.dipole.y + gf3*atom2.dipole.y + 2*rr5*(qkdi_1 - qIdJ_1) + gf5*qIr_1 + gf6*qJr_1 + 4*rr7*(qIqJr_1 + qkqir_1)); - real ftm2_2 = mScale*(gf1*zr + gf2*atom1.dipole.z + gf3*atom2.dipole.z + 2*rr5*(qkdi_2 - qIdJ_2) + gf5*qIr_2 + gf6*qJr_2 + 4*rr7*(qIqJr_2 + qkqir_2)); - - real gfi1 = rr2*(1.5f*((gli1+gli6)*psc3 + (glip1+glip6)*dsc3 + scip2*scale3i) + 2.5f*((gli7+gli2)*psc5 + (glip7+glip2)*dsc5 - (sci3*scip4+scip3*sci4)*scale5i) + 3.5f*(gli3*psc7+glip3*dsc7)); - ftm2i_0 += gfi1*xr; - ftm2i_1 += gfi1*yr; - ftm2i_2 += gfi1*zr; -#endif - -#if defined F1 || defined T1 - real gfi5 = (sci4*psc7 + scip4*dsc7); -#endif -#if defined F1 || defined T3 - real gfi6 = -(sci3*psc7 + scip3*dsc7); -#endif - -#if defined F1 || defined T1 - real qIuJ_0 = atom1.quadrupoleXX*atom2.inducedDipole.x + atom1.quadrupoleXY*atom2.inducedDipole.y + atom1.quadrupoleXZ*atom2.inducedDipole.z; - real qIuJ_1 = atom1.quadrupoleXY*atom2.inducedDipole.x + atom1.quadrupoleYY*atom2.inducedDipole.y + atom1.quadrupoleYZ*atom2.inducedDipole.z; - real qIuJ_2 = atom1.quadrupoleXZ*atom2.inducedDipole.x + atom1.quadrupoleYZ*atom2.inducedDipole.y + atom1quadrupoleZZ*atom2.inducedDipole.z; - - real qIuJp_0 = atom1.quadrupoleXX*atom2.inducedDipolePolar.x + atom1.quadrupoleXY*atom2.inducedDipolePolar.y + atom1.quadrupoleXZ*atom2.inducedDipolePolar.z; - real qIuJp_1 = atom1.quadrupoleXY*atom2.inducedDipolePolar.x + atom1.quadrupoleYY*atom2.inducedDipolePolar.y + atom1.quadrupoleYZ*atom2.inducedDipolePolar.z; - real qIuJp_2 = atom1.quadrupoleXZ*atom2.inducedDipolePolar.x + atom1.quadrupoleYZ*atom2.inducedDipolePolar.y + atom1quadrupoleZZ*atom2.inducedDipolePolar.z; -#endif - -#if defined T3 - real qJuIp_0 = atom2.quadrupoleXX*atom1.inducedDipolePolar.x + atom2.quadrupoleXY*atom1.inducedDipolePolar.y + atom2.quadrupoleXZ*atom1.inducedDipolePolar.z; - real qJuIp_1 = atom2.quadrupoleXY*atom1.inducedDipolePolar.x + atom2.quadrupoleYY*atom1.inducedDipolePolar.y + atom2.quadrupoleYZ*atom1.inducedDipolePolar.z; - real qJuIp_2 = atom2.quadrupoleXZ*atom1.inducedDipolePolar.x + atom2.quadrupoleYZ*atom1.inducedDipolePolar.y + atom2quadrupoleZZ*atom1.inducedDipolePolar.z; - - real qJuI_0 = atom2.quadrupoleXX*atom1.inducedDipole.x + atom2.quadrupoleXY*atom1.inducedDipole.y + atom2.quadrupoleXZ*atom1.inducedDipole.z; - real qJuI_1 = atom2.quadrupoleXY*atom1.inducedDipole.x + atom2.quadrupoleYY*atom1.inducedDipole.y + atom2.quadrupoleYZ*atom1.inducedDipole.z; - real qJuI_2 = atom2.quadrupoleXZ*atom1.inducedDipole.x + atom2.quadrupoleYZ*atom1.inducedDipole.y + atom2quadrupoleZZ*atom1.inducedDipole.z; -#endif - -#ifdef F1 - real qkui_0 = atom2.quadrupoleXX*atom1.inducedDipole.x + atom2.quadrupoleXY*atom1.inducedDipole.y + atom2.quadrupoleXZ*atom1.inducedDipole.z; - real qkui_1 = atom2.quadrupoleXY*atom1.inducedDipole.x + atom2.quadrupoleYY*atom1.inducedDipole.y + atom2.quadrupoleYZ*atom1.inducedDipole.z; - real qkui_2 = atom2.quadrupoleXZ*atom1.inducedDipole.x + atom2.quadrupoleYZ*atom1.inducedDipole.y + atom2quadrupoleZZ*atom1.inducedDipole.z; - - real qkuip_0 = atom2.quadrupoleXX*atom1.inducedDipolePolar.x + atom2.quadrupoleXY*atom1.inducedDipolePolar.y + atom2.quadrupoleXZ*atom1.inducedDipolePolar.z; - real qkuip_1 = atom2.quadrupoleXY*atom1.inducedDipolePolar.x + atom2.quadrupoleYY*atom1.inducedDipolePolar.y + atom2.quadrupoleYZ*atom1.inducedDipolePolar.z; - real qkuip_2 = atom2.quadrupoleXZ*atom1.inducedDipolePolar.x + atom2.quadrupoleYZ*atom1.inducedDipolePolar.y + atom2quadrupoleZZ*atom1.inducedDipolePolar.z; - - ftm2i_0 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.x*psc3 + atom1.inducedDipolePolar.x*dsc3) + - sc4*(atom1.inducedDipole.x*psc5 + atom1.inducedDipolePolar.x*dsc5) - - sc6*(atom1.inducedDipole.x*psc7 + atom1.inducedDipolePolar.x*dsc7)) + - - 0.5f*(atom1.posq.w*(atom2.inducedDipole.x*psc3+atom2.inducedDipolePolar.x*dsc3) + - sc3*(atom2.inducedDipole.x*psc5 +atom2.inducedDipolePolar.x*dsc5) + - sc5*(atom2.inducedDipole.x*psc7 +atom2.inducedDipolePolar.x*dsc7)) + - - scale5i*(sci4*atom1.inducedDipolePolar.x+scip4*atom1.inducedDipole.x + - sci3*atom2.inducedDipolePolar.x+scip3*atom2.inducedDipole.x)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.x + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.x + - ((qkui_0-qIuJ_0)*psc5 + (qkuip_0-qIuJp_0)*dsc5) + - gfi5*qIr_0 + gfi6*qJr_0; - - ftm2i_1 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.y*psc3 + atom1.inducedDipolePolar.y*dsc3) + - sc4*(atom1.inducedDipole.y*psc5 + atom1.inducedDipolePolar.y*dsc5) - - sc6*(atom1.inducedDipole.y*psc7 + atom1.inducedDipolePolar.y*dsc7)) + - - (atom1.posq.w*(atom2.inducedDipole.y*psc3+atom2.inducedDipolePolar.y*dsc3) + - sc3*(atom2.inducedDipole.y*psc5+atom2.inducedDipolePolar.y*dsc5) + - sc5*(atom2.inducedDipole.y*psc7+atom2.inducedDipolePolar.y*dsc7))*0.5f + - scale5i*(sci4*atom1.inducedDipolePolar.y+scip4*atom1.inducedDipole.y + sci3*atom2.inducedDipolePolar.y+scip3*atom2.inducedDipole.y)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.y + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.y + - ((qkui_1-qIuJ_1)*psc5 + (qkuip_1-qIuJp_1)*dsc5) + - gfi5*qIr_1 + gfi6*qJr_1; - - ftm2i_2 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.z*psc3 + atom1.inducedDipolePolar.z*dsc3) + - sc4*(atom1.inducedDipole.z*psc5 + atom1.inducedDipolePolar.z*dsc5) - - sc6*(atom1.inducedDipole.z*psc7 + atom1.inducedDipolePolar.z*dsc7)) + - - (atom1.posq.w*(atom2.inducedDipole.z*psc3+atom2.inducedDipolePolar.z*dsc3) + - sc3*(atom2.inducedDipole.z*psc5+atom2.inducedDipolePolar.z*dsc5) + - sc5*(atom2.inducedDipole.z*psc7+atom2.inducedDipolePolar.z*dsc7))*0.5f + - scale5i*(sci4*atom1.inducedDipolePolar.z+scip4*atom1.inducedDipole.z + - sci3*atom2.inducedDipolePolar.z+scip3*atom2.inducedDipole.z)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.z + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.z + - ((qkui_2-qIuJ_2)*psc5 + (qkuip_2-qIuJp_2)*dsc5) + - gfi5*qIr_2 + gfi6*qJr_2; - -#ifdef DIRECT_POLARIZATION - real gfd = 0.5*(3*rr2*scip2*scale3i - 5*rr2*(scip3*sci4+sci3*scip4)*scale5i); - real temp5 = 0.5*scale5i; - real fdir_0 = gfd*xr + temp5*(sci4*atom1.inducedDipolePolar.x + scip4*atom1.inducedDipole.x + sci3*atom2.inducedDipolePolar.x + scip3*atom2.inducedDipole.x); - real fdir_1 = gfd*yr + temp5*(sci4*atom1.inducedDipolePolar.y + scip4*atom1.inducedDipole.y + sci3*atom2.inducedDipolePolar.y + scip3*atom2.inducedDipole.y); - real fdir_2 = gfd*zr + temp5*(sci4*atom1.inducedDipolePolar.z + scip4*atom1.inducedDipole.z + sci3*atom2.inducedDipolePolar.z + scip3*atom2.inducedDipole.z); - ftm2i_0 -= fdir_0; - ftm2i_1 -= fdir_1; - ftm2i_2 -= fdir_2; -#else - real scaleF = 0.5f*uScale; - real inducedFactor3 = scip2*rr3*scaleF; - real inducedFactor5 = (sci3*scip4+scip3*sci4)*rr5*scaleF; - real findmp_0 = inducedFactor3*ddsc3_0 - inducedFactor5*ddsc5_0; - real findmp_1 = inducedFactor3*ddsc3_1 - inducedFactor5*ddsc5_1; - real findmp_2 = inducedFactor3*ddsc3_2 - inducedFactor5*ddsc5_2; - ftm2i_0 -= findmp_0; - ftm2i_1 -= findmp_1; - ftm2i_2 -= findmp_2; -#endif -#endif - -#if defined T1 - real gti2 = 0.5f*(sci4*psc5+scip4*dsc5); - real gti5 = gfi5; -#endif -#if defined T3 - real gti3 = 0.5f*(sci3*psc5+scip3*dsc5); - real gti6 = gfi6; -#endif - -#if defined T1 || defined T3 - real dixdk_0 = atom1.dipole.y*atom2.dipole.z - atom1.dipole.z*atom2.dipole.y; - real dixdk_1 = atom1.dipole.z*atom2.dipole.x - atom1.dipole.x*atom2.dipole.z; - real dixdk_2 = atom1.dipole.x*atom2.dipole.y - atom1.dipole.y*atom2.dipole.x; - -#if defined T1 - real dixuk_0 = atom1.dipole.y*atom2.inducedDipole.z - atom1.dipole.z*atom2.inducedDipole.y; - real dixuk_1 = atom1.dipole.z*atom2.inducedDipole.x - atom1.dipole.x*atom2.inducedDipole.z; - real dixuk_2 = atom1.dipole.x*atom2.inducedDipole.y - atom1.dipole.y*atom2.inducedDipole.x; -#endif -#endif - -#ifdef T1 - real dixukp_0 = atom1.dipole.y*atom2.inducedDipolePolar.z - atom1.dipole.z*atom2.inducedDipolePolar.y; - real dixukp_1 = atom1.dipole.z*atom2.inducedDipolePolar.x - atom1.dipole.x*atom2.inducedDipolePolar.z; - real dixukp_2 = atom1.dipole.x*atom2.inducedDipolePolar.y - atom1.dipole.y*atom2.inducedDipolePolar.x; -#endif - -#ifdef T1 - real dixr_0 = atom1.dipole.y*zr - atom1.dipole.z*yr; - real dixr_1 = atom1.dipole.z*xr - atom1.dipole.x*zr; - real dixr_2 = atom1.dipole.x*yr - atom1.dipole.y*xr; -#endif - -#ifdef T1 - real rxqiukp_0 = yr*qIuJp_2 - zr*qIuJp_1; - real rxqiukp_1 = zr*qIuJp_0 - xr*qIuJp_2; - real rxqiukp_2 = xr*qIuJp_1 - yr*qIuJp_0; - - real rxqir_0 = yr*qIr_2 - zr*qIr_1; - real rxqir_1 = zr*qIr_0 - xr*qIr_2; - real rxqir_2 = xr*qIr_1 - yr*qIr_0; - - real rxqiuk_0 = yr*qIuJ_2 - zr*qIuJ_1; - real rxqiuk_1 = zr*qIuJ_0 - xr*qIuJ_2; - real rxqiuk_2 = xr*qIuJ_1 - yr*qIuJ_0; - - real ukxqir_0 = atom2.inducedDipole.y*qIr_2 - atom2.inducedDipole.z*qIr_1; - real ukxqir_1 = atom2.inducedDipole.z*qIr_0 - atom2.inducedDipole.x*qIr_2; - real ukxqir_2 = atom2.inducedDipole.x*qIr_1 - atom2.inducedDipole.y*qIr_0; - - real ukxqirp_0 = atom2.inducedDipolePolar.y*qIr_2 - atom2.inducedDipolePolar.z*qIr_1; - real ukxqirp_1 = atom2.inducedDipolePolar.z*qIr_0 - atom2.inducedDipolePolar.x*qIr_2; - real ukxqirp_2 = atom2.inducedDipolePolar.x*qIr_1 - atom2.inducedDipolePolar.y*qIr_0; - - real dixqkr_0 = atom1.dipole.y*qJr_2 - atom1.dipole.z*qJr_1; - real dixqkr_1 = atom1.dipole.z*qJr_0 - atom1.dipole.x*qJr_2; - real dixqkr_2 = atom1.dipole.x*qJr_1 - atom1.dipole.y*qJr_0; - - real dkxqir_0 = atom2.dipole.y*qIr_2 - atom2.dipole.z*qIr_1; - real dkxqir_1 = atom2.dipole.z*qIr_0 - atom2.dipole.x*qIr_2; - real dkxqir_2 = atom2.dipole.x*qIr_1 - atom2.dipole.y*qIr_0; - - real rxqikr_0 = yr*qIqJr_2 - zr*qIqJr_1; - real rxqikr_1 = zr*qIqJr_0 - xr*qIqJr_2; - real rxqikr_2 = xr*qIqJr_1 - yr*qIqJr_0; - - real rxqidk_0 = yr*qIdJ_2 - zr*qIdJ_1; - real rxqidk_1 = zr*qIdJ_0 - xr*qIdJ_2; - real rxqidk_2 = xr*qIdJ_1 - yr*qIdJ_0; - - real qkrxqir_0 = qJr_1*qIr_2 - qJr_2*qIr_1; - real qkrxqir_1 = qJr_2*qIr_0 - qJr_0*qIr_2; - real qkrxqir_2 = qJr_0*qIr_1 - qJr_1*qIr_0; -#endif - -#if defined T1 || defined T3 - real qixqk_0 = atom1.quadrupoleXY*atom2.quadrupoleXZ + atom1.quadrupoleYY*atom2.quadrupoleYZ + atom1.quadrupoleYZ*atom2quadrupoleZZ - - atom1.quadrupoleXZ*atom2.quadrupoleXY - atom1.quadrupoleYZ*atom2.quadrupoleYY - atom1quadrupoleZZ*atom2.quadrupoleYZ; - - real qixqk_1 = atom1.quadrupoleXZ*atom2.quadrupoleXX + atom1.quadrupoleYZ*atom2.quadrupoleXY + atom1quadrupoleZZ*atom2.quadrupoleXZ - - atom1.quadrupoleXX*atom2.quadrupoleXZ - atom1.quadrupoleXY*atom2.quadrupoleYZ - atom1.quadrupoleXZ*atom2quadrupoleZZ; - - real qixqk_2 = atom1.quadrupoleXX*atom2.quadrupoleXY + atom1.quadrupoleXY*atom2.quadrupoleYY + atom1.quadrupoleXZ*atom2.quadrupoleYZ - - atom1.quadrupoleXY*atom2.quadrupoleXX - atom1.quadrupoleYY*atom2.quadrupoleXY - atom1.quadrupoleYZ*atom2.quadrupoleXZ; -#endif - -#ifdef T1 - real ttm2_0 = -rr3*dixdk_0 + gf2*dixr_0-gf5*rxqir_0 + 2*rr5*(dixqkr_0 + dkxqir_0 + rxqidk_0-2*qixqk_0) - 4*rr7*(rxqikr_0 + qkrxqir_0); - real ttm2_1 = -rr3*dixdk_1 + gf2*dixr_1-gf5*rxqir_1 + 2*rr5*(dixqkr_1 + dkxqir_1 + rxqidk_1-2*qixqk_1) - 4*rr7*(rxqikr_1 + qkrxqir_1); - real ttm2_2 = -rr3*dixdk_2 + gf2*dixr_2-gf5*rxqir_2 + 2*rr5*(dixqkr_2 + dkxqir_2 + rxqidk_2-2*qixqk_2) - 4*rr7*(rxqikr_2 + qkrxqir_2); - - real ttm2i_0 = -(dixuk_0*psc3+dixukp_0*dsc3)*0.5f + gti2*dixr_0 + ((ukxqir_0+ rxqiuk_0)*psc5 + (ukxqirp_0 + rxqiukp_0)*dsc5) - gti5*rxqir_0; - real ttm2i_1 = -(dixuk_1*psc3+dixukp_1*dsc3)*0.5f + gti2*dixr_1 + ((ukxqir_1+ rxqiuk_1)*psc5 + (ukxqirp_1 + rxqiukp_1)*dsc5) - gti5*rxqir_1; - real ttm2i_2 = -(dixuk_2*psc3+dixukp_2*dsc3)*0.5f + gti2*dixr_2 + ((ukxqir_2+ rxqiuk_2)*psc5 + (ukxqirp_2 + rxqiukp_2)*dsc5) - gti5*rxqir_2; -#endif - -#ifdef T3 - real qJqIr_0 = atom2.quadrupoleXX*qIr_0 + atom2.quadrupoleXY*qIr_1 + atom2.quadrupoleXZ*qIr_2; - real qJqIr_1 = atom2.quadrupoleXY*qIr_0 + atom2.quadrupoleYY*qIr_1 + atom2.quadrupoleYZ*qIr_2; - real qJqIr_2 = atom2.quadrupoleXZ*qIr_0 + atom2.quadrupoleYZ*qIr_1 + atom2quadrupoleZZ*qIr_2; - - real qJdI_0 = atom2.quadrupoleXX*atom1.dipole.x + atom2.quadrupoleXY*atom1.dipole.y + atom2.quadrupoleXZ*atom1.dipole.z; - real qJdI_1 = atom2.quadrupoleXY*atom1.dipole.x + atom2.quadrupoleYY*atom1.dipole.y + atom2.quadrupoleYZ*atom1.dipole.z; - real qJdI_2 = atom2.quadrupoleXZ*atom1.dipole.x + atom2.quadrupoleYZ*atom1.dipole.y + atom2quadrupoleZZ*atom1.dipole.z; - - real dkxr_0 = atom2.dipole.y*zr - atom2.dipole.z*yr; - real dkxr_1 = atom2.dipole.z*xr - atom2.dipole.x*zr; - real dkxr_2 = atom2.dipole.x*yr - atom2.dipole.y*xr; - - real rxqkr_0 = yr*qJr_2 - zr*qJr_1; - real rxqkr_1 = zr*qJr_0 - xr*qJr_2; - real rxqkr_2 = xr*qJr_1 - yr*qJr_0; - - real dixqkr_0 = atom1.dipole.y*qJr_2 - atom1.dipole.z*qJr_1; - real dixqkr_1 = atom1.dipole.z*qJr_0 - atom1.dipole.x*qJr_2; - real dixqkr_2 = atom1.dipole.x*qJr_1 - atom1.dipole.y*qJr_0; - - real dkxqir_0 = atom2.dipole.y*qIr_2 - atom2.dipole.z*qIr_1; - real dkxqir_1 = atom2.dipole.z*qIr_0 - atom2.dipole.x*qIr_2; - real dkxqir_2 = atom2.dipole.x*qIr_1 - atom2.dipole.y*qIr_0; - - real rxqkdi_0 = yr*qJdI_2 - zr*qJdI_1; - real rxqkdi_1 = zr*qJdI_0 - xr*qJdI_2; - real rxqkdi_2 = xr*qJdI_1 - yr*qJdI_0; - - real rxqkir_0 = yr*qJqIr_2 - zr*qJqIr_1; - real rxqkir_1 = zr*qJqIr_0 - xr*qJqIr_2; - real rxqkir_2 = xr*qJqIr_1 - yr*qJqIr_0; - - real qkrxqir_0 = qJr_1*qIr_2 - qJr_2*qIr_1; - real qkrxqir_1 = qJr_2*qIr_0 - qJr_0*qIr_2; - real qkrxqir_2 = qJr_0*qIr_1 - qJr_1*qIr_0; - - real dkxui_0 = atom2.dipole.y*atom1.inducedDipole.z - atom2.dipole.z*atom1.inducedDipole.y; - real dkxui_1 = atom2.dipole.z*atom1.inducedDipole.x - atom2.dipole.x*atom1.inducedDipole.z; - real dkxui_2 = atom2.dipole.x*atom1.inducedDipole.y - atom2.dipole.y*atom1.inducedDipole.x; - - real dkxuip_0 = atom2.dipole.y*atom1.inducedDipolePolar.z - atom2.dipole.z*atom1.inducedDipolePolar.y; - real dkxuip_1 = atom2.dipole.z*atom1.inducedDipolePolar.x - atom2.dipole.x*atom1.inducedDipolePolar.z; - real dkxuip_2 = atom2.dipole.x*atom1.inducedDipolePolar.y - atom2.dipole.y*atom1.inducedDipolePolar.x; - - real uixqkrp_0 = atom1.inducedDipolePolar.y*qJr_2 - atom1.inducedDipolePolar.z*qJr_1; - real uixqkrp_1 = atom1.inducedDipolePolar.z*qJr_0 - atom1.inducedDipolePolar.x*qJr_2; - real uixqkrp_2 = atom1.inducedDipolePolar.x*qJr_1 - atom1.inducedDipolePolar.y*qJr_0; - - real uixqkr_0 = atom1.inducedDipole.y*qJr_2 - atom1.inducedDipole.z*qJr_1; - real uixqkr_1 = atom1.inducedDipole.z*qJr_0 - atom1.inducedDipole.x*qJr_2; - real uixqkr_2 = atom1.inducedDipole.x*qJr_1 - atom1.inducedDipole.y*qJr_0; - - real rxqkuip_0 = yr*qJuIp_2 - zr*qJuIp_1; - real rxqkuip_1 = zr*qJuIp_0 - xr*qJuIp_2; - real rxqkuip_2 = xr*qJuIp_1 - yr*qJuIp_0; - - real rxqkui_0 = yr*qJuI_2 - zr*qJuI_1; - real rxqkui_1 = zr*qJuI_0 - xr*qJuI_2; - real rxqkui_2 = xr*qJuI_1 - yr*qJuI_0; - - real ttm3_0 = rr3*dixdk_0 + gf3*dkxr_0 - gf6*rxqkr_0 - 2*rr5*(dixqkr_0 + dkxqir_0 + rxqkdi_0 - 2*qixqk_0) - 4*rr7*(rxqkir_0 - qkrxqir_0); - real ttm3_1 = rr3*dixdk_1 + gf3*dkxr_1 - gf6*rxqkr_1 - 2*rr5*(dixqkr_1 + dkxqir_1 + rxqkdi_1 - 2*qixqk_1) - 4*rr7*(rxqkir_1 - qkrxqir_1); - real ttm3_2 = rr3*dixdk_2 + gf3*dkxr_2 - gf6*rxqkr_2 - 2*rr5*(dixqkr_2 + dkxqir_2 + rxqkdi_2 - 2*qixqk_2) - 4*rr7*(rxqkir_2 - qkrxqir_2); - - real ttm3i_0 = -(dkxui_0*psc3+ dkxuip_0*dsc3)*0.5f + gti3*dkxr_0 - ((uixqkr_0 + rxqkui_0)*psc5 + (uixqkrp_0 + rxqkuip_0)*dsc5) - gti6*rxqkr_0; - real ttm3i_1 = -(dkxui_1*psc3+ dkxuip_1*dsc3)*0.5f + gti3*dkxr_1 - ((uixqkr_1 + rxqkui_1)*psc5 + (uixqkrp_1 + rxqkuip_1)*dsc5) - gti6*rxqkr_1; - real ttm3i_2 = -(dkxui_2*psc3+ dkxuip_2*dsc3)*0.5f + gti3*dkxr_2 - ((uixqkr_2 + rxqkui_2)*psc5 + (uixqkrp_2 + rxqkuip_2)*dsc5) - gti6*rxqkr_2; -#endif - - if (mScale < 1) { -#ifdef T1 - ttm2_0 *= mScale; - ttm2_1 *= mScale; - ttm2_2 *= mScale; -#endif - -#ifdef T3 - ttm3_0 *= mScale; - ttm3_1 *= mScale; - ttm3_2 *= mScale; -#endif - } - -#ifdef F1 - outputForce.x = -(ftm2_0+ftm2i_0); - outputForce.y = -(ftm2_1+ftm2i_1); - outputForce.z = -(ftm2_2+ftm2i_2); -#endif - -#ifdef T1 - outputForce.x = (ttm2_0 + ttm2i_0); - outputForce.y = (ttm2_1 + ttm2i_1); - outputForce.z = (ttm2_2 + ttm2i_2); -#endif - -#ifdef T3 - outputForce.x = (ttm3_0 + ttm3i_0); - outputForce.y = (ttm3_1 + ttm3i_1); - outputForce.z = (ttm3_2 + ttm3i_2); -#endif -} diff --git a/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForceNoQuadrupoles.cu b/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForceNoQuadrupoles.cu deleted file mode 100644 index f8d8e2f3f0492caa2c3f9aab68465d1bb2ffda04..0000000000000000000000000000000000000000 --- a/plugins/amoeba/platforms/cuda/src/kernels/electrostaticPairForceNoQuadrupoles.cu +++ /dev/null @@ -1,342 +0,0 @@ -/** - * This defines three different closely related functions, depending on which constant (F1, T1, or T3) is defined. - */ - -#if defined F1 -__device__ void computeOneInteractionF1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real& energy, real3& outputForce) { -#elif defined T1 -__device__ void computeOneInteractionT1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce) { -#else -__device__ void computeOneInteractionT3(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce) { -#endif - -#ifdef F1 - const float uScale = 1; - real ddsc3_0 = 0; - real ddsc3_1 = 0; - real ddsc3_2 = 0; - - real ddsc5_0 = 0; - real ddsc5_1 = 0; - real ddsc5_2 = 0; - - real ddsc7_0 = 0; - real ddsc7_1 = 0; - real ddsc7_2 = 0; -#endif - - real xr = atom2.posq.x - atom1.posq.x; - real yr = atom2.posq.y - atom1.posq.y; - real zr = atom2.posq.z - atom1.posq.z; - - real r2 = xr*xr + yr*yr + zr*zr; - real r = SQRT(r2); - real rr1 = RECIP(r); - real rr2 = rr1*rr1; - real rr3 = rr1*rr2; - real rr5 = 3*rr3*rr2; - real rr7 = 5*rr5*rr2; - real rr9 = 7*rr7*rr2; -#ifdef F1 - real rr11 = 9*rr9*rr2; -#endif - - real scale3 = 1; - real scale5 = 1; - real scale7 = 1; - - real pdamp = atom1.damp*atom2.damp; - if (pdamp != 0) { - - real ratio = r/pdamp; - float pGamma = atom2.thole > atom1.thole ? atom1.thole : atom2.thole; - - real damp = ratio*ratio*ratio*pGamma; - real dampExp = EXP(-damp); - real damp1 = damp + 1; - real damp2 = damp*damp; - - scale3 = 1 - dampExp; - scale5 = 1 - damp1*dampExp; - scale7 = 1 - (damp1 + 0.6f*damp2)*dampExp; - -#ifdef F1 - real factor = 3*damp*dampExp*rr2; - real factor7 = -0.2f + 0.6f*damp; - - ddsc3_0 = factor*xr; - ddsc5_0 = ddsc3_0*damp; - ddsc7_0 = ddsc5_0*factor7; - - ddsc3_1 = factor*yr; - ddsc5_1 = ddsc3_1*damp; - ddsc7_1 = ddsc5_1*factor7; - - ddsc3_2 = factor*zr; - ddsc5_2 = ddsc3_2*damp; - ddsc7_2 = ddsc5_2*factor7; -#endif - - } - -#if defined F1 - real scale3i = rr3*scale3*uScale; - real scale5i = rr5*scale5*uScale; -#endif - real dsc3 = rr3*scale3*dScale; - real psc3 = rr3*scale3*pScale; - - real dsc5 = rr5*scale5*dScale; - real psc5 = rr5*scale5*pScale; - - real dsc7 = rr7*scale7*dScale; - real psc7 = rr7*scale7*pScale; - -#if defined F1 - real sc2 = atom1.dipole.x*atom2.dipole.x + atom1.dipole.y*atom2.dipole.y + atom1.dipole.z*atom2.dipole.z; -#endif -#if defined F1 || defined T1 - real sc4 = atom2.dipole.x*xr + atom2.dipole.y*yr + atom2.dipole.z*zr; -#endif - -#if defined F1 || defined T3 - real sc3 = atom1.dipole.x*xr + atom1.dipole.y*yr + atom1.dipole.z*zr; -#endif - -#if defined F1 - real sci1 = atom1.inducedDipole.x*atom2.dipole.x + atom1.inducedDipole.y*atom2.dipole.y + atom1.inducedDipole.z*atom2.dipole.z + - atom2.inducedDipole.x*atom1.dipole.x + atom2.inducedDipole.y*atom1.dipole.y + atom2.inducedDipole.z*atom1.dipole.z; -#endif - -#if defined F1 || defined T3 - real sci3 = atom1.inducedDipole.x*xr + atom1.inducedDipole.y*yr + atom1.inducedDipole.z*zr; -#endif -#if defined F1 || defined T1 - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; -#endif - -#if defined F1 - real scip1 = atom1.inducedDipolePolar.x*atom2.dipole.x + atom1.inducedDipolePolar.y*atom2.dipole.y + atom1.inducedDipolePolar.z*atom2.dipole.z + - atom2.inducedDipolePolar.x*atom1.dipole.x + atom2.inducedDipolePolar.y*atom1.dipole.y + atom2.inducedDipolePolar.z*atom1.dipole.z; - - real scip2 = atom1.inducedDipole.x*atom2.inducedDipolePolar.x + atom1.inducedDipole.y*atom2.inducedDipolePolar.y + atom1.inducedDipole.z*atom2.inducedDipolePolar.z + - atom2.inducedDipole.x*atom1.inducedDipolePolar.x + atom2.inducedDipole.y*atom1.inducedDipolePolar.y + atom2.inducedDipole.z*atom1.inducedDipolePolar.z; - -#endif - -#if defined F1 || defined T3 - real scip3 = ((atom1.inducedDipolePolar.x)*(xr) + (atom1.inducedDipolePolar.y)*(yr) + (atom1.inducedDipolePolar.z)*(zr)); -#endif -#if defined F1 || defined T1 - real scip4 = ((atom2.inducedDipolePolar.x)*(xr) + (atom2.inducedDipolePolar.y)*(yr) + (atom2.inducedDipolePolar.z)*(zr)); -#endif - -#ifdef F1 - real gli1 = atom2.posq.w*sci3 - atom1.posq.w*sci4; - - real gli6 = sci1; - real glip1 = atom2.posq.w*scip3 - atom1.posq.w*scip4; - real glip6 = scip1; - real gli2 = -sc3*sci4 - sci3*sc4; - - real glip2 = -sc3*scip4 - scip3*sc4; - real factor3 = rr3*((gli1 + gli6)*pScale + (glip1 + glip6)*dScale); - real factor5 = rr5*(gli2*pScale + glip2*dScale); - - real ftm2i_0 = -0.5f*(factor3*ddsc3_0 + factor5*ddsc5_0); - real ftm2i_1 = -0.5f*(factor3*ddsc3_1 + factor5*ddsc5_1); - real ftm2i_2 = -0.5f*(factor3*ddsc3_2 + factor5*ddsc5_2); - - real gl0 = atom1.posq.w*atom2.posq.w; - real gl1 = atom2.posq.w*sc3 - atom1.posq.w*sc4; - real gl2 = -sc3*sc4; - real gl6 = sc2; - - real gf1 = rr3*gl0 + rr5*(gl1+gl6) + rr7*gl2; -#endif -#if defined F1 || defined T1 - real gf2 = -atom2.posq.w*rr3 + sc4*rr5; - real gf5 = 2*(-atom2.posq.w*rr5+sc4*rr7); -#endif -#if defined F1 || defined T3 - real gf3 = atom1.posq.w*rr3 + sc3*rr5; - real gf6 = 2*(-atom1.posq.w*rr5-sc3*rr7); -#endif - -#ifdef F1 - real em = mScale*(rr1*gl0 + rr3*(gl1+gl6) + rr5*gl2); - real ei = 0.5f*((gli1+gli6)*psc3 + gli2*psc5); - energy = em+ei; -#endif - -#ifdef F1 - real ftm2_0 = mScale*(gf1*xr + gf2*atom1.dipole.x + gf3*atom2.dipole.x); - real ftm2_1 = mScale*(gf1*yr + gf2*atom1.dipole.y + gf3*atom2.dipole.y); - real ftm2_2 = mScale*(gf1*zr + gf2*atom1.dipole.z + gf3*atom2.dipole.z); - - real gfi1 = rr2*(1.5f*((gli1+gli6)*psc3 + (glip1+glip6)*dsc3 + scip2*scale3i) + 2.5f*(gli2*psc5 + glip2*dsc5 - (sci3*scip4+scip3*sci4)*scale5i)); - ftm2i_0 += gfi1*xr; - ftm2i_1 += gfi1*yr; - ftm2i_2 += gfi1*zr; -#endif - -#if defined F1 || defined T1 - real gfi5 = (sci4*psc7 + scip4*dsc7); -#endif -#if defined F1 || defined T3 - real gfi6 = -(sci3*psc7 + scip3*dsc7); -#endif - -#ifdef F1 - ftm2i_0 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.x*psc3 + atom1.inducedDipolePolar.x*dsc3) + - sc4*(atom1.inducedDipole.x*psc5 + atom1.inducedDipolePolar.x*dsc5)) + - - 0.5f*(atom1.posq.w*(atom2.inducedDipole.x*psc3+atom2.inducedDipolePolar.x*dsc3) + - sc3*(atom2.inducedDipole.x*psc5 +atom2.inducedDipolePolar.x*dsc5)) + - - scale5i*(sci4*atom1.inducedDipolePolar.x+scip4*atom1.inducedDipole.x + - sci3*atom2.inducedDipolePolar.x+scip3*atom2.inducedDipole.x)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.x + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.x; - - ftm2i_1 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.y*psc3 + atom1.inducedDipolePolar.y*dsc3) + - sc4*(atom1.inducedDipole.y*psc5 + atom1.inducedDipolePolar.y*dsc5)) + - - (atom1.posq.w*(atom2.inducedDipole.y*psc3+atom2.inducedDipolePolar.y*dsc3) + - sc3*(atom2.inducedDipole.y*psc5+atom2.inducedDipolePolar.y*dsc5))*0.5f + - scale5i*(sci4*atom1.inducedDipolePolar.y+scip4*atom1.inducedDipole.y + sci3*atom2.inducedDipolePolar.y+scip3*atom2.inducedDipole.y)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.y + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.y; - - ftm2i_2 += 0.5f*(-atom2.posq.w*(atom1.inducedDipole.z*psc3 + atom1.inducedDipolePolar.z*dsc3) + - sc4*(atom1.inducedDipole.z*psc5 + atom1.inducedDipolePolar.z*dsc5)) + - - (atom1.posq.w*(atom2.inducedDipole.z*psc3+atom2.inducedDipolePolar.z*dsc3) + - sc3*(atom2.inducedDipole.z*psc5+atom2.inducedDipolePolar.z*dsc5))*0.5f + - scale5i*(sci4*atom1.inducedDipolePolar.z+scip4*atom1.inducedDipole.z + - sci3*atom2.inducedDipolePolar.z+scip3*atom2.inducedDipole.z)*0.5f + - - 0.5f*(sci4*psc5+scip4*dsc5)*atom1.dipole.z + - 0.5f*(sci3*psc5+scip3*dsc5)*atom2.dipole.z; - -#ifdef DIRECT_POLARIZATION - real gfd = 0.5*(3*rr2*scip2*scale3i - 5*rr2*(scip3*sci4+sci3*scip4)*scale5i); - real temp5 = 0.5*scale5i; - real fdir_0 = gfd*xr + temp5*(sci4*atom1.inducedDipolePolar.x + scip4*atom1.inducedDipole.x + sci3*atom2.inducedDipolePolar.x + scip3*atom2.inducedDipole.x); - real fdir_1 = gfd*yr + temp5*(sci4*atom1.inducedDipolePolar.y + scip4*atom1.inducedDipole.y + sci3*atom2.inducedDipolePolar.y + scip3*atom2.inducedDipole.y); - real fdir_2 = gfd*zr + temp5*(sci4*atom1.inducedDipolePolar.z + scip4*atom1.inducedDipole.z + sci3*atom2.inducedDipolePolar.z + scip3*atom2.inducedDipole.z); - ftm2i_0 -= fdir_0; - ftm2i_1 -= fdir_1; - ftm2i_2 -= fdir_2; -#else - real scaleF = 0.5f*uScale; - real inducedFactor3 = scip2*rr3*scaleF; - real inducedFactor5 = (sci3*scip4+scip3*sci4)*rr5*scaleF; - real findmp_0 = inducedFactor3*ddsc3_0 - inducedFactor5*ddsc5_0; - real findmp_1 = inducedFactor3*ddsc3_1 - inducedFactor5*ddsc5_1; - real findmp_2 = inducedFactor3*ddsc3_2 - inducedFactor5*ddsc5_2; - ftm2i_0 -= findmp_0; - ftm2i_1 -= findmp_1; - ftm2i_2 -= findmp_2; -#endif -#endif - -#if defined T1 - real gti2 = 0.5f*(sci4*psc5+scip4*dsc5); - real gti5 = gfi5; -#endif -#if defined T3 - real gti3 = 0.5f*(sci3*psc5+scip3*dsc5); - real gti6 = gfi6; -#endif - -#if defined T1 || defined T3 - real dixdk_0 = atom1.dipole.y*atom2.dipole.z - atom1.dipole.z*atom2.dipole.y; - real dixdk_1 = atom1.dipole.z*atom2.dipole.x - atom1.dipole.x*atom2.dipole.z; - real dixdk_2 = atom1.dipole.x*atom2.dipole.y - atom1.dipole.y*atom2.dipole.x; - -#if defined T1 - real dixuk_0 = atom1.dipole.y*atom2.inducedDipole.z - atom1.dipole.z*atom2.inducedDipole.y; - real dixuk_1 = atom1.dipole.z*atom2.inducedDipole.x - atom1.dipole.x*atom2.inducedDipole.z; - real dixuk_2 = atom1.dipole.x*atom2.inducedDipole.y - atom1.dipole.y*atom2.inducedDipole.x; -#endif -#endif - -#ifdef T1 - real dixukp_0 = atom1.dipole.y*atom2.inducedDipolePolar.z - atom1.dipole.z*atom2.inducedDipolePolar.y; - real dixukp_1 = atom1.dipole.z*atom2.inducedDipolePolar.x - atom1.dipole.x*atom2.inducedDipolePolar.z; - real dixukp_2 = atom1.dipole.x*atom2.inducedDipolePolar.y - atom1.dipole.y*atom2.inducedDipolePolar.x; -#endif - -#ifdef T1 - real dixr_0 = atom1.dipole.y*zr - atom1.dipole.z*yr; - real dixr_1 = atom1.dipole.z*xr - atom1.dipole.x*zr; - real dixr_2 = atom1.dipole.x*yr - atom1.dipole.y*xr; -#endif - -#ifdef T1 - real ttm2_0 = -rr3*dixdk_0 + gf2*dixr_0; - real ttm2_1 = -rr3*dixdk_1 + gf2*dixr_1; - real ttm2_2 = -rr3*dixdk_2 + gf2*dixr_2; - - real ttm2i_0 = -(dixuk_0*psc3+dixukp_0*dsc3)*0.5f + gti2*dixr_0; - real ttm2i_1 = -(dixuk_1*psc3+dixukp_1*dsc3)*0.5f + gti2*dixr_1; - real ttm2i_2 = -(dixuk_2*psc3+dixukp_2*dsc3)*0.5f + gti2*dixr_2; -#endif - -#ifdef T3 - real dkxr_0 = atom2.dipole.y*zr - atom2.dipole.z*yr; - real dkxr_1 = atom2.dipole.z*xr - atom2.dipole.x*zr; - real dkxr_2 = atom2.dipole.x*yr - atom2.dipole.y*xr; - - real dkxui_0 = atom2.dipole.y*atom1.inducedDipole.z - atom2.dipole.z*atom1.inducedDipole.y; - real dkxui_1 = atom2.dipole.z*atom1.inducedDipole.x - atom2.dipole.x*atom1.inducedDipole.z; - real dkxui_2 = atom2.dipole.x*atom1.inducedDipole.y - atom2.dipole.y*atom1.inducedDipole.x; - - real dkxuip_0 = atom2.dipole.y*atom1.inducedDipolePolar.z - atom2.dipole.z*atom1.inducedDipolePolar.y; - real dkxuip_1 = atom2.dipole.z*atom1.inducedDipolePolar.x - atom2.dipole.x*atom1.inducedDipolePolar.z; - real dkxuip_2 = atom2.dipole.x*atom1.inducedDipolePolar.y - atom2.dipole.y*atom1.inducedDipolePolar.x; - - real ttm3_0 = rr3*dixdk_0 + gf3*dkxr_0; - real ttm3_1 = rr3*dixdk_1 + gf3*dkxr_1; - real ttm3_2 = rr3*dixdk_2 + gf3*dkxr_2; - - real ttm3i_0 = -(dkxui_0*psc3+ dkxuip_0*dsc3)*0.5f + gti3*dkxr_0; - real ttm3i_1 = -(dkxui_1*psc3+ dkxuip_1*dsc3)*0.5f + gti3*dkxr_1; - real ttm3i_2 = -(dkxui_2*psc3+ dkxuip_2*dsc3)*0.5f + gti3*dkxr_2; -#endif - - if (mScale < 1) { -#ifdef T1 - ttm2_0 *= mScale; - ttm2_1 *= mScale; - ttm2_2 *= mScale; -#endif - -#ifdef T3 - ttm3_0 *= mScale; - ttm3_1 *= mScale; - ttm3_2 *= mScale; -#endif - } - -#ifdef F1 - outputForce.x = -(ftm2_0+ftm2i_0); - outputForce.y = -(ftm2_1+ftm2i_1); - outputForce.z = -(ftm2_2+ftm2i_2); -#endif - -#ifdef T1 - outputForce.x = (ttm2_0 + ttm2i_0); - outputForce.y = (ttm2_1 + ttm2i_1); - outputForce.z = (ttm2_2 + ttm2i_2); -#endif - -#ifdef T3 - outputForce.x = (ttm3_0 + ttm3i_0); - outputForce.y = (ttm3_1 + ttm3i_1); - outputForce.z = (ttm3_2 + ttm3i_2); -#endif -} diff --git a/plugins/amoeba/platforms/cuda/src/kernels/multipoleElectrostatics.cu b/plugins/amoeba/platforms/cuda/src/kernels/multipoleElectrostatics.cu index 7b1ee0f7801380f523adab5bc0b601f73548ef42..ebd8beb8724d5a56d2d14146a2cf9d02ee2d6697 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/multipoleElectrostatics.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/multipoleElectrostatics.cu @@ -1,31 +1,28 @@ #define WARPS_PER_GROUP (THREAD_BLOCK_SIZE/TILE_SIZE) typedef struct { - real4 posq; - real3 force, dipole, inducedDipole, inducedDipolePolar; + real3 pos, force, torque, inducedDipole, inducedDipolePolar, sphericalDipole; + real q; + float thole, damp; #ifdef INCLUDE_QUADRUPOLES - real quadrupoleXX, quadrupoleXY, quadrupoleXZ; - real quadrupoleYY, quadrupoleYZ; + real sphericalQuadrupole[5]; #endif - float thole, damp; } AtomData; -__device__ void computeOneInteractionF1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real& energy, real3& outputForce); -__device__ void computeOneInteractionT1(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce); -__device__ void computeOneInteractionT3(AtomData& atom1, volatile AtomData& atom2, float dScale, float pScale, float mScale, real3& outputForce); - -inline __device__ void loadAtomData(AtomData& data, int atom, const real4* __restrict__ posq, const real* __restrict__ labFrameDipole, - const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const float2* __restrict__ dampingAndThole) { - data.posq = posq[atom]; - data.dipole.x = labFrameDipole[atom*3]; - data.dipole.y = labFrameDipole[atom*3+1]; - data.dipole.z = labFrameDipole[atom*3+2]; +inline __device__ void loadAtomData(AtomData& data, int atom, const real4* __restrict__ posq, const real* __restrict__ sphericalDipole, + const real* __restrict__ sphericalQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const float2* __restrict__ dampingAndThole) { + real4 atomPosq = posq[atom]; + data.pos = make_real3(atomPosq.x, atomPosq.y, atomPosq.z); + data.q = atomPosq.w; + data.sphericalDipole.x = sphericalDipole[atom*3]; + data.sphericalDipole.y = sphericalDipole[atom*3+1]; + data.sphericalDipole.z = sphericalDipole[atom*3+2]; #ifdef INCLUDE_QUADRUPOLES - data.quadrupoleXX = labFrameQuadrupole[atom*5]; - data.quadrupoleXY = labFrameQuadrupole[atom*5+1]; - data.quadrupoleXZ = labFrameQuadrupole[atom*5+2]; - data.quadrupoleYY = labFrameQuadrupole[atom*5+3]; - data.quadrupoleYZ = labFrameQuadrupole[atom*5+4]; + data.sphericalQuadrupole[0] = sphericalQuadrupole[atom*5]; + data.sphericalQuadrupole[1] = sphericalQuadrupole[atom*5+1]; + data.sphericalQuadrupole[2] = sphericalQuadrupole[atom*5+2]; + data.sphericalQuadrupole[3] = sphericalQuadrupole[atom*5+3]; + data.sphericalQuadrupole[4] = sphericalQuadrupole[atom*5+4]; #endif data.inducedDipole.x = inducedDipole[atom*3]; data.inducedDipole.y = inducedDipole[atom*3+1]; @@ -57,11 +54,327 @@ __device__ float computePScaleFactor(uint2 covalent, unsigned int polarizationGr return (x && y ? 0.0f : (x && p ? 0.5f : 1.0f)); } +__device__ void computeOneInteraction(AtomData& atom1, AtomData& atom2, bool hasExclusions, float dScale, float pScale, float mScale, float forceFactor, mixed& energy) { + // Compute the displacement. + + real3 delta; + delta.x = atom2.pos.x - atom1.pos.x; + delta.y = atom2.pos.y - atom1.pos.y; + delta.z = atom2.pos.z - atom1.pos.z; + real r2 = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; + real rInv = RSQRT(r2); + real r = r2*rInv; + + // Rotate the various dipoles and quadrupoles. + + real qiRotationMatrix[3][3]; + buildQIRotationMatrix(delta, rInv, qiRotationMatrix); + + + real3 qiUindI = 0.5f*make_real3(qiRotationMatrix[0][1]*atom1.inducedDipole.x + qiRotationMatrix[0][2]*atom1.inducedDipole.y + qiRotationMatrix[0][0]*atom1.inducedDipole.z, + qiRotationMatrix[1][1]*atom1.inducedDipole.x + qiRotationMatrix[1][2]*atom1.inducedDipole.y + qiRotationMatrix[1][0]*atom1.inducedDipole.z, + qiRotationMatrix[2][1]*atom1.inducedDipole.x + qiRotationMatrix[2][2]*atom1.inducedDipole.y + qiRotationMatrix[2][0]*atom1.inducedDipole.z); + real3 qiUindJ = 0.5f*make_real3(qiRotationMatrix[0][1]*atom2.inducedDipole.x + qiRotationMatrix[0][2]*atom2.inducedDipole.y + qiRotationMatrix[0][0]*atom2.inducedDipole.z, + qiRotationMatrix[1][1]*atom2.inducedDipole.x + qiRotationMatrix[1][2]*atom2.inducedDipole.y + qiRotationMatrix[1][0]*atom2.inducedDipole.z, + qiRotationMatrix[2][1]*atom2.inducedDipole.x + qiRotationMatrix[2][2]*atom2.inducedDipole.y + qiRotationMatrix[2][0]*atom2.inducedDipole.z); + real3 qiUinpI = 0.5f*make_real3(qiRotationMatrix[0][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[0][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[0][0]*atom1.inducedDipolePolar.z, + qiRotationMatrix[1][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[1][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[1][0]*atom1.inducedDipolePolar.z, + qiRotationMatrix[2][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[2][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[2][0]*atom1.inducedDipolePolar.z); + real3 qiUinpJ = 0.5f*make_real3(qiRotationMatrix[0][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[0][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[0][0]*atom2.inducedDipolePolar.z, + qiRotationMatrix[1][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[1][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[1][0]*atom2.inducedDipolePolar.z, + qiRotationMatrix[2][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[2][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[2][0]*atom2.inducedDipolePolar.z); + + real3 rotatedDipole1 = rotateDipole(atom1.sphericalDipole, qiRotationMatrix); + real3 rotatedDipole2 = rotateDipole(atom2.sphericalDipole, qiRotationMatrix); + real rotatedQuadrupole1[] = {0, 0, 0, 0, 0}; + real rotatedQuadrupole2[] = {0, 0, 0, 0, 0}; +#ifdef INCLUDE_QUADRUPOLES + rotateQuadupoles(qiRotationMatrix, atom1.sphericalQuadrupole, atom2.sphericalQuadrupole, rotatedQuadrupole1, rotatedQuadrupole2); +#endif + + // The field derivatives at I due to permanent and induced moments on J, and vice-versa. + // Also, their derivatives w.r.t. R, which are needed for force calculations + real Vij[9], Vji[9], VjiR[9], VijR[9]; + // The field derivatives at I due to only permanent moments on J, and vice-versa. + real Vijp[3], Vijd[3], Vjip[3], Vjid[3]; + real rInvVec[7]; + + // The rInvVec array is defined such that the ith element is R^-i, with the + // dieleectric constant folded in, to avoid conversions later. + rInvVec[1] = rInv; + for (int i = 2; i < 7; ++i) + rInvVec[i] = rInvVec[i-1] * rInv; + + real dmp = atom1.damp*atom2.damp; + real a = min(atom1.thole, atom2.thole); + real u = fabs(dmp) > 1.0e-5f ? r/dmp : 1e10f; + real au3 = a*u*u*u; + real expau3 = au3 < 50 ? EXP(-au3) : 0; + real a2u6 = au3*au3; + real a3u9 = a2u6*au3; + // Thole damping factors for energies + real thole_c = 1 - expau3; + real thole_d0 = 1 - expau3*(1 + 1.5f*au3); + real thole_d1 = 1 - expau3; + real thole_q0 = 1 - expau3*(1 + au3 + a2u6); + real thole_q1 = 1 - expau3*(1 + au3); + // Thole damping factors for derivatives + real dthole_c = 1 - expau3*(1 + 1.5f*au3); + real dthole_d0 = 1 - expau3*(1 + au3 + 1.5f*a2u6); + real dthole_d1 = 1 - expau3*(1 + au3); + real dthole_q0 = 1 - expau3*(1 + au3 + 0.25f*a2u6 + 0.75f*a3u9); + real dthole_q1 = 1 - expau3*(1 + au3 + 0.75f*a2u6); + + // Now we compute the (attenuated) Coulomb operator and its derivatives, contracted with + // permanent moments and induced dipoles. Note that the coefficient of the permanent force + // terms is half of the expected value; this is because we compute the interaction of I with + // the sum of induced and permanent moments on J, as well as the interaction of J with I's + // permanent and induced moments; doing so double counts the permanent-permanent interaction. + real ePermCoef, dPermCoef, eUIndCoef, dUIndCoef, eUInpCoef, dUInpCoef; + + // C-C terms (m=0) + ePermCoef = rInvVec[1]*mScale; + dPermCoef = -0.5f*mScale*rInvVec[2]; + Vij[0] = ePermCoef*atom2.q; + Vji[0] = ePermCoef*atom1.q; + VijR[0] = dPermCoef*atom2.q; + VjiR[0] = dPermCoef*atom1.q; + + // C-D and C-Uind terms (m=0) + ePermCoef = rInvVec[2]*mScale; + eUIndCoef = rInvVec[2]*pScale*thole_c; + eUInpCoef = rInvVec[2]*dScale*thole_c; + dPermCoef = -rInvVec[3]*mScale; + dUIndCoef = -2*rInvVec[3]*pScale*dthole_c; + dUInpCoef = -2*rInvVec[3]*dScale*dthole_c; + Vij[0] += -(ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x); + Vji[1] = -(ePermCoef*atom1.q); + VijR[0] += -(dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x); + VjiR[1] = -(dPermCoef*atom1.q); + Vjip[0] = -(eUInpCoef*atom1.q); + Vjid[0] = -(eUIndCoef*atom1.q); + // D-C and Uind-C terms (m=0) + Vij[1] = ePermCoef*atom2.q; + Vji[0] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] = dPermCoef*atom2.q; + VjiR[0] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] = eUInpCoef*atom2.q; + Vijd[0] = eUIndCoef*atom2.q; + + // D-D and D-Uind terms (m=0) + ePermCoef = -2*rInvVec[3]*mScale; + eUIndCoef = -2*rInvVec[3]*pScale*thole_d0; + eUInpCoef = -2*rInvVec[3]*dScale*thole_d0; + dPermCoef = 3*rInvVec[4]*mScale; + dUIndCoef = 6*rInvVec[4]*pScale*dthole_d0; + dUInpCoef = 6*rInvVec[4]*dScale*dthole_d0; + Vij[1] += ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x; + Vji[1] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] += dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x; + VjiR[1] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] += eUInpCoef*rotatedDipole2.x; + Vijd[0] += eUIndCoef*rotatedDipole2.x; + Vjip[0] += eUInpCoef*rotatedDipole1.x; + Vjid[0] += eUIndCoef*rotatedDipole1.x; + // D-D and D-Uind terms (m=1) + ePermCoef = rInvVec[3]*mScale; + eUIndCoef = rInvVec[3]*pScale*thole_d1; + eUInpCoef = rInvVec[3]*dScale*thole_d1; + dPermCoef = -1.5f*rInvVec[4]*mScale; + dUIndCoef = -3*rInvVec[4]*pScale*dthole_d1; + dUInpCoef = -3*rInvVec[4]*dScale*dthole_d1; + Vij[2] = ePermCoef*rotatedDipole2.y + eUIndCoef*qiUindJ.y + eUInpCoef*qiUinpJ.y; + Vji[2] = ePermCoef*rotatedDipole1.y + eUIndCoef*qiUindI.y + eUInpCoef*qiUinpI.y; + VijR[2] = dPermCoef*rotatedDipole2.y + dUIndCoef*qiUindJ.y + dUInpCoef*qiUinpJ.y; + VjiR[2] = dPermCoef*rotatedDipole1.y + dUIndCoef*qiUindI.y + dUInpCoef*qiUinpI.y; + Vij[3] = ePermCoef*rotatedDipole2.z + eUIndCoef*qiUindJ.z + eUInpCoef*qiUinpJ.z; + Vji[3] = ePermCoef*rotatedDipole1.z + eUIndCoef*qiUindI.z + eUInpCoef*qiUinpI.z; + VijR[3] = dPermCoef*rotatedDipole2.z + dUIndCoef*qiUindJ.z + dUInpCoef*qiUinpJ.z; + VjiR[3] = dPermCoef*rotatedDipole1.z + dUIndCoef*qiUindI.z + dUInpCoef*qiUinpI.z; + Vijp[1] = eUInpCoef*rotatedDipole2.y; + Vijd[1] = eUIndCoef*rotatedDipole2.y; + Vjip[1] = eUInpCoef*rotatedDipole1.y; + Vjid[1] = eUIndCoef*rotatedDipole1.y; + Vijp[2] = eUInpCoef*rotatedDipole2.z; + Vijd[2] = eUIndCoef*rotatedDipole2.z; + Vjip[2] = eUInpCoef*rotatedDipole1.z; + Vjid[2] = eUIndCoef*rotatedDipole1.z; + + // C-Q terms (m=0) + ePermCoef = mScale*rInvVec[3]; + dPermCoef = -1.5f*rInvVec[4]*mScale; + Vij[0] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] = ePermCoef*atom1.q; + VijR[0] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] = dPermCoef*atom1.q; + // Q-C terms (m=0) + Vij[4] = ePermCoef*atom2.q; + Vji[0] += ePermCoef*rotatedQuadrupole1[0]; + VijR[4] = dPermCoef*atom2.q; + VjiR[0] += dPermCoef*rotatedQuadrupole1[0]; + + // D-Q and Uind-Q terms (m=0) + ePermCoef = rInvVec[4]*3.0*mScale; + eUIndCoef = rInvVec[4]*3.0*pScale*thole_q0; + eUInpCoef = rInvVec[4]*3.0*dScale*thole_q0; + dPermCoef = -6*rInvVec[5]*mScale; + dUIndCoef = -12*rInvVec[5]*pScale*dthole_q0; + dUInpCoef = -12*rInvVec[5]*dScale*dthole_q0; + Vij[1] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] += eUInpCoef*rotatedQuadrupole2[0]; + Vijd[0] += eUIndCoef*rotatedQuadrupole2[0]; + // Q-D and Q-Uind terms (m=0) + Vij[4] += -(ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x); + Vji[1] += -(ePermCoef*rotatedQuadrupole1[0]); + VijR[4] += -(dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x); + VjiR[1] += -(dPermCoef*rotatedQuadrupole1[0]); + Vjip[0] += -(eUInpCoef*rotatedQuadrupole1[0]); + Vjid[0] += -(eUIndCoef*rotatedQuadrupole1[0]); + + // D-Q and Uind-Q terms (m=1) + const real sqrtThree = SQRT((real) 3); + ePermCoef = -sqrtThree*rInvVec[4]*mScale; + eUIndCoef = -sqrtThree*rInvVec[4]*pScale*thole_q1; + eUInpCoef = -sqrtThree*rInvVec[4]*dScale*thole_q1; + dPermCoef = 2*sqrtThree*rInvVec[5]*mScale; + dUIndCoef = 4*sqrtThree*rInvVec[5]*pScale*dthole_q1; + dUInpCoef = 4*sqrtThree*rInvVec[5]*dScale*dthole_q1; + Vij[2] += ePermCoef*rotatedQuadrupole2[1]; + Vji[5] = ePermCoef*rotatedDipole1.y + eUIndCoef*qiUindI.y + eUInpCoef*qiUinpI.y; + VijR[2] += dPermCoef*rotatedQuadrupole2[1]; + VjiR[5] = dPermCoef*rotatedDipole1.y + dUIndCoef*qiUindI.y + dUInpCoef*qiUinpI.y; + Vij[3] += ePermCoef*rotatedQuadrupole2[2]; + Vji[6] = ePermCoef*rotatedDipole1.z + eUIndCoef*qiUindI.z + eUInpCoef*qiUinpI.z; + VijR[3] += dPermCoef*rotatedQuadrupole2[2]; + VjiR[6] = dPermCoef*rotatedDipole1.z + dUIndCoef*qiUindI.z + dUInpCoef*qiUinpI.z; + Vijp[1] += eUInpCoef*rotatedQuadrupole2[1]; + Vijd[1] += eUIndCoef*rotatedQuadrupole2[1]; + Vijp[2] += eUInpCoef*rotatedQuadrupole2[2]; + Vijd[2] += eUIndCoef*rotatedQuadrupole2[2]; + // D-Q and Uind-Q terms (m=1) + Vij[5] = -(ePermCoef*rotatedDipole2.y + eUIndCoef*qiUindJ.y + eUInpCoef*qiUinpJ.y); + Vji[2] += -(ePermCoef*rotatedQuadrupole1[1]); + VijR[5] = -(dPermCoef*rotatedDipole2.y + dUIndCoef*qiUindJ.y + dUInpCoef*qiUinpJ.y); + VjiR[2] += -(dPermCoef*rotatedQuadrupole1[1]); + Vij[6] = -(ePermCoef*rotatedDipole2.z + eUIndCoef*qiUindJ.z + eUInpCoef*qiUinpJ.z); + Vji[3] += -(ePermCoef*rotatedQuadrupole1[2]); + VijR[6] = -(dPermCoef*rotatedDipole2.z + dUIndCoef*qiUindJ.z + dUInpCoef*qiUinpJ.z); + VjiR[3] += -(dPermCoef*rotatedQuadrupole1[2]); + Vjip[1] += -(eUInpCoef*rotatedQuadrupole1[1]); + Vjid[1] += -(eUIndCoef*rotatedQuadrupole1[1]); + Vjip[2] += -(eUInpCoef*rotatedQuadrupole1[2]); + Vjid[2] += -(eUIndCoef*rotatedQuadrupole1[2]); + + // Q-Q terms (m=0) + ePermCoef = 6*rInvVec[5]*mScale; + dPermCoef = -15*rInvVec[6]*mScale; + Vij[4] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] += ePermCoef*rotatedQuadrupole1[0]; + VijR[4] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] += dPermCoef*rotatedQuadrupole1[0]; + // Q-Q terms (m=1) + ePermCoef = -4*rInvVec[5]*mScale; + dPermCoef = 10*rInvVec[6]*mScale; + Vij[5] += ePermCoef*rotatedQuadrupole2[1]; + Vji[5] += ePermCoef*rotatedQuadrupole1[1]; + VijR[5] += dPermCoef*rotatedQuadrupole2[1]; + VjiR[5] += dPermCoef*rotatedQuadrupole1[1]; + Vij[6] += ePermCoef*rotatedQuadrupole2[2]; + Vji[6] += ePermCoef*rotatedQuadrupole1[2]; + VijR[6] += dPermCoef*rotatedQuadrupole2[2]; + VjiR[6] += dPermCoef*rotatedQuadrupole1[2]; + // Q-Q terms (m=2) + ePermCoef = rInvVec[5]*mScale; + dPermCoef = -2.5f*rInvVec[6]*mScale; + Vij[7] = ePermCoef*rotatedQuadrupole2[3]; + Vji[7] = ePermCoef*rotatedQuadrupole1[3]; + VijR[7] = dPermCoef*rotatedQuadrupole2[3]; + VjiR[7] = dPermCoef*rotatedQuadrupole1[3]; + Vij[8] = ePermCoef*rotatedQuadrupole2[4]; + Vji[8] = ePermCoef*rotatedQuadrupole1[4]; + VijR[8] = dPermCoef*rotatedQuadrupole2[4]; + VjiR[8] = dPermCoef*rotatedQuadrupole1[4]; + + // Evaluate the energies, forces and torques due to permanent+induced moments + // interacting with just the permanent moments. + energy += forceFactor*0.5f*( + atom1.q*Vij[0] + rotatedDipole1.x*Vij[1] + rotatedDipole1.y*Vij[2] + rotatedDipole1.z*Vij[3] + rotatedQuadrupole1[0]*Vij[4] + rotatedQuadrupole1[1]*Vij[5] + rotatedQuadrupole1[2]*Vij[6] + rotatedQuadrupole1[3]*Vij[7] + rotatedQuadrupole1[4]*Vij[8] + + atom2.q*Vji[0] + rotatedDipole2.x*Vji[1] + rotatedDipole2.y*Vji[2] + rotatedDipole2.z*Vji[3] + rotatedQuadrupole2[0]*Vji[4] + rotatedQuadrupole2[1]*Vji[5] + rotatedQuadrupole2[2]*Vji[6] + rotatedQuadrupole2[3]*Vji[7] + rotatedQuadrupole2[4]*Vji[8]); + real fIZ = atom1.q*VijR[0] + rotatedDipole1.x*VijR[1] + rotatedDipole1.y*VijR[2] + rotatedDipole1.z*VijR[3] + rotatedQuadrupole1[0]*VijR[4] + rotatedQuadrupole1[1]*VijR[5] + rotatedQuadrupole1[2]*VijR[6] + rotatedQuadrupole1[3]*VijR[7] + rotatedQuadrupole1[4]*VijR[8]; + real fJZ = atom2.q*VjiR[0] + rotatedDipole2.x*VjiR[1] + rotatedDipole2.y*VjiR[2] + rotatedDipole2.z*VjiR[3] + rotatedQuadrupole2[0]*VjiR[4] + rotatedQuadrupole2[1]*VjiR[5] + rotatedQuadrupole2[2]*VjiR[6] + rotatedQuadrupole2[3]*VjiR[7] + rotatedQuadrupole2[4]*VjiR[8]; + real EIX = rotatedDipole1.z*Vij[1] - rotatedDipole1.x*Vij[3] + sqrtThree*rotatedQuadrupole1[2]*Vij[4] + rotatedQuadrupole1[4]*Vij[5] - (sqrtThree*rotatedQuadrupole1[0]+rotatedQuadrupole1[3])*Vij[6] + rotatedQuadrupole1[2]*Vij[7] - rotatedQuadrupole1[1]*Vij[8]; + real EIY = -rotatedDipole1.y*Vij[1] + rotatedDipole1.x*Vij[2] - sqrtThree*rotatedQuadrupole1[1]*Vij[4] + (sqrtThree*rotatedQuadrupole1[0]-rotatedQuadrupole1[3])*Vij[5] - rotatedQuadrupole1[4]*Vij[6] + rotatedQuadrupole1[1]*Vij[7] + rotatedQuadrupole1[2]*Vij[8]; + real EIZ = -rotatedDipole1.z*Vij[2] + rotatedDipole1.y*Vij[3] - rotatedQuadrupole1[2]*Vij[5] + rotatedQuadrupole1[1]*Vij[6] - 2*rotatedQuadrupole1[4]*Vij[7] + 2*rotatedQuadrupole1[3]*Vij[8]; + real EJX = rotatedDipole2.z*Vji[1] - rotatedDipole2.x*Vji[3] + sqrtThree*rotatedQuadrupole2[2]*Vji[4] + rotatedQuadrupole2[4]*Vji[5] - (sqrtThree*rotatedQuadrupole2[0]+rotatedQuadrupole2[3])*Vji[6] + rotatedQuadrupole2[2]*Vji[7] - rotatedQuadrupole2[1]*Vji[8]; + real EJY = -rotatedDipole2.y*Vji[1] + rotatedDipole2.x*Vji[2] - sqrtThree*rotatedQuadrupole2[1]*Vji[4] + (sqrtThree*rotatedQuadrupole2[0]-rotatedQuadrupole2[3])*Vji[5] - rotatedQuadrupole2[4]*Vji[6] + rotatedQuadrupole2[1]*Vji[7] + rotatedQuadrupole2[2]*Vji[8]; + real EJZ = -rotatedDipole2.z*Vji[2] + rotatedDipole2.y*Vji[3] - rotatedQuadrupole2[2]*Vji[5] + rotatedQuadrupole2[1]*Vji[6] - 2*rotatedQuadrupole2[4]*Vji[7] + 2*rotatedQuadrupole2[3]*Vji[8]; + + // Define the torque intermediates for the induced dipoles. These are simply the induced dipole torque + // intermediates dotted with the field due to permanent moments only, at each center. We inline the + // induced dipole torque intermediates here, for simplicity. N.B. There are no torques on the dipoles + // themselves, so we accumulate the torque intermediates into separate variables to allow them to be + // used only in the force calculation. + // + // The torque about the x axis (needed to obtain the y force on the induced dipoles, below) + // qiUindIx[0] = qiQUindI[2]; qiUindIx[1] = 0; qiUindIx[2] = -qiQUindI[0] + real iEIX = qiUinpI.z*Vijp[0] + qiUindI.z*Vijd[0] - qiUinpI.x*Vijp[2] - qiUindI.x*Vijd[2]; + real iEJX = qiUinpJ.z*Vjip[0] + qiUindJ.z*Vjid[0] - qiUinpJ.x*Vjip[2] - qiUindJ.x*Vjid[2]; + // The torque about the y axis (needed to obtain the x force on the induced dipoles, below) + // qiUindIy[0] = -qiQUindI[1]; qiUindIy[1] = qiQUindI[0]; qiUindIy[2] = 0 + real iEIY = qiUinpI.x*Vijp[1] + qiUindI.x*Vijd[1] - qiUinpI.y*Vijp[0] - qiUindI.y*Vijd[0]; + real iEJY = qiUinpJ.x*Vjip[1] + qiUindJ.x*Vjid[1] - qiUinpJ.y*Vjip[0] - qiUindJ.y*Vjid[0]; + +#ifdef USE_MUTUAL_POLARIZATION + // Uind-Uind terms (m=0) + real eCoef = -4*rInvVec[3]*thole_d0; + real dCoef = 6*rInvVec[4]*dthole_d0; + iEIX += eCoef*(qiUinpI.z*qiUindJ.x + qiUindI.z*qiUinpJ.x); + iEJX += eCoef*(qiUinpJ.z*qiUindI.x + qiUindJ.z*qiUinpI.x); + iEIY -= eCoef*(qiUinpI.y*qiUindJ.x + qiUindI.y*qiUinpJ.x); + iEJY -= eCoef*(qiUinpJ.y*qiUindI.x + qiUindJ.y*qiUinpI.x); + fIZ += dCoef*(qiUinpI.x*qiUindJ.x + qiUindI.x*qiUinpJ.x); + fIZ += dCoef*(qiUinpJ.x*qiUindI.x + qiUindJ.x*qiUinpI.x); + // Uind-Uind terms (m=1) + eCoef = 2*rInvVec[3]*thole_d1; + dCoef = -3*rInvVec[4]*dthole_d1; + iEIX -= eCoef*(qiUinpI.x*qiUindJ.z + qiUindI.x*qiUinpJ.z); + iEJX -= eCoef*(qiUinpJ.x*qiUindI.z + qiUindJ.x*qiUinpI.z); + iEIY += eCoef*(qiUinpI.x*qiUindJ.y + qiUindI.x*qiUinpJ.y); + iEJY += eCoef*(qiUinpJ.x*qiUindI.y + qiUindJ.x*qiUinpI.y); + fIZ += dCoef*(qiUinpI.y*qiUindJ.y + qiUindI.y*qiUinpJ.y + qiUinpI.z*qiUindJ.z + qiUindI.z*qiUinpJ.z); + fIZ += dCoef*(qiUinpJ.y*qiUindI.y + qiUindJ.y*qiUinpI.y + qiUinpJ.z*qiUindI.z + qiUindJ.z*qiUinpI.z); +#endif + + // The quasi-internal frame forces and torques. Note that the induced torque intermediates are + // used in the force expression, but not in the torques; the induced dipoles are isotropic. + real qiForce[3] = {rInv*(EIY+EJY+iEIY+iEJY), -rInv*(EIX+EJX+iEIX+iEJX), -(fJZ+fIZ)}; + real qiTorqueI[3] = {-EIX, -EIY, -EIZ}; + real qiTorqueJ[3] = {-EJX, -EJY, -EJZ}; + + + real3 force = make_real3(qiRotationMatrix[1][1]*qiForce[0] + qiRotationMatrix[2][1]*qiForce[1] + qiRotationMatrix[0][1]*qiForce[2], + qiRotationMatrix[1][2]*qiForce[0] + qiRotationMatrix[2][2]*qiForce[1] + qiRotationMatrix[0][2]*qiForce[2], + qiRotationMatrix[1][0]*qiForce[0] + qiRotationMatrix[2][0]*qiForce[1] + qiRotationMatrix[0][0]*qiForce[2]); + atom1.force += force; + atom1.torque += make_real3(qiRotationMatrix[1][1]*qiTorqueI[0] + qiRotationMatrix[2][1]*qiTorqueI[1] + qiRotationMatrix[0][1]*qiTorqueI[2], + qiRotationMatrix[1][2]*qiTorqueI[0] + qiRotationMatrix[2][2]*qiTorqueI[1] + qiRotationMatrix[0][2]*qiTorqueI[2], + qiRotationMatrix[1][0]*qiTorqueI[0] + qiRotationMatrix[2][0]*qiTorqueI[1] + qiRotationMatrix[0][0]*qiTorqueI[2]); + if (forceFactor == 1) { + atom2.force -= force; + atom2.torque += make_real3(qiRotationMatrix[1][1]*qiTorqueJ[0] + qiRotationMatrix[2][1]*qiTorqueJ[1] + qiRotationMatrix[0][1]*qiTorqueJ[2], + qiRotationMatrix[1][2]*qiTorqueJ[0] + qiRotationMatrix[2][2]*qiTorqueJ[1] + qiRotationMatrix[0][2]*qiTorqueJ[2], + qiRotationMatrix[1][0]*qiTorqueJ[0] + qiRotationMatrix[2][0]*qiTorqueJ[1] + qiRotationMatrix[0][0]*qiTorqueJ[2]); + } +} + /** * Compute electrostatic interactions. */ extern "C" __global__ void computeElectrostatics( - unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, + unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const uint2* __restrict__ covalentFlags, const unsigned int* __restrict__ polarizationGroupFlags, const ushort2* __restrict__ exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices, #ifdef USE_CUTOFF @@ -69,15 +382,14 @@ extern "C" __global__ void computeElectrostatics( real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, const real4* __restrict__ blockCenter, const unsigned int* __restrict__ interactingAtoms, #endif - const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, + const real* __restrict__ sphericalDipole, const real* __restrict__ sphericalQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const float2* __restrict__ dampingAndThole) { const unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); const unsigned int tbx = threadIdx.x - tgx; - real energy = 0; + mixed energy = 0; __shared__ AtomData localData[THREAD_BLOCK_SIZE]; - // First loop: process tiles that contain exclusions. @@ -89,21 +401,23 @@ extern "C" __global__ void computeElectrostatics( const unsigned int y = tileIndices.y; AtomData data; unsigned int atom1 = x*TILE_SIZE + tgx; - loadAtomData(data, atom1, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(data, atom1, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); data.force = make_real3(0); + data.torque = make_real3(0); uint2 covalent = covalentFlags[pos*TILE_SIZE+tgx]; unsigned int polarizationGroup = polarizationGroupFlags[pos*TILE_SIZE+tgx]; if (x == y) { // This tile is on the diagonal. - localData[threadIdx.x].posq = data.posq; - localData[threadIdx.x].dipole = data.dipole; + localData[threadIdx.x].pos = data.pos; + localData[threadIdx.x].q = data.q; + localData[threadIdx.x].sphericalDipole = data.sphericalDipole; #ifdef INCLUDE_QUADRUPOLES - localData[threadIdx.x].quadrupoleXX = data.quadrupoleXX; - localData[threadIdx.x].quadrupoleXY = data.quadrupoleXY; - localData[threadIdx.x].quadrupoleXZ = data.quadrupoleXZ; - localData[threadIdx.x].quadrupoleYY = data.quadrupoleYY; - localData[threadIdx.x].quadrupoleYZ = data.quadrupoleYZ; + localData[threadIdx.x].sphericalQuadrupole[0] = data.sphericalQuadrupole[0]; + localData[threadIdx.x].sphericalQuadrupole[1] = data.sphericalQuadrupole[1]; + localData[threadIdx.x].sphericalQuadrupole[2] = data.sphericalQuadrupole[2]; + localData[threadIdx.x].sphericalQuadrupole[3] = data.sphericalQuadrupole[3]; + localData[threadIdx.x].sphericalQuadrupole[4] = data.sphericalQuadrupole[4]; #endif localData[threadIdx.x].inducedDipole = data.inducedDipole; localData[threadIdx.x].inducedDipolePolar = data.inducedDipolePolar; @@ -115,101 +429,57 @@ extern "C" __global__ void computeElectrostatics( for (unsigned int j = 0; j < TILE_SIZE; j++) { int atom2 = y*TILE_SIZE+j; if (atom1 != atom2 && atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - real tempEnergy; float d = computeDScaleFactor(polarizationGroup, j); float p = computePScaleFactor(covalent, polarizationGroup, j); float m = computeMScaleFactor(covalent, j); - computeOneInteractionF1(data, localData[tbx+j], d, p, m, tempEnergy, tempForce); - data.force += tempForce; - energy += 0.5f*tempEnergy; + computeOneInteraction(data, localData[tbx+j], true, d, p, m, 0.5f, energy); } } - data.force *= ENERGY_SCALE_FACTOR; + data.force *= -ENERGY_SCALE_FACTOR; + data.torque *= ENERGY_SCALE_FACTOR; atomicAdd(&forceBuffers[atom1], static_cast((long long) (data.force.x*0x100000000))); atomicAdd(&forceBuffers[atom1+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); atomicAdd(&forceBuffers[atom1+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); - - // Compute torques. - - data.force = make_real3(0); - for (unsigned int j = 0; j < TILE_SIZE; j++) { - int atom2 = y*TILE_SIZE+j; - if (atom1 != atom2 && atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - float d = computeDScaleFactor(polarizationGroup, j); - float p = computePScaleFactor(covalent, polarizationGroup, j); - float m = computeMScaleFactor(covalent, j); - computeOneInteractionT1(data, localData[tbx+j], d, p, m, tempForce); - data.force += tempForce; - } - } - data.force *= ENERGY_SCALE_FACTOR; - atomicAdd(&torqueBuffers[atom1], static_cast((long long) (data.force.x*0x100000000))); - atomicAdd(&torqueBuffers[atom1+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); - atomicAdd(&torqueBuffers[atom1+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); + atomicAdd(&torqueBuffers[atom1], static_cast((long long) (data.torque.x*0x100000000))); + atomicAdd(&torqueBuffers[atom1+PADDED_NUM_ATOMS], static_cast((long long) (data.torque.y*0x100000000))); + atomicAdd(&torqueBuffers[atom1+2*PADDED_NUM_ATOMS], static_cast((long long) (data.torque.z*0x100000000))); } else { // This is an off-diagonal tile. unsigned int j = y*TILE_SIZE + tgx; - loadAtomData(localData[threadIdx.x], j, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(localData[threadIdx.x], j, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); localData[threadIdx.x].force = make_real3(0); + localData[threadIdx.x].torque = make_real3(0); unsigned int tj = tgx; for (j = 0; j < TILE_SIZE; j++) { int atom2 = y*TILE_SIZE+tj; if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - real tempEnergy; float d = computeDScaleFactor(polarizationGroup, tj); float p = computePScaleFactor(covalent, polarizationGroup, tj); float m = computeMScaleFactor(covalent, tj); - computeOneInteractionF1(data, localData[tbx+tj], d, p, m, tempEnergy, tempForce); - data.force += tempForce; - localData[tbx+tj].force -= tempForce; - energy += tempEnergy; + computeOneInteraction(data, localData[tbx+tj], true, d, p, m, 1, energy); } tj = (tj + 1) & (TILE_SIZE - 1); } - data.force *= ENERGY_SCALE_FACTOR; - localData[threadIdx.x].force *= ENERGY_SCALE_FACTOR; + data.force *= -ENERGY_SCALE_FACTOR; + data.torque *= ENERGY_SCALE_FACTOR; + localData[threadIdx.x].force *= -ENERGY_SCALE_FACTOR; + localData[threadIdx.x].torque *= ENERGY_SCALE_FACTOR; unsigned int offset = x*TILE_SIZE + tgx; atomicAdd(&forceBuffers[offset], static_cast((long long) (data.force.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); + atomicAdd(&torqueBuffers[offset], static_cast((long long) (data.torque.x*0x100000000))); + atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.torque.y*0x100000000))); + atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.torque.z*0x100000000))); offset = y*TILE_SIZE + tgx; atomicAdd(&forceBuffers[offset], static_cast((long long) (localData[threadIdx.x].force.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.y*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.z*0x100000000))); - - // Compute torques. - - data.force = make_real3(0); - localData[threadIdx.x].force = make_real3(0); - for (j = 0; j < TILE_SIZE; j++) { - int atom2 = y*TILE_SIZE+tj; - if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - float d = computeDScaleFactor(polarizationGroup, tj); - float p = computePScaleFactor(covalent, polarizationGroup, tj); - float m = computeMScaleFactor(covalent, tj); - computeOneInteractionT1(data, localData[tbx+tj], d, p, m, tempForce); - data.force += tempForce; - computeOneInteractionT3(data, localData[tbx+tj], d, p, m, tempForce); - localData[tbx+tj].force += tempForce; - } - tj = (tj + 1) & (TILE_SIZE - 1); - } - data.force *= ENERGY_SCALE_FACTOR; - localData[threadIdx.x].force *= ENERGY_SCALE_FACTOR; - offset = x*TILE_SIZE + tgx; - atomicAdd(&torqueBuffers[offset], static_cast((long long) (data.force.x*0x100000000))); - atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); - atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); - offset = y*TILE_SIZE + tgx; - atomicAdd(&torqueBuffers[offset], static_cast((long long) (localData[threadIdx.x].force.x*0x100000000))); - atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.y*0x100000000))); - atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.z*0x100000000))); + atomicAdd(&torqueBuffers[offset], static_cast((long long) (localData[threadIdx.x].torque.x*0x100000000))); + atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].torque.y*0x100000000))); + atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].torque.z*0x100000000))); } } @@ -272,16 +542,18 @@ extern "C" __global__ void computeElectrostatics( // Load atom data for this tile. AtomData data; - loadAtomData(data, atom1, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(data, atom1, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); data.force = make_real3(0); + data.torque = make_real3(0); #ifdef USE_CUTOFF unsigned int j = (numTiles <= maxTiles ? interactingAtoms[pos*TILE_SIZE+tgx] : y*TILE_SIZE + tgx); #else unsigned int j = y*TILE_SIZE + tgx; #endif atomIndices[threadIdx.x] = j; - loadAtomData(localData[threadIdx.x], j, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(localData[threadIdx.x], j, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); localData[threadIdx.x].force = make_real3(0); + localData[threadIdx.x].torque = make_real3(0); // Compute forces. @@ -289,21 +561,24 @@ extern "C" __global__ void computeElectrostatics( for (j = 0; j < TILE_SIZE; j++) { int atom2 = atomIndices[tbx+tj]; if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - real tempEnergy; - computeOneInteractionF1(data, localData[tbx+tj], 1, 1, 1, tempEnergy, tempForce); - data.force += tempForce; - localData[tbx+tj].force -= tempForce; - energy += tempEnergy; + computeOneInteraction(data, localData[tbx+tj], false, 1, 1, 1, 1, energy); } tj = (tj + 1) & (TILE_SIZE - 1); } - data.force *= ENERGY_SCALE_FACTOR; - localData[threadIdx.x].force *= ENERGY_SCALE_FACTOR; + data.force *= -ENERGY_SCALE_FACTOR; + data.torque *= ENERGY_SCALE_FACTOR; + localData[threadIdx.x].force *= -ENERGY_SCALE_FACTOR; + localData[threadIdx.x].torque *= ENERGY_SCALE_FACTOR; + + // Write results. + unsigned int offset = x*TILE_SIZE + tgx; atomicAdd(&forceBuffers[offset], static_cast((long long) (data.force.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); + atomicAdd(&torqueBuffers[offset], static_cast((long long) (data.torque.x*0x100000000))); + atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.torque.y*0x100000000))); + atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.torque.z*0x100000000))); #ifdef USE_CUTOFF offset = atomIndices[threadIdx.x]; #else @@ -312,36 +587,9 @@ extern "C" __global__ void computeElectrostatics( atomicAdd(&forceBuffers[offset], static_cast((long long) (localData[threadIdx.x].force.x*0x100000000))); atomicAdd(&forceBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.y*0x100000000))); atomicAdd(&forceBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.z*0x100000000))); - - // Compute torques. - - data.force = make_real3(0); - localData[threadIdx.x].force = make_real3(0); - for (j = 0; j < TILE_SIZE; j++) { - int atom2 = y*TILE_SIZE+tj; - if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { - real3 tempForce; - computeOneInteractionT1(data, localData[tbx+tj], 1, 1, 1, tempForce); - data.force += tempForce; - computeOneInteractionT3(data, localData[tbx+tj], 1, 1, 1, tempForce); - localData[tbx+tj].force += tempForce; - } - tj = (tj + 1) & (TILE_SIZE - 1); - } - data.force *= ENERGY_SCALE_FACTOR; - localData[threadIdx.x].force *= ENERGY_SCALE_FACTOR; - offset = x*TILE_SIZE + tgx; - atomicAdd(&torqueBuffers[offset], static_cast((long long) (data.force.x*0x100000000))); - atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (data.force.y*0x100000000))); - atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (data.force.z*0x100000000))); -#ifdef USE_CUTOFF - offset = atomIndices[threadIdx.x]; -#else - offset = y*TILE_SIZE + tgx; -#endif - atomicAdd(&torqueBuffers[offset], static_cast((long long) (localData[threadIdx.x].force.x*0x100000000))); - atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.y*0x100000000))); - atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].force.z*0x100000000))); + atomicAdd(&torqueBuffers[offset], static_cast((long long) (localData[threadIdx.x].torque.x*0x100000000))); + atomicAdd(&torqueBuffers[offset+PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].torque.y*0x100000000))); + atomicAdd(&torqueBuffers[offset+2*PADDED_NUM_ATOMS], static_cast((long long) (localData[threadIdx.x].torque.z*0x100000000))); } pos++; } diff --git a/plugins/amoeba/platforms/cuda/src/kernels/multipoleFixedField.cu b/plugins/amoeba/platforms/cuda/src/kernels/multipoleFixedField.cu index 49f980fdf1472c54b8ff7258e9039dfc37afd8a9..8a3dd8e991b84b6fe484bde5e46dd9cb4374b283 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/multipoleFixedField.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/multipoleFixedField.cu @@ -545,6 +545,9 @@ extern "C" __global__ void computeFixedField( localData[tbx+tj].field += fields[2]; localData[tbx+tj].fieldPolar += fields[3]; #ifdef USE_GK + } + if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { + real3 fields[2]; computeOneGkInteraction(data, localData[tbx+tj], delta, fields); data.gkField += fields[0]; localData[tbx+tj].gkField += fields[1]; @@ -684,6 +687,9 @@ extern "C" __global__ void computeFixedField( localData[tbx+tj].field += fields[2]; localData[tbx+tj].fieldPolar += fields[3]; #ifdef USE_GK + } + if (atom1 < NUM_ATOMS && atom2 < NUM_ATOMS) { + real3 fields[2]; computeOneGkInteraction(data, localData[tbx+tj], delta, fields); data.gkField += fields[0]; localData[tbx+tj].gkField += fields[1]; diff --git a/plugins/amoeba/platforms/cuda/src/kernels/multipolePme.cu b/plugins/amoeba/platforms/cuda/src/kernels/multipolePme.cu index 253dacac5d7a5f9ed76e2dc01f1ed7e0f7b8c437..555a47448632f0fc2dbb6061593ceac6c1e322d0 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/multipolePme.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/multipolePme.cu @@ -196,14 +196,14 @@ extern "C" __global__ void transformPotentialToCartesianCoordinates(const real* // Transform the potential. for (int i = blockIdx.x*blockDim.x+threadIdx.x; i < NUM_ATOMS; i += blockDim.x*gridDim.x) { - cphi[10*i] = fphi[20*i]; - cphi[10*i+1] = a[0][0]*fphi[20*i+1] + a[0][1]*fphi[20*i+2] + a[0][2]*fphi[20*i+3]; - cphi[10*i+2] = a[1][0]*fphi[20*i+1] + a[1][1]*fphi[20*i+2] + a[1][2]*fphi[20*i+3]; - cphi[10*i+3] = a[2][0]*fphi[20*i+1] + a[2][1]*fphi[20*i+2] + a[2][2]*fphi[20*i+3]; + cphi[10*i] = fphi[i]; + cphi[10*i+1] = a[0][0]*fphi[i+NUM_ATOMS*1] + a[0][1]*fphi[i+NUM_ATOMS*2] + a[0][2]*fphi[i+NUM_ATOMS*3]; + cphi[10*i+2] = a[1][0]*fphi[i+NUM_ATOMS*1] + a[1][1]*fphi[i+NUM_ATOMS*2] + a[1][2]*fphi[i+NUM_ATOMS*3]; + cphi[10*i+3] = a[2][0]*fphi[i+NUM_ATOMS*1] + a[2][1]*fphi[i+NUM_ATOMS*2] + a[2][2]*fphi[i+NUM_ATOMS*3]; for (int j = 0; j < 6; j++) { cphi[10*i+4+j] = 0; for (int k = 0; k < 6; k++) - cphi[10*i+4+j] += b[j][k]*fphi[20*i+4+k]; + cphi[10*i+4+j] += b[j][k]*fphi[i+NUM_ATOMS*(4+k)]; } } } @@ -211,20 +211,32 @@ extern "C" __global__ void transformPotentialToCartesianCoordinates(const real* extern "C" __global__ void gridSpreadFixedMultipoles(const real4* __restrict__ posq, const real* __restrict__ fracDipole, const real* __restrict__ fracQuadrupole, real2* __restrict__ pmeGrid, int2* __restrict__ pmeAtomGridIndex, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { +#if __CUDA_ARCH__ < 500 real array[PME_ORDER*PME_ORDER]; +#else + // We have shared memory to spare, and putting the workspace array there reduces the load on L2 cache. + __shared__ real sharedArray[PME_ORDER*PME_ORDER*64]; + real* array = &sharedArray[PME_ORDER*PME_ORDER*threadIdx.x]; +#endif real4 theta1[PME_ORDER]; real4 theta2[PME_ORDER]; real4 theta3[PME_ORDER]; - // Process the atoms in spatially sorted order. This improves cache performance when loading - // the grid values. - - for (int i = blockIdx.x*blockDim.x+threadIdx.x; i < NUM_ATOMS; i += blockDim.x*gridDim.x) { - int m = pmeAtomGridIndex[i].x; + for (int m = blockIdx.x*blockDim.x+threadIdx.x; m < NUM_ATOMS; m += blockDim.x*gridDim.x) { real4 pos = posq[m]; pos -= periodicBoxVecZ*floor(pos.z*recipBoxVecZ.z+0.5f); pos -= periodicBoxVecY*floor(pos.y*recipBoxVecY.z+0.5f); pos -= periodicBoxVecX*floor(pos.x*recipBoxVecX.z+0.5f); + real atomCharge = pos.w; + real atomDipoleX = fracDipole[m*3]; + real atomDipoleY = fracDipole[m*3+1]; + real atomDipoleZ = fracDipole[m*3+2]; + real atomQuadrupoleXX = fracQuadrupole[m*6]; + real atomQuadrupoleXY = fracQuadrupole[m*6+1]; + real atomQuadrupoleXZ = fracQuadrupole[m*6+2]; + real atomQuadrupoleYY = fracQuadrupole[m*6+3]; + real atomQuadrupoleYZ = fracQuadrupole[m*6+4]; + real atomQuadrupoleZZ = fracQuadrupole[m*6+5]; // Since we need the full set of thetas, it's faster to compute them here than load them // from global memory. @@ -271,16 +283,6 @@ extern "C" __global__ void gridSpreadFixedMultipoles(const real4* __restrict__ p int index = ybase + zindex; real4 v = theta3[iz]; - real atomCharge = pos.w; - real atomDipoleX = fracDipole[m*3]; - real atomDipoleY = fracDipole[m*3+1]; - real atomDipoleZ = fracDipole[m*3+2]; - real atomQuadrupoleXX = fracQuadrupole[m*6]; - real atomQuadrupoleXY = fracQuadrupole[m*6+1]; - real atomQuadrupoleXZ = fracQuadrupole[m*6+2]; - real atomQuadrupoleYY = fracQuadrupole[m*6+3]; - real atomQuadrupoleYZ = fracQuadrupole[m*6+4]; - real atomQuadrupoleZZ = fracQuadrupole[m*6+5]; real term0 = atomCharge*u.x*v.x + atomDipoleY*u.y*v.x + atomDipoleZ*u.x*v.y + atomQuadrupoleYY*u.z*v.x + atomQuadrupoleZZ*u.x*v.z + atomQuadrupoleYZ*u.y*v.y; real term1 = atomDipoleX*u.x*v.x + atomQuadrupoleXY*u.y*v.x + atomQuadrupoleXZ*u.x*v.y; real term2 = atomQuadrupoleXX * u.x * v.x; @@ -300,7 +302,13 @@ extern "C" __global__ void gridSpreadFixedMultipoles(const real4* __restrict__ p extern "C" __global__ void gridSpreadInducedDipoles(const real4* __restrict__ posq, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, real2* __restrict__ pmeGrid, int2* __restrict__ pmeAtomGridIndex, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { +#if __CUDA_ARCH__ < 500 real array[PME_ORDER*PME_ORDER]; +#else + // We have shared memory to spare, and putting the workspace array there reduces the load on L2 cache. + __shared__ real sharedArray[PME_ORDER*PME_ORDER*64]; + real* array = &sharedArray[PME_ORDER*PME_ORDER*threadIdx.x]; +#endif real4 theta1[PME_ORDER]; real4 theta2[PME_ORDER]; real4 theta3[PME_ORDER]; @@ -318,15 +326,19 @@ extern "C" __global__ void gridSpreadInducedDipoles(const real4* __restrict__ po } __syncthreads(); - // Process the atoms in spatially sorted order. This improves cache performance when loading - // the grid values. - - for (int i = blockIdx.x*blockDim.x+threadIdx.x; i < NUM_ATOMS; i += blockDim.x*gridDim.x) { - int m = pmeAtomGridIndex[i].x; + for (int m = blockIdx.x*blockDim.x+threadIdx.x; m < NUM_ATOMS; m += blockDim.x*gridDim.x) { real4 pos = posq[m]; pos -= periodicBoxVecZ*floor(pos.z*recipBoxVecZ.z+0.5f); pos -= periodicBoxVecY*floor(pos.y*recipBoxVecY.z+0.5f); pos -= periodicBoxVecX*floor(pos.x*recipBoxVecX.z+0.5f); + real3 cinducedDipole = ((const real3*) inducedDipole)[m]; + real3 cinducedDipolePolar = ((const real3*) inducedDipolePolar)[m]; + real3 finducedDipole = make_real3(cinducedDipole.x*cartToFrac[0][0] + cinducedDipole.y*cartToFrac[0][1] + cinducedDipole.z*cartToFrac[0][2], + cinducedDipole.x*cartToFrac[1][0] + cinducedDipole.y*cartToFrac[1][1] + cinducedDipole.z*cartToFrac[1][2], + cinducedDipole.x*cartToFrac[2][0] + cinducedDipole.y*cartToFrac[2][1] + cinducedDipole.z*cartToFrac[2][2]); + real3 finducedDipolePolar = make_real3(cinducedDipolePolar.x*cartToFrac[0][0] + cinducedDipolePolar.y*cartToFrac[0][1] + cinducedDipolePolar.z*cartToFrac[0][2], + cinducedDipolePolar.x*cartToFrac[1][0] + cinducedDipolePolar.y*cartToFrac[1][1] + cinducedDipolePolar.z*cartToFrac[1][2], + cinducedDipolePolar.x*cartToFrac[2][0] + cinducedDipolePolar.y*cartToFrac[2][1] + cinducedDipolePolar.z*cartToFrac[2][2]); // Since we need the full set of thetas, it's faster to compute them here than load them // from global memory. @@ -373,14 +385,6 @@ extern "C" __global__ void gridSpreadInducedDipoles(const real4* __restrict__ po int index = ybase + zindex; real4 v = theta3[iz]; - real3 cinducedDipole = make_real3(inducedDipole[m*3], inducedDipole[m*3+1], inducedDipole[m*3+2]); - real3 cinducedDipolePolar = make_real3(inducedDipolePolar[m*3], inducedDipolePolar[m*3+1], inducedDipolePolar[m*3+2]); - real3 finducedDipole = make_real3(cinducedDipole.x*cartToFrac[0][0] + cinducedDipole.y*cartToFrac[0][1] + cinducedDipole.z*cartToFrac[0][2], - cinducedDipole.x*cartToFrac[1][0] + cinducedDipole.y*cartToFrac[1][1] + cinducedDipole.z*cartToFrac[1][2], - cinducedDipole.x*cartToFrac[2][0] + cinducedDipole.y*cartToFrac[2][1] + cinducedDipole.z*cartToFrac[2][2]); - real3 finducedDipolePolar = make_real3(cinducedDipolePolar.x*cartToFrac[0][0] + cinducedDipolePolar.y*cartToFrac[0][1] + cinducedDipolePolar.z*cartToFrac[0][2], - cinducedDipolePolar.x*cartToFrac[1][0] + cinducedDipolePolar.y*cartToFrac[1][1] + cinducedDipolePolar.z*cartToFrac[1][2], - cinducedDipolePolar.x*cartToFrac[2][0] + cinducedDipolePolar.y*cartToFrac[2][1] + cinducedDipolePolar.z*cartToFrac[2][2]); real term01 = finducedDipole.y*u.y*v.x + finducedDipole.z*u.x*v.y; real term11 = finducedDipole.x*u.x*v.x; real term02 = finducedDipolePolar.y*u.y*v.x + finducedDipolePolar.z*u.x*v.y; @@ -448,7 +452,13 @@ extern "C" __global__ void computeFixedPotentialFromGrid(const real2* __restrict long long* __restrict__ fieldBuffers, long long* __restrict__ fieldPolarBuffers, const real4* __restrict__ posq, const real* __restrict__ labFrameDipole, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ, int2* __restrict__ pmeAtomGridIndex) { +#if __CUDA_ARCH__ < 500 real array[PME_ORDER*PME_ORDER]; +#else + // We have shared memory to spare, and putting the workspace array there reduces the load on L2 cache. + __shared__ real sharedArray[PME_ORDER*PME_ORDER*64]; + real* array = &sharedArray[PME_ORDER*PME_ORDER*threadIdx.x]; +#endif real4 theta1[PME_ORDER]; real4 theta2[PME_ORDER]; real4 theta3[PME_ORDER]; @@ -582,26 +592,26 @@ extern "C" __global__ void computeFixedPotentialFromGrid(const real2* __restrict tuv012 += tu01*v.z; tuv111 += tu11*v.y; } - phi[20*m] = tuv000; - phi[20*m+1] = tuv100; - phi[20*m+2] = tuv010; - phi[20*m+3] = tuv001; - phi[20*m+4] = tuv200; - phi[20*m+5] = tuv020; - phi[20*m+6] = tuv002; - phi[20*m+7] = tuv110; - phi[20*m+8] = tuv101; - phi[20*m+9] = tuv011; - phi[20*m+10] = tuv300; - phi[20*m+11] = tuv030; - phi[20*m+12] = tuv003; - phi[20*m+13] = tuv210; - phi[20*m+14] = tuv201; - phi[20*m+15] = tuv120; - phi[20*m+16] = tuv021; - phi[20*m+17] = tuv102; - phi[20*m+18] = tuv012; - phi[20*m+19] = tuv111; + phi[m] = tuv000; + phi[m+NUM_ATOMS] = tuv100; + phi[m+NUM_ATOMS*2] = tuv010; + phi[m+NUM_ATOMS*3] = tuv001; + phi[m+NUM_ATOMS*4] = tuv200; + phi[m+NUM_ATOMS*5] = tuv020; + phi[m+NUM_ATOMS*6] = tuv002; + phi[m+NUM_ATOMS*7] = tuv110; + phi[m+NUM_ATOMS*8] = tuv101; + phi[m+NUM_ATOMS*9] = tuv011; + phi[m+NUM_ATOMS*10] = tuv300; + phi[m+NUM_ATOMS*11] = tuv030; + phi[m+NUM_ATOMS*12] = tuv003; + phi[m+NUM_ATOMS*13] = tuv210; + phi[m+NUM_ATOMS*14] = tuv201; + phi[m+NUM_ATOMS*15] = tuv120; + phi[m+NUM_ATOMS*16] = tuv021; + phi[m+NUM_ATOMS*17] = tuv102; + phi[m+NUM_ATOMS*18] = tuv012; + phi[m+NUM_ATOMS*19] = tuv111; real dipoleScale = (4/(real) 3)*(EWALD_ALPHA*EWALD_ALPHA*EWALD_ALPHA)/SQRT_PI; long long fieldx = (long long) ((dipoleScale*labFrameDipole[m*3]-tuv100*fracToCart[0][0]-tuv010*fracToCart[0][1]-tuv001*fracToCart[0][2])*0x100000000); fieldBuffers[m] = fieldx; @@ -619,7 +629,13 @@ extern "C" __global__ void computeInducedPotentialFromGrid(const real2* __restri real* __restrict__ phip, real* __restrict__ phidp, const real4* __restrict__ posq, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ, int2* __restrict__ pmeAtomGridIndex) { +#if __CUDA_ARCH__ < 500 real array[PME_ORDER*PME_ORDER]; +#else + // We have shared memory to spare, and putting the workspace array there reduces the load on L2 cache. + __shared__ real sharedArray[PME_ORDER*PME_ORDER*64]; + real* array = &sharedArray[PME_ORDER*PME_ORDER*threadIdx.x]; +#endif real4 theta1[PME_ORDER]; real4 theta2[PME_ORDER]; real4 theta3[PME_ORDER]; @@ -812,60 +828,60 @@ extern "C" __global__ void computeInducedPotentialFromGrid(const real2* __restri tuv012 += tu01*v.z; tuv111 += tu11*v.y; } - phid[10*m] = 0; - phid[10*m+1] = tuv100_1; - phid[10*m+2] = tuv010_1; - phid[10*m+3] = tuv001_1; - phid[10*m+4] = tuv200_1; - phid[10*m+5] = tuv020_1; - phid[10*m+6] = tuv002_1; - phid[10*m+7] = tuv110_1; - phid[10*m+8] = tuv101_1; - phid[10*m+9] = tuv011_1; - - phip[10*m] = 0; - phip[10*m+1] = tuv100_2; - phip[10*m+2] = tuv010_2; - phip[10*m+3] = tuv001_2; - phip[10*m+4] = tuv200_2; - phip[10*m+5] = tuv020_2; - phip[10*m+6] = tuv002_2; - phip[10*m+7] = tuv110_2; - phip[10*m+8] = tuv101_2; - phip[10*m+9] = tuv011_2; - - phidp[20*m] = tuv000; - phidp[20*m+1] = tuv100; - phidp[20*m+2] = tuv010; - phidp[20*m+3] = tuv001; - phidp[20*m+4] = tuv200; - phidp[20*m+5] = tuv020; - phidp[20*m+6] = tuv002; - phidp[20*m+7] = tuv110; - phidp[20*m+8] = tuv101; - phidp[20*m+9] = tuv011; - phidp[20*m+10] = tuv300; - phidp[20*m+11] = tuv030; - phidp[20*m+12] = tuv003; - phidp[20*m+13] = tuv210; - phidp[20*m+14] = tuv201; - phidp[20*m+15] = tuv120; - phidp[20*m+16] = tuv021; - phidp[20*m+17] = tuv102; - phidp[20*m+18] = tuv012; - phidp[20*m+19] = tuv111; + phid[m] = 0; + phid[m+NUM_ATOMS] = tuv100_1; + phid[m+NUM_ATOMS*2] = tuv010_1; + phid[m+NUM_ATOMS*3] = tuv001_1; + phid[m+NUM_ATOMS*4] = tuv200_1; + phid[m+NUM_ATOMS*5] = tuv020_1; + phid[m+NUM_ATOMS*6] = tuv002_1; + phid[m+NUM_ATOMS*7] = tuv110_1; + phid[m+NUM_ATOMS*8] = tuv101_1; + phid[m+NUM_ATOMS*9] = tuv011_1; + + phip[m] = 0; + phip[m+NUM_ATOMS] = tuv100_2; + phip[m+NUM_ATOMS*2] = tuv010_2; + phip[m+NUM_ATOMS*3] = tuv001_2; + phip[m+NUM_ATOMS*4] = tuv200_2; + phip[m+NUM_ATOMS*5] = tuv020_2; + phip[m+NUM_ATOMS*6] = tuv002_2; + phip[m+NUM_ATOMS*7] = tuv110_2; + phip[m+NUM_ATOMS*8] = tuv101_2; + phip[m+NUM_ATOMS*9] = tuv011_2; + + phidp[m] = tuv000; + phidp[m+NUM_ATOMS*1] = tuv100; + phidp[m+NUM_ATOMS*2] = tuv010; + phidp[m+NUM_ATOMS*3] = tuv001; + phidp[m+NUM_ATOMS*4] = tuv200; + phidp[m+NUM_ATOMS*5] = tuv020; + phidp[m+NUM_ATOMS*6] = tuv002; + phidp[m+NUM_ATOMS*7] = tuv110; + phidp[m+NUM_ATOMS*8] = tuv101; + phidp[m+NUM_ATOMS*9] = tuv011; + phidp[m+NUM_ATOMS*10] = tuv300; + phidp[m+NUM_ATOMS*11] = tuv030; + phidp[m+NUM_ATOMS*12] = tuv003; + phidp[m+NUM_ATOMS*13] = tuv210; + phidp[m+NUM_ATOMS*14] = tuv201; + phidp[m+NUM_ATOMS*15] = tuv120; + phidp[m+NUM_ATOMS*16] = tuv021; + phidp[m+NUM_ATOMS*17] = tuv102; + phidp[m+NUM_ATOMS*18] = tuv012; + phidp[m+NUM_ATOMS*19] = tuv111; } } extern "C" __global__ void computeFixedMultipoleForceAndEnergy(real4* __restrict__ posq, unsigned long long* __restrict__ forceBuffers, - long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, const real* __restrict__ labFrameDipole, + long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ fracDipole, const real* __restrict__ fracQuadrupole, - const real* __restrict__ phi_global, const real* __restrict__ cphi_global, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { + const real* __restrict__ phi, const real* __restrict__ cphi_global, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { real multipole[10]; const int deriv1[] = {1, 4, 7, 8, 10, 15, 17, 13, 14, 19}; const int deriv2[] = {2, 7, 5, 9, 13, 11, 18, 15, 19, 16}; const int deriv3[] = {3, 8, 9, 6, 14, 16, 12, 19, 17, 18}; - real energy = 0; + mixed energy = 0; __shared__ real fracToCart[3][3]; if (threadIdx.x == 0) { fracToCart[0][0] = GRID_SIZE_X*recipBoxVecX.x; @@ -922,13 +938,12 @@ extern "C" __global__ void computeFixedMultipoleForceAndEnergy(real4* __restrict multipole[8] = fracQuadrupole[i*6+2]; multipole[9] = fracQuadrupole[i*6+4]; - const real* phi = &phi_global[20*i]; real4 f = make_real4(0, 0, 0, 0); for (int k = 0; k < 10; k++) { - energy += multipole[k]*phi[k]; - f.x += multipole[k]*phi[deriv1[k]]; - f.y += multipole[k]*phi[deriv2[k]]; - f.z += multipole[k]*phi[deriv3[k]]; + energy += multipole[k]*phi[i+NUM_ATOMS*k]; + f.x += multipole[k]*phi[i+NUM_ATOMS*deriv1[k]]; + f.y += multipole[k]*phi[i+NUM_ATOMS*deriv2[k]]; + f.z += multipole[k]*phi[i+NUM_ATOMS*deriv3[k]]; } f = make_real4(EPSILON_FACTOR*(f.x*fracToCart[0][0] + f.y*fracToCart[0][1] + f.z*fracToCart[0][2]), EPSILON_FACTOR*(f.x*fracToCart[1][0] + f.y*fracToCart[1][1] + f.z*fracToCart[1][2]), @@ -941,18 +956,18 @@ extern "C" __global__ void computeFixedMultipoleForceAndEnergy(real4* __restrict } extern "C" __global__ void computeInducedDipoleForceAndEnergy(real4* __restrict__ posq, unsigned long long* __restrict__ forceBuffers, - long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, const real* __restrict__ labFrameDipole, + long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ fracDipole, const real* __restrict__ fracQuadrupole, const real* __restrict__ inducedDipole_global, const real* __restrict__ inducedDipolePolar_global, - const real* __restrict__ phi_global, const real* __restrict__ phid_global, const real* __restrict__ phip_global, - const real* __restrict__ phidp_global, const real* __restrict__ cphi_global, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { + const real* __restrict__ phi, const real* __restrict__ phid, const real* __restrict__ phip, + const real* __restrict__ phidp, const real* __restrict__ cphi_global, real3 recipBoxVecX, real3 recipBoxVecY, real3 recipBoxVecZ) { real multipole[10]; real cinducedDipole[3], inducedDipole[3]; real cinducedDipolePolar[3], inducedDipolePolar[3]; const int deriv1[] = {1, 4, 7, 8, 10, 15, 17, 13, 14, 19}; const int deriv2[] = {2, 7, 5, 9, 13, 11, 18, 15, 19, 16}; const int deriv3[] = {3, 8, 9, 6, 14, 16, 12, 19, 17, 18}; - real energy = 0; + mixed energy = 0; __shared__ real fracToCart[3][3]; if (threadIdx.x == 0) { fracToCart[0][0] = GRID_SIZE_X*recipBoxVecX.x; @@ -1023,34 +1038,30 @@ extern "C" __global__ void computeInducedDipoleForceAndEnergy(real4* __restrict_ inducedDipolePolar[0] = cinducedDipolePolar[0]*fracToCart[0][0] + cinducedDipolePolar[1]*fracToCart[1][0] + cinducedDipolePolar[2]*fracToCart[2][0]; inducedDipolePolar[1] = cinducedDipolePolar[0]*fracToCart[0][1] + cinducedDipolePolar[1]*fracToCart[1][1] + cinducedDipolePolar[2]*fracToCart[2][1]; inducedDipolePolar[2] = cinducedDipolePolar[0]*fracToCart[0][2] + cinducedDipolePolar[1]*fracToCart[1][2] + cinducedDipolePolar[2]*fracToCart[2][2]; - const real* phi = &phi_global[20*i]; - const real* phip = &phip_global[10*i]; - const real* phid = &phid_global[10*i]; real4 f = make_real4(0, 0, 0, 0); - energy += inducedDipole[0]*phi[1]; - energy += inducedDipole[1]*phi[2]; - energy += inducedDipole[2]*phi[3]; + energy += (inducedDipole[0]+inducedDipolePolar[0])*phi[i+NUM_ATOMS]; + energy += (inducedDipole[1]+inducedDipolePolar[1])*phi[i+NUM_ATOMS*2]; + energy += (inducedDipole[2]+inducedDipolePolar[2])*phi[i+NUM_ATOMS*3]; for (int k = 0; k < 3; k++) { int j1 = deriv1[k+1]; int j2 = deriv2[k+1]; int j3 = deriv3[k+1]; - f.x += (inducedDipole[k]+inducedDipolePolar[k])*phi[j1]; - f.y += (inducedDipole[k]+inducedDipolePolar[k])*phi[j2]; - f.z += (inducedDipole[k]+inducedDipolePolar[k])*phi[j3]; + f.x += (inducedDipole[k]+inducedDipolePolar[k])*phi[i+NUM_ATOMS*j1]; + f.y += (inducedDipole[k]+inducedDipolePolar[k])*phi[i+NUM_ATOMS*j2]; + f.z += (inducedDipole[k]+inducedDipolePolar[k])*phi[i+NUM_ATOMS*j3]; #ifndef DIRECT_POLARIZATION - f.x += (inducedDipole[k]*phip[j1] + inducedDipolePolar[k]*phid[j1]); - f.y += (inducedDipole[k]*phip[j2] + inducedDipolePolar[k]*phid[j2]); - f.z += (inducedDipole[k]*phip[j3] + inducedDipolePolar[k]*phid[j3]); + f.x += (inducedDipole[k]*phip[i+NUM_ATOMS*j1] + inducedDipolePolar[k]*phid[i+NUM_ATOMS*j1]); + f.y += (inducedDipole[k]*phip[i+NUM_ATOMS*j2] + inducedDipolePolar[k]*phid[i+NUM_ATOMS*j2]); + f.z += (inducedDipole[k]*phip[i+NUM_ATOMS*j3] + inducedDipolePolar[k]*phid[i+NUM_ATOMS*j3]); #endif } - const real* phidp = &phidp_global[20*i]; for (int k = 0; k < 10; k++) { - f.x += multipole[k]*phidp[deriv1[k]]; - f.y += multipole[k]*phidp[deriv2[k]]; - f.z += multipole[k]*phidp[deriv3[k]]; + f.x += multipole[k]*phidp[i+NUM_ATOMS*deriv1[k]]; + f.y += multipole[k]*phidp[i+NUM_ATOMS*deriv2[k]]; + f.z += multipole[k]*phidp[i+NUM_ATOMS*deriv3[k]]; } f = make_real4(0.5f*EPSILON_FACTOR*(f.x*fracToCart[0][0] + f.y*fracToCart[0][1] + f.z*fracToCart[0][2]), 0.5f*EPSILON_FACTOR*(f.x*fracToCart[1][0] + f.y*fracToCart[1][1] + f.z*fracToCart[1][2]), @@ -1059,7 +1070,7 @@ extern "C" __global__ void computeInducedDipoleForceAndEnergy(real4* __restrict_ forceBuffers[i+PADDED_NUM_ATOMS] -= static_cast((long long) (f.y*0x100000000)); forceBuffers[i+PADDED_NUM_ATOMS*2] -= static_cast((long long) (f.z*0x100000000)); } - energyBuffer[blockIdx.x*blockDim.x+threadIdx.x] += 0.5f*EPSILON_FACTOR*energy; + energyBuffer[blockIdx.x*blockDim.x+threadIdx.x] += 0.25f*EPSILON_FACTOR*energy; } extern "C" __global__ void recordInducedFieldDipoles(const real* __restrict__ phid, real* const __restrict__ phip, @@ -1078,11 +1089,11 @@ extern "C" __global__ void recordInducedFieldDipoles(const real* __restrict__ ph } __syncthreads(); for (int i = blockIdx.x*blockDim.x+threadIdx.x; i < NUM_ATOMS; i += blockDim.x*gridDim.x) { - inducedField[i] -= (long long) (0x100000000*(phid[10*i+1]*fracToCart[0][0] + phid[10*i+2]*fracToCart[0][1] + phid[10*i+3]*fracToCart[0][2])); - inducedField[i+PADDED_NUM_ATOMS] -= (long long) (0x100000000*(phid[10*i+1]*fracToCart[1][0] + phid[10*i+2]*fracToCart[1][1] + phid[10*i+3]*fracToCart[1][2])); - inducedField[i+PADDED_NUM_ATOMS*2] -= (long long) (0x100000000*(phid[10*i+1]*fracToCart[2][0] + phid[10*i+2]*fracToCart[2][1] + phid[10*i+3]*fracToCart[2][2])); - inducedFieldPolar[i] -= (long long) (0x100000000*(phip[10*i+1]*fracToCart[0][0] + phip[10*i+2]*fracToCart[0][1] + phip[10*i+3]*fracToCart[0][2])); - inducedFieldPolar[i+PADDED_NUM_ATOMS] -= (long long) (0x100000000*(phip[10*i+1]*fracToCart[1][0] + phip[10*i+2]*fracToCart[1][1] + phip[10*i+3]*fracToCart[1][2])); - inducedFieldPolar[i+PADDED_NUM_ATOMS*2] -= (long long) (0x100000000*(phip[10*i+1]*fracToCart[2][0] + phip[10*i+2]*fracToCart[2][1] + phip[10*i+3]*fracToCart[2][2])); + inducedField[i] -= (long long) (0x100000000*(phid[i+NUM_ATOMS]*fracToCart[0][0] + phid[i+NUM_ATOMS*2]*fracToCart[0][1] + phid[i+NUM_ATOMS*3]*fracToCart[0][2])); + inducedField[i+PADDED_NUM_ATOMS] -= (long long) (0x100000000*(phid[i+NUM_ATOMS]*fracToCart[1][0] + phid[i+NUM_ATOMS*2]*fracToCart[1][1] + phid[i+NUM_ATOMS*3]*fracToCart[1][2])); + inducedField[i+PADDED_NUM_ATOMS*2] -= (long long) (0x100000000*(phid[i+NUM_ATOMS]*fracToCart[2][0] + phid[i+NUM_ATOMS*2]*fracToCart[2][1] + phid[i+NUM_ATOMS*3]*fracToCart[2][2])); + inducedFieldPolar[i] -= (long long) (0x100000000*(phip[i+NUM_ATOMS]*fracToCart[0][0] + phip[i+NUM_ATOMS*2]*fracToCart[0][1] + phip[i+NUM_ATOMS*3]*fracToCart[0][2])); + inducedFieldPolar[i+PADDED_NUM_ATOMS] -= (long long) (0x100000000*(phip[i+NUM_ATOMS]*fracToCart[1][0] + phip[i+NUM_ATOMS*2]*fracToCart[1][1] + phip[i+NUM_ATOMS*3]*fracToCart[1][2])); + inducedFieldPolar[i+PADDED_NUM_ATOMS*2] -= (long long) (0x100000000*(phip[i+NUM_ATOMS]*fracToCart[2][0] + phip[i+NUM_ATOMS*2]*fracToCart[2][1] + phip[i+NUM_ATOMS*3]*fracToCart[2][2])); } } diff --git a/plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu b/plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu index b3e29ca1bb825c24d76ba13b2d911472ca645c96..3c29b8056fe02f3216b3b0213be97f14cf9d45ac 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu @@ -1,14 +1,28 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4* __restrict__ multipoleParticles, float* __restrict__ molecularDipoles, - float* __restrict__ molecularQuadrupoles, real* __restrict__ labFrameDipoles, real* __restrict__ labFrameQuadrupoles) { - // get coordinates of this atom and the z & x axis atoms - // compute the vector between the atoms and 1/sqrt(d2), d2 is distance between - // this atom and the axis atom - - // this atom is referred to as the k-atom in notes below - - // code common to ZThenX and Bisector - + float* __restrict__ molecularQuadrupoles, real* __restrict__ labFrameDipoles, real* __restrict__ labFrameQuadrupoles, + real* __restrict__ sphericalDipoles, real* __restrict__ sphericalQuadrupoles) { for (int atom = blockIdx.x*blockDim.x+threadIdx.x; atom < NUM_ATOMS; atom += gridDim.x*blockDim.x) { + // Load the spherical multipoles. + + int offset = 3*atom; + sphericalDipoles[offset+0] = molecularDipoles[offset+2]; // z -> Q_10 + sphericalDipoles[offset+1] = molecularDipoles[offset+0]; // x -> Q_11c + sphericalDipoles[offset+2] = molecularDipoles[offset+1]; // y -> Q_11s + offset = 5*atom; + sphericalQuadrupoles[offset+0] = -3.0f*(molecularQuadrupoles[offset+0]+molecularQuadrupoles[offset+3]); // zz -> Q_20 + sphericalQuadrupoles[offset+1] = (2*SQRT((real) 3))*molecularQuadrupoles[offset+2]; // xz -> Q_21c + sphericalQuadrupoles[offset+2] = (2*SQRT((real) 3))*molecularQuadrupoles[offset+4]; // yz -> Q_21s + sphericalQuadrupoles[offset+3] = SQRT((real) 3)*(molecularQuadrupoles[offset+0]-molecularQuadrupoles[offset+3]); // xx-yy -> Q_22c + sphericalQuadrupoles[offset+4] = (2*SQRT((real) 3))*molecularQuadrupoles[offset+1]; // xy -> Q_22s + + // get coordinates of this atom and the z & x axis atoms + // compute the vector between the atoms and 1/sqrt(d2), d2 is distance between + // this atom and the axis atom + + // this atom is referred to as the k-atom in notes below + + // code common to ZThenX and Bisector + int4 particles = multipoleParticles[atom]; if (particles.x >= 0 && particles.z >= 0) { real4 thisParticlePos = posq[atom]; @@ -149,7 +163,7 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4 // Transform the dipole - unsigned int offset = 3*atom; + offset = 3*atom; real molDipole[3]; molDipole[0] = molecularDipoles[offset]; molDipole[1] = molecularDipoles[offset+1]; @@ -192,6 +206,67 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4 labFrameQuadrupoles[offset+4] = vectorX.y*(vectorX.z*mPoleXX + vectorY.z*mPoleXY + vectorZ.z*mPoleXZ) + vectorY.y*(vectorX.z*mPoleXY + vectorY.z*mPoleYY + vectorZ.z*mPoleYZ) + vectorZ.y*(vectorX.z*mPoleXZ + vectorY.z*mPoleYZ + vectorZ.z*mPoleZZ); + + // --------------------------------------------------------------------------------------- + + // Now transform the spherical multipoles. First do the dipoles. + + offset = 3*atom; + real sphericalDipole[3]; + sphericalDipole[0] = sphericalDipoles[offset]; + sphericalDipole[1] = sphericalDipoles[offset+1]; + sphericalDipole[2] = sphericalDipoles[offset+2]; + if (reverse) + sphericalDipole[2] *= -1; + sphericalDipoles[offset] = sphericalDipole[0]*vectorZ.z + sphericalDipole[1]*vectorX.z + sphericalDipole[2]*vectorY.z; + sphericalDipoles[offset+1] = sphericalDipole[0]*vectorZ.x + sphericalDipole[1]*vectorX.x + sphericalDipole[2]*vectorY.x; + sphericalDipoles[offset+2] = sphericalDipole[0]*vectorZ.y + sphericalDipole[1]*vectorX.y + sphericalDipole[2]*vectorY.y; + + // Now the quadrupoles. + + offset = 5*atom; + real sphericalQuadrupole[5]; + sphericalQuadrupole[0] = sphericalQuadrupoles[offset]; + sphericalQuadrupole[1] = sphericalQuadrupoles[offset+1]; + sphericalQuadrupole[2] = sphericalQuadrupoles[offset+2]; + sphericalQuadrupole[3] = sphericalQuadrupoles[offset+3]; + sphericalQuadrupole[4] = sphericalQuadrupoles[offset+4]; + if (reverse) { + sphericalQuadrupole[2] *= -1; + sphericalQuadrupole[4] *= -1; + } + real rotatedQuadrupole[5] = {0, 0, 0, 0, 0}; + real sqrtThree = SQRT((real) 3); + rotatedQuadrupole[0] += sphericalQuadrupole[0]*0.5f*(3.0f*vectorZ.z*vectorZ.z - 1.0f) + + sphericalQuadrupole[1]*sqrtThree*vectorZ.z*vectorX.z + + sphericalQuadrupole[2]*sqrtThree*vectorZ.z*vectorY.z + + sphericalQuadrupole[3]*0.5f*sqrtThree*(vectorX.z*vectorX.z - vectorY.z*vectorY.z) + + sphericalQuadrupole[4]*sqrtThree*vectorX.z*vectorY.z; + rotatedQuadrupole[1] += sphericalQuadrupole[0]*sqrtThree*vectorZ.z*vectorZ.x + + sphericalQuadrupole[1]*(vectorZ.x*vectorX.z + vectorZ.z*vectorX.x) + + sphericalQuadrupole[2]*(vectorZ.x*vectorY.z + vectorZ.z*vectorY.x) + + sphericalQuadrupole[3]*(vectorX.z*vectorX.x - vectorY.z*vectorY.x) + + sphericalQuadrupole[4]*(vectorX.x*vectorY.z + vectorX.z*vectorY.x); + rotatedQuadrupole[2] += sphericalQuadrupole[0]*sqrtThree*vectorZ.z*vectorZ.y + + sphericalQuadrupole[1]*(vectorZ.y*vectorX.z + vectorZ.z*vectorX.y) + + sphericalQuadrupole[2]*(vectorZ.y*vectorY.z + vectorZ.z*vectorY.y) + + sphericalQuadrupole[3]*(vectorX.z*vectorX.y - vectorY.z*vectorY.y) + + sphericalQuadrupole[4]*(vectorX.y*vectorY.z + vectorX.z*vectorY.y); + rotatedQuadrupole[3] += sphericalQuadrupole[0]*0.5f*sqrtThree*(vectorZ.x*vectorZ.x - vectorZ.y*vectorZ.y) + + sphericalQuadrupole[1]*(vectorZ.x*vectorX.x - vectorZ.y*vectorX.y) + + sphericalQuadrupole[2]*(vectorZ.x*vectorY.x - vectorZ.y*vectorY.y) + + sphericalQuadrupole[3]*0.5f*(vectorX.x*vectorX.x - vectorX.y*vectorX.y - vectorY.x*vectorY.x + vectorY.y*vectorY.y) + + sphericalQuadrupole[4]*(vectorX.x*vectorY.x - vectorX.y*vectorY.y); + rotatedQuadrupole[4] += sphericalQuadrupole[0]*sqrtThree*vectorZ.x*vectorZ.y + + sphericalQuadrupole[1]*(vectorZ.y*vectorX.x + vectorZ.x*vectorX.y) + + sphericalQuadrupole[2]*(vectorZ.y*vectorY.x + vectorZ.x*vectorY.y) + + sphericalQuadrupole[3]*(vectorX.x*vectorX.y - vectorY.x*vectorY.y) + + sphericalQuadrupole[4]*(vectorX.y*vectorY.x + vectorX.x*vectorY.y); + sphericalQuadrupoles[offset] = rotatedQuadrupole[0]; + sphericalQuadrupoles[offset+1] = rotatedQuadrupole[1]; + sphericalQuadrupoles[offset+2] = rotatedQuadrupole[2]; + sphericalQuadrupoles[offset+3] = rotatedQuadrupole[3]; + sphericalQuadrupoles[offset+4] = rotatedQuadrupole[4]; } else { labFrameDipoles[3*atom] = molecularDipoles[3*atom]; diff --git a/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForce.cu b/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForce.cu deleted file mode 100644 index 71358a7308a3f08179acedfacf3f80ee4d858309..0000000000000000000000000000000000000000 --- a/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForce.cu +++ /dev/null @@ -1,947 +0,0 @@ -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionF1( -#else -computeOneInteractionF1NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, real bn5, float forceFactor, -#ifdef APPLY_SCALE - float dScale, float pScale, float mScale, -#endif - real3& force, real& energy) { - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; -#ifdef APPLY_SCALE - real rr1 = delta.w; -#endif - - // set the permanent multipole and induced dipole values; - - real ci = atom1.q; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real qi1 = atom1.quadrupoleXX; - real qi2 = atom1.quadrupoleXY; - real qi3 = atom1.quadrupoleXZ; - real qi5 = atom1.quadrupoleYY; - real qi6 = atom1.quadrupoleYZ; - real qi9 = -(atom1.quadrupoleXX + atom1.quadrupoleYY); - - real ck = atom2.q; - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real qk1 = atom2.quadrupoleXX; - real qk2 = atom2.quadrupoleXY; - real qk3 = atom2.quadrupoleXZ; - real qk5 = atom2.quadrupoleYY; - real qk6 = atom2.quadrupoleYZ; - real qk9 = -(atom2.quadrupoleXX + atom2.quadrupoleYY); - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - -#ifdef APPLY_SCALE - real offset = 1-mScale; - real rr3 = rr1*rr1*rr1; - real gf4 = 2*(bn2 - 3*offset*rr3*rr1*rr1); -#else - real gf4 = 2*bn2; -#endif - real qidk1 = qi1*dk1 + qi2*dk2 + qi3*dk3; - real qkdi1 = qk1*di1 + qk2*di2 + qk3*di3; - real ftm21 = gf4*(qkdi1-qidk1); - - real qidk2 = qi2*dk1 + qi5*dk2 + qi6*dk3; - real qkdi2 = qk2*di1 + qk5*di2 + qk6*di3; - real ftm22 = gf4*(qkdi2-qidk2); - - real qidk3 = qi3*dk1 + qi6*dk2 + qi9*dk3; - real qkdi3 = qk3*di1 + qk6*di2 + qk9*di3; - real ftm23 = gf4*(qkdi3-qidk3); - - real qir1 = qi1*xr + qi2*yr + qi3*zr; - real qir2 = qi2*xr + qi5*yr + qi6*zr; - real qir3 = qi3*xr + qi6*yr + qi9*zr; - - real qkr1 = qk1*xr + qk2*yr + qk3*zr; - real qkr2 = qk2*xr + qk5*yr + qk6*zr; - real qkr3 = qk3*xr + qk6*yr + qk9*zr; - -#ifdef APPLY_SCALE - real gf7 = 4*(bn3 - 15*offset*rr3*rr3*rr1); -#else - real gf7 = 4*bn3; -#endif - real qiqkr1 = qi1*qkr1 + qi2*qkr2 + qi3*qkr3; - real qkqir1 = qk1*qir1 + qk2*qir2 + qk3*qir3; - ftm21 += gf7*(qiqkr1+qkqir1); - - real qiqkr2 = qi2*qkr1 + qi5*qkr2 + qi6*qkr3; - real qkqir2 = qk2*qir1 + qk5*qir2 + qk6*qir3; - ftm22 += gf7*(qiqkr2+qkqir2); - - real qiqkr3 = qi3*qkr1 + qi6*qkr2 + qi9*qkr3; - real qkqir3 = qk3*qir1 + qk6*qir2 + qk9*qir3; - ftm23 += gf7*(qiqkr3+qkqir3); - - // calculate the scalar products for permanent components - - real gl6 = di1*dk1 + di2*dk2 + di3*dk3; - real gl7 = 2*(qir1*dk1 + qir2*dk2 + qir3*dk3 - (qkr1*di1 + qkr2*di2 + qkr3*di3)); - real gl5 = -4*(qir1*qkr1 + qir2*qkr2 + qir3*qkr3); - - real gl8 = 2*(qi1*qk1 + qi2*qk2 + qi3*qk3 + qi2*qk2 + qi5*qk5 + qi6*qk6 + qi3*qk3 + qi6*qk6 + qi9*qk9); - - real sc3 = di1*xr + di2*yr + di3*zr; - real sc5 = qir1*xr + qir2*yr + qir3*zr; - real sc4 = dk1*xr + dk2*yr + dk3*zr; - real sc6 = qkr1*xr + qkr2*yr + qkr3*zr; - - real gl0 = ci*ck; - real gl1 = ck*sc3 - ci*sc4; - real gl2 = ci*sc6 + ck*sc5 - sc3*sc4; - real gl3 = sc3*sc6 - sc4*sc5; - real gl4 = sc5*sc6; - -#ifdef APPLY_SCALE - energy += forceFactor*(-offset*rr1*gl0 + (bn1-offset*rr3)*(gl1+gl6) + (bn2-offset*(3*rr3*rr1*rr1))*(gl2+gl7+gl8) + (bn3-offset*(15*rr3*rr3*rr1))*(gl3+gl5) + (bn4-offset*(105*rr3*rr3*rr3))*gl4); -#else - energy += forceFactor*(bn1*(gl1+gl6) + bn2*(gl2+gl7+gl8) + bn3*(gl3+gl5) + bn4*gl4); - -#endif - - real gf1 = bn1*gl0 + bn2*(gl1+gl6) + bn3*(gl2+gl7+gl8) + bn4*(gl3+gl5) + bn5*gl4; -#ifdef APPLY_SCALE - gf1 -= offset*(rr3*gl0 + (3*rr3*rr1*rr1)*(gl1+gl6) + (15*rr3*rr3*rr1)*(gl2+gl7+gl8) + (105*rr3*rr3*rr3)*(gl3+gl5) + (945*rr3*rr3*rr3*rr1*rr1)*gl4); -#endif - ftm21 += gf1*xr; - ftm22 += gf1*yr; - ftm23 += gf1*zr; - -#ifdef APPLY_SCALE - real gf2 = -ck*bn1 + sc4*bn2 - sc6*bn3 - offset*(-ck*rr3 + sc4*(3*rr3*rr1*rr1) - sc6*(15*rr3*rr3*rr1)); -#else - real gf2 = -ck*bn1 + sc4*bn2 - sc6*bn3; -#endif - ftm21 += gf2*di1; - ftm22 += gf2*di2; - ftm23 += gf2*di3; - -#ifdef APPLY_SCALE - real gf5 = 2*(-ck*bn2+sc4*bn3-sc6*bn4 - offset*(-ck*(3*rr3*rr1*rr1)+sc4*(15*rr3*rr3*rr1)-sc6*(105*rr3*rr3*rr3))); -#else - real gf5 = 2*(-ck*bn2+sc4*bn3-sc6*bn4); -#endif - ftm21 += gf5*qir1; - ftm22 += gf5*qir2; - ftm23 += gf5*qir3; - -#ifdef APPLY_SCALE - real gf3 = ci*bn1 + sc3*bn2 + sc5*bn3 - offset*(ci*rr3 + sc3*(3*rr3*rr1*rr1) + sc5*(15*rr3*rr3*rr1)); -#else - real gf3 = ci*bn1 + sc3*bn2 + sc5*bn3; -#endif - ftm21 += gf3*dk1; - ftm22 += gf3*dk2; - ftm23 += gf3*dk3; - -#ifdef APPLY_SCALE - real gf6 = 2*(-ci*bn2-sc3*bn3-sc5*bn4 - offset*(-ci*(3*rr3*rr1*rr1)-sc3*(15*rr3*rr3*rr1)-sc5*(105*rr3*rr3*rr3))); -#else - real gf6 = 2*(-ci*bn2-sc3*bn3-sc5*bn4); -#endif - - ftm21 += gf6*qkr1; - ftm22 += gf6*qkr2; - ftm23 += gf6*qkr3; - - force.x = ftm21; - force.y = ftm22; - force.z = ftm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionF2( -#else -computeOneInteractionF2NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, float forceFactor, -#ifdef APPLY_SCALE - float dScale, float pScale, float mScale, -#endif - real3& force, real& energy) { - const float uScale = 1; - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; - real rr1 = delta.w; - - // set the permanent multipole and induced dipole values; - - real ci = atom1.q; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real qi1 = atom1.quadrupoleXX; - real qi2 = atom1.quadrupoleXY; - real qi3 = atom1.quadrupoleXZ; - real qi5 = atom1.quadrupoleYY; - real qi6 = atom1.quadrupoleYZ; - real qi9 = -(atom1.quadrupoleXX + atom1.quadrupoleYY); - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - - real damp = atom1.damp*atom2.damp; - if (damp != 0) { - real pgamma = atom1.thole < atom2.thole ? atom1.thole : atom2.thole; - real ratio = RECIP(rr1*damp); - damp = -pgamma*ratio*ratio*ratio; - } - - real scale5 = (damp == 0) ? 1 : (1 - (1-damp)*EXP(damp)); - real rr5 = rr1*rr1; - rr5 = 3*rr1*rr5*rr5; -#ifdef APPLY_SCALE - real psc5 = rr5*(1 - scale5*pScale); - real dsc5 = rr5*(1 - scale5*dScale); - real usc5 = rr5*(1 - scale5*uScale); -#else - real psc5 = rr5*(1 - scale5); -#endif - - real qiuk1 = qi1*atom2.inducedDipole.x + qi2*atom2.inducedDipole.y + qi3*atom2.inducedDipole.z; - real qiukp1 = qi1*atom2.inducedDipolePolar.x + qi2*atom2.inducedDipolePolar.y + qi3*atom2.inducedDipolePolar.z; - real ftm21 = -bn2*(qiuk1+qiukp1); -#ifdef APPLY_SCALE - ftm21 += qiuk1*psc5 + qiukp1*dsc5; -#else - ftm21 += (qiuk1 + qiukp1)*psc5; -#endif - - real qiuk2 = qi2*atom2.inducedDipole.x + qi5*atom2.inducedDipole.y + qi6*atom2.inducedDipole.z; - real qiukp2 = qi2*atom2.inducedDipolePolar.x + qi5*atom2.inducedDipolePolar.y + qi6*atom2.inducedDipolePolar.z; - real ftm22 = -bn2*(qiuk2+qiukp2); -#ifdef APPLY_SCALE - ftm22 += ((qiuk2)*psc5 + (qiukp2)*dsc5); -#else - ftm22 += (qiuk2 + qiukp2)*psc5; -#endif - - real qiuk3 = qi3*atom2.inducedDipole.x + qi6*atom2.inducedDipole.y + qi9*atom2.inducedDipole.z; - real qiukp3 = qi3*atom2.inducedDipolePolar.x + qi6*atom2.inducedDipolePolar.y + qi9*atom2.inducedDipolePolar.z; - real ftm23 = -bn2*(qiuk3+qiukp3); -#ifdef APPLY_SCALE - ftm23 += ((qiuk3)*psc5 + (qiukp3)*dsc5); -#else - ftm23 += (qiuk3 + qiukp3)*psc5; -#endif - - real expdamp = EXP(damp); - real scale3 = (damp == 0) ? 1 : (1 - expdamp); - real rr3 = rr1*rr1*rr1; - -#ifdef APPLY_SCALE - real psc3 = rr3*(1 - scale3*pScale); - real dsc3 = rr3*(1 - scale3*dScale); - real usc3 = rr3*(1 - scale3*uScale); -#else - real psc3 = rr3*(1 - scale3); -#endif - - real scale7 = (damp == 0) ? 1 : (1 - (1-damp+0.6f*damp*damp)*expdamp); - -#ifdef APPLY_SCALE - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7*pScale); - real dsc7 = (15*rr3*rr3*rr1)*(1 - scale7*dScale); -#else - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7); -#endif - - real qir1 = qi1*xr + qi2*yr + qi3*zr; - real qir2 = qi2*xr + qi5*yr + qi6*zr; - real qir3 = qi3*xr + qi6*yr + qi9*zr; - - real sc3 = di1*xr + di2*yr + di3*zr; - real sc5 = qir1*xr + qir2*yr + qir3*zr; - real gfi3 = ci*bn1 + sc3*bn2 + sc5*bn3; - - real prefactor1; - prefactor1 = 0.5f*(ci*psc3 + sc3*psc5 + sc5*psc7 - gfi3); - ftm21 -= prefactor1*atom2.inducedDipole.x; - ftm22 -= prefactor1*atom2.inducedDipole.y; - ftm23 -= prefactor1*atom2.inducedDipole.z; - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(ci*dsc3 + sc3*dsc5 + sc5*dsc7 - gfi3); -#endif - ftm21 -= prefactor1*atom2.inducedDipolePolar.x; - ftm22 -= prefactor1*atom2.inducedDipolePolar.y; - ftm23 -= prefactor1*atom2.inducedDipolePolar.z; - - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - energy += forceFactor*0.5f*sci4*((psc3-bn1)*ci + (psc5-bn2)*sc3 + (psc7-bn3)*sc5); - - real scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2 - usc5); -#else - prefactor1 = 0.5f*(bn2 - psc5); -#endif - ftm21 += prefactor1*((sci4*atom1.inducedDipolePolar.x + scip4*atom1.inducedDipole.x)); - ftm22 += prefactor1*((sci4*atom1.inducedDipolePolar.y + scip4*atom1.inducedDipole.y)); - ftm23 += prefactor1*((sci4*atom1.inducedDipolePolar.z + scip4*atom1.inducedDipole.z)); -#endif - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2*(sci4+scip4) - (sci4*psc5+scip4*dsc5)); -#else - sci4 += scip4; - prefactor1 = 0.5f*sci4*(bn2 - psc5); -#endif - - ftm21 += prefactor1*di1; - ftm22 += prefactor1*di2; - ftm23 += prefactor1*di3; - -#ifdef APPLY_SCALE - real gfi5 = bn3*(sci4+scip4) - (sci4*psc7+scip4*dsc7); -#else - real gfi5 = sci4*(bn3 - psc7); -#endif - ftm21 += gfi5*qir1; - ftm22 += gfi5*qir2; - ftm23 += gfi5*qir3; - - real sci7 = qir1*atom2.inducedDipole.x + qir2*atom2.inducedDipole.y + qir3*atom2.inducedDipole.z; - energy += forceFactor*(bn2-psc5)*sci7; - real scip7 = qir1*atom2.inducedDipolePolar.x + qir2*atom2.inducedDipolePolar.y + qir3*atom2.inducedDipolePolar.z; - -#ifdef APPLY_SCALE - real gli1 = -ci*sci4; - real gli2 = -sc3*sci4 + 2*sci7; - real gli3 = -sci4*sc5; - real glip1 = -ci*scip4; - real glip2 = -sc3*scip4 + 2*scip7; - real glip3 = -scip4*sc5; -#else - real gli1 = -ci*sci4; - real gli2 = -sc3*sci4 + 2*(sci7 + scip7); - real gli3 = -sci4*sc5; -#endif - -#ifdef APPLY_SCALE - real gfi1 = (bn2*(gli1+glip1) + bn3*(gli2+glip2) + bn4*(gli3+glip3)); - gfi1 -= (rr1*rr1)*(3*(gli1*psc3 + glip1*dsc3) + 5*(gli2*psc5 + glip2*dsc5) + 7*(gli3*psc7+glip3*dsc7)); -#else - real gfi1 = bn2*gli1 + bn3*gli2 + bn4*gli3; - gfi1 -= (rr1*rr1)*(3*gli1*psc3 + 5*gli2*psc5 + 7*gli3*psc7); -#endif - gfi1 *= 0.5f; - ftm21 += gfi1*xr; - ftm22 += gfi1*yr; - ftm23 += gfi1*zr; - - { - real expdamp = EXP(damp); - real temp3 = -1.5f*damp*expdamp*rr1*rr1; - real temp5 = -damp; - real temp7 = -0.2f - 0.6f*damp; - - real ddsc31 = temp3*xr; - real ddsc32 = temp3*yr; - real ddsc33 = temp3*zr; - - real ddsc51 = temp5*ddsc31; - real ddsc52 = temp5*ddsc32; - real ddsc53 = temp5*ddsc33; - - real ddsc71 = temp7*ddsc51; - real ddsc72 = temp7*ddsc52; - real ddsc73 = temp7*ddsc53; - - real rr3 = rr1*rr1*rr1; -#ifdef APPLY_SCALE - temp3 = (gli1*pScale + glip1*dScale); - temp5 = (3*rr1*rr1)*(gli2*pScale + glip2*dScale); - temp7 = (15*rr3*rr1)*(gli3*pScale + glip3*dScale); -#else - temp3 = gli1; - temp5 = (3*rr1*rr1)*gli2; - temp7 = (15*rr3*rr1)*gli3; -#endif - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51 + temp7*ddsc71); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52 + temp7*ddsc72); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53 + temp7*ddsc73); - } - -//K - real qk1 = atom2.quadrupoleXX; - real qk2 = atom2.quadrupoleXY; - real qk3 = atom2.quadrupoleXZ; - real qk5 = atom2.quadrupoleYY; - real qk6 = atom2.quadrupoleYZ; - real qk9 = -(qk1 + qk5); - - real qkui1 = qk1*atom1.inducedDipole.x + qk2*atom1.inducedDipole.y + qk3*atom1.inducedDipole.z; - real qkuip1 = qk1*atom1.inducedDipolePolar.x + qk2*atom1.inducedDipolePolar.y + qk3*atom1.inducedDipolePolar.z; - ftm21 += bn2*(qkui1+qkuip1); -#ifdef APPLY_SCALE - ftm21 -= (qkui1*psc5 + qkuip1*dsc5); -#else - ftm21 -= (qkui1 + qkuip1)*psc5; -#endif - - real qkui2 = qk2*atom1.inducedDipole.x + qk5*atom1.inducedDipole.y + qk6*atom1.inducedDipole.z; - real qkuip2 = qk2*atom1.inducedDipolePolar.x + qk5*atom1.inducedDipolePolar.y + qk6*atom1.inducedDipolePolar.z; - ftm22 += bn2*(qkui2+qkuip2); -#ifdef APPLY_SCALE - ftm22 -= ((qkui2)*psc5 + (qkuip2)*dsc5); -#else - ftm22 -= (qkui2 + qkuip2)*psc5; -#endif - - real qkui3 = qk3*atom1.inducedDipole.x + qk6*atom1.inducedDipole.y + qk9*atom1.inducedDipole.z; - real qkuip3 = qk3*atom1.inducedDipolePolar.x + qk6*atom1.inducedDipolePolar.y + qk9*atom1.inducedDipolePolar.z; - ftm23 += bn2*(qkui3+qkuip3); -#ifdef APPLY_SCALE - ftm23 -= ((qkui3)*psc5 + (qkuip3)*dsc5); -#else - ftm23 -= (qkui3 + qkuip3)*psc5; -#endif - - - real qkr1 = qk1*xr + qk2*yr + qk3*zr; - real qkr2 = qk2*xr + qk5*yr + qk6*zr; - real qkr3 = qk3*xr + qk6*yr + qk9*zr; - - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real sc4 = dk1*xr + dk2*yr + dk3*zr; - real sc6 = qkr1*xr + qkr2*yr + qkr3*zr; - - real ck = atom2.q; - real gfi2 = (-ck*bn1 + sc4*bn2 - sc6*bn3); - - prefactor1 = 0.5f*(ck*psc3 - sc4*psc5 + sc6*psc7 + gfi2); - ftm21 += prefactor1*atom1.inducedDipole.x; - ftm22 += prefactor1*atom1.inducedDipole.y; - ftm23 += prefactor1*atom1.inducedDipole.z; - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(ck*dsc3 - sc4*dsc5 + sc6*dsc7 + gfi2); -#endif - ftm21 += prefactor1*atom1.inducedDipolePolar.x; - ftm22 += prefactor1*atom1.inducedDipolePolar.y; - ftm23 += prefactor1*atom1.inducedDipolePolar.z; - - real sci3 = atom1.inducedDipole.x*xr + atom1.inducedDipole.y*yr + atom1.inducedDipole.z*zr; - energy += forceFactor*0.5f*sci3*(ck*(bn1-psc3) - sc4*(bn2-psc5) + sc6*(bn3-psc7)); - real scip3 = atom1.inducedDipolePolar.x*xr + atom1.inducedDipolePolar.y*yr + atom1.inducedDipolePolar.z*zr; - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2 - usc5); -#else - prefactor1 = 0.5f*(bn2 - psc5); -#endif - - ftm21 += prefactor1*(sci3*atom2.inducedDipolePolar.x + scip3*atom2.inducedDipole.x); - ftm22 += prefactor1*(sci3*atom2.inducedDipolePolar.y + scip3*atom2.inducedDipole.y); - ftm23 += prefactor1*(sci3*atom2.inducedDipolePolar.z + scip3*atom2.inducedDipole.z); - - real sci34; - sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; - sci34 = (sci3*scip4+scip3*sci4); - -#ifdef APPLY_SCALE - gfi1 = sci34*(usc5*(5*rr1*rr1) -bn3); -#else - gfi1 = sci34*(psc5*(5*rr1*rr1) -bn3); -#endif -#else - gfi1 = 0; -#endif - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2*(sci3+scip3) - (sci3*psc5+scip3*dsc5)); -#else - sci3 += scip3; - prefactor1 = 0.5f*sci3*(bn2 - psc5); -#endif - ftm21 += prefactor1*dk1; - ftm22 += prefactor1*dk2; - ftm23 += prefactor1*dk3; - -#ifdef APPLY_SCALE - real gfi6 = -bn3*(sci3+scip3) + (sci3*psc7+scip3*dsc7); -#else - real gfi6 = sci3*(psc7 - bn3); -#endif - ftm21 += gfi6*qkr1; - ftm22 += gfi6*qkr2; - ftm23 += gfi6*qkr3; - - real sci1 = atom1.inducedDipole.x*dk1 + atom1.inducedDipole.y*dk2 + atom1.inducedDipole.z*dk3 + di1*atom2.inducedDipole.x + di2*atom2.inducedDipole.y + di3*atom2.inducedDipole.z; - energy += forceFactor*0.5f*(sci1*(bn1-psc3)); - - real sci8 = qkr1*atom1.inducedDipole.x + qkr2*atom1.inducedDipole.y + qkr3*atom1.inducedDipole.z; - energy -= forceFactor*sci8*(bn2-psc5); - real scip1 = atom1.inducedDipolePolar.x*dk1 + atom1.inducedDipolePolar.y*dk2 + atom1.inducedDipolePolar.z*dk3 + di1*atom2.inducedDipolePolar.x + di2*atom2.inducedDipolePolar.y + di3*atom2.inducedDipolePolar.z; -#ifndef APPLY_SCALE - sci1 += scip1; -#endif - - real scip2 = atom1.inducedDipole.x*atom2.inducedDipolePolar.x + - atom1.inducedDipole.y*atom2.inducedDipolePolar.y + - atom1.inducedDipole.z*atom2.inducedDipolePolar.z + - atom2.inducedDipole.x*atom1.inducedDipolePolar.x + - atom2.inducedDipole.y*atom1.inducedDipolePolar.y + - atom2.inducedDipole.z*atom1.inducedDipolePolar.z; - - real scip8 = qkr1*atom1.inducedDipolePolar.x + qkr2*atom1.inducedDipolePolar.y + qkr3*atom1.inducedDipolePolar.z; -#ifndef APPLY_SCALE - sci8 += scip8; -#endif - - gli1 = ck*sci3 + sci1; - gli2 = -(sci3*sc4 + 2*sci8); - gli3 = sci3*sc6; -#ifdef APPLY_SCALE - glip1 = ck*scip3 + scip1; - glip2 = -(scip3*sc4 + 2*scip8); - glip3 = scip3*sc6; -#endif - - -#ifdef APPLY_SCALE - gfi1 += (bn2*(gli1+glip1) + bn3*(gli2+glip2) + bn4*(gli3+glip3)); - gfi1 -= (rr1*rr1)*(3*(gli1*psc3 + glip1*dsc3) + 5*(gli2*psc5 + glip2*dsc5) + 7*(gli3*psc7+glip3*dsc7)); -#else - gfi1 += (bn2*gli1 + bn3*gli2 + bn4*gli3); - gfi1 -= (rr1*rr1)*(3*gli1*psc3 + 5*gli2*psc5 + 7*gli3*psc7); -#endif - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - gfi1 += scip2*(bn2 - (3*rr1*rr1)*usc3); -#else - gfi1 += scip2*(bn2 - (3*rr1*rr1)*psc3); -#endif -#endif - - gfi1 *= 0.5f; - - ftm21 += gfi1*xr; - ftm22 += gfi1*yr; - ftm23 += gfi1*zr; - - { - real expdamp = EXP(damp); - real temp3 = -1.5f*damp*expdamp*rr1*rr1; - real temp5 = -damp; - real temp7 = -0.2f - 0.6f*damp; - - real ddsc31 = temp3*xr; - real ddsc32 = temp3*yr; - real ddsc33 = temp3*zr; - - real ddsc51 = temp5*ddsc31; - real ddsc52 = temp5*ddsc32; - real ddsc53 = temp5*ddsc33; - - real ddsc71 = temp7*ddsc51; - real ddsc72 = temp7*ddsc52; - real ddsc73 = temp7*ddsc53; - - real rr3 = rr1*rr1*rr1; - -#ifdef APPLY_SCALE - temp3 = gli1*pScale + glip1*dScale; - temp5 = (3*rr1*rr1)*(gli2*pScale + glip2*dScale); - temp7 = (15*rr3*rr1)*(gli3*pScale + glip3*dScale); -#else - temp3 = gli1; - temp5 = (3*rr1*rr1)*gli2; - temp7 = (15*rr3*rr1)*(gli3); -#endif - - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51 + temp7*ddsc71); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52 + temp7*ddsc72); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53 + temp7*ddsc73); - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - temp3 = uScale*scip2; - temp5 = -(3*rr1*rr1)*uScale*sci34; -#else - temp3 = scip2; - temp5 = -(3*rr1*rr1)*sci34; -#endif - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53); -#endif - } - - force.x += ftm21; - force.y += ftm22; - force.z += ftm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionT1( -#else -computeOneInteractionT1NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn -#ifdef APPLY_SCALE - , float dScale, float pScale, float mScale -#endif - ) { - - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; -#ifdef APPLY_SCALE - real rr1 = delta.w; -#endif - - // set the permanent multipole and induced dipole values; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real qi1 = atom1.quadrupoleXX; - real qi2 = atom1.quadrupoleXY; - real qi3 = atom1.quadrupoleXZ; - real qi5 = atom1.quadrupoleYY; - real qi6 = atom1.quadrupoleYZ; - //real qi9 = atom1.labFrameQuadrupole[5]; - real qi9 = -(atom1.quadrupoleXX + atom1.quadrupoleYY); - - real ck = atom2.q; - - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real qk1 = atom2.quadrupoleXX; - real qk2 = atom2.quadrupoleXY; - real qk3 = atom2.quadrupoleXZ; - real qk5 = atom2.quadrupoleYY; - real qk6 = atom2.quadrupoleYZ; - //real qk9 = atom2.labFrameQuadrupole[5]; - real qk9 = -(atom2.quadrupoleXX + atom2.quadrupoleYY); - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - - // apply Thole polarization damping to scale factors - -#ifdef APPLY_SCALE - real rr2 = rr1*rr1; - real rr3 = rr1*rr2; - real rr5 = 3*rr3*rr2; - real rr7 = 5*rr5*rr2; - real rr9 = 7*rr7*rr2; - - real scale = 1-mScale; - real prefactor = scale*rr3 - bn1; -#else - real prefactor = -bn1; -#endif - real dixdk1 = di2*dk3 - di3*dk2; - real ttm21 = prefactor*dixdk1; - - real dixdk2 = di3*dk1 - di1*dk3; - real ttm22 = prefactor*dixdk2; - - real dixdk3 = di1*dk2 - di2*dk1; - real ttm23 = prefactor*dixdk3; - - real qir1 = qi1*xr + qi2*yr + qi3*zr; - real qir2 = qi2*xr + qi5*yr + qi6*zr; - real qir3 = qi3*xr + qi6*yr + qi9*zr; - - real qkr1 = qk1*xr + qk2*yr + qk3*zr; - real qkr2 = qk2*xr + qk5*yr + qk6*zr; - real qkr3 = qk3*xr + qk6*yr + qk9*zr; - - real qiqkr1 = qi1*qkr1 + qi2*qkr2 + qi3*qkr3; - real qiqkr2 = qi2*qkr1 + qi5*qkr2 + qi6*qkr3; - real qiqkr3 = qi3*qkr1 + qi6*qkr2 + qi9*qkr3; - - real rxqikr1 = yr*qiqkr3 - zr*qiqkr2; - real qkrxqir1 = qkr2*qir3 - qkr3*qir2; -#ifdef APPLY_SCALE - prefactor = 4*(bn3 - scale*rr7); -#else - prefactor = 4*bn3; -#endif - ttm21 -= prefactor*(rxqikr1+qkrxqir1); - - real rxqikr2 = zr*qiqkr1 - xr*qiqkr3; - real qkrxqir2 = qkr3*qir1 - qkr1*qir3; - ttm22 -= prefactor*(rxqikr2+qkrxqir2); - - real rxqikr3 = xr*qiqkr2 - yr*qiqkr1; - real qkrxqir3 = qkr1*qir2 - qkr2*qir1; - ttm23 -= prefactor*(rxqikr3+qkrxqir3); - - real qidk1 = qi1*dk1 + qi2*dk2 + qi3*dk3; - real qidk2 = qi2*dk1 + qi5*dk2 + qi6*dk3; - real qidk3 = qi3*dk1 + qi6*dk2 + qi9*dk3; - - real dixqkr1 = di2*qkr3 - di3*qkr2; - real dkxqir1 = dk2*qir3 - dk3*qir2; - real rxqidk1 = yr*qidk3 - zr*qidk2; - real qixqk1 = qi2*qk3 + qi5*qk6 + qi6*qk9 - qi3*qk2 - qi6*qk5 - qi9*qk6; -#ifdef APPLY_SCALE - prefactor = 2*(bn2 - scale*rr5); -#else - prefactor = 2*bn2; -#endif - ttm21 += prefactor*(dixqkr1+dkxqir1+rxqidk1-2*qixqk1); - - real dixqkr2 = di3*qkr1 - di1*qkr3; - real dkxqir2 = dk3*qir1 - dk1*qir3; - real rxqidk2 = zr*qidk1 - xr*qidk3; - real qixqk2 = qi3*qk1 + qi6*qk2 + qi9*qk3 - qi1*qk3 - qi2*qk6 - qi3*qk9; - ttm22 += prefactor*(dixqkr2+dkxqir2+rxqidk2-2*qixqk2); - - real dixqkr3 = di1*qkr2 - di2*qkr1; - real dkxqir3 = dk1*qir2 - dk2*qir1; - real rxqidk3 = xr*qidk2 - yr*qidk1; - real qixqk3 = qi1*qk2 + qi2*qk5 + qi3*qk6 - qi2*qk1 - qi5*qk2 - qi6*qk3; - ttm23 += prefactor*(dixqkr3+dkxqir3+rxqidk3-2*qixqk3); - - real sc4 = dk1*xr + dk2*yr + dk3*zr; - real sc6 = qkr1*xr + qkr2*yr + qkr3*zr; - - real gf2 = -ck*bn1 + sc4*bn2 - sc6*bn3; -#ifdef APPLY_SCALE - real gfr2 = -ck*rr3 + sc4*rr5 - sc6*rr7; - prefactor = (gf2 - scale*gfr2); -#else - prefactor = gf2; -#endif - ttm21 += prefactor*(di2*zr - di3*yr); - ttm22 += prefactor*(di3*xr - di1*zr); - ttm23 += prefactor*(di1*yr - di2*xr); - - real gf5 = (-ck*bn2+sc4*bn3-sc6*bn4); -#ifdef APPLY_SCALE - real gfr5 = (-ck*rr5+sc4*rr7-sc6*rr9); - prefactor = 2*(gf5 - scale*gfr5); -#else - prefactor = 2*gf5; -#endif - - real rxqir1 = yr*qir3 - zr*qir2; - real rxqir2 = zr*qir1 - xr*qir3; - real rxqir3 = xr*qir2 - yr*qir1; - ttm21 -= prefactor*rxqir1; - ttm22 -= prefactor*rxqir2; - ttm23 -= prefactor*rxqir3; - - atom1.torque.x += ttm21; - atom1.torque.y += ttm22; - atom1.torque.z += ttm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionT2( -#else -computeOneInteractionT2NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn -#ifdef APPLY_SCALE - , float dScale, float pScale, float mScale -#endif - ) { - - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; - real rr1 = delta.w; - - // set the permanent multipole and induced dipole values; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real qi1 = atom1.quadrupoleXX; - real qi2 = atom1.quadrupoleXY; - real qi3 = atom1.quadrupoleXZ; - real qi5 = atom1.quadrupoleYY; - real qi6 = atom1.quadrupoleYZ; - real qi9 = -(atom1.quadrupoleXX + atom1.quadrupoleYY); - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - - // apply Thole polarization damping to scale factors - - real scale3 = 1; - real scale5 = 1; - real scale7 = 1; - - real damp = atom1.damp*atom2.damp; - if (damp != 0) { - real pgamma = atom1.thole < atom2.thole ? atom1.thole : atom2.thole; - real ratio = RECIP(rr1*damp); - damp = -pgamma*ratio*ratio*ratio; - real expdamp = EXP(damp); - scale3 = 1 - expdamp; - scale5 = 1 - (1-damp)*expdamp; - scale7 = 1 - (1-damp+0.6f*damp*damp)*expdamp; - } - - real rr3 = rr1*rr1*rr1; -#ifdef APPLY_SCALE - real dsc3 = rr3*(1 - scale3*dScale); - real dsc5 = (3*rr3*rr1*rr1)* (1 - scale5*dScale); - real dsc7 = (15*rr3*rr3*rr1)*(1 - scale7*dScale); - - real psc3 = rr3*(1 - scale3*pScale); - real psc5 = (3*rr3*rr1*rr1)*(1 - scale5*pScale); - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7*pScale); -#else - real psc3 = rr3*(1 - scale3); - real psc5 = (3*rr3*rr1*rr1)*(1 - scale5); - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7); -#endif - - real prefactor1 = 0.5f*(psc3 - bn1); -#ifdef APPLY_SCALE - real prefactor2 = 0.5f*(dsc3 - bn1); -#endif - - real dixuk1 = di2*atom2.inducedDipole.z - di3*atom2.inducedDipole.y; - real dixukp1 = di2*atom2.inducedDipolePolar.z - di3*atom2.inducedDipolePolar.y; - -#ifdef APPLY_SCALE - real ttm2i1 = prefactor1*dixuk1 + prefactor2*dixukp1; -#else - real ttm2i1 = prefactor1*(dixuk1 + dixukp1); -#endif - - real dixuk2 = di3*atom2.inducedDipole.x - di1*atom2.inducedDipole.z; - real dixukp2 = di3*atom2.inducedDipolePolar.x - di1*atom2.inducedDipolePolar.z; - -#ifdef APPLY_SCALE - real ttm2i2 = prefactor1*dixuk2 + prefactor2*dixukp2; -#else - real ttm2i2 = prefactor1*(dixuk2 + dixukp2); -#endif - - real dixuk3 = di1*atom2.inducedDipole.y - di2*atom2.inducedDipole.x; - real dixukp3 = di1*atom2.inducedDipolePolar.y - di2*atom2.inducedDipolePolar.x; -#ifdef APPLY_SCALE - real ttm2i3 = prefactor1*dixuk3 + prefactor2*dixukp3; -#else - real ttm2i3 = prefactor1*(dixuk3 + dixukp3); -#endif - - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - real scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; - real gti2 = bn2*(sci4+scip4); -#ifdef APPLY_SCALE - real gtri2 = (sci4*psc5+scip4*dsc5); -#else - real gtri2 = psc5*(sci4+scip4); -#endif - prefactor1 = 0.5f*(gti2 - gtri2); - - ttm2i1 += prefactor1*(di2*zr - di3*yr); - ttm2i2 += prefactor1*(di3*xr - di1*zr); - ttm2i3 += prefactor1*(di1*yr - di2*xr); - - real qir1 = qi1*xr + qi2*yr + qi3*zr; - real qir2 = qi2*xr + qi5*yr + qi6*zr; - real qir3 = qi3*xr + qi6*yr + qi9*zr; - -#ifdef APPLY_SCALE - prefactor1 = sci4*psc7 + scip4*dsc7 - bn3*(sci4+scip4); -#else - prefactor1 = psc7*(sci4+scip4) - bn3*(sci4+scip4); -#endif - ttm2i1 += prefactor1*(yr*qir3 - zr*qir2); - ttm2i2 += prefactor1*(zr*qir1 - xr*qir3); - ttm2i3 += prefactor1*(xr*qir2 - yr*qir1); - - real qiuk1 = qi1*atom2.inducedDipole.x + qi2*atom2.inducedDipole.y + qi3*atom2.inducedDipole.z; - real qiuk2 = qi2*atom2.inducedDipole.x + qi5*atom2.inducedDipole.y + qi6*atom2.inducedDipole.z; - real qiuk3 = qi3*atom2.inducedDipole.x + qi6*atom2.inducedDipole.y + qi9*atom2.inducedDipole.z; - - real qiukp1 = qi1*atom2.inducedDipolePolar.x + qi2*atom2.inducedDipolePolar.y + qi3*atom2.inducedDipolePolar.z; - real qiukp2 = qi2*atom2.inducedDipolePolar.x + qi5*atom2.inducedDipolePolar.y + qi6*atom2.inducedDipolePolar.z; - real qiukp3 = qi3*atom2.inducedDipolePolar.x + qi6*atom2.inducedDipolePolar.y + qi9*atom2.inducedDipolePolar.z; - - prefactor1 = (bn2 - psc5); -#ifdef APPLY_SCALE - prefactor2 = (bn2 - dsc5); -#endif - real ukxqir1 = atom2.inducedDipole.y*qir3 - atom2.inducedDipole.z*qir2; - real ukxqirp1 = atom2.inducedDipolePolar.y*qir3 - atom2.inducedDipolePolar.z*qir2; - real rxqiuk1 = yr*qiuk3 - zr*qiuk2; - real rxqiukp1 = yr*qiukp3 - zr*qiukp2; - -#ifdef APPLY_SCALE - ttm2i1 += prefactor1*(ukxqir1 + rxqiuk1) + prefactor2*(ukxqirp1 + rxqiukp1); -#else - ttm2i1 += prefactor1*(ukxqir1 + rxqiuk1 + ukxqirp1 + rxqiukp1); -#endif - - real ukxqir2 = atom2.inducedDipole.z*qir1 - atom2.inducedDipole.x*qir3; - real ukxqirp2 = atom2.inducedDipolePolar.z*qir1 - atom2.inducedDipolePolar.x*qir3; - real rxqiuk2 = zr*qiuk1 - xr*qiuk3; - real rxqiukp2 = zr*qiukp1 - xr*qiukp3; -#ifdef APPLY_SCALE - ttm2i2 += prefactor1*(ukxqir2 + rxqiuk2) + prefactor2*(ukxqirp2 + rxqiukp2); -#else - ttm2i2 += prefactor1*(ukxqir2 + rxqiuk2 + ukxqirp2 + rxqiukp2); -#endif - - real ukxqir3 = atom2.inducedDipole.x*qir2 - atom2.inducedDipole.y*qir1; - real ukxqirp3 = atom2.inducedDipolePolar.x*qir2 - atom2.inducedDipolePolar.y*qir1; - real rxqiuk3 = xr*qiuk2 - yr*qiuk1; - real rxqiukp3 = xr*qiukp2 - yr*qiukp1; -#ifdef APPLY_SCALE - ttm2i3 += prefactor1*(ukxqir3 + rxqiuk3) + prefactor2*(ukxqirp3 + rxqiukp3); -#else - ttm2i3 += prefactor1*(ukxqir3 + rxqiuk3 + ukxqirp3 + rxqiukp3); -#endif - - atom1.torque.x += ttm2i1; - atom1.torque.y += ttm2i2; - atom1.torque.z += ttm2i3; -} diff --git a/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForceNoQuadrupoles.cu b/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForceNoQuadrupoles.cu deleted file mode 100644 index 380f63a6d726410140e1e083b829c03e11ac1878..0000000000000000000000000000000000000000 --- a/plugins/amoeba/platforms/cuda/src/kernels/pmeElectrostaticPairForceNoQuadrupoles.cu +++ /dev/null @@ -1,615 +0,0 @@ -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionF1( -#else -computeOneInteractionF1NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, real bn5, float forceFactor, -#ifdef APPLY_SCALE - float dScale, float pScale, float mScale, -#endif - real3& force, real& energy) { - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; -#ifdef APPLY_SCALE - real rr1 = delta.w; -#endif - - // set the permanent multipole and induced dipole values; - - real ci = atom1.q; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real ck = atom2.q; - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - -#ifdef APPLY_SCALE - real offset = 1-mScale; - real rr3 = rr1*rr1*rr1; - real gf4 = 2*(bn2 - 3*offset*rr3*rr1*rr1); -#else - real gf4 = 2*bn2; -#endif - real ftm21 = 0; - real ftm22 = 0; - real ftm23 = 0; - - // calculate the scalar products for permanent components - - real gl6 = di1*dk1 + di2*dk2 + di3*dk3; - real sc3 = di1*xr + di2*yr + di3*zr; - real sc4 = dk1*xr + dk2*yr + dk3*zr; - - real gl0 = ci*ck; - real gl1 = ck*sc3 - ci*sc4; - real gl2 = -sc3*sc4; - -#ifdef APPLY_SCALE - energy += forceFactor*(-offset*rr1*gl0 + (bn1-offset*rr3)*(gl1+gl6) + (bn2-offset*(3*rr3*rr1*rr1))*gl2); -#else - energy += forceFactor*(bn1*(gl1+gl6) + bn2*gl2); - -#endif - - real gf1 = bn1*gl0 + bn2*(gl1+gl6) + bn3*gl2; -#ifdef APPLY_SCALE - gf1 -= offset*(rr3*gl0 + (3*rr3*rr1*rr1)*(gl1+gl6) + (15*rr3*rr3*rr1)*gl2); -#endif - ftm21 += gf1*xr; - ftm22 += gf1*yr; - ftm23 += gf1*zr; - -#ifdef APPLY_SCALE - real gf2 = -ck*bn1 + sc4*bn2 - offset*(-ck*rr3 + sc4*(3*rr3*rr1*rr1)); -#else - real gf2 = -ck*bn1 + sc4*bn2; -#endif - ftm21 += gf2*di1; - ftm22 += gf2*di2; - ftm23 += gf2*di3; - -#ifdef APPLY_SCALE - real gf3 = ci*bn1 + sc3*bn2 - offset*(ci*rr3 + sc3*(3*rr3*rr1*rr1)); -#else - real gf3 = ci*bn1 + sc3*bn2; -#endif - ftm21 += gf3*dk1; - ftm22 += gf3*dk2; - ftm23 += gf3*dk3; - - force.x = ftm21; - force.y = ftm22; - force.z = ftm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionF2( -#else -computeOneInteractionF2NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, float forceFactor, -#ifdef APPLY_SCALE - float dScale, float pScale, float mScale, -#endif - real3& force, real& energy) { - const float uScale = 1; - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; - real rr1 = delta.w; - - // set the permanent multipole and induced dipole values; - - real ci = atom1.q; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - - real damp = atom1.damp*atom2.damp; - if (damp != 0) { - real pgamma = atom1.thole < atom2.thole ? atom1.thole : atom2.thole; - real ratio = RECIP(rr1*damp); - damp = -pgamma*ratio*ratio*ratio; - } - - real scale5 = (damp == 0) ? 1 : (1 - (1-damp)*EXP(damp)); - real rr5 = rr1*rr1; - rr5 = 3*rr1*rr5*rr5; -#ifdef APPLY_SCALE - real psc5 = rr5*(1 - scale5*pScale); - real dsc5 = rr5*(1 - scale5*dScale); - real usc5 = rr5*(1 - scale5*uScale); -#else - real psc5 = rr5*(1 - scale5); -#endif - - real ftm21 = 0; - real ftm22 = 0; - real ftm23 = 0; - - real expdamp = EXP(damp); - real scale3 = (damp == 0) ? 1 : (1 - expdamp); - real rr3 = rr1*rr1*rr1; - -#ifdef APPLY_SCALE - real psc3 = rr3*(1 - scale3*pScale); - real dsc3 = rr3*(1 - scale3*dScale); - real usc3 = rr3*(1 - scale3*uScale); -#else - real psc3 = rr3*(1 - scale3); -#endif - - real scale7 = (damp == 0) ? 1 : (1 - (1-damp+0.6f*damp*damp)*expdamp); - -#ifdef APPLY_SCALE - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7*pScale); - real dsc7 = (15*rr3*rr3*rr1)*(1 - scale7*dScale); -#else - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7); -#endif - - real sc3 = di1*xr + di2*yr + di3*zr; - real gfi3 = ci*bn1 + sc3*bn2; - - real prefactor1; - prefactor1 = 0.5f*(ci*psc3 + sc3*psc5 - gfi3); - ftm21 -= prefactor1*atom2.inducedDipole.x; - ftm22 -= prefactor1*atom2.inducedDipole.y; - ftm23 -= prefactor1*atom2.inducedDipole.z; - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(ci*dsc3 + sc3*dsc5 - gfi3); -#endif - ftm21 -= prefactor1*atom2.inducedDipolePolar.x; - ftm22 -= prefactor1*atom2.inducedDipolePolar.y; - ftm23 -= prefactor1*atom2.inducedDipolePolar.z; - - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - energy += forceFactor*0.5f*sci4*((psc3-bn1)*ci + (psc5-bn2)*sc3); - - real scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2 - usc5); -#else - prefactor1 = 0.5f*(bn2 - psc5); -#endif - ftm21 += prefactor1*((sci4*atom1.inducedDipolePolar.x + scip4*atom1.inducedDipole.x)); - ftm22 += prefactor1*((sci4*atom1.inducedDipolePolar.y + scip4*atom1.inducedDipole.y)); - ftm23 += prefactor1*((sci4*atom1.inducedDipolePolar.z + scip4*atom1.inducedDipole.z)); -#endif - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2*(sci4+scip4) - (sci4*psc5+scip4*dsc5)); -#else - sci4 += scip4; - prefactor1 = 0.5f*sci4*(bn2 - psc5); -#endif - - ftm21 += prefactor1*di1; - ftm22 += prefactor1*di2; - ftm23 += prefactor1*di3; - -#ifdef APPLY_SCALE - real gli1 = -ci*sci4; - real gli2 = -sc3*sci4; - real glip1 = -ci*scip4; - real glip2 = -sc3*scip4; -#else - real gli1 = -ci*sci4; - real gli2 = -sc3*sci4; -#endif - -#ifdef APPLY_SCALE - real gfi1 = (bn2*(gli1+glip1) + bn3*(gli2+glip2)); - gfi1 -= (rr1*rr1)*(3*(gli1*psc3 + glip1*dsc3) + 5*(gli2*psc5 + glip2*dsc5)); -#else - real gfi1 = bn2*gli1 + bn3*gli2; - gfi1 -= (rr1*rr1)*(3*gli1*psc3 + 5*gli2*psc5); -#endif - gfi1 *= 0.5f; - ftm21 += gfi1*xr; - ftm22 += gfi1*yr; - ftm23 += gfi1*zr; - - { - real expdamp = EXP(damp); - real temp3 = -1.5f*damp*expdamp*rr1*rr1; - real temp5 = -damp; - real temp7 = -0.2f - 0.6f*damp; - - real ddsc31 = temp3*xr; - real ddsc32 = temp3*yr; - real ddsc33 = temp3*zr; - - real ddsc51 = temp5*ddsc31; - real ddsc52 = temp5*ddsc32; - real ddsc53 = temp5*ddsc33; - - real ddsc71 = temp7*ddsc51; - real ddsc72 = temp7*ddsc52; - real ddsc73 = temp7*ddsc53; - - real rr3 = rr1*rr1*rr1; -#ifdef APPLY_SCALE - temp3 = (gli1*pScale + glip1*dScale); - temp5 = (3*rr1*rr1)*(gli2*pScale + glip2*dScale); -#else - temp3 = gli1; - temp5 = (3*rr1*rr1)*gli2; -#endif - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53); - } - -//K - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real sc4 = dk1*xr + dk2*yr + dk3*zr; - - real ck = atom2.q; - real gfi2 = (-ck*bn1 + sc4*bn2); - - prefactor1 = 0.5f*(ck*psc3 - sc4*psc5 + gfi2); - ftm21 += prefactor1*atom1.inducedDipole.x; - ftm22 += prefactor1*atom1.inducedDipole.y; - ftm23 += prefactor1*atom1.inducedDipole.z; - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(ck*dsc3 - sc4*dsc5 + gfi2); -#endif - ftm21 += prefactor1*atom1.inducedDipolePolar.x; - ftm22 += prefactor1*atom1.inducedDipolePolar.y; - ftm23 += prefactor1*atom1.inducedDipolePolar.z; - - real sci3 = atom1.inducedDipole.x*xr + atom1.inducedDipole.y*yr + atom1.inducedDipole.z*zr; - energy += forceFactor*0.5f*sci3*(ck*(bn1-psc3) - sc4*(bn2-psc5)); - real scip3 = atom1.inducedDipolePolar.x*xr + atom1.inducedDipolePolar.y*yr + atom1.inducedDipolePolar.z*zr; - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2 - usc5); -#else - prefactor1 = 0.5f*(bn2 - psc5); -#endif - - ftm21 += prefactor1*(sci3*atom2.inducedDipolePolar.x + scip3*atom2.inducedDipole.x); - ftm22 += prefactor1*(sci3*atom2.inducedDipolePolar.y + scip3*atom2.inducedDipole.y); - ftm23 += prefactor1*(sci3*atom2.inducedDipolePolar.z + scip3*atom2.inducedDipole.z); - - real sci34; - sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; - sci34 = (sci3*scip4+scip3*sci4); - -#ifdef APPLY_SCALE - gfi1 = sci34*(usc5*(5*rr1*rr1) -bn3); -#else - gfi1 = sci34*(psc5*(5*rr1*rr1) -bn3); -#endif -#else - gfi1 = 0; -#endif - -#ifdef APPLY_SCALE - prefactor1 = 0.5f*(bn2*(sci3+scip3) - (sci3*psc5+scip3*dsc5)); -#else - sci3 += scip3; - prefactor1 = 0.5f*sci3*(bn2 - psc5); -#endif - ftm21 += prefactor1*dk1; - ftm22 += prefactor1*dk2; - ftm23 += prefactor1*dk3; - -#ifdef APPLY_SCALE - real gfi6 = -bn3*(sci3+scip3) + (sci3*psc7+scip3*dsc7); -#else - real gfi6 = sci3*(psc7 - bn3); -#endif - - real sci1 = atom1.inducedDipole.x*dk1 + atom1.inducedDipole.y*dk2 + atom1.inducedDipole.z*dk3 + di1*atom2.inducedDipole.x + di2*atom2.inducedDipole.y + di3*atom2.inducedDipole.z; - energy += forceFactor*0.5f*(sci1*(bn1-psc3)); - - real scip1 = atom1.inducedDipolePolar.x*dk1 + atom1.inducedDipolePolar.y*dk2 + atom1.inducedDipolePolar.z*dk3 + di1*atom2.inducedDipolePolar.x + di2*atom2.inducedDipolePolar.y + di3*atom2.inducedDipolePolar.z; -#ifndef APPLY_SCALE - sci1 += scip1; -#endif - - real scip2 = atom1.inducedDipole.x*atom2.inducedDipolePolar.x + - atom1.inducedDipole.y*atom2.inducedDipolePolar.y + - atom1.inducedDipole.z*atom2.inducedDipolePolar.z + - atom2.inducedDipole.x*atom1.inducedDipolePolar.x + - atom2.inducedDipole.y*atom1.inducedDipolePolar.y + - atom2.inducedDipole.z*atom1.inducedDipolePolar.z; - - gli1 = ck*sci3 + sci1; - gli2 = -sci3*sc4; -#ifdef APPLY_SCALE - glip1 = ck*scip3 + scip1; - glip2 = -scip3*sc4; -#endif - - -#ifdef APPLY_SCALE - gfi1 += (bn2*(gli1+glip1) + bn3*(gli2+glip2)); - gfi1 -= (rr1*rr1)*(3*(gli1*psc3 + glip1*dsc3) + 5*(gli2*psc5 + glip2*dsc5)); -#else - gfi1 += (bn2*gli1 + bn3*gli2); - gfi1 -= (rr1*rr1)*(3*gli1*psc3 + 5*gli2*psc5); -#endif - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - gfi1 += scip2*(bn2 - (3*rr1*rr1)*usc3); -#else - gfi1 += scip2*(bn2 - (3*rr1*rr1)*psc3); -#endif -#endif - - gfi1 *= 0.5f; - - ftm21 += gfi1*xr; - ftm22 += gfi1*yr; - ftm23 += gfi1*zr; - - { - real expdamp = EXP(damp); - real temp3 = -1.5f*damp*expdamp*rr1*rr1; - real temp5 = -damp; - real temp7 = -0.2f - 0.6f*damp; - - real ddsc31 = temp3*xr; - real ddsc32 = temp3*yr; - real ddsc33 = temp3*zr; - - real ddsc51 = temp5*ddsc31; - real ddsc52 = temp5*ddsc32; - real ddsc53 = temp5*ddsc33; - - real ddsc71 = temp7*ddsc51; - real ddsc72 = temp7*ddsc52; - real ddsc73 = temp7*ddsc53; - - real rr3 = rr1*rr1*rr1; - -#ifdef APPLY_SCALE - temp3 = gli1*pScale + glip1*dScale; - temp5 = (3*rr1*rr1)*(gli2*pScale + glip2*dScale); -#else - temp3 = gli1; - temp5 = (3*rr1*rr1)*gli2; -#endif - - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53); - -#ifndef DIRECT_POLARIZATION -#ifdef APPLY_SCALE - temp3 = uScale*scip2; - temp5 = -(3*rr1*rr1)*uScale*sci34; -#else - temp3 = scip2; - temp5 = -(3*rr1*rr1)*sci34; -#endif - ftm21 -= rr3*(temp3*ddsc31 + temp5*ddsc51); - ftm22 -= rr3*(temp3*ddsc32 + temp5*ddsc52); - ftm23 -= rr3*(temp3*ddsc33 + temp5*ddsc53); -#endif - } - - force.x += ftm21; - force.y += ftm22; - force.z += ftm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionT1( -#else -computeOneInteractionT1NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn -#ifdef APPLY_SCALE - , float dScale, float pScale, float mScale -#endif - ) { - - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; -#ifdef APPLY_SCALE - real rr1 = delta.w; -#endif - - // set the permanent multipole and induced dipole values; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real ck = atom2.q; - - real dk1 = atom2.dipole.x; - real dk2 = atom2.dipole.y; - real dk3 = atom2.dipole.z; - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - real bn4 = bn.w; - - // apply Thole polarization damping to scale factors - -#ifdef APPLY_SCALE - real rr2 = rr1*rr1; - real rr3 = rr1*rr2; - real rr5 = 3*rr3*rr2; - real rr7 = 5*rr5*rr2; - real rr9 = 7*rr7*rr2; - - real scale = 1-mScale; - real prefactor = scale*rr3 - bn1; -#else - real prefactor = -bn1; -#endif - real dixdk1 = di2*dk3 - di3*dk2; - real ttm21 = prefactor*dixdk1; - - real dixdk2 = di3*dk1 - di1*dk3; - real ttm22 = prefactor*dixdk2; - - real dixdk3 = di1*dk2 - di2*dk1; - real ttm23 = prefactor*dixdk3; - - real sc4 = dk1*xr + dk2*yr + dk3*zr; - real sc6 = 0; - - real gf2 = -ck*bn1 + sc4*bn2; -#ifdef APPLY_SCALE - real gfr2 = -ck*rr3 + sc4*rr5; - prefactor = (gf2 - scale*gfr2); -#else - prefactor = gf2; -#endif - ttm21 += prefactor*(di2*zr - di3*yr); - ttm22 += prefactor*(di3*xr - di1*zr); - ttm23 += prefactor*(di1*yr - di2*xr); - - atom1.torque.x += ttm21; - atom1.torque.y += ttm22; - atom1.torque.z += ttm23; -} - - -__device__ void -#ifdef APPLY_SCALE -computeOneInteractionT2( -#else -computeOneInteractionT2NoScale( -#endif - AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn -#ifdef APPLY_SCALE - , float dScale, float pScale, float mScale -#endif - ) { - - real xr = delta.x; - real yr = delta.y; - real zr = delta.z; - real rr1 = delta.w; - - // set the permanent multipole and induced dipole values; - - real di1 = atom1.dipole.x; - real di2 = atom1.dipole.y; - real di3 = atom1.dipole.z; - - real bn1 = bn.x; - real bn2 = bn.y; - real bn3 = bn.z; - - // apply Thole polarization damping to scale factors - - real scale3 = 1; - real scale5 = 1; - real scale7 = 1; - - real damp = atom1.damp*atom2.damp; - if (damp != 0) { - real pgamma = atom1.thole < atom2.thole ? atom1.thole : atom2.thole; - real ratio = RECIP(rr1*damp); - damp = -pgamma*ratio*ratio*ratio; - real expdamp = EXP(damp); - scale3 = 1 - expdamp; - scale5 = 1 - (1-damp)*expdamp; - scale7 = 1 - (1-damp+0.6f*damp*damp)*expdamp; - } - - real rr3 = rr1*rr1*rr1; -#ifdef APPLY_SCALE - real dsc3 = rr3*(1 - scale3*dScale); - real dsc5 = (3*rr3*rr1*rr1)* (1 - scale5*dScale); - real dsc7 = (15*rr3*rr3*rr1)*(1 - scale7*dScale); - - real psc3 = rr3*(1 - scale3*pScale); - real psc5 = (3*rr3*rr1*rr1)*(1 - scale5*pScale); - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7*pScale); -#else - real psc3 = rr3*(1 - scale3); - real psc5 = (3*rr3*rr1*rr1)*(1 - scale5); - real psc7 = (15*rr3*rr3*rr1)*(1 - scale7); -#endif - - real prefactor1 = 0.5f*(psc3 - bn1); -#ifdef APPLY_SCALE - real prefactor2 = 0.5f*(dsc3 - bn1); -#endif - - real dixuk1 = di2*atom2.inducedDipole.z - di3*atom2.inducedDipole.y; - real dixukp1 = di2*atom2.inducedDipolePolar.z - di3*atom2.inducedDipolePolar.y; - -#ifdef APPLY_SCALE - real ttm2i1 = prefactor1*dixuk1 + prefactor2*dixukp1; -#else - real ttm2i1 = prefactor1*(dixuk1 + dixukp1); -#endif - - real dixuk2 = di3*atom2.inducedDipole.x - di1*atom2.inducedDipole.z; - real dixukp2 = di3*atom2.inducedDipolePolar.x - di1*atom2.inducedDipolePolar.z; - -#ifdef APPLY_SCALE - real ttm2i2 = prefactor1*dixuk2 + prefactor2*dixukp2; -#else - real ttm2i2 = prefactor1*(dixuk2 + dixukp2); -#endif - - real dixuk3 = di1*atom2.inducedDipole.y - di2*atom2.inducedDipole.x; - real dixukp3 = di1*atom2.inducedDipolePolar.y - di2*atom2.inducedDipolePolar.x; -#ifdef APPLY_SCALE - real ttm2i3 = prefactor1*dixuk3 + prefactor2*dixukp3; -#else - real ttm2i3 = prefactor1*(dixuk3 + dixukp3); -#endif - - real sci4 = atom2.inducedDipole.x*xr + atom2.inducedDipole.y*yr + atom2.inducedDipole.z*zr; - real scip4 = atom2.inducedDipolePolar.x*xr + atom2.inducedDipolePolar.y*yr + atom2.inducedDipolePolar.z*zr; - real gti2 = bn2*(sci4+scip4); -#ifdef APPLY_SCALE - real gtri2 = (sci4*psc5+scip4*dsc5); -#else - real gtri2 = psc5*(sci4+scip4); -#endif - prefactor1 = 0.5f*(gti2 - gtri2); - - ttm2i1 += prefactor1*(di2*zr - di3*yr); - ttm2i2 += prefactor1*(di3*xr - di1*zr); - ttm2i3 += prefactor1*(di1*yr - di2*xr); - - atom1.torque.x += ttm2i1; - atom1.torque.y += ttm2i2; - atom1.torque.z += ttm2i3; -} diff --git a/plugins/amoeba/platforms/cuda/src/kernels/pmeMultipoleElectrostatics.cu b/plugins/amoeba/platforms/cuda/src/kernels/pmeMultipoleElectrostatics.cu index 96da990f3b0a7f595af71d16167af552f473e593..1be27f7bd7b2a04b970dc61bbeab05c88bf63d96 100644 --- a/plugins/amoeba/platforms/cuda/src/kernels/pmeMultipoleElectrostatics.cu +++ b/plugins/amoeba/platforms/cuda/src/kernels/pmeMultipoleElectrostatics.cu @@ -1,38 +1,29 @@ #define WARPS_PER_GROUP (THREAD_BLOCK_SIZE/TILE_SIZE) typedef struct { - real3 pos, force, torque, dipole, inducedDipole, inducedDipolePolar; + real3 pos, force, torque, inducedDipole, inducedDipolePolar, sphericalDipole; real q; float thole, damp; #ifdef INCLUDE_QUADRUPOLES - real quadrupoleXX, quadrupoleXY, quadrupoleXZ, quadrupoleYY, quadrupoleYZ; - float padding; + real sphericalQuadrupole[5]; #endif } AtomData; -__device__ void computeOneInteractionF1(AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, real bn5, float forceFactor, float dScale, float pScale, float mScale, real3& force, real& energy); -__device__ void computeOneInteractionF2(AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, float forceFactor, float dScale, float pScale, float mScale, real3& force, real& energy); -__device__ void computeOneInteractionT1(AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn, float dScale, float pScale, float mScale); -__device__ void computeOneInteractionT2(AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn, float dScale, float pScale, float mScale); -__device__ void computeOneInteractionF1NoScale(AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, real bn5, float forceFactor, real3& force, real& energy); -__device__ void computeOneInteractionF2NoScale(AtomData& atom1, volatile AtomData& atom2, real4 delta, real4 bn, float forceFactor, real3& force, real& energy); -__device__ void computeOneInteractionT1NoScale(AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn); -__device__ void computeOneInteractionT2NoScale(AtomData& atom1, volatile AtomData& atom2, const real4 delta, const real4 bn); - -inline __device__ void loadAtomData(AtomData& data, int atom, const real4* __restrict__ posq, const real* __restrict__ labFrameDipole, - const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const float2* __restrict__ dampingAndThole) { +inline __device__ void loadAtomData(AtomData& data, int atom, const real4* __restrict__ posq, const real* __restrict__ sphericalDipole, + const real* __restrict__ sphericalQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, + const float2* __restrict__ dampingAndThole) { real4 atomPosq = posq[atom]; data.pos = make_real3(atomPosq.x, atomPosq.y, atomPosq.z); data.q = atomPosq.w; - data.dipole.x = labFrameDipole[atom*3]; - data.dipole.y = labFrameDipole[atom*3+1]; - data.dipole.z = labFrameDipole[atom*3+2]; + data.sphericalDipole.x = sphericalDipole[atom*3]; + data.sphericalDipole.y = sphericalDipole[atom*3+1]; + data.sphericalDipole.z = sphericalDipole[atom*3+2]; #ifdef INCLUDE_QUADRUPOLES - data.quadrupoleXX = labFrameQuadrupole[atom*5]; - data.quadrupoleXY = labFrameQuadrupole[atom*5+1]; - data.quadrupoleXZ = labFrameQuadrupole[atom*5+2]; - data.quadrupoleYY = labFrameQuadrupole[atom*5+3]; - data.quadrupoleYZ = labFrameQuadrupole[atom*5+4]; + data.sphericalQuadrupole[0] = sphericalQuadrupole[atom*5]; + data.sphericalQuadrupole[1] = sphericalQuadrupole[atom*5+1]; + data.sphericalQuadrupole[2] = sphericalQuadrupole[atom*5+2]; + data.sphericalQuadrupole[3] = sphericalQuadrupole[atom*5+3]; + data.sphericalQuadrupole[4] = sphericalQuadrupole[atom*5+4]; #endif data.inducedDipole.x = inducedDipole[atom*3]; data.inducedDipole.y = inducedDipole[atom*3+1]; @@ -65,138 +56,390 @@ __device__ float computePScaleFactor(uint2 covalent, unsigned int polarizationGr } __device__ void computeOneInteraction(AtomData& atom1, AtomData& atom2, bool hasExclusions, float dScale, float pScale, float mScale, float forceFactor, - real& energy, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ) { - real4 delta; + mixed& energy, real4 periodicBoxSize, real4 invPeriodicBoxSize, real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ) { + // Compute the displacement. + + real3 delta; delta.x = atom2.pos.x - atom1.pos.x; delta.y = atom2.pos.y - atom1.pos.y; delta.z = atom2.pos.z - atom1.pos.z; - - // periodic box - APPLY_PERIODIC_TO_DELTA(delta) - delta.w = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; - if (delta.w > CUTOFF_SQUARED) + real r2 = delta.x*delta.x + delta.y*delta.y + delta.z*delta.z; + if (r2 > CUTOFF_SQUARED) return; - real r = SQRT(delta.w); - real ralpha = EWALD_ALPHA*r; + real rInv = RSQRT(r2); + real r = r2*rInv; - real alsq2 = 2*EWALD_ALPHA*EWALD_ALPHA; - real alsq2n = 0; - if (EWALD_ALPHA > 0) - alsq2n = RECIP(SQRT_PI*EWALD_ALPHA); - real exp2a = EXP(-(ralpha*ralpha)); + // Rotate the various dipoles and quadrupoles. + + real qiRotationMatrix[3][3]; + buildQIRotationMatrix(delta, rInv, qiRotationMatrix); - real rr1 = RECIP(r); - delta.w = rr1; + + real3 qiUindI = 0.5f*make_real3(qiRotationMatrix[0][1]*atom1.inducedDipole.x + qiRotationMatrix[0][2]*atom1.inducedDipole.y + qiRotationMatrix[0][0]*atom1.inducedDipole.z, + qiRotationMatrix[1][1]*atom1.inducedDipole.x + qiRotationMatrix[1][2]*atom1.inducedDipole.y + qiRotationMatrix[1][0]*atom1.inducedDipole.z, + qiRotationMatrix[2][1]*atom1.inducedDipole.x + qiRotationMatrix[2][2]*atom1.inducedDipole.y + qiRotationMatrix[2][0]*atom1.inducedDipole.z); + real3 qiUindJ = 0.5f*make_real3(qiRotationMatrix[0][1]*atom2.inducedDipole.x + qiRotationMatrix[0][2]*atom2.inducedDipole.y + qiRotationMatrix[0][0]*atom2.inducedDipole.z, + qiRotationMatrix[1][1]*atom2.inducedDipole.x + qiRotationMatrix[1][2]*atom2.inducedDipole.y + qiRotationMatrix[1][0]*atom2.inducedDipole.z, + qiRotationMatrix[2][1]*atom2.inducedDipole.x + qiRotationMatrix[2][2]*atom2.inducedDipole.y + qiRotationMatrix[2][0]*atom2.inducedDipole.z); + real3 qiUinpI = 0.5f*make_real3(qiRotationMatrix[0][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[0][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[0][0]*atom1.inducedDipolePolar.z, + qiRotationMatrix[1][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[1][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[1][0]*atom1.inducedDipolePolar.z, + qiRotationMatrix[2][1]*atom1.inducedDipolePolar.x + qiRotationMatrix[2][2]*atom1.inducedDipolePolar.y + qiRotationMatrix[2][0]*atom1.inducedDipolePolar.z); + real3 qiUinpJ = 0.5f*make_real3(qiRotationMatrix[0][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[0][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[0][0]*atom2.inducedDipolePolar.z, + qiRotationMatrix[1][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[1][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[1][0]*atom2.inducedDipolePolar.z, + qiRotationMatrix[2][1]*atom2.inducedDipolePolar.x + qiRotationMatrix[2][2]*atom2.inducedDipolePolar.y + qiRotationMatrix[2][0]*atom2.inducedDipolePolar.z); + + real3 rotatedDipole1 = rotateDipole(atom1.sphericalDipole, qiRotationMatrix); + real3 rotatedDipole2 = rotateDipole(atom2.sphericalDipole, qiRotationMatrix); + real rotatedQuadrupole1[] = {0, 0, 0, 0, 0}; + real rotatedQuadrupole2[] = {0, 0, 0, 0, 0}; +#ifdef INCLUDE_QUADRUPOLES + rotateQuadupoles(qiRotationMatrix, atom1.sphericalQuadrupole, atom2.sphericalQuadrupole, rotatedQuadrupole1, rotatedQuadrupole2); +#endif + + // The field derivatives at I due to permanent and induced moments on J, and vice-versa. + // Also, their derivatives w.r.t. R, which are needed for force calculations + real Vij[9], Vji[9], VjiR[9], VijR[9]; + // The field derivatives at I due to only permanent moments on J, and vice-versa. + real Vijp[3], Vijd[3], Vjip[3], Vjid[3]; + real rInvVec[7], alphaRVec[8], bVec[5]; + + // The rInvVec array is defined such that the ith element is R^-i, with the + // dieleectric constant folded in, to avoid conversions later. + rInvVec[1] = rInv; + for (int i = 2; i < 7; ++i) + rInvVec[i] = rInvVec[i-1] * rInv; + + // The alpharVec array is defined such that the ith element is (alpha R)^i, + // where kappa (alpha in OpenMM parlance) is the Ewald attenuation parameter. + real ralpha = EWALD_ALPHA*r; + real exp2a = EXP(-(ralpha*ralpha)); #ifdef USE_DOUBLE_PRECISION - const real erfcAlphaR = erfc(ralpha); + const real erfAlphaR = erf(ralpha); #else // This approximation for erfc is from Abramowitz and Stegun (1964) p. 299. They cite the following as // the original source: C. Hastings, Jr., Approximations for Digital Computers (1955). It has a maximum // error of 1.5e-7. const real t = RECIP(1.0f+0.3275911f*ralpha); - const real erfcAlphaR = (0.254829592f+(-0.284496736f+(1.421413741f+(-1.453152027f+1.061405429f*t)*t)*t)*t)*t*exp2a; + const real erfAlphaR = 1-(0.254829592f+(-0.284496736f+(1.421413741f+(-1.453152027f+1.061405429f*t)*t)*t)*t)*t*exp2a; #endif - real bn0 = erfcAlphaR*rr1; - energy += forceFactor*atom1.q*atom2.q*bn0; - real rr2 = rr1*rr1; - alsq2n *= alsq2; - - real4 bn; - bn.x = (bn0+alsq2n*exp2a)*rr2; - - alsq2n *= alsq2; - bn.y = (3*bn.x+alsq2n*exp2a)*rr2; - - alsq2n *= alsq2; - bn.z = (5*bn.y+alsq2n*exp2a)*rr2; - - alsq2n *= alsq2; - bn.w = (7*bn.z+alsq2n*exp2a)*rr2; + alphaRVec[1] = ralpha; + for (int i = 2; i < 8; ++i) + alphaRVec[i] = alphaRVec[i-1]*ralpha; + real X = 2*exp2a/SQRT_PI; + int doubleFactorial = 1, facCount = 1; + real tmp = alphaRVec[1]; + bVec[1] = -erfAlphaR; + for (int i = 2; i < 5; ++i) { + bVec[i] = bVec[i-1] + tmp * X / (real)(doubleFactorial); + facCount = facCount + 2; + doubleFactorial = doubleFactorial * facCount; + tmp *= 2*alphaRVec[2]; + } - alsq2n *= alsq2; - real bn5 = (9*bn.w+alsq2n*exp2a)*rr2; + real dmp = atom1.damp*atom2.damp; + real a = min(atom1.thole, atom2.thole); + real u = fabs(dmp) > 1.0e-5f ? r/dmp : 1e10f; + real au3 = a*u*u*u; + real expau3 = au3 < 50 ? EXP(-au3) : 0; + real a2u6 = au3*au3; + real a3u9 = a2u6*au3; + // Thole damping factors for energies + real thole_c = 1 - expau3; + real thole_d0 = 1 - expau3*(1 + 1.5f*au3); + real thole_d1 = 1 - expau3; + real thole_q0 = 1 - expau3*(1 + au3 + a2u6); + real thole_q1 = 1 - expau3*(1 + au3); + // Thole damping factors for derivatives + real dthole_c = 1 - expau3*(1 + 1.5f*au3); + real dthole_d0 = 1 - expau3*(1 + au3 + 1.5f*a2u6); + real dthole_d1 = 1 - expau3*(1 + au3); + real dthole_q0 = 1 - expau3*(1 + au3 + 0.25f*a2u6 + 0.75f*a3u9); + real dthole_q1 = 1 - expau3*(1 + au3 + 0.75f*a2u6); + + // Now we compute the (attenuated) Coulomb operator and its derivatives, contracted with + // permanent moments and induced dipoles. Note that the coefficient of the permanent force + // terms is half of the expected value; this is because we compute the interaction of I with + // the sum of induced and permanent moments on J, as well as the interaction of J with I's + // permanent and induced moments; doing so double counts the permanent-permanent interaction. + real ePermCoef, dPermCoef, eUIndCoef, dUIndCoef, eUInpCoef, dUInpCoef; + + // C-C terms (m=0) + ePermCoef = rInvVec[1]*(mScale + bVec[2] - alphaRVec[1]*X); + dPermCoef = -0.5f*(mScale + bVec[2])*rInvVec[2]; + Vij[0] = ePermCoef*atom2.q; + Vji[0] = ePermCoef*atom1.q; + VijR[0] = dPermCoef*atom2.q; + VjiR[0] = dPermCoef*atom1.q; + + // C-D and C-Uind terms (m=0) + ePermCoef = rInvVec[2]*(mScale + bVec[2]); + eUIndCoef = rInvVec[2]*(pScale*thole_c + bVec[2]); + eUInpCoef = rInvVec[2]*(dScale*thole_c + bVec[2]); + dPermCoef = -rInvVec[3]*(mScale + bVec[2] + alphaRVec[3]*X); + dUIndCoef = -2*rInvVec[3]*(pScale*dthole_c + bVec[2] + alphaRVec[3]*X); + dUInpCoef = -2*rInvVec[3]*(dScale*dthole_c + bVec[2] + alphaRVec[3]*X); + Vij[0] += -(ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x); + Vji[1] = -(ePermCoef*atom1.q); + VijR[0] += -(dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x); + VjiR[1] = -(dPermCoef*atom1.q); + Vjip[0] = -(eUInpCoef*atom1.q); + Vjid[0] = -(eUIndCoef*atom1.q); + // D-C and Uind-C terms (m=0) + Vij[1] = ePermCoef*atom2.q; + Vji[0] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] = dPermCoef*atom2.q; + VjiR[0] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] = eUInpCoef*atom2.q; + Vijd[0] = eUIndCoef*atom2.q; + + // D-D and D-Uind terms (m=0) + const real twoThirds = (real) 2/3; + ePermCoef = -twoThirds*rInvVec[3]*(3*(mScale + bVec[3]) + alphaRVec[3]*X); + eUIndCoef = -twoThirds*rInvVec[3]*(3*(pScale*thole_d0 + bVec[3]) + alphaRVec[3]*X); + eUInpCoef = -twoThirds*rInvVec[3]*(3*(dScale*thole_d0 + bVec[3]) + alphaRVec[3]*X); + dPermCoef = rInvVec[4]*(3*(mScale + bVec[3]) + 2*alphaRVec[5]*X); + dUIndCoef = rInvVec[4]*(6*(pScale*dthole_d0 + bVec[3]) + 4*alphaRVec[5]*X); + dUInpCoef = rInvVec[4]*(6*(dScale*dthole_d0 + bVec[3]) + 4*alphaRVec[5]*X); + Vij[1] += ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x; + Vji[1] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] += dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x; + VjiR[1] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] += eUInpCoef*rotatedDipole2.x; + Vijd[0] += eUIndCoef*rotatedDipole2.x; + Vjip[0] += eUInpCoef*rotatedDipole1.x; + Vjid[0] += eUIndCoef*rotatedDipole1.x; + // D-D and D-Uind terms (m=1) + ePermCoef = rInvVec[3]*(mScale + bVec[3] - twoThirds*alphaRVec[3]*X); + eUIndCoef = rInvVec[3]*(pScale*thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + eUInpCoef = rInvVec[3]*(dScale*thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + dPermCoef = -1.5f*rInvVec[4]*(mScale + bVec[3]); + dUIndCoef = -3*rInvVec[4]*(pScale*dthole_d1 + bVec[3]); + dUInpCoef = -3*rInvVec[4]*(dScale*dthole_d1 + bVec[3]); + Vij[2] = ePermCoef*rotatedDipole2.y + eUIndCoef*qiUindJ.y + eUInpCoef*qiUinpJ.y; + Vji[2] = ePermCoef*rotatedDipole1.y + eUIndCoef*qiUindI.y + eUInpCoef*qiUinpI.y; + VijR[2] = dPermCoef*rotatedDipole2.y + dUIndCoef*qiUindJ.y + dUInpCoef*qiUinpJ.y; + VjiR[2] = dPermCoef*rotatedDipole1.y + dUIndCoef*qiUindI.y + dUInpCoef*qiUinpI.y; + Vij[3] = ePermCoef*rotatedDipole2.z + eUIndCoef*qiUindJ.z + eUInpCoef*qiUinpJ.z; + Vji[3] = ePermCoef*rotatedDipole1.z + eUIndCoef*qiUindI.z + eUInpCoef*qiUinpI.z; + VijR[3] = dPermCoef*rotatedDipole2.z + dUIndCoef*qiUindJ.z + dUInpCoef*qiUinpJ.z; + VjiR[3] = dPermCoef*rotatedDipole1.z + dUIndCoef*qiUindI.z + dUInpCoef*qiUinpI.z; + Vijp[1] = eUInpCoef*rotatedDipole2.y; + Vijd[1] = eUIndCoef*rotatedDipole2.y; + Vjip[1] = eUInpCoef*rotatedDipole1.y; + Vjid[1] = eUIndCoef*rotatedDipole1.y; + Vijp[2] = eUInpCoef*rotatedDipole2.z; + Vijd[2] = eUIndCoef*rotatedDipole2.z; + Vjip[2] = eUInpCoef*rotatedDipole1.z; + Vjid[2] = eUIndCoef*rotatedDipole1.z; + + // C-Q terms (m=0) + ePermCoef = (mScale + bVec[3])*rInvVec[3]; + dPermCoef = -((real) 1/3)*rInvVec[4]*(4.5f*(mScale + bVec[3]) + 2*alphaRVec[5]*X); + Vij[0] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] = ePermCoef*atom1.q; + VijR[0] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] = dPermCoef*atom1.q; + // Q-C terms (m=0) + Vij[4] = ePermCoef*atom2.q; + Vji[0] += ePermCoef*rotatedQuadrupole1[0]; + VijR[4] = dPermCoef*atom2.q; + VjiR[0] += dPermCoef*rotatedQuadrupole1[0]; + + // D-Q and Uind-Q terms (m=0) + const real fourThirds = (real) 4/3; + ePermCoef = rInvVec[4]*(3*(mScale + bVec[3]) + fourThirds*alphaRVec[5]*X); + eUIndCoef = rInvVec[4]*(3*(pScale*thole_q0 + bVec[3]) + fourThirds*alphaRVec[5]*X); + eUInpCoef = rInvVec[4]*(3*(dScale*thole_q0 + bVec[3]) + fourThirds*alphaRVec[5]*X); + dPermCoef = -fourThirds*rInvVec[5]*(4.5f*(mScale + bVec[3]) + (1 + alphaRVec[2])*alphaRVec[5]*X); + dUIndCoef = -fourThirds*rInvVec[5]*(9*(pScale*dthole_q0 + bVec[3]) + 2*(1 + alphaRVec[2])*alphaRVec[5]*X); + dUInpCoef = -fourThirds*rInvVec[5]*(9*(dScale*dthole_q0 + bVec[3]) + 2*(1 + alphaRVec[2])*alphaRVec[5]*X); + Vij[1] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] += ePermCoef*rotatedDipole1.x + eUIndCoef*qiUindI.x + eUInpCoef*qiUinpI.x; + VijR[1] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] += dPermCoef*rotatedDipole1.x + dUIndCoef*qiUindI.x + dUInpCoef*qiUinpI.x; + Vijp[0] += eUInpCoef*rotatedQuadrupole2[0]; + Vijd[0] += eUIndCoef*rotatedQuadrupole2[0]; + // Q-D and Q-Uind terms (m=0) + Vij[4] += -(ePermCoef*rotatedDipole2.x + eUIndCoef*qiUindJ.x + eUInpCoef*qiUinpJ.x); + Vji[1] += -(ePermCoef*rotatedQuadrupole1[0]); + VijR[4] += -(dPermCoef*rotatedDipole2.x + dUIndCoef*qiUindJ.x + dUInpCoef*qiUinpJ.x); + VjiR[1] += -(dPermCoef*rotatedQuadrupole1[0]); + Vjip[0] += -(eUInpCoef*rotatedQuadrupole1[0]); + Vjid[0] += -(eUIndCoef*rotatedQuadrupole1[0]); + + // D-Q and Uind-Q terms (m=1) + const real sqrtThree = SQRT((real) 3); + ePermCoef = -sqrtThree*rInvVec[4]*(mScale + bVec[3]); + eUIndCoef = -sqrtThree*rInvVec[4]*(pScale*thole_q1 + bVec[3]); + eUInpCoef = -sqrtThree*rInvVec[4]*(dScale*thole_q1 + bVec[3]); + const real fourSqrtOneThird = 4/sqrt((real) 3); + dPermCoef = fourSqrtOneThird*rInvVec[5]*(1.5f*(mScale + bVec[3]) + 0.5f*alphaRVec[5]*X); + dUIndCoef = fourSqrtOneThird*rInvVec[5]*(3*(pScale*dthole_q1 + bVec[3]) + alphaRVec[5]*X); + dUInpCoef = fourSqrtOneThird*rInvVec[5]*(3*(dScale*dthole_q1 + bVec[3]) + alphaRVec[5]*X); + Vij[2] += ePermCoef*rotatedQuadrupole2[1]; + Vji[5] = ePermCoef*rotatedDipole1.y + eUIndCoef*qiUindI.y + eUInpCoef*qiUinpI.y; + VijR[2] += dPermCoef*rotatedQuadrupole2[1]; + VjiR[5] = dPermCoef*rotatedDipole1.y + dUIndCoef*qiUindI.y + dUInpCoef*qiUinpI.y; + Vij[3] += ePermCoef*rotatedQuadrupole2[2]; + Vji[6] = ePermCoef*rotatedDipole1.z + eUIndCoef*qiUindI.z + eUInpCoef*qiUinpI.z; + VijR[3] += dPermCoef*rotatedQuadrupole2[2]; + VjiR[6] = dPermCoef*rotatedDipole1.z + dUIndCoef*qiUindI.z + dUInpCoef*qiUinpI.z; + Vijp[1] += eUInpCoef*rotatedQuadrupole2[1]; + Vijd[1] += eUIndCoef*rotatedQuadrupole2[1]; + Vijp[2] += eUInpCoef*rotatedQuadrupole2[2]; + Vijd[2] += eUIndCoef*rotatedQuadrupole2[2]; + // D-Q and Uind-Q terms (m=1) + Vij[5] = -(ePermCoef*rotatedDipole2.y + eUIndCoef*qiUindJ.y + eUInpCoef*qiUinpJ.y); + Vji[2] += -(ePermCoef*rotatedQuadrupole1[1]); + VijR[5] = -(dPermCoef*rotatedDipole2.y + dUIndCoef*qiUindJ.y + dUInpCoef*qiUinpJ.y); + VjiR[2] += -(dPermCoef*rotatedQuadrupole1[1]); + Vij[6] = -(ePermCoef*rotatedDipole2.z + eUIndCoef*qiUindJ.z + eUInpCoef*qiUinpJ.z); + Vji[3] += -(ePermCoef*rotatedQuadrupole1[2]); + VijR[6] = -(dPermCoef*rotatedDipole2.z + dUIndCoef*qiUindJ.z + dUInpCoef*qiUinpJ.z); + VjiR[3] += -(dPermCoef*rotatedQuadrupole1[2]); + Vjip[1] += -(eUInpCoef*rotatedQuadrupole1[1]); + Vjid[1] += -(eUIndCoef*rotatedQuadrupole1[1]); + Vjip[2] += -(eUInpCoef*rotatedQuadrupole1[2]); + Vjid[2] += -(eUIndCoef*rotatedQuadrupole1[2]); + + // Q-Q terms (m=0) + ePermCoef = rInvVec[5]*(6*(mScale + bVec[4]) + ((real) 4/45)*(-3 + 10*alphaRVec[2])*alphaRVec[5]*X); + dPermCoef = -rInvVec[6]*(135*(mScale + bVec[4]) + 4*(1 + 2*alphaRVec[2])*alphaRVec[7]*X)/9; + Vij[4] += ePermCoef*rotatedQuadrupole2[0]; + Vji[4] += ePermCoef*rotatedQuadrupole1[0]; + VijR[4] += dPermCoef*rotatedQuadrupole2[0]; + VjiR[4] += dPermCoef*rotatedQuadrupole1[0]; + // Q-Q terms (m=1) + const real fourOverFifteen = (real) 4/15; + ePermCoef = -fourOverFifteen*rInvVec[5]*(15*(mScale + bVec[4]) + alphaRVec[5]*X); + dPermCoef = rInvVec[6]*(10*(mScale + bVec[4]) + fourThirds*alphaRVec[7]*X); + Vij[5] += ePermCoef*rotatedQuadrupole2[1]; + Vji[5] += ePermCoef*rotatedQuadrupole1[1]; + VijR[5] += dPermCoef*rotatedQuadrupole2[1]; + VjiR[5] += dPermCoef*rotatedQuadrupole1[1]; + Vij[6] += ePermCoef*rotatedQuadrupole2[2]; + Vji[6] += ePermCoef*rotatedQuadrupole1[2]; + VijR[6] += dPermCoef*rotatedQuadrupole2[2]; + VjiR[6] += dPermCoef*rotatedQuadrupole1[2]; + // Q-Q terms (m=2) + ePermCoef = rInvVec[5]*(mScale + bVec[4] - fourOverFifteen*alphaRVec[5]*X); + dPermCoef = -2.5f*(mScale + bVec[4])*rInvVec[6]; + Vij[7] = ePermCoef*rotatedQuadrupole2[3]; + Vji[7] = ePermCoef*rotatedQuadrupole1[3]; + VijR[7] = dPermCoef*rotatedQuadrupole2[3]; + VjiR[7] = dPermCoef*rotatedQuadrupole1[3]; + Vij[8] = ePermCoef*rotatedQuadrupole2[4]; + Vji[8] = ePermCoef*rotatedQuadrupole1[4]; + VijR[8] = dPermCoef*rotatedQuadrupole2[4]; + VjiR[8] = dPermCoef*rotatedQuadrupole1[4]; + + // Evaluate the energies, forces and torques due to permanent+induced moments + // interacting with just the permanent moments. + energy += forceFactor*0.5f*( + atom1.q*Vij[0] + rotatedDipole1.x*Vij[1] + rotatedDipole1.y*Vij[2] + rotatedDipole1.z*Vij[3] + rotatedQuadrupole1[0]*Vij[4] + rotatedQuadrupole1[1]*Vij[5] + rotatedQuadrupole1[2]*Vij[6] + rotatedQuadrupole1[3]*Vij[7] + rotatedQuadrupole1[4]*Vij[8] + + atom2.q*Vji[0] + rotatedDipole2.x*Vji[1] + rotatedDipole2.y*Vji[2] + rotatedDipole2.z*Vji[3] + rotatedQuadrupole2[0]*Vji[4] + rotatedQuadrupole2[1]*Vji[5] + rotatedQuadrupole2[2]*Vji[6] + rotatedQuadrupole2[3]*Vji[7] + rotatedQuadrupole2[4]*Vji[8]); + real fIZ = atom1.q*VijR[0] + rotatedDipole1.x*VijR[1] + rotatedDipole1.y*VijR[2] + rotatedDipole1.z*VijR[3] + rotatedQuadrupole1[0]*VijR[4] + rotatedQuadrupole1[1]*VijR[5] + rotatedQuadrupole1[2]*VijR[6] + rotatedQuadrupole1[3]*VijR[7] + rotatedQuadrupole1[4]*VijR[8]; + real fJZ = atom2.q*VjiR[0] + rotatedDipole2.x*VjiR[1] + rotatedDipole2.y*VjiR[2] + rotatedDipole2.z*VjiR[3] + rotatedQuadrupole2[0]*VjiR[4] + rotatedQuadrupole2[1]*VjiR[5] + rotatedQuadrupole2[2]*VjiR[6] + rotatedQuadrupole2[3]*VjiR[7] + rotatedQuadrupole2[4]*VjiR[8]; + real EIX = rotatedDipole1.z*Vij[1] - rotatedDipole1.x*Vij[3] + sqrtThree*rotatedQuadrupole1[2]*Vij[4] + rotatedQuadrupole1[4]*Vij[5] - (sqrtThree*rotatedQuadrupole1[0]+rotatedQuadrupole1[3])*Vij[6] + rotatedQuadrupole1[2]*Vij[7] - rotatedQuadrupole1[1]*Vij[8]; + real EIY = -rotatedDipole1.y*Vij[1] + rotatedDipole1.x*Vij[2] - sqrtThree*rotatedQuadrupole1[1]*Vij[4] + (sqrtThree*rotatedQuadrupole1[0]-rotatedQuadrupole1[3])*Vij[5] - rotatedQuadrupole1[4]*Vij[6] + rotatedQuadrupole1[1]*Vij[7] + rotatedQuadrupole1[2]*Vij[8]; + real EIZ = -rotatedDipole1.z*Vij[2] + rotatedDipole1.y*Vij[3] - rotatedQuadrupole1[2]*Vij[5] + rotatedQuadrupole1[1]*Vij[6] - 2*rotatedQuadrupole1[4]*Vij[7] + 2*rotatedQuadrupole1[3]*Vij[8]; + real EJX = rotatedDipole2.z*Vji[1] - rotatedDipole2.x*Vji[3] + sqrtThree*rotatedQuadrupole2[2]*Vji[4] + rotatedQuadrupole2[4]*Vji[5] - (sqrtThree*rotatedQuadrupole2[0]+rotatedQuadrupole2[3])*Vji[6] + rotatedQuadrupole2[2]*Vji[7] - rotatedQuadrupole2[1]*Vji[8]; + real EJY = -rotatedDipole2.y*Vji[1] + rotatedDipole2.x*Vji[2] - sqrtThree*rotatedQuadrupole2[1]*Vji[4] + (sqrtThree*rotatedQuadrupole2[0]-rotatedQuadrupole2[3])*Vji[5] - rotatedQuadrupole2[4]*Vji[6] + rotatedQuadrupole2[1]*Vji[7] + rotatedQuadrupole2[2]*Vji[8]; + real EJZ = -rotatedDipole2.z*Vji[2] + rotatedDipole2.y*Vji[3] - rotatedQuadrupole2[2]*Vji[5] + rotatedQuadrupole2[1]*Vji[6] - 2*rotatedQuadrupole2[4]*Vji[7] + 2*rotatedQuadrupole2[3]*Vji[8]; + + // Define the torque intermediates for the induced dipoles. These are simply the induced dipole torque + // intermediates dotted with the field due to permanent moments only, at each center. We inline the + // induced dipole torque intermediates here, for simplicity. N.B. There are no torques on the dipoles + // themselves, so we accumulate the torque intermediates into separate variables to allow them to be + // used only in the force calculation. + // + // The torque about the x axis (needed to obtain the y force on the induced dipoles, below) + // qiUindIx[0] = qiQUindI[2]; qiUindIx[1] = 0; qiUindIx[2] = -qiQUindI[0] + real iEIX = qiUinpI.z*Vijp[0] + qiUindI.z*Vijd[0] - qiUinpI.x*Vijp[2] - qiUindI.x*Vijd[2]; + real iEJX = qiUinpJ.z*Vjip[0] + qiUindJ.z*Vjid[0] - qiUinpJ.x*Vjip[2] - qiUindJ.x*Vjid[2]; + // The torque about the y axis (needed to obtain the x force on the induced dipoles, below) + // qiUindIy[0] = -qiQUindI[1]; qiUindIy[1] = qiQUindI[0]; qiUindIy[2] = 0 + real iEIY = qiUinpI.x*Vijp[1] + qiUindI.x*Vijd[1] - qiUinpI.y*Vijp[0] - qiUindI.y*Vijd[0]; + real iEJY = qiUinpJ.x*Vjip[1] + qiUindJ.x*Vjid[1] - qiUinpJ.y*Vjip[0] - qiUindJ.y*Vjid[0]; + +#ifdef USE_MUTUAL_POLARIZATION + // Uind-Uind terms (m=0) + real eCoef = -fourThirds*rInvVec[3]*(3*(thole_d0 + bVec[3]) + alphaRVec[3]*X); + real dCoef = rInvVec[4]*(6*(dthole_d0 + bVec[3]) + 4*alphaRVec[5]*X); + iEIX += eCoef*(qiUinpI.z*qiUindJ.x + qiUindI.z*qiUinpJ.x); + iEJX += eCoef*(qiUinpJ.z*qiUindI.x + qiUindJ.z*qiUinpI.x); + iEIY -= eCoef*(qiUinpI.y*qiUindJ.x + qiUindI.y*qiUinpJ.x); + iEJY -= eCoef*(qiUinpJ.y*qiUindI.x + qiUindJ.y*qiUinpI.x); + fIZ += dCoef*(qiUinpI.x*qiUindJ.x + qiUindI.x*qiUinpJ.x); + fIZ += dCoef*(qiUinpJ.x*qiUindI.x + qiUindJ.x*qiUinpI.x); + // Uind-Uind terms (m=1) + eCoef = 2*rInvVec[3]*(thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + dCoef = -3*rInvVec[4]*(dthole_d1 + bVec[3]); + iEIX -= eCoef*(qiUinpI.x*qiUindJ.z + qiUindI.x*qiUinpJ.z); + iEJX -= eCoef*(qiUinpJ.x*qiUindI.z + qiUindJ.x*qiUinpI.z); + iEIY += eCoef*(qiUinpI.x*qiUindJ.y + qiUindI.x*qiUinpJ.y); + iEJY += eCoef*(qiUinpJ.x*qiUindI.y + qiUindJ.x*qiUinpI.y); + fIZ += dCoef*(qiUinpI.y*qiUindJ.y + qiUindI.y*qiUinpJ.y + qiUinpI.z*qiUindJ.z + qiUindI.z*qiUinpJ.z); + fIZ += dCoef*(qiUinpJ.y*qiUindI.y + qiUindJ.y*qiUinpI.y + qiUinpJ.z*qiUindI.z + qiUindJ.z*qiUinpI.z); +#endif - real3 force; + // The quasi-internal frame forces and torques. Note that the induced torque intermediates are + // used in the force expression, but not in the torques; the induced dipoles are isotropic. + real qiForce[3] = {rInv*(EIY+EJY+iEIY+iEJY), -rInv*(EIX+EJX+iEIX+iEJX), -(fJZ+fIZ)}; + real qiTorqueI[3] = {-EIX, -EIY, -EIZ}; + real qiTorqueJ[3] = {-EJX, -EJY, -EJZ}; - if (hasExclusions) { - computeOneInteractionF1(atom1, atom2, delta, bn, bn5, forceFactor, dScale, pScale, mScale, force, energy); - computeOneInteractionF2(atom1, atom2, delta, bn, forceFactor, dScale, pScale, mScale, force, energy); - } - else { - computeOneInteractionF1NoScale(atom1, atom2, delta, bn, bn5, forceFactor, force, energy); - computeOneInteractionF2NoScale(atom1, atom2, delta, bn, forceFactor, force, energy); - } + real3 force = make_real3(qiRotationMatrix[1][1]*qiForce[0] + qiRotationMatrix[2][1]*qiForce[1] + qiRotationMatrix[0][1]*qiForce[2], + qiRotationMatrix[1][2]*qiForce[0] + qiRotationMatrix[2][2]*qiForce[1] + qiRotationMatrix[0][2]*qiForce[2], + qiRotationMatrix[1][0]*qiForce[0] + qiRotationMatrix[2][0]*qiForce[1] + qiRotationMatrix[0][0]*qiForce[2]); atom1.force += force; - if (forceFactor == 1) - atom2.force -= force; - - if (hasExclusions) { - computeOneInteractionT1(atom1, atom2, delta, bn, dScale, pScale, mScale); - computeOneInteractionT2(atom1, atom2, delta, bn, dScale, pScale, mScale); - } - else { - computeOneInteractionT1NoScale(atom1, atom2, delta, bn); - computeOneInteractionT2NoScale(atom1, atom2, delta, bn); - } - - + atom1.torque += make_real3(qiRotationMatrix[1][1]*qiTorqueI[0] + qiRotationMatrix[2][1]*qiTorqueI[1] + qiRotationMatrix[0][1]*qiTorqueI[2], + qiRotationMatrix[1][2]*qiTorqueI[0] + qiRotationMatrix[2][2]*qiTorqueI[1] + qiRotationMatrix[0][2]*qiTorqueI[2], + qiRotationMatrix[1][0]*qiTorqueI[0] + qiRotationMatrix[2][0]*qiTorqueI[1] + qiRotationMatrix[0][0]*qiTorqueI[2]); if (forceFactor == 1) { - // T3 == T1 w/ particles I and J reversed - // T4 == T2 w/ particles I and J reversed - - delta.x = -delta.x; - delta.y = -delta.y; - delta.z = -delta.z; - if (hasExclusions) { - computeOneInteractionT1(atom2, atom1, delta, bn, dScale, pScale, mScale); - computeOneInteractionT2(atom2, atom1, delta, bn, dScale, pScale, mScale); - } - else { - computeOneInteractionT1NoScale(atom2, atom1, delta, bn); - computeOneInteractionT2NoScale(atom2, atom1, delta, bn); - } + atom2.force -= force; + atom2.torque += make_real3(qiRotationMatrix[1][1]*qiTorqueJ[0] + qiRotationMatrix[2][1]*qiTorqueJ[1] + qiRotationMatrix[0][1]*qiTorqueJ[2], + qiRotationMatrix[1][2]*qiTorqueJ[0] + qiRotationMatrix[2][2]*qiTorqueJ[1] + qiRotationMatrix[0][2]*qiTorqueJ[2], + qiRotationMatrix[1][0]*qiTorqueJ[0] + qiRotationMatrix[2][0]*qiTorqueJ[1] + qiRotationMatrix[0][0]*qiTorqueJ[2]); } } /** * Compute the self energy and self torque. */ -__device__ void computeSelfEnergyAndTorque(AtomData& atom1, real& energy) { - real term = 2*EWALD_ALPHA*EWALD_ALPHA; - real fterm = -EWALD_ALPHA/SQRT_PI; +__device__ void computeSelfEnergyAndTorque(AtomData& atom1, mixed& energy) { real cii = atom1.q*atom1.q; - real dii = dot(atom1.dipole, atom1.dipole); + real3 dipole = make_real3(atom1.sphericalDipole.y, atom1.sphericalDipole.z, atom1.sphericalDipole.x); + real dii = dot(dipole, dipole+(atom1.inducedDipole+atom1.inducedDipolePolar)*0.5f); #ifdef INCLUDE_QUADRUPOLES - real qii = 2*(atom1.quadrupoleXX*atom1.quadrupoleXX + - atom1.quadrupoleYY*atom1.quadrupoleYY + - atom1.quadrupoleXX*atom1.quadrupoleYY + - atom1.quadrupoleXY*atom1.quadrupoleXY + - atom1.quadrupoleXZ*atom1.quadrupoleXZ + - atom1.quadrupoleYZ*atom1.quadrupoleYZ); + real qii = (atom1.sphericalQuadrupole[0]*atom1.sphericalQuadrupole[0] + + atom1.sphericalQuadrupole[1]*atom1.sphericalQuadrupole[1] + + atom1.sphericalQuadrupole[2]*atom1.sphericalQuadrupole[2] + + atom1.sphericalQuadrupole[3]*atom1.sphericalQuadrupole[3] + + atom1.sphericalQuadrupole[4]*atom1.sphericalQuadrupole[4]); #else real qii = 0; #endif - real uii = dot(atom1.dipole, atom1.inducedDipole); - real selfEnergy = (cii + term*(dii/3 + 2*term*qii/5)); - selfEnergy += term*uii/3; - selfEnergy *= fterm; - energy += selfEnergy; + real prefac = -EWALD_ALPHA/SQRT_PI; + real a2 = EWALD_ALPHA*EWALD_ALPHA; + real a4 = a2*a2; + energy += prefac*(cii + ((real)2/3)*a2*dii + ((real) 4/15)*a4*qii); // self-torque for PME real3 ui = atom1.inducedDipole+atom1.inducedDipolePolar; - atom1.torque += ((2/(real) 3)*(EWALD_ALPHA*EWALD_ALPHA*EWALD_ALPHA)/SQRT_PI)*cross(atom1.dipole, ui); + atom1.torque += ((2/(real) 3)*(EWALD_ALPHA*EWALD_ALPHA*EWALD_ALPHA)/SQRT_PI)*cross(dipole, ui); } /** * Compute electrostatic interactions. */ extern "C" __global__ void computeElectrostatics( - unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, real* __restrict__ energyBuffer, + unsigned long long* __restrict__ forceBuffers, unsigned long long* __restrict__ torqueBuffers, mixed* __restrict__ energyBuffer, const real4* __restrict__ posq, const uint2* __restrict__ covalentFlags, const unsigned int* __restrict__ polarizationGroupFlags, const ushort2* __restrict__ exclusionTiles, unsigned int startTileIndex, unsigned int numTileIndices, #ifdef USE_CUTOFF @@ -204,13 +447,13 @@ extern "C" __global__ void computeElectrostatics( real4 periodicBoxVecX, real4 periodicBoxVecY, real4 periodicBoxVecZ, unsigned int maxTiles, const real4* __restrict__ blockCenter, const unsigned int* __restrict__ interactingAtoms, #endif - const real* __restrict__ labFrameDipole, const real* __restrict__ labFrameQuadrupole, const real* __restrict__ inducedDipole, + const real* __restrict__ sphericalDipole, const real* __restrict__ sphericalQuadrupole, const real* __restrict__ inducedDipole, const real* __restrict__ inducedDipolePolar, const float2* __restrict__ dampingAndThole) { const unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; const unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; const unsigned int tgx = threadIdx.x & (TILE_SIZE-1); const unsigned int tbx = threadIdx.x - tgx; - real energy = 0; + mixed energy = 0; __shared__ AtomData localData[THREAD_BLOCK_SIZE]; // First loop: process tiles that contain exclusions. @@ -223,7 +466,7 @@ extern "C" __global__ void computeElectrostatics( const unsigned int y = tileIndices.y; AtomData data; unsigned int atom1 = x*TILE_SIZE + tgx; - loadAtomData(data, atom1, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(data, atom1, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); data.force = make_real3(0); data.torque = make_real3(0); uint2 covalent = covalentFlags[pos*TILE_SIZE+tgx]; @@ -233,13 +476,13 @@ extern "C" __global__ void computeElectrostatics( localData[threadIdx.x].pos = data.pos; localData[threadIdx.x].q = data.q; - localData[threadIdx.x].dipole = data.dipole; + localData[threadIdx.x].sphericalDipole = data.sphericalDipole; #ifdef INCLUDE_QUADRUPOLES - localData[threadIdx.x].quadrupoleXX = data.quadrupoleXX; - localData[threadIdx.x].quadrupoleXY = data.quadrupoleXY; - localData[threadIdx.x].quadrupoleXZ = data.quadrupoleXZ; - localData[threadIdx.x].quadrupoleYY = data.quadrupoleYY; - localData[threadIdx.x].quadrupoleYZ = data.quadrupoleYZ; + localData[threadIdx.x].sphericalQuadrupole[0] = data.sphericalQuadrupole[0]; + localData[threadIdx.x].sphericalQuadrupole[1] = data.sphericalQuadrupole[1]; + localData[threadIdx.x].sphericalQuadrupole[2] = data.sphericalQuadrupole[2]; + localData[threadIdx.x].sphericalQuadrupole[3] = data.sphericalQuadrupole[3]; + localData[threadIdx.x].sphericalQuadrupole[4] = data.sphericalQuadrupole[4]; #endif localData[threadIdx.x].inducedDipole = data.inducedDipole; localData[threadIdx.x].inducedDipolePolar = data.inducedDipolePolar; @@ -272,7 +515,7 @@ extern "C" __global__ void computeElectrostatics( // This is an off-diagonal tile. unsigned int j = y*TILE_SIZE + tgx; - loadAtomData(localData[threadIdx.x], j, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(localData[threadIdx.x], j, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); localData[threadIdx.x].force = make_real3(0); localData[threadIdx.x].torque = make_real3(0); unsigned int tj = tgx; @@ -366,7 +609,7 @@ extern "C" __global__ void computeElectrostatics( // Load atom data for this tile. AtomData data; - loadAtomData(data, atom1, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(data, atom1, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); data.force = make_real3(0); data.torque = make_real3(0); #ifdef USE_CUTOFF @@ -375,7 +618,7 @@ extern "C" __global__ void computeElectrostatics( unsigned int j = y*TILE_SIZE + tgx; #endif atomIndices[threadIdx.x] = j; - loadAtomData(localData[threadIdx.x], j, posq, labFrameDipole, labFrameQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); + loadAtomData(localData[threadIdx.x], j, posq, sphericalDipole, sphericalQuadrupole, inducedDipole, inducedDipolePolar, dampingAndThole); localData[threadIdx.x].force = make_real3(0); localData[threadIdx.x].torque = make_real3(0); diff --git a/plugins/amoeba/platforms/cuda/src/kernels/sphericalMultipoles.cu b/plugins/amoeba/platforms/cuda/src/kernels/sphericalMultipoles.cu new file mode 100644 index 0000000000000000000000000000000000000000..18075fe42ed65fa3094275d9766f7e297f83bb0f --- /dev/null +++ b/plugins/amoeba/platforms/cuda/src/kernels/sphericalMultipoles.cu @@ -0,0 +1,111 @@ +__device__ void buildQIRotationMatrix(real3 deltaR, real rInv, real (&rotationMatrix)[3][3]) { + real3 vectorZ = deltaR*rInv; + real3 vectorX = vectorZ; + if (deltaR.y != 0 || deltaR.z != 0) + vectorX.x += 1; + else + vectorX.y += 1; + + vectorX -= vectorZ*dot(vectorX, vectorZ); + vectorX = normalize(vectorX); + real3 vectorY = cross(vectorZ, vectorX); + + // Reorder the Cartesian {x,y,z} dipole rotation matrix, to account + // for spherical harmonic ordering {z,x,y}. + rotationMatrix[0][0] = vectorZ.z; + rotationMatrix[0][1] = vectorZ.x; + rotationMatrix[0][2] = vectorZ.y; + rotationMatrix[1][0] = vectorX.z; + rotationMatrix[1][1] = vectorX.x; + rotationMatrix[1][2] = vectorX.y; + rotationMatrix[2][0] = vectorY.z; + rotationMatrix[2][1] = vectorY.x; + rotationMatrix[2][2] = vectorY.y; +} + +__device__ real3 rotateDipole(real3& dipole, const real (&rotationMatrix)[3][3]) { + return make_real3(rotationMatrix[0][0]*dipole.x + rotationMatrix[0][1]*dipole.y + rotationMatrix[0][2]*dipole.z, + rotationMatrix[1][0]*dipole.x + rotationMatrix[1][1]*dipole.y + rotationMatrix[1][2]*dipole.z, + rotationMatrix[2][0]*dipole.x + rotationMatrix[2][1]*dipole.y + rotationMatrix[2][2]*dipole.z); +} + + +__device__ void rotateQuadupoles(const real (&rotationMatrix)[3][3], const real* quad1, const real* quad2, real* rotated1, real* rotated2) { + real sqrtThree = SQRT((real) 3); + real element; + element = 0.5f*(3.0f*rotationMatrix[0][0]*rotationMatrix[0][0] - 1.0f); + rotated1[0] += quad1[0]*element; + rotated2[0] += quad2[0]*element; + element = sqrtThree*rotationMatrix[0][0]*rotationMatrix[0][1]; + rotated1[0] += quad1[1]*element; + rotated2[0] += quad2[1]*element; + element = sqrtThree*rotationMatrix[0][0]*rotationMatrix[0][2]; + rotated1[0] += quad1[2]*element; + rotated2[0] += quad2[2]*element; + element = 0.5f*sqrtThree*(rotationMatrix[0][1]*rotationMatrix[0][1] - rotationMatrix[0][2]*rotationMatrix[0][2]); + rotated1[0] += quad1[3]*element; + rotated2[0] += quad2[3]*element; + element = sqrtThree*rotationMatrix[0][1]*rotationMatrix[0][2]; + rotated1[0] += quad1[4]*element; + rotated2[0] += quad2[4]*element; + element = sqrtThree*rotationMatrix[0][0]*rotationMatrix[1][0]; + rotated1[1] += quad1[0]*element; + rotated2[1] += quad2[0]*element; + element = rotationMatrix[1][0]*rotationMatrix[0][1] + rotationMatrix[0][0]*rotationMatrix[1][1]; + rotated1[1] += quad1[1]*element; + rotated2[1] += quad2[1]*element; + element = rotationMatrix[1][0]*rotationMatrix[0][2] + rotationMatrix[0][0]*rotationMatrix[1][2]; + rotated1[1] += quad1[2]*element; + rotated2[1] += quad2[2]*element; + element = rotationMatrix[0][1]*rotationMatrix[1][1] - rotationMatrix[0][2]*rotationMatrix[1][2]; + rotated1[1] += quad1[3]*element; + rotated2[1] += quad2[3]*element; + element = rotationMatrix[1][1]*rotationMatrix[0][2] + rotationMatrix[0][1]*rotationMatrix[1][2]; + rotated1[1] += quad1[4]*element; + rotated2[1] += quad2[4]*element; + element = sqrtThree*rotationMatrix[0][0]*rotationMatrix[2][0]; + rotated1[2] += quad1[0]*element; + rotated2[2] += quad2[0]*element; + element = rotationMatrix[2][0]*rotationMatrix[0][1] + rotationMatrix[0][0]*rotationMatrix[2][1]; + rotated1[2] += quad1[1]*element; + rotated2[2] += quad2[1]*element; + element = rotationMatrix[2][0]*rotationMatrix[0][2] + rotationMatrix[0][0]*rotationMatrix[2][2]; + rotated1[2] += quad1[2]*element; + rotated2[2] += quad2[2]*element; + element = rotationMatrix[0][1]*rotationMatrix[2][1] - rotationMatrix[0][2]*rotationMatrix[2][2]; + rotated1[2] += quad1[3]*element; + rotated2[2] += quad2[3]*element; + element = rotationMatrix[2][1]*rotationMatrix[0][2] + rotationMatrix[0][1]*rotationMatrix[2][2]; + rotated1[2] += quad1[4]*element; + rotated2[2] += quad2[4]*element; + element = 0.5f*sqrtThree*(rotationMatrix[1][0]*rotationMatrix[1][0] - rotationMatrix[2][0]*rotationMatrix[2][0]); + rotated1[3] += quad1[0]*element; + rotated2[3] += quad2[0]*element; + element = rotationMatrix[1][0]*rotationMatrix[1][1] - rotationMatrix[2][0]*rotationMatrix[2][1]; + rotated1[3] += quad1[1]*element; + rotated2[3] += quad2[1]*element; + element = rotationMatrix[1][0]*rotationMatrix[1][2] - rotationMatrix[2][0]*rotationMatrix[2][2]; + rotated1[3] += quad1[2]*element; + rotated2[3] += quad2[2]*element; + element = 0.5f*(rotationMatrix[1][1]*rotationMatrix[1][1] - rotationMatrix[2][1]*rotationMatrix[2][1] - rotationMatrix[1][2]*rotationMatrix[1][2] + rotationMatrix[2][2]*rotationMatrix[2][2]); + rotated1[3] += quad1[3]*element; + rotated2[3] += quad2[3]*element; + element = rotationMatrix[1][1]*rotationMatrix[1][2] - rotationMatrix[2][1]*rotationMatrix[2][2]; + rotated1[3] += quad1[4]*element; + rotated2[3] += quad2[4]*element; + element = sqrtThree*rotationMatrix[1][0]*rotationMatrix[2][0]; + rotated1[4] += quad1[0]*element; + rotated2[4] += quad2[0]*element; + element = rotationMatrix[2][0]*rotationMatrix[1][1] + rotationMatrix[1][0]*rotationMatrix[2][1]; + rotated1[4] += quad1[1]*element; + rotated2[4] += quad2[1]*element; + element = rotationMatrix[2][0]*rotationMatrix[1][2] + rotationMatrix[1][0]*rotationMatrix[2][2]; + rotated1[4] += quad1[2]*element; + rotated2[4] += quad2[2]*element; + element = rotationMatrix[1][1]*rotationMatrix[2][1] - rotationMatrix[1][2]*rotationMatrix[2][2]; + rotated1[4] += quad1[3]*element; + rotated2[4] += quad2[3]*element; + element = rotationMatrix[2][1]*rotationMatrix[1][2] + rotationMatrix[1][1]*rotationMatrix[2][2]; + rotated1[4] += quad1[4]*element; + rotated2[4] += quad2[4]*element; +} diff --git a/plugins/amoeba/platforms/cuda/tests/CMakeLists.txt b/plugins/amoeba/platforms/cuda/tests/CMakeLists.txt index b2e991d99bcffe4297d78779b2e11ad2af8d05b1..57dd1148a6f714d69d8490f35caa2bd3c7bdfb65 100644 --- a/plugins/amoeba/platforms/cuda/tests/CMakeLists.txt +++ b/plugins/amoeba/platforms/cuda/tests/CMakeLists.txt @@ -17,7 +17,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF (APPLE) SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ELSE (APPLE) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ENDIF (APPLE) ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) IF (OPENMM_BUILD_CUDA_DOUBLE_PRECISION_TESTS) diff --git a/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaGeneralizedKirkwoodForce.cpp b/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaGeneralizedKirkwoodForce.cpp index bb11449537b0f7f0920ffe3d1e518e7c495ea6c2..91d3e3ad1c4681ec37c54e18cd39525214d0d07c 100644 --- a/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaGeneralizedKirkwoodForce.cpp +++ b/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaGeneralizedKirkwoodForce.cpp @@ -6980,7 +6980,7 @@ static void compareForcesEnergy(std::string& testName, double expectedEnergy, do const std::vector& expectedForces, const std::vector& forces, double tolerance) { for (unsigned int ii = 0; ii < forces.size(); ii++) { - ASSERT_EQUAL_VEC_MOD(expectedForces[ii], forces[ii], tolerance, testName); + ASSERT_EQUAL_VEC(expectedForces[ii], forces[ii], tolerance); } ASSERT_EQUAL_TOL_MOD(expectedEnergy, energy, tolerance, testName); } diff --git a/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaMultipoleForce.cpp b/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaMultipoleForce.cpp index b6ac6f5243a99940bbb4a52f4d8046e97518f960..a7dc1323cd95579086246d303b398a8d1f4583c0 100644 --- a/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaMultipoleForce.cpp +++ b/plugins/amoeba/platforms/cuda/tests/TestCudaAmoebaMultipoleForce.cpp @@ -1943,7 +1943,16 @@ static void setupAndGetForcesEnergyMultipoleLargeWater(AmoebaMultipoleForce::Non energy = state.getPotentialEnergy(); } - return; + if (nonbondedMethod == AmoebaMultipoleForce::PME) { + double actualAlpha; + int actualSize[3]; + amoebaMultipoleForce->getPMEParametersInContext(context, actualAlpha, actualSize[0], actualSize[1], actualSize[2]); + ASSERT_EQUAL_TOL(amoebaMultipoleForce->getAEwald(), actualAlpha, 1e-5); + for (int i = 0; i < 3; i++) { + ASSERT(actualSize[i] >= inputPmeGridDimension); + ASSERT(actualSize[i] < inputPmeGridDimension+10); + } + } } // test multipole mutual polarization using PME for box of water diff --git a/plugins/amoeba/platforms/reference/CMakeLists.txt b/plugins/amoeba/platforms/reference/CMakeLists.txt index 441e17d4c2bc5070881679bf7e6a850c46e38652..a9e0dee7a4a1cd4ed880722cea97c7b39f4b0448 100644 --- a/plugins/amoeba/platforms/reference/CMakeLists.txt +++ b/plugins/amoeba/platforms/reference/CMakeLists.txt @@ -71,7 +71,7 @@ ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${SHARED_AMOEBA_TARGET}) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp b/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp index 0a77654eec05e803845b63c09bcef42ccaf780a2..da20e06d037b5b733b1043361c10b0235da22281 100644 --- a/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp +++ b/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp @@ -790,6 +790,15 @@ void ReferenceCalcAmoebaMultipoleForceKernel::copyParametersToContext(ContextImp } } +void ReferenceCalcAmoebaMultipoleForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + if (!usePme) + throw OpenMMException("getPMEParametersInContext: This Context is not using PME"); + alpha = alphaEwald; + nx = pmeGridDimension[0]; + ny = pmeGridDimension[1]; + nz = pmeGridDimension[2]; +} + /* -------------------------------------------------------------------------- * * AmoebaGeneralizedKirkwood * * -------------------------------------------------------------------------- */ diff --git a/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.h b/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.h index f8a4073356f440bf0c102064d8cf371809018d37..8f388d208262df48ab8071c4a56f0c598e4c0c74 100644 --- a/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.h +++ b/plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: * * Contributors: * * * @@ -403,6 +403,15 @@ public: * @param force the AmoebaMultipoleForce to copy the parameters from */ void copyParametersToContext(ContextImpl& context, const AmoebaMultipoleForce& force); + /** + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis + */ + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; private: diff --git a/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp b/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp index 895c595c0dabad0ec4c8f3140d6668f08dcf83c8..7190e2ebd80314e4dc4c3bb7d85a1dd840d01f2a 100644 --- a/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp +++ b/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp @@ -317,6 +317,18 @@ void AmoebaReferenceMultipoleForce::loadParticleData(const vector& part particleData[ii].quadrupole[QYZ] = quadrupoles[9*ii+5]; particleData[ii].quadrupole[QZZ] = quadrupoles[9*ii+8]; + // Form spherical harmonic dipoles from Cartesian moments. + particleData[ii].sphericalDipole[0] = dipoles[3*ii+2]; // z -> Q_10 + particleData[ii].sphericalDipole[1] = dipoles[3*ii+0]; // x -> Q_11c + particleData[ii].sphericalDipole[2] = dipoles[3*ii+1]; // y -> Q_11s + + // Form spherical harmonic quadrupoles from Cartesian moments. + particleData[ii].sphericalQuadrupole[0] = quadrupoles[9*ii+8]*3.0; // zz -> Q_20 + particleData[ii].sphericalQuadrupole[1] = sqrtFourThirds * quadrupoles[9*ii+2]*3.0; // xz -> Q_21c + particleData[ii].sphericalQuadrupole[2] = sqrtFourThirds * quadrupoles[9*ii+5]*3.0; // yz -> Q_21s + particleData[ii].sphericalQuadrupole[3] = sqrtOneThird * (quadrupoles[9*ii+0] - quadrupoles[9*ii+4])*3.0; // xx-yy -> Q_22c + particleData[ii].sphericalQuadrupole[4] = sqrtFourThirds * quadrupoles[9*ii+1]*3.0; // xy -> Q_22s + particleData[ii].thole = tholes[ii]; particleData[ii].dampingFactor = dampingFactors[ii]; particleData[ii].polarity = polarity[ii]; @@ -335,10 +347,10 @@ void AmoebaReferenceMultipoleForce::checkChiralCenterAtParticle(MultipoleParticl MultipoleParticleData& particleY) const { - if (axisType == AmoebaMultipoleForce::ZThenX) { + if (axisType == AmoebaMultipoleForce::ZThenX || particleY.particleIndex == -1) { return; } - + RealVec deltaAD = particleI.position - particleY.position; RealVec deltaBD = particleZ.position - particleY.position; RealVec deltaCD = particleX.position - particleY.position; @@ -347,9 +359,12 @@ void AmoebaReferenceMultipoleForce::checkChiralCenterAtParticle(MultipoleParticl RealOpenMM volume = deltaC.dot(deltaAD); if (volume < 0.0) { - particleI.dipole[1] *= -1.0; // pole(3,i) - particleI.quadrupole[QXY] *= -1.0; // pole(6,i) && pole(8,i) - particleI.quadrupole[QYZ] *= -1.0; // pole(10,i) && pole(12,i) + particleI.dipole[1] *= -1.0; // pole(3,i) + particleI.quadrupole[QXY] *= -1.0; // pole(6,i) && pole(8,i) + particleI.quadrupole[QYZ] *= -1.0; // pole(10,i) && pole(12,i) + particleI.sphericalDipole[2] *= -1.0; // y + particleI.sphericalQuadrupole[2] *= -1.0; // yz + particleI.sphericalQuadrupole[4] *= -1.0; // xy } } @@ -359,7 +374,6 @@ void AmoebaReferenceMultipoleForce::checkChiral(vector& p const vector& multipoleAtomZs, const vector& axisTypes) const { - for (unsigned int ii = 0; ii < _numParticles; ii++) { if (multipoleAtomYs[ii] > -1) { checkChiralCenterAtParticle(particleData[ii], axisTypes[ii], @@ -383,6 +397,7 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol // compute the vector between the atoms and 1/sqrt(d2), d2 is distance between // this atom and the axis atom + RealVec vectorY; RealVec vectorZ = particleZ.position - particleI.position; RealVec vectorX = particleX.position - particleI.position; @@ -491,6 +506,130 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol particleI.quadrupole[QYY] = rPole[1][1]; particleI.quadrupole[QYZ] = rPole[1][2]; particleI.quadrupole[QZZ] = rPole[2][2]; + + RealOpenMM dipoleRotationMatrix[3][3]; + + // Reorder the Cartesian {x,y,z} dipole rotation matrix, to account + // for spherical harmonic ordering {z,x,y}. + dipoleRotationMatrix[0][0] = vectorZ[2]; + dipoleRotationMatrix[0][1] = vectorX[2]; + dipoleRotationMatrix[0][2] = vectorY[2]; + dipoleRotationMatrix[1][0] = vectorZ[0]; + dipoleRotationMatrix[1][1] = vectorX[0]; + dipoleRotationMatrix[1][2] = vectorY[0]; + dipoleRotationMatrix[2][0] = vectorZ[1]; + dipoleRotationMatrix[2][1] = vectorX[1]; + dipoleRotationMatrix[2][2] = vectorY[1]; + + RealOpenMM quadrupoleRotationMatrix[5][5]; + buildSphericalQuadrupoleRotationMatrix(dipoleRotationMatrix, quadrupoleRotationMatrix); + + // Rotate the dipoles + RealOpenMM rotatedDipole[3]; + for (int ii = 0; ii < 3; ii++) { + RealOpenMM val = 0.0; + for (int jj = 0; jj < 3; jj++) { + val += dipoleRotationMatrix[ii][jj] * particleI.sphericalDipole[jj]; + } + rotatedDipole[ii] = val; + } + for (int ii = 0; ii < 3; ii++) + particleI.sphericalDipole[ii] = rotatedDipole[ii]; + // Rotate the quadrupoles + RealOpenMM rotatedQuadrupole[5]; + for (int ii = 0; ii < 5; ii++) { + RealOpenMM val = 0.0; + for (int jj = 0; jj < 5; jj++) { + val += quadrupoleRotationMatrix[ii][jj] * particleI.sphericalQuadrupole[jj]; + } + rotatedQuadrupole[ii] = val; + } + for (int ii = 0; ii < 5; ii++) + particleI.sphericalQuadrupole[ii] = rotatedQuadrupole[ii]; +} + +void AmoebaReferenceMultipoleForce::formQIRotationMatrix(const RealVec& iPosition, + const RealVec& jPosition, + const RealVec &deltaR, + RealOpenMM r, + RealOpenMM (&rotationMatrix)[3][3]) const +{ + RealVec vectorZ = (deltaR)/r; + RealVec vectorX(vectorZ); + if ((iPosition[1] != jPosition[1]) || (iPosition[2] != jPosition[2])){ + vectorX[0] += 1.0; + }else{ + vectorX[1] += 1.0; + } + RealVec vectorY; + + RealOpenMM dot = vectorZ.dot(vectorX); + vectorX -= vectorZ*dot; + normalizeRealVec(vectorX); + vectorY = vectorZ.cross(vectorX); + + // Reorder the Cartesian {x,y,z} dipole rotation matrix, to account + // for spherical harmonic ordering {z,x,y}. + rotationMatrix[0][0] = vectorZ[2]; + rotationMatrix[0][1] = vectorZ[0]; + rotationMatrix[0][2] = vectorZ[1]; + rotationMatrix[1][0] = vectorX[2]; + rotationMatrix[1][1] = vectorX[0]; + rotationMatrix[1][2] = vectorX[1]; + rotationMatrix[2][0] = vectorY[2]; + rotationMatrix[2][1] = vectorY[0]; + rotationMatrix[2][2] = vectorY[1]; +} + + + + +void AmoebaReferenceMultipoleForce::buildSphericalQuadrupoleRotationMatrix(const RealOpenMM (&D1)[3][3], RealOpenMM (&D2)[5][5]) const +{ + D2[0][0] = 0.5*(3.0*D1[0][0]*D1[0][0] - 1.0); + D2[1][0] = sqrtThree*D1[0][0]*D1[1][0]; + D2[2][0] = sqrtThree*D1[0][0]*D1[2][0]; + D2[3][0] = 0.5*sqrtThree*(D1[1][0]*D1[1][0] - D1[2][0]*D1[2][0]); + D2[4][0] = sqrtThree*D1[1][0]*D1[2][0]; + D2[0][1] = sqrtThree*D1[0][0]*D1[0][1]; + D2[1][1] = D1[1][0]*D1[0][1] + D1[0][0]*D1[1][1]; + D2[2][1] = D1[2][0]*D1[0][1] + D1[0][0]*D1[2][1]; + D2[3][1] = D1[1][0]*D1[1][1] - D1[2][0]*D1[2][1]; + D2[4][1] = D1[2][0]*D1[1][1] + D1[1][0]*D1[2][1]; + D2[0][2] = sqrtThree*D1[0][0]*D1[0][2]; + D2[1][2] = D1[1][0]*D1[0][2] + D1[0][0]*D1[1][2]; + D2[2][2] = D1[2][0]*D1[0][2] + D1[0][0]*D1[2][2]; + D2[3][2] = D1[1][0]*D1[1][2] - D1[2][0]*D1[2][2]; + D2[4][2] = D1[2][0]*D1[1][2] + D1[1][0]*D1[2][2]; + D2[0][3] = 0.5*sqrtThree*(D1[0][1]*D1[0][1] - D1[0][2]*D1[0][2]); + D2[1][3] = D1[0][1]*D1[1][1] - D1[0][2]*D1[1][2]; + D2[2][3] = D1[0][1]*D1[2][1] - D1[0][2]*D1[2][2]; + D2[3][3] = 0.5*(D1[1][1]*D1[1][1] - D1[2][1]*D1[2][1] - D1[1][2]*D1[1][2] + D1[2][2]*D1[2][2]); + D2[4][3] = D1[1][1]*D1[2][1] - D1[1][2]*D1[2][2]; + D2[0][4] = sqrtThree*D1[0][1]*D1[0][2]; + D2[1][4] = D1[1][1]*D1[0][2] + D1[0][1]*D1[1][2]; + D2[2][4] = D1[2][1]*D1[0][2] + D1[0][1]*D1[2][2]; + D2[3][4] = D1[1][1]*D1[1][2] - D1[2][1]*D1[2][2]; + D2[4][4] = D1[2][1]*D1[1][2] + D1[1][1]*D1[2][2]; +} + +void AmoebaReferenceMultipoleForce::buildPartialSphericalQuadrupoleRotationMatrix(const RealOpenMM (&D1)[3][3], RealOpenMM (&D2)[3][5]) const +{ + D2[0][0] = 0.5*(3.0*D1[0][0]*D1[0][0] - 1.0); + D2[0][1] = sqrtThree*D1[0][0]*D1[0][1]; + D2[0][2] = sqrtThree*D1[0][0]*D1[0][2]; + D2[0][3] = 0.5*sqrtThree*(D1[0][1]*D1[0][1] - D1[0][2]*D1[0][2]); + D2[0][4] = sqrtThree*D1[0][1]*D1[0][2]; + D2[1][0] = sqrtThree*D1[0][0]*D1[1][0]; + D2[1][1] = D1[1][0]*D1[0][1] + D1[0][0]*D1[1][1]; + D2[1][2] = D1[1][0]*D1[0][2] + D1[0][0]*D1[1][2]; + D2[1][3] = D1[0][1]*D1[1][1] - D1[0][2]*D1[1][2]; + D2[1][4] = D1[1][1]*D1[0][2] + D1[0][1]*D1[1][2]; + D2[2][0] = sqrtThree*D1[0][0]*D1[2][0]; + D2[2][1] = D1[2][0]*D1[0][1] + D1[0][0]*D1[2][1]; + D2[2][2] = D1[2][0]*D1[0][2] + D1[0][0]*D1[2][2]; + D2[2][3] = D1[0][1]*D1[2][1] - D1[0][2]*D1[2][2]; + D2[2][4] = D1[2][1]*D1[0][2] + D1[0][1]*D1[2][2]; } void AmoebaReferenceMultipoleForce::applyRotationMatrix(vector& particleData, @@ -552,6 +691,7 @@ void AmoebaReferenceMultipoleForce::calculateFixedMultipoleFieldPairIxn(const Mu RealVec deltaR = particleJ.position - particleI.position; RealOpenMM r = SQRT(deltaR.dot(deltaR)); + vector rrI(3); // get scaling factors, if needed @@ -907,356 +1047,389 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateElectrostaticPairIxn(const Mu vector& forces, vector& torque) const { - RealOpenMM temp3,temp5,temp7; - RealOpenMM gl[9],gli[7],glip[7]; - RealOpenMM sc[10],sci[8],scip[8]; - RealOpenMM gf[7],gfi[6],gti[6]; - unsigned int iIndex = particleI.particleIndex; unsigned int kIndex = particleK.particleIndex; - RealVec delta = particleK.position - particleI.position; - RealOpenMM r2 = delta.dot(delta); - - // set conversion factor, cutoff and switching coefficients - - RealOpenMM f = _electric/_dielectric; - - // set scale factors for permanent multipole and induced terms - - RealOpenMM pdi = particleI.dampingFactor; - RealOpenMM pti = particleI.thole; - - // apply Thole polarization damping to scale factors - - RealOpenMM r = SQRT(r2); - RealOpenMM rr1 = 1.0/r; - RealOpenMM rr3 = rr1/r2; - RealOpenMM rr5 = 3.0*rr3/r2; - RealOpenMM rr7 = 5.0*rr5/r2; - RealOpenMM rr9 = 7.0*rr7/r2; - RealOpenMM rr11 = 9.0*rr9/r2; - - RealOpenMM scale3 = 1.0; - RealOpenMM scale5 = 1.0; - RealOpenMM scale7 = 1.0; - - RealVec ddsc3(0.0, 0.0, 0.0); - RealVec ddsc5(0.0, 0.0, 0.0); - RealVec ddsc7(0.0, 0.0, 0.0); - - RealOpenMM damp = particleI.dampingFactor*particleK.dampingFactor; - if (damp != 0.0) { - RealOpenMM pgamma = particleI.thole < particleK.thole ? particleI.thole : particleK.thole; - RealOpenMM ratio = (r/damp); - damp = -pgamma * ratio*ratio*ratio; - if (damp > -50.0) { - RealOpenMM expdamp = EXP(damp); - scale3 = 1.0 - expdamp; - scale5 = 1.0 - (1.0-damp)*expdamp; - scale7 = 1.0 - (1.0-damp+0.6*damp*damp)*expdamp; - temp3 = -3.0 * damp * expdamp / r2; - temp5 = -damp; - temp7 = -0.2 - 0.6*damp; - - ddsc3 = delta*temp3; - ddsc5 = ddsc3*temp5; - ddsc7 = ddsc5*temp7; - + RealVec deltaR = particleK.position - particleI.position; + RealOpenMM r2 = deltaR.dot(deltaR); + RealOpenMM r = SQRT(r2); + + // Start by constructing rotation matrices to put dipoles and + // quadrupoles into the QI frame, from the lab frame. + RealOpenMM qiRotationMatrix1[3][3]; + formQIRotationMatrix(particleI.position, particleK.position, deltaR, r, qiRotationMatrix1); + RealOpenMM qiRotationMatrix2[5][5]; + buildSphericalQuadrupoleRotationMatrix(qiRotationMatrix1, qiRotationMatrix2); + // The force rotation matrix rotates the QI forces into the lab + // frame, and makes sure the result is in {x,y,z} ordering. Its + // transpose is used to rotate the induced dipoles to the QI frame. + RealOpenMM forceRotationMatrix[3][3]; + forceRotationMatrix[0][0] = qiRotationMatrix1[1][1]; + forceRotationMatrix[0][1] = qiRotationMatrix1[2][1]; + forceRotationMatrix[0][2] = qiRotationMatrix1[0][1]; + forceRotationMatrix[1][0] = qiRotationMatrix1[1][2]; + forceRotationMatrix[1][1] = qiRotationMatrix1[2][2]; + forceRotationMatrix[1][2] = qiRotationMatrix1[0][2]; + forceRotationMatrix[2][0] = qiRotationMatrix1[1][0]; + forceRotationMatrix[2][1] = qiRotationMatrix1[2][0]; + forceRotationMatrix[2][2] = qiRotationMatrix1[0][0]; + // For efficiency, we go ahead and cache that transposed version + // now, because we need to do 4 rotations in total (I,J, and p,d). + // We also fold in the factor of 0.5 needed to average the p and d + // components. + RealOpenMM inducedDipoleRotationMatrix[3][3]; + inducedDipoleRotationMatrix[0][0] = 0.5*qiRotationMatrix1[0][1]; + inducedDipoleRotationMatrix[0][1] = 0.5*qiRotationMatrix1[0][2]; + inducedDipoleRotationMatrix[0][2] = 0.5*qiRotationMatrix1[0][0]; + inducedDipoleRotationMatrix[1][0] = 0.5*qiRotationMatrix1[1][1]; + inducedDipoleRotationMatrix[1][1] = 0.5*qiRotationMatrix1[1][2]; + inducedDipoleRotationMatrix[1][2] = 0.5*qiRotationMatrix1[1][0]; + inducedDipoleRotationMatrix[2][0] = 0.5*qiRotationMatrix1[2][1]; + inducedDipoleRotationMatrix[2][1] = 0.5*qiRotationMatrix1[2][2]; + inducedDipoleRotationMatrix[2][2] = 0.5*qiRotationMatrix1[2][0]; + + // Rotate the induced dipoles to the QI frame. + RealOpenMM qiUindI[3], qiUindJ[3], qiUinpI[3], qiUinpJ[3]; + for (int ii = 0; ii < 3; ii++) { + RealOpenMM valIP = 0.0; + RealOpenMM valID = 0.0; + RealOpenMM valJP = 0.0; + RealOpenMM valJD = 0.0; + for (int jj = 0; jj < 3; jj++) { + valIP += inducedDipoleRotationMatrix[ii][jj] * _inducedDipolePolar[iIndex][jj]; + valID += inducedDipoleRotationMatrix[ii][jj] * _inducedDipole[iIndex][jj]; + valJP += inducedDipoleRotationMatrix[ii][jj] * _inducedDipolePolar[kIndex][jj]; + valJD += inducedDipoleRotationMatrix[ii][jj] * _inducedDipole[kIndex][jj]; } + qiUindI[ii] = valID; + qiUinpI[ii] = valIP; + qiUindJ[ii] = valJD; + qiUinpJ[ii] = valJP; } - RealOpenMM scale3i = scale3*scalingFactors[U_SCALE]; - RealOpenMM scale5i = scale5*scalingFactors[U_SCALE]; - RealOpenMM scale7i = scale7*scalingFactors[U_SCALE]; - - RealOpenMM dsc3 = scale3*scalingFactors[D_SCALE]; - RealOpenMM dsc5 = scale5*scalingFactors[D_SCALE]; - RealOpenMM dsc7 = scale7*scalingFactors[D_SCALE]; - - RealOpenMM psc3 = scale3*scalingFactors[P_SCALE]; - RealOpenMM psc5 = scale5*scalingFactors[P_SCALE]; - RealOpenMM psc7 = scale7*scalingFactors[P_SCALE]; - - // construct necessary auxiliary vectors - - RealVec dixdk = particleI.dipole.cross(particleK.dipole); - RealVec dixuk = particleI.dipole.cross(_inducedDipole[kIndex]); - RealVec dkxui = particleK.dipole.cross(_inducedDipole[iIndex]); - RealVec dixukp = particleI.dipole.cross(_inducedDipolePolar[kIndex]); - RealVec dkxuip = particleK.dipole.cross(_inducedDipolePolar[iIndex]); - RealVec dixr = particleI.dipole.cross(delta); - RealVec dkxr = particleK.dipole.cross(delta); - - RealVec qir; - qir[0] = particleI.quadrupole[QXX]*delta[0] + particleI.quadrupole[QXY]*delta[1] + particleI.quadrupole[QXZ]*delta[2]; - qir[1] = particleI.quadrupole[QXY]*delta[0] + particleI.quadrupole[QYY]*delta[1] + particleI.quadrupole[QYZ]*delta[2]; - qir[2] = particleI.quadrupole[QXZ]*delta[0] + particleI.quadrupole[QYZ]*delta[1] + particleI.quadrupole[QZZ]*delta[2]; - - RealVec qkr; - qkr[0] = particleK.quadrupole[QXX]*delta[0] + particleK.quadrupole[QXY]*delta[1] + particleK.quadrupole[QXZ]*delta[2]; - qkr[1] = particleK.quadrupole[QXY]*delta[0] + particleK.quadrupole[QYY]*delta[1] + particleK.quadrupole[QYZ]*delta[2]; - qkr[2] = particleK.quadrupole[QXZ]*delta[0] + particleK.quadrupole[QYZ]*delta[1] + particleK.quadrupole[QZZ]*delta[2]; - - RealVec qiqkr; - qiqkr[0] = particleI.quadrupole[QXX]*qkr[0] + particleI.quadrupole[QXY]*qkr[1] + particleI.quadrupole[QXZ]*qkr[2]; - qiqkr[1] = particleI.quadrupole[QXY]*qkr[0] + particleI.quadrupole[QYY]*qkr[1] + particleI.quadrupole[QYZ]*qkr[2]; - qiqkr[2] = particleI.quadrupole[QXZ]*qkr[0] + particleI.quadrupole[QYZ]*qkr[1] + particleI.quadrupole[QZZ]*qkr[2]; - - RealVec qkqir; - qkqir[0] = particleK.quadrupole[QXX]*qir[0] + particleK.quadrupole[QXY]*qir[1] + particleK.quadrupole[QXZ]*qir[2]; - qkqir[1] = particleK.quadrupole[QXY]*qir[0] + particleK.quadrupole[QYY]*qir[1] + particleK.quadrupole[QYZ]*qir[2]; - qkqir[2] = particleK.quadrupole[QXZ]*qir[0] + particleK.quadrupole[QYZ]*qir[1] + particleK.quadrupole[QZZ]*qir[2]; - - RealVec qixqk; - qixqk[0] = particleI.quadrupole[QXY]*particleK.quadrupole[QXZ] + - particleI.quadrupole[QYY]*particleK.quadrupole[QYZ] + - particleI.quadrupole[QYZ]*particleK.quadrupole[QZZ] - - particleI.quadrupole[QXZ]*particleK.quadrupole[QXY] - - particleI.quadrupole[QYZ]*particleK.quadrupole[QYY] - - particleI.quadrupole[QZZ]*particleK.quadrupole[QYZ]; - - qixqk[1] = particleI.quadrupole[QXZ]*particleK.quadrupole[QXX] + - particleI.quadrupole[QYZ]*particleK.quadrupole[QXY] + - particleI.quadrupole[QZZ]*particleK.quadrupole[QXZ] - - particleI.quadrupole[QXX]*particleK.quadrupole[QXZ] - - particleI.quadrupole[QXY]*particleK.quadrupole[QYZ] - - particleI.quadrupole[QXZ]*particleK.quadrupole[QZZ]; - - qixqk[2] = particleI.quadrupole[QXX]*particleK.quadrupole[QXY] + - particleI.quadrupole[QXY]*particleK.quadrupole[QYY] + - particleI.quadrupole[QXZ]*particleK.quadrupole[QYZ] - - particleI.quadrupole[QXY]*particleK.quadrupole[QXX] - - particleI.quadrupole[QYY]*particleK.quadrupole[QXY] - - particleI.quadrupole[QYZ]*particleK.quadrupole[QXZ]; - - RealVec rxqir = delta.cross(qir); - RealVec rxqkr = delta.cross(qkr); - RealVec rxqikr = delta.cross(qiqkr); - RealVec rxqkir = delta.cross(qkqir); - RealVec qkrxqir = qkr.cross(qir); - - RealVec qidk,qkdi; - qidk[0] = particleI.quadrupole[QXX]*particleK.dipole[0] + particleI.quadrupole[QXY]*particleK.dipole[1] + particleI.quadrupole[QXZ]*particleK.dipole[2]; - qidk[1] = particleI.quadrupole[QXY]*particleK.dipole[0] + particleI.quadrupole[QYY]*particleK.dipole[1] + particleI.quadrupole[QYZ]*particleK.dipole[2]; - qidk[2] = particleI.quadrupole[QXZ]*particleK.dipole[0] + particleI.quadrupole[QYZ]*particleK.dipole[1] + particleI.quadrupole[QZZ]*particleK.dipole[2]; - - qkdi[0] = particleK.quadrupole[QXX]*particleI.dipole[0] + particleK.quadrupole[QXY]*particleI.dipole[1] + particleK.quadrupole[QXZ]*particleI.dipole[2]; - qkdi[1] = particleK.quadrupole[QXY]*particleI.dipole[0] + particleK.quadrupole[QYY]*particleI.dipole[1] + particleK.quadrupole[QYZ]*particleI.dipole[2]; - qkdi[2] = particleK.quadrupole[QXZ]*particleI.dipole[0] + particleK.quadrupole[QYZ]*particleI.dipole[1] + particleK.quadrupole[QZZ]*particleI.dipole[2]; - - RealVec qiuk,qkui; - qiuk[0] = particleI.quadrupole[QXX]*_inducedDipole[kIndex][0] + particleI.quadrupole[QXY]*_inducedDipole[kIndex][1] + particleI.quadrupole[QXZ]*_inducedDipole[kIndex][2]; - qiuk[1] = particleI.quadrupole[QXY]*_inducedDipole[kIndex][0] + particleI.quadrupole[QYY]*_inducedDipole[kIndex][1] + particleI.quadrupole[QYZ]*_inducedDipole[kIndex][2]; - qiuk[2] = particleI.quadrupole[QXZ]*_inducedDipole[kIndex][0] + particleI.quadrupole[QYZ]*_inducedDipole[kIndex][1] + particleI.quadrupole[QZZ]*_inducedDipole[kIndex][2]; - - qkui[0] = particleK.quadrupole[QXX]*_inducedDipole[iIndex][0] + particleK.quadrupole[QXY]*_inducedDipole[iIndex][1] + particleK.quadrupole[QXZ]*_inducedDipole[iIndex][2]; - qkui[1] = particleK.quadrupole[QXY]*_inducedDipole[iIndex][0] + particleK.quadrupole[QYY]*_inducedDipole[iIndex][1] + particleK.quadrupole[QYZ]*_inducedDipole[iIndex][2]; - qkui[2] = particleK.quadrupole[QXZ]*_inducedDipole[iIndex][0] + particleK.quadrupole[QYZ]*_inducedDipole[iIndex][1] + particleK.quadrupole[QZZ]*_inducedDipole[iIndex][2]; - - RealVec qiukp,qkuip; - qiukp[0] = particleI.quadrupole[QXX]*_inducedDipolePolar[kIndex][0] + particleI.quadrupole[QXY]*_inducedDipolePolar[kIndex][1] + particleI.quadrupole[QXZ]*_inducedDipolePolar[kIndex][2]; - qiukp[1] = particleI.quadrupole[QXY]*_inducedDipolePolar[kIndex][0] + particleI.quadrupole[QYY]*_inducedDipolePolar[kIndex][1] + particleI.quadrupole[QYZ]*_inducedDipolePolar[kIndex][2]; - qiukp[2] = particleI.quadrupole[QXZ]*_inducedDipolePolar[kIndex][0] + particleI.quadrupole[QYZ]*_inducedDipolePolar[kIndex][1] + particleI.quadrupole[QZZ]*_inducedDipolePolar[kIndex][2]; - - qkuip[0] = particleK.quadrupole[QXX]*_inducedDipolePolar[iIndex][0] + particleK.quadrupole[QXY]*_inducedDipolePolar[iIndex][1] + particleK.quadrupole[QXZ]*_inducedDipolePolar[iIndex][2]; - qkuip[1] = particleK.quadrupole[QXY]*_inducedDipolePolar[iIndex][0] + particleK.quadrupole[QYY]*_inducedDipolePolar[iIndex][1] + particleK.quadrupole[QYZ]*_inducedDipolePolar[iIndex][2]; - qkuip[2] = particleK.quadrupole[QXZ]*_inducedDipolePolar[iIndex][0] + particleK.quadrupole[QYZ]*_inducedDipolePolar[iIndex][1] + particleK.quadrupole[QZZ]*_inducedDipolePolar[iIndex][2]; - - RealVec dixqkr = particleI.dipole.cross(qkr); - RealVec dkxqir = particleK.dipole.cross(qir); - RealVec uixqkr = _inducedDipole[iIndex].cross(qkr); - RealVec ukxqir = _inducedDipole[kIndex].cross(qir); - RealVec uixqkrp = _inducedDipolePolar[iIndex].cross(qkr); - RealVec ukxqirp = _inducedDipolePolar[kIndex].cross(qir); - RealVec rxqidk = delta.cross(qidk); - RealVec rxqkdi = delta.cross(qkdi); - RealVec rxqiuk = delta.cross(qiuk); - RealVec rxqkui = delta.cross(qkui); - RealVec rxqiukp = delta.cross(qiukp); - RealVec rxqkuip = delta.cross(qkuip); - - // calculate scalar products for permanent components - - sc[1] = particleI.dipole.dot(particleK.dipole); - sc[2] = particleI.dipole.dot(delta); - sc[3] = particleK.dipole.dot(delta); - sc[4] = qir.dot(delta); - sc[5] = qkr.dot(delta); - sc[6] = qir.dot(particleK.dipole); - sc[7] = qkr.dot(particleI.dipole); - sc[8] = qir.dot(qkr); - sc[9] = particleI.quadrupole[QXX]*particleK.quadrupole[QXX] + particleI.quadrupole[QXY]*particleK.quadrupole[QXY] + particleI.quadrupole[QXZ]*particleK.quadrupole[QXZ] + - particleI.quadrupole[QXY]*particleK.quadrupole[QXY] + particleI.quadrupole[QYY]*particleK.quadrupole[QYY] + particleI.quadrupole[QYZ]*particleK.quadrupole[QYZ] + - particleI.quadrupole[QXZ]*particleK.quadrupole[QXZ] + particleI.quadrupole[QYZ]*particleK.quadrupole[QYZ] + particleI.quadrupole[QZZ]*particleK.quadrupole[QZZ]; - - // calculate scalar products for induced components - - sci[0] = _inducedDipole[iIndex][0]*particleK.dipole[0] + _inducedDipole[iIndex][1]*particleK.dipole[1] + _inducedDipole[iIndex][2]*particleK.dipole[2] +particleI.dipole[0]*_inducedDipole[kIndex][0] +particleI.dipole[1]*_inducedDipole[kIndex][1] +particleI.dipole[2]*_inducedDipole[kIndex][2]; - sci[1] = _inducedDipole[iIndex][0]*_inducedDipole[kIndex][0] + _inducedDipole[iIndex][1]*_inducedDipole[kIndex][1] + _inducedDipole[iIndex][2]*_inducedDipole[kIndex][2]; - sci[2] = _inducedDipole[iIndex][0]*delta[0] + _inducedDipole[iIndex][1]*delta[1] + _inducedDipole[iIndex][2]*delta[2]; - sci[3] = _inducedDipole[kIndex][0]*delta[0] + _inducedDipole[kIndex][1]*delta[1] + _inducedDipole[kIndex][2]*delta[2]; - sci[6] = qir[0]*_inducedDipole[kIndex][0] + qir[1]*_inducedDipole[kIndex][1] + qir[2]*_inducedDipole[kIndex][2]; - sci[7] = qkr[0]*_inducedDipole[iIndex][0] + qkr[1]*_inducedDipole[iIndex][1] + qkr[2]*_inducedDipole[iIndex][2]; - scip[0] = _inducedDipolePolar[iIndex][0]*particleK.dipole[0] + _inducedDipolePolar[iIndex][1]*particleK.dipole[1] + _inducedDipolePolar[iIndex][2]*particleK.dipole[2] +particleI.dipole[0]*_inducedDipolePolar[kIndex][0] +particleI.dipole[1]*_inducedDipolePolar[kIndex][1] +particleI.dipole[2]*_inducedDipolePolar[kIndex][2]; - scip[1] = _inducedDipole[iIndex][0]*_inducedDipolePolar[kIndex][0]+_inducedDipole[iIndex][1]*_inducedDipolePolar[kIndex][1] + _inducedDipole[iIndex][2]*_inducedDipolePolar[kIndex][2]+_inducedDipolePolar[iIndex][0]*_inducedDipole[kIndex][0] + _inducedDipolePolar[iIndex][1]*_inducedDipole[kIndex][1]+_inducedDipolePolar[iIndex][2]*_inducedDipole[kIndex][2]; - scip[2] = _inducedDipolePolar[iIndex][0]*delta[0] + _inducedDipolePolar[iIndex][1]*delta[1] + _inducedDipolePolar[iIndex][2]*delta[2]; - scip[3] = _inducedDipolePolar[kIndex][0]*delta[0] + _inducedDipolePolar[kIndex][1]*delta[1] + _inducedDipolePolar[kIndex][2]*delta[2]; - scip[6] = qir[0]*_inducedDipolePolar[kIndex][0] + qir[1]*_inducedDipolePolar[kIndex][1] + qir[2]*_inducedDipolePolar[kIndex][2]; - scip[7] = qkr[0]*_inducedDipolePolar[iIndex][0] + qkr[1]*_inducedDipolePolar[iIndex][1] + qkr[2]*_inducedDipolePolar[iIndex][2]; - - // calculate the gl functions for permanent components - - gl[0] = particleI.charge*particleK.charge; - gl[1] = particleK.charge*sc[2] - particleI.charge*sc[3]; - gl[2] = particleI.charge*sc[5] + particleK.charge*sc[4] - sc[2]*sc[3]; - gl[3] = sc[2]*sc[5] - sc[3]*sc[4]; - gl[4] = sc[4]*sc[5]; - gl[5] = -4.0 * sc[8]; - gl[6] = sc[1]; - gl[7] = 2.0 * (sc[6]-sc[7]); - gl[8] = 2.0 * sc[9]; - - // calculate the gl functions for induced components - - gli[0] = particleK.charge*sci[2] - particleI.charge*sci[3]; - gli[1] = -sc[2]*sci[3] - sci[2]*sc[3]; - gli[2] = sci[2]*sc[5] - sci[3]*sc[4]; - gli[5] = sci[0]; - gli[6] = 2.0 * (sci[6]-sci[7]); - glip[0] = particleK.charge*scip[2] - particleI.charge*scip[3]; - glip[1] = -sc[2]*scip[3] - scip[2]*sc[3]; - glip[2] = scip[2]*sc[5] - scip[3]*sc[4]; - glip[5] = scip[0]; - glip[6] = 2.0 * (scip[6]-scip[7]); - - // compute the energy contributions for this interaction - - RealOpenMM energy = rr1*gl[0] + rr3*(gl[1]+gl[6]) + rr5*(gl[2]+gl[7]+gl[8]) + rr7*(gl[3]+gl[5]) + rr9*gl[4]; - energy *= scalingFactors[M_SCALE]; - energy += 0.5*(rr3*(gli[0]+gli[5])*psc3 + rr5*(gli[1]+gli[6])*psc5 + rr7*gli[2]*psc7); - energy *= f; - - // intermediate variables for the permanent components - - gf[0] = rr3*gl[0] + rr5*(gl[1]+gl[6]) + rr7*(gl[2]+gl[7]+gl[8]) + rr9*(gl[3]+gl[5]) + rr11*gl[4]; - gf[1] = -particleK.charge*rr3 + sc[3]*rr5 - sc[5]*rr7; - gf[2] = particleI.charge*rr3 + sc[2]*rr5 + sc[4]*rr7; - gf[3] = 2.0*rr5; - gf[4] = 2.0*(-particleK.charge*rr5+sc[3]*rr7-sc[5]*rr9); - gf[5] = 2.0*(-particleI.charge*rr5-sc[2]*rr7-sc[4]*rr9); - gf[6] = 4.0*rr7; - - // intermediate variables for the induced components - - gfi[0] = 0.5 * rr5 * ((gli[0]+gli[5])*psc3 + (glip[0]+glip[5])*dsc3 + scip[1]*scale3i) - + 0.5 * rr7 * ((gli[6]+gli[1])*psc5 + (glip[6]+glip[1])*dsc5 - (sci[2]*scip[3]+scip[2]*sci[3])*scale5i) - + 0.5 * rr9 * (gli[2]*psc7+glip[2]*dsc7); - - gfi[1] = -rr3*particleK.charge + rr5*sc[3] - rr7*sc[5]; - gfi[2] = rr3*particleI.charge + rr5*sc[2] + rr7*sc[4]; - gfi[3] = 2.0*rr5; - gfi[4] = rr7*(sci[3]*psc7+scip[3]*dsc7); - gfi[5] = -rr7*(sci[2]*psc7+scip[2]*dsc7); - - // get the permanent force components - - RealVec ftm2 = delta*gf[0] + particleI.dipole*gf[1] + particleK.dipole*gf[2] + (qkdi -qidk)*gf[3] + qir*gf[4] + - qkr*gf[5] + (qiqkr+qkqir)*gf[6]; - - // get the induced force components - - RealVec ftm2i = delta*gfi[0] + qir*gfi[4] + qkr*gfi[5]; - ftm2i += ( - - (_inducedDipole[iIndex]*psc3 + _inducedDipolePolar[iIndex]*dsc3)*(-rr3*particleK.charge) + - (_inducedDipole[iIndex]*psc5 + _inducedDipolePolar[iIndex]*dsc5)*(rr5*sc[3]) + - (_inducedDipole[iIndex]*psc7 + _inducedDipolePolar[iIndex]*dsc7)*(-rr7*sc[5]) + - (_inducedDipole[kIndex]*psc3 + _inducedDipolePolar[kIndex]*dsc3)*(rr3*particleI.charge) + - (_inducedDipole[kIndex]*psc5 + _inducedDipolePolar[kIndex]*dsc5)*(rr5*sc[2]) + - (_inducedDipole[kIndex]*psc7 + _inducedDipolePolar[kIndex]*dsc7)*(rr7*sc[4]) + - (_inducedDipolePolar[iIndex]*sci[3] + _inducedDipole[iIndex]*scip[3] + - _inducedDipolePolar[kIndex]*sci[2] + _inducedDipole[kIndex]*scip[2])*(rr5*scale5i) + - particleI.dipole*((sci[3]*psc5 + scip[3]*dsc5)*rr5) + - particleK.dipole*((sci[2]*psc5 + scip[2]*dsc5)*rr5) + - ((qkui - qiuk)*psc5 + (qkuip - qiukp)*dsc5)*(gfi[3]))*0.5; - - // account for partially excluded induced interactions - - temp3 = rr3 * ((gli[0]+gli[5])*scalingFactors[P_SCALE] +(glip[0]+glip[5])*scalingFactors[D_SCALE]); - temp5 = rr5 * ((gli[1]+gli[6])*scalingFactors[P_SCALE] +(glip[1]+glip[6])*scalingFactors[D_SCALE]); - temp7 = rr7 * (gli[2]*scalingFactors[P_SCALE] +glip[2]*scalingFactors[D_SCALE]); - - RealVec fridmp,findmp; - fridmp = (ddsc3*temp3 + ddsc5*temp5 + ddsc7*temp7); - - // find some scaling terms for induced-induced force - - temp3 = rr3*scalingFactors[U_SCALE]*scip[1]; - temp5 = -rr5*scalingFactors[U_SCALE]*(sci[2]*scip[3]+scip[2]*sci[3]); - - findmp = (ddsc3*temp3 + ddsc5*temp5); - - // modify induced force for partially excluded interactions - - ftm2i -= (fridmp + findmp)*0.5; - - // correction to convert mutual to direct polarization force - - if (getPolarizationType() == AmoebaReferenceMultipoleForce::Direct) { - RealOpenMM gfd = (rr5*scip[1]*scale3i - rr7*(scip[2]*sci[3]+sci[2]*scip[3])*scale5i); - temp5 = rr5*scale5i; - - RealVec fdir; - fdir = delta*gfd + (_inducedDipolePolar[iIndex]*sci[3] + - _inducedDipole[iIndex]*scip[3] + - _inducedDipolePolar[kIndex]*sci[2] + - _inducedDipole[kIndex]*scip[2])*temp5; - ftm2i += (findmp - fdir)*0.5; + // The Qtilde intermediates (QI frame multipoles) for atoms I and J + RealOpenMM qiQI[9], qiQJ[9]; + // Rotate the permanent multipoles to the QI frame. + qiQI[0] = particleI.charge; + qiQJ[0] = particleK.charge; + for (int ii = 0; ii < 3; ii++) { + RealOpenMM valI = 0.0; + RealOpenMM valJ = 0.0; + for (int jj = 0; jj < 3; jj++) { + valI += qiRotationMatrix1[ii][jj] * particleI.sphericalDipole[jj]; + valJ += qiRotationMatrix1[ii][jj] * particleK.sphericalDipole[jj]; + } + qiQI[ii+1] = valI; + qiQJ[ii+1] = valJ; + } + for (int ii = 0; ii < 5; ii++) { + RealOpenMM valI = 0.0; + RealOpenMM valJ = 0.0; + for (int jj = 0; jj < 5; jj++) { + valI += qiRotationMatrix2[ii][jj] * particleI.sphericalQuadrupole[jj]; + valJ += qiRotationMatrix2[ii][jj] * particleK.sphericalQuadrupole[jj]; + } + qiQI[ii+4] = valI; + qiQJ[ii+4] = valJ; } - // intermediate terms for induced torque on multipoles - - gti[1] = 0.5*rr5*(sci[3]*psc5+scip[3]*dsc5); - gti[2] = 0.5*rr5*(sci[2]*psc5+scip[2]*dsc5); - gti[3] = gfi[3]; - gti[4] = gfi[4]; - gti[5] = gfi[5]; - - // get the permanent torque components - - RealVec ttm2 = dixdk*(-rr3) + dixr*gf[1] - rxqir*gf[4] + - (dixqkr + dkxqir + rxqidk - qixqk*2.0)*gf[3] - - (rxqikr + qkrxqir)*gf[6]; - - RealVec ttm3 = dixdk*rr3 + dkxr*gf[2] - rxqkr*gf[5] - - (dixqkr + dkxqir + rxqkdi - qixqk*2.0)*gf[3] - - (rxqkir - qkrxqir)*gf[6]; - - // get the induced torque components - - RealVec ttm2i = (dixuk*psc3 + dixukp*dsc3)*(0.5*(-rr3)) + - dixr*gti[1] + - ((ukxqir+rxqiuk)*psc5 + (ukxqirp+rxqiukp)*dsc5)*(0.5*gti[3]) - - rxqir*gti[4]; - - RealVec ttm3i = (dkxui*psc3 + dkxuip*dsc3)*(0.5*(-rr3)) + - dkxr*gti[2] - - ((uixqkr + rxqkui)*psc5 + (uixqkrp + rxqkuip)*dsc5)*(0.5*gti[3]) - - rxqkr*gti[5]; - - // increment forces and torques - // remove factor of f from torques and add back in? - - RealVec force = ftm2*scalingFactors[M_SCALE] + ftm2i; - force *= f; + // The Qtilde{x,y,z} torque intermediates for atoms I and J, which are used to obtain the torques on the permanent moments. + RealOpenMM qiQIX[9] = {0.0, qiQI[3], 0.0, -qiQI[1], sqrtThree*qiQI[6], qiQI[8], -sqrtThree*qiQI[4] - qiQI[7], qiQI[6], -qiQI[5]}; + RealOpenMM qiQIY[9] = {0.0, -qiQI[2], qiQI[1], 0.0, -sqrtThree*qiQI[5], sqrtThree*qiQI[4] - qiQI[7], -qiQI[8], qiQI[5], qiQI[6]}; + RealOpenMM qiQIZ[9] = {0.0, 0.0, -qiQI[3], qiQI[2], 0.0, -qiQI[6], qiQI[5], -2.0*qiQI[8], 2.0*qiQI[7]}; + RealOpenMM qiQJX[9] = {0.0, qiQJ[3], 0.0, -qiQJ[1], sqrtThree*qiQJ[6], qiQJ[8], -sqrtThree*qiQJ[4] - qiQJ[7], qiQJ[6], -qiQJ[5]}; + RealOpenMM qiQJY[9] = {0.0, -qiQJ[2], qiQJ[1], 0.0, -sqrtThree*qiQJ[5], sqrtThree*qiQJ[4] - qiQJ[7], -qiQJ[8], qiQJ[5], qiQJ[6]}; + RealOpenMM qiQJZ[9] = {0.0, 0.0, -qiQJ[3], qiQJ[2], 0.0, -qiQJ[6], qiQJ[5], -2.0*qiQJ[8], 2.0*qiQJ[7]}; + + // The field derivatives at I due to permanent and induced moments on J, and vice-versa. + // Also, their derivatives w.r.t. R, which are needed for force calculations + RealOpenMM Vij[9], Vji[9], VjiR[9], VijR[9]; + // The field derivatives at I due to only permanent moments on J, and vice-versa. + RealOpenMM Vijp[3], Vijd[3], Vjip[3], Vjid[3]; + RealOpenMM rInvVec[7]; + + RealOpenMM prefac = (_electric/_dielectric); + RealOpenMM rInv = 1.0 / r; + + // The rInvVec array is defined such that the ith element is R^-i, with the + // dieleectric constant folded in, to avoid conversions later. + rInvVec[1] = prefac * rInv; + for(int i = 2; i < 7; ++i) + rInvVec[i] = rInvVec[i-1] * rInv; + + RealOpenMM mScale = scalingFactors[M_SCALE]; + RealOpenMM dScale = scalingFactors[D_SCALE]; + RealOpenMM pScale = scalingFactors[P_SCALE]; + RealOpenMM uScale = scalingFactors[U_SCALE]; + + RealOpenMM dmp = particleI.dampingFactor*particleK.dampingFactor; + RealOpenMM a = particleI.thole < particleK.thole ? particleI.thole : particleK.thole; + RealOpenMM u = std::abs(dmp) > 1.0E-5 ? r/dmp : 1E10; + RealOpenMM au3 = a*u*u*u; + RealOpenMM expau3 = au3 < 50.0 ? EXP(-au3) : 0.0; + RealOpenMM a2u6 = au3*au3; + RealOpenMM a3u9 = a2u6*au3; + // Thole damping factors for energies + RealOpenMM thole_c = 1.0 - expau3; + RealOpenMM thole_d0 = 1.0 - expau3*(1.0 + 1.5*au3); + RealOpenMM thole_d1 = 1.0 - expau3; + RealOpenMM thole_q0 = 1.0 - expau3*(1.0 + au3 + a2u6); + RealOpenMM thole_q1 = 1.0 - expau3*(1.0 + au3); + // Thole damping factors for derivatives + RealOpenMM dthole_c = 1.0 - expau3*(1.0 + 1.5*au3); + RealOpenMM dthole_d0 = 1.0 - expau3*(1.0 + au3 + 1.5*a2u6); + RealOpenMM dthole_d1 = 1.0 - expau3*(1.0 + au3); + RealOpenMM dthole_q0 = 1.0 - expau3*(1.0 + au3 + 0.25*a2u6 + 0.75*a3u9); + RealOpenMM dthole_q1 = 1.0 - expau3*(1.0 + au3 + 0.75*a2u6); + + // Now we compute the (attenuated) Coulomb operator and its derivatives, contracted with + // permanent moments and induced dipoles. Note that the coefficient of the permanent force + // terms is half of the expected value; this is because we compute the interaction of I with + // the sum of induced and permanent moments on J, as well as the interaction of J with I's + // permanent and induced moments; doing so double counts the permanent-permanent interaction. + RealOpenMM ePermCoef, dPermCoef, eUIndCoef, dUIndCoef, eUInpCoef, dUInpCoef; + + // C-C terms (m=0) + ePermCoef = rInvVec[1]*mScale; + dPermCoef = -0.5*mScale*rInvVec[2]; + Vij[0] = ePermCoef*qiQJ[0]; + Vji[0] = ePermCoef*qiQI[0]; + VijR[0] = dPermCoef*qiQJ[0]; + VjiR[0] = dPermCoef*qiQI[0]; + + // C-D and C-Uind terms (m=0) + ePermCoef = rInvVec[2]*mScale; + eUIndCoef = rInvVec[2]*pScale*thole_c; + eUInpCoef = rInvVec[2]*dScale*thole_c; + dPermCoef = -rInvVec[3]*mScale; + dUIndCoef = -2.0*rInvVec[3]*pScale*dthole_c; + dUInpCoef = -2.0*rInvVec[3]*dScale*dthole_c; + Vij[0] += -(ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]); + Vji[1] = -(ePermCoef*qiQI[0]); + VijR[0] += -(dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]); + VjiR[1] = -(dPermCoef*qiQI[0]); + Vjip[0] = -(eUInpCoef*qiQI[0]); + Vjid[0] = -(eUIndCoef*qiQI[0]); + // D-C and Uind-C terms (m=0) + Vij[1] = ePermCoef*qiQJ[0]; + Vji[0] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] = dPermCoef*qiQJ[0]; + VjiR[0] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] = eUInpCoef*qiQJ[0]; + Vijd[0] = eUIndCoef*qiQJ[0]; + + // D-D and D-Uind terms (m=0) + ePermCoef = -2.0*rInvVec[3]*mScale; + eUIndCoef = -2.0*rInvVec[3]*pScale*thole_d0; + eUInpCoef = -2.0*rInvVec[3]*dScale*thole_d0; + dPermCoef = 3.0*rInvVec[4]*mScale; + dUIndCoef = 6.0*rInvVec[4]*pScale*dthole_d0; + dUInpCoef = 6.0*rInvVec[4]*dScale*dthole_d0; + Vij[1] += ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]; + Vji[1] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] += dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]; + VjiR[1] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] += eUInpCoef*qiQJ[1]; + Vijd[0] += eUIndCoef*qiQJ[1]; + Vjip[0] += eUInpCoef*qiQI[1]; + Vjid[0] += eUIndCoef*qiQI[1]; + // D-D and D-Uind terms (m=1) + ePermCoef = rInvVec[3]*mScale; + eUIndCoef = rInvVec[3]*pScale*thole_d1; + eUInpCoef = rInvVec[3]*dScale*thole_d1; + dPermCoef = -1.5*rInvVec[4]*mScale; + dUIndCoef = -3.0*rInvVec[4]*pScale*dthole_d1; + dUInpCoef = -3.0*rInvVec[4]*dScale*dthole_d1; + Vij[2] = ePermCoef*qiQJ[2] + eUIndCoef*qiUindJ[1] + eUInpCoef*qiUinpJ[1]; + Vji[2] = ePermCoef*qiQI[2] + eUIndCoef*qiUindI[1] + eUInpCoef*qiUinpI[1]; + VijR[2] = dPermCoef*qiQJ[2] + dUIndCoef*qiUindJ[1] + dUInpCoef*qiUinpJ[1]; + VjiR[2] = dPermCoef*qiQI[2] + dUIndCoef*qiUindI[1] + dUInpCoef*qiUinpI[1]; + Vij[3] = ePermCoef*qiQJ[3] + eUIndCoef*qiUindJ[2] + eUInpCoef*qiUinpJ[2]; + Vji[3] = ePermCoef*qiQI[3] + eUIndCoef*qiUindI[2] + eUInpCoef*qiUinpI[2]; + VijR[3] = dPermCoef*qiQJ[3] + dUIndCoef*qiUindJ[2] + dUInpCoef*qiUinpJ[2]; + VjiR[3] = dPermCoef*qiQI[3] + dUIndCoef*qiUindI[2] + dUInpCoef*qiUinpI[2]; + Vijp[1] = eUInpCoef*qiQJ[2]; + Vijd[1] = eUIndCoef*qiQJ[2]; + Vjip[1] = eUInpCoef*qiQI[2]; + Vjid[1] = eUIndCoef*qiQI[2]; + Vijp[2] = eUInpCoef*qiQJ[3]; + Vijd[2] = eUIndCoef*qiQJ[3]; + Vjip[2] = eUInpCoef*qiQI[3]; + Vjid[2] = eUIndCoef*qiQI[3]; + + // C-Q terms (m=0) + ePermCoef = mScale*rInvVec[3]; + dPermCoef = -1.5*rInvVec[4]*mScale; + Vij[0] += ePermCoef*qiQJ[4]; + Vji[4] = ePermCoef*qiQI[0]; + VijR[0] += dPermCoef*qiQJ[4]; + VjiR[4] = dPermCoef*qiQI[0]; + // Q-C terms (m=0) + Vij[4] = ePermCoef*qiQJ[0]; + Vji[0] += ePermCoef*qiQI[4]; + VijR[4] = dPermCoef*qiQJ[0]; + VjiR[0] += dPermCoef*qiQI[4]; + + // D-Q and Uind-Q terms (m=0) + ePermCoef = rInvVec[4]*3.0*mScale; + eUIndCoef = rInvVec[4]*3.0*pScale*thole_q0; + eUInpCoef = rInvVec[4]*3.0*dScale*thole_q0; + dPermCoef = -6.0*rInvVec[5]*mScale; + dUIndCoef = -12.0*rInvVec[5]*pScale*dthole_q0; + dUInpCoef = -12.0*rInvVec[5]*dScale*dthole_q0; + Vij[1] += ePermCoef*qiQJ[4]; + Vji[4] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] += dPermCoef*qiQJ[4]; + VjiR[4] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] += eUInpCoef*qiQJ[4]; + Vijd[0] += eUIndCoef*qiQJ[4]; + // Q-D and Q-Uind terms (m=0) + Vij[4] += -(ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]); + Vji[1] += -(ePermCoef*qiQI[4]); + VijR[4] += -(dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]); + VjiR[1] += -(dPermCoef*qiQI[4]); + Vjip[0] += -(eUInpCoef*qiQI[4]); + Vjid[0] += -(eUIndCoef*qiQI[4]); + + // D-Q and Uind-Q terms (m=1) + ePermCoef = -sqrtThree*rInvVec[4]*mScale; + eUIndCoef = -sqrtThree*rInvVec[4]*pScale*thole_q1; + eUInpCoef = -sqrtThree*rInvVec[4]*dScale*thole_q1; + dPermCoef = 2.0*sqrtThree*rInvVec[5]*mScale; + dUIndCoef = 4.0*sqrtThree*rInvVec[5]*pScale*dthole_q1; + dUInpCoef = 4.0*sqrtThree*rInvVec[5]*dScale*dthole_q1; + Vij[2] += ePermCoef*qiQJ[5]; + Vji[5] = ePermCoef*qiQI[2] + eUIndCoef*qiUindI[1] + eUInpCoef*qiUinpI[1]; + VijR[2] += dPermCoef*qiQJ[5]; + VjiR[5] = dPermCoef*qiQI[2] + dUIndCoef*qiUindI[1] + dUInpCoef*qiUinpI[1]; + Vij[3] += ePermCoef*qiQJ[6]; + Vji[6] = ePermCoef*qiQI[3] + eUIndCoef*qiUindI[2] + eUInpCoef*qiUinpI[2]; + VijR[3] += dPermCoef*qiQJ[6]; + VjiR[6] = dPermCoef*qiQI[3] + dUIndCoef*qiUindI[2] + dUInpCoef*qiUinpI[2]; + Vijp[1] += eUInpCoef*qiQJ[5]; + Vijd[1] += eUIndCoef*qiQJ[5]; + Vijp[2] += eUInpCoef*qiQJ[6]; + Vijd[2] += eUIndCoef*qiQJ[6]; + // D-Q and Uind-Q terms (m=1) + Vij[5] = -(ePermCoef*qiQJ[2] + eUIndCoef*qiUindJ[1] + eUInpCoef*qiUinpJ[1]); + Vji[2] += -(ePermCoef*qiQI[5]); + VijR[5] = -(dPermCoef*qiQJ[2] + dUIndCoef*qiUindJ[1] + dUInpCoef*qiUinpJ[1]); + VjiR[2] += -(dPermCoef*qiQI[5]); + Vij[6] = -(ePermCoef*qiQJ[3] + eUIndCoef*qiUindJ[2] + eUInpCoef*qiUinpJ[2]); + Vji[3] += -(ePermCoef*qiQI[6]); + VijR[6] = -(dPermCoef*qiQJ[3] + dUIndCoef*qiUindJ[2] + dUInpCoef*qiUinpJ[2]); + VjiR[3] += -(dPermCoef*qiQI[6]); + Vjip[1] += -(eUInpCoef*qiQI[5]); + Vjid[1] += -(eUIndCoef*qiQI[5]); + Vjip[2] += -(eUInpCoef*qiQI[6]); + Vjid[2] += -(eUIndCoef*qiQI[6]); + + // Q-Q terms (m=0) + ePermCoef = 6.0*rInvVec[5]*mScale; + dPermCoef = -15.0*rInvVec[6]*mScale; + Vij[4] += ePermCoef*qiQJ[4]; + Vji[4] += ePermCoef*qiQI[4]; + VijR[4] += dPermCoef*qiQJ[4]; + VjiR[4] += dPermCoef*qiQI[4]; + // Q-Q terms (m=1) + ePermCoef = -4.0*rInvVec[5]*mScale; + dPermCoef = 10.0*rInvVec[6]*mScale; + Vij[5] += ePermCoef*qiQJ[5]; + Vji[5] += ePermCoef*qiQI[5]; + VijR[5] += dPermCoef*qiQJ[5]; + VjiR[5] += dPermCoef*qiQI[5]; + Vij[6] += ePermCoef*qiQJ[6]; + Vji[6] += ePermCoef*qiQI[6]; + VijR[6] += dPermCoef*qiQJ[6]; + VjiR[6] += dPermCoef*qiQI[6]; + // Q-Q terms (m=2) + ePermCoef = rInvVec[5]*mScale; + dPermCoef = -2.5*rInvVec[6]*mScale; + Vij[7] = ePermCoef*qiQJ[7]; + Vji[7] = ePermCoef*qiQI[7]; + VijR[7] = dPermCoef*qiQJ[7]; + VjiR[7] = dPermCoef*qiQI[7]; + Vij[8] = ePermCoef*qiQJ[8]; + Vji[8] = ePermCoef*qiQI[8]; + VijR[8] = dPermCoef*qiQJ[8]; + VjiR[8] = dPermCoef*qiQI[8]; + + // Evaluate the energies, forces and torques due to permanent+induced moments + // interacting with just the permanent moments. + RealOpenMM energy = 0.5*(qiQI[0]*Vij[0] + qiQJ[0]*Vji[0]); + RealOpenMM fIZ = qiQI[0]*VijR[0]; + RealOpenMM fJZ = qiQJ[0]*VjiR[0]; + RealOpenMM EIX = 0.0, EIY = 0.0, EIZ = 0.0, EJX = 0.0, EJY = 0.0, EJZ = 0.0; + for(int i = 1; i < 9; ++i){ + energy += 0.5*(qiQI[i]*Vij[i] + qiQJ[i]*Vji[i]); + fIZ += qiQI[i]*VijR[i]; + fJZ += qiQJ[i]*VjiR[i]; + EIX += qiQIX[i]*Vij[i]; + EIY += qiQIY[i]*Vij[i]; + EIZ += qiQIZ[i]*Vij[i]; + EJX += qiQJX[i]*Vji[i]; + EJY += qiQJY[i]*Vji[i]; + EJZ += qiQJZ[i]*Vji[i]; + } - forces[iIndex] -= force; - forces[kIndex] += force; + // Define the torque intermediates for the induced dipoles. These are simply the induced dipole torque + // intermediates dotted with the field due to permanent moments only, at each center. We inline the + // induced dipole torque intermediates here, for simplicity. N.B. There are no torques on the dipoles + // themselves, so we accumulate the torque intermediates into separate variables to allow them to be + // used only in the force calculation. + // + // The torque about the x axis (needed to obtain the y force on the induced dipoles, below) + // qiUindIx[0] = qiQUindI[2]; qiUindIx[1] = 0; qiUindIx[2] = -qiQUindI[0] + RealOpenMM iEIX = qiUinpI[2]*Vijp[0] + qiUindI[2]*Vijd[0] - qiUinpI[0]*Vijp[2] - qiUindI[0]*Vijd[2]; + RealOpenMM iEJX = qiUinpJ[2]*Vjip[0] + qiUindJ[2]*Vjid[0] - qiUinpJ[0]*Vjip[2] - qiUindJ[0]*Vjid[2]; + // The torque about the y axis (needed to obtain the x force on the induced dipoles, below) + // qiUindIy[0] = -qiQUindI[1]; qiUindIy[1] = qiQUindI[0]; qiUindIy[2] = 0 + RealOpenMM iEIY = qiUinpI[0]*Vijp[1] + qiUindI[0]*Vijd[1] - qiUinpI[1]*Vijp[0] - qiUindI[1]*Vijd[0]; + RealOpenMM iEJY = qiUinpJ[0]*Vjip[1] + qiUindJ[0]*Vjid[1] - qiUinpJ[1]*Vjip[0] - qiUindJ[1]*Vjid[0]; + + // Add in the induced-induced terms, if needed. + if(getPolarizationType() == AmoebaReferenceMultipoleForce::Mutual){ + // Uind-Uind terms (m=0) + RealOpenMM eCoef = -4.0*rInvVec[3]*uScale*thole_d0; + RealOpenMM dCoef = 6.0*rInvVec[4]*uScale*dthole_d0; + iEIX += eCoef*(qiUinpI[2]*qiUindJ[0] + qiUindI[2]*qiUinpJ[0]); + iEJX += eCoef*(qiUinpJ[2]*qiUindI[0] + qiUindJ[2]*qiUinpI[0]); + iEIY -= eCoef*(qiUinpI[1]*qiUindJ[0] + qiUindI[1]*qiUinpJ[0]); + iEJY -= eCoef*(qiUinpJ[1]*qiUindI[0] + qiUindJ[1]*qiUinpI[0]); + fIZ += dCoef*(qiUinpI[0]*qiUindJ[0] + qiUindI[0]*qiUinpJ[0]); + fIZ += dCoef*(qiUinpJ[0]*qiUindI[0] + qiUindJ[0]*qiUinpI[0]); + // Uind-Uind terms (m=1) + eCoef = 2.0*rInvVec[3]*uScale*thole_d1; + dCoef = -3.0*rInvVec[4]*uScale*dthole_d1; + iEIX -= eCoef*(qiUinpI[0]*qiUindJ[2] + qiUindI[0]*qiUinpJ[2]); + iEJX -= eCoef*(qiUinpJ[0]*qiUindI[2] + qiUindJ[0]*qiUinpI[2]); + iEIY += eCoef*(qiUinpI[0]*qiUindJ[1] + qiUindI[0]*qiUinpJ[1]); + iEJY += eCoef*(qiUinpJ[0]*qiUindI[1] + qiUindJ[0]*qiUinpI[1]); + fIZ += dCoef*(qiUinpI[1]*qiUindJ[1] + qiUindI[1]*qiUinpJ[1] + qiUinpI[2]*qiUindJ[2] + qiUindI[2]*qiUinpJ[2]); + fIZ += dCoef*(qiUinpJ[1]*qiUindI[1] + qiUindJ[1]*qiUinpI[1] + qiUinpJ[2]*qiUindI[2] + qiUindJ[2]*qiUinpI[2]); + } - torque[iIndex] += (ttm2*scalingFactors[M_SCALE] + ttm2i)*f; - torque[kIndex] += (ttm3*scalingFactors[M_SCALE] + ttm3i)*f; + // The quasi-internal frame forces and torques. Note that the induced torque intermediates are + // used in the force expression, but not in the torques; the induced dipoles are isotropic. + RealOpenMM qiForce[3] = {rInv*(EIY+EJY+iEIY+iEJY), -rInv*(EIX+EJX+iEIX+iEJX), -(fJZ+fIZ)}; + RealOpenMM qiTorqueI[3] = {-EIX, -EIY, -EIZ}; + RealOpenMM qiTorqueJ[3] = {-EJX, -EJY, -EJZ}; + // Rotate the forces and torques back to the lab frame + for (int ii = 0; ii < 3; ii++) { + RealOpenMM forceVal = 0.0; + RealOpenMM torqueIVal = 0.0; + RealOpenMM torqueJVal = 0.0; + for (int jj = 0; jj < 3; jj++) { + forceVal += forceRotationMatrix[ii][jj] * qiForce[jj]; + torqueIVal += forceRotationMatrix[ii][jj] * qiTorqueI[jj]; + torqueJVal += forceRotationMatrix[ii][jj] * qiTorqueJ[jj]; + } + torque[iIndex][ii] += torqueIVal; + torque[kIndex][ii] += torqueJVal; + forces[iIndex][ii] -= forceVal; + forces[kIndex][ii] += forceVal; + } return energy; } @@ -1755,10 +1928,9 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateElectrostaticPotentialForPart RealOpenMM r = SQRT(r2); RealOpenMM rr1 = 1.0/r; - RealOpenMM potential = particleI.charge*rr1; - RealOpenMM rr2 = rr1*rr1; RealOpenMM rr3 = rr1*rr2; + RealOpenMM potential = particleI.charge*rr1; RealOpenMM scd = particleI.dipole.dot(deltaR); RealOpenMM scu = _inducedDipole[particleI.particleIndex].dot(deltaR); @@ -1769,9 +1941,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateElectrostaticPotentialForPart scq += deltaR[1]*(particleI.quadrupole[QXY]*deltaR[0] + particleI.quadrupole[QYY]*deltaR[1] + particleI.quadrupole[QYZ]*deltaR[2]); scq += deltaR[2]*(particleI.quadrupole[QXZ]*deltaR[0] + particleI.quadrupole[QYZ]*deltaR[1] + particleI.quadrupole[QZZ]*deltaR[2]); potential += scq*rr5; - return potential; - } void AmoebaReferenceMultipoleForce::calculateElectrostaticPotential(const vector& particlePositions, @@ -4741,6 +4911,9 @@ void AmoebaReferencePmeMultipoleForce::calculateFixedMultipoleFieldPairIxn(const RealOpenMM dscale, RealOpenMM pscale) { + unsigned int iIndex = particleI.particleIndex; + unsigned int jIndex = particleJ.particleIndex; + // compute the real space portion of the Ewald summation if (particleI.particleIndex == particleJ.particleIndex) @@ -4815,8 +4988,6 @@ void AmoebaReferencePmeMultipoleForce::calculateFixedMultipoleFieldPairIxn(const // increment the field at each site due to this interaction - unsigned int iIndex = particleI.particleIndex; - unsigned int jIndex = particleJ.particleIndex; _fixedMultipoleField[iIndex] += fim - fid; _fixedMultipoleField[jIndex] += fjm - fjd; @@ -4980,9 +5151,9 @@ void AmoebaReferencePmeMultipoleForce::transformMultipolesToFractionalCoordinate b[i][j] += a[index1[i]][index2[j]]*a[index2[i]][index1[j]]; } } - + // Transform the multipoles. - + _transformed.resize(particleData.size()); double quadScale[] = {1, 2, 2, 1, 2, 1}; for (int i = 0; i < (int) particleData.size(); i++) { @@ -5634,9 +5805,9 @@ RealOpenMM AmoebaReferencePmeMultipoleForce::computeReciprocalSpaceInducedDipole inducedDipolePolar[1] = _inducedDipolePolar[i][0]*cartToFrac[1][0] + _inducedDipolePolar[i][1]*cartToFrac[1][1] + _inducedDipolePolar[i][2]*cartToFrac[1][2]; inducedDipolePolar[2] = _inducedDipolePolar[i][0]*cartToFrac[2][0] + _inducedDipolePolar[i][1]*cartToFrac[2][1] + _inducedDipolePolar[i][2]*cartToFrac[2][2]; - energy += inducedDipole[0]*_phi[20*i+1]; - energy += inducedDipole[1]*_phi[20*i+2]; - energy += inducedDipole[2]*_phi[20*i+3]; + energy += (inducedDipole[0]+inducedDipolePolar[0])*_phi[20*i+1]; + energy += (inducedDipole[1]+inducedDipolePolar[1])*_phi[20*i+2]; + energy += (inducedDipole[2]+inducedDipolePolar[2])*_phi[20*i+3]; RealVec f = RealVec(0.0, 0.0, 0.0); @@ -5670,7 +5841,7 @@ RealOpenMM AmoebaReferencePmeMultipoleForce::computeReciprocalSpaceInducedDipole f[0]*fracToCart[1][0] + f[1]*fracToCart[1][1] + f[2]*fracToCart[1][2], f[0]*fracToCart[2][0] + f[1]*fracToCart[2][1] + f[2]*fracToCart[2][2]); } - return (0.5*_electric*energy); + return (0.25*_electric*energy); } void AmoebaReferencePmeMultipoleForce::recordFixedMultipoleField() @@ -5854,21 +6025,21 @@ RealOpenMM AmoebaReferencePmeMultipoleForce::calculatePmeSelfEnergy(const vector const MultipoleParticleData& particleI = particleData[ii]; - cii += particleI.charge*particleI.charge; - dii += particleI.dipole.dot(particleI.dipole + _inducedDipole[ii]) ; - - qii += particleI.quadrupole[QXX]*particleI.quadrupole[QXX] + - particleI.quadrupole[QYY]*particleI.quadrupole[QYY] + - particleI.quadrupole[QZZ]*particleI.quadrupole[QZZ] + - (particleI.quadrupole[QXY]*particleI.quadrupole[QXY] + - particleI.quadrupole[QXZ]*particleI.quadrupole[QXZ] + - particleI.quadrupole[QYZ]*particleI.quadrupole[QYZ])*2.0; - - } + cii += particleI.charge*particleI.charge; - RealOpenMM term = 2.0*_alphaEwald*_alphaEwald; - RealOpenMM energy = (cii + term*(dii/3.0 + 2.0*term*qii/5.0)); - energy *= -(_electric*_alphaEwald/(_dielectric*SQRT_PI)); + RealVec dipole(particleI.sphericalDipole[1], particleI.sphericalDipole[2], particleI.sphericalDipole[0]); + dii += dipole.dot(dipole + (_inducedDipole[ii]+_inducedDipolePolar[ii])*0.5); + + qii += (particleI.sphericalQuadrupole[0]*particleI.sphericalQuadrupole[0] + +particleI.sphericalQuadrupole[1]*particleI.sphericalQuadrupole[1] + +particleI.sphericalQuadrupole[2]*particleI.sphericalQuadrupole[2] + +particleI.sphericalQuadrupole[3]*particleI.sphericalQuadrupole[3] + +particleI.sphericalQuadrupole[4]*particleI.sphericalQuadrupole[4]); + } + RealOpenMM prefac = -_alphaEwald * _electric / (_dielectric*SQRT_PI); + RealOpenMM a2 = _alphaEwald * _alphaEwald; + RealOpenMM a4 = a2*a2; + RealOpenMM energy = prefac*(cii + twoThirds*a2*dii + fourOverFifteen*a4*qii); return energy; } @@ -5876,12 +6047,12 @@ void AmoebaReferencePmeMultipoleForce::calculatePmeSelfTorque(const vector& torques) const { RealOpenMM term = (2.0/3.0)*(_electric/_dielectric)*(_alphaEwald*_alphaEwald*_alphaEwald)/SQRT_PI; - for (unsigned int ii = 0; ii < _numParticles; ii++) { const MultipoleParticleData& particleI = particleData[ii]; RealVec ui = (_inducedDipole[ii] + _inducedDipolePolar[ii]); - RealVec torque = particleI.dipole.cross(ui); + RealVec dipole(particleI.sphericalDipole[1], particleI.sphericalDipole[2], particleI.sphericalDipole[0]); + RealVec torque = dipole.cross(ui); torque *= term; torques[ii] += torque; } @@ -5904,681 +6075,402 @@ RealOpenMM AmoebaReferencePmeMultipoleForce::calculatePmeDirectElectrostaticPair if (r2 > _cutoffDistanceSquared)return 0.0; - RealOpenMM xr = deltaR[0]; - RealOpenMM yr = deltaR[1]; - RealOpenMM zr = deltaR[2]; - RealOpenMM r = SQRT(r2); - RealOpenMM ck = particleJ.charge; - - // set the permanent multipole and induced dipole values; - - RealOpenMM ci = particleI.charge; - - RealOpenMM di1 = particleI.dipole[0]; - RealOpenMM di2 = particleI.dipole[1]; - RealOpenMM di3 = particleI.dipole[2]; - - RealOpenMM qi1 = particleI.quadrupole[QXX]; - RealOpenMM qi2 = particleI.quadrupole[QXY]; - RealOpenMM qi3 = particleI.quadrupole[QXZ]; - RealOpenMM qi5 = particleI.quadrupole[QYY]; - RealOpenMM qi6 = particleI.quadrupole[QYZ]; - RealOpenMM qi9 = -(particleI.quadrupole[QXX] + particleI.quadrupole[QYY]); - - RealOpenMM dk1 = particleJ.dipole[0]; - RealOpenMM dk2 = particleJ.dipole[1]; - RealOpenMM dk3 = particleJ.dipole[2]; - - RealOpenMM qk1 = particleJ.quadrupole[QXX]; - RealOpenMM qk2 = particleJ.quadrupole[QXY]; - RealOpenMM qk3 = particleJ.quadrupole[QXZ]; - RealOpenMM qk5 = particleJ.quadrupole[QYY]; - RealOpenMM qk6 = particleJ.quadrupole[QYZ]; - RealOpenMM qk9 = -(particleJ.quadrupole[QXX] + particleJ.quadrupole[QYY]); - // calculate the real space error function terms - - RealOpenMM ralpha = _alphaEwald*r; - RealOpenMM bn0 = erfc(ralpha)/r; - - RealOpenMM alsq2 = 2.0*_alphaEwald*_alphaEwald; - RealOpenMM alsq2n = 0.0; - if (_alphaEwald > 0.0) { - alsq2n = 1.0/(SQRT_PI*_alphaEwald); + // Start by constructing rotation matrices to put dipoles and + // quadrupoles into the QI frame, from the lab frame. + RealOpenMM qiRotationMatrix1[3][3]; + formQIRotationMatrix(particleI.position, particleJ.position, deltaR, r, qiRotationMatrix1); + RealOpenMM qiRotationMatrix2[5][5]; + buildSphericalQuadrupoleRotationMatrix(qiRotationMatrix1, qiRotationMatrix2); + // The force rotation matrix rotates the QI forces into the lab + // frame, and makes sure the result is in {x,y,z} ordering. Its + // transpose is used to rotate the induced dipoles to the QI frame. + RealOpenMM forceRotationMatrix[3][3]; + forceRotationMatrix[0][0] = qiRotationMatrix1[1][1]; + forceRotationMatrix[0][1] = qiRotationMatrix1[2][1]; + forceRotationMatrix[0][2] = qiRotationMatrix1[0][1]; + forceRotationMatrix[1][0] = qiRotationMatrix1[1][2]; + forceRotationMatrix[1][1] = qiRotationMatrix1[2][2]; + forceRotationMatrix[1][2] = qiRotationMatrix1[0][2]; + forceRotationMatrix[2][0] = qiRotationMatrix1[1][0]; + forceRotationMatrix[2][1] = qiRotationMatrix1[2][0]; + forceRotationMatrix[2][2] = qiRotationMatrix1[0][0]; + // For efficiency, we go ahead and cache that transposed version + // now, because we need to do 4 rotations in total (I,J, and p,d). + // We also fold in the factor of 0.5 needed to average the p and d + // components. + RealOpenMM inducedDipoleRotationMatrix[3][3]; + inducedDipoleRotationMatrix[0][0] = 0.5*qiRotationMatrix1[0][1]; + inducedDipoleRotationMatrix[0][1] = 0.5*qiRotationMatrix1[0][2]; + inducedDipoleRotationMatrix[0][2] = 0.5*qiRotationMatrix1[0][0]; + inducedDipoleRotationMatrix[1][0] = 0.5*qiRotationMatrix1[1][1]; + inducedDipoleRotationMatrix[1][1] = 0.5*qiRotationMatrix1[1][2]; + inducedDipoleRotationMatrix[1][2] = 0.5*qiRotationMatrix1[1][0]; + inducedDipoleRotationMatrix[2][0] = 0.5*qiRotationMatrix1[2][1]; + inducedDipoleRotationMatrix[2][1] = 0.5*qiRotationMatrix1[2][2]; + inducedDipoleRotationMatrix[2][2] = 0.5*qiRotationMatrix1[2][0]; + + // Rotate the induced dipoles to the QI frame. + RealOpenMM qiUindI[3], qiUindJ[3], qiUinpI[3], qiUinpJ[3]; + for (int ii = 0; ii < 3; ii++) { + RealOpenMM valIP = 0.0; + RealOpenMM valID = 0.0; + RealOpenMM valJP = 0.0; + RealOpenMM valJD = 0.0; + for (int jj = 0; jj < 3; jj++) { + valIP += inducedDipoleRotationMatrix[ii][jj] * _inducedDipolePolar[iIndex][jj]; + valID += inducedDipoleRotationMatrix[ii][jj] * _inducedDipole[iIndex][jj]; + valJP += inducedDipoleRotationMatrix[ii][jj] * _inducedDipolePolar[jIndex][jj]; + valJD += inducedDipoleRotationMatrix[ii][jj] * _inducedDipole[jIndex][jj]; + } + qiUindI[ii] = valID; + qiUinpI[ii] = valIP; + qiUindJ[ii] = valJD; + qiUinpJ[ii] = valJP; } - RealOpenMM exp2a = EXP(-(ralpha*ralpha)); - - alsq2n *= alsq2; - RealOpenMM bn1 = (bn0+alsq2n*exp2a)/r2; - - alsq2n *= alsq2; - RealOpenMM bn2 = (3.0*bn1+alsq2n*exp2a)/r2; - - alsq2n *= alsq2; - RealOpenMM bn3 = (5.0*bn2+alsq2n*exp2a)/r2; - - alsq2n *= alsq2; - RealOpenMM bn4 = (7.0*bn3+alsq2n*exp2a)/r2; - - alsq2n *= alsq2; - RealOpenMM bn5 = (9.0*bn4+alsq2n*exp2a)/r2; - // apply Thole polarization damping to scale factors - - RealOpenMM rr1 = 1.0/r; - RealOpenMM rr3 = rr1/r2; - RealOpenMM rr5 = 3.0*rr3/r2; - RealOpenMM rr7 = 5.0*rr5/r2; - RealOpenMM rr9 = 7.0*rr7/r2; - RealOpenMM rr11 = 9.0*rr9/r2; - - RealOpenMM scale3 = 1.0; - RealOpenMM scale5 = 1.0; - RealOpenMM scale7 = 1.0; - - RealOpenMM ddsc31 = 0.0; - RealOpenMM ddsc32 = 0.0; - RealOpenMM ddsc33 = 0.0; - - RealOpenMM ddsc51 = 0.0; - RealOpenMM ddsc52 = 0.0; - RealOpenMM ddsc53 = 0.0; - - RealOpenMM ddsc71 = 0.0; - RealOpenMM ddsc72 = 0.0; - RealOpenMM ddsc73 = 0.0; - - RealOpenMM damp = particleI.dampingFactor*particleJ.dampingFactor; - if (damp != 0.0) { - RealOpenMM pgamma = particleI.thole < particleJ.thole ? particleI.thole : particleJ.thole; - RealOpenMM ratio = r/damp; - damp = -pgamma*ratio*ratio*ratio; - if (damp > -50.0) { - RealOpenMM expdamp = EXP(damp); - scale3 = 1.0 - expdamp; - scale5 = 1.0 - (1.0-damp)*expdamp; - scale7 = 1.0 - (1.0-damp+0.6*damp*damp)*expdamp; - RealOpenMM temp3 = -3.0 * damp * expdamp / r2; - RealOpenMM temp5 = -damp; - RealOpenMM temp7 = -0.2 - 0.6*damp; - - ddsc31 = temp3 * xr; - ddsc32 = temp3 * yr; - ddsc33 = temp3 * zr; - - ddsc51 = temp5 * ddsc31; - ddsc52 = temp5 * ddsc32; - ddsc53 = temp5 * ddsc33; - - ddsc71 = temp7 * ddsc51; - ddsc72 = temp7 * ddsc52; - ddsc73 = temp7 * ddsc53; + // The Qtilde intermediates (QI frame multipoles) for atoms I and J + RealOpenMM qiQI[9], qiQJ[9]; + // Rotate the permanent multipoles to the QI frame. + qiQI[0] = particleI.charge; + qiQJ[0] = particleJ.charge; + for (int ii = 0; ii < 3; ii++) { + RealOpenMM valI = 0.0; + RealOpenMM valJ = 0.0; + for (int jj = 0; jj < 3; jj++) { + valI += qiRotationMatrix1[ii][jj] * particleI.sphericalDipole[jj]; + valJ += qiRotationMatrix1[ii][jj] * particleJ.sphericalDipole[jj]; } + qiQI[ii+1] = valI; + qiQJ[ii+1] = valJ; + } + for (int ii = 0; ii < 5; ii++) { + RealOpenMM valI = 0.0; + RealOpenMM valJ = 0.0; + for (int jj = 0; jj < 5; jj++) { + valI += qiRotationMatrix2[ii][jj] * particleI.sphericalQuadrupole[jj]; + valJ += qiRotationMatrix2[ii][jj] * particleJ.sphericalQuadrupole[jj]; + } + qiQI[ii+4] = valI; + qiQJ[ii+4] = valJ; } - RealOpenMM dsc3 = 1.0 - scale3*scalingFactors[D_SCALE]; - RealOpenMM dsc5 = 1.0 - scale5*scalingFactors[D_SCALE]; - RealOpenMM dsc7 = 1.0 - scale7*scalingFactors[D_SCALE]; - - RealOpenMM psc3 = 1.0 - scale3*scalingFactors[P_SCALE]; - RealOpenMM psc5 = 1.0 - scale5*scalingFactors[P_SCALE]; - RealOpenMM psc7 = 1.0 - scale7*scalingFactors[P_SCALE]; - - RealOpenMM usc3 = 1.0 - scale3*scalingFactors[U_SCALE]; - RealOpenMM usc5 = 1.0 - scale5*scalingFactors[U_SCALE]; - - // construct necessary auxiliary vectors - - RealOpenMM dixdk1 = di2*dk3 - di3*dk2; - RealOpenMM dixdk2 = di3*dk1 - di1*dk3; - RealOpenMM dixdk3 = di1*dk2 - di2*dk1; - - RealOpenMM dixuk1 = di2*_inducedDipole[jIndex][2] - di3*_inducedDipole[jIndex][1]; - RealOpenMM dixuk2 = di3*_inducedDipole[jIndex][0] - di1*_inducedDipole[jIndex][2]; - RealOpenMM dixuk3 = di1*_inducedDipole[jIndex][1] - di2*_inducedDipole[jIndex][0]; - RealOpenMM dkxui1 = dk2*_inducedDipole[iIndex][2] - dk3*_inducedDipole[iIndex][1]; - RealOpenMM dkxui2 = dk3*_inducedDipole[iIndex][0] - dk1*_inducedDipole[iIndex][2]; - RealOpenMM dkxui3 = dk1*_inducedDipole[iIndex][1] - dk2*_inducedDipole[iIndex][0]; - - RealOpenMM dixukp1 = di2*_inducedDipolePolar[jIndex][2] - di3*_inducedDipolePolar[jIndex][1]; - RealOpenMM dixukp2 = di3*_inducedDipolePolar[jIndex][0] - di1*_inducedDipolePolar[jIndex][2]; - RealOpenMM dixukp3 = di1*_inducedDipolePolar[jIndex][1] - di2*_inducedDipolePolar[jIndex][0]; - RealOpenMM dkxuip1 = dk2*_inducedDipolePolar[iIndex][2] - dk3*_inducedDipolePolar[iIndex][1]; - RealOpenMM dkxuip2 = dk3*_inducedDipolePolar[iIndex][0] - dk1*_inducedDipolePolar[iIndex][2]; - RealOpenMM dkxuip3 = dk1*_inducedDipolePolar[iIndex][1] - dk2*_inducedDipolePolar[iIndex][0]; - - RealOpenMM dixr1 = di2*zr - di3*yr; - RealOpenMM dixr2 = di3*xr - di1*zr; - RealOpenMM dixr3 = di1*yr - di2*xr; - - RealOpenMM dkxr1 = dk2*zr - dk3*yr; - RealOpenMM dkxr2 = dk3*xr - dk1*zr; - RealOpenMM dkxr3 = dk1*yr - dk2*xr; - - RealOpenMM qir1 = qi1*xr + qi2*yr + qi3*zr; - RealOpenMM qir2 = qi2*xr + qi5*yr + qi6*zr; - RealOpenMM qir3 = qi3*xr + qi6*yr + qi9*zr; - - RealOpenMM qkr1 = qk1*xr + qk2*yr + qk3*zr; - RealOpenMM qkr2 = qk2*xr + qk5*yr + qk6*zr; - RealOpenMM qkr3 = qk3*xr + qk6*yr + qk9*zr; - - RealOpenMM qiqkr1 = qi1*qkr1 + qi2*qkr2 + qi3*qkr3; - RealOpenMM qiqkr2 = qi2*qkr1 + qi5*qkr2 + qi6*qkr3; - RealOpenMM qiqkr3 = qi3*qkr1 + qi6*qkr2 + qi9*qkr3; - - RealOpenMM qkqir1 = qk1*qir1 + qk2*qir2 + qk3*qir3; - RealOpenMM qkqir2 = qk2*qir1 + qk5*qir2 + qk6*qir3; - RealOpenMM qkqir3 = qk3*qir1 + qk6*qir2 + qk9*qir3; - - RealOpenMM qixqk1 = qi2*qk3 + qi5*qk6 + qi6*qk9 - qi3*qk2 - qi6*qk5 - qi9*qk6; - RealOpenMM qixqk2 = qi3*qk1 + qi6*qk2 + qi9*qk3 - qi1*qk3 - qi2*qk6 - qi3*qk9; - RealOpenMM qixqk3 = qi1*qk2 + qi2*qk5 + qi3*qk6 - qi2*qk1 - qi5*qk2 - qi6*qk3; - - RealOpenMM rxqir1 = yr*qir3 - zr*qir2; - RealOpenMM rxqir2 = zr*qir1 - xr*qir3; - RealOpenMM rxqir3 = xr*qir2 - yr*qir1; - - RealOpenMM rxqkr1 = yr*qkr3 - zr*qkr2; - RealOpenMM rxqkr2 = zr*qkr1 - xr*qkr3; - RealOpenMM rxqkr3 = xr*qkr2 - yr*qkr1; - - RealOpenMM rxqikr1 = yr*qiqkr3 - zr*qiqkr2; - RealOpenMM rxqikr2 = zr*qiqkr1 - xr*qiqkr3; - RealOpenMM rxqikr3 = xr*qiqkr2 - yr*qiqkr1; - - RealOpenMM rxqkir1 = yr*qkqir3 - zr*qkqir2; - RealOpenMM rxqkir2 = zr*qkqir1 - xr*qkqir3; - RealOpenMM rxqkir3 = xr*qkqir2 - yr*qkqir1; - - RealOpenMM qkrxqir1 = qkr2*qir3 - qkr3*qir2; - RealOpenMM qkrxqir2 = qkr3*qir1 - qkr1*qir3; - RealOpenMM qkrxqir3 = qkr1*qir2 - qkr2*qir1; - - RealOpenMM qidk1 = qi1*dk1 + qi2*dk2 + qi3*dk3; - RealOpenMM qidk2 = qi2*dk1 + qi5*dk2 + qi6*dk3; - RealOpenMM qidk3 = qi3*dk1 + qi6*dk2 + qi9*dk3; - - RealOpenMM qkdi1 = qk1*di1 + qk2*di2 + qk3*di3; - RealOpenMM qkdi2 = qk2*di1 + qk5*di2 + qk6*di3; - RealOpenMM qkdi3 = qk3*di1 + qk6*di2 + qk9*di3; - - RealOpenMM qiuk1 = qi1*_inducedDipole[jIndex][0] + qi2*_inducedDipole[jIndex][1] + qi3*_inducedDipole[jIndex][2]; - RealOpenMM qiuk2 = qi2*_inducedDipole[jIndex][0] + qi5*_inducedDipole[jIndex][1] + qi6*_inducedDipole[jIndex][2]; - RealOpenMM qiuk3 = qi3*_inducedDipole[jIndex][0] + qi6*_inducedDipole[jIndex][1] + qi9*_inducedDipole[jIndex][2]; - - RealOpenMM qkui1 = qk1*_inducedDipole[iIndex][0] + qk2*_inducedDipole[iIndex][1] + qk3*_inducedDipole[iIndex][2]; - RealOpenMM qkui2 = qk2*_inducedDipole[iIndex][0] + qk5*_inducedDipole[iIndex][1] + qk6*_inducedDipole[iIndex][2]; - RealOpenMM qkui3 = qk3*_inducedDipole[iIndex][0] + qk6*_inducedDipole[iIndex][1] + qk9*_inducedDipole[iIndex][2]; - - RealOpenMM qiukp1 = qi1*_inducedDipolePolar[jIndex][0] + qi2*_inducedDipolePolar[jIndex][1] + qi3*_inducedDipolePolar[jIndex][2]; - RealOpenMM qiukp2 = qi2*_inducedDipolePolar[jIndex][0] + qi5*_inducedDipolePolar[jIndex][1] + qi6*_inducedDipolePolar[jIndex][2]; - RealOpenMM qiukp3 = qi3*_inducedDipolePolar[jIndex][0] + qi6*_inducedDipolePolar[jIndex][1] + qi9*_inducedDipolePolar[jIndex][2]; - - RealOpenMM qkuip1 = qk1*_inducedDipolePolar[iIndex][0] + qk2*_inducedDipolePolar[iIndex][1] + qk3*_inducedDipolePolar[iIndex][2]; - RealOpenMM qkuip2 = qk2*_inducedDipolePolar[iIndex][0] + qk5*_inducedDipolePolar[iIndex][1] + qk6*_inducedDipolePolar[iIndex][2]; - RealOpenMM qkuip3 = qk3*_inducedDipolePolar[iIndex][0] + qk6*_inducedDipolePolar[iIndex][1] + qk9*_inducedDipolePolar[iIndex][2]; - - RealOpenMM dixqkr1 = di2*qkr3 - di3*qkr2; - RealOpenMM dixqkr2 = di3*qkr1 - di1*qkr3; - RealOpenMM dixqkr3 = di1*qkr2 - di2*qkr1; - - RealOpenMM dkxqir1 = dk2*qir3 - dk3*qir2; - RealOpenMM dkxqir2 = dk3*qir1 - dk1*qir3; - RealOpenMM dkxqir3 = dk1*qir2 - dk2*qir1; - - RealOpenMM uixqkr1 = _inducedDipole[iIndex][1]*qkr3 - _inducedDipole[iIndex][2]*qkr2; - RealOpenMM uixqkr2 = _inducedDipole[iIndex][2]*qkr1 - _inducedDipole[iIndex][0]*qkr3; - RealOpenMM uixqkr3 = _inducedDipole[iIndex][0]*qkr2 - _inducedDipole[iIndex][1]*qkr1; - - RealOpenMM ukxqir1 = _inducedDipole[jIndex][1]*qir3 - _inducedDipole[jIndex][2]*qir2; - RealOpenMM ukxqir2 = _inducedDipole[jIndex][2]*qir1 - _inducedDipole[jIndex][0]*qir3; - RealOpenMM ukxqir3 = _inducedDipole[jIndex][0]*qir2 - _inducedDipole[jIndex][1]*qir1; - - RealOpenMM uixqkrp1 = _inducedDipolePolar[iIndex][1]*qkr3 - _inducedDipolePolar[iIndex][2]*qkr2; - RealOpenMM uixqkrp2 = _inducedDipolePolar[iIndex][2]*qkr1 - _inducedDipolePolar[iIndex][0]*qkr3; - RealOpenMM uixqkrp3 = _inducedDipolePolar[iIndex][0]*qkr2 - _inducedDipolePolar[iIndex][1]*qkr1; - - RealOpenMM ukxqirp1 = _inducedDipolePolar[jIndex][1]*qir3 - _inducedDipolePolar[jIndex][2]*qir2; - RealOpenMM ukxqirp2 = _inducedDipolePolar[jIndex][2]*qir1 - _inducedDipolePolar[jIndex][0]*qir3; - RealOpenMM ukxqirp3 = _inducedDipolePolar[jIndex][0]*qir2 - _inducedDipolePolar[jIndex][1]*qir1; - - RealOpenMM rxqidk1 = yr*qidk3 - zr*qidk2; - RealOpenMM rxqidk2 = zr*qidk1 - xr*qidk3; - RealOpenMM rxqidk3 = xr*qidk2 - yr*qidk1; - - RealOpenMM rxqkdi1 = yr*qkdi3 - zr*qkdi2; - RealOpenMM rxqkdi2 = zr*qkdi1 - xr*qkdi3; - RealOpenMM rxqkdi3 = xr*qkdi2 - yr*qkdi1; - - RealOpenMM rxqiuk1 = yr*qiuk3 - zr*qiuk2; - RealOpenMM rxqiuk2 = zr*qiuk1 - xr*qiuk3; - RealOpenMM rxqiuk3 = xr*qiuk2 - yr*qiuk1; - - RealOpenMM rxqkui1 = yr*qkui3 - zr*qkui2; - RealOpenMM rxqkui2 = zr*qkui1 - xr*qkui3; - RealOpenMM rxqkui3 = xr*qkui2 - yr*qkui1; - - RealOpenMM rxqiukp1 = yr*qiukp3 - zr*qiukp2; - RealOpenMM rxqiukp2 = zr*qiukp1 - xr*qiukp3; - RealOpenMM rxqiukp3 = xr*qiukp2 - yr*qiukp1; - - RealOpenMM rxqkuip1 = yr*qkuip3 - zr*qkuip2; - RealOpenMM rxqkuip2 = zr*qkuip1 - xr*qkuip3; - RealOpenMM rxqkuip3 = xr*qkuip2 - yr*qkuip1; - - // calculate the scalar products for permanent components - - RealOpenMM sc2 = di1*dk1 + di2*dk2 + di3*dk3; - RealOpenMM sc3 = di1*xr + di2*yr + di3*zr; - RealOpenMM sc4 = dk1*xr + dk2*yr + dk3*zr; - RealOpenMM sc5 = qir1*xr + qir2*yr + qir3*zr; - RealOpenMM sc6 = qkr1*xr + qkr2*yr + qkr3*zr; - RealOpenMM sc7 = qir1*dk1 + qir2*dk2 + qir3*dk3; - RealOpenMM sc8 = qkr1*di1 + qkr2*di2 + qkr3*di3; - RealOpenMM sc9 = qir1*qkr1 + qir2*qkr2 + qir3*qkr3; - RealOpenMM sc10 = qi1*qk1 + qi2*qk2 + qi3*qk3 - + qi2*qk2 + qi5*qk5 + qi6*qk6 - + qi3*qk3 + qi6*qk6 + qi9*qk9; - - // calculate the scalar products for induced components - - RealOpenMM sci1 = _inducedDipole[iIndex][0]*dk1 + _inducedDipole[iIndex][1]*dk2 - + _inducedDipole[iIndex][2]*dk3 + di1*_inducedDipole[jIndex][0] - + di2*_inducedDipole[jIndex][1] + di3*_inducedDipole[jIndex][2]; - - RealOpenMM sci3 = _inducedDipole[iIndex][0]*xr + _inducedDipole[iIndex][1]*yr + _inducedDipole[iIndex][2]*zr; - RealOpenMM sci4 = _inducedDipole[jIndex][0]*xr + _inducedDipole[jIndex][1]*yr + _inducedDipole[jIndex][2]*zr; - RealOpenMM sci7 = qir1*_inducedDipole[jIndex][0] + qir2*_inducedDipole[jIndex][1] + qir3*_inducedDipole[jIndex][2]; - RealOpenMM sci8 = qkr1*_inducedDipole[iIndex][0] + qkr2*_inducedDipole[iIndex][1] + qkr3*_inducedDipole[iIndex][2]; - RealOpenMM scip1 = _inducedDipolePolar[iIndex][0]*dk1 + _inducedDipolePolar[iIndex][1]*dk2 + _inducedDipolePolar[iIndex][2]*dk3 + di1*_inducedDipolePolar[jIndex][0] + di2*_inducedDipolePolar[jIndex][1] + di3*_inducedDipolePolar[jIndex][2]; - RealOpenMM scip2 = _inducedDipole[iIndex][0]*_inducedDipolePolar[jIndex][0]+_inducedDipole[iIndex][1]*_inducedDipolePolar[jIndex][1] - + _inducedDipole[iIndex][2]*_inducedDipolePolar[jIndex][2]+_inducedDipolePolar[iIndex][0]*_inducedDipole[jIndex][0] - + _inducedDipolePolar[iIndex][1]*_inducedDipole[jIndex][1]+_inducedDipolePolar[iIndex][2]*_inducedDipole[jIndex][2]; - - RealOpenMM scip3 = _inducedDipolePolar[iIndex][0]*xr + _inducedDipolePolar[iIndex][1]*yr + _inducedDipolePolar[iIndex][2]*zr; - RealOpenMM scip4 = _inducedDipolePolar[jIndex][0]*xr + _inducedDipolePolar[jIndex][1]*yr + _inducedDipolePolar[jIndex][2]*zr; - - RealOpenMM scip7 = qir1*_inducedDipolePolar[jIndex][0] + qir2*_inducedDipolePolar[jIndex][1] + qir3*_inducedDipolePolar[jIndex][2]; - RealOpenMM scip8 = qkr1*_inducedDipolePolar[iIndex][0] + qkr2*_inducedDipolePolar[iIndex][1] + qkr3*_inducedDipolePolar[iIndex][2]; - - // calculate the gl functions for permanent components - - RealOpenMM gl0 = ci*ck; - RealOpenMM gl1 = ck*sc3 - ci*sc4; - RealOpenMM gl2 = ci*sc6 + ck*sc5 - sc3*sc4; - RealOpenMM gl3 = sc3*sc6 - sc4*sc5; - RealOpenMM gl4 = sc5*sc6; - RealOpenMM gl5 = -4.0*sc9; - RealOpenMM gl6 = sc2; - RealOpenMM gl7 = 2.0 * (sc7-sc8); - RealOpenMM gl8 = 2.0 * sc10; - - // calculate the gl functions for induced components - - RealOpenMM gli1 = ck*sci3 - ci*sci4; - RealOpenMM gli2 = -sc3*sci4 - sci3*sc4; - RealOpenMM gli3 = sci3*sc6 - sci4*sc5; - RealOpenMM gli6 = sci1; - RealOpenMM gli7 = 2.0 * (sci7-sci8); - RealOpenMM glip1 = ck*scip3 - ci*scip4; - RealOpenMM glip2 = -sc3*scip4 - scip3*sc4; - RealOpenMM glip3 = scip3*sc6 - scip4*sc5; - RealOpenMM glip6 = scip1; - RealOpenMM glip7 = 2.0 * (scip7-scip8); - - // compute the energy contributions for this interaction - - RealOpenMM e = bn0*gl0 + bn1*(gl1+gl6) + bn2*(gl2+gl7+gl8) + bn3*(gl3+gl5) + bn4*gl4; - RealOpenMM ei = 0.5 * (bn1*(gli1+gli6) + bn2*(gli2+gli7) + bn3*gli3); - - // get the real energy without any screening function - - RealOpenMM erl = rr1*gl0 + rr3*(gl1+gl6) + rr5*(gl2+gl7+gl8) + rr7*(gl3+gl5) + rr9*gl4; - RealOpenMM erli = 0.5*(rr3*(gli1+gli6)*psc3 + rr5*(gli2+gli7)*psc5 + rr7*gli3*psc7); - e = e - (1.0-scalingFactors[M_SCALE])*erl; - ei = ei - erli; - - energy = (e + ei); - - // intermediate variables for permanent force terms - - RealOpenMM gf1 = bn1*gl0 + bn2*(gl1+gl6) - + bn3*(gl2+gl7+gl8) - + bn4*(gl3+gl5) + bn5*gl4; - RealOpenMM gf2 = -ck*bn1 + sc4*bn2 - sc6*bn3; - RealOpenMM gf3 = ci*bn1 + sc3*bn2 + sc5*bn3; - RealOpenMM gf4 = 2.0*bn2; - RealOpenMM gf5 = 2.0*(-ck*bn2+sc4*bn3-sc6*bn4); - RealOpenMM gf6 = 2.0*(-ci*bn2-sc3*bn3-sc5*bn4); - RealOpenMM gf7 = 4.0*bn3; - RealOpenMM gfr1 = rr3*gl0 + rr5*(gl1+gl6) - + rr7*(gl2+gl7+gl8) - + rr9*(gl3+gl5) + rr11*gl4; - RealOpenMM gfr2 = -ck*rr3 + sc4*rr5 - sc6*rr7; - RealOpenMM gfr3 = ci*rr3 + sc3*rr5 + sc5*rr7; - RealOpenMM gfr4 = 2.0*rr5; - RealOpenMM gfr5 = 2.0*(-ck*rr5+sc4*rr7-sc6*rr9); - RealOpenMM gfr6 = 2.0*(-ci*rr5-sc3*rr7-sc5*rr9); - RealOpenMM gfr7 = 4.0*rr7; - - // intermediate variables for induced force terms - - RealOpenMM gfi1 = 0.5*(bn2*(gli1+glip1+gli6+glip6) - + bn2*scip2 - + bn3*(gli2+glip2+gli7+glip7) - - bn3*(sci3*scip4+scip3*sci4) - + bn4*(gli3+glip3)); - RealOpenMM gfi2 = -ck*bn1 + sc4*bn2 - sc6*bn3; - RealOpenMM gfi3 = ci*bn1 + sc3*bn2 + sc5*bn3; - RealOpenMM gfi4 = 2.0 * bn2; - RealOpenMM gfi5 = bn3 * (sci4+scip4); - RealOpenMM gfi6 = -bn3 * (sci3+scip3); - RealOpenMM gfri1 = 0.5*(rr5*((gli1+gli6)*psc3 - + (glip1+glip6)*dsc3 - + scip2*usc3) - + rr7*((gli7+gli2)*psc5 - + (glip7+glip2)*dsc5 - - (sci3*scip4+scip3*sci4)*usc5) - + rr9*(gli3*psc7+glip3*dsc7)); - RealOpenMM gfri4 = 2.0 * rr5; - RealOpenMM gfri5 = rr7 * (sci4*psc7+scip4*dsc7); - RealOpenMM gfri6 = -rr7 * (sci3*psc7+scip3*dsc7); - - // get the permanent force with screening - - RealOpenMM ftm21 = gf1*xr + gf2*di1 + gf3*dk1 - + gf4*(qkdi1-qidk1) + gf5*qir1 - + gf6*qkr1 + gf7*(qiqkr1+qkqir1); - RealOpenMM ftm22 = gf1*yr + gf2*di2 + gf3*dk2 - + gf4*(qkdi2-qidk2) + gf5*qir2 - + gf6*qkr2 + gf7*(qiqkr2+qkqir2); - RealOpenMM ftm23 = gf1*zr + gf2*di3 + gf3*dk3 - + gf4*(qkdi3-qidk3) + gf5*qir3 - + gf6*qkr3 + gf7*(qiqkr3+qkqir3); - - // get the permanent force without screening - - RealOpenMM ftm2r1 = gfr1*xr + gfr2*di1 + gfr3*dk1 - + gfr4*(qkdi1-qidk1) + gfr5*qir1 - + gfr6*qkr1 + gfr7*(qiqkr1+qkqir1); - RealOpenMM ftm2r2 = gfr1*yr + gfr2*di2 + gfr3*dk2 - + gfr4*(qkdi2-qidk2) + gfr5*qir2 - + gfr6*qkr2 + gfr7*(qiqkr2+qkqir2); - RealOpenMM ftm2r3 = gfr1*zr + gfr2*di3 + gfr3*dk3 - + gfr4*(qkdi3-qidk3) + gfr5*qir3 - + gfr6*qkr3 + gfr7*(qiqkr3+qkqir3); - - // get the induced force with screening - - RealOpenMM ftm2i1 = gfi1*xr + 0.5* - (gfi2*(_inducedDipole[iIndex][0]+_inducedDipolePolar[iIndex][0]) - + bn2*(sci4*_inducedDipolePolar[iIndex][0]+scip4*_inducedDipole[iIndex][0]) - + gfi3*(_inducedDipole[jIndex][0]+_inducedDipolePolar[jIndex][0]) - + bn2*(sci3*_inducedDipolePolar[jIndex][0]+scip3*_inducedDipole[jIndex][0]) - + (sci4+scip4)*bn2*di1 - + (sci3+scip3)*bn2*dk1 - + gfi4*(qkui1+qkuip1-qiuk1-qiukp1)) - + gfi5*qir1 + gfi6*qkr1; - - RealOpenMM ftm2i2 = gfi1*yr + 0.5* - (gfi2*(_inducedDipole[iIndex][1]+_inducedDipolePolar[iIndex][1]) - + bn2*(sci4*_inducedDipolePolar[iIndex][1]+scip4*_inducedDipole[iIndex][1]) - + gfi3*(_inducedDipole[jIndex][1]+_inducedDipolePolar[jIndex][1]) - + bn2*(sci3*_inducedDipolePolar[jIndex][1]+scip3*_inducedDipole[jIndex][1]) - + (sci4+scip4)*bn2*di2 - + (sci3+scip3)*bn2*dk2 - + gfi4*(qkui2+qkuip2-qiuk2-qiukp2)) - + gfi5*qir2 + gfi6*qkr2; - - RealOpenMM ftm2i3 = gfi1*zr + 0.5* - (gfi2*(_inducedDipole[iIndex][2]+_inducedDipolePolar[iIndex][2]) - + bn2*(sci4*_inducedDipolePolar[iIndex][2]+scip4*_inducedDipole[iIndex][2]) - + gfi3*(_inducedDipole[jIndex][2]+_inducedDipolePolar[jIndex][2]) - + bn2*(sci3*_inducedDipolePolar[jIndex][2]+scip3*_inducedDipole[jIndex][2]) - + (sci4+scip4)*bn2*di3 - + (sci3+scip3)*bn2*dk3 - + gfi4*(qkui3+qkuip3-qiuk3-qiukp3)) - + gfi5*qir3 + gfi6*qkr3; - - // get the induced force without screening - - RealOpenMM ftm2ri1 = gfri1*xr + 0.5* - (- rr3*ck*(_inducedDipole[iIndex][0]*psc3+_inducedDipolePolar[iIndex][0]*dsc3) - + rr5*sc4*(_inducedDipole[iIndex][0]*psc5+_inducedDipolePolar[iIndex][0]*dsc5) - - rr7*sc6*(_inducedDipole[iIndex][0]*psc7+_inducedDipolePolar[iIndex][0]*dsc7)) - + (rr3*ci*(_inducedDipole[jIndex][0]*psc3+_inducedDipolePolar[jIndex][0]*dsc3) - + rr5*sc3*(_inducedDipole[jIndex][0]*psc5+_inducedDipolePolar[jIndex][0]*dsc5) - + rr7*sc5*(_inducedDipole[jIndex][0]*psc7+_inducedDipolePolar[jIndex][0]*dsc7))*0.5 - + rr5*usc5*(sci4*_inducedDipolePolar[iIndex][0]+scip4*_inducedDipole[iIndex][0] - + sci3*_inducedDipolePolar[jIndex][0]+scip3*_inducedDipole[jIndex][0])*0.5 - + 0.5*(sci4*psc5+scip4*dsc5)*rr5*di1 - + 0.5*(sci3*psc5+scip3*dsc5)*rr5*dk1 - + 0.5*gfri4*((qkui1-qiuk1)*psc5 - + (qkuip1-qiukp1)*dsc5) - + gfri5*qir1 + gfri6*qkr1; - - RealOpenMM ftm2ri2 = gfri1*yr + 0.5* - (- rr3*ck*(_inducedDipole[iIndex][1]*psc3+_inducedDipolePolar[iIndex][1]*dsc3) - + rr5*sc4*(_inducedDipole[iIndex][1]*psc5+_inducedDipolePolar[iIndex][1]*dsc5) - - rr7*sc6*(_inducedDipole[iIndex][1]*psc7+_inducedDipolePolar[iIndex][1]*dsc7)) - + (rr3*ci*(_inducedDipole[jIndex][1]*psc3+_inducedDipolePolar[jIndex][1]*dsc3) - + rr5*sc3*(_inducedDipole[jIndex][1]*psc5+_inducedDipolePolar[jIndex][1]*dsc5) - + rr7*sc5*(_inducedDipole[jIndex][1]*psc7+_inducedDipolePolar[jIndex][1]*dsc7))*0.5 - + rr5*usc5*(sci4*_inducedDipolePolar[iIndex][1]+scip4*_inducedDipole[iIndex][1] - + sci3*_inducedDipolePolar[jIndex][1]+scip3*_inducedDipole[jIndex][1])*0.5 - + 0.5*(sci4*psc5+scip4*dsc5)*rr5*di2 - + 0.5*(sci3*psc5+scip3*dsc5)*rr5*dk2 - + 0.5*gfri4*((qkui2-qiuk2)*psc5 - + (qkuip2-qiukp2)*dsc5) - + gfri5*qir2 + gfri6*qkr2; - - RealOpenMM ftm2ri3 = gfri1*zr + 0.5* - (- rr3*ck*(_inducedDipole[iIndex][2]*psc3+_inducedDipolePolar[iIndex][2]*dsc3) - + rr5*sc4*(_inducedDipole[iIndex][2]*psc5+_inducedDipolePolar[iIndex][2]*dsc5) - - rr7*sc6*(_inducedDipole[iIndex][2]*psc7+_inducedDipolePolar[iIndex][2]*dsc7)) - + (rr3*ci*(_inducedDipole[jIndex][2]*psc3+_inducedDipolePolar[jIndex][2]*dsc3) - + rr5*sc3*(_inducedDipole[jIndex][2]*psc5+_inducedDipolePolar[jIndex][2]*dsc5) - + rr7*sc5*(_inducedDipole[jIndex][2]*psc7+_inducedDipolePolar[jIndex][2]*dsc7))*0.5 - + rr5*usc5*(sci4*_inducedDipolePolar[iIndex][2]+scip4*_inducedDipole[iIndex][2] - + sci3*_inducedDipolePolar[jIndex][2]+scip3*_inducedDipole[jIndex][2])*0.5 - + 0.5*(sci4*psc5+scip4*dsc5)*rr5*di3 - + 0.5*(sci3*psc5+scip3*dsc5)*rr5*dk3 - + 0.5*gfri4*((qkui3-qiuk3)*psc5 - + (qkuip3-qiukp3)*dsc5) - + gfri5*qir3 + gfri6*qkr3; - - // account for partially excluded induced interactions - - RealOpenMM temp3 = 0.5 * rr3 * ((gli1+gli6)*scalingFactors[P_SCALE] - +(glip1+glip6)*scalingFactors[D_SCALE]); - - RealOpenMM temp5 = 0.5 * rr5 * ((gli2+gli7)*scalingFactors[P_SCALE] - +(glip2+glip7)*scalingFactors[D_SCALE]); - - RealOpenMM temp7 = 0.5 * rr7 * (gli3*scalingFactors[P_SCALE] - +glip3*scalingFactors[D_SCALE]); - - RealOpenMM fridmp1 = temp3*ddsc31 + temp5*ddsc51 + temp7*ddsc71; - RealOpenMM fridmp2 = temp3*ddsc32 + temp5*ddsc52 + temp7*ddsc72; - RealOpenMM fridmp3 = temp3*ddsc33 + temp5*ddsc53 + temp7*ddsc73; - - // find some scaling terms for induced-induced force - - temp3 = 0.5 * rr3 * scalingFactors[U_SCALE] * scip2; - temp5 = -0.5 * rr5 * scalingFactors[U_SCALE] * (sci3*scip4+scip3*sci4); - RealOpenMM findmp1 = temp3*ddsc31 + temp5*ddsc51; - RealOpenMM findmp2 = temp3*ddsc32 + temp5*ddsc52; - RealOpenMM findmp3 = temp3*ddsc33 + temp5*ddsc53; - - // modify the forces for partially excluded interactions - - ftm2i1 -= (fridmp1 + findmp1); - ftm2i2 -= (fridmp2 + findmp2); - ftm2i3 -= (fridmp3 + findmp3); - - // correction to convert mutual to direct polarization force - - if (getPolarizationType() == AmoebaReferenceMultipoleForce::Direct) { - - RealOpenMM gfd = 0.5 * (bn2*scip2 - bn3*(scip3*sci4+sci3*scip4)); - ftm2i1 -= gfd*xr + 0.5*bn2*(sci4*_inducedDipolePolar[iIndex][0]+scip4*_inducedDipole[iIndex][0]+sci3*_inducedDipolePolar[jIndex][0]+scip3*_inducedDipole[jIndex][0]); - ftm2i2 -= gfd*yr + 0.5*bn2*(sci4*_inducedDipolePolar[iIndex][1]+scip4*_inducedDipole[iIndex][1]+sci3*_inducedDipolePolar[jIndex][1]+scip3*_inducedDipole[jIndex][1]); - ftm2i3 -= gfd*zr + 0.5*bn2*(sci4*_inducedDipolePolar[iIndex][2]+scip4*_inducedDipole[iIndex][2]+sci3*_inducedDipolePolar[jIndex][2]+scip3*_inducedDipole[jIndex][2]); + // The Qtilde{x,y,z} torque intermediates for atoms I and J, which are used to obtain the torques on the permanent moments. + RealOpenMM qiQIX[9] = {0.0, qiQI[3], 0.0, -qiQI[1], sqrtThree*qiQI[6], qiQI[8], -sqrtThree*qiQI[4] - qiQI[7], qiQI[6], -qiQI[5]}; + RealOpenMM qiQIY[9] = {0.0, -qiQI[2], qiQI[1], 0.0, -sqrtThree*qiQI[5], sqrtThree*qiQI[4] - qiQI[7], -qiQI[8], qiQI[5], qiQI[6]}; + RealOpenMM qiQIZ[9] = {0.0, 0.0, -qiQI[3], qiQI[2], 0.0, -qiQI[6], qiQI[5], -2.0*qiQI[8], 2.0*qiQI[7]}; + RealOpenMM qiQJX[9] = {0.0, qiQJ[3], 0.0, -qiQJ[1], sqrtThree*qiQJ[6], qiQJ[8], -sqrtThree*qiQJ[4] - qiQJ[7], qiQJ[6], -qiQJ[5]}; + RealOpenMM qiQJY[9] = {0.0, -qiQJ[2], qiQJ[1], 0.0, -sqrtThree*qiQJ[5], sqrtThree*qiQJ[4] - qiQJ[7], -qiQJ[8], qiQJ[5], qiQJ[6]}; + RealOpenMM qiQJZ[9] = {0.0, 0.0, -qiQJ[3], qiQJ[2], 0.0, -qiQJ[6], qiQJ[5], -2.0*qiQJ[8], 2.0*qiQJ[7]}; + + // The field derivatives at I due to permanent and induced moments on J, and vice-versa. + // Also, their derivatives w.r.t. R, which are needed for force calculations + RealOpenMM Vij[9], Vji[9], VjiR[9], VijR[9]; + // The field derivatives at I due to only permanent moments on J, and vice-versa. + RealOpenMM Vijp[3], Vijd[3], Vjip[3], Vjid[3]; + RealOpenMM rInvVec[7], alphaRVec[8], bVec[5]; + + RealOpenMM prefac = (_electric/_dielectric); + RealOpenMM rInv = 1.0 / r; + + // The rInvVec array is defined such that the ith element is R^-i, with the + // dieleectric constant folded in, to avoid conversions later. + rInvVec[1] = prefac * rInv; + for(int i = 2; i < 7; ++i) + rInvVec[i] = rInvVec[i-1] * rInv; + + // The alpharVec array is defined such that the ith element is (alpha R)^i, + // where kappa (alpha in OpenMM parlance) is the Ewald attenuation parameter. + alphaRVec[1] = _alphaEwald * r; + for(int i = 2; i < 8; ++i) + alphaRVec[i] = alphaRVec[i-1] * alphaRVec[1]; + + RealOpenMM erfAlphaR = erf(alphaRVec[1]); + RealOpenMM X = 2.0*EXP(-alphaRVec[2])/SQRT_PI; + RealOpenMM mScale = scalingFactors[M_SCALE]; + RealOpenMM dScale = scalingFactors[D_SCALE]; + RealOpenMM pScale = scalingFactors[P_SCALE]; + RealOpenMM uScale = scalingFactors[U_SCALE]; + + int doubleFactorial = 1, facCount = 1; + RealOpenMM tmp = alphaRVec[1]; + bVec[1] = -erfAlphaR; + for(int i=2; i < 5; ++i){ + bVec[i] = bVec[i-1] + tmp * X / (RealOpenMM)(doubleFactorial); + facCount = facCount + 2; + doubleFactorial = doubleFactorial * facCount; + tmp *= 2.0 * alphaRVec[2]; + } - RealOpenMM gfdr = 0.5 * (rr5*scip2*usc3 - rr7*(scip3*sci4 +sci3*scip4)*usc5); - RealOpenMM fdir1 = gfdr*xr + 0.5*usc5*rr5*(sci4*_inducedDipolePolar[iIndex][0]+scip4*_inducedDipole[iIndex][0] + sci3*_inducedDipolePolar[jIndex][0]+scip3*_inducedDipole[jIndex][0]); - RealOpenMM fdir2 = gfdr*yr + 0.5*usc5*rr5*(sci4*_inducedDipolePolar[iIndex][1]+scip4*_inducedDipole[iIndex][1] + sci3*_inducedDipolePolar[jIndex][1]+scip3*_inducedDipole[jIndex][1]); - RealOpenMM fdir3 = gfdr*zr + 0.5*usc5*rr5*(sci4*_inducedDipolePolar[iIndex][2]+scip4*_inducedDipole[iIndex][2] + sci3*_inducedDipolePolar[jIndex][2]+scip3*_inducedDipole[jIndex][2]); + RealOpenMM dmp = particleI.dampingFactor*particleJ.dampingFactor; + RealOpenMM a = particleI.thole < particleJ.thole ? particleI.thole : particleJ.thole; + RealOpenMM u = std::abs(dmp) > 1.0E-5 ? r/dmp : 1E10; + RealOpenMM au3 = a*u*u*u; + RealOpenMM expau3 = au3 < 50.0 ? EXP(-au3) : 0.0; + RealOpenMM a2u6 = au3*au3; + RealOpenMM a3u9 = a2u6*au3; + // Thole damping factors for energies + RealOpenMM thole_c = 1.0 - expau3; + RealOpenMM thole_d0 = 1.0 - expau3*(1.0 + 1.5*au3); + RealOpenMM thole_d1 = 1.0 - expau3; + RealOpenMM thole_q0 = 1.0 - expau3*(1.0 + au3 + a2u6); + RealOpenMM thole_q1 = 1.0 - expau3*(1.0 + au3); + // Thole damping factors for derivatives + RealOpenMM dthole_c = 1.0 - expau3*(1.0 + 1.5*au3); + RealOpenMM dthole_d0 = 1.0 - expau3*(1.0 + au3 + 1.5*a2u6); + RealOpenMM dthole_d1 = 1.0 - expau3*(1.0 + au3); + RealOpenMM dthole_q0 = 1.0 - expau3*(1.0 + au3 + 0.25*a2u6 + 0.75*a3u9); + RealOpenMM dthole_q1 = 1.0 - expau3*(1.0 + au3 + 0.75*a2u6); + + // Now we compute the (attenuated) Coulomb operator and its derivatives, contracted with + // permanent moments and induced dipoles. Note that the coefficient of the permanent force + // terms is half of the expected value; this is because we compute the interaction of I with + // the sum of induced and permanent moments on J, as well as the interaction of J with I's + // permanent and induced moments; doing so double counts the permanent-permanent interaction. + RealOpenMM ePermCoef, dPermCoef, eUIndCoef, dUIndCoef, eUInpCoef, dUInpCoef; + + // C-C terms (m=0) + ePermCoef = rInvVec[1]*(mScale + bVec[2] - alphaRVec[1]*X); + dPermCoef = -0.5*(mScale + bVec[2])*rInvVec[2]; + Vij[0] = ePermCoef*qiQJ[0]; + Vji[0] = ePermCoef*qiQI[0]; + VijR[0] = dPermCoef*qiQJ[0]; + VjiR[0] = dPermCoef*qiQI[0]; + + // C-D and C-Uind terms (m=0) + ePermCoef = rInvVec[2]*(mScale + bVec[2]); + eUIndCoef = rInvVec[2]*(pScale*thole_c + bVec[2]); + eUInpCoef = rInvVec[2]*(dScale*thole_c + bVec[2]); + dPermCoef = -rInvVec[3]*(mScale + bVec[2] + alphaRVec[3]*X); + dUIndCoef = -2.0*rInvVec[3]*(pScale*dthole_c + bVec[2] + alphaRVec[3]*X); + dUInpCoef = -2.0*rInvVec[3]*(dScale*dthole_c + bVec[2] + alphaRVec[3]*X); + Vij[0] += -(ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]); + Vji[1] = -(ePermCoef*qiQI[0]); + VijR[0] += -(dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]); + VjiR[1] = -(dPermCoef*qiQI[0]); + Vjip[0] = -(eUInpCoef*qiQI[0]); + Vjid[0] = -(eUIndCoef*qiQI[0]); + // D-C and Uind-C terms (m=0) + Vij[1] = ePermCoef*qiQJ[0]; + Vji[0] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] = dPermCoef*qiQJ[0]; + VjiR[0] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] = eUInpCoef*qiQJ[0]; + Vijd[0] = eUIndCoef*qiQJ[0]; + + // D-D and D-Uind terms (m=0) + ePermCoef = -twoThirds*rInvVec[3]*(3.0*(mScale + bVec[3]) + alphaRVec[3]*X); + eUIndCoef = -twoThirds*rInvVec[3]*(3.0*(pScale*thole_d0 + bVec[3]) + alphaRVec[3]*X); + eUInpCoef = -twoThirds*rInvVec[3]*(3.0*(dScale*thole_d0 + bVec[3]) + alphaRVec[3]*X); + dPermCoef = rInvVec[4]*(3.0*(mScale + bVec[3]) + 2.*alphaRVec[5]*X); + dUIndCoef = rInvVec[4]*(6.0*(pScale*dthole_d0 + bVec[3]) + 4.0*alphaRVec[5]*X); + dUInpCoef = rInvVec[4]*(6.0*(dScale*dthole_d0 + bVec[3]) + 4.0*alphaRVec[5]*X); + Vij[1] += ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]; + Vji[1] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] += dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]; + VjiR[1] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] += eUInpCoef*qiQJ[1]; + Vijd[0] += eUIndCoef*qiQJ[1]; + Vjip[0] += eUInpCoef*qiQI[1]; + Vjid[0] += eUIndCoef*qiQI[1]; + // D-D and D-Uind terms (m=1) + ePermCoef = rInvVec[3]*(mScale + bVec[3] - twoThirds*alphaRVec[3]*X); + eUIndCoef = rInvVec[3]*(pScale*thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + eUInpCoef = rInvVec[3]*(dScale*thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + dPermCoef = -1.5*rInvVec[4]*(mScale + bVec[3]); + dUIndCoef = -3.0*rInvVec[4]*(pScale*dthole_d1 + bVec[3]); + dUInpCoef = -3.0*rInvVec[4]*(dScale*dthole_d1 + bVec[3]); + Vij[2] = ePermCoef*qiQJ[2] + eUIndCoef*qiUindJ[1] + eUInpCoef*qiUinpJ[1]; + Vji[2] = ePermCoef*qiQI[2] + eUIndCoef*qiUindI[1] + eUInpCoef*qiUinpI[1]; + VijR[2] = dPermCoef*qiQJ[2] + dUIndCoef*qiUindJ[1] + dUInpCoef*qiUinpJ[1]; + VjiR[2] = dPermCoef*qiQI[2] + dUIndCoef*qiUindI[1] + dUInpCoef*qiUinpI[1]; + Vij[3] = ePermCoef*qiQJ[3] + eUIndCoef*qiUindJ[2] + eUInpCoef*qiUinpJ[2]; + Vji[3] = ePermCoef*qiQI[3] + eUIndCoef*qiUindI[2] + eUInpCoef*qiUinpI[2]; + VijR[3] = dPermCoef*qiQJ[3] + dUIndCoef*qiUindJ[2] + dUInpCoef*qiUinpJ[2]; + VjiR[3] = dPermCoef*qiQI[3] + dUIndCoef*qiUindI[2] + dUInpCoef*qiUinpI[2]; + Vijp[1] = eUInpCoef*qiQJ[2]; + Vijd[1] = eUIndCoef*qiQJ[2]; + Vjip[1] = eUInpCoef*qiQI[2]; + Vjid[1] = eUIndCoef*qiQI[2]; + Vijp[2] = eUInpCoef*qiQJ[3]; + Vijd[2] = eUIndCoef*qiQJ[3]; + Vjip[2] = eUInpCoef*qiQI[3]; + Vjid[2] = eUIndCoef*qiQI[3]; + + // C-Q terms (m=0) + ePermCoef = (mScale + bVec[3])*rInvVec[3]; + dPermCoef = -oneThird*rInvVec[4]*(4.5*(mScale + bVec[3]) + 2.0*alphaRVec[5]*X); + Vij[0] += ePermCoef*qiQJ[4]; + Vji[4] = ePermCoef*qiQI[0]; + VijR[0] += dPermCoef*qiQJ[4]; + VjiR[4] = dPermCoef*qiQI[0]; + // Q-C terms (m=0) + Vij[4] = ePermCoef*qiQJ[0]; + Vji[0] += ePermCoef*qiQI[4]; + VijR[4] = dPermCoef*qiQJ[0]; + VjiR[0] += dPermCoef*qiQI[4]; + + // D-Q and Uind-Q terms (m=0) + ePermCoef = rInvVec[4]*(3.0*(mScale + bVec[3]) + fourThirds*alphaRVec[5]*X); + eUIndCoef = rInvVec[4]*(3.0*(pScale*thole_q0 + bVec[3]) + fourThirds*alphaRVec[5]*X); + eUInpCoef = rInvVec[4]*(3.0*(dScale*thole_q0 + bVec[3]) + fourThirds*alphaRVec[5]*X); + dPermCoef = -fourThirds*rInvVec[5]*(4.5*(mScale + bVec[3]) + (1.0 + alphaRVec[2])*alphaRVec[5]*X); + dUIndCoef = -fourThirds*rInvVec[5]*(9.0*(pScale*dthole_q0 + bVec[3]) + 2.0*(1.0 + alphaRVec[2])*alphaRVec[5]*X); + dUInpCoef = -fourThirds*rInvVec[5]*(9.0*(dScale*dthole_q0 + bVec[3]) + 2.0*(1.0 + alphaRVec[2])*alphaRVec[5]*X); + Vij[1] += ePermCoef*qiQJ[4]; + Vji[4] += ePermCoef*qiQI[1] + eUIndCoef*qiUindI[0] + eUInpCoef*qiUinpI[0]; + VijR[1] += dPermCoef*qiQJ[4]; + VjiR[4] += dPermCoef*qiQI[1] + dUIndCoef*qiUindI[0] + dUInpCoef*qiUinpI[0]; + Vijp[0] += eUInpCoef*qiQJ[4]; + Vijd[0] += eUIndCoef*qiQJ[4]; + // Q-D and Q-Uind terms (m=0) + Vij[4] += -(ePermCoef*qiQJ[1] + eUIndCoef*qiUindJ[0] + eUInpCoef*qiUinpJ[0]); + Vji[1] += -(ePermCoef*qiQI[4]); + VijR[4] += -(dPermCoef*qiQJ[1] + dUIndCoef*qiUindJ[0] + dUInpCoef*qiUinpJ[0]); + VjiR[1] += -(dPermCoef*qiQI[4]); + Vjip[0] += -(eUInpCoef*qiQI[4]); + Vjid[0] += -(eUIndCoef*qiQI[4]); + + // D-Q and Uind-Q terms (m=1) + ePermCoef = -sqrtThree*rInvVec[4]*(mScale + bVec[3]); + eUIndCoef = -sqrtThree*rInvVec[4]*(pScale*thole_q1 + bVec[3]); + eUInpCoef = -sqrtThree*rInvVec[4]*(dScale*thole_q1 + bVec[3]); + dPermCoef = fourSqrtOneThird*rInvVec[5]*(1.5*(mScale + bVec[3]) + 0.5*alphaRVec[5]*X); + dUIndCoef = fourSqrtOneThird*rInvVec[5]*(3.0*(pScale*dthole_q1 + bVec[3]) + alphaRVec[5]*X); + dUInpCoef = fourSqrtOneThird*rInvVec[5]*(3.0*(dScale*dthole_q1 + bVec[3]) + alphaRVec[5]*X); + Vij[2] += ePermCoef*qiQJ[5]; + Vji[5] = ePermCoef*qiQI[2] + eUIndCoef*qiUindI[1] + eUInpCoef*qiUinpI[1]; + VijR[2] += dPermCoef*qiQJ[5]; + VjiR[5] = dPermCoef*qiQI[2] + dUIndCoef*qiUindI[1] + dUInpCoef*qiUinpI[1]; + Vij[3] += ePermCoef*qiQJ[6]; + Vji[6] = ePermCoef*qiQI[3] + eUIndCoef*qiUindI[2] + eUInpCoef*qiUinpI[2]; + VijR[3] += dPermCoef*qiQJ[6]; + VjiR[6] = dPermCoef*qiQI[3] + dUIndCoef*qiUindI[2] + dUInpCoef*qiUinpI[2]; + Vijp[1] += eUInpCoef*qiQJ[5]; + Vijd[1] += eUIndCoef*qiQJ[5]; + Vijp[2] += eUInpCoef*qiQJ[6]; + Vijd[2] += eUIndCoef*qiQJ[6]; + // D-Q and Uind-Q terms (m=1) + Vij[5] = -(ePermCoef*qiQJ[2] + eUIndCoef*qiUindJ[1] + eUInpCoef*qiUinpJ[1]); + Vji[2] += -(ePermCoef*qiQI[5]); + VijR[5] = -(dPermCoef*qiQJ[2] + dUIndCoef*qiUindJ[1] + dUInpCoef*qiUinpJ[1]); + VjiR[2] += -(dPermCoef*qiQI[5]); + Vij[6] = -(ePermCoef*qiQJ[3] + eUIndCoef*qiUindJ[2] + eUInpCoef*qiUinpJ[2]); + Vji[3] += -(ePermCoef*qiQI[6]); + VijR[6] = -(dPermCoef*qiQJ[3] + dUIndCoef*qiUindJ[2] + dUInpCoef*qiUinpJ[2]); + VjiR[3] += -(dPermCoef*qiQI[6]); + Vjip[1] += -(eUInpCoef*qiQI[5]); + Vjid[1] += -(eUIndCoef*qiQI[5]); + Vjip[2] += -(eUInpCoef*qiQI[6]); + Vjid[2] += -(eUIndCoef*qiQI[6]); + + // Q-Q terms (m=0) + ePermCoef = rInvVec[5]*(6.0*(mScale + bVec[4]) + fourOverFortyFive*(-3.0 + 10.0*alphaRVec[2])*alphaRVec[5]*X); + dPermCoef = -oneNinth*rInvVec[6]*(135.0*(mScale + bVec[4]) + 4.0*(1.0 + 2.0*alphaRVec[2])*alphaRVec[7]*X); + Vij[4] += ePermCoef*qiQJ[4]; + Vji[4] += ePermCoef*qiQI[4]; + VijR[4] += dPermCoef*qiQJ[4]; + VjiR[4] += dPermCoef*qiQI[4]; + // Q-Q terms (m=1) + ePermCoef = -fourOverFifteen*rInvVec[5]*(15.0*(mScale + bVec[4]) + alphaRVec[5]*X); + dPermCoef = rInvVec[6]*(10.0*(mScale + bVec[4]) + fourThirds*alphaRVec[7]*X); + Vij[5] += ePermCoef*qiQJ[5]; + Vji[5] += ePermCoef*qiQI[5]; + VijR[5] += dPermCoef*qiQJ[5]; + VjiR[5] += dPermCoef*qiQI[5]; + Vij[6] += ePermCoef*qiQJ[6]; + Vji[6] += ePermCoef*qiQI[6]; + VijR[6] += dPermCoef*qiQJ[6]; + VjiR[6] += dPermCoef*qiQI[6]; + // Q-Q terms (m=2) + ePermCoef = rInvVec[5]*(mScale + bVec[4] - fourOverFifteen*alphaRVec[5]*X); + dPermCoef = -2.5*(mScale + bVec[4])*rInvVec[6]; + Vij[7] = ePermCoef*qiQJ[7]; + Vji[7] = ePermCoef*qiQI[7]; + VijR[7] = dPermCoef*qiQJ[7]; + VjiR[7] = dPermCoef*qiQI[7]; + Vij[8] = ePermCoef*qiQJ[8]; + Vji[8] = ePermCoef*qiQI[8]; + VijR[8] = dPermCoef*qiQJ[8]; + VjiR[8] = dPermCoef*qiQI[8]; + + // Evaluate the energies, forces and torques due to permanent+induced moments + // interacting with just the permanent moments. + energy = 0.5*(qiQI[0]*Vij[0] + qiQJ[0]*Vji[0]); + RealOpenMM fIZ = qiQI[0]*VijR[0]; + RealOpenMM fJZ = qiQJ[0]*VjiR[0]; + RealOpenMM EIX = 0.0, EIY = 0.0, EIZ = 0.0, EJX = 0.0, EJY = 0.0, EJZ = 0.0; + for(int i = 1; i < 9; ++i){ + energy += 0.5*(qiQI[i]*Vij[i] + qiQJ[i]*Vji[i]); + fIZ += qiQI[i]*VijR[i]; + fJZ += qiQJ[i]*VjiR[i]; + EIX += qiQIX[i]*Vij[i]; + EIY += qiQIY[i]*Vij[i]; + EIZ += qiQIZ[i]*Vij[i]; + EJX += qiQJX[i]*Vji[i]; + EJY += qiQJY[i]*Vji[i]; + EJZ += qiQJZ[i]*Vji[i]; + } - ftm2i1 += fdir1 + findmp1; - ftm2i2 += fdir2 + findmp2; - ftm2i3 += fdir3 + findmp3; + // Define the torque intermediates for the induced dipoles. These are simply the induced dipole torque + // intermediates dotted with the field due to permanent moments only, at each center. We inline the + // induced dipole torque intermediates here, for simplicity. N.B. There are no torques on the dipoles + // themselves, so we accumulate the torque intermediates into separate variables to allow them to be + // used only in the force calculation. + // + // The torque about the x axis (needed to obtain the y force on the induced dipoles, below) + // qiUindIx[0] = qiQUindI[2]; qiUindIx[1] = 0; qiUindIx[2] = -qiQUindI[0] + RealOpenMM iEIX = qiUinpI[2]*Vijp[0] + qiUindI[2]*Vijd[0] - qiUinpI[0]*Vijp[2] - qiUindI[0]*Vijd[2]; + RealOpenMM iEJX = qiUinpJ[2]*Vjip[0] + qiUindJ[2]*Vjid[0] - qiUinpJ[0]*Vjip[2] - qiUindJ[0]*Vjid[2]; + // The torque about the y axis (needed to obtain the x force on the induced dipoles, below) + // qiUindIy[0] = -qiQUindI[1]; qiUindIy[1] = qiQUindI[0]; qiUindIy[2] = 0 + RealOpenMM iEIY = qiUinpI[0]*Vijp[1] + qiUindI[0]*Vijd[1] - qiUinpI[1]*Vijp[0] - qiUindI[1]*Vijd[0]; + RealOpenMM iEJY = qiUinpJ[0]*Vjip[1] + qiUindJ[0]*Vjid[1] - qiUinpJ[1]*Vjip[0] - qiUindJ[1]*Vjid[0]; + + // Add in the induced-induced terms, if needed. + if(getPolarizationType() == AmoebaReferenceMultipoleForce::Mutual){ + // Uind-Uind terms (m=0) + RealOpenMM eCoef = -fourThirds*rInvVec[3]*(3.0*(uScale*thole_d0 + bVec[3]) + alphaRVec[3]*X); + RealOpenMM dCoef = rInvVec[4]*(6.0*(uScale*dthole_d0 + bVec[3]) + 4.0*alphaRVec[5]*X); + iEIX += eCoef*(qiUinpI[2]*qiUindJ[0] + qiUindI[2]*qiUinpJ[0]); + iEJX += eCoef*(qiUinpJ[2]*qiUindI[0] + qiUindJ[2]*qiUinpI[0]); + iEIY -= eCoef*(qiUinpI[1]*qiUindJ[0] + qiUindI[1]*qiUinpJ[0]); + iEJY -= eCoef*(qiUinpJ[1]*qiUindI[0] + qiUindJ[1]*qiUinpI[0]); + fIZ += dCoef*(qiUinpI[0]*qiUindJ[0] + qiUindI[0]*qiUinpJ[0]); + fIZ += dCoef*(qiUinpJ[0]*qiUindI[0] + qiUindJ[0]*qiUinpI[0]); + // Uind-Uind terms (m=1) + eCoef = 2.0*rInvVec[3]*(uScale*thole_d1 + bVec[3] - twoThirds*alphaRVec[3]*X); + dCoef = -3.0*rInvVec[4]*(uScale*dthole_d1 + bVec[3]); + iEIX -= eCoef*(qiUinpI[0]*qiUindJ[2] + qiUindI[0]*qiUinpJ[2]); + iEJX -= eCoef*(qiUinpJ[0]*qiUindI[2] + qiUindJ[0]*qiUinpI[2]); + iEIY += eCoef*(qiUinpI[0]*qiUindJ[1] + qiUindI[0]*qiUinpJ[1]); + iEJY += eCoef*(qiUinpJ[0]*qiUindI[1] + qiUindJ[0]*qiUinpI[1]); + fIZ += dCoef*(qiUinpI[1]*qiUindJ[1] + qiUindI[1]*qiUinpJ[1] + qiUinpI[2]*qiUindJ[2] + qiUindI[2]*qiUinpJ[2]); + fIZ += dCoef*(qiUinpJ[1]*qiUindI[1] + qiUindJ[1]*qiUinpI[1] + qiUinpJ[2]*qiUindI[2] + qiUindJ[2]*qiUinpI[2]); } - // intermediate variables for induced torque terms - - RealOpenMM gti2 = 0.5 * bn2 * (sci4+scip4); - RealOpenMM gti3 = 0.5 * bn2 * (sci3+scip3); - RealOpenMM gti4 = gfi4; - RealOpenMM gti5 = gfi5; - RealOpenMM gti6 = gfi6; - RealOpenMM gtri2 = 0.5 * rr5 * (sci4*psc5+scip4*dsc5); - RealOpenMM gtri3 = 0.5 * rr5 * (sci3*psc5+scip3*dsc5); - RealOpenMM gtri4 = gfri4; - RealOpenMM gtri5 = gfri5; - RealOpenMM gtri6 = gfri6; - - // get the permanent torque with screening - - RealOpenMM ttm21 = -bn1*dixdk1 + gf2*dixr1 - + gf4*(dixqkr1+dkxqir1+rxqidk1-2.0*qixqk1) - - gf5*rxqir1 - gf7*(rxqikr1+qkrxqir1); - RealOpenMM ttm22 = -bn1*dixdk2 + gf2*dixr2 - + gf4*(dixqkr2+dkxqir2+rxqidk2-2.0*qixqk2) - - gf5*rxqir2 - gf7*(rxqikr2+qkrxqir2); - RealOpenMM ttm23 = -bn1*dixdk3 + gf2*dixr3 - + gf4*(dixqkr3+dkxqir3+rxqidk3-2.0*qixqk3) - - gf5*rxqir3 - gf7*(rxqikr3+qkrxqir3); - RealOpenMM ttm31 = bn1*dixdk1 + gf3*dkxr1 - - gf4*(dixqkr1+dkxqir1+rxqkdi1-2.0*qixqk1) - - gf6*rxqkr1 - gf7*(rxqkir1-qkrxqir1); - RealOpenMM ttm32 = bn1*dixdk2 + gf3*dkxr2 - - gf4*(dixqkr2+dkxqir2+rxqkdi2-2.0*qixqk2) - - gf6*rxqkr2 - gf7*(rxqkir2-qkrxqir2); - RealOpenMM ttm33 = bn1*dixdk3 + gf3*dkxr3 - - gf4*(dixqkr3+dkxqir3+rxqkdi3-2.0*qixqk3) - - gf6*rxqkr3 - gf7*(rxqkir3-qkrxqir3); - - // get the permanent torque without screening - - RealOpenMM ttm2r1 = -rr3*dixdk1 + gfr2*dixr1-gfr5*rxqir1 - + gfr4*(dixqkr1+dkxqir1+rxqidk1-2.0*qixqk1) - - gfr7*(rxqikr1+qkrxqir1); - RealOpenMM ttm2r2 = -rr3*dixdk2 + gfr2*dixr2-gfr5*rxqir2 - + gfr4*(dixqkr2+dkxqir2+rxqidk2-2.0*qixqk2) - - gfr7*(rxqikr2+qkrxqir2); - RealOpenMM ttm2r3 = -rr3*dixdk3 + gfr2*dixr3-gfr5*rxqir3 - + gfr4*(dixqkr3+dkxqir3+rxqidk3-2.0*qixqk3) - - gfr7*(rxqikr3+qkrxqir3); - RealOpenMM ttm3r1 = rr3*dixdk1 + gfr3*dkxr1 -gfr6*rxqkr1 - - gfr4*(dixqkr1+dkxqir1+rxqkdi1-2.0*qixqk1) - - gfr7*(rxqkir1-qkrxqir1); - RealOpenMM ttm3r2 = rr3*dixdk2 + gfr3*dkxr2 -gfr6*rxqkr2 - - gfr4*(dixqkr2+dkxqir2+rxqkdi2-2.0*qixqk2) - - gfr7*(rxqkir2-qkrxqir2); - RealOpenMM ttm3r3 = rr3*dixdk3 + gfr3*dkxr3 -gfr6*rxqkr3 - - gfr4*(dixqkr3+dkxqir3+rxqkdi3-2.0*qixqk3) - - gfr7*(rxqkir3-qkrxqir3); - - // get the induced torque with screening - - RealOpenMM ttm2i1 = -bn1*(dixuk1+dixukp1)*0.5 - + gti2*dixr1 + gti4*(ukxqir1+rxqiuk1 - + ukxqirp1+rxqiukp1)*0.5 - gti5*rxqir1; - RealOpenMM ttm2i2 = -bn1*(dixuk2+dixukp2)*0.5 - + gti2*dixr2 + gti4*(ukxqir2+rxqiuk2 - + ukxqirp2+rxqiukp2)*0.5 - gti5*rxqir2; - RealOpenMM ttm2i3 = -bn1*(dixuk3+dixukp3)*0.5 - + gti2*dixr3 + gti4*(ukxqir3+rxqiuk3 - + ukxqirp3+rxqiukp3)*0.5 - gti5*rxqir3; - RealOpenMM ttm3i1 = -bn1*(dkxui1+dkxuip1)*0.5 - + gti3*dkxr1 - gti4*(uixqkr1+rxqkui1 - + uixqkrp1+rxqkuip1)*0.5 - gti6*rxqkr1; - RealOpenMM ttm3i2 = -bn1*(dkxui2+dkxuip2)*0.5 - + gti3*dkxr2 - gti4*(uixqkr2+rxqkui2 - + uixqkrp2+rxqkuip2)*0.5 - gti6*rxqkr2; - RealOpenMM ttm3i3 = -bn1*(dkxui3+dkxuip3)*0.5 - + gti3*dkxr3 - gti4*(uixqkr3+rxqkui3 - + uixqkrp3+rxqkuip3)*0.5 - gti6*rxqkr3; - - // get the induced torque without screening - - RealOpenMM ttm2ri1 = -rr3*(dixuk1*psc3+dixukp1*dsc3)*0.5 - + gtri2*dixr1 + gtri4*((ukxqir1+rxqiuk1)*psc5 - +(ukxqirp1+rxqiukp1)*dsc5)*0.5 - gtri5*rxqir1; - RealOpenMM ttm2ri2 = -rr3*(dixuk2*psc3+dixukp2*dsc3)*0.5 - + gtri2*dixr2 + gtri4*((ukxqir2+rxqiuk2)*psc5 - +(ukxqirp2+rxqiukp2)*dsc5)*0.5 - gtri5*rxqir2; - RealOpenMM ttm2ri3 = -rr3*(dixuk3*psc3+dixukp3*dsc3)*0.5 - + gtri2*dixr3 + gtri4*((ukxqir3+rxqiuk3)*psc5 - +(ukxqirp3+rxqiukp3)*dsc5)*0.5 - gtri5*rxqir3; - RealOpenMM ttm3ri1 = -rr3*(dkxui1*psc3+dkxuip1*dsc3)*0.5 - + gtri3*dkxr1 - gtri4*((uixqkr1+rxqkui1)*psc5 - +(uixqkrp1+rxqkuip1)*dsc5)*0.5 - gtri6*rxqkr1; - RealOpenMM ttm3ri2 = -rr3*(dkxui2*psc3+dkxuip2*dsc3)*0.5 - + gtri3*dkxr2 - gtri4*((uixqkr2+rxqkui2)*psc5 - +(uixqkrp2+rxqkuip2)*dsc5)*0.5 - gtri6*rxqkr2; - RealOpenMM ttm3ri3 = -rr3*(dkxui3*psc3+dkxuip3*dsc3)*0.5 - + gtri3*dkxr3 - gtri4*((uixqkr3+rxqkui3)*psc5 - +(uixqkrp3+rxqkuip3)*dsc5)*0.5 - gtri6*rxqkr3; - - // handle the case where scaling is used - - ftm21 = (ftm21-(1.0-scalingFactors[M_SCALE])*ftm2r1); - ftm2i1 = (ftm2i1-ftm2ri1); - ttm21 = (ttm21-(1.0-scalingFactors[M_SCALE])*ttm2r1); - ttm2i1 = (ttm2i1-ttm2ri1); - ttm31 = (ttm31-(1.0-scalingFactors[M_SCALE])*ttm3r1); - ttm3i1 = (ttm3i1-ttm3ri1); - - ftm22 = (ftm22-(1.0-scalingFactors[M_SCALE])*ftm2r2); - ftm2i2 = (ftm2i2-ftm2ri2); - ttm22 = (ttm22-(1.0-scalingFactors[M_SCALE])*ttm2r2); - ttm2i2 = (ttm2i2-ttm2ri2); - ttm32 = (ttm32-(1.0-scalingFactors[M_SCALE])*ttm3r2); - ttm3i2 = (ttm3i2-ttm3ri2); - - ftm23 = (ftm23-(1.0-scalingFactors[M_SCALE])*ftm2r3); - ftm2i3 = (ftm2i3-ftm2ri3); - ttm23 = (ttm23-(1.0-scalingFactors[M_SCALE])*ttm2r3); - ttm2i3 = (ttm2i3-ttm2ri3); - ttm33 = (ttm33-(1.0-scalingFactors[M_SCALE])*ttm3r3); - ttm3i3 = (ttm3i3-ttm3ri3); - - // increment gradient due to force and torque on first site; - - RealOpenMM conversionFactor = (_electric/_dielectric); - - energy *= conversionFactor; - - forces[iIndex][0] -= (ftm21 + ftm2i1)*conversionFactor; - forces[iIndex][1] -= (ftm22 + ftm2i2)*conversionFactor; - forces[iIndex][2] -= (ftm23 + ftm2i3)*conversionFactor; - - forces[jIndex][0] += (ftm21 + ftm2i1)*conversionFactor; - forces[jIndex][1] += (ftm22 + ftm2i2)*conversionFactor; - forces[jIndex][2] += (ftm23 + ftm2i3)*conversionFactor; - - torques[iIndex][0] += (ttm21 + ttm2i1)*conversionFactor; - torques[iIndex][1] += (ttm22 + ttm2i2)*conversionFactor; - torques[iIndex][2] += (ttm23 + ttm2i3)*conversionFactor; - - torques[jIndex][0] += (ttm31 + ttm3i1)*conversionFactor; - torques[jIndex][1] += (ttm32 + ttm3i2)*conversionFactor; - torques[jIndex][2] += (ttm33 + ttm3i3)*conversionFactor; + // The quasi-internal frame forces and torques. Note that the induced torque intermediates are + // used in the force expression, but not in the torques; the induced dipoles are isotropic. + RealOpenMM qiForce[3] = {rInv*(EIY+EJY+iEIY+iEJY), -rInv*(EIX+EJX+iEIX+iEJX), -(fJZ+fIZ)}; + RealOpenMM qiTorqueI[3] = {-EIX, -EIY, -EIZ}; + RealOpenMM qiTorqueJ[3] = {-EJX, -EJY, -EJZ}; + // Rotate the forces and torques back to the lab frame + for (int ii = 0; ii < 3; ii++) { + RealOpenMM forceVal = 0.0; + RealOpenMM torqueIVal = 0.0; + RealOpenMM torqueJVal = 0.0; + for (int jj = 0; jj < 3; jj++) { + forceVal += forceRotationMatrix[ii][jj] * qiForce[jj]; + torqueIVal += forceRotationMatrix[ii][jj] * qiTorqueI[jj]; + torqueJVal += forceRotationMatrix[ii][jj] * qiTorqueJ[jj]; + } + torques[iIndex][ii] += torqueIVal; + torques[jIndex][ii] += torqueJVal; + forces[iIndex][ii] -= forceVal; + forces[jIndex][ii] += forceVal; + } return energy; } @@ -6616,6 +6508,6 @@ RealOpenMM AmoebaReferencePmeMultipoleForce::calculateElectrostatic(const vector energy += computeReciprocalSpaceInducedDipoleForceAndEnergy(getPolarizationType(), particleData, forces, torques); energy += computeReciprocalSpaceFixedMultipoleForceAndEnergy(particleData, forces, torques); energy += calculatePmeSelfEnergy(particleData); - + return energy; } diff --git a/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h b/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h index 89ef428292207713e38476760f9a4420b86938de..b4111de01a73678089c724a6b98d202a4322b952 100644 --- a/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h +++ b/plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h @@ -37,6 +37,20 @@ typedef std::map< unsigned int, RealOpenMM> MapIntRealOpenMM; typedef MapIntRealOpenMM::iterator MapIntRealOpenMMI; typedef MapIntRealOpenMM::const_iterator MapIntRealOpenMMCI; + +// A few useful constants for the spherical harmonic multipole code. +const RealOpenMM oneThird = 1.0/3.0; +const RealOpenMM twoThirds = 2.0/3.0; +const RealOpenMM fourThirds = 4.0/3.0; +const RealOpenMM fourSqrtOneThird = 4.0/sqrt(3.0); +const RealOpenMM sqrtFourThirds = 2.0/sqrt(3.0); +const RealOpenMM sqrtOneThird = 1.0/sqrt(3.0); +const RealOpenMM sqrtThree = sqrt(3.0); +const RealOpenMM oneNinth = 1.0/9.0; +const RealOpenMM fourOverFortyFive = 4.0/45.0; +const RealOpenMM fourOverFifteen = 4.0/15.0; + + /** * 2-dimensional int vector */ @@ -589,6 +603,8 @@ protected: RealOpenMM charge; RealVec dipole; RealOpenMM quadrupole[6]; + RealVec sphericalDipole; + RealOpenMM sphericalQuadrupole[5]; RealOpenMM thole; RealOpenMM dampingFactor; RealOpenMM polarity; @@ -795,6 +811,41 @@ protected: const MultipoleParticleData& particleX, MultipoleParticleData* particleY, int axisType) const; + /** + * Forms the rotation matrix for the quasi-internal coordinate system, + * which is the rotation matrix that describes the orientation of the + * internuclear vector for a given pair (I,J) in lab frame. + * + * @param particleI particleI position + * @param particleJ particleJ position + * @param deltaR the internuclear vector, corrected for periodic boundary conditions + * @param r the bond length between atoms I and J + * @param rotationmatrix the output rotation matrix for a 3-vector + */ + void formQIRotationMatrix(const RealVec& iPosition, + const RealVec& jPosition, + const RealVec &deltaR, + RealOpenMM r, + RealOpenMM (&rotationMatrix)[3][3]) const; + + + /** + * Constructs a rotation matrix for spherical harmonic quadrupoles, using the dipole rotation matrix. + * + * @param D1 The input spherical harmonic dipole rotation matrix + * @param D2 The output spherical harmonic quadrupole rotation matrix + */ + void buildSphericalQuadrupoleRotationMatrix(const RealOpenMM (&D1)[3][3], RealOpenMM (&D2)[5][5]) const; + + /** + * Constructs a rotation matrix for spherical harmonic quadrupoles, using the dipole rotation matrix. + * Only the m={0,1c,1s} terms are constructed; these are the only terms needed to evaluate the field. + * + * @param D1 The input spherical harmonic dipole rotation matrix + * @param D2 The output spherical harmonic quadrupole rotation matrix + */ + void buildPartialSphericalQuadrupoleRotationMatrix(const RealOpenMM (&D1)[3][3], RealOpenMM (&D2)[3][5]) const; + /** * Apply rotation matrix to molecular dipole/quadrupoles to get corresponding lab frame values. * diff --git a/plugins/amoeba/platforms/reference/tests/CMakeLists.txt b/plugins/amoeba/platforms/reference/tests/CMakeLists.txt index 707613f4bb9c776111ed9e5dec4b02f7ca834b01..27309d8be81f9009c6e73aacbb706743567887ca 100644 --- a/plugins/amoeba/platforms/reference/tests/CMakeLists.txt +++ b/plugins/amoeba/platforms/reference/tests/CMakeLists.txt @@ -12,7 +12,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # Link with shared library ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_AMOEBA_TARGET} ${SHARED_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaGeneralizedKirkwoodForce.cpp b/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaGeneralizedKirkwoodForce.cpp index e3e74abb98e3100436fee3c2b122f675789283be..7fe9b5b2ae1fd07e7259b57499e4fef140aa9745 100644 --- a/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaGeneralizedKirkwoodForce.cpp +++ b/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaGeneralizedKirkwoodForce.cpp @@ -6983,7 +6983,7 @@ static void compareForcesEnergy(std::string& testName, double expectedEnergy, do const std::vector& forces, double tolerance) { for (unsigned int ii = 0; ii < forces.size(); ii++) { - ASSERT_EQUAL_VEC_MOD(expectedForces[ii], forces[ii], tolerance, testName); + ASSERT_EQUAL_VEC(expectedForces[ii], forces[ii], tolerance); } ASSERT_EQUAL_TOL_MOD(expectedEnergy, energy, tolerance, testName); } diff --git a/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaMultipoleForce.cpp b/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaMultipoleForce.cpp index f3f4abf3ec22723d8f3be486bff46a6f837b69e8..6a9df009bd6a39856317fd4e4c182b6ce2dce587 100644 --- a/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaMultipoleForce.cpp +++ b/plugins/amoeba/platforms/reference/tests/TestReferenceAmoebaMultipoleForce.cpp @@ -1864,7 +1864,16 @@ static void setupAndGetForcesEnergyMultipoleLargeWater(AmoebaMultipoleForce::Non energy = state.getPotentialEnergy(); } - return; + if (nonbondedMethod == AmoebaMultipoleForce::PME) { + double actualAlpha; + int actualSize[3]; + amoebaMultipoleForce->getPMEParametersInContext(context, actualAlpha, actualSize[0], actualSize[1], actualSize[2]); + ASSERT_EQUAL_TOL(amoebaMultipoleForce->getAEwald(), actualAlpha, 1e-5); + for (int i = 0; i < 3; i++) { + ASSERT(actualSize[i] >= inputPmeGridDimension); + ASSERT(actualSize[i] < inputPmeGridDimension+10); + } + } } // test multipole mutual polarization using PME for box of water diff --git a/plugins/amoeba/serialization/tests/CMakeLists.txt b/plugins/amoeba/serialization/tests/CMakeLists.txt index 8f0550e70a18f7de003e6f83b7383cc88f9c1d94..2e836c6b4c891842ddbac61446a83f3ad915e9a6 100644 --- a/plugins/amoeba/serialization/tests/CMakeLists.txt +++ b/plugins/amoeba/serialization/tests/CMakeLists.txt @@ -12,7 +12,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # All tests use shared libraries ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_AMOEBA_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/plugins/cpupme/CMakeLists.txt b/plugins/cpupme/CMakeLists.txt index 5e9e0f27a50ba23ebec83a9e5d27f0a625c46801..12a82f8f037aa47c6a2a548ad3b04918bc14dec0 100644 --- a/plugins/cpupme/CMakeLists.txt +++ b/plugins/cpupme/CMakeLists.txt @@ -75,7 +75,7 @@ IF (OPENMM_BUILD_SHARED_LIB) IF (FFTW_THREADS_LIBRARY) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${FFTW_THREADS_LIBRARY}) ENDIF (FFTW_THREADS_LIBRARY) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_PME_BUILDING_SHARED_LIBRARY") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_PME_BUILDING_SHARED_LIBRARY") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) ENDIF (OPENMM_BUILD_SHARED_LIB) @@ -88,7 +88,7 @@ IF(OPENMM_BUILD_STATIC_LIB) IF (FFTW_THREADS_LIBRARY) TARGET_LINK_LIBRARIES(${STATIC_TARGET} ${FFTW_THREADS_LIBRARY}) ENDIF (FFTW_THREADS_LIBRARY) - SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_PME_BUILDING_STATIC_LIBRARY") + SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_PME_BUILDING_STATIC_LIBRARY") INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${STATIC_TARGET}) ENDIF(OPENMM_BUILD_STATIC_LIB) diff --git a/plugins/cpupme/src/CpuPmeKernels.cpp b/plugins/cpupme/src/CpuPmeKernels.cpp index 973b125625669cf21880429ca4ca82f355f4e9b1..ce1ba2ef39359499a074adf14dee55cf55ab807d 100644 --- a/plugins/cpupme/src/CpuPmeKernels.cpp +++ b/plugins/cpupme/src/CpuPmeKernels.cpp @@ -49,7 +49,7 @@ static const int PME_ORDER = 5; bool CpuCalcPmeReciprocalForceKernel::hasInitializedThreads = false; int CpuCalcPmeReciprocalForceKernel::numThreads = 0; -static void spreadCharge(int start, int end, float* posq, float* grid, int gridx, int gridy, int gridz, int numParticles, Vec3* periodicBoxVectors, Vec3* recipBoxVectors) { +static void spreadCharge(float* posq, float* grid, int gridx, int gridy, int gridz, int numParticles, Vec3* periodicBoxVectors, Vec3* recipBoxVectors, gmx_atomic_t& atomicCounter) { float temp[4]; fvec4 boxSize((float) periodicBoxVectors[0][0], (float) periodicBoxVectors[1][1], (float) periodicBoxVectors[2][2], 0); fvec4 invBoxSize((float) recipBoxVectors[0][0], (float) recipBoxVectors[1][1], (float) recipBoxVectors[2][2], 0); @@ -64,7 +64,11 @@ static void spreadCharge(int start, int end, float* posq, float* grid, int gridx const float epsilonFactor = sqrt(ONE_4PI_EPS0); memset(grid, 0, sizeof(float)*gridx*gridy*gridz); - for (int i = start; i < end; i++) { + while (true) { + int i = gmx_atomic_fetch_add(&atomicCounter, 1); + if (i >= numParticles) + break; + // Find the position relative to the nearest grid point. fvec4 pos(&posq[4*i]); @@ -225,25 +229,15 @@ static double reciprocalEnergy(int start, int end, fftwf_complex* grid, int grid return 0.5*energy; } -static void reciprocalConvolution(int start, int end, fftwf_complex* grid, int gridx, int gridy, int gridz, vector& recipEterm) { - const unsigned int zsize = gridz/2+1; - const unsigned int yzsize = gridy*zsize; - - int firstz = (start == 0 ? 1 : 0); - for (int kx = start; kx < end; kx++) { - for (int ky = 0; ky < gridy; ky++) { - for (int kz = firstz; kz < zsize; kz++) { - int index = kx*yzsize + ky*zsize + kz; - float eterm = recipEterm[index]; - grid[index][0] *= eterm; - grid[index][1] *= eterm; - } - firstz = 0; - } +static void reciprocalConvolution(int start, int end, fftwf_complex* grid, vector& recipEterm) { + for (int index = start; index < end; index++) { + float eterm = recipEterm[index]; + grid[index][0] *= eterm; + grid[index][1] *= eterm; } } -static void interpolateForces(int start, int end, float* posq, float* force, float* grid, int gridx, int gridy, int gridz, int numParticles, Vec3* periodicBoxVectors, Vec3* recipBoxVectors) { +static void interpolateForces(float* posq, float* force, float* grid, int gridx, int gridy, int gridz, int numParticles, Vec3* periodicBoxVectors, Vec3* recipBoxVectors, gmx_atomic_t& atomicCounter) { fvec4 boxSize((float) periodicBoxVectors[0][0], (float) periodicBoxVectors[1][1], (float) periodicBoxVectors[2][2], 0); fvec4 invBoxSize((float) recipBoxVectors[0][0], (float) recipBoxVectors[1][1], (float) recipBoxVectors[2][2], 0); fvec4 recipBoxVec0((float) recipBoxVectors[0][0], (float) recipBoxVectors[0][1], (float) recipBoxVectors[0][2], 0); @@ -254,7 +248,11 @@ static void interpolateForces(int start, int end, float* posq, float* force, flo fvec4 one(1); fvec4 scale(1.0f/(PME_ORDER-1)); const float epsilonFactor = sqrt(ONE_4PI_EPS0); - for (int i = start; i < end; i++) { + while (true) { + int i = gmx_atomic_fetch_add(&atomicCounter, 1); + if (i >= numParticles) + break; + // Find the position relative to the nearest grid point. fvec4 pos(&posq[4*i]); @@ -335,21 +333,19 @@ static void interpolateForces(int start, int end, float* posq, float* force, flo } } -class CpuCalcPmeReciprocalForceKernel::ThreadData { +class CpuCalcPmeReciprocalForceKernel::ComputeTask : public ThreadPool::Task { public: - CpuCalcPmeReciprocalForceKernel& owner; - int index; - float* tempGrid; - ThreadData(CpuCalcPmeReciprocalForceKernel& owner, int index) : owner(owner), index(index), tempGrid(NULL) { + ComputeTask(CpuCalcPmeReciprocalForceKernel& owner) : owner(owner) { + } + void execute(ThreadPool& threads, int threadIndex) { + owner.runWorkerThread(threads, threadIndex); } + CpuCalcPmeReciprocalForceKernel& owner; }; static void* threadBody(void* args) { - CpuCalcPmeReciprocalForceKernel::ThreadData& data = *reinterpret_cast(args); - data.owner.runThread(data.index); - if (data.tempGrid != NULL) - fftwf_free(data.tempGrid); - delete &data; + CpuCalcPmeReciprocalForceKernel& owner = *reinterpret_cast(args); + owner.runMainThread(); return 0; } @@ -362,6 +358,7 @@ void CpuCalcPmeReciprocalForceKernel::initialize(int xsize, int ysize, int zsize fftwf_init_threads(); hasInitializedThreads = true; } + threadEnergy.resize(numThreads); gridx = findFFTDimension(xsize, false); gridy = findFFTDimension(ysize, false); gridz = findFFTDimension(zsize, true); @@ -372,23 +369,24 @@ void CpuCalcPmeReciprocalForceKernel::initialize(int xsize, int ysize, int zsize // Initialize threads. + isFinished = false; pthread_cond_init(&startCondition, NULL); pthread_cond_init(&endCondition, NULL); - pthread_cond_init(&mainThreadStartCondition, NULL); - pthread_cond_init(&mainThreadEndCondition, NULL); pthread_mutex_init(&lock, NULL); - thread.resize(numThreads); - for (int i = 0; i < numThreads; i++) { - ThreadData* data = new ThreadData(*this, i); - threadData.push_back(data); - pthread_create(&thread[i], NULL, threadBody, data); - data->tempGrid = (float*) fftwf_malloc(sizeof(float)*(gridx*gridy*gridz+3)); - } - pthread_create(&mainThread, NULL, threadBody, new ThreadData(*this, -1)); + pthread_create(&mainThread, NULL, threadBody, this); + + // Wait until the main thread is up and running. + + pthread_mutex_lock(&lock); + while (!isFinished) + pthread_cond_wait(&endCondition, &lock); + pthread_mutex_unlock(&lock); // Initialize FFTW. - realGrid = threadData[0]->tempGrid; + for (int i = 0; i < numThreads; i++) + tempGrid.push_back((float*) fftwf_malloc(sizeof(float)*(gridx*gridy*gridz+3))); + realGrid = tempGrid[0]; complexGrid = (fftwf_complex*) fftwf_malloc(sizeof(fftwf_complex)*gridx*gridy*(gridz/2+1)); fftwf_plan_with_nthreads(numThreads); forwardFFT = fftwf_plan_dft_r2c_3d(gridx, gridy, gridz, realGrid, complexGrid, FFTW_MEASURE); @@ -455,16 +453,13 @@ CpuCalcPmeReciprocalForceKernel::~CpuCalcPmeReciprocalForceKernel() { isDeleted = true; pthread_mutex_lock(&lock); pthread_cond_broadcast(&startCondition); - pthread_cond_broadcast(&mainThreadStartCondition); pthread_mutex_unlock(&lock); - for (int i = 0; i < (int) thread.size(); i++) - pthread_join(thread[i], NULL); pthread_join(mainThread, NULL); pthread_mutex_destroy(&lock); pthread_cond_destroy(&startCondition); pthread_cond_destroy(&endCondition); - pthread_cond_destroy(&mainThreadStartCondition); - pthread_cond_destroy(&mainThreadEndCondition); + for (int i = 0; i < (int) tempGrid.size(); i++) + fftwf_free(tempGrid[i]); if (complexGrid != NULL) fftwf_free(complexGrid); if (hasCreatedPlan) { @@ -473,92 +468,82 @@ CpuCalcPmeReciprocalForceKernel::~CpuCalcPmeReciprocalForceKernel() { } } -void CpuCalcPmeReciprocalForceKernel::runThread(int index) { - if (index == -1) { - // This is the main thread that coordinates all the other ones. - - pthread_mutex_lock(&lock); - while (true) { - // Wait for the signal to start. - - pthread_cond_wait(&mainThreadStartCondition, &lock); - if (isDeleted) - break; - posq = io->getPosq(); - advanceThreads(); // Signal threads to perform charge spreading. - advanceThreads(); // Signal threads to sum the charge grids. - fftwf_execute_dft_r2c(forwardFFT, realGrid, complexGrid); - if (lastBoxVectors[0] != periodicBoxVectors[0] || lastBoxVectors[1] != periodicBoxVectors[1] || lastBoxVectors[2] != periodicBoxVectors[2]) - advanceThreads(); // Signal threads to compute the reciprocal scale factors. - if (includeEnergy) - advanceThreads(); // Signal threads to compute energy. - advanceThreads(); // Signal threads to perform reciprocal convolution. - fftwf_execute_dft_c2r(backwardFFT, complexGrid, realGrid); - advanceThreads(); // Signal threads to interpolate forces. - isFinished = true; - lastBoxVectors[0] = periodicBoxVectors[0]; - lastBoxVectors[1] = periodicBoxVectors[1]; - lastBoxVectors[2] = periodicBoxVectors[2]; - pthread_cond_signal(&mainThreadEndCondition); - } - pthread_mutex_unlock(&lock); - } - else { - // This is a worker thread. - - int particleStart = (index*numParticles)/numThreads; - int particleEnd = ((index+1)*numParticles)/numThreads; - int gridxStart = (index*gridx)/numThreads; - int gridxEnd = ((index+1)*gridx)/numThreads; - int gridSize = (gridx*gridy*gridz+3)/4; - int gridStart = 4*((index*gridSize)/numThreads); - int gridEnd = 4*(((index+1)*gridSize)/numThreads); - while (true) { - threadWait(); - if (isDeleted) - break; - spreadCharge(particleStart, particleEnd, posq, threadData[index]->tempGrid, gridx, gridy, gridz, numParticles, periodicBoxVectors, recipBoxVectors); - threadWait(); - int numGrids = threadData.size(); - for (int i = gridStart; i < gridEnd; i += 4) { - fvec4 sum(&realGrid[i]); - for (int j = 1; j < numGrids; j++) - sum += fvec4(&threadData[j]->tempGrid[i]); - sum.store(&realGrid[i]); - } - threadWait(); - if (lastBoxVectors[0] != periodicBoxVectors[0] || lastBoxVectors[1] != periodicBoxVectors[1] || lastBoxVectors[2] != periodicBoxVectors[2]) { - computeReciprocalEterm(gridxStart, gridxEnd, gridx, gridy, gridz, recipEterm, alpha, bsplineModuli, periodicBoxVectors, recipBoxVectors); - threadWait(); - } - if (includeEnergy) { - double threadEnergy = reciprocalEnergy(gridxStart, gridxEnd, complexGrid, gridx, gridy, gridz, alpha, bsplineModuli, periodicBoxVectors, recipBoxVectors); - pthread_mutex_lock(&lock); - energy += threadEnergy; - pthread_mutex_unlock(&lock); - threadWait(); - } - reciprocalConvolution(gridxStart, gridxEnd, complexGrid, gridx, gridy, gridz, recipEterm); - threadWait(); - interpolateForces(particleStart, particleEnd, posq, &force[0], realGrid, gridx, gridy, gridz, numParticles, periodicBoxVectors, recipBoxVectors); - } - } -} +void CpuCalcPmeReciprocalForceKernel::runMainThread() { + // This is the main thread that coordinates all the other ones. -void CpuCalcPmeReciprocalForceKernel::threadWait() { pthread_mutex_lock(&lock); - waitCount++; + isFinished = true; pthread_cond_signal(&endCondition); - pthread_cond_wait(&startCondition, &lock); + ThreadPool threads(numThreads); + while (true) { + // Wait for the signal to start. + + pthread_cond_wait(&startCondition, &lock); + if (isDeleted) + break; + posq = io->getPosq(); + ComputeTask task(*this); + gmx_atomic_set(&atomicCounter, 0); + threads.execute(task); // Signal threads to perform charge spreading. + threads.waitForThreads(); + threads.resumeThreads(); // Signal threads to sum the charge grids. + threads.waitForThreads(); + fftwf_execute_dft_r2c(forwardFFT, realGrid, complexGrid); + if (lastBoxVectors[0] != periodicBoxVectors[0] || lastBoxVectors[1] != periodicBoxVectors[1] || lastBoxVectors[2] != periodicBoxVectors[2]) { + threads.resumeThreads(); // Signal threads to compute the reciprocal scale factors. + threads.waitForThreads(); + } + if (includeEnergy) { + threads.resumeThreads(); // Signal threads to compute energy. + threads.waitForThreads(); + for (int i = 0; i < (int) threadEnergy.size(); i++) + energy += threadEnergy[i]; + } + threads.resumeThreads(); // Signal threads to perform reciprocal convolution. + threads.waitForThreads(); + fftwf_execute_dft_c2r(backwardFFT, complexGrid, realGrid); + gmx_atomic_set(&atomicCounter, 0); + threads.resumeThreads(); // Signal threads to interpolate forces. + threads.waitForThreads(); + isFinished = true; + lastBoxVectors[0] = periodicBoxVectors[0]; + lastBoxVectors[1] = periodicBoxVectors[1]; + lastBoxVectors[2] = periodicBoxVectors[2]; + pthread_cond_signal(&endCondition); + } pthread_mutex_unlock(&lock); } -void CpuCalcPmeReciprocalForceKernel::advanceThreads() { - waitCount = 0; - pthread_cond_broadcast(&startCondition); - while (waitCount < numThreads) { - pthread_cond_wait(&endCondition, &lock); +void CpuCalcPmeReciprocalForceKernel::runWorkerThread(ThreadPool& threads, int index) { + int gridxStart = (index*gridx)/numThreads; + int gridxEnd = ((index+1)*gridx)/numThreads; + int gridSize = (gridx*gridy*gridz+3)/4; + int gridStart = 4*((index*gridSize)/numThreads); + int gridEnd = 4*(((index+1)*gridSize)/numThreads); + int complexSize = gridx*gridy*(gridz/2+1); + int complexStart = max(1, ((index*complexSize)/numThreads)); + int complexEnd = (((index+1)*complexSize)/numThreads); + spreadCharge(posq, tempGrid[index], gridx, gridy, gridz, numParticles, periodicBoxVectors, recipBoxVectors, atomicCounter); + threads.syncThreads(); + int numGrids = tempGrid.size(); + for (int i = gridStart; i < gridEnd; i += 4) { + fvec4 sum(&realGrid[i]); + for (int j = 1; j < numGrids; j++) + sum += fvec4(&tempGrid[j][i]); + sum.store(&realGrid[i]); } + threads.syncThreads(); + if (lastBoxVectors[0] != periodicBoxVectors[0] || lastBoxVectors[1] != periodicBoxVectors[1] || lastBoxVectors[2] != periodicBoxVectors[2]) { + computeReciprocalEterm(gridxStart, gridxEnd, gridx, gridy, gridz, recipEterm, alpha, bsplineModuli, periodicBoxVectors, recipBoxVectors); + threads.syncThreads(); + } + if (includeEnergy) { + threadEnergy[index] = reciprocalEnergy(gridxStart, gridxEnd, complexGrid, gridx, gridy, gridz, alpha, bsplineModuli, periodicBoxVectors, recipBoxVectors); + threads.syncThreads(); + } + reciprocalConvolution(complexStart, complexEnd, complexGrid, recipEterm); + threads.syncThreads(); + interpolateForces(posq, &force[0], realGrid, gridx, gridy, gridz, numParticles, periodicBoxVectors, recipBoxVectors, atomicCounter); } void CpuCalcPmeReciprocalForceKernel::beginComputation(IO& io, const Vec3* periodicBoxVectors, bool includeEnergy) { @@ -581,14 +566,14 @@ void CpuCalcPmeReciprocalForceKernel::beginComputation(IO& io, const Vec3* perio pthread_mutex_lock(&lock); isFinished = false; - pthread_cond_signal(&mainThreadStartCondition); + pthread_cond_signal(&startCondition); pthread_mutex_unlock(&lock); } double CpuCalcPmeReciprocalForceKernel::finishComputation(IO& io) { pthread_mutex_lock(&lock); while (!isFinished) { - pthread_cond_wait(&mainThreadEndCondition, &lock); + pthread_cond_wait(&endCondition, &lock); } pthread_mutex_unlock(&lock); io.setForce(&force[0]); @@ -599,6 +584,13 @@ bool CpuCalcPmeReciprocalForceKernel::isProcessorSupported() { return isVec4Supported(); } +void CpuCalcPmeReciprocalForceKernel::getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const { + alpha = this->alpha; + nx = gridx; + ny = gridy; + nz = gridz; +} + int CpuCalcPmeReciprocalForceKernel::findFFTDimension(int minimum, bool isZ) { if (minimum < 1) return 1; diff --git a/plugins/cpupme/src/CpuPmeKernels.h b/plugins/cpupme/src/CpuPmeKernels.h index 895ce3e227dd6457a19b5c308a8ac041bf5043a1..a9025d83d8c5ce93f308f72d790796db4b67b47e 100644 --- a/plugins/cpupme/src/CpuPmeKernels.h +++ b/plugins/cpupme/src/CpuPmeKernels.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013-2014 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -36,6 +36,8 @@ #include "internal/windowsExportPme.h" #include "openmm/kernels.h" #include "openmm/Vec3.h" +#include "openmm/internal/gmx_atomic.h" +#include "openmm/internal/ThreadPool.h" #include #include #include @@ -49,7 +51,6 @@ namespace OpenMM { class OPENMM_EXPORT_PME CpuCalcPmeReciprocalForceKernel : public CalcPmeReciprocalForceKernel { public: - class ThreadData; CpuCalcPmeReciprocalForceKernel(std::string name, const Platform& platform) : CalcPmeReciprocalForceKernel(name, platform), hasCreatedPlan(false), isDeleted(false), realGrid(NULL), complexGrid(NULL) { } @@ -80,22 +81,28 @@ public: */ double finishComputation(IO& io); /** - * This routine contains the code executed by each thread. + * This routine contains the code executed by the main thread. */ - void runThread(int index); + void runMainThread(); /** - * Get whether the current CPU supports all features needed by this kernel. + * This routine contains the code executed by each worker thread. */ - static bool isProcessorSupported(); -private: + void runWorkerThread(ThreadPool& threads, int index); /** - * This is called by the worker threads to wait until the master thread instructs them to advance. + * Get whether the current CPU supports all features needed by this kernel. */ - void threadWait(); + static bool isProcessorSupported(); /** - * This is called by the master thread to instruct all the worker threads to advance. + * Get the parameters being used for PME. + * + * @param alpha the separation parameter + * @param nx the number of grid points along the X axis + * @param ny the number of grid points along the Y axis + * @param nz the number of grid points along the Z axis */ - void advanceThreads(); + void getPMEParameters(double& alpha, int& nx, int& ny, int& nz) const; +private: + class ComputeTask; /** * Select a size for one grid dimension that FFTW can handle efficiently. */ @@ -109,22 +116,22 @@ private: std::vector bsplineModuli[3]; std::vector recipEterm; Vec3 lastBoxVectors[3]; + std::vector threadEnergy; + std::vector tempGrid; float* realGrid; fftwf_complex* complexGrid; fftwf_plan forwardFFT, backwardFFT; int waitCount; pthread_cond_t startCondition, endCondition; - pthread_cond_t mainThreadStartCondition, mainThreadEndCondition; pthread_mutex_t lock; pthread_t mainThread; - std::vector thread; - std::vector threadData; // The following variables are used to store information about the calculation currently being performed. IO* io; float energy; float* posq; Vec3 periodicBoxVectors[3], recipBoxVectors[3]; bool includeEnergy; + gmx_atomic_t atomicCounter; }; } // namespace OpenMM diff --git a/plugins/cpupme/tests/CMakeLists.txt b/plugins/cpupme/tests/CMakeLists.txt index ae0864a4b956df5f20b5c7368eb31acbc8ead487..857b41ae76eff27096100ac696af22f931aabeee 100644 --- a/plugins/cpupme/tests/CMakeLists.txt +++ b/plugins/cpupme/tests/CMakeLists.txt @@ -13,6 +13,6 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ELSE (OPENMM_BUILD_SHARED_LIB) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${STATIC_TARGET} ${OPENMM_LIBRARY_NAME}_static) ENDIF (OPENMM_BUILD_SHARED_LIB) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/plugins/cudacompiler/CMakeLists.txt b/plugins/cudacompiler/CMakeLists.txt index cbd8f41840d0db4dcad4ce45c5b0778aa504b654..22ef694c1b6dbf875237535f2a8500a0c6c0fd72 100644 --- a/plugins/cudacompiler/CMakeLists.txt +++ b/plugins/cudacompiler/CMakeLists.txt @@ -74,7 +74,7 @@ IF (OPENMM_BUILD_SHARED_LIB) IF (APPLE) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${SHARED_TARGET}) @@ -91,7 +91,7 @@ IF(OPENMM_BUILD_STATIC_LIB) IF (APPLE) SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${STATIC_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL_TARGETS(/lib/plugins RUNTIME_DIRECTORY /lib/plugins ${STATIC_TARGET}) diff --git a/plugins/cudacompiler/tests/CMakeLists.txt b/plugins/cudacompiler/tests/CMakeLists.txt index 21218da3f0157f562ed163949326f99bb356deec..a17f7bd169ac56f9e7302b7d0e8317e88d2d6a99 100644 --- a/plugins/cudacompiler/tests/CMakeLists.txt +++ b/plugins/cudacompiler/tests/CMakeLists.txt @@ -17,7 +17,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF (APPLE) SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ELSE (APPLE) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ENDIF (APPLE) ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) diff --git a/plugins/drude/CMakeLists.txt b/plugins/drude/CMakeLists.txt index d02ec3aa47f63417723d5cdae56db06abf88650b..831cfb6e34ed5ad0d321ee20de650489530b7e26 100644 --- a/plugins/drude/CMakeLists.txt +++ b/plugins/drude/CMakeLists.txt @@ -67,14 +67,14 @@ ENDFOREACH(subdir) INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/src) ADD_LIBRARY(${SHARED_DRUDE_TARGET} SHARED ${SOURCE_DRUDE_FILES} ${SOURCE_DRUDE_INCLUDE_FILES} ${API_DRUDE_ABS_INCLUDE_FILES}) -SET_TARGET_PROPERTIES(${SHARED_DRUDE_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_DRUDE_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_DRUDE_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_DRUDE_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") FILE(GLOB serialization_files ${CMAKE_CUURENT_SOURCE_DIR}/serialization/src/*.cpp) SET_SOURCE_FILES_PROPERTIES(${serialization_files} PROPERTIES COMPILE_FLAGS "-DOPENMM_DRUDE_BUILDING_SHARED_LIBRARY -DTIXML_USE_STL") IF(OPENMM_BUILD_STATIC_LIB) ADD_LIBRARY(${STATIC_DRUDE_TARGET} STATIC ${SOURCE_DRUDE_FILES} ${SOURCE_DRUDE_INCLUDE_FILES} ${API_DRUDE_ABS_INCLUDE_FILES}) - SET_TARGET_PROPERTIES(${STATIC_DRUDE_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_DRUDE_BUILDING_STATIC_LIBRARY -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") + SET_TARGET_PROPERTIES(${STATIC_DRUDE_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_DRUDE_BUILDING_STATIC_LIBRARY -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") ENDIF(OPENMM_BUILD_STATIC_LIB) # ---------------------------------------------------------------------------- diff --git a/plugins/drude/openmmapi/include/openmm/DrudeLangevinIntegrator.h b/plugins/drude/openmmapi/include/openmm/DrudeLangevinIntegrator.h index cbccb5fc56d604960cda6589c122d148be00b2f7..76b45fad5c3b2190d61a18a3dd07d659dd4d07cf 100644 --- a/plugins/drude/openmmapi/include/openmm/DrudeLangevinIntegrator.h +++ b/plugins/drude/openmmapi/include/openmm/DrudeLangevinIntegrator.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -44,6 +44,10 @@ namespace OpenMM { * are not part of a Drude particle pair), as well as to the center of mass of each Drude particle pair. * A second thermostat, typically with a much lower temperature, is applied to the relative internal * displacement of each pair. + * + * This integrator can optionally set an upper limit on how far any Drude particle is ever allowed to + * get from its parent particle. This can sometimes help to improve stability. The limit is enforced + * with a hard wall constraint. * * This Integrator requires the System to include a DrudeForce, which it uses to identify the Drude * particles. @@ -129,6 +133,16 @@ public: void setDrudeFriction(double coeff) { drudeFriction = coeff; } + /** + * Get the maximum distance a Drude particle can ever move from its parent particle, measured in nm. This is implemented + * with a hard wall constraint. If this distance is set to 0 (the default), the hard wall constraint is omitted. + */ + double getMaxDrudeDistance() const; + /** + * Set the maximum distance a Drude particle can ever move from its parent particle, measured in nm. This is implemented + * with a hard wall constraint. If this distance is set to 0 (the default), the hard wall constraint is omitted. + */ + void setMaxDrudeDistance(double distance); /** * Get the random number seed. See setRandomNumberSeed() for details. */ @@ -181,7 +195,7 @@ protected: */ double computeKineticEnergy(); private: - double temperature, friction, drudeTemperature, drudeFriction; + double temperature, friction, drudeTemperature, drudeFriction, maxDrudeDistance; int randomNumberSeed; Kernel kernel; }; diff --git a/plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp b/plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp index b1753780547880a2cb16dd2bd29e24c7212bf29c..694118993a2efc82926b42d51ecbf83f67e1391f 100644 --- a/plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp +++ b/plugins/drude/openmmapi/src/DrudeLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2008-2013 Stanford University and the Authors. * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -46,11 +46,22 @@ DrudeLangevinIntegrator::DrudeLangevinIntegrator(double temperature, double fric setFriction(frictionCoeff); setDrudeTemperature(drudeTemperature); setDrudeFriction(drudeFrictionCoeff); + setMaxDrudeDistance(0); setStepSize(stepSize); setConstraintTolerance(1e-5); setRandomNumberSeed(0); } +double DrudeLangevinIntegrator::getMaxDrudeDistance() const { + return maxDrudeDistance; +} + +void DrudeLangevinIntegrator::setMaxDrudeDistance(double distance) { + if (distance < 0) + throw OpenMMException("setMaxDrudeDistance: Distance cannot be negative"); + maxDrudeDistance = distance; +} + void DrudeLangevinIntegrator::initialize(ContextImpl& contextRef) { if (owner != NULL && &contextRef.getOwner() != owner) throw OpenMMException("This Integrator is already bound to a context"); diff --git a/plugins/drude/platforms/cuda/CMakeLists.txt b/plugins/drude/platforms/cuda/CMakeLists.txt index b9385b17719eb11b4a02d187df3b5ff3cfc2251b..0b161a79e346b0a0e9651b1d75d68b7371e8d1e9 100644 --- a/plugins/drude/platforms/cuda/CMakeLists.txt +++ b/plugins/drude/platforms/cuda/CMakeLists.txt @@ -93,7 +93,7 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE IF (APPLE) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/drude/platforms/cuda/src/CudaDrudeKernels.cpp b/plugins/drude/platforms/cuda/src/CudaDrudeKernels.cpp index 104a6ecf8f62f190909987b73fdf609302a62419..cb8cedca0667f99bc74f296545c002e1e848a124 100644 --- a/plugins/drude/platforms/cuda/src/CudaDrudeKernels.cpp +++ b/plugins/drude/platforms/cuda/src/CudaDrudeKernels.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -279,6 +279,7 @@ void CudaIntegrateDrudeLangevinStepKernel::initialize(const System& system, cons CUmodule module = cu.createModule(CudaKernelSources::vectorOps+CudaDrudeKernelSources::drudeLangevin, defines, ""); kernel1 = cu.getKernel(module, "integrateDrudeLangevinPart1"); kernel2 = cu.getKernel(module, "integrateDrudeLangevinPart2"); + hardwallKernel = cu.getKernel(module, "applyHardWallConstraints"); prevStepSize = -1.0; } @@ -296,6 +297,8 @@ void CudaIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const D double vscaleDrude = exp(-stepSize*integrator.getDrudeFriction()); double fscaleDrude = (1-vscaleDrude)/integrator.getDrudeFriction()/(double) 0x100000000; double noisescaleDrude = sqrt(2*BOLTZ*integrator.getDrudeTemperature()*integrator.getDrudeFriction())*sqrt(0.5*(1-vscaleDrude*vscaleDrude)/integrator.getDrudeFriction()); + double maxDrudeDistance = integrator.getMaxDrudeDistance(); + double hardwallscaleDrude = sqrt(BOLTZ*integrator.getDrudeTemperature()); if (stepSize != prevStepSize) { if (cu.getUseDoublePrecision() || cu.getUseMixedPrecision()) { double2 ss = make_double2(0, stepSize); @@ -316,7 +319,9 @@ void CudaIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const D float vscaleDrudeFloat = (float) vscaleDrude; float fscaleDrudeFloat = (float) fscaleDrude; float noisescaleDrudeFloat = (float) noisescaleDrude; - void *vscalePtr, *fscalePtr, *noisescalePtr, *vscaleDrudePtr, *fscaleDrudePtr, *noisescaleDrudePtr; + float maxDrudeDistanceFloat =(float) maxDrudeDistance; + float hardwallscaleDrudeFloat = (float) hardwallscaleDrude; + void *vscalePtr, *fscalePtr, *noisescalePtr, *vscaleDrudePtr, *fscaleDrudePtr, *noisescaleDrudePtr, *maxDrudeDistancePtr, *hardwallscaleDrudePtr; if (cu.getUseDoublePrecision() || cu.getUseMixedPrecision()) { vscalePtr = &vscale; fscalePtr = &fscale; @@ -324,6 +329,8 @@ void CudaIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const D vscaleDrudePtr = &vscaleDrude; fscaleDrudePtr = &fscaleDrude; noisescaleDrudePtr = &noisescaleDrude; + maxDrudeDistancePtr = &maxDrudeDistance; + hardwallscaleDrudePtr = &hardwallscaleDrude; } else { vscalePtr = &vscaleFloat; @@ -332,6 +339,8 @@ void CudaIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const D vscaleDrudePtr = &vscaleDrudeFloat; fscaleDrudePtr = &fscaleDrudeFloat; noisescaleDrudePtr = &noisescaleDrudeFloat; + maxDrudeDistancePtr = &maxDrudeDistanceFloat; + hardwallscaleDrudePtr = &hardwallscaleDrudeFloat; } // Call the first integration kernel. @@ -352,6 +361,12 @@ void CudaIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const D void* args2[] = {&cu.getPosq().getDevicePointer(), &posCorrection, &integration.getPosDelta().getDevicePointer(), &cu.getVelm().getDevicePointer(), &integration.getStepSize().getDevicePointer()}; cu.executeKernel(kernel2, args2, numAtoms); + + // Apply hard wall constraints. + + void* hardwallArgs[] = {&cu.getPosq().getDevicePointer(), &posCorrection, &cu.getVelm().getDevicePointer(), + &pairParticles->getDevicePointer(), &integration.getStepSize().getDevicePointer(), maxDrudeDistancePtr, hardwallscaleDrudePtr}; + cu.executeKernel(hardwallKernel, hardwallArgs, pairParticles->getSize()); integration.computeVirtualSites(); // Update the time and step count. diff --git a/plugins/drude/platforms/cuda/src/CudaDrudeKernels.h b/plugins/drude/platforms/cuda/src/CudaDrudeKernels.h index d9ee94c17b2169ab5a674ee09cb20474797834b8..03e8b651e2ef169748b074e206436eda87a7ed11 100644 --- a/plugins/drude/platforms/cuda/src/CudaDrudeKernels.h +++ b/plugins/drude/platforms/cuda/src/CudaDrudeKernels.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -113,7 +113,7 @@ private: double prevStepSize; CudaArray* normalParticles; CudaArray* pairParticles; - CUfunction kernel1, kernel2; + CUfunction kernel1, kernel2, hardwallKernel; }; /** diff --git a/plugins/drude/platforms/cuda/src/kernels/drudeLangevin.cu b/plugins/drude/platforms/cuda/src/kernels/drudeLangevin.cu index 4f68eb230bfd587a815eb82210d7946a9923c39f..6b52c40c80cf5e4d076fcb3c84bba4a026e57a13 100644 --- a/plugins/drude/platforms/cuda/src/kernels/drudeLangevin.cu +++ b/plugins/drude/platforms/cuda/src/kernels/drudeLangevin.cu @@ -101,3 +101,111 @@ extern "C" __global__ void integrateDrudeLangevinPart2(real4* __restrict__ posq, index += blockDim.x*gridDim.x; } } + +/** + * Apply hard wall constraints + */ +extern "C" __global__ void applyHardWallConstraints(real4* __restrict__ posq, real4* __restrict__ posqCorrection, mixed4* __restrict__ velm, + const int2* __restrict__ pairParticles, const mixed2* __restrict__ dt, mixed maxDrudeDistance, mixed hardwallscaleDrude) { + mixed stepSize = dt[0].y; + for (int i = blockIdx.x*blockDim.x+threadIdx.x; i < NUM_PAIRS; i += blockDim.x*gridDim.x) { + int2 particles = pairParticles[i]; +#ifdef USE_MIXED_PRECISION + real4 posReal1 = posq[particles.x]; + real4 posReal2 = posq[particles.y]; + real4 posCorr1 = posqCorrection[particles.x]; + real4 posCorr2 = posqCorrection[particles.y]; + mixed4 pos1 = make_mixed4(posReal1.x+(mixed)posCorr1.x, posReal1.y+(mixed)posCorr1.y, posReal1.z+(mixed)posCorr1.z, posReal1.w); + mixed4 pos2 = make_mixed4(posReal2.x+(mixed)posCorr2.x, posReal2.y+(mixed)posCorr2.y, posReal2.z+(mixed)posCorr2.z, posReal2.w); +#else + mixed4 pos1 = posq[particles.x]; + mixed4 pos2 = posq[particles.y]; +#endif + mixed4 delta = pos1-pos2; + mixed r = SQRT(delta.x*delta.x + delta.y*delta.y + delta.z*delta.z); + mixed rInv = RECIP(r); + if (rInv*maxDrudeDistance < 1) { + // The constraint has been violated, so make the inter-particle distance "bounce" + // off the hard wall. + + mixed4 bondDir = delta*rInv; + mixed4 vel1 = velm[particles.x]; + mixed4 vel2 = velm[particles.y]; + mixed mass1 = RECIP(vel1.w); + mixed mass2 = RECIP(vel2.w); + mixed deltaR = r-maxDrudeDistance; + mixed deltaT = stepSize; + mixed dotvr1 = vel1.x*bondDir.x + vel1.y*bondDir.y + vel1.z*bondDir.z; + mixed4 vb1 = bondDir*dotvr1; + mixed4 vp1 = vel1-vb1; + if (vel2.w == 0) { + // The parent particle is massless, so move only the Drude particle. + + if (dotvr1 != 0) + deltaT = deltaR/fabs(dotvr1); + if (deltaT > stepSize) + deltaT = stepSize; + dotvr1 = -dotvr1*hardwallscaleDrude/(fabs(dotvr1)*SQRT(mass1)); + mixed dr = -deltaR + deltaT*dotvr1; + pos1.x += bondDir.x*dr; + pos1.y += bondDir.y*dr; + pos1.z += bondDir.z*dr; +#ifdef USE_MIXED_PRECISION + posq[particles.x] = make_real4((real) pos1.x, (real) pos1.y, (real) pos1.z, (real) pos1.w); + posqCorrection[particles.x] = make_real4(pos1.x-(real) pos1.x, pos1.y-(real) pos1.y, pos1.z-(real) pos1.z, 0); +#else + posq[particles.x] = pos1; +#endif + vel1.x = vp1.x + bondDir.x*dotvr1; + vel1.y = vp1.y + bondDir.y*dotvr1; + vel1.z = vp1.z + bondDir.z*dotvr1; + velm[particles.x] = vel1; + } + else { + // Move both particles. + + mixed invTotalMass = RECIP(mass1+mass2); + mixed dotvr2 = vel2.x*bondDir.x + vel2.y*bondDir.y + vel2.z*bondDir.z; + mixed4 vb2 = bondDir*dotvr2; + mixed4 vp2 = vel2-vb2; + mixed vbCMass = (mass1*dotvr1 + mass2*dotvr2)*invTotalMass; + dotvr1 -= vbCMass; + dotvr2 -= vbCMass; + if (dotvr1 != dotvr2) + deltaT = deltaR/fabs(dotvr1-dotvr2); + if (deltaT > stepSize) + deltaT = stepSize; + mixed vBond = hardwallscaleDrude/SQRT(mass1); + dotvr1 = -dotvr1*vBond*mass2*invTotalMass/fabs(dotvr1); + dotvr2 = -dotvr2*vBond*mass1*invTotalMass/fabs(dotvr2); + mixed dr1 = -deltaR*mass2*invTotalMass + deltaT*dotvr1; + mixed dr2 = deltaR*mass1*invTotalMass + deltaT*dotvr2; + dotvr1 += vbCMass; + dotvr2 += vbCMass; + pos1.x += bondDir.x*dr1; + pos1.y += bondDir.y*dr1; + pos1.z += bondDir.z*dr1; + pos2.x += bondDir.x*dr2; + pos2.y += bondDir.y*dr2; + pos2.z += bondDir.z*dr2; +#ifdef USE_MIXED_PRECISION + posq[particles.x] = make_real4((real) pos1.x, (real) pos1.y, (real) pos1.z, (real) pos1.w); + posq[particles.y] = make_real4((real) pos2.x, (real) pos2.y, (real) pos2.z, (real) pos2.w); + posqCorrection[particles.x] = make_real4(pos1.x-(real) pos1.x, pos1.y-(real) pos1.y, pos1.z-(real) pos1.z, 0); + posqCorrection[particles.y] = make_real4(pos2.x-(real) pos2.x, pos2.y-(real) pos2.y, pos2.z-(real) pos2.z, 0); +#else + posq[particles.x] = pos1; + posq[particles.y] = pos2; +#endif + vel1.x = vp1.x + bondDir.x*dotvr1; + vel1.y = vp1.y + bondDir.y*dotvr1; + vel1.z = vp1.z + bondDir.z*dotvr1; + vel2.x = vp2.x + bondDir.x*dotvr2; + vel2.y = vp2.y + bondDir.y*dotvr2; + vel2.z = vp2.z + bondDir.z*dotvr2; + velm[particles.x] = vel1; + velm[particles.y] = vel2; + } + } + } +} diff --git a/plugins/drude/platforms/cuda/tests/CMakeLists.txt b/plugins/drude/platforms/cuda/tests/CMakeLists.txt index 9a1a650ea95fc22cf82355367c5bae0e4073c2d5..10cb932d05484feaa677c3bfbb04426834180b04 100644 --- a/plugins/drude/platforms/cuda/tests/CMakeLists.txt +++ b/plugins/drude/platforms/cuda/tests/CMakeLists.txt @@ -17,7 +17,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF (APPLE) SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ELSE (APPLE) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ENDIF (APPLE) ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) IF (OPENMM_BUILD_CUDA_DOUBLE_PRECISION_TESTS) diff --git a/plugins/drude/platforms/cuda/tests/TestCudaDrudeLangevinIntegrator.cpp b/plugins/drude/platforms/cuda/tests/TestCudaDrudeLangevinIntegrator.cpp index 41c05a5103dab8655020494ce83b0695f3a83c76..006709df0ed3723497effe43d86e00aec2c3cb5b 100644 --- a/plugins/drude/platforms/cuda/tests/TestCudaDrudeLangevinIntegrator.cpp +++ b/plugins/drude/platforms/cuda/tests/TestCudaDrudeLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -60,6 +60,7 @@ void testSinglePair() { const double mass2 = 0.1; const double totalMass = mass1+mass2; const double reducedMass = (mass1*mass2)/(mass1+mass2); + const double maxDistance = 0.05; System system; system.addParticle(mass1); system.addParticle(mass2); @@ -70,6 +71,7 @@ void testSinglePair() { positions[0] = Vec3(0, 0, 0); positions[1] = Vec3(0, 0, 0); DrudeLangevinIntegrator integ(temperature, 20.0, temperatureDrude, 20.0, 0.003); + integ.setMaxDrudeDistance(maxDistance); Platform& platform = Platform::getPlatformByName("CUDA"); Context context(system, integ, platform); context.setPositions(positions); @@ -84,12 +86,15 @@ void testSinglePair() { int numSteps = 10000; for (int i = 0; i < numSteps; i++) { integ.step(10); - State state = context.getState(State::Velocities); + State state = context.getState(State::Velocities | State::Positions); const vector& vel = state.getVelocities(); Vec3 velCM = vel[0]*(mass1/totalMass) + vel[1]*(mass2/totalMass); keCM += 0.5*totalMass*velCM.dot(velCM); Vec3 velInternal = vel[0]-vel[1]; keInternal += 0.5*reducedMass*velInternal.dot(velInternal); + Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; + double distance = sqrt(delta.dot(delta)); + ASSERT(distance <= maxDistance*(1+1e-6)); } ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperature, keCM/numSteps, 0.1); ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperatureDrude, keInternal/numSteps, 0.01); diff --git a/plugins/drude/platforms/opencl/CMakeLists.txt b/plugins/drude/platforms/opencl/CMakeLists.txt index a5bff30c1cf9ffec12c4be6823b91b03410dffa0..ddd3f683716f0756c795ffd21b08898c8169c1d8 100644 --- a/plugins/drude/platforms/opencl/CMakeLists.txt +++ b/plugins/drude/platforms/opencl/CMakeLists.txt @@ -89,7 +89,7 @@ ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME} ${OPENCL_LIBRARIES} ${PTHREADS_LIB}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME}OpenCL) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${SHARED_DRUDE_TARGET}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) # Ensure that links to the main OpenCL library will be resolved. diff --git a/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.cpp b/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.cpp index ffd38e040b0dbf8198618ad51cbd3ec67593cdb2..eb28c5137e398e1a30eb8ba3df6e3eaf9fd3f2d1 100644 --- a/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.cpp +++ b/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -284,6 +284,7 @@ void OpenCLIntegrateDrudeLangevinStepKernel::initialize(const System& system, co cl::Program program = cl.createProgram(OpenCLDrudeKernelSources::drudeLangevin, defines, ""); kernel1 = cl::Kernel(program, "integrateDrudeLangevinPart1"); kernel2 = cl::Kernel(program, "integrateDrudeLangevinPart2"); + hardwallKernel = cl::Kernel(program, "applyHardWallConstraints"); prevStepSize = -1.0; } @@ -307,6 +308,14 @@ void OpenCLIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const kernel2.setArg(2, integration.getPosDelta().getDeviceBuffer()); kernel2.setArg(3, cl.getVelm().getDeviceBuffer()); kernel2.setArg(4, integration.getStepSize().getDeviceBuffer()); + hardwallKernel.setArg(0, cl.getPosq().getDeviceBuffer()); + if (cl.getUseMixedPrecision()) + hardwallKernel.setArg(1, cl.getPosqCorrection().getDeviceBuffer()); + else + hardwallKernel.setArg(1, NULL); + hardwallKernel.setArg(2, cl.getVelm().getDeviceBuffer()); + hardwallKernel.setArg(3, pairParticles->getDeviceBuffer()); + hardwallKernel.setArg(4, integration.getStepSize().getDeviceBuffer()); } // Compute integrator coefficients. @@ -318,6 +327,8 @@ void OpenCLIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const double vscaleDrude = exp(-stepSize*integrator.getDrudeFriction()); double fscaleDrude = (1-vscaleDrude)/integrator.getDrudeFriction(); double noisescaleDrude = sqrt(2*BOLTZ*integrator.getDrudeTemperature()*integrator.getDrudeFriction())*sqrt(0.5*(1-vscaleDrude*vscaleDrude)/integrator.getDrudeFriction()); + double maxDrudeDistance = integrator.getMaxDrudeDistance(); + double hardwallscaleDrude = sqrt(BOLTZ*integrator.getDrudeTemperature()); if (stepSize != prevStepSize) { if (cl.getUseDoublePrecision() || cl.getUseMixedPrecision()) { mm_double2 ss = mm_double2(0, stepSize); @@ -336,6 +347,8 @@ void OpenCLIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const kernel1.setArg(9, vscaleDrude); kernel1.setArg(10, fscaleDrude); kernel1.setArg(11, noisescaleDrude); + hardwallKernel.setArg(5, maxDrudeDistance); + hardwallKernel.setArg(6, hardwallscaleDrude); } else { kernel1.setArg(6, (cl_float) vscale); @@ -344,6 +357,8 @@ void OpenCLIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const kernel1.setArg(9, (cl_float) vscaleDrude); kernel1.setArg(10, (cl_float) fscaleDrude); kernel1.setArg(11, (cl_float) noisescaleDrude); + hardwallKernel.setArg(5, (cl_float) maxDrudeDistance); + hardwallKernel.setArg(6, (cl_float) hardwallscaleDrude); } // Call the first integration kernel. @@ -358,6 +373,10 @@ void OpenCLIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, const // Call the second integration kernel. cl.executeKernel(kernel2, numAtoms); + + // Apply hard wall constraints. + + cl.executeKernel(hardwallKernel, pairParticles->getSize()); integration.computeVirtualSites(); // Update the time and step count. diff --git a/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.h b/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.h index ddb71ddacdd623adac54df28a7c36494b5abfbdd..eaaf77abdccc100d181d1c81f04a53b897d07e7a 100644 --- a/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.h +++ b/plugins/drude/platforms/opencl/src/OpenCLDrudeKernels.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -114,7 +114,7 @@ private: double prevStepSize; OpenCLArray* normalParticles; OpenCLArray* pairParticles; - cl::Kernel kernel1, kernel2; + cl::Kernel kernel1, kernel2, hardwallKernel; }; /** diff --git a/plugins/drude/platforms/opencl/src/kernels/drudeLangevin.cl b/plugins/drude/platforms/opencl/src/kernels/drudeLangevin.cl index 2dc2330e659d8ec9ca164df1f49b84349aa45a91..e340d839e98d54d1dd0604d1faf7c351ea3a4fbc 100755 --- a/plugins/drude/platforms/opencl/src/kernels/drudeLangevin.cl +++ b/plugins/drude/platforms/opencl/src/kernels/drudeLangevin.cl @@ -101,3 +101,99 @@ __kernel void integrateDrudeLangevinPart2(__global real4* restrict posq, __globa index += get_global_size(0); } } + +/** + * Apply hard wall constraints + */ +__kernel void applyHardWallConstraints(__global real4* restrict posq, __global real4* restrict posqCorrection, __global mixed4* restrict velm, + __global const int2* restrict pairParticles, __global const mixed2* restrict dt, mixed maxDrudeDistance, mixed hardwallscaleDrude) { + mixed stepSize = dt[0].y; + for (int i = get_global_id(0); i < NUM_PAIRS; i += get_global_size(0)) { + int2 particles = pairParticles[i]; +#ifdef USE_MIXED_PRECISION + real4 posReal1 = posq[particles.x]; + real4 posReal2 = posq[particles.y]; + real4 posCorr1 = posqCorrection[particles.x]; + real4 posCorr2 = posqCorrection[particles.y]; + mixed4 pos1 = (mixed4) (posReal1.x+(mixed)posCorr1.x, posReal1.y+(mixed)posCorr1.y, posReal1.z+(mixed)posCorr1.z, posReal1.w); + mixed4 pos2 = (mixed4) (posReal2.x+(mixed)posCorr2.x, posReal2.y+(mixed)posCorr2.y, posReal2.z+(mixed)posCorr2.z, posReal2.w); +#else + mixed4 pos1 = posq[particles.x]; + mixed4 pos2 = posq[particles.y]; +#endif + mixed4 delta = pos1-pos2; + mixed r = sqrt(delta.x*delta.x + delta.y*delta.y + delta.z*delta.z); + mixed rInv = 1/r; + if (rInv*maxDrudeDistance < 1) { + // The constraint has been violated, so make the inter-particle distance "bounce" + // off the hard wall. + + mixed4 bondDir = delta*rInv; + mixed4 vel1 = velm[particles.x]; + mixed4 vel2 = velm[particles.y]; + mixed mass1 = 1/vel1.w; + mixed mass2 = 1/vel2.w; + mixed deltaR = r-maxDrudeDistance; + mixed deltaT = stepSize; + mixed dotvr1 = vel1.x*bondDir.x + vel1.y*bondDir.y + vel1.z*bondDir.z; + mixed4 vb1 = bondDir*dotvr1; + mixed4 vp1 = vel1-vb1; + if (vel2.w == 0) { + // The parent particle is massless, so move only the Drude particle. + + if (dotvr1 != 0) + deltaT = deltaR/fabs(dotvr1); + if (deltaT > stepSize) + deltaT = stepSize; + dotvr1 = -dotvr1*hardwallscaleDrude/(fabs(dotvr1)*sqrt(mass1)); + mixed dr = -deltaR + deltaT*dotvr1; + pos1.xyz += bondDir.xyz*dr; +#ifdef USE_MIXED_PRECISION + posq[particles.x] = (real4) ((real) pos1.x, (real) pos1.y, (real) pos1.z, (real) pos1.w); + posqCorrection[particles.x] = (real4) (pos1.x-(real) pos1.x, pos1.y-(real) pos1.y, pos1.z-(real) pos1.z, 0); +#else + posq[particles.x] = pos1; +#endif + vel1.xyz = vp1.xyz + bondDir.xyz*dotvr1; + velm[particles.x] = vel1; + } + else { + // Move both particles. + + mixed invTotalMass = 1/(mass1+mass2); + mixed dotvr2 = vel2.x*bondDir.x + vel2.y*bondDir.y + vel2.z*bondDir.z; + mixed4 vb2 = bondDir*dotvr2; + mixed4 vp2 = vel2-vb2; + mixed vbCMass = (mass1*dotvr1 + mass2*dotvr2)*invTotalMass; + dotvr1 -= vbCMass; + dotvr2 -= vbCMass; + if (dotvr1 != dotvr2) + deltaT = deltaR/fabs(dotvr1-dotvr2); + if (deltaT > stepSize) + deltaT = stepSize; + mixed vBond = hardwallscaleDrude/sqrt(mass1); + dotvr1 = -dotvr1*vBond*mass2*invTotalMass/fabs(dotvr1); + dotvr2 = -dotvr2*vBond*mass1*invTotalMass/fabs(dotvr2); + mixed dr1 = -deltaR*mass2*invTotalMass + deltaT*dotvr1; + mixed dr2 = deltaR*mass1*invTotalMass + deltaT*dotvr2; + dotvr1 += vbCMass; + dotvr2 += vbCMass; + pos1.xyz += bondDir.xyz*dr1; + pos2.xyz += bondDir.xyz*dr2; +#ifdef USE_MIXED_PRECISION + posq[particles.x] = (real4) ((real) pos1.x, (real) pos1.y, (real) pos1.z, (real) pos1.w); + posq[particles.y] = (real4) ((real) pos2.x, (real) pos2.y, (real) pos2.z, (real) pos2.w); + posqCorrection[particles.x] = (real4) (pos1.x-(real) pos1.x, pos1.y-(real) pos1.y, pos1.z-(real) pos1.z, 0); + posqCorrection[particles.y] = (real4) (pos2.x-(real) pos2.x, pos2.y-(real) pos2.y, pos2.z-(real) pos2.z, 0); +#else + posq[particles.x] = pos1; + posq[particles.y] = pos2; +#endif + vel1.xyz = vp1.xyz + bondDir.xyz*dotvr1; + vel2.xyz = vp2.xyz + bondDir.xyz*dotvr2; + velm[particles.x] = vel1; + velm[particles.y] = vel2; + } + } + } +} diff --git a/plugins/drude/platforms/opencl/tests/CMakeLists.txt b/plugins/drude/platforms/opencl/tests/CMakeLists.txt index a334fc2c077c00dfdb9bf8b56e4e79f8d9c91b30..5a99bb4104d5e8dcb8a8d180b9f86effe05cd212 100644 --- a/plugins/drude/platforms/opencl/tests/CMakeLists.txt +++ b/plugins/drude/platforms/opencl/tests/CMakeLists.txt @@ -14,7 +14,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # Link with shared library ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_DRUDE_TARGET} ${SHARED_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) IF (OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS) ADD_TEST(${TEST_ROOT}Mixed ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} mixed) diff --git a/plugins/drude/platforms/opencl/tests/TestOpenCLDrudeLangevinIntegrator.cpp b/plugins/drude/platforms/opencl/tests/TestOpenCLDrudeLangevinIntegrator.cpp index 101dc07707cef43f8ac130821b899a2be664c03b..916a31fc2fd3efced121e16c295073e9fe27330f 100644 --- a/plugins/drude/platforms/opencl/tests/TestOpenCLDrudeLangevinIntegrator.cpp +++ b/plugins/drude/platforms/opencl/tests/TestOpenCLDrudeLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -60,6 +60,7 @@ void testSinglePair() { const double mass2 = 0.1; const double totalMass = mass1+mass2; const double reducedMass = (mass1*mass2)/(mass1+mass2); + const double maxDistance = 0.05; System system; system.addParticle(mass1); system.addParticle(mass2); @@ -70,6 +71,7 @@ void testSinglePair() { positions[0] = Vec3(0, 0, 0); positions[1] = Vec3(0, 0, 0); DrudeLangevinIntegrator integ(temperature, 20.0, temperatureDrude, 20.0, 0.003); + integ.setMaxDrudeDistance(maxDistance); Platform& platform = Platform::getPlatformByName("OpenCL"); Context context(system, integ, platform); context.setPositions(positions); @@ -84,12 +86,15 @@ void testSinglePair() { int numSteps = 10000; for (int i = 0; i < numSteps; i++) { integ.step(10); - State state = context.getState(State::Velocities); + State state = context.getState(State::Velocities | State::Positions); const vector& vel = state.getVelocities(); Vec3 velCM = vel[0]*(mass1/totalMass) + vel[1]*(mass2/totalMass); keCM += 0.5*totalMass*velCM.dot(velCM); Vec3 velInternal = vel[0]-vel[1]; keInternal += 0.5*reducedMass*velInternal.dot(velInternal); + Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; + double distance = sqrt(delta.dot(delta)); + ASSERT(distance <= maxDistance*(1+1e-6)); } ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperature, keCM/numSteps, 0.1); ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperatureDrude, keInternal/numSteps, 0.01); diff --git a/plugins/drude/platforms/reference/CMakeLists.txt b/plugins/drude/platforms/reference/CMakeLists.txt index 78d960afb784d66396d2e46778b90f2d40231d1e..c35704f4ce7c038b120100cb422224f0089fe263 100644 --- a/plugins/drude/platforms/reference/CMakeLists.txt +++ b/plugins/drude/platforms/reference/CMakeLists.txt @@ -71,7 +71,7 @@ ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} debug ${SHARED_DRUDE_TARGET} optimized ${SHARED_DRUDE_TARGET}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.cpp b/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.cpp index a4c78064b38278be041f0efb62de8e6c42a5017a..fbea4ba7f8b82deec5b488341316ffceef1472e1 100644 --- a/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.cpp +++ b/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.cpp @@ -235,7 +235,6 @@ void ReferenceIntegrateDrudeLangevinStepKernel::initialize(const System& system, // Identify particle pairs and ordinary particles. set particles; - vector particleMass; for (int i = 0; i < system.getNumParticles(); i++) { particles.insert(i); double mass = system.getParticleMass(i); @@ -325,6 +324,75 @@ void ReferenceIntegrateDrudeLangevinStepKernel::execute(ContextImpl& context, co pos[i] = xPrime[i]; } } + + // Apply hard wall constraints. + + const RealOpenMM maxDrudeDistance = integrator.getMaxDrudeDistance(); + if (maxDrudeDistance > 0) { + const RealOpenMM hardwallscaleDrude = sqrt(kTDrude); + for (int i = 0; i < (int) pairParticles.size(); i++) { + int p1 = pairParticles[i].first; + int p2 = pairParticles[i].second; + RealVec delta = pos[p1]-pos[p2]; + RealOpenMM r = sqrt(delta.dot(delta)); + RealOpenMM rInv = 1/r; + if (rInv*maxDrudeDistance < 1.0) { + // The constraint has been violated, so make the inter-particle distance "bounce" + // off the hard wall. + + if (rInv*maxDrudeDistance < 0.5) + throw OpenMMException("Drude particle moved too far beyond hard wall constraint"); + RealVec bondDir = delta*rInv; + RealVec vel1 = vel[p1]; + RealVec vel2 = vel[p2]; + RealOpenMM mass1 = particleMass[p1]; + RealOpenMM mass2 = particleMass[p2]; + RealOpenMM deltaR = r-maxDrudeDistance; + RealOpenMM deltaT = dt; + RealOpenMM dotvr1 = vel1.dot(bondDir); + RealVec vb1 = bondDir*dotvr1; + RealVec vp1 = vel1-vb1; + if (mass2 == 0) { + // The parent particle is massless, so move only the Drude particle. + + if (dotvr1 != 0.0) + deltaT = deltaR/abs(dotvr1); + if (deltaT > dt) + deltaT = dt; + dotvr1 = -dotvr1*hardwallscaleDrude/(abs(dotvr1)*sqrt(mass1)); + RealOpenMM dr = -deltaR + deltaT*dotvr1; + pos[p1] += bondDir*dr; + vel[p1] = vp1 + bondDir*dotvr1; + } + else { + // Move both particles. + + RealOpenMM invTotalMass = pairInvTotalMass[i]; + RealOpenMM dotvr2 = vel2.dot(bondDir); + RealVec vb2 = bondDir*dotvr2; + RealVec vp2 = vel2-vb2; + RealOpenMM vbCMass = (mass1*dotvr1 + mass2*dotvr2)*invTotalMass; + dotvr1 -= vbCMass; + dotvr2 -= vbCMass; + if (dotvr1 != dotvr2) + deltaT = deltaR/abs(dotvr1-dotvr2); + if (deltaT > dt) + deltaT = dt; + RealOpenMM vBond = hardwallscaleDrude/sqrt(mass1); + dotvr1 = -dotvr1*vBond*mass2*invTotalMass/abs(dotvr1); + dotvr2 = -dotvr2*vBond*mass1*invTotalMass/abs(dotvr2); + RealOpenMM dr1 = -deltaR*mass2*invTotalMass + deltaT*dotvr1; + RealOpenMM dr2 = deltaR*mass1*invTotalMass + deltaT*dotvr2; + dotvr1 += vbCMass; + dotvr2 += vbCMass; + pos[p1] += bondDir*dr1; + pos[p2] += bondDir*dr2; + vel[p1] = vp1 + bondDir*dotvr1; + vel[p2] = vp2 + bondDir*dotvr2; + } + } + } + } ReferenceVirtualSites::computePositions(context.getSystem(), pos); data.time += integrator.getStepSize(); data.stepCount++; diff --git a/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.h b/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.h index 3a5619b02b5df2b4a6683baf362df21684045154..8f740c832736cc54aa19d5491efc689cd1ab8d46 100644 --- a/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.h +++ b/plugins/drude/platforms/reference/src/ReferenceDrudeKernels.h @@ -115,6 +115,7 @@ private: ReferencePlatform::PlatformData& data; std::vector normalParticles; std::vector > pairParticles; + std::vector particleMass; std::vector particleInvMass; std::vector pairInvTotalMass; std::vector pairInvReducedMass; @@ -158,6 +159,7 @@ private: std::vector particleInvMass; lbfgsfloatval_t *minimizerPos; lbfgs_parameter_t minimizerParams; + double maxDrudeDistance; }; } // namespace OpenMM diff --git a/plugins/drude/platforms/reference/tests/CMakeLists.txt b/plugins/drude/platforms/reference/tests/CMakeLists.txt index 6f42e6e3715c78b18d32eb5c114c4130a70d4c81..5d617a4280b9622dfb4d3a34b49abf653f15e0f0 100644 --- a/plugins/drude/platforms/reference/tests/CMakeLists.txt +++ b/plugins/drude/platforms/reference/tests/CMakeLists.txt @@ -19,6 +19,6 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_OPENMM_TARGET} ${SHARED_OPENMM_DRUDE_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/plugins/drude/platforms/reference/tests/TestReferenceDrudeLangevinIntegrator.cpp b/plugins/drude/platforms/reference/tests/TestReferenceDrudeLangevinIntegrator.cpp index f046c36e2fb5f26d3040f9d81e17502935a4e082..e025029ec3acd89d37200bc0f0333ff34853e121 100644 --- a/plugins/drude/platforms/reference/tests/TestReferenceDrudeLangevinIntegrator.cpp +++ b/plugins/drude/platforms/reference/tests/TestReferenceDrudeLangevinIntegrator.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013 Stanford University and the Authors. * + * Portions copyright (c) 2013-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -60,6 +60,7 @@ void testSinglePair() { const double mass2 = 0.1; const double totalMass = mass1+mass2; const double reducedMass = (mass1*mass2)/(mass1+mass2); + const double maxDistance = 0.05; System system; system.addParticle(mass1); system.addParticle(mass2); @@ -70,6 +71,7 @@ void testSinglePair() { positions[0] = Vec3(0, 0, 0); positions[1] = Vec3(0, 0, 0); DrudeLangevinIntegrator integ(temperature, 20.0, temperatureDrude, 20.0, 0.003); + integ.setMaxDrudeDistance(maxDistance); Platform& platform = Platform::getPlatformByName("Reference"); Context context(system, integ, platform); context.setPositions(positions); @@ -84,12 +86,15 @@ void testSinglePair() { int numSteps = 10000; for (int i = 0; i < numSteps; i++) { integ.step(10); - State state = context.getState(State::Velocities); + State state = context.getState(State::Velocities | State::Positions); const vector& vel = state.getVelocities(); Vec3 velCM = vel[0]*(mass1/totalMass) + vel[1]*(mass2/totalMass); keCM += 0.5*totalMass*velCM.dot(velCM); Vec3 velInternal = vel[0]-vel[1]; keInternal += 0.5*reducedMass*velInternal.dot(velInternal); + Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; + double distance = sqrt(delta.dot(delta)); + ASSERT(distance <= maxDistance*(1+1e-6)); } ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperature, keCM/numSteps, 0.1); ASSERT_USUALLY_EQUAL_TOL(3*0.5*BOLTZ*temperatureDrude, keInternal/numSteps, 0.01); @@ -171,7 +176,7 @@ void testWater() { int numDrudeDof = 3*numMolecules; int numDof = numStandardDof+numDrudeDof; double expectedTemp = (numStandardDof*temperature+numDrudeDof*temperatureDrude)/numDof; - ASSERT_USUALLY_EQUAL_TOL(expectedTemp, ke/(0.5*numDof*BOLTZ), 0.02); + ASSERT_USUALLY_EQUAL_TOL(expectedTemp, ke/(0.5*numDof*BOLTZ), 0.03); } int main() { diff --git a/plugins/drude/serialization/tests/CMakeLists.txt b/plugins/drude/serialization/tests/CMakeLists.txt index fe882166a9f1786b2c28b3383888cf9bbc435746..e6e7e3041fd7004a75c4d618b2b5a6b2a40951f4 100644 --- a/plugins/drude/serialization/tests/CMakeLists.txt +++ b/plugins/drude/serialization/tests/CMakeLists.txt @@ -12,7 +12,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # All tests use shared libraries ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_DRUDE_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/plugins/rpmd/CMakeLists.txt b/plugins/rpmd/CMakeLists.txt index b7116047627662e8be9849db081f9960b2b869a6..0d29846fe0333759ec18abe5b0b526da53cc18dd 100644 --- a/plugins/rpmd/CMakeLists.txt +++ b/plugins/rpmd/CMakeLists.txt @@ -74,11 +74,11 @@ ENDFOREACH(subdir) INCLUDE_DIRECTORIES(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/src) ADD_LIBRARY(${SHARED_RPMD_TARGET} SHARED ${SOURCE_RPMD_FILES} ${SOURCE_RPMD_INCLUDE_FILES} ${API_RPMD_ABS_INCLUDE_FILES}) -SET_TARGET_PROPERTIES(${SHARED_RPMD_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_RPMD_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_RPMD_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_RPMD_BUILDING_SHARED_LIBRARY -DLEPTON_BUILDING_SHARED_LIBRARY") IF(OPENMM_BUILD_STATIC_LIB) ADD_LIBRARY(${STATIC_RPMD_TARGET} STATIC ${SOURCE_RPMD_FILES} ${SOURCE_RPMD_INCLUDE_FILES} ${API_RPMD_ABS_INCLUDE_FILES}) - SET_TARGET_PROPERTIES(${STATIC_RPMD_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") + SET_TARGET_PROPERTIES(${STATIC_RPMD_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_USE_STATIC_LIBRARIES -DOPENMM_BUILDING_STATIC_LIBRARY -DLEPTON_USE_STATIC_LIBRARIES -DLEPTON_BUILDING_STATIC_LIBRARY") ENDIF(OPENMM_BUILD_STATIC_LIB) # ---------------------------------------------------------------------------- diff --git a/plugins/rpmd/platforms/cuda/CMakeLists.txt b/plugins/rpmd/platforms/cuda/CMakeLists.txt index 2b7cd8964e5e522f1c26fd6b45c6a1e1b75d4f8d..55c227fc48ebfd4e7a4af4c249029a5a9d6dc9aa 100644 --- a/plugins/rpmd/platforms/cuda/CMakeLists.txt +++ b/plugins/rpmd/platforms/cuda/CMakeLists.txt @@ -93,7 +93,7 @@ SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES COMPILE_FLAGS "${EXTRA_COMPILE IF (APPLE) SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA") ELSE (APPLE) - SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}") ENDIF (APPLE) INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/rpmd/platforms/cuda/tests/CMakeLists.txt b/plugins/rpmd/platforms/cuda/tests/CMakeLists.txt index 7f85510c41fe43197e036ce4c6ee67b01c905df4..4fbf6f76db989743aeb2c6ce3f701a23f2cff8e5 100644 --- a/plugins/rpmd/platforms/cuda/tests/CMakeLists.txt +++ b/plugins/rpmd/platforms/cuda/tests/CMakeLists.txt @@ -17,7 +17,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF (APPLE) SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS} -F/Library/Frameworks -framework CUDA" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ELSE (APPLE) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ENDIF (APPLE) ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) IF (OPENMM_BUILD_CUDA_DOUBLE_PRECISION_TESTS) diff --git a/plugins/rpmd/platforms/opencl/CMakeLists.txt b/plugins/rpmd/platforms/opencl/CMakeLists.txt index c234e247eb7780f13c65066b0a999b23c4e2fe0a..01e143719f40f7e5c0aa03c0f3727bf2b3c23916 100644 --- a/plugins/rpmd/platforms/opencl/CMakeLists.txt +++ b/plugins/rpmd/platforms/opencl/CMakeLists.txt @@ -88,7 +88,7 @@ ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME} ${OPENCL_LIBRARIES} ${PTHREADS_LIB}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME}OpenCL) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${SHARED_RPMD_TARGET}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) # Ensure that links to the main OpenCL library will be resolved. diff --git a/plugins/rpmd/platforms/opencl/tests/CMakeLists.txt b/plugins/rpmd/platforms/opencl/tests/CMakeLists.txt index b7f6c6ebe6dfba6f338cc9413fee8df35900dd2e..e78c1f9fc3c223a829463227b5b79a174eb72281 100644 --- a/plugins/rpmd/platforms/opencl/tests/CMakeLists.txt +++ b/plugins/rpmd/platforms/opencl/tests/CMakeLists.txt @@ -14,7 +14,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) # Link with shared library ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_RPMD_TARGET} ${SHARED_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT}Single ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} single) IF (OPENMM_BUILD_OPENCL_DOUBLE_PRECISION_TESTS) ADD_TEST(${TEST_ROOT}Mixed ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT} mixed) diff --git a/plugins/rpmd/platforms/reference/CMakeLists.txt b/plugins/rpmd/platforms/reference/CMakeLists.txt index 7dc038274b067c12601fdbba0864c26ac09ef0fa..d7a5592b07f1773323025782d3d611cd3d1dbfd4 100644 --- a/plugins/rpmd/platforms/reference/CMakeLists.txt +++ b/plugins/rpmd/platforms/reference/CMakeLists.txt @@ -71,7 +71,7 @@ ADD_LIBRARY(${SHARED_TARGET} SHARED ${SOURCE_FILES} ${SOURCE_INCLUDE_FILES} ${AP TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${OPENMM_LIBRARY_NAME}) TARGET_LINK_LIBRARIES(${SHARED_TARGET} ${SHARED_RPMD_TARGET}) -SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") +SET_TARGET_PROPERTIES(${SHARED_TARGET} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -DOPENMM_BUILDING_SHARED_LIBRARY") INSTALL(TARGETS ${SHARED_TARGET} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/plugins) diff --git a/plugins/rpmd/platforms/reference/tests/CMakeLists.txt b/plugins/rpmd/platforms/reference/tests/CMakeLists.txt index 5ad77a5d712f86807dd467e0023c04b319a404f6..fc7be49d63f40696da8cc23386d2c1b7311013a8 100644 --- a/plugins/rpmd/platforms/reference/tests/CMakeLists.txt +++ b/plugins/rpmd/platforms/reference/tests/CMakeLists.txt @@ -19,6 +19,6 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG}) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_OPENMM_TARGET} ${SHARED_OPENMM_RPMD_TARGET}) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/serialization/src/StateProxy.cpp b/serialization/src/StateProxy.cpp index 0fca5d9f12cf2f93129155ea45e9451c2bc4bbea..d9a25cd5a138adb1f848b6afa1092a2a6c069049 100644 --- a/serialization/src/StateProxy.cpp +++ b/serialization/src/StateProxy.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010 Stanford University and the Authors. * + * Portions copyright (c) 2010-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -30,7 +30,9 @@ * -------------------------------------------------------------------------- */ #include "openmm/serialization/StateProxy.h" -#include +#include "openmm/Platform.h" +#include "openmm/State.h" +#include "openmm/Vec3.h" #include using namespace std; @@ -42,6 +44,7 @@ StateProxy::StateProxy() : SerializationProxy("State") { void StateProxy::serialize(const void* object, SerializationNode& node) const { node.setIntProperty("version", 1); + node.setStringProperty("openmmVersion", Platform::getOpenMMVersion()); const State& s = *reinterpret_cast(object); node.setDoubleProperty("time", s.getTime()); Vec3 a,b,c; diff --git a/serialization/src/SystemProxy.cpp b/serialization/src/SystemProxy.cpp index a4c3056dd585b976cd36378b4892dad6c099ed92..2b3930ffbaaf5c066484abac5215a4f2736ea9a6 100644 --- a/serialization/src/SystemProxy.cpp +++ b/serialization/src/SystemProxy.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2010 Stanford University and the Authors. * + * Portions copyright (c) 2010-2015 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -32,6 +32,7 @@ #include "openmm/serialization/SystemProxy.h" #include "openmm/serialization/SerializationNode.h" #include "openmm/Force.h" +#include "openmm/Platform.h" #include "openmm/System.h" #include "openmm/VirtualSite.h" #include @@ -44,6 +45,7 @@ SystemProxy::SystemProxy() : SerializationProxy("System") { void SystemProxy::serialize(const void* object, SerializationNode& node) const { node.setIntProperty("version", 1); + node.setStringProperty("openmmVersion", Platform::getOpenMMVersion()); const System& system = *reinterpret_cast(object); Vec3 a, b, c; system.getDefaultPeriodicBoxVectors(a, b, c); diff --git a/serialization/tests/CMakeLists.txt b/serialization/tests/CMakeLists.txt index b5d7cd78551b83aece0506b6a55b0fe158b5e777..2a4d37adc06e084b35ff017af408a5e374f8277a 100644 --- a/serialization/tests/CMakeLists.txt +++ b/serialization/tests/CMakeLists.txt @@ -15,7 +15,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) ELSE (OPENMM_BUILD_SHARED_LIB) TARGET_LINK_LIBRARIES(${TEST_ROOT} ${STATIC_TARGET}) ENDIF (OPENMM_BUILD_SHARED_LIB) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_COMPILE_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index df04a10656bd40ee4f3664883d35704a0296974b..c5c0bedb89f10de7ea1e3d32baabd0a1a9a52811 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -21,7 +21,7 @@ FOREACH(TEST_PROG ${TEST_PROGS}) IF ((${TEST_ROOT} MATCHES TestVectorize8) AND NOT (MSVC OR ANDROID OR PNACL)) SET(EXTRA_TEST_FLAGS "${EXTRA_COMPILE_FLAGS} -mavx") ENDIF ((${TEST_ROOT} MATCHES TestVectorize8) AND NOT (MSVC OR ANDROID OR PNACL)) - SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_TEST_FLAGS}" COMPILE_FLAGS "${EXTRA_TEST_FLAGS}") + SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES LINK_FLAGS "${EXTRA_LINK_FLAGS}" COMPILE_FLAGS "${EXTRA_TEST_FLAGS}") ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT}) ENDFOREACH(TEST_PROG ${TEST_PROGS}) diff --git a/tests/TestAndersenThermostat.h b/tests/TestAndersenThermostat.h new file mode 100644 index 0000000000000000000000000000000000000000..7168144328799849dbb7d9dfb846d991fb3c3e78 --- /dev/null +++ b/tests/TestAndersenThermostat.h @@ -0,0 +1,215 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/AndersenThermostat.h" +#include "openmm/Context.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testTemperature() { + const int numParticles = 8; + const double temp = 100.0; + const double collisionFreq = 10.0; + const int numSteps = 5000; + System system; + VerletIntegrator integrator(0.003); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); + system.addForce(thermostat); + ASSERT(!thermostat->usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(numParticles); + for (int i = 0; i < numParticles; ++i) + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < numSteps; ++i) { + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + integrator.step(10); + } + ke /= numSteps; + double expected = 0.5*numParticles*3*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); +} + +void testConstraints() { + const int numParticles = 8; + const double temp = 100.0; + const double collisionFreq = 10.0; + const int numSteps = 15000; + System system; + VerletIntegrator integrator(0.004); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + system.addConstraint(0, 1, 1); + system.addConstraint(1, 2, 1); + system.addConstraint(2, 3, 1); + system.addConstraint(3, 0, 1); + system.addConstraint(4, 5, 1); + system.addConstraint(5, 6, 1); + system.addConstraint(6, 7, 1); + system.addConstraint(7, 4, 1); + AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); + system.addForce(thermostat); + Context context(system, integrator, platform); + vector positions(numParticles); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(1, 1, 0); + positions[3] = Vec3(0, 1, 0); + positions[4] = Vec3(1, 0, 1); + positions[5] = Vec3(1, 1, 1); + positions[6] = Vec3(0, 1, 1); + positions[7] = Vec3(0, 0, 1); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Let it equilibrate. + + integrator.step(5000); + + // Now run it for a while and see if the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < numSteps; ++i) { + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + integrator.step(1); + } + ke /= numSteps; + double expected = 0.5*(numParticles*3-system.getNumConstraints())*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + const double collisionFreq = 10.0; + System system; + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); + system.addForce(thermostat); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + thermostat->setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + thermostat->setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); + ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testTemperature(); + testConstraints(); + testRandomSeed(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestBrownianIntegrator.h b/tests/TestBrownianIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..2dd858bda9c8260bed81d2c8acac229acd19e836 --- /dev/null +++ b/tests/TestBrownianIntegrator.h @@ -0,0 +1,272 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/BrownianIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + double dt = 0.01; + BrownianIntegrator integrator(0, 0.1, dt); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // This is simply an overdamped harmonic oscillator, so compare it to the analytical solution. + + double rate = 2*1.0/(0.1*2.0); + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Velocities); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::exp(-rate*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); + if (i > 0) { + double expectedSpeed = -0.5*rate*std::exp(-rate*(time-0.5*dt)); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.11); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.11); + } + integrator.step(1); + } +} + +void testTemperature() { + const int numParticles = 8; + const int numBonds = numParticles-1; + const double temp = 10.0; + System system; + BrownianIntegrator integrator(temp, 2.0, 0.01); + HarmonicBondForce* forceField = new HarmonicBondForce(); + for (int i = 0; i < numParticles; ++i) + system.addParticle(2.0); + for (int i = 0; i < numBonds; ++i) + forceField->addBond(i, i+1, 1.0, 5.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + for (int i = 0; i < numParticles; ++i) + positions[i] = Vec3(i, 0, 0); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the temperature is correct. + + double pe = 0.0; + const int steps = 50000; + for (int i = 0; i < steps; ++i) { + State state = context.getState(State::Energy); + pe += state.getPotentialEnergy(); + integrator.step(1); + } + pe /= steps; + double expected = 0.5*numBonds*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, pe, 0.1*expected); +} + +void testConstraints() { + const int numParticles = 8; + const int numConstraints = 5; + const double temp = 20.0; + System system; + BrownianIntegrator integrator(temp, 2.0, 0.001); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(1, 2, 1.0); + system.addConstraint(2, 3, 1.0); + system.addConstraint(4, 5, 1.0); + system.addConstraint(6, 7, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i, 0, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions); + for (int j = 0; j < numConstraints; ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 1e-4); + } + integrator.step(1); + } +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + BrownianIntegrator integrator(300.0, 2.0, 0.01); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + const double collisionFreq = 10.0; + System system; + BrownianIntegrator integrator(temp, 2.0, 0.001); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + integrator.setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + integrator.setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); + ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testTemperature(); + testConstraints(); + testConstrainedMasslessParticles(); + testRandomSeed(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCMAPTorsionForce.h b/tests/TestCMAPTorsionForce.h new file mode 100644 index 0000000000000000000000000000000000000000..54a2b90f66ce3254a8251686e3a0c3d10b561332 --- /dev/null +++ b/tests/TestCMAPTorsionForce.h @@ -0,0 +1,177 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CMAPTorsionForce.h" +#include "openmm/PeriodicTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testCMAPTorsions() { + const int mapSize = 36; + + // Create two systems: one with a pair of periodic torsions, and one with a CMAP torsion + // that approximates the same force. + + System system1; + for (int i = 0; i < 5; i++) + system1.addParticle(1.0); + PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); + periodic->addTorsion(0, 1, 2, 3, 2, M_PI/4, 1.5); + periodic->addTorsion(1, 2, 3, 4, 3, M_PI/3, 2.0); + system1.addForce(periodic); + ASSERT(!periodic->usesPeriodicBoundaryConditions()); + ASSERT(!system1.usesPeriodicBoundaryConditions()); + System system2; + for (int i = 0; i < 5; i++) + system2.addParticle(1.0); + CMAPTorsionForce* cmap = new CMAPTorsionForce(); + vector mapEnergy(mapSize*mapSize); + for (int i = 0; i < mapSize; i++) { + double angle1 = i*2*M_PI/mapSize; + double energy1 = 1.5*(1+cos(2*angle1-M_PI/4)); + for (int j = 0; j < mapSize; j++) { + double angle2 = j*2*M_PI/mapSize; + double energy2 = 2.0*(1+cos(3*angle2-M_PI/3)); + mapEnergy[i+j*mapSize] = energy1+energy2; + } + } + cmap->addMap(mapSize, mapEnergy); + cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); + system2.addForce(cmap); + ASSERT(!cmap->usesPeriodicBoundaryConditions()); + ASSERT(!system2.usesPeriodicBoundaryConditions()); + + // Set the atoms in various positions, and verify that both systems give equal forces and energy. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector positions(5); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context c1(system1, integrator1, platform); + Context c2(system2, integrator2, platform); + for (int i = 0; i < 50; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < system1.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 0.05); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), 1e-3); + } +} + +void testChangingParameters() { + // Create a system with two maps and one torsion. + + const int mapSize = 8; + System system; + for (int i = 0; i < 5; i++) + system.addParticle(1.0); + CMAPTorsionForce* cmap = new CMAPTorsionForce(); + vector mapEnergy1(mapSize*mapSize); + vector mapEnergy2(mapSize*mapSize); + for (int i = 0; i < mapSize; i++) { + double angle1 = i*2*M_PI/mapSize; + double energy1 = cos(angle1); + for (int j = 0; j < mapSize; j++) { + double angle2 = j*2*M_PI/mapSize; + double energy2 = 10*sin(angle2); + mapEnergy1[i+j*mapSize] = energy1+energy2; + mapEnergy2[i+j*mapSize] = energy1-energy2; + } + } + cmap->addMap(mapSize, mapEnergy1); + cmap->addMap(mapSize, mapEnergy2); + cmap->addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4); + system.addForce(cmap); + + // Set particle positions so angle1=0 and angle2=PI/4. + + vector positions(5); + positions[0] = Vec3(0, 0, 1); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + positions[3] = Vec3(1, 0, 1); + positions[4] = Vec3(0.5, -0.5, 1); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + + // Check that the energy is correct. + + double energy = context.getState(State::Energy).getPotentialEnergy(); + ASSERT_EQUAL_TOL(1+10*sin(M_PI/4), energy, 1e-5); + + // Modify the parameters. + + cmap->setTorsionParameters(0, 1, 0, 1, 2, 3, 1, 2, 3, 4); + for (int i = 0; i < mapSize*mapSize; i++) + mapEnergy2[i] *= 2.0; + cmap->setMapParameters(1, mapSize, mapEnergy2); + cmap->updateParametersInContext(context); + + // See if the results are correct. + + energy = context.getState(State::Energy).getPotentialEnergy(); + ASSERT_EQUAL_TOL(2-20*sin(M_PI/4), energy, 1e-5); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testCMAPTorsions(); + testChangingParameters(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestCMMotionRemover.h b/tests/TestCMMotionRemover.h new file mode 100644 index 0000000000000000000000000000000000000000..cc100181e16014fa927186e00c00e24b46a5bf9e --- /dev/null +++ b/tests/TestCMMotionRemover.h @@ -0,0 +1,117 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/CMMotionRemover.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +Vec3 calcCM(const vector& values, System& system) { + Vec3 cm; + for (int j = 0; j < system.getNumParticles(); ++j) { + cm[0] += values[j][0]*system.getParticleMass(j); + cm[1] += values[j][1]*system.getParticleMass(j); + cm[2] += values[j][2]*system.getParticleMass(j); + } + return cm; +} + +void testMotionRemoval(Integrator& integrator) { + const int numParticles = 8; + System system; + HarmonicBondForce* bonds = new HarmonicBondForce(); + bonds->addBond(2, 3, 2.0, 0.5); + system.addForce(bonds); + NonbondedForce* nonbonded = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i+1); + nonbonded->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(nonbonded); + CMMotionRemover* remover = new CMMotionRemover(); + system.addForce(remover); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Now run it for a while and see if the center of mass remains fixed. + + Vec3 cmPos = calcCM(context.getState(State::Positions).getPositions(), system); + for (int i = 0; i < 1000; ++i) { + integrator.step(1); + State state = context.getState(State::Positions | State::Velocities); + Vec3 pos = calcCM(state.getPositions(), system); + ASSERT_EQUAL_VEC(cmPos, pos, 1e-2); + Vec3 vel = calcCM(state.getVelocities(), system); + if (i > 0) { + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), vel, 1e-2); + } + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + LangevinIntegrator langevin(0.0, 1e-5, 0.01); + testMotionRemoval(langevin); + VerletIntegrator verlet(0.01); + testMotionRemoval(verlet); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCheckpoints.h b/tests/TestCheckpoints.h new file mode 100644 index 0000000000000000000000000000000000000000..c5dbd08b5c72959e38679ab0b766ea568acc124e --- /dev/null +++ b/tests/TestCheckpoints.h @@ -0,0 +1,133 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/AndersenThermostat.h" +#include "openmm/Context.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void compareStates(State& s1, State& s2) { + ASSERT_EQUAL_TOL(s1.getTime(), s2.getTime(), TOL); + int numParticles = s1.getPositions().size(); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], TOL); + ASSERT_EQUAL_VEC(s1.getVelocities()[i], s2.getVelocities()[i], TOL); + Vec3 a1, b1, c1, a2, b2, c2; + s1.getPeriodicBoxVectors(a1, b1, c1); + s2.getPeriodicBoxVectors(a2, b2, c2); + ASSERT_EQUAL_VEC(a1, a2, TOL); + ASSERT_EQUAL_VEC(b1, b2, TOL); + ASSERT_EQUAL_VEC(c1, c2, TOL); + for (map::const_iterator iter = s1.getParameters().begin(); iter != s1.getParameters().end(); ++iter) + ASSERT_EQUAL(iter->second, (*s2.getParameters().find(iter->first)).second); + } +} + +void testSetState() { + const int numParticles = 10; + const double boxSize = 3.0; + const double temperature = 200.0; + System system; + system.addForce(new AndersenThermostat(0.0, 100.0)); + NonbondedForce* nonbonded = new NonbondedForce(); + system.addForce(nonbonded); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + nonbonded->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.2, 0.1); + positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + } + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + context.setParameter(AndersenThermostat::Temperature(), temperature); + + // Run for a little while. + + integrator.step(100); + + // Record the current state. + + State s1 = context.getState(State::Positions | State::Velocities | State::Parameters); + + // Continue the simulation for a few more steps and record a partial state. + + integrator.step(10); + State s2 = context.getState(State::Positions); + + // Restore the original state and see if everything gets restored correctly. + + context.setPeriodicBoxVectors(Vec3(2*boxSize, 0, 0), Vec3(0, 2*boxSize, 0), Vec3(0, 0, 2*boxSize)); + context.setParameter(AndersenThermostat::Temperature(), temperature+10); + context.setState(s1); + State s3 = context.getState(State::Positions | State::Velocities | State::Parameters); + compareStates(s1, s3); + + // Set the partial state and see if the correct things were set. + + context.setState(s2); + State s4 = context.getState(State::Positions | State::Velocities | State::Parameters); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(s2.getPositions()[i], s4.getPositions()[i], TOL); + ASSERT_EQUAL_VEC(s1.getVelocities()[i], s4.getVelocities()[i], TOL); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSetState(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCustomAngleForce.h b/tests/TestCustomAngleForce.h new file mode 100644 index 0000000000000000000000000000000000000000..2f7e3cde863e9c6cc4d38534710d5ec56720ab29 --- /dev/null +++ b/tests/TestCustomAngleForce.h @@ -0,0 +1,165 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomAngleForce.h" +#include "openmm/HarmonicAngleForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testAngles() { + // Create a system using a CustomAngleForce. + + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomAngleForce* custom = new CustomAngleForce("scale*k*(theta-theta0)^2"); + custom->addPerAngleParameter("theta0"); + custom->addPerAngleParameter("k"); + custom->addGlobalParameter("scale", 0.5); + vector parameters(2); + parameters[0] = 1.5; + parameters[1] = 0.8; + custom->addAngle(0, 1, 2, parameters); + parameters[0] = 2.0; + parameters[1] = 0.5; + custom->addAngle(1, 2, 3, parameters); + customSystem.addForce(custom); + ASSERT(!custom->usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + + // Create an identical system using a HarmonicAngleForce. + + System harmonicSystem; + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + HarmonicAngleForce* harmonic = new HarmonicAngleForce(); + harmonic->addAngle(0, 1, 2, 1.5, 0.8); + harmonic->addAngle(1, 2, 3, 2.0, 0.5); + harmonicSystem.addForce(harmonic); + + // Set the atoms in various positions, and verify that both systems give identical forces and energy. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + vector positions(4); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context c1(customSystem, integrator1, platform); + Context c2(harmonicSystem, integrator2, platform); + for (int i = 0; i < 10; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } + + // Try changing the angle parameters and make sure it's still correct. + + parameters[0] = 1.6; + parameters[1] = 0.9; + custom->setAngleParameters(0, 0, 1, 2, parameters); + parameters[0] = 2.1; + parameters[1] = 0.6; + custom->setAngleParameters(1, 1, 2, 3, parameters); + custom->updateParametersInContext(c1); + harmonic->setAngleParameters(0, 0, 1, 2, 1.6, 0.9); + harmonic->setAngleParameters(1, 1, 2, 3, 2.1, 0.6); + harmonic->updateParametersInContext(c2); + { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + CustomAngleForce* force = new CustomAngleForce("theta+none"); + force->addAngle(0, 1, 2); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testAngles(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + + diff --git a/tests/TestCustomBondForce.h b/tests/TestCustomBondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..4572ab44f06a3882f8e2810aaefb7f1654f85d08 --- /dev/null +++ b/tests/TestCustomBondForce.h @@ -0,0 +1,168 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomBondForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testBonds() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomBondForce* forceField = new CustomBondForce("scale*k*(r-r0)^2"); + forceField->addPerBondParameter("r0"); + forceField->addPerBondParameter("k"); + forceField->addGlobalParameter("scale", 0.5); + vector parameters(2); + parameters[0] = 1.5; + parameters[1] = 0.8; + forceField->addBond(0, 1, parameters); + parameters[0] = 1.2; + parameters[1] = 0.7; + forceField->addBond(1, 2, parameters); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 2, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); + ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); + ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); + } + + // Try changing the bond parameters and make sure it's still correct. + + parameters[0] = 1.6; + parameters[1] = 0.9; + forceField->setBondParameters(0, 0, 1, parameters); + parameters[0] = 1.3; + parameters[1] = 0.8; + forceField->setBondParameters(1, 1, 2, parameters); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); + ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); + ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); + } +} + +void testManyParameters() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomBondForce* forceField = new CustomBondForce("(a+b+c+d+e+f+g+h+i)*r"); + forceField->addPerBondParameter("a"); + forceField->addPerBondParameter("b"); + forceField->addPerBondParameter("c"); + forceField->addPerBondParameter("d"); + forceField->addPerBondParameter("e"); + forceField->addPerBondParameter("f"); + forceField->addPerBondParameter("g"); + forceField->addPerBondParameter("h"); + forceField->addPerBondParameter("i"); + vector parameters(forceField->getNumPerBondParameters()); + for (int i = 0; i < parameters.size(); i++) + parameters[i] = i; + forceField->addBond(0, 1, parameters); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2.5, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double f = 1+2+3+4+5+6+7+8; + ASSERT_EQUAL_VEC(Vec3(0, f, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -f, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(f*2.5, state.getPotentialEnergy(), TOL); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + CustomBondForce* force = new CustomBondForce("r+none"); + force->addBond(0, 1); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testBonds(); + testManyParameters(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestCustomCentroidBondForce.h b/tests/TestCustomCentroidBondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..eff0c4058c1e8e0cad10f8a549c1dbcc00c5de89 --- /dev/null +++ b/tests/TestCustomCentroidBondForce.h @@ -0,0 +1,297 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomCentroidBondForce.h" +#include "openmm/CustomCompoundBondForce.h" +#include "openmm/System.h" +#include "openmm/TabulatedFunction.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testHarmonicBond() { + System system; + system.addParticle(1.0); + system.addParticle(2.0); + system.addParticle(3.0); + system.addParticle(4.0); + system.addParticle(5.0); + CustomCentroidBondForce* force = new CustomCentroidBondForce(2, "k*distance(g1,g2)^2"); + force->addPerBondParameter("k"); + vector particles1; + particles1.push_back(0); + particles1.push_back(1); + vector particles2; + particles2.push_back(2); + particles2.push_back(3); + particles2.push_back(4); + force->addGroup(particles1); + force->addGroup(particles2); + vector groups; + groups.push_back(0); + groups.push_back(1); + vector parameters; + parameters.push_back(1.0); + force->addBond(groups, parameters); + system.addForce(force); + ASSERT(!system.usesPeriodicBoundaryConditions()); + + // The center of mass of group 0 is (1.5, 0, 0). + + vector positions(5); + positions[0] = Vec3(2.5, 0, 0); + positions[1] = Vec3(1, 0, 0); + + // The center of mass of group 1 is (-1, 0, 0). + + positions[2] = Vec3(-6, 0, 0); + positions[3] = Vec3(-1, 0, 0); + positions[4] = Vec3(2, 0, 0); + + // Check the forces and energy. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(2.5*2.5, state.getPotentialEnergy(), TOL); + ASSERT_EQUAL_VEC(Vec3(-2*2.5*(1.0/3.0), 0, 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-2*2.5*(2.0/3.0), 0, 0), state.getForces()[1], TOL); + ASSERT_EQUAL_VEC(Vec3(2*2.5*(3.0/12.0), 0, 0), state.getForces()[2], TOL); + ASSERT_EQUAL_VEC(Vec3(2*2.5*(4.0/12.0), 0, 0), state.getForces()[3], TOL); + ASSERT_EQUAL_VEC(Vec3(2*2.5*(5.0/12.0), 0, 0), state.getForces()[4], TOL); + + // Update the per-bond parameter and see if the results change. + + parameters[0] = 2.0; + force->setBondParameters(0, groups, parameters); + force->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(2*2.5*2.5, state.getPotentialEnergy(), TOL); + ASSERT_EQUAL_VEC(Vec3(-4*2.5*(1.0/3.0), 0, 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-4*2.5*(2.0/3.0), 0, 0), state.getForces()[1], TOL); + ASSERT_EQUAL_VEC(Vec3(4*2.5*(3.0/12.0), 0, 0), state.getForces()[2], TOL); + ASSERT_EQUAL_VEC(Vec3(4*2.5*(4.0/12.0), 0, 0), state.getForces()[3], TOL); + ASSERT_EQUAL_VEC(Vec3(4*2.5*(5.0/12.0), 0, 0), state.getForces()[4], TOL); + + // All the particles should be treated as a single molecule. + + vector > molecules = context.getMolecules(); + ASSERT_EQUAL(1, molecules.size()); + ASSERT_EQUAL(5, molecules[0].size()); +} + +void testComplexFunction() { + int numParticles = 5; + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(2.0); + vector table(20); + for (int i = 0; i < 20; i++) + table[i] = sin(0.11*i); + + // When every group contains only one particle, a CustomCentroidBondForce is identical to a + // CustomCompoundBondForce. Use that to test a complicated energy function with lots of terms. + + CustomCompoundBondForce* compound = new CustomCompoundBondForce(4, "x1+y2+z4+fn(distance(p1,p2))*angle(p3,p2,p4)+scale*dihedral(p2,p1,p4,p3)"); + CustomCentroidBondForce* centroid = new CustomCentroidBondForce(4, "x1+y2+z4+fn(distance(g1,g2))*angle(g3,g2,g4)+scale*dihedral(g2,g1,g4,g3)"); + compound->addGlobalParameter("scale", 0.5); + centroid->addGlobalParameter("scale", 0.5); + compound->addTabulatedFunction("fn", new Continuous1DFunction(table, -1, 10)); + centroid->addTabulatedFunction("fn", new Continuous1DFunction(table, -1, 10)); + + // Add two bonds to the CustomCompoundBondForce. + + vector particles(4); + vector parameters; + particles[0] = 0; + particles[1] = 1; + particles[2] = 2; + particles[3] = 3; + compound->addBond(particles, parameters); + particles[0] = 2; + particles[1] = 4; + particles[2] = 3; + particles[3] = 1; + compound->addBond(particles, parameters); + + // Add identical bonds to the CustomCentroidBondForce. As a stronger test, make sure that + // group number is different from particle number. + + vector groupMembers(1); + groupMembers[0] = 3; + centroid->addGroup(groupMembers); + groupMembers[0] = 0; + centroid->addGroup(groupMembers); + groupMembers[0] = 1; + centroid->addGroup(groupMembers); + groupMembers[0] = 2; + centroid->addGroup(groupMembers); + groupMembers[0] = 4; + centroid->addGroup(groupMembers); + vector groups(4); + groups[0] = 1; + groups[1] = 2; + groups[2] = 3; + groups[3] = 0; + centroid->addBond(groups, parameters); + groups[0] = 3; + groups[1] = 4; + groups[2] = 0; + groups[3] = 2; + centroid->addBond(groups, parameters); + + // Add both forces as different force groups, and create a context. + + centroid->setForceGroup(1); + system.addForce(compound); + system.addForce(centroid); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + + // Evaluate the force and energy for various positions and see if they match. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector positions(numParticles); + for (int i = 0; i < 10; i++) { + for (int j = 0; j < numParticles; j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + context.setPositions(positions); + State state1 = context.getState(State::Forces | State::Energy, false, 1<<0); + State state2 = context.getState(State::Forces | State::Energy, false, 1<<1); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), TOL); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], TOL); + } +} + +void testCustomWeights() { + System system; + system.addParticle(1.0); + system.addParticle(2.0); + system.addParticle(3.0); + system.addParticle(4.0); + CustomCentroidBondForce* force = new CustomCentroidBondForce(2, "distance(g1,g2)^2"); + vector particles(2); + vector weights(2); + particles[0] = 0; + particles[1] = 1; + weights[0] = 0.5; + weights[1] = 1.5; + force->addGroup(particles, weights); + particles[0] = 2; + particles[1] = 3; + weights[0] = 2.0; + weights[1] = 1.0; + force->addGroup(particles, weights); + vector groups; + groups.push_back(0); + groups.push_back(1); + vector parameters; + force->addBond(groups, parameters); + system.addForce(force); + + // The center of mass of group 0 is (0, 1, 0). + + vector positions(4); + positions[0] = Vec3(0, 4, 0); + positions[1] = Vec3(0, 0, 0); + + // The center of mass of group 1 is (0, 10, 0). + + positions[2] = Vec3(0, 9, 0); + positions[3] = Vec3(0, 12, 0); + + // Check the forces and energy. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(9.0*9.0, state.getPotentialEnergy(), TOL); + ASSERT_EQUAL_VEC(Vec3(0, 2*9*(0.5/2.0), 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 2*9*(1.5/2.0), 0), state.getForces()[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -2*9*(2.0/3.0), 0), state.getForces()[2], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -2*9*(1.0/3.0), 0), state.getForces()[3], TOL); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + CustomCentroidBondForce* force = new CustomCentroidBondForce(2, "1+none"); + vector particles; + particles.push_back(0); + force->addGroup(particles); + force->addGroup(particles); + vector groups; + groups.push_back(0); + groups.push_back(1); + force->addBond(groups); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testHarmonicBond(); + testComplexFunction(); + testCustomWeights(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCustomCompoundBondForce.h b/tests/TestCustomCompoundBondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..3f24d7c5a8383d6404cabfeaaa9f5ddc6b9b9f41 --- /dev/null +++ b/tests/TestCustomCompoundBondForce.h @@ -0,0 +1,354 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "ReferencePlatform.h" +#include "openmm/CustomCompoundBondForce.h" +#include "openmm/HarmonicAngleForce.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/PeriodicTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testBond() { + // Create a system using a CustomCompoundBondForce. + + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomCompoundBondForce* custom = new CustomCompoundBondForce(4, "0.5*kb*((distance(p1,p2)-b0)^2+(distance(p2,p3)-b0)^2)+0.5*ka*(angle(p2,p3,p4)-a0)^2+kt*(1+cos(dihedral(p1,p2,p3,p4)-t0))"); + custom->addPerBondParameter("kb"); + custom->addPerBondParameter("ka"); + custom->addPerBondParameter("kt"); + custom->addPerBondParameter("b0"); + custom->addPerBondParameter("a0"); + custom->addPerBondParameter("t0"); + vector particles(4); + particles[0] = 0; + particles[1] = 1; + particles[2] = 3; + particles[3] = 2; + vector parameters(6); + parameters[0] = 1.5; + parameters[1] = 0.8; + parameters[2] = 0.6; + parameters[3] = 1.1; + parameters[4] = 2.9; + parameters[5] = 1.3; + custom->addBond(particles, parameters); + customSystem.addForce(custom); + ASSERT(!custom->usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + + // Create an identical system using standard forces. + + System standardSystem; + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + HarmonicBondForce* bonds = new HarmonicBondForce(); + bonds->addBond(0, 1, 1.1, 1.5); + bonds->addBond(1, 3, 1.1, 1.5); + standardSystem.addForce(bonds); + HarmonicAngleForce* angles = new HarmonicAngleForce(); + angles->addAngle(1, 3, 2, 2.9, 0.8); + standardSystem.addForce(angles); + PeriodicTorsionForce* torsions = new PeriodicTorsionForce(); + torsions->addTorsion(0, 1, 3, 2, 1, 1.3, 0.6); + standardSystem.addForce(torsions); + + // Set the atoms in various positions, and verify that both systems give identical forces and energy. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context c1(customSystem, integrator1, platform); + Context c2(standardSystem, integrator2, platform); + vector positions(4); + for (int i = 0; i < 10; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } + + // Try changing the bond parameters and make sure it's still correct. + + parameters[0] = 1.6; + parameters[3] = 1.3; + custom->setBondParameters(0, particles, parameters); + custom->updateParametersInContext(c1); + bonds->setBondParameters(0, 0, 1, 1.3, 1.6); + bonds->setBondParameters(1, 1, 3, 1.3, 1.6); + bonds->updateParametersInContext(c2); + { + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + const vector& forces = s1.getForces(); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } +} + +void testPositionDependence() { + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomCompoundBondForce* custom = new CustomCompoundBondForce(2, "scale1*distance(p1,p2)+scale2*x1+2*y2"); + custom->addGlobalParameter("scale1", 0.3); + custom->addGlobalParameter("scale2", 0.2); + vector particles(2); + particles[0] = 1; + particles[1] = 0; + vector parameters; + custom->addBond(particles, parameters); + customSystem.addForce(custom); + vector positions(2); + positions[0] = Vec3(1.5, 1, 0); + positions[1] = Vec3(0.5, 1, 0); + VerletIntegrator integrator(0.01); + Context context(customSystem, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(0.3*1.0+0.2*0.5+2*1, state.getPotentialEnergy(), 1e-5); + ASSERT_EQUAL_VEC(Vec3(-0.3, -2, 0), state.getForces()[0], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.3-0.2, 0, 0), state.getForces()[1], 1e-5); +} + +void testContinuous2DFunction() { + const int xsize = 10; + const int ysize = 11; + const double xmin = 0.4; + const double xmax = 1.1; + const double ymin = 0.0; + const double ymax = 0.9; + System system; + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1)+1"); + vector particles(1, 0); + forceField->addBond(particles, vector()); + vector table(xsize*ysize); + for (int i = 0; i < xsize; i++) { + for (int j = 0; j < ysize; j++) { + double x = xmin + i*(xmax-xmin)/xsize; + double y = ymin + j*(ymax-ymin)/ysize; + table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); + } + } + forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(1); + for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { + for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { + positions[0] = Vec3(x, y, 1.5); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double energy = 1; + Vec3 force(0, 0, 0); + if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { + energy = sin(0.25*x)*cos(0.33*y)+1; + force[0] = -0.25*cos(0.25*x)*cos(0.33*y); + force[1] = 0.3*sin(0.25*x)*sin(0.33*y); + } + ASSERT_EQUAL_VEC(force, forces[0], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); + } + } +} + +void testContinuous3DFunction() { + const int xsize = 10; + const int ysize = 11; + const int zsize = 12; + const double xmin = 0.4; + const double xmax = 1.1; + const double ymin = 0.0; + const double ymax = 0.9; + const double zmin = 0.2; + const double zmax = 1.3; + System system; + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomCompoundBondForce* forceField = new CustomCompoundBondForce(1, "fn(x1,y1,z1)+1"); + vector particles(1, 0); + forceField->addBond(particles, vector()); + vector table(xsize*ysize*zsize); + for (int i = 0; i < xsize; i++) { + for (int j = 0; j < ysize; j++) { + for (int k = 0; k < zsize; k++) { + double x = xmin + i*(xmax-xmin)/xsize; + double y = ymin + j*(ymax-ymin)/ysize; + double z = zmin + k*(zmax-zmin)/zsize; + table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); + } + } + } + forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(1); + for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { + for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { + for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { + positions[0] = Vec3(x, y, z); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double energy = 1; + Vec3 force(0, 0, 0); + if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { + energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1; + force[0] = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); + force[1] = 0.3*sin(0.25*x)*sin(0.33*y)*(1.0+z); + force[2] = -sin(0.25*x)*cos(0.33*y); + } + ASSERT_EQUAL_VEC(force, forces[0], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); + } + } + } +} + +void testMultipleBonds() { + // Two compound bonds using Urey-Bradley example from API doc + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomCompoundBondForce* custom = new CustomCompoundBondForce(3, + "0.5*(kangle*(angle(p1,p2,p3)-theta0)^2+kbond*(distance(p1,p3)-r0)^2)"); + custom->addPerBondParameter("kangle"); + custom->addPerBondParameter("kbond"); + custom->addPerBondParameter("theta0"); + custom->addPerBondParameter("r0"); + vector parameters(4); + parameters[0] = 1.0; + parameters[1] = 1.0; + parameters[2] = 2 * M_PI / 3; + parameters[3] = sqrt(3.0) / 2; + vector particles0(3); + particles0[0] = 0; + particles0[1] = 1; + particles0[2] = 2; + vector particles1(3); + particles1[0] = 1; + particles1[1] = 2; + particles1[2] = 3; + custom->addBond(particles0, parameters); + custom->addBond(particles1, parameters); + customSystem.addForce(custom); + + vector positions(4); + positions[0] = Vec3(0, 0.5, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(0.5, 0, 0); + positions[3] = Vec3(0.6, 0, 0.4); + VerletIntegrator integrator(0.01); + Context context(customSystem, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(0.199, state.getPotentialEnergy(), 1e-3); + vector forces(state.getForces()); + ASSERT_EQUAL_VEC(Vec3(-1.160, 0.112, 0.0), forces[0], 1e-3); + ASSERT_EQUAL_VEC(Vec3(0.927, 1.047, -0.638), forces[1], 1e-3); + ASSERT_EQUAL_VEC(Vec3(-0.543, -1.160, 0.721), forces[2], 1e-3); + ASSERT_EQUAL_VEC(Vec3(0.776, 0.0, -0.084), forces[3], 1e-3); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + CustomCompoundBondForce* force = new CustomCompoundBondForce(2, "1+none"); + vector particles; + particles.push_back(0); + particles.push_back(1); + force->addBond(particles); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testBond(); + testPositionDependence(); + testContinuous2DFunction(); + testContinuous3DFunction(); + testMultipleBonds(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + + diff --git a/tests/TestCustomExternalForce.h b/tests/TestCustomExternalForce.h new file mode 100644 index 0000000000000000000000000000000000000000..f94e57f2d18083a33eff65e3310e10a6b866070e --- /dev/null +++ b/tests/TestCustomExternalForce.h @@ -0,0 +1,239 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomExternalForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testForce() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomExternalForce* forceField = new CustomExternalForce("scale*(x+yscale*(y-y0)^2)"); + forceField->addPerParticleParameter("y0"); + forceField->addPerParticleParameter("yscale"); + forceField->addGlobalParameter("scale", 0.5); + vector parameters(2); + parameters[0] = 0.5; + parameters[1] = 2.0; + forceField->addParticle(0, parameters); + parameters[0] = 1.5; + parameters[1] = 3.0; + forceField->addParticle(2, parameters); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 2, 0); + positions[1] = Vec3(0, 0, 1); + positions[2] = Vec3(1, 0, 1); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.0*2.0*1.5, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.0*1.5*1.5), state.getPotentialEnergy(), TOL); + } + + // Try changing the parameters and make sure it's still correct. + + parameters[0] = 1.4; + parameters[1] = 3.5; + forceField->setParticleParameters(1, 2, parameters); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(-0.5, -0.5*2.0*2.0*1.5, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(-0.5, 0.5*3.5*2.0*1.4, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(0.5*(1.0 + 2.0*1.5*1.5 + 3.5*1.4*1.4), state.getPotentialEnergy(), TOL); + } +} + +void testManyParameters() { + System system; + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomExternalForce* forceField = new CustomExternalForce("xscale*(x-x0)^2+yscale*(y-y0)^2+zscale*(z-z0)^2"); + forceField->addPerParticleParameter("x0"); + forceField->addPerParticleParameter("y0"); + forceField->addPerParticleParameter("z0"); + forceField->addPerParticleParameter("xscale"); + forceField->addPerParticleParameter("yscale"); + forceField->addPerParticleParameter("zscale"); + vector parameters(6); + parameters[0] = 1.0; + parameters[1] = 2.0; + parameters[2] = 3.0; + parameters[3] = 0.1; + parameters[4] = 0.2; + parameters[5] = 0.3; + forceField->addParticle(0, parameters); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(1); + positions[0] = Vec3(0, -1, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(2*0.1*1.0, 2*0.2*3.0, 2*0.3*3.0), forces[0], TOL); + ASSERT_EQUAL_TOL(0.1*1*1 + 0.2*3*3 + 0.3*3*3, state.getPotentialEnergy(), TOL); +} + +void testPeriodic() { + Vec3 vx(5, 0, 0); + Vec3 vy(0, 6, 0); + Vec3 vz(1, 2, 7); + double x0 = 51, y0 = -17, z0 = 11.2; + System system; + system.setDefaultPeriodicBoxVectors(vx, vy, vz); + system.addParticle(1.0); + CustomExternalForce* force = new CustomExternalForce("periodicdistance(x, y, z, x0, y0, z0)^2"); + force->addPerParticleParameter("x0"); + force->addPerParticleParameter("y0"); + force->addPerParticleParameter("z0"); + vector params(3); + params[0] = x0; + params[1] = y0; + params[2] = z0; + force->addParticle(0, params); + system.addForce(force); + ASSERT(force->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + vector positions(1); + positions[0] = Vec3(0, 2, 0); + context.setPositions(positions); + for (int i = 0; i < 100; i++) { + State state = context.getState(State::Positions | State::Forces | State::Energy); + + // Apply periodic boundary conditions to the difference between the two positions. + + Vec3 delta = Vec3(x0, y0, z0)-state.getPositions()[0]; + delta -= vz*floor(delta[2]/vz[2]+0.5); + delta -= vy*floor(delta[1]/vy[1]+0.5); + delta -= vx*floor(delta[0]/vx[0]+0.5); + + // Verify that the force and energy are correct. + + ASSERT_EQUAL_VEC(delta*2, state.getForces()[0], TOL); + ASSERT_EQUAL_TOL(delta.dot(delta), state.getPotentialEnergy(), TOL); + integrator.step(1); + } +} + +void testZeroPeriodicDistance() { + Vec3 vx(5, 0, 0); + Vec3 vy(0, 6, 0); + Vec3 vz(1, 2, 7); + double x0 = 51, y0 = -17, z0 = 11.2; + System system; + system.setDefaultPeriodicBoxVectors(vx, vy, vz); + system.addParticle(1.0); + CustomExternalForce* force = new CustomExternalForce("periodicdistance(x, y, z, x0, y0, z0)^2"); + force->addPerParticleParameter("x0"); + force->addPerParticleParameter("y0"); + force->addPerParticleParameter("z0"); + vector params(3); + params[0] = x0; + params[1] = y0; + params[2] = z0; + force->addParticle(0, params); + system.addForce(force); + ASSERT(force->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + vector positions(1); + positions[0] = Vec3(x0, y0, z0); + context.setPositions(positions); + + State state = context.getState(State::Positions | State::Forces | State::Energy); + vector forces = state.getForces(); + for (int i = 0; i < 3; i++) + ASSERT_EQUAL(forces[0][i], forces[0][i]); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + CustomExternalForce* force = new CustomExternalForce("x+none"); + force->addParticle(0); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testForce(); + testManyParameters(); + testPeriodic(); + testZeroPeriodicDistance(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + + diff --git a/tests/TestCustomGBForce.h b/tests/TestCustomGBForce.h new file mode 100644 index 0000000000000000000000000000000000000000..c0821a4207f36c2fd9d6b114d47e0ce5472941ea --- /dev/null +++ b/tests/TestCustomGBForce.h @@ -0,0 +1,514 @@ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "sfmt/SFMT.h" +#include "openmm/Context.h" +#include "openmm/CustomGBForce.h" +#include "openmm/GBSAOBCForce.h" +#include "openmm/OpenMMException.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testOBC(GBSAOBCForce::NonbondedMethod obcMethod, CustomGBForce::NonbondedMethod customMethod) { + const int numMolecules = 70; + const int numParticles = numMolecules*2; + const double boxSize = 10.0; + const double cutoff = 2.0; + + // Create two systems: one with a GBSAOBCForce, and one using a CustomGBForce to implement the same interaction. + + System standardSystem; + System customSystem; + for (int i = 0; i < numParticles; i++) { + standardSystem.addParticle(1.0); + customSystem.addParticle(1.0); + } + standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); + customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); + GBSAOBCForce* obc = new GBSAOBCForce(); + CustomGBForce* custom = new CustomGBForce(); + obc->setCutoffDistance(cutoff); + custom->setCutoffDistance(cutoff); + custom->addPerParticleParameter("q"); + custom->addPerParticleParameter("radius"); + custom->addPerParticleParameter("scale"); + custom->addGlobalParameter("solventDielectric", obc->getSolventDielectric()); + custom->addGlobalParameter("soluteDielectric", obc->getSoluteDielectric()); + custom->addComputedValue("I", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" + "U=r+sr2;" + "C=2*(1/or1-1/L)*step(sr2-r-or1);" + "L=max(or1, D);" + "D=abs(r-sr2);" + "sr2 = scale2*or2;" + "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); + custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" + "psi=I*or; or=radius-0.009", CustomGBForce::SingleParticle); + custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935485*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); + string invCutoffString = ""; + if (obcMethod != GBSAOBCForce::NoCutoff) { + stringstream s; + s<<(1.0/cutoff); + invCutoffString = s.str(); + } + custom->addEnergyTerm("138.935485*(1/soluteDielectric-1/solventDielectric)*q1*q2*("+invCutoffString+"-1/f);" + "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + vector params(3); + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + obc->addParticle(1.0, 0.2, 0.5); + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.5; + custom->addParticle(params); + obc->addParticle(-1.0, 0.1, 0.5); + params[0] = -1.0; + params[1] = 0.1; + custom->addParticle(params); + } + else { + obc->addParticle(1.0, 0.2, 0.8); + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.8; + custom->addParticle(params); + obc->addParticle(-1.0, 0.1, 0.8); + params[0] = -1.0; + params[1] = 0.1; + custom->addParticle(params); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + } + obc->setNonbondedMethod(obcMethod); + custom->setNonbondedMethod(customMethod); + standardSystem.addForce(obc); + customSystem.addForce(custom); + if (customMethod == CustomGBForce::CutoffPeriodic) { + ASSERT(custom->usesPeriodicBoundaryConditions()); + ASSERT(obc->usesPeriodicBoundaryConditions()); + ASSERT(standardSystem.usesPeriodicBoundaryConditions()); + ASSERT(customSystem.usesPeriodicBoundaryConditions()); + } + else { + ASSERT(!custom->usesPeriodicBoundaryConditions()); + ASSERT(!obc->usesPeriodicBoundaryConditions()); + ASSERT(!standardSystem.usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + } + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context context1(standardSystem, integrator1, platform); + context1.setPositions(positions); + context1.setVelocities(velocities); + State state1 = context1.getState(State::Forces | State::Energy); + Context context2(customSystem, integrator2, platform); + context2.setPositions(positions); + context2.setVelocities(velocities); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); + } + + // Try changing the particle parameters and make sure it's still correct. + + for (int i = 0; i < numMolecules/2; i++) { + obc->setParticleParameters(2*i, 1.1, 0.3, 0.6); + params[0] = 1.1; + params[1] = 0.3; + params[2] = 0.6; + custom->setParticleParameters(2*i, params); + obc->setParticleParameters(2*i+1, -1.1, 0.2, 0.4); + params[0] = -1.1; + params[1] = 0.2; + params[2] = 0.4; + custom->setParticleParameters(2*i+1, params); + } + obc->updateParametersInContext(context1); + custom->updateParametersInContext(context2); + state1 = context1.getState(State::Forces | State::Energy); + state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); + } +} + +void testMembrane() { + const int numMolecules = 70; + const int numParticles = numMolecules*2; + const double boxSize = 10.0; + + // Create a system with an implicit membrane. + + System system; + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + } + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0.0, 0.0), Vec3(0.0, boxSize, 0.0), Vec3(0.0, 0.0, boxSize)); + CustomGBForce* custom = new CustomGBForce(); + custom->setCutoffDistance(2.0); + custom->addPerParticleParameter("q"); + custom->addPerParticleParameter("radius"); + custom->addPerParticleParameter("scale"); + custom->addGlobalParameter("thickness", 3); + custom->addGlobalParameter("solventDielectric", 78.3); + custom->addGlobalParameter("soluteDielectric", 1); + custom->addComputedValue("Imol", "step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*(r-sr2*sr2/r)+0.5*log(L/U)/r+C);" + "U=r+sr2;" + "C=2*(1/or1-1/L)*step(sr2-r-or1);" + "L=max(or1, D);" + "D=abs(r-sr2);" + "sr2 = scale2*or2;" + "or1 = radius1-0.009; or2 = radius2-0.009", CustomGBForce::ParticlePairNoExclusions); + custom->addComputedValue("Imem", "(1/radius+2*log(2)/thickness)/(1+exp(7.2*(abs(z)+radius-0.5*thickness)))", CustomGBForce::SingleParticle); + custom->addComputedValue("B", "1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);" + "psi=max(Imol,Imem)*or; or=radius-0.009", CustomGBForce::SingleParticle); + custom->addEnergyTerm("28.3919551*(radius+0.14)^2*(radius/B)^6-0.5*138.935456*(1/soluteDielectric-1/solventDielectric)*q^2/B", CustomGBForce::SingleParticle); + custom->addEnergyTerm("-138.935456*(1/soluteDielectric-1/solventDielectric)*q1*q2/f;" + "f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))", CustomGBForce::ParticlePairNoExclusions); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector params(3); + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.5; + custom->addParticle(params); + params[0] = -1.0; + params[1] = 0.1; + custom->addParticle(params); + } + else { + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.8; + custom->addParticle(params); + params[0] = -1.0; + params[1] = 0.1; + custom->addParticle(params); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + } + system.addForce(custom); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + double norm = 0.0; + for (int i = 0; i < (int) forces.size(); ++i) + norm += forces[i].dot(forces[i]); + norm = std::sqrt(norm); + const double stepSize = 1e-2; + double step = 0.5*stepSize/norm; + vector positions2(numParticles), positions3(numParticles); + for (int i = 0; i < (int) positions.size(); ++i) { + Vec3 p = positions[i]; + Vec3 f = forces[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); +} + +void testTabulatedFunction() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomGBForce* force = new CustomGBForce(); + force->addComputedValue("a", "0", CustomGBForce::ParticlePair); + force->addEnergyTerm("fn(r)+1", CustomGBForce::ParticlePair); + force->addParticle(vector()); + force->addParticle(vector()); + vector table; + for (int i = 0; i < 21; i++) + table.push_back(std::sin(0.25*i)); + force->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); + system.addForce(force); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 1; i < 30; i++) { + // Check interpolated values. + double x = (7.0/30.0)*i; + positions[1] = Vec3(x, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double force = (x < 1.0 || x > 6.0 ? 0.0 : -std::cos(x-1.0)); + double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); + } + for (int i = 1; i < 20; i++) { + // These values are exactly on table points, so they should match more precisely. + double x = 0.25*i+1.0; + positions[1] = Vec3(x, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Energy); + double energy = (x < 1.0 || x > 6.0 ? 0.0 : std::sin(x-1.0))+1.0; + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); + } +} + +void testMultipleChainRules() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomGBForce* force = new CustomGBForce(); + force->addComputedValue("a", "2*r", CustomGBForce::ParticlePair); + force->addComputedValue("b", "a+1", CustomGBForce::SingleParticle); + force->addComputedValue("c", "2*b+a", CustomGBForce::SingleParticle); + force->addEnergyTerm("0.1*a+1*b+10*c", CustomGBForce::SingleParticle); // 0.1*(2*r) + 2*r+1 + 10*(3*a+2) = 0.2*r + 2*r+1 + 40*r+20+20*r = 62.2*r+21 + force->addParticle(vector()); + force->addParticle(vector()); + system.addForce(force); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 1; i < 5; i++) { + positions[1] = Vec3(i, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(124.4, 0, 0), forces[0], 1e-4); + ASSERT_EQUAL_VEC(Vec3(-124.4, 0, 0), forces[1], 1e-4); + ASSERT_EQUAL_TOL(2*(62.2*i+21), state.getPotentialEnergy(), 0.02); + } +} + +void testPositionDependence() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomGBForce* force = new CustomGBForce(); + force->addComputedValue("a", "r", CustomGBForce::ParticlePair); + force->addComputedValue("b", "a+x*y", CustomGBForce::SingleParticle); + force->addEnergyTerm("b*z", CustomGBForce::SingleParticle); + force->addEnergyTerm("b1+b2", CustomGBForce::ParticlePair); // = 2*r+x1*y1+x2*y2 + force->addParticle(vector()); + force->addParticle(vector()); + system.addForce(force); + Context context(system, integrator, platform); + vector positions(2); + vector forces(2); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < 5; i++) { + positions[0] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + positions[1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + Vec3 delta = positions[0]-positions[1]; + double r = sqrt(delta.dot(delta)); + double energy = 2*r+positions[0][0]*positions[0][1]+positions[1][0]*positions[1][1]; + for (int j = 0; j < 2; j++) + energy += positions[j][2]*(r+positions[j][0]*positions[j][1]); + Vec3 force1(-(1+positions[0][2])*delta[0]/r-(1+positions[0][2])*positions[0][1]-(1+positions[1][2])*delta[0]/r, + -(1+positions[0][2])*delta[1]/r-(1+positions[0][2])*positions[0][0]-(1+positions[1][2])*delta[1]/r, + -(1+positions[0][2])*delta[2]/r-(r+positions[0][0]*positions[0][1])-(1+positions[1][2])*delta[2]/r); + Vec3 force2((1+positions[0][2])*delta[0]/r+(1+positions[1][2])*delta[0]/r-(1+positions[1][2])*positions[1][1], + (1+positions[0][2])*delta[1]/r+(1+positions[1][2])*delta[1]/r-(1+positions[1][2])*positions[1][0], + (1+positions[0][2])*delta[2]/r+(1+positions[1][2])*delta[2]/r-(r+positions[1][0]*positions[1][1])); + ASSERT_EQUAL_VEC(force1, forces[0], 1e-4); + ASSERT_EQUAL_VEC(force2, forces[1], 1e-4); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + double norm = 0.0; + for (int i = 0; i < (int) forces.size(); ++i) + norm += forces[i].dot(forces[i]); + norm = std::sqrt(norm); + const double stepSize = 1e-3; + double step = 0.5*stepSize/norm; + vector positions2(2), positions3(2); + for (int i = 0; i < (int) positions.size(); ++i) { + Vec3 p = positions[i]; + Vec3 f = forces[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-3); + } +} + +void testExclusions() { + for (int i = 0; i < 4; i++) { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomGBForce* force = new CustomGBForce(); + force->addComputedValue("a", "r", i < 2 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); + force->addEnergyTerm("a", CustomGBForce::SingleParticle); + force->addEnergyTerm("(1+a1+a2)*r", i%2 == 0 ? CustomGBForce::ParticlePair : CustomGBForce::ParticlePairNoExclusions); + force->addParticle(vector()); + force->addParticle(vector()); + force->addExclusion(0, 1); + system.addForce(force); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double f, energy; + switch (i) + { + case 0: // e = 0 + f = 0; + energy = 0; + break; + case 1: // e = r + f = 1; + energy = 1; + break; + case 2: // e = 2r + f = 2; + energy = 2; + break; + case 3: // e = 3r + 2r^2 + f = 7; + energy = 5; + break; + default: + ASSERT(false); + } + ASSERT_EQUAL_VEC(Vec3(f, 0, 0), forces[0], 1e-4); + ASSERT_EQUAL_VEC(Vec3(-f, 0, 0), forces[1], 1e-4); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + double norm = 0.0; + for (int i = 0; i < (int) forces.size(); ++i) + norm += forces[i].dot(forces[i]); + norm = std::sqrt(norm); + if (norm > 0) { + const double stepSize = 1e-3; + double step = stepSize/norm; + for (int i = 0; i < (int) positions.size(); ++i) { + Vec3 p = positions[i]; + Vec3 f = forces[i]; + positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + } + context.setPositions(positions); + State state2 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/stepSize, 1e-3*abs(state.getPotentialEnergy())); + } + } +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + CustomGBForce* force = new CustomGBForce(); + force->addComputedValue("a", "r+none", CustomGBForce::ParticlePair); + force->addParticle(); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testOBC(GBSAOBCForce::NoCutoff, CustomGBForce::NoCutoff); + testOBC(GBSAOBCForce::CutoffNonPeriodic, CustomGBForce::CutoffNonPeriodic); + testOBC(GBSAOBCForce::CutoffPeriodic, CustomGBForce::CutoffPeriodic); + testMembrane(); + testTabulatedFunction(); + testMultipleChainRules(); + testPositionDependence(); + testExclusions(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestCustomHbondForce.h b/tests/TestCustomHbondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..cfd830d4257ca2bc60068c5a4053d0d23c9cea5b --- /dev/null +++ b/tests/TestCustomHbondForce.h @@ -0,0 +1,266 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomHbondForce.h" +#include "openmm/HarmonicAngleForce.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/PeriodicTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testHbond() { + // Create a system using a CustomHbondForce. + + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomHbondForce* custom = new CustomHbondForce("0.5*kr*(distance(d1,a1)-r0)^2 + 0.5*ktheta*(angle(a1,d1,d2)-theta0)^2 + 0.5*kpsi*(angle(d1,a1,a2)-psi0)^2 + kchi*(1+cos(n*dihedral(a3,a2,a1,d1)-chi0))"); + custom->addPerDonorParameter("r0"); + custom->addPerDonorParameter("theta0"); + custom->addPerDonorParameter("psi0"); + custom->addPerAcceptorParameter("chi0"); + custom->addPerAcceptorParameter("n"); + custom->addGlobalParameter("kr", 0.4); + custom->addGlobalParameter("ktheta", 0.5); + custom->addGlobalParameter("kpsi", 0.6); + custom->addGlobalParameter("kchi", 0.7); + vector parameters(3); + parameters[0] = 1.5; + parameters[1] = 1.7; + parameters[2] = 1.9; + custom->addDonor(1, 0, -1, parameters); + parameters.resize(2); + parameters[0] = 2.1; + parameters[1] = 2; + custom->addAcceptor(2, 3, 4, parameters); + custom->setCutoffDistance(10.0); + customSystem.addForce(custom); + ASSERT(!custom->usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + + // Create an identical system using HarmonicBondForce, HarmonicAngleForce, and PeriodicTorsionForce. + + System standardSystem; + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + standardSystem.addParticle(1.0); + HarmonicBondForce* bond = new HarmonicBondForce(); + bond->addBond(1, 2, 1.5, 0.4); + standardSystem.addForce(bond); + HarmonicAngleForce* angle = new HarmonicAngleForce(); + angle->addAngle(0, 1, 2, 1.7, 0.5); + angle->addAngle(1, 2, 3, 1.9, 0.6); + standardSystem.addForce(angle); + PeriodicTorsionForce* torsion = new PeriodicTorsionForce(); + torsion->addTorsion(1, 2, 3, 4, 2, 2.1, 0.7); + standardSystem.addForce(torsion); + + // Set the atoms in various positions, and verify that both systems give identical forces and energy. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + vector positions(5); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context c1(customSystem, integrator1, platform); + Context c2(standardSystem, integrator2, platform); + for (int i = 0; i < 10; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); + } + + // Try changing the parameters and make sure it's still correct. + + parameters.resize(3); + parameters[0] = 1.4; + parameters[1] = 1.7; + parameters[2] = 1.9; + custom->setDonorParameters(0, 1, 0, -1, parameters); + parameters.resize(2); + parameters[0] = 2.2; + parameters[1] = 2; + custom->setAcceptorParameters(0, 2, 3, 4, parameters); + bond->setBondParameters(0, 1, 2, 1.4, 0.4); + torsion->setTorsionParameters(0, 1, 2, 3, 4, 2, 2.2, 0.7); + custom->updateParametersInContext(c1); + bond->updateParametersInContext(c2); + torsion->updateParametersInContext(c2); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s2.getForces()[i], s1.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), s1.getPotentialEnergy(), TOL); +} + +void testExclusions() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); + custom->addDonor(0, 1, -1, vector()); + custom->addDonor(1, 0, -1, vector()); + custom->addAcceptor(2, 0, -1, vector()); + custom->addExclusion(1, 0); + system.addForce(custom); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2, 0); + positions[2] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); +} + +void testCutoff() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomHbondForce* custom = new CustomHbondForce("(distance(d1,a1)-1)^2"); + custom->addDonor(0, 1, -1, vector()); + custom->addDonor(1, 0, -1, vector()); + custom->addAcceptor(2, 0, -1, vector()); + custom->setNonbondedMethod(CustomHbondForce::CutoffNonPeriodic); + custom->setCutoffDistance(2.5); + system.addForce(custom); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 3, 0); + positions[2] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(2, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(-2, 0, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(1.0, state.getPotentialEnergy(), TOL); +} + +void testCustomFunctions() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomHbondForce* custom = new CustomHbondForce("foo(distance(d1,a1))"); + custom->addDonor(1, 0, -1, vector()); + custom->addDonor(2, 0, -1, vector()); + custom->addAcceptor(0, 1, -1, vector()); + vector function(2); + function[0] = 0; + function[1] = 1; + custom->addTabulatedFunction("foo", new Continuous1DFunction(function, 0, 10)); + system.addForce(custom); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2, 0); + positions[2] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0.1, 0.1, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -0.1, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(-0.1, 0, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(0.1*2+0.1*2, state.getPotentialEnergy(), TOL); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + CustomHbondForce* force = new CustomHbondForce("1+none"); + force->addDonor(0, -1, -1); + force->addAcceptor(1, -1, -1); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testHbond(); + testExclusions(); + testCutoff(); + testCustomFunctions(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestCustomIntegrator.h b/tests/TestCustomIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..1ca894d2e936c7dc88079a35346a18cbe5f6c885 --- /dev/null +++ b/tests/TestCustomIntegrator.h @@ -0,0 +1,798 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/AndersenThermostat.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/CustomIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +/** + * Test a simple leapfrog integrator on a single bond. + */ +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + const double dt = 0.01; + CustomIntegrator integrator(dt); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.setKineticEnergyExpression("m*v1*v1/2; v1=v+0.5*dt*f/m"); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + vector velocities(2); + velocities[0] = Vec3(-0.5*dt*0.5*0.5, 0, 0); + velocities[1] = Vec3(0.5*dt*0.5*0.5, 0, 0); + context.setVelocities(velocities); + + // This is simply a harmonic oscillator, so compare it to the analytical solution. + + const double freq = 1.0;; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Velocities | State::Energy); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::cos(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 1e-4); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 1e-4); + double expectedSpeed = -0.5*freq*std::sin(freq*(time-dt/2)); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 1e-4); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 1e-4); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(0.5*0.5*0.5, energy, 1e-4); + integrator.step(1); + } +} + +/** + * Test an integrator that enforces constraints. + */ +void testConstraints() { + const int numParticles = 8; + const double temp = 500.0; + System system; + CustomIntegrator integrator(0.002); + integrator.addPerDofVariable("oldx", 0); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("oldx", "x"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.addConstrainPositions(); + integrator.addComputePerDof("v", "(x-oldx)/dt"); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i%2 == 0 ? 5.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + for (int i = 0; i < numParticles-1; ++i) + system.addConstraint(i, i+1, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Energy); + for (int j = 0; j < system.getNumConstraints(); ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 2e-5); + } + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } +} + +/** + * Test an integrator that applies constraints directly to velocities. + */ +void testVelocityConstraints() { + const int numParticles = 10; + System system; + CustomIntegrator integrator(0.002); + integrator.addPerDofVariable("x1", 0); + integrator.addComputePerDof("v", "v+0.5*dt*f/m"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.addComputePerDof("x1", "x"); + integrator.addConstrainPositions(); + integrator.addComputePerDof("v", "v+0.5*dt*f/m+(x-x1)/dt"); + integrator.addConstrainVelocities(); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i%2 == 0 ? 5.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + + // Constrain the first three particles with SHAKE. + + system.addConstraint(0, 1, 1.0); + system.addConstraint(1, 2, 1.0); + + // Constrain the next three with SETTLE. + + system.addConstraint(3, 4, 1.0); + system.addConstraint(5, 4, 1.0); + system.addConstraint(3, 5, sqrt(2.0)); + + // Constraint the rest with CCMA. + + for (int i = 6; i < numParticles-1; ++i) + system.addConstraint(i, i+1, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + integrator.step(2); + State state = context.getState(State::Positions | State::Velocities | State::Energy); + for (int j = 0; j < system.getNumConstraints(); ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 2e-5); + if (i > 0) { + Vec3 v1 = state.getVelocities()[particle1]; + Vec3 v2 = state.getVelocities()[particle2]; + double vel = (v1-v2).dot(p1-p2); + ASSERT_EQUAL_TOL(0.0, vel, 2e-5); + } + } + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + if (i == 0) + initialEnergy = energy; + else if (i > 0) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + } +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + CustomIntegrator integrator(0.002); + integrator.addPerDofVariable("oldx", 0); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("oldx", "x"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.addConstrainPositions(); + integrator.addComputePerDof("v", "(x-oldx)/dt"); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities | State::Positions); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +/** + * Test an integrator with an AndersenThermostat to see if updateContextState() + * is being handled correctly. + */ +void testWithThermostat() { + const int numParticles = 8; + const double temp = 100.0; + const double collisionFreq = 10.0; + const int numSteps = 5000; + System system; + CustomIntegrator integrator(0.003); + integrator.addUpdateContextState(); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("x", "x+dt*v"); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + AndersenThermostat* thermostat = new AndersenThermostat(temp, collisionFreq); + system.addForce(thermostat); + Context context(system, integrator, platform); + vector positions(numParticles); + for (int i = 0; i < numParticles; ++i) + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < numSteps; ++i) { + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + integrator.step(10); + } + ke /= numSteps; + double expected = 0.5*numParticles*3*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); +} + +/** + * Test a Monte Carlo integrator that uses global variables and depends on energy. + */ +void testMonteCarlo() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + CustomIntegrator integrator(0.1); + const double kT = BOLTZ*300.0; + integrator.addGlobalVariable("kT", kT); + integrator.addGlobalVariable("oldE", 0); + integrator.addGlobalVariable("accept", 0); + integrator.addPerDofVariable("oldx", 0); + integrator.addComputeGlobal("oldE", "energy"); + integrator.addComputePerDof("oldx", "x"); + integrator.addComputePerDof("x", "x+dt*gaussian"); + integrator.addComputeGlobal("accept", "step(exp((oldE-energy)/kT)-uniform)"); + integrator.addComputePerDof("x", "select(accept, x, oldx)"); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 2.0, 10.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // Compute the histogram of distances and see if it satisfies a Boltzmann distribution. + + const int numBins = 100; + const double maxDist = 4.0; + const int numIterations = 5000; + vector counts(numBins, 0); + for (int i = 0; i < numIterations; ++i) { + integrator.step(10); + State state = context.getState(State::Positions); + Vec3 delta = state.getPositions()[0]-state.getPositions()[1]; + double dist = sqrt(delta.dot(delta)); + if (dist < maxDist) + counts[(int) (numBins*dist/maxDist)]++; + } + vector expected(numBins, 0); + double sum = 0; + for (int i = 0; i < numBins; i++) { + double dist = (i+0.5)*maxDist/numBins; + expected[i] = dist*dist*exp(-5.0*(dist-2)*(dist-2)/kT); + sum += expected[i]; + } + for (int i = 0; i < numBins; i++) + ASSERT_USUALLY_EQUAL_TOL((double) counts[i]/numIterations, expected[i]/sum, 0.01); +} + +/** + * Test the ComputeSum operation. + */ +void testSum() { + const int numParticles = 200; + const double boxSize = 10; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + NonbondedForce* nb = new NonbondedForce(); + system.addForce(nb); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) { + system.addParticle(i%10 == 0 ? 0.0 : 1.5); + nb->addParticle(i%2 == 0 ? 0.1 : -0.1, 0.1, 1); + bool close = true; + while (close) { + positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + close = false; + for (int j = 0; j < i; ++j) { + Vec3 delta = positions[i]-positions[j]; + if (delta.dot(delta) < 1) + close = true; + } + } + } + CustomIntegrator integrator(0.005); + integrator.addGlobalVariable("ke", 0); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.addComputeSum("ke", "m*v*v/2"); + Context context(system, integrator, platform); + context.setPositions(positions); + + // See if the sum is being computed correctly. + + for (int i = 0; i < 100; ++i) { + State state = context.getState(State::Energy); + ASSERT_EQUAL_TOL(state.getKineticEnergy(), integrator.getGlobalVariable(0), 1e-5); + integrator.step(1); + } +} + +/** + * Test an integrator that both uses and modifies a context parameter. + */ +void testParameter() { + System system; + system.addParticle(1.0); + AndersenThermostat* thermostat = new AndersenThermostat(0.1, 0.1); + system.addForce(thermostat); + CustomIntegrator integrator(0.1); + integrator.addGlobalVariable("temp", 0); + integrator.addComputeGlobal("temp", "AndersenTemperature"); + integrator.addComputeGlobal("AndersenTemperature", "temp*2"); + Context context(system, integrator, platform); + + // See if the parameter is being used correctly. + + for (int i = 0; i < 10; i++) { + integrator.step(1); + ASSERT_EQUAL_TOL(context.getParameter("AndersenTemperature"), 0.1*(1<<(i+1)), 1e-10); + } +} + +/** + * Test random number distributions. + */ +void testRandomDistributions() { + const int numParticles = 100; + const int numBins = 20; + const int numSteps = 100; + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + CustomIntegrator integrator(0.1); + integrator.addPerDofVariable("a", 0); + integrator.addPerDofVariable("b", 0); + integrator.addComputePerDof("a", "uniform"); + integrator.addComputePerDof("b", "gaussian"); + Context context(system, integrator, platform); + + // See if the random numbers are distributed correctly. + + vector bins(numBins); + double mean = 0.0; + double var = 0.0; + double skew = 0.0; + double kurtosis = 0.0; + vector values; + for (int i = 0; i < numSteps; i++) { + integrator.step(1); + integrator.getPerDofVariable(0, values); + for (int i = 0; i < numParticles; i++) + for (int j = 0; j < 3; j++) { + double v = values[i][j]; + ASSERT(v >= 0 && v < 1); + bins[(int) (v*numBins)]++; + } + integrator.getPerDofVariable(1, values); + for (int i = 0; i < numParticles; i++) + for (int j = 0; j < 3; j++) { + double v = values[i][j]; + mean += v; + var += v*v; + skew += v*v*v; + kurtosis += v*v*v*v; + } + } + + // Check the distribution of uniform randoms. + + int numValues = numParticles*numSteps*3; + double expected = numValues/(double) numBins; + double tol = 4*sqrt(expected); + for (int i = 0; i < numBins; i++) + ASSERT(bins[i] >= expected-tol && bins[i] <= expected+tol); + + // Check the distribution of gaussian randoms. + + mean /= numValues; + var /= numValues; + skew /= numValues; + kurtosis /= numValues; + double c2 = var-mean*mean; + double c3 = skew-3*var*mean+2*mean*mean*mean; + double c4 = kurtosis-4*skew*mean-3*var*var+12*var*mean*mean-6*mean*mean*mean*mean; + ASSERT_EQUAL_TOL(0.0, mean, 3.0/sqrt((double) numValues)); + ASSERT_EQUAL_TOL(1.0, c2, 3.0/pow(numValues, 1.0/3.0)); + ASSERT_EQUAL_TOL(0.0, c3, 3.0/pow(numValues, 1.0/4.0)); + ASSERT_EQUAL_TOL(0.0, c4, 3.0/pow(numValues, 1.0/4.0)); +} + +/** + * Test getting and setting per-DOF variables. + */ +void testPerDofVariables() { + const int numParticles = 200; + const double boxSize = 10; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + NonbondedForce* nb = new NonbondedForce(); + system.addForce(nb); + nb->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.5); + nb->addParticle(i%2 == 0 ? 1 : -1, 0.1, 1); + bool close = true; + while (close) { + positions[i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + close = false; + for (int j = 0; j < i; ++j) { + Vec3 delta = positions[i]-positions[j]; + if (delta.dot(delta) < 0.1) + close = true; + } + } + } + CustomIntegrator integrator(0.01); + integrator.addPerDofVariable("temp", 0); + integrator.addPerDofVariable("pos", 0); + integrator.addComputePerDof("v", "v+dt*f/m"); + integrator.addComputePerDof("x", "x+dt*v"); + integrator.addComputePerDof("pos", "x"); + Context context(system, integrator, platform); + context.setPositions(positions); + vector initialValues(numParticles); + for (int i = 0; i < numParticles; i++) + initialValues[i] = Vec3(i+0.1, i+0.2, i+0.3); + integrator.setPerDofVariable(0, initialValues); + + // Run a simulation, then query per-DOF values and see if they are correct. + + vector values; + for (int i = 0; i < 100; ++i) { + integrator.step(1); + State state = context.getState(State::Positions); + integrator.getPerDofVariable(0, values); + for (int j = 0; j < numParticles; j++) + ASSERT_EQUAL_VEC(initialValues[j], values[j], 1e-5); + integrator.getPerDofVariable(1, values); + for (int j = 0; j < numParticles; j++) + ASSERT_EQUAL_VEC(state.getPositions()[j], values[j], 1e-5); + } +} + +/** + * Test evaluating force groups separately. + */ +void testForceGroups() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + CustomIntegrator integrator(0.01); + integrator.addPerDofVariable("outf", 0); + integrator.addPerDofVariable("outf1", 0); + integrator.addPerDofVariable("outf2", 0); + integrator.addGlobalVariable("oute", 0); + integrator.addGlobalVariable("oute1", 0); + integrator.addGlobalVariable("oute2", 0); + integrator.addComputePerDof("outf", "f"); + integrator.addComputePerDof("outf1", "f1"); + integrator.addComputePerDof("outf2", "f2"); + integrator.addComputeGlobal("oute", "energy"); + integrator.addComputeGlobal("oute1", "energy1"); + integrator.addComputeGlobal("oute2", "energy2"); + HarmonicBondForce* bonds = new HarmonicBondForce(); + bonds->addBond(0, 1, 1.5, 1.1); + bonds->setForceGroup(1); + system.addForce(bonds); + NonbondedForce* nb = new NonbondedForce(); + nb->addParticle(0.2, 1, 0); + nb->addParticle(0.2, 1, 0); + nb->setForceGroup(2); + system.addForce(nb); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // See if the various forces are computed correctly. + + integrator.step(1); + vector f, f1, f2; + double e1 = 0.5*1.1*0.5*0.5; + double e2 = 138.935456*0.2*0.2/2.0; + integrator.getPerDofVariable(0, f); + integrator.getPerDofVariable(1, f1); + integrator.getPerDofVariable(2, f2); + ASSERT_EQUAL_VEC(Vec3(1.1*0.5, 0, 0), f1[0], 1e-5); + ASSERT_EQUAL_VEC(Vec3(-1.1*0.5, 0, 0), f1[1], 1e-5); + ASSERT_EQUAL_VEC(Vec3(-138.935456*0.2*0.2/4.0, 0, 0), f2[0], 1e-5); + ASSERT_EQUAL_VEC(Vec3(138.935456*0.2*0.2/4.0, 0, 0), f2[1], 1e-5); + ASSERT_EQUAL_VEC(f1[0]+f2[0], f[0], 1e-5); + ASSERT_EQUAL_VEC(f1[1]+f2[1], f[1], 1e-5); + ASSERT_EQUAL_TOL(e1, integrator.getGlobalVariable(1), 1e-5); + ASSERT_EQUAL_TOL(e2, integrator.getGlobalVariable(2), 1e-5); + ASSERT_EQUAL_TOL(e1+e2, integrator.getGlobalVariable(0), 1e-5); + + // Make sure they also match the values returned by the Context. + + State s = context.getState(State::Forces | State::Energy, false); + State s1 = context.getState(State::Forces | State::Energy, false, 2); + State s2 = context.getState(State::Forces | State::Energy, false, 4); + vector c, c1, c2; + c = context.getState(State::Forces, false).getForces(); + c1 = context.getState(State::Forces, false, 2).getForces(); + c2 = context.getState(State::Forces, false, 4).getForces(); + ASSERT_EQUAL_VEC(f[0], c[0], 1e-5); + ASSERT_EQUAL_VEC(f[1], c[1], 1e-5); + ASSERT_EQUAL_VEC(f1[0], c1[0], 1e-5); + ASSERT_EQUAL_VEC(f1[1], c1[1], 1e-5); + ASSERT_EQUAL_VEC(f2[0], c2[0], 1e-5); + ASSERT_EQUAL_VEC(f2[1], c2[1], 1e-5); + ASSERT_EQUAL_TOL(s.getPotentialEnergy(), integrator.getGlobalVariable(0), 1e-5); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), integrator.getGlobalVariable(1), 1e-5); + ASSERT_EQUAL_TOL(s2.getPotentialEnergy(), integrator.getGlobalVariable(2), 1e-5); +} + +/** + * Test a multiple time step r-RESPA integrator. + */ +void testRespa() { + const int numParticles = 8; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); + CustomIntegrator integrator(0.002); + integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); + for (int i = 0; i < 2; i++) { + integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); + integrator.addComputePerDof("x", "x+(dt/2)*v"); + integrator.addComputePerDof("v", "v+0.5*(dt/2)*f0/m"); + } + integrator.addComputePerDof("v", "v+0.5*dt*f1/m"); + HarmonicBondForce* bonds = new HarmonicBondForce(); + for (int i = 0; i < numParticles-2; i++) + bonds->addBond(i, i+1, 1.0, 0.5); + system.addForce(bonds); + NonbondedForce* nb = new NonbondedForce(); + nb->setCutoffDistance(2.0); + nb->setNonbondedMethod(NonbondedForce::Ewald); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i%2 == 0 ? 5.0 : 10.0); + nb->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + nb->setForceGroup(1); + nb->setReciprocalSpaceForceGroup(0); + system.addForce(nb); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and monitor energy conservations. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Energy); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); + integrator.step(2); + } +} + +void testIfBlock() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + const double dt = 0.01; + CustomIntegrator integrator(dt); + integrator.addGlobalVariable("a", 0); + integrator.addGlobalVariable("b", 0); + integrator.addComputeGlobal("b", "1"); + integrator.beginIfBlock("a < 3.5"); + integrator.addComputeGlobal("b", "a+1"); + integrator.endBlock(); + Context context(system, integrator, platform); + + // Set "a" to 1.7 and verify that "b" gets set to a+1. + + integrator.setGlobalVariable(0, 1.7); + integrator.step(1); + ASSERT_EQUAL_TOL(2.7, integrator.getGlobalVariable(1), 1e-6); + + // Now set it to a value that should cause the block to be skipped. + + integrator.setGlobalVariable(0, 4.1); + integrator.step(1); + ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); +} + +void testWhileBlock() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + const double dt = 0.01; + CustomIntegrator integrator(dt); + integrator.addGlobalVariable("a", 0); + integrator.addGlobalVariable("b", 0); + integrator.addComputeGlobal("b", "1"); + integrator.beginWhileBlock("b <= a"); + integrator.addComputeGlobal("b", "b+1"); + integrator.endBlock(); + Context context(system, integrator, platform); + + // Try a case where the loop should be skipped. + + integrator.setGlobalVariable(0, -3.3); + integrator.step(1); + ASSERT_EQUAL_TOL(1.0, integrator.getGlobalVariable(1), 1e-6); + + // In this case it should be executed exactly once. + + integrator.setGlobalVariable(0, 1.2); + integrator.step(1); + ASSERT_EQUAL_TOL(2.0, integrator.getGlobalVariable(1), 1e-6); + + // In this case, it should be executed several times. + + integrator.setGlobalVariable(0, 5.3); + integrator.step(1); + ASSERT_EQUAL_TOL(6.0, integrator.getGlobalVariable(1), 1e-6); +} + +/** + * Test modifying a global variable, then using it in a per-DOF computation. + */ +void testChangingGlobal() { + System system; + system.addParticle(1.0); + CustomIntegrator integrator(0.1); + integrator.addGlobalVariable("g", 0); + integrator.addPerDofVariable("a", 0); + integrator.addPerDofVariable("b", 0); + integrator.addComputeGlobal("g", "g+1"); + integrator.addComputePerDof("a", "0.5"); + integrator.addComputePerDof("b", "a+g"); + Context context(system, integrator, platform); + + // See if everything is being calculated correctly.. + + for (int i = 0; i < 10; i++) { + integrator.step(1); + ASSERT_EQUAL_TOL(i+1.0, integrator.getGlobalVariable(0), 1e-5); + vector values; + integrator.getPerDofVariable(1, values); + ASSERT_EQUAL_VEC(Vec3(i+1.5, i+1.5, i+1.5), values[0], 1e-5); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testConstraints(); + testVelocityConstraints(); + testConstrainedMasslessParticles(); + testWithThermostat(); + testMonteCarlo(); + testSum(); + testParameter(); + testRandomDistributions(); + testPerDofVariables(); + testForceGroups(); + testRespa(); + testIfBlock(); + testWhileBlock(); + testChangingGlobal(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCustomManyParticleForce.h b/tests/TestCustomManyParticleForce.h new file mode 100644 index 0000000000000000000000000000000000000000..bace473e4cbe2d57d194324cbf610befb797e235 --- /dev/null +++ b/tests/TestCustomManyParticleForce.h @@ -0,0 +1,754 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2014-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomCompoundBondForce.h" +#include "openmm/CustomManyParticleForce.h" +#include "openmm/System.h" +#include "openmm/TabulatedFunction.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +Vec3 computeDelta(const Vec3& pos1, const Vec3& pos2, bool periodic, const Vec3* periodicBoxVectors) { + Vec3 diff = pos1-pos2; + if (periodic) { + diff -= periodicBoxVectors[2]*floor(diff[2]/periodicBoxVectors[2][2]+0.5); + diff -= periodicBoxVectors[1]*floor(diff[1]/periodicBoxVectors[1][1]+0.5); + diff -= periodicBoxVectors[0]*floor(diff[0]/periodicBoxVectors[0][0]+0.5); + } + return diff; +} + +void validateAxilrodTeller(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize, bool triclinic) { + // Create a System and Context. + + int numParticles = force->getNumParticles(); + CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + Vec3 boxVectors[3]; + if (triclinic) { + boxVectors[0] = Vec3(boxSize, 0, 0); + boxVectors[1] = Vec3(0.2*boxSize, boxSize, 0); + boxVectors[2] = Vec3(-0.3*boxSize, -0.1*boxSize, boxSize); + } + else { + boxVectors[0] = Vec3(boxSize, 0, 0); + boxVectors[1] = Vec3(0, boxSize, 0); + boxVectors[2] = Vec3(0, 0, boxSize); + } + system.setDefaultPeriodicBoxVectors(boxVectors[0], boxVectors[1], boxVectors[2]); + system.addForce(force); + if (force->getNonbondedMethod() == CustomManyParticleForce::CutoffPeriodic) { + ASSERT(force->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + } + else { + ASSERT(!force->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + } + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + State state1 = context.getState(State::Forces | State::Energy); + double c = context.getParameter("C"); + + // See if the energy matches the expected value. + + double expectedEnergy = 0; + bool periodic = (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic); + for (int i = 0; i < (int) expectedSets.size(); i++) { + int p1 = expectedSets[i][0]; + int p2 = expectedSets[i][1]; + int p3 = expectedSets[i][2]; + Vec3 d12 = computeDelta(positions[p2], positions[p1], periodic, boxVectors); + Vec3 d13 = computeDelta(positions[p3], positions[p1], periodic, boxVectors); + Vec3 d23 = computeDelta(positions[p3], positions[p2], periodic, boxVectors); + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + double r23 = sqrt(d23.dot(d23)); + double ctheta1 = d12.dot(d13)/(r12*r13); + double ctheta2 = -d12.dot(d23)/(r12*r23); + double ctheta3 = d13.dot(d23)/(r13*r23); + double rprod = r12*r13*r23; + expectedEnergy += c*(1+3*ctheta1*ctheta2*ctheta3)/(rprod*rprod*rprod); + } + ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + const vector& forces = state1.getForces(); + double norm = 0.0; + for (int i = 0; i < (int) forces.size(); ++i) + norm += forces[i].dot(forces[i]); + norm = std::sqrt(norm); + const double stepSize = 1e-3; + double step = 0.5*stepSize/norm; + vector positions2(numParticles), positions3(numParticles); + for (int i = 0; i < (int) positions.size(); ++i) { + Vec3 p = positions[i]; + Vec3 f = forces[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); +} + +void validateStillingerWeber(CustomManyParticleForce* force, const vector& positions, const vector& expectedSets, double boxSize) { + // Create a System and Context. + + int numParticles = force->getNumParticles(); + CustomManyParticleForce::NonbondedMethod nonbondedMethod = force->getNonbondedMethod(); + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(force); + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + State state1 = context.getState(State::Forces | State::Energy); + double L = context.getParameter("L"); + double eps = context.getParameter("eps"); + double a = context.getParameter("a"); + double gamma = context.getParameter("gamma"); + double sigma = context.getParameter("sigma"); + + // See if the energy matches the expected value. + + double expectedEnergy = 0; + for (int i = 0; i < (int) expectedSets.size(); i++) { + int p1 = expectedSets[i][0]; + int p2 = expectedSets[i][1]; + int p3 = expectedSets[i][2]; + Vec3 d12 = positions[p2]-positions[p1]; + Vec3 d13 = positions[p3]-positions[p1]; + Vec3 d23 = positions[p3]-positions[p2]; + if (nonbondedMethod == CustomManyParticleForce::CutoffPeriodic) { + for (int j = 0; j < 3; j++) { + d12[j] -= floor(d12[j]/boxSize+0.5f)*boxSize; + d13[j] -= floor(d13[j]/boxSize+0.5f)*boxSize; + d23[j] -= floor(d23[j]/boxSize+0.5f)*boxSize; + } + } + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + double r23 = sqrt(d23.dot(d23)); + double ctheta1 = d12.dot(d13)/(r12*r13); + double ctheta2 = -d12.dot(d23)/(r12*r23); + double ctheta3 = d13.dot(d23)/(r13*r23); + expectedEnergy += L*eps*(ctheta1+1.0/3.0)*(ctheta1+1.0/3.0)*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma)); + } + ASSERT_EQUAL_TOL(expectedEnergy, state1.getPotentialEnergy(), 1e-5); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + const vector& forces = state1.getForces(); + double norm = 0.0; + for (int i = 0; i < (int) forces.size(); ++i) + norm += forces[i].dot(forces[i]); + norm = std::sqrt(norm); + const double stepSize = 1e-3; + double step = 0.5*stepSize/norm; + vector positions2(numParticles), positions3(numParticles); + for (int i = 0; i < (int) positions.size(); ++i) { + Vec3 p = positions[i]; + Vec3 f = forces[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/stepSize, 1e-4); +} + +void testNoCutoff() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + int sets[4][3] = {{0,1,2}, {1,2,3}, {2,3,0}, {3,0,1}}; + vector expectedSets(&sets[0], &sets[4]); + validateAxilrodTeller(force, positions, expectedSets, 2.0, false); +} + +void testCutoff() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); + force->setCutoffDistance(1.55); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + positions.push_back(Vec3(0.2, 0.5, -0.1)); + int sets[7][3] = {{0,1,2}, {0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,2,4}, {1,3,4}}; + vector expectedSets(&sets[0], &sets[7]); + validateAxilrodTeller(force, positions, expectedSets, 2.0, false); +} + +void testPeriodic() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); + force->setCutoffDistance(1.05); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + positions.push_back(Vec3(0.2, 0.5, -0.1)); + double boxSize = 2.1; + int sets[5][3] = {{0,1,3}, {0,1,4}, {0,2,4}, {0,3,4}, {1,3,4}}; + vector expectedSets(&sets[0], &sets[5]); + validateAxilrodTeller(force, positions, expectedSets, boxSize, false); +} + +void testTriclinic() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); + force->setCutoffDistance(1.05); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + positions.push_back(Vec3(0.2, 0.5, -0.1)); + double boxSize = 2.1; + int sets[4][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {1,3,4}}; + vector expectedSets(&sets[0], &sets[4]); + validateAxilrodTeller(force, positions, expectedSets, boxSize, true); +} + +void testExclusions() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + positions.push_back(Vec3(0.2, 0.5, -0.1)); + force->addExclusion(0, 2); + force->addExclusion(0, 3); + int sets[5][3] = {{0,1,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}}; + vector expectedSets(&sets[0], &sets[5]); + validateAxilrodTeller(force, positions, expectedSets, 2.0, false); +} + +void testAllTerms() { + int numParticles = 4; + + // Create a system with a CustomManyParticleForce. + + System system1; + CustomManyParticleForce* force1 = new CustomManyParticleForce(4, + "distance(p1,p2)+angle(p1,p4,p3)+dihedral(p1,p3,p2,p4)+x1+y4+z3"); + system1.addForce(force1); + vector params; + for (int i = 0; i < numParticles; i++) { + system1.addParticle(1.0); + force1->addParticle(params, i); + } + set filter; + filter.insert(0); + force1->setTypeFilter(0, filter); + filter.clear(); + filter.insert(1); + force1->setTypeFilter(1, filter); + filter.clear(); + filter.insert(3); + force1->setTypeFilter(2, filter); + filter.clear(); + filter.insert(2); + force1->setTypeFilter(3, filter); + + // Create a system that use a CustomCompoundBondForce to compute exactly the same interactions. + + System system2; + CustomCompoundBondForce* force2 = new CustomCompoundBondForce(4, + "distance(p1,p2)+angle(p1,p3,p4)+dihedral(p1,p4,p2,p3)+x1+y3+z4"); + system2.addForce(force2); + vector particles; + particles.push_back(0); + particles.push_back(1); + particles.push_back(2); + particles.push_back(3); + force2->addBond(particles, params); + for (int i = 0; i < numParticles; i++) + system2.addParticle(1.0); + + // Create contexts for both of them. + + vector positions; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) + positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); + VerletIntegrator integrator1(0.001); + VerletIntegrator integrator2(0.001); + Context context1(system1, integrator1, platform); + Context context2(system2, integrator2, platform); + context1.setPositions(positions); + context2.setPositions(positions); + + // See if they produce identical forces and energies. + + State state1 = context1.getState(State::Forces | State::Energy); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state2.getPotentialEnergy(), state1.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state2.getForces()[i], state1.getForces()[i], 1e-4); +} + +void testParameters() { + // Create a system. + + int numParticles = 5; + System system; + CustomManyParticleForce* force = new CustomManyParticleForce(3, "C*scale1*scale2*scale3*(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))"); + force->addGlobalParameter("C", 2.0); + force->addPerParticleParameter("scale"); + vector params(1); + vector positions; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; i++) { + params[0] = i+1; + force->addParticle(params); + positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); + system.addParticle(1.0); + } + system.addForce(force); + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + + // See if the energy is correct. + + State state = context.getState(State::Energy); + double expectedEnergy = 0; + for (int i = 0; i < numParticles; i++) + for (int j = i+1; j < numParticles; j++) + for (int k = j+1; k < numParticles; k++) { + Vec3 d12 = positions[j]-positions[i]; + Vec3 d13 = positions[k]-positions[i]; + Vec3 d23 = positions[k]-positions[j]; + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + double r23 = sqrt(d23.dot(d23)); + expectedEnergy += 2.0*(i+1)*(j+1)*(k+1)*(r12+r13+r23); + } + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); + + // Modify the parameters. + + context.setParameter("C", 3.5); + for (int i = 0; i < numParticles; i++) { + params[0] = 0.5*i-0.1; + force->setParticleParameters(i, params, 0); + } + force->updateParametersInContext(context); + + // See if the energy is still correct. + + state = context.getState(State::Energy); + expectedEnergy = 0; + for (int i = 0; i < numParticles; i++) + for (int j = i+1; j < numParticles; j++) + for (int k = j+1; k < numParticles; k++) { + Vec3 d12 = positions[j]-positions[i]; + Vec3 d13 = positions[k]-positions[i]; + Vec3 d23 = positions[k]-positions[j]; + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + double r23 = sqrt(d23.dot(d23)); + expectedEnergy += 3.5*(0.5*i-0.1)*(0.5*j-0.1)*(0.5*k-0.1)*(r12+r13+r23); + } + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); +} + +void testTabulatedFunctions() { + int numParticles = 5; + + // Create two tabulated functions. + + vector values; + values.push_back(0.0); + values.push_back(50.0); + Continuous1DFunction* f1 = new Continuous1DFunction(values, 0, 100); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector c(numParticles); + for (int i = 0; i < numParticles; i++) + c[i] = genrand_real2(sfmt); + values.resize(numParticles*numParticles*numParticles); + for (int i = 0; i < numParticles; i++) + for (int j = 0; j < numParticles; j++) + for (int k = 0; k < numParticles; k++) + values[i+numParticles*j+numParticles*numParticles*k] = c[i]+c[j]+c[k]; + Discrete3DFunction* f2 = new Discrete3DFunction(numParticles, numParticles, numParticles, values); + + // Create a system. + + System system; + CustomManyParticleForce* force = new CustomManyParticleForce(3, "f1(distance(p1,p2)+distance(p2,p3)+distance(p1,p3))*f2(atom1, atom2, atom3)"); + force->addPerParticleParameter("atom"); + force->addTabulatedFunction("f1", f1); + force->addTabulatedFunction("f2", f2); + vector params(1); + vector positions; + for (int i = 0; i < numParticles; i++) { + params[0] = i; + force->addParticle(params); + positions.push_back(Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))); + system.addParticle(1.0); + } + system.addForce(force); + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + + // See if the energy is correct. + + State state = context.getState(State::Energy); + double expectedEnergy = 0; + for (int i = 0; i < numParticles; i++) + for (int j = i+1; j < numParticles; j++) + for (int k = j+1; k < numParticles; k++) { + Vec3 d12 = positions[j]-positions[i]; + Vec3 d13 = positions[k]-positions[i]; + Vec3 d23 = positions[k]-positions[j]; + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + double r23 = sqrt(d23.dot(d23)); + expectedEnergy += 0.5*(r12+r13+r23)*(c[i]+c[j]+c[k]); + } + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); +} + +void testTypeFilters() { + // Create a system. + + System system; + for (int i = 0; i < 5; i++) + system.addParticle(1.0); + CustomManyParticleForce* force = new CustomManyParticleForce(3, "c1*(distance(p1,p2)+distance(p1,p3))"); + force->addPerParticleParameter("c"); + double c[] = {1.0, 2.0, 1.3, 1.5, -2.1}; + int type[] = {0, 1, 0, 1, 5}; + vector params(1); + for (int i = 0; i < 5; i++) { + params[0] = c[i]; + force->addParticle(params, type[i]); + } + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(1, 0, 0)); + positions.push_back(Vec3(0, 1.1, 0.3)); + positions.push_back(Vec3(0.4, 0, -0.8)); + positions.push_back(Vec3(0.2, 0.5, -0.1)); + set f1, f2; + f1.insert(0); + f2.insert(1); + f2.insert(5); + force->setTypeFilter(0, f1); + force->setTypeFilter(1, f2); + force->setTypeFilter(2, f2); + system.addForce(force); + VerletIntegrator integrator(0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + + // See if the energy is correct. + + State state = context.getState(State::Energy); + double expectedEnergy = 0; + int sets[6][3] = {{0,1,3}, {0,1,4}, {0,3,4}, {2,1,3}, {2,1,4}, {2,3,4}}; + for (int i = 0; i < 6; i++) { + int p1 = sets[i][0]; + int p2 = sets[i][1]; + int p3 = sets[i][2]; + Vec3 d12 = positions[p2]-positions[p1]; + Vec3 d13 = positions[p3]-positions[p1]; + double r12 = sqrt(d12.dot(d12)); + double r13 = sqrt(d13.dot(d13)); + expectedEnergy += c[p1]*(r12+r13); + } + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-5); +} + +void testLargeSystem() { + int gridSize = 8; + int numParticles = gridSize*gridSize*gridSize; + double boxSize = 3.0; + double spacing = boxSize/gridSize; + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=angle(p1,p2,p3); theta2=angle(p2,p3,p1); theta3=angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)"); + force->addGlobalParameter("C", 1.5); + force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); + force->setCutoffDistance(0.6); + vector params; + vector positions; + System system; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < gridSize; i++) + for (int j = 0; j < gridSize; j++) + for (int k = 0; k < gridSize; k++) { + force->addParticle(params); + positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); + system.addParticle(1.0); + } + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(force); + VerletIntegrator integrator1(0.001); + VerletIntegrator integrator2(0.001); + Context context1(system, integrator1, Platform::getPlatformByName("Reference")); + Context context2(system, integrator2, platform); + context1.setPositions(positions); + context2.setPositions(positions); + State state1 = context1.getState(State::Forces | State::Energy); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); +} + +void testCentralParticleModeNoCutoff() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" + "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); + force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); + force->addGlobalParameter("L", 23.13); + force->addGlobalParameter("eps", 25.894776); + force->addGlobalParameter("a", 1.8); + force->addGlobalParameter("sigma", 0.23925); + force->addGlobalParameter("gamma", 1.2); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(0.1, 0, 0)); + positions.push_back(Vec3(0, 0.11, 0.03)); + positions.push_back(Vec3(0.04, 0, -0.08)); + int sets[12][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {2,0,3}, {2, 1, 3}, {3,0,1}, {3,0,2}, {3,1,2}}; + vector expectedSets(&sets[0], &sets[12]); + validateStillingerWeber(force, positions, expectedSets, 2.0); +} + +void testCentralParticleModeCutoff() { + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" + "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); + force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); + force->addGlobalParameter("L", 23.13); + force->addGlobalParameter("eps", 25.894776); + force->addGlobalParameter("a", 1.8); + force->addGlobalParameter("sigma", 0.23925); + force->addGlobalParameter("gamma", 1.2); + force->setNonbondedMethod(CustomManyParticleForce::CutoffNonPeriodic); + force->setCutoffDistance(0.155); + vector params; + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + force->addParticle(params); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(0.1, 0, 0)); + positions.push_back(Vec3(0, 0.11, 0.03)); + positions.push_back(Vec3(0.04, 0, -0.08)); + int sets[8][3] = {{0,1,2}, {0,1,3}, {0,2,3}, {1,0,2}, {1,0,3}, {1, 2, 3}, {2,0,1}, {3,0,1}}; + vector expectedSets(&sets[0], &sets[8]); + validateStillingerWeber(force, positions, expectedSets, 2.0); +} + +void testCentralParticleModeLargeSystem() { + int gridSize = 8; + int numParticles = gridSize*gridSize*gridSize; + double boxSize = 2.0; + double spacing = boxSize/gridSize; + CustomManyParticleForce* force = new CustomManyParticleForce(3, + "L*eps*(cos(theta1)+1/3)^2*exp(sigma*gamma/(r12-a*sigma))*exp(sigma*gamma/(r13-a*sigma));" + "r12 = distance(p1,p2); r13 = distance(p1,p3); theta1 = angle(p3,p1,p2)"); + force->setPermutationMode(CustomManyParticleForce::UniqueCentralParticle); + force->addGlobalParameter("L", 23.13); + force->addGlobalParameter("eps", 25.894776); + force->addGlobalParameter("a", 1.8); + force->addGlobalParameter("sigma", 0.23925); + force->addGlobalParameter("gamma", 1.2); + force->setNonbondedMethod(CustomManyParticleForce::CutoffPeriodic); + force->setCutoffDistance(1.8*0.23925); + vector params; + vector positions; + System system; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < gridSize; i++) + for (int j = 0; j < gridSize; j++) + for (int k = 0; k < gridSize; k++) { + force->addParticle(params); + positions.push_back(Vec3((i+0.4*genrand_real2(sfmt))*spacing, (j+0.4*genrand_real2(sfmt))*spacing, (k+0.4*genrand_real2(sfmt))*spacing)); + system.addParticle(1.0); + } + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(force); + VerletIntegrator integrator1(0.001); + VerletIntegrator integrator2(0.001); + Context context1(system, integrator1, Platform::getPlatformByName("Reference")); + Context context2(system, integrator2, platform); + context1.setPositions(positions); + context2.setPositions(positions); + State state1 = context1.getState(State::Forces | State::Energy); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + CustomManyParticleForce* force = new CustomManyParticleForce(2, "x1+y2+none"); + force->addParticle(); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testNoCutoff(); + testCutoff(); + testPeriodic(); + testTriclinic(); + testExclusions(); + testAllTerms(); + testParameters(); + testTabulatedFunctions(); + testTypeFilters(); + testLargeSystem(); + testCentralParticleModeNoCutoff(); + testCentralParticleModeCutoff(); + testCentralParticleModeLargeSystem(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCustomNonbondedForce.h b/tests/TestCustomNonbondedForce.h new file mode 100644 index 0000000000000000000000000000000000000000..1c20c7c2784e34d7a99d05031c96c25fead9d2a9 --- /dev/null +++ b/tests/TestCustomNonbondedForce.h @@ -0,0 +1,1046 @@ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "openmm/internal/AssertionUtilities.h" +#include "sfmt/SFMT.h" +#include "openmm/Context.h" +#include "openmm/CustomNonbondedForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include +#include +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSimpleExpression() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("-0.1*r^3"); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double force = 0.1*3*(2*2); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(-0.1*(2*2*2), state.getPotentialEnergy(), TOL); +} + +void testParameters() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("scale*a*(r*b)^3; a=a1*a2; b=c+b1+b2"); + forceField->addPerParticleParameter("a"); + forceField->addPerParticleParameter("b"); + forceField->addGlobalParameter("scale", 3.0); + forceField->addGlobalParameter("c", -1.0); + vector params(2); + params[0] = 1.5; + params[1] = 2.0; + forceField->addParticle(params); + params[0] = 2.0; + params[1] = 3.0; + forceField->addParticle(params); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + context.setPositions(positions); + context.setParameter("scale", 1.0); + context.setParameter("c", 0.0); + State state = context.getState(State::Forces | State::Energy); + vector forces = state.getForces(); + double force = -3.0*3*5.0*(10*10); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(3.0*(10*10*10), state.getPotentialEnergy(), TOL); + + // Try changing the global parameters and make sure it's still correct. + + context.setParameter("scale", 1.5); + context.setParameter("c", 1.0); + state = context.getState(State::Forces | State::Energy); + forces = state.getForces(); + force = -1.5*3.0*3*6.0*(12*12); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(1.5*3.0*(12*12*12), state.getPotentialEnergy(), TOL); + + // Try changing the per-particle parameters and make sure it's still correct. + + params[0] = 1.6; + params[1] = 2.1; + forceField->setParticleParameters(0, params); + params[0] = 1.9; + params[1] = 2.8; + forceField->setParticleParameters(1, params); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + forces = state.getForces(); + force = -1.5*1.6*1.9*3*5.9*(11.8*11.8); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(1.5*1.6*1.9*(11.8*11.8*11.8), state.getPotentialEnergy(), TOL); +} + +void testManyParameters() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("(a1*a2+b1*b2+c1*c2+d1*d2+e1*e2)*r"); + forceField->addPerParticleParameter("a"); + forceField->addPerParticleParameter("b"); + forceField->addPerParticleParameter("c"); + forceField->addPerParticleParameter("d"); + forceField->addPerParticleParameter("e"); + vector params(5); + params[0] = 1.0; + params[1] = 2.0; + params[2] = 3.0; + params[3] = 4.0; + params[4] = 5.0; + forceField->addParticle(params); + params[0] = 1.1; + params[1] = 1.2; + params[2] = 1.3; + params[3] = 1.4; + params[4] = 1.5; + forceField->addParticle(params); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + vector forces = state.getForces(); + double force = 1*1.1 + 2*1.2 + 3*1.3 + 4*1.4 + 5*1.5; + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(2*force, state.getPotentialEnergy(), TOL); +} + +void testExclusions() { + System system; + VerletIntegrator integrator(0.01); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("a*r; a=a1+a2"); + nonbonded->addPerParticleParameter("a"); + vector params(1); + vector positions(4); + for (int i = 0; i < 4; i++) { + system.addParticle(1.0); + params[0] = i+1; + nonbonded->addParticle(params); + positions[i] = Vec3(i, 0, 0); + } + nonbonded->addExclusion(0, 1); + nonbonded->addExclusion(1, 2); + nonbonded->addExclusion(2, 3); + nonbonded->addExclusion(0, 2); + nonbonded->addExclusion(1, 3); + system.addForce(nonbonded); + Context context(system, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(1+4, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); + ASSERT_EQUAL_VEC(Vec3(-(1+4), 0, 0), forces[3], TOL); + ASSERT_EQUAL_TOL((1+4)*3.0, state.getPotentialEnergy(), TOL); +} + +void testCutoff() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + forceField->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); + forceField->setCutoffDistance(2.5); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2, 0); + positions[2] = Vec3(0, 3, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, 1, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -1, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(2.0+1.0, state.getPotentialEnergy(), TOL); +} + +void testPeriodic() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("r"); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + forceField->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); + forceField->setCutoffDistance(2.0); + system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); + system.addForce(forceField); + ASSERT(forceField->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2.1, 0); + positions[2] = Vec3(0, 3, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, -2, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 2, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(1.9+1+0.9, state.getPotentialEnergy(), TOL); +} + +void testTriclinic() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + Vec3 a(3.1, 0, 0); + Vec3 b(0.4, 3.5, 0); + Vec3 c(-0.1, -0.5, 4.0); + system.setDefaultPeriodicBoxVectors(a, b, c); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("r"); + nonbonded->addParticle(vector()); + nonbonded->addParticle(vector()); + nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); + const double cutoff = 1.5; + nonbonded->setCutoffDistance(cutoff); + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(2); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int iteration = 0; iteration < 50; iteration++) { + // Generate random positions for the two particles. + + positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); + positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); + context.setPositions(positions); + + // Loop over all possible periodic copies and find the nearest one. + + Vec3 delta; + double distance2 = 100.0; + for (int i = -1; i < 2; i++) + for (int j = -1; j < 2; j++) + for (int k = -1; k < 2; k++) { + Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; + if (d.dot(d) < distance2) { + delta = d; + distance2 = d.dot(d); + } + } + double distance = sqrt(distance2); + + // See if the force and energy are correct. + + State state = context.getState(State::Forces | State::Energy); + if (distance >= cutoff) { + ASSERT_EQUAL(0.0, state.getPotentialEnergy()); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); + } + else { + const Vec3 force = delta/sqrt(delta.dot(delta)); + ASSERT_EQUAL_TOL(distance, state.getPotentialEnergy(), TOL); + ASSERT_EQUAL_VEC(force, state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(-force, state.getForces()[1], TOL); + } + } +} + +void testContinuous1DFunction() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r)+1"); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table; + for (int i = 0; i < 21; i++) + table.push_back(sin(0.25*i)); + forceField->addTabulatedFunction("fn", new Continuous1DFunction(table, 1.0, 6.0)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 1; i < 30; i++) { + double x = (7.0/30.0)*i; + positions[1] = Vec3(x, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double force = (x < 1.0 || x > 6.0 ? 0.0 : -cos(x-1.0)); + double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); + } + for (int i = 1; i < 20; i++) { + double x = 0.25*i+1.0; + positions[1] = Vec3(x, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Energy); + double energy = (x < 1.0 || x > 6.0 ? 0.0 : sin(x-1.0))+1.0; + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 1e-4); + } +} + +void testContinuous2DFunction() { + const int xsize = 20; + const int ysize = 21; + const double xmin = 0.4; + const double xmax = 1.5; + const double ymin = 0.0; + const double ymax = 2.1; + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a)+1"); + forceField->addGlobalParameter("a", 0.0); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table(xsize*ysize); + for (int i = 0; i < xsize; i++) { + for (int j = 0; j < ysize; j++) { + double x = xmin + i*(xmax-xmin)/xsize; + double y = ymin + j*(ymax-ymin)/ysize; + table[i+xsize*j] = sin(0.25*x)*cos(0.33*y); + } + } + forceField->addTabulatedFunction("fn", new Continuous2DFunction(xsize, ysize, table, xmin, xmax, ymin, ymax)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { + for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { + positions[1] = Vec3(x, 0, 0); + context.setParameter("a", y); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double energy = 1; + double force = 0; + if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) { + energy = sin(0.25*x)*cos(0.33*y)+1.0; + force = -0.25*cos(0.25*x)*cos(0.33*y); + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.02); + } + } +} + +void testContinuous3DFunction() { + const int xsize = 10; + const int ysize = 11; + const int zsize = 12; + const double xmin = 0.6; + const double xmax = 1.1; + const double ymin = 0.0; + const double ymax = 0.7; + const double zmin = 0.2; + const double zmax = 0.9; + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r,a,b)+1"); + forceField->addGlobalParameter("a", 0.0); + forceField->addGlobalParameter("b", 0.0); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table(xsize*ysize*zsize); + for (int i = 0; i < xsize; i++) { + for (int j = 0; j < ysize; j++) { + for (int k = 0; k < zsize; k++) { + double x = xmin + i*(xmax-xmin)/xsize; + double y = ymin + j*(ymax-ymin)/ysize; + double z = zmin + k*(zmax-zmin)/zsize; + table[i+xsize*j+xsize*ysize*k] = sin(0.25*x)*cos(0.33*y)*(1+z); + } + } + } + forceField->addTabulatedFunction("fn", new Continuous3DFunction(xsize, ysize, zsize, table, xmin, xmax, ymin, ymax, zmin, zmax)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (double x = xmin-0.15; x < xmax+0.2; x += 0.1) { + for (double y = ymin-0.15; y < ymax+0.2; y += 0.1) { + for (double z = zmin-0.15; z < zmax+0.2; z += 0.1) { + positions[1] = Vec3(x, 0, 0); + context.setParameter("a", y); + context.setParameter("b", z); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double energy = 1; + double force = 0; + if (x >= xmin && x <= xmax && y >= ymin && y <= ymax && z >= zmin && z <= zmax) { + energy = sin(0.25*x)*cos(0.33*y)*(1.0+z)+1.0; + force = -0.25*cos(0.25*x)*cos(0.33*y)*(1.0+z); + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], 0.1); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], 0.1); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), 0.05); + } + } + } +} + +void testDiscrete1DFunction() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1)+1"); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table; + for (int i = 0; i < 21; i++) + table.push_back(sin(0.25*i)); + forceField->addTabulatedFunction("fn", new Discrete1DFunction(table)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 0; i < (int) table.size(); i++) { + positions[1] = Vec3(i+1, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); + ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); + } +} + +void testDiscrete2DFunction() { + const int xsize = 10; + const int ysize = 5; + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a)+1"); + forceField->addGlobalParameter("a", 0.0); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table; + for (int i = 0; i < xsize; i++) + for (int j = 0; j < ysize; j++) + table.push_back(sin(0.25*i)+cos(0.33*j)); + forceField->addTabulatedFunction("fn", new Discrete2DFunction(xsize, ysize, table)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 0; i < (int) table.size(); i++) { + positions[1] = Vec3((i%xsize)+1, 0, 0); + context.setPositions(positions); + context.setParameter("a", i/xsize); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); + ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); + } +} + +void testDiscrete3DFunction() { + const int xsize = 8; + const int ysize = 5; + const int zsize = 6; + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* forceField = new CustomNonbondedForce("fn(r-1,a,b)+1"); + forceField->addGlobalParameter("a", 0.0); + forceField->addGlobalParameter("b", 0.0); + forceField->addParticle(vector()); + forceField->addParticle(vector()); + vector table; + for (int i = 0; i < xsize; i++) + for (int j = 0; j < ysize; j++) + for (int k = 0; k < zsize; k++) + table.push_back(sin(0.25*i)+cos(0.33*j)+0.12345*k); + forceField->addTabulatedFunction("fn", new Discrete3DFunction(xsize, ysize, zsize, table)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + for (int i = 0; i < (int) table.size(); i++) { + positions[1] = Vec3((i%xsize)+1, 0, 0); + context.setPositions(positions); + context.setParameter("a", (i/xsize)%ysize); + context.setParameter("b", i/(xsize*ysize)); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[0], 1e-6); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[1], 1e-6); + ASSERT_EQUAL_TOL(table[i]+1.0, state.getPotentialEnergy(), 1e-6); + } +} + +void testCoulombLennardJones() { + const int numMolecules = 300; + const int numParticles = numMolecules*2; + const double boxSize = 20.0; + + // Create two systems: one with a NonbondedForce, and one using a CustomNonbondedForce to implement the same interaction. + + System standardSystem; + System customSystem; + for (int i = 0; i < numParticles; i++) { + standardSystem.addParticle(1.0); + customSystem.addParticle(1.0); + } + NonbondedForce* standardNonbonded = new NonbondedForce(); + CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); + customNonbonded->addPerParticleParameter("q"); + customNonbonded->addPerParticleParameter("sigma"); + customNonbonded->addPerParticleParameter("eps"); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + vector params(3); + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + standardNonbonded->addParticle(1.0, 0.2, 0.1); + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.1; + customNonbonded->addParticle(params); + standardNonbonded->addParticle(-1.0, 0.1, 0.1); + params[0] = -1.0; + params[1] = 0.1; + customNonbonded->addParticle(params); + } + else { + standardNonbonded->addParticle(1.0, 0.2, 0.2); + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.2; + customNonbonded->addParticle(params); + standardNonbonded->addParticle(-1.0, 0.1, 0.2); + params[0] = -1.0; + params[1] = 0.1; + customNonbonded->addParticle(params); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); + customNonbonded->addExclusion(2*i, 2*i+1); + } + standardNonbonded->setNonbondedMethod(NonbondedForce::NoCutoff); + customNonbonded->setNonbondedMethod(CustomNonbondedForce::NoCutoff); + standardSystem.addForce(standardNonbonded); + customSystem.addForce(customNonbonded); + ASSERT(!customNonbonded->usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context context1(standardSystem, integrator1, platform); + Context context2(customSystem, integrator2, platform); + context1.setPositions(positions); + context2.setPositions(positions); + context1.setVelocities(velocities); + context2.setVelocities(velocities); + State state1 = context1.getState(State::Forces | State::Energy); + State state2 = context2.getState(State::Forces | State::Energy); + ASSERT_EQUAL_TOL(state1.getPotentialEnergy(), state2.getPotentialEnergy(), 1e-4); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(state1.getForces()[i], state2.getForces()[i], 1e-4); + } +} + +void testSwitchingFunction() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("10/r^2"); + vector params; + nonbonded->addParticle(params); + nonbonded->addParticle(params); + nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); + nonbonded->setCutoffDistance(2.0); + nonbonded->setUseSwitchingFunction(true); + nonbonded->setSwitchingDistance(1.5); + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + + // Compute the interaction at various distances. + + for (double r = 1.0; r < 2.5; r += 0.1) { + positions[1] = Vec3(r, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + + // See if the energy is correct. + + double expectedEnergy = 10/(r*r); + double switchValue; + if (r <= 1.5) + switchValue = 1; + else if (r >= 2.0) + switchValue = 0; + else { + double t = (r-1.5)/0.5; + switchValue = 1+t*t*t*(-10+t*(15-t*6)); + } + ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); + + // See if the force is the gradient of the energy. + + double delta = 1e-3; + positions[1] = Vec3(r-delta, 0, 0); + context.setPositions(positions); + double e1 = context.getState(State::Energy).getPotentialEnergy(); + positions[1] = Vec3(r+delta, 0, 0); + context.setPositions(positions); + double e2 = context.getState(State::Energy).getPotentialEnergy(); + ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); + } +} + +void testLongRangeCorrection() { + // Create a box of particles. + + int gridSize = 5; + int numParticles = gridSize*gridSize*gridSize; + double boxSize = gridSize*0.7; + double cutoff = boxSize/3; + System standardSystem; + System customSystem; + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + NonbondedForce* standardNonbonded = new NonbondedForce(); + CustomNonbondedForce* customNonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6); sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); + customNonbonded->addPerParticleParameter("sigma"); + customNonbonded->addPerParticleParameter("eps"); + vector positions(numParticles); + int index = 0; + vector params1(2); + params1[0] = 1.1; + params1[1] = 0.5; + vector params2(2); + params2[0] = 1; + params2[1] = 1; + for (int i = 0; i < gridSize; i++) + for (int j = 0; j < gridSize; j++) + for (int k = 0; k < gridSize; k++) { + standardSystem.addParticle(1.0); + customSystem.addParticle(1.0); + if (index%2 == 0) { + standardNonbonded->addParticle(0, params1[0], params1[1]); + customNonbonded->addParticle(params1); + } + else { + standardNonbonded->addParticle(0, params2[0], params2[1]); + customNonbonded->addParticle(params2); + } + positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); + index++; + } + standardNonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + customNonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); + standardNonbonded->setCutoffDistance(cutoff); + customNonbonded->setCutoffDistance(cutoff); + standardSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + customSystem.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + standardNonbonded->setUseDispersionCorrection(true); + customNonbonded->setUseLongRangeCorrection(true); + standardNonbonded->setUseSwitchingFunction(true); + customNonbonded->setUseSwitchingFunction(true); + standardNonbonded->setSwitchingDistance(0.8*cutoff); + customNonbonded->setSwitchingDistance(0.8*cutoff); + standardSystem.addForce(standardNonbonded); + customSystem.addForce(customNonbonded); + + // Compute the correction for the standard force. + + Context context1(standardSystem, integrator1, platform); + context1.setPositions(positions); + double standardEnergy1 = context1.getState(State::Energy).getPotentialEnergy(); + standardNonbonded->setUseDispersionCorrection(false); + context1.reinitialize(); + context1.setPositions(positions); + double standardEnergy2 = context1.getState(State::Energy).getPotentialEnergy(); + + // Compute the correction for the custom force. + + Context context2(customSystem, integrator2, platform); + context2.setPositions(positions); + double customEnergy1 = context2.getState(State::Energy).getPotentialEnergy(); + customNonbonded->setUseLongRangeCorrection(false); + context2.reinitialize(); + context2.setPositions(positions); + double customEnergy2 = context2.getState(State::Energy).getPotentialEnergy(); + + // See if they agree. + + ASSERT_EQUAL_TOL(standardEnergy1-standardEnergy2, customEnergy1-customEnergy2, 1e-4); +} + +void testInteractionGroups() { + const int numParticles = 6; + System system; + VerletIntegrator integrator(0.01); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("v1+v2"); + nonbonded->addPerParticleParameter("v"); + vector params(1, 0.001); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + nonbonded->addParticle(params); + params[0] *= 10; + } + set set1, set2, set3, set4; + set1.insert(2); + set2.insert(0); + set2.insert(1); + set2.insert(2); + set2.insert(3); + set2.insert(4); + set2.insert(5); + nonbonded->addInteractionGroup(set1, set2); // Particle 2 interacts with every other particle. + set3.insert(0); + set3.insert(1); + set4.insert(4); + set4.insert(5); + nonbonded->addInteractionGroup(set3, set4); // Particles 0 and 1 interact with 4 and 5. + nonbonded->addExclusion(1, 2); // Add an exclusion to make sure it gets skipped. + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(numParticles); + context.setPositions(positions); + State state = context.getState(State::Energy); + double expectedEnergy = 331.423; // Each digit is the number of interactions a particle particle is involved in. + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), TOL); +} + +void testLargeInteractionGroup() { + const int numMolecules = 300; + const int numParticles = numMolecules*2; + const double boxSize = 20.0; + + // Create a large system. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("4*eps*((sigma/r)^12-(sigma/r)^6)+138.935456*q/r; q=q1*q2; sigma=0.5*(sigma1+sigma2); eps=sqrt(eps1*eps2)"); + nonbonded->addPerParticleParameter("q"); + nonbonded->addPerParticleParameter("sigma"); + nonbonded->addPerParticleParameter("eps"); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector params(3); + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.1; + nonbonded->addParticle(params); + params[0] = -1.0; + params[1] = 0.1; + nonbonded->addParticle(params); + } + else { + params[0] = 1.0; + params[1] = 0.2; + params[2] = 0.2; + nonbonded->addParticle(params); + params[0] = -1.0; + params[1] = 0.1; + nonbonded->addParticle(params); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + nonbonded->addExclusion(2*i, 2*i+1); + } + nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); + system.addForce(nonbonded); + + // Compute the forces. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + State state1 = context.getState(State::Forces); + + // Modify the force so only one particle interacts with everything else. + + set set1, set2; + set1.insert(151); + for (int i = 0; i < numParticles; i++) + set2.insert(i); + nonbonded->addInteractionGroup(set1, set2); + context.reinitialize(); + context.setPositions(positions); + State state2 = context.getState(State::Forces); + + // The force on that one particle should be the same. + + ASSERT_EQUAL_VEC(state1.getForces()[151], state2.getForces()[151], 1e-4); + + // Modify the interaction group so it includes all interactions. This should now reproduce the original forces + // on all atoms. + + for (int i = 0; i < numParticles; i++) + set1.insert(i); + nonbonded->setInteractionGroupParameters(0, set1, set2); + context.reinitialize(); + context.setPositions(positions); + State state3 = context.getState(State::Forces); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state1.getForces()[i], state3.getForces()[i], 1e-4); +} + +void testInteractionGroupLongRangeCorrection() { + const int numParticles = 10; + const double boxSize = 10.0; + const double cutoff = 0.5; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + CustomNonbondedForce* nonbonded = new CustomNonbondedForce("c1*c2*r^-4"); + nonbonded->addPerParticleParameter("c"); + vector positions(numParticles); + vector params(1); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + params[0] = (i%2 == 0 ? 1.1 : 2.0); + nonbonded->addParticle(params); + positions[i] = Vec3(0.5*i, 0, 0); + } + nonbonded->setNonbondedMethod(CustomNonbondedForce::CutoffPeriodic); + nonbonded->setCutoffDistance(cutoff); + system.addForce(nonbonded); + + // Setup nonbonded groups. They involve 1 interaction of type AA, + // 2 of type BB, and 5 of type AB. + + set set1, set2, set3, set4, set5; + set1.insert(0); + set1.insert(1); + set1.insert(2); + nonbonded->addInteractionGroup(set1, set1); + set2.insert(3); + set3.insert(4); + set3.insert(6); + set3.insert(8); + nonbonded->addInteractionGroup(set2, set3); + set4.insert(5); + set5.insert(7); + set5.insert(9); + nonbonded->addInteractionGroup(set4, set5); + + // Compute energy with and without the correction. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + double energy1 = context.getState(State::Energy).getPotentialEnergy(); + nonbonded->setUseLongRangeCorrection(true); + context.reinitialize(); + context.setPositions(positions); + double energy2 = context.getState(State::Energy).getPotentialEnergy(); + + // Check the result. + + double sum = (1.1*1.1 + 2*2.0*2.0 + 5*1.1*2.0)*2.0; + int numPairs = (numParticles*(numParticles+1))/2; + double expected = 2*M_PI*numParticles*numParticles*sum/(numPairs*boxSize*boxSize*boxSize); + ASSERT_EQUAL_TOL(expected, energy2-energy1, 1e-4); +} + +void testMultipleCutoffs() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + + // Add multiple nonbonded forces that have different cutoffs. + + CustomNonbondedForce* nonbonded1 = new CustomNonbondedForce("2*r"); + nonbonded1->addParticle(vector()); + nonbonded1->addParticle(vector()); + nonbonded1->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); + nonbonded1->setCutoffDistance(2.5); + system.addForce(nonbonded1); + CustomNonbondedForce* nonbonded2 = new CustomNonbondedForce("3*r"); + nonbonded2->addParticle(vector()); + nonbonded2->addParticle(vector()); + nonbonded2->setNonbondedMethod(CustomNonbondedForce::CutoffNonPeriodic); + nonbonded2->setCutoffDistance(2.9); + nonbonded2->setForceGroup(1); + system.addForce(nonbonded2); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 0, 0); + for (double r = 2.4; r < 3.2; r += 0.2) { + positions[1][1] = r; + context.setPositions(positions); + double e1 = (r < 2.5 ? 2.0*r : 0.0); + double e2 = (r < 2.9 ? 3.0*r : 0.0); + double f1 = (r < 2.5 ? 2.0 : 0.0); + double f2 = (r < 2.9 ? 3.0 : 0.0); + + // Check the first force. + + State state = context.getState(State::Forces | State::Energy, false, 1); + ASSERT_EQUAL_VEC(Vec3(0, f1, 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -f1, 0), state.getForces()[1], TOL); + ASSERT_EQUAL_TOL(e1, state.getPotentialEnergy(), TOL); + + // Check the second force. + + state = context.getState(State::Forces | State::Energy, false, 2); + ASSERT_EQUAL_VEC(Vec3(0, f2, 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -f2, 0), state.getForces()[1], TOL); + ASSERT_EQUAL_TOL(e2, state.getPotentialEnergy(), TOL); + + // Check the sum of both forces. + + state = context.getState(State::Forces | State::Energy); + ASSERT_EQUAL_VEC(Vec3(0, f1+f2, 0), state.getForces()[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, -f1-f2, 0), state.getForces()[1], TOL); + ASSERT_EQUAL_TOL(e1+e2, state.getPotentialEnergy(), TOL); + } +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + CustomNonbondedForce* force = new CustomNonbondedForce("r+none"); + force->addParticle(); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSimpleExpression(); + testParameters(); + testExclusions(); + testCutoff(); + testPeriodic(); + testTriclinic(); + testContinuous1DFunction(); + testContinuous2DFunction(); + testContinuous3DFunction(); + testDiscrete1DFunction(); + testDiscrete2DFunction(); + testDiscrete3DFunction(); + testCoulombLennardJones(); + testSwitchingFunction(); + testLongRangeCorrection(); + testInteractionGroups(); + testLargeInteractionGroup(); + testInteractionGroupLongRangeCorrection(); + testMultipleCutoffs(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestCustomTorsionForce.h b/tests/TestCustomTorsionForce.h new file mode 100644 index 0000000000000000000000000000000000000000..f133275d4dd3d5d490c3abf4fd78b6983dd5dd21 --- /dev/null +++ b/tests/TestCustomTorsionForce.h @@ -0,0 +1,208 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#ifdef WIN32 + #define _USE_MATH_DEFINES // Needed to get M_PI +#endif +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomTorsionForce.h" +#include "openmm/PeriodicTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testTorsions() { + // Create a system using a CustomTorsionForce. + + System customSystem; + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + customSystem.addParticle(1.0); + CustomTorsionForce* custom = new CustomTorsionForce("k*(1+cos(n*theta-theta0))"); + custom->addPerTorsionParameter("theta0"); + custom->addPerTorsionParameter("n"); + custom->addGlobalParameter("k", 0.5); + vector parameters(2); + parameters[0] = 1.5; + parameters[1] = 1; + custom->addTorsion(0, 1, 2, 3, parameters); + parameters[0] = 2.0; + parameters[1] = 2; + custom->addTorsion(1, 2, 3, 4, parameters); + customSystem.addForce(custom); + ASSERT(!custom->usesPeriodicBoundaryConditions()); + ASSERT(!customSystem.usesPeriodicBoundaryConditions()); + + // Create an identical system using a PeriodicTorsionForce. + + System harmonicSystem; + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + harmonicSystem.addParticle(1.0); + VerletIntegrator integrator(0.01); + PeriodicTorsionForce* periodic = new PeriodicTorsionForce(); + periodic->addTorsion(0, 1, 2, 3, 1, 1.5, 0.5); + periodic->addTorsion(1, 2, 3, 4, 2, 2.0, 0.5); + harmonicSystem.addForce(periodic); + + // Set the atoms in various positions, and verify that both systems give identical forces and energy. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + vector positions(5); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context c1(customSystem, integrator1, platform); + Context c2(harmonicSystem, integrator2, platform); + for (int i = 0; i < 50; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } + + // Try changing the torsion parameters and make sure it's still correct. + + parameters[0] = 1.6; + parameters[1] = 2; + custom->setTorsionParameters(0, 0, 1, 2, 3, parameters); + parameters[0] = 2.1; + parameters[1] = 3; + custom->setTorsionParameters(1, 1, 2, 3, 4, parameters); + custom->updateParametersInContext(c1); + periodic->setTorsionParameters(0, 0, 1, 2, 3, 2, 1.6, 0.5); + periodic->setTorsionParameters(1, 1, 2, 3, 4, 3, 2.1, 0.5); + periodic->updateParametersInContext(c2); + { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + c1.setPositions(positions); + c2.setPositions(positions); + State s1 = c1.getState(State::Forces | State::Energy); + State s2 = c2.getState(State::Forces | State::Energy); + const vector& forces = s1.getForces(); + for (int i = 0; i < customSystem.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], TOL); + ASSERT_EQUAL_TOL(s1.getPotentialEnergy(), s2.getPotentialEnergy(), TOL); + } +} + +void testRange() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + CustomTorsionForce* custom = new CustomTorsionForce("theta"); + custom->addTorsion(0, 1, 2, 3, vector()); + system.addForce(custom); + + // Set the atoms in various positions, and verify that the angle is always in the expected range. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector positions(4); + VerletIntegrator integrator(0.01); + double minAngle = 1000; + double maxAngle = -1000; + Context context(system, integrator, platform); + for (int i = 0; i < 100; i++) { + for (int j = 0; j < (int) positions.size(); j++) + positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt)); + context.setPositions(positions); + double angle = context.getState(State::Energy).getPotentialEnergy(); + if (angle < minAngle) + minAngle = angle; + if (angle > maxAngle) + maxAngle = angle; + } + ASSERT(minAngle >= -M_PI); + ASSERT(maxAngle <= M_PI); +} + +void testIllegalVariable() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + CustomTorsionForce* force = new CustomTorsionForce("theta+none"); + force->addTorsion(0, 1, 2, 3); + system.addForce(force); + VerletIntegrator integrator(0.001); + bool threwException = false; + try { + Context(system, integrator, platform); + } + catch (const exception& e) { + threwException = true; + } + ASSERT(threwException); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testTorsions(); + testRange(); + testIllegalVariable(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + + + diff --git a/tests/TestEwald.h b/tests/TestEwald.h new file mode 100644 index 0000000000000000000000000000000000000000..2ee8a425d4fc7566644344cff6fb6df9ee6e1ef7 --- /dev/null +++ b/tests/TestEwald.h @@ -0,0 +1,405 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "ReferencePlatform.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/VerletIntegrator.h" +#include "openmm/internal/ContextImpl.h" +#include "openmm/internal/NonbondedForceImpl.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testEwaldExact() { + +// Use a NaCl crystal to compare the calculated and Madelung energies + + const int numParticles = 1000; + const double cutoff = 1.0; + const double boxSize = 2.82; + const double ewaldTol = 1e-5; + + System system; + for (int i = 0; i < numParticles/2; i++) + system.addParticle(22.99); + for (int i = 0; i < numParticles/2; i++) + system.addParticle(35.45); + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + for (int i = 0; i < numParticles/2; i++) + nonbonded->addParticle(1.0, 1.0,0.0); + for (int i = 0; i < numParticles/2; i++) + nonbonded->addParticle(-1.0, 1.0,0.0); + nonbonded->setNonbondedMethod(NonbondedForce::Ewald); + nonbonded->setCutoffDistance(cutoff); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + nonbonded->setEwaldErrorTolerance(ewaldTol); + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(numParticles); + #include "nacl_crystal.dat" + context.setPositions(positions); + + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + +// The potential energy of an ion in a crystal is +// E = - (M*e^2/ 4*pi*epsilon0*a0), +// where +// M : Madelung constant (dimensionless, for FCC cells such as NaCl it is 1.7476) +// e : 1.6022 × 10−19 C +// 4*pi*epsilon0: 1.112 × 10−10 C²/(J m) +// a0 : 0.282 x 10-9 m (perfect cell) +// +// E is then the energy per pair of ions, so for our case +// E has to be divided by 2 (per ion), multiplied by N(avogadro), multiplied by number of particles, and divided by 1000 for kJ + double exactEnergy = - (1.7476 * 1.6022e-19 * 1.6022e-19 * 6.02214e+23 * numParticles) / (1.112e-10 * 0.282e-9 * 2 * 1000); + //cout << "exact\t\t: " << exactEnergy << endl; + //cout << "calc\t\t: " << state.getPotentialEnergy() << endl; + ASSERT_EQUAL_TOL(exactEnergy, state.getPotentialEnergy(), 100*ewaldTol); +} + +void testEwaldPME(bool includeExceptions) { + +// Use amorphous NaCl system for the tests + + const int numParticles = 894; + const double cutoff = 1.2; + const double boxSize = 3.00646; + double tol = 1e-5; + + ReferencePlatform reference; + System system; + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->setNonbondedMethod(NonbondedForce::Ewald); + nonbonded->setCutoffDistance(cutoff); + nonbonded->setEwaldErrorTolerance(tol); + + for (int i = 0; i < numParticles/2; i++) + system.addParticle(22.99); + for (int i = 0; i < numParticles/2; i++) + system.addParticle(35.45); + for (int i = 0; i < numParticles/2; i++) + nonbonded->addParticle(1.0, 1.0,0.0); + for (int i = 0; i < numParticles/2; i++) + nonbonded->addParticle(-1.0, 1.0,0.0); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(nonbonded); + + vector positions(numParticles); + #include "nacl_amorph.dat" + if (includeExceptions) { + // Add some exclusions. + + for (int i = 0; i < numParticles-1; i++) { + Vec3 delta = positions[i]-positions[i+1]; + if (sqrt(delta.dot(delta)) < 0.5*cutoff) + nonbonded->addException(i, i+1, i%2 == 0 ? 0.0 : 0.5, 1.0, 0.0); + } + } + +// (1) Check whether this matches the Reference platform when using Ewald Method + + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context context(system, integrator1, platform); + Context referenceContext(system, integrator2, reference); + context.setPositions(positions); + referenceContext.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + State referenceState = referenceContext.getState(State::Forces | State::Energy); + tol = 1e-2; + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(referenceState.getForces()[i], state.getForces()[i], tol); + } + tol = 1e-5; + ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), state.getPotentialEnergy(), tol); + if (!includeExceptions) + ASSERT_EQUAL_TOL(-3.82047e+05, state.getPotentialEnergy(), 1e-5); // Value from Gromacs + +// (2) Check whether Ewald method is self-consistent + + double norm = 0.0; + for (int i = 0; i < numParticles; ++i) { + Vec3 f = state.getForces()[i]; + norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; + } + + norm = std::sqrt(norm); + const double delta = 5e-3; + double step = delta/norm; + for (int i = 0; i < numParticles; ++i) { + Vec3 p = positions[i]; + Vec3 f = state.getForces()[i]; + positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + } + VerletIntegrator integrator3(0.01); + Context context2(system, integrator3, platform); + context2.setPositions(positions); + + tol = 1e-2; + State state2 = context2.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state.getPotentialEnergy())/delta, tol) + +// (3) Check whether this matches the Reference platform when using PME + + nonbonded->setNonbondedMethod(NonbondedForce::PME); + context.reinitialize(); + referenceContext.reinitialize(); + context.setPositions(positions); + referenceContext.setPositions(positions); + state = context.getState(State::Forces | State::Energy); + referenceState = referenceContext.getState(State::Forces | State::Energy); + tol = 1e-2; + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(referenceState.getForces()[i], state.getForces()[i], tol); + } + tol = 1e-5; + ASSERT_EQUAL_TOL(referenceState.getPotentialEnergy(), state.getPotentialEnergy(), tol); + if (!includeExceptions) + ASSERT_EQUAL_TOL(-3.82047e+05, state.getPotentialEnergy(), 1e-3); // Value from Gromacs + +// (4) Check whether PME method is self-consistent + + norm = 0.0; + for (int i = 0; i < numParticles; ++i) { + Vec3 f = state.getForces()[i]; + norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; + } + + norm = std::sqrt(norm); + step = delta/norm; + for (int i = 0; i < numParticles; ++i) { + Vec3 p = positions[i]; + Vec3 f = state.getForces()[i]; + positions[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + } + VerletIntegrator integrator4(0.01); + Context context3(system, integrator4, platform); + context3.setPositions(positions); + + tol = 1e-2; + State state3 = context3.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state3.getPotentialEnergy()-state.getPotentialEnergy())/delta, tol) +} + +void testTriclinic() { + // Create a triclinic box containing eight particles. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(2.5, 0, 0), Vec3(0.5, 3.0, 0), Vec3(0.7, 0.9, 3.5)); + for (int i = 0; i < 8; i++) + system.addParticle(1.0); + NonbondedForce* force = new NonbondedForce(); + system.addForce(force); + force->setNonbondedMethod(NonbondedForce::PME); + force->setCutoffDistance(1.0); + force->setPMEParameters(3.45891, 32, 40, 48); + for (int i = 0; i < 4; i++) + force->addParticle(-1, 0.440104, 0.4184); // Cl parameters + for (int i = 0; i < 4; i++) + force->addParticle(1, 0.332840, 0.0115897); // Na parameters + vector positions(8); + positions[0] = Vec3(1.744, 2.788, 3.162); + positions[1] = Vec3(1.048, 0.762, 2.340); + positions[2] = Vec3(2.489, 1.570, 2.817); + positions[3] = Vec3(1.027, 1.893, 3.271); + positions[4] = Vec3(0.937, 0.825, 0.009); + positions[5] = Vec3(2.290, 1.887, 3.352); + positions[6] = Vec3(1.266, 1.111, 2.894); + positions[7] = Vec3(0.933, 1.862, 3.490); + + // Compute the forces and energy. + + VerletIntegrator integ(0.001); + Context context(system, integ, platform); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + + // Compare them to values computed by Gromacs. + + double expectedEnergy = -963.370; + vector expectedForce(8); + expectedForce[0] = Vec3(4.25253e+01, -1.23503e+02, 1.22139e+02); + expectedForce[1] = Vec3(9.74752e+01, 1.68213e+02, 1.93169e+02); + expectedForce[2] = Vec3(-1.50348e+02, 1.29165e+02, 3.70435e+02); + expectedForce[3] = Vec3(9.18644e+02, -3.52571e+00, -1.34772e+03); + expectedForce[4] = Vec3(-1.61193e+02, 9.01528e+01, -7.12904e+01); + expectedForce[5] = Vec3(2.82630e+02, 2.78029e+01, -3.72864e+02); + expectedForce[6] = Vec3(-1.47454e+02, -2.14448e+02, -3.55789e+02); + expectedForce[7] = Vec3(-8.82195e+02, -7.39132e+01, 1.46202e+03); + for (int i = 0; i < 8; i++) { + ASSERT_EQUAL_VEC(expectedForce[i], state.getForces()[i], 1e-4); + } + ASSERT_EQUAL_TOL(expectedEnergy, state.getPotentialEnergy(), 1e-4); +} + +void testErrorTolerance(NonbondedForce::NonbondedMethod method) { + // Create a cloud of random point charges. + + const int numParticles = 51; + const double boxWidth = 5.0; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); + NonbondedForce* force = new NonbondedForce(); + system.addForce(force); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); + positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); + } + force->setNonbondedMethod(method); + + // For various values of the cutoff and error tolerance, see if the actual error is reasonable. + + for (double cutoff = 1.0; cutoff < boxWidth/2; cutoff *= 1.2) { + force->setCutoffDistance(cutoff); + vector refForces; + double norm = 0.0; + for (double tol = 5e-5; tol < 1e-3; tol *= 2.0) { + force->setEwaldErrorTolerance(tol); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + State state = context.getState(State::Forces); + if (refForces.size() == 0) { + refForces = state.getForces(); + for (int i = 0; i < numParticles; i++) + norm += refForces[i].dot(refForces[i]); + norm = sqrt(norm); + } + else { + double diff = 0.0; + for (int i = 0; i < numParticles; i++) { + Vec3 delta = refForces[i]-state.getForces()[i]; + diff += delta.dot(delta); + } + diff = sqrt(diff)/norm; + ASSERT(diff < 2*tol); + } + if (method == NonbondedForce::PME) { + // See if the PME parameters were calculated correctly. + + double expectedAlpha, actualAlpha; + int expectedSize[3], actualSize[3]; + NonbondedForceImpl::calcPMEParameters(system, *force, expectedAlpha, expectedSize[0], expectedSize[1], expectedSize[2]); + force->getPMEParametersInContext(context, actualAlpha, actualSize[0], actualSize[1], actualSize[2]); + ASSERT_EQUAL_TOL(expectedAlpha, actualAlpha, 1e-5); + for (int i = 0; i < 3; i++) { + ASSERT(actualSize[i] >= expectedSize[i]); + ASSERT(actualSize[i] < expectedSize[i]+10); + } + } + } + } +} + +void testPMEParameters() { + // Create a cloud of random point charges. + + const int numParticles = 51; + const double boxWidth = 4.7; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxWidth, 0, 0), Vec3(0, boxWidth, 0), Vec3(0, 0, boxWidth)); + NonbondedForce* force = new NonbondedForce(); + system.addForce(force); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); + positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt)); + } + force->setNonbondedMethod(NonbondedForce::PME); + + // Compute the energy with an error tolerance of 1e-3. + + force->setEwaldErrorTolerance(1e-3); + VerletIntegrator integrator1(0.01); + Context context1(system, integrator1, platform); + context1.setPositions(positions); + double energy1 = context1.getState(State::Energy).getPotentialEnergy(); + + // Try again with an error tolerance of 1e-4. + + force->setEwaldErrorTolerance(1e-4); + VerletIntegrator integrator2(0.01); + Context context2(system, integrator2, platform); + context2.setPositions(positions); + double energy2 = context2.getState(State::Energy).getPotentialEnergy(); + + // Now explicitly set the parameters. These should match the values that were + // used for tolerance 1e-3. + + force->setPMEParameters(2.49291157051793, 32, 32, 32); + VerletIntegrator integrator3(0.01); + Context context3(system, integrator3, platform); + context3.setPositions(positions); + double energy3 = context3.getState(State::Energy).getPotentialEnergy(); + ASSERT_EQUAL_TOL(energy1, energy3, 1e-6); + ASSERT(fabs((energy1-energy2)/energy1) > 1e-5); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testEwaldExact(); + testEwaldPME(false); + testEwaldPME(true); + testTriclinic(); + testErrorTolerance(NonbondedForce::Ewald); + testErrorTolerance(NonbondedForce::PME); + testPMEParameters(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestGBSAOBCForce.h b/tests/TestGBSAOBCForce.h new file mode 100644 index 0000000000000000000000000000000000000000..ba5b323d745e4c79e92054eed0ddeea050e6af61 --- /dev/null +++ b/tests/TestGBSAOBCForce.h @@ -0,0 +1,283 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "ReferencePlatform.h" +#include "openmm/GBSAOBCForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/NonbondedForce.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleParticle() { + System system; + system.addParticle(2.0); + LangevinIntegrator integrator(0, 0.1, 0.01); + GBSAOBCForce* gbsa = new GBSAOBCForce(); + NonbondedForce* nonbonded = new NonbondedForce(); + gbsa->addParticle(0.5, 0.15, 1); + nonbonded->addParticle(0.5, 1, 0); + system.addForce(gbsa); + system.addForce(nonbonded); + ASSERT(!gbsa->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(1); + positions[0] = Vec3(0, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Energy); + double bornRadius = 0.15-0.009; // dielectric offset + double eps0 = EPSILON0; + double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; + double extendedRadius = 0.15+0.14; // probe radius + double nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); + ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); + + // Change the parameters and see if it is still correct. + + gbsa->setParticleParameters(0, 0.4, 0.25, 1); + gbsa->updateParametersInContext(context); + state = context.getState(State::Energy); + bornRadius = 0.25-0.009; // dielectric offset + bornEnergy = (-0.4*0.4/(8*PI_M*eps0))*(1.0/gbsa->getSoluteDielectric()-1.0/gbsa->getSolventDielectric())/bornRadius; + extendedRadius = 0.25+0.14; + nonpolarEnergy = 4*PI_M*2.25936*extendedRadius*extendedRadius*std::pow(0.25/bornRadius, 6.0); + ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); +} + +void testGlobalSettings() { + System system; + system.addParticle(2.0); + LangevinIntegrator integrator(0, 0.1, 0.01); + GBSAOBCForce* gbsa = new GBSAOBCForce(); + gbsa->addParticle(0.5, 0.15, 1); + const double soluteDielectric = 2.1; + const double solventDielectric = 35.0; + const double surfaceAreaEnergy = 0.75; + gbsa->setSoluteDielectric(soluteDielectric); + gbsa->setSolventDielectric(solventDielectric); + gbsa->setSurfaceAreaEnergy(surfaceAreaEnergy); + system.addForce(gbsa); + ASSERT(!gbsa->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(1); + positions[0] = Vec3(0, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Energy); + double bornRadius = 0.15-0.009; // dielectric offset + double eps0 = EPSILON0; + double bornEnergy = (-0.5*0.5/(8*PI_M*eps0))*(1.0/soluteDielectric-1.0/solventDielectric)/bornRadius; + double extendedRadius = 0.15+0.14; // probe radius + double nonpolarEnergy = 4*PI_M*surfaceAreaEnergy*extendedRadius*extendedRadius*std::pow(0.15/bornRadius, 6.0); + ASSERT_EQUAL_TOL((bornEnergy+nonpolarEnergy), state.getPotentialEnergy(), 0.01); +} + +void testCutoffAndPeriodic() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + LangevinIntegrator integrator(0, 0.1, 0.01); + GBSAOBCForce* gbsa = new GBSAOBCForce(); + NonbondedForce* nonbonded = new NonbondedForce(); + gbsa->addParticle(-1, 0.15, 1); + nonbonded->addParticle(-1, 1, 0); + gbsa->addParticle(1, 0.15, 1); + nonbonded->addParticle(1, 1, 0); + const double cutoffDistance = 3.0; + const double boxSize = 10.0; + nonbonded->setCutoffDistance(cutoffDistance); + gbsa->setCutoffDistance(cutoffDistance); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(gbsa); + system.addForce(nonbonded); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + + // Calculate the forces for both cutoff and periodic with two different atom positions. + + nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); + ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(!gbsa->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + context.setPositions(positions); + State state1 = context.getState(State::Forces); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); + ASSERT(nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(gbsa->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + context.reinitialize(); + context.setPositions(positions); + State state2 = context.getState(State::Forces); + positions[1][0]+= boxSize; + nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + gbsa->setNonbondedMethod(GBSAOBCForce::CutoffNonPeriodic); + ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(!gbsa->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + context.reinitialize(); + context.setPositions(positions); + State state3 = context.getState(State::Forces); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + gbsa->setNonbondedMethod(GBSAOBCForce::CutoffPeriodic); + ASSERT(nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(gbsa->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + context.reinitialize(); + context.setPositions(positions); + State state4 = context.getState(State::Forces); + + // All forces should be identical, exception state3 which should be zero. + + ASSERT_EQUAL_VEC(state1.getForces()[0], state2.getForces()[0], 0.01); + ASSERT_EQUAL_VEC(state1.getForces()[1], state2.getForces()[1], 0.01); + ASSERT_EQUAL_VEC(state1.getForces()[0], state4.getForces()[0], 0.01); + ASSERT_EQUAL_VEC(state1.getForces()[1], state4.getForces()[1], 0.01); + ASSERT_EQUAL_VEC(state3.getForces()[0], Vec3(0, 0, 0), 0.01); + ASSERT_EQUAL_VEC(state3.getForces()[1], Vec3(0, 0, 0), 0.01); +} + +void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBCForce::NonbondedMethod method2) { + ReferencePlatform reference; + System system; + GBSAOBCForce* gbsa = new GBSAOBCForce(); + NonbondedForce* nonbonded = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + double charge = i%2 == 0 ? -1 : 1; + gbsa->addParticle(charge, 0.15, 1); + nonbonded->addParticle(charge, 1, 0); + } + nonbonded->setNonbondedMethod(method); + gbsa->setNonbondedMethod(method2); + nonbonded->setCutoffDistance(3.0); + gbsa->setCutoffDistance(3.0); + int grid = (int) floor(0.5+pow(numParticles, 1.0/3.0)); + if (method == NonbondedForce::CutoffPeriodic) { + double boxSize = (grid+1)*1.1; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + } + system.addForce(gbsa); + system.addForce(nonbonded); + LangevinIntegrator integrator1(0, 0.1, 0.01); + LangevinIntegrator integrator2(0, 0.1, 0.01); + Context context(system, integrator1, platform); + Context refContext(system, integrator2, reference); + + // Set random (but uniformly distributed) positions for all the particles. + + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < grid; i++) + for (int j = 0; j < grid; j++) + for (int k = 0; k < grid; k++) + positions[i*grid*grid+j*grid+k] = Vec3(i*1.1, j*1.1, k*1.1); + for (int i = 0; i < numParticles; ++i) + positions[i] = positions[i] + Vec3(0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt), 0.5*genrand_real2(sfmt)); + context.setPositions(positions); + refContext.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + State refState = refContext.getState(State::Forces | State::Energy); + + // Make sure this agrees with the Reference platform. + + double norm = 0.0; + double diff = 0.0; + for (int i = 0; i < numParticles; ++i) { + Vec3 f = state.getForces()[i]; + norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; + Vec3 delta = f-refState.getForces()[i]; + diff += delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2]; + } + norm = std::sqrt(norm); + diff = std::sqrt(diff); + ASSERT_EQUAL_TOL(0.0, diff, 0.001*norm); + ASSERT_EQUAL_TOL(state.getPotentialEnergy(), refState.getPotentialEnergy(), 1e-3); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + // (This doesn't work with cutoffs, since the energy changes discontinuously at the cutoff distance.) + + if (method == NonbondedForce::NoCutoff) + { + const double delta = 0.3; + double step = 0.5*delta/norm; + vector positions2(numParticles), positions3(numParticles); + for (int i = 0; i < numParticles; ++i) { + Vec3 p = positions[i]; + Vec3 f = state.getForces()[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-2) + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleParticle(); + testGlobalSettings(); + testCutoffAndPeriodic(); + for (int i = 5; i < 11; i++) { + testForce(i*i*i, NonbondedForce::NoCutoff, GBSAOBCForce::NoCutoff); + testForce(i*i*i, NonbondedForce::CutoffNonPeriodic, GBSAOBCForce::CutoffNonPeriodic); + testForce(i*i*i, NonbondedForce::CutoffPeriodic, GBSAOBCForce::CutoffPeriodic); + } + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestHarmonicAngleForce.h b/tests/TestHarmonicAngleForce.h new file mode 100644 index 0000000000000000000000000000000000000000..e371d9b6c28fb418e273f9d72e2a3bc7b68a5df6 --- /dev/null +++ b/tests/TestHarmonicAngleForce.h @@ -0,0 +1,110 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors.s * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicAngleForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testAngles() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + HarmonicAngleForce* forceField = new HarmonicAngleForce(); + forceField->addAngle(0, 1, 2, PI_M/3, 1.1); + forceField->addAngle(1, 2, 3, PI_M/2, 1.2); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(4); + positions[0] = Vec3(0, 1, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + positions[3] = Vec3(2, 1, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double torque1 = 1.1*PI_M/6; + double torque2 = 1.2*PI_M/4; + ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + ASSERT_EQUAL_TOL(0.5*1.1*(PI_M/6)*(PI_M/6) + 0.5*1.2*(PI_M/4)*(PI_M/4), state.getPotentialEnergy(), TOL); + } + + // Try changing the angle parameters and make sure it's still correct. + + forceField->setAngleParameters(0, 0, 1, 2, PI_M/3.1, 1.3); + forceField->setAngleParameters(1, 1, 2, 3, PI_M/2.1, 1.4); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double dtheta1 = (PI_M/2)-(PI_M/3.1); + double dtheta2 = (3*PI_M/4)-(PI_M/2.1); + double torque1 = 1.3*dtheta1; + double torque2 = 1.4*dtheta2; + ASSERT_EQUAL_VEC(Vec3(torque1, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-0.5*torque2, 0.5*torque2, 0), forces[3], TOL); // reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + ASSERT_EQUAL_TOL(0.5*1.3*dtheta1*dtheta1 + 0.5*1.4*dtheta2*dtheta2, state.getPotentialEnergy(), TOL); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testAngles(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestHarmonicBondForce.h b/tests/TestHarmonicBondForce.h new file mode 100644 index 0000000000000000000000000000000000000000..c94214a2e32b75b55747105b2a2f10c9281a1bf1 --- /dev/null +++ b/tests/TestHarmonicBondForce.h @@ -0,0 +1,100 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testBonds() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 0.8); + forceField->addBond(1, 2, 1.2, 0.7); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 2, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, -0.8*0.5, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0.7*0.2, 0, 0), forces[2], TOL); + ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); + ASSERT_EQUAL_TOL(0.5*0.8*0.5*0.5 + 0.5*0.7*0.2*0.2, state.getPotentialEnergy(), TOL); + } + + // Try changing the bond parameters and make sure it's still correct. + + forceField->setBondParameters(0, 0, 1, 1.6, 0.9); + forceField->setBondParameters(1, 1, 2, 1.3, 0.8); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0, -0.9*0.4, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0.8*0.3, 0, 0), forces[2], TOL); + ASSERT_EQUAL_VEC(Vec3(-forces[0][0]-forces[2][0], -forces[0][1]-forces[2][1], -forces[0][2]-forces[2][2]), forces[1], TOL); + ASSERT_EQUAL_TOL(0.5*0.9*0.4*0.4 + 0.5*0.8*0.3*0.3, state.getPotentialEnergy(), TOL); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testBonds(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestLangevinIntegrator.h b/tests/TestLangevinIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..a19e5a83f68ec4fec59dca40e266ce8ebb738841 --- /dev/null +++ b/tests/TestLangevinIntegrator.h @@ -0,0 +1,279 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + LangevinIntegrator integrator(0, 0.1, 0.01); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // This is simply a damped harmonic oscillator, so compare it to the analytical solution. + + double freq = std::sqrt(1-0.05*0.05); + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Velocities); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); + double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); + integrator.step(1); + } + + // Not set the friction to a tiny value and see if it conserves energy. + + integrator.setFriction(5e-5); + context.setPositions(positions); + State state = context.getState(State::Energy); + double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); + for (int i = 0; i < 1000; ++i) { + state = context.getState(State::Energy); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } +} + +void testTemperature() { + const int numParticles = 8; + const double temp = 100.0; + System system; + LangevinIntegrator integrator(temp, 2.0, 0.01); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + for (int i = 0; i < numParticles; ++i) + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < 10000; ++i) { + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + integrator.step(1); + } + ke /= 10000; + double expected = 0.5*numParticles*3*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 6/std::sqrt(10000.0)); +} + +void testConstraints() { + const int numParticles = 8; + const int numConstraints = 5; + const double temp = 100.0; + System system; + LangevinIntegrator integrator(temp, 2.0, 0.01); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(1, 2, 1.0); + system.addConstraint(2, 3, 1.0); + system.addConstraint(4, 5, 1.0); + system.addConstraint(6, 7, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions); + for (int j = 0; j < numConstraints; ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 1e-4); + } + integrator.step(1); + } +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + LangevinIntegrator integrator(300.0, 2.0, 0.01); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + System system; + LangevinIntegrator integrator(temp, 2.0, 0.01); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + integrator.setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + integrator.setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT_EQUAL_TOL(state1.getPositions()[i][j], state2.getPositions()[i][j], 1e-6); + ASSERT_EQUAL_TOL(state3.getPositions()[i][j], state4.getPositions()[i][j], 1e-6); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testTemperature(); + testConstraints(); + testConstrainedMasslessParticles(); + testRandomSeed(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestLocalEnergyMinimizer.h b/tests/TestLocalEnergyMinimizer.h new file mode 100644 index 0000000000000000000000000000000000000000..37c9178e983db3e56f59c94a7f2ca3391a6ccf6f --- /dev/null +++ b/tests/TestLocalEnergyMinimizer.h @@ -0,0 +1,215 @@ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2010-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/LocalEnergyMinimizer.h" +#include "openmm/NonbondedForce.h" +#include "openmm/VerletIntegrator.h" +#include "openmm/VirtualSite.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testHarmonicBonds() { + const int numParticles = 10; + System system; + HarmonicBondForce* bonds = new HarmonicBondForce(); + system.addForce(bonds); + + // Create a chain of particles connected by harmonic bonds. + + vector positions(numParticles); + for (int i = 0; i < numParticles; i++) { + system.addParticle(1.0); + positions[i] = Vec3(i, 0, 0); + if (i > 0) + bonds->addBond(i-1, i, 1+0.1*i, 1); + } + + // Minimize it and check that all bonds are at their equilibrium distances. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + LocalEnergyMinimizer::minimize(context, 1e-5); + State state = context.getState(State::Positions); + for (int i = 1; i < numParticles; i++) { + Vec3 delta = state.getPositions()[i]-state.getPositions()[i-1]; + ASSERT_EQUAL_TOL(1+0.1*i, sqrt(delta.dot(delta)), 1e-4); + } +} + +void testLargeSystem() { + const int numMolecules = 25; + const int numParticles = numMolecules*2; + const double cutoff = 2.0; + const double boxSize = 4.0; + const double tolerance = 15; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->setCutoffDistance(cutoff); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + system.addForce(nonbonded); + + // Create a cloud of molecules. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector positions(numParticles); + for (int i = 0; i < numMolecules; i++) { + system.addParticle(1.0); + system.addParticle(1.0); + nonbonded->addParticle(-1.0, 0.2, 0.2); + nonbonded->addParticle(1.0, 0.2, 0.2); + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + system.addConstraint(2*i, 2*i+1, 1.0); + } + + // Minimize it and verify that the energy has decreased. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + State initialState = context.getState(State::Forces | State::Energy); + LocalEnergyMinimizer::minimize(context, tolerance); + State finalState = context.getState(State::Forces | State::Energy | State::Positions); + ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); + + // Compute the force magnitude, subtracting off any component parallel to a constraint, and + // check that it satisfies the requested tolerance. + + double forceNorm = 0.0; + for (int i = 0; i < numParticles; i += 2) { + Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; + double distance = sqrt(dir.dot(dir)); + dir *= 1.0/distance; + Vec3 f = finalState.getForces()[i]; + f -= dir*dir.dot(f); + forceNorm += f.dot(f); + f = finalState.getForces()[i+1]; + f -= dir*dir.dot(f); + forceNorm += f.dot(f); + } + forceNorm = sqrt(forceNorm/(5*numMolecules)); + ASSERT(forceNorm < 2*tolerance); +} + +void testVirtualSites() { + const int numMolecules = 25; + const int numParticles = numMolecules*3; + const double cutoff = 2.0; + const double boxSize = 4.0; + const double tolerance = 10; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->setCutoffDistance(cutoff); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + system.addForce(nonbonded); + + // Create a cloud of molecules. + + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + vector positions(numParticles); + for (int i = 0; i < numMolecules; i++) { + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + nonbonded->addParticle(-1.0, 0.2, 0.2); + nonbonded->addParticle(0.5, 0.2, 0.2); + nonbonded->addParticle(0.5, 0.2, 0.2); + positions[3*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[3*i+1] = Vec3(positions[3*i][0]+1.0, positions[3*i][1], positions[3*i][2]); + positions[3*i+2] = Vec3(); + system.addConstraint(3*i, 3*i+1, 1.0); + system.setVirtualSite(3*i+2, new TwoParticleAverageSite(3*i, 3*i+1, 0.5, 0.5)); + } + + // Minimize it and verify that the energy has decreased. + + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + context.applyConstraints(1e-5); + State initialState = context.getState(State::Forces | State::Energy); + LocalEnergyMinimizer::minimize(context, tolerance); + State finalState = context.getState(State::Forces | State::Energy | State::Positions); + ASSERT(finalState.getPotentialEnergy() < initialState.getPotentialEnergy()); + + // Compute the force magnitude, subtracting off any component parallel to a constraint, and + // check that it satisfies the requested tolerance. + + double forceNorm = 0.0; + for (int i = 0; i < numParticles; i += 3) { + Vec3 dir = finalState.getPositions()[i+1]-finalState.getPositions()[i]; + double distance = sqrt(dir.dot(dir)); + dir *= 1.0/distance; + Vec3 f = finalState.getForces()[i]; + f -= dir*dir.dot(f); + forceNorm += f.dot(f); + f = finalState.getForces()[i+1]; + f -= dir*dir.dot(f); + forceNorm += f.dot(f); + + // Check the virtual site location. + + ASSERT_EQUAL_VEC((finalState.getPositions()[i+1]+finalState.getPositions()[i])*0.5, finalState.getPositions()[i+2], 1e-5); + } + forceNorm = sqrt(forceNorm/(5*numMolecules)); + ASSERT(forceNorm < 2*tolerance); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testHarmonicBonds(); + testLargeSystem(); + testVirtualSites(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestMonteCarloAnisotropicBarostat.h b/tests/TestMonteCarloAnisotropicBarostat.h new file mode 100644 index 0000000000000000000000000000000000000000..149ff63e928ca2bf247bc29f27e2dd7d4264cfe5 --- /dev/null +++ b/tests/TestMonteCarloAnisotropicBarostat.h @@ -0,0 +1,479 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman, Lee-Ping Wang * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/CustomExternalForce.h" +#include "openmm/MonteCarloBarostat.h" +#include "openmm/MonteCarloAnisotropicBarostat.h" +#include "openmm/Context.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testIdealGas() { + const int numParticles = 64; + const int frequency = 10; + const int steps = 1000; + const double pressure = 1.5; + const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 + const double temp[] = {300.0, 600.0, 1000.0}; + const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; + const double initialLength = std::pow(initialVolume, 1.0/3.0); + + // Create a gas of noninteracting particles. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); + } + MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], true, true, true, frequency); + system.addForce(barostat); + ASSERT(barostat->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + + // Test it for three different temperatures. + + for (int i = 0; i < 3; i++) { + barostat->setTemperature(temp[i]); + LangevinIntegrator integrator(temp[i], 0.1, 0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the volume is correct. + + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; + ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); + } +} + +void testIdealGasAxis(int axis) { + // Test scaling just one axis. + const int numParticles = 64; + const int frequency = 10; + const int steps = 1000; + const double pressure = 1.5; + const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 + const double temp[] = {300.0, 600.0, 1000.0}; + const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; + const double initialLength = std::pow(initialVolume, 1.0/3.0); + const bool scaleX = (axis == 0); + const bool scaleY = (axis == 1); + const bool scaleZ = (axis == 2); + double boxX; + double boxY; + double boxZ; + + // Create a gas of noninteracting particles. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); + } + MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp[0], scaleX, scaleY, scaleZ, frequency); + system.addForce(barostat); + ASSERT(barostat->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + + // Test it for three different temperatures. + + for (int i = 0; i < 3; i++) { + barostat->setTemperature(temp[i]); + LangevinIntegrator integrator(temp[i], 0.1, 0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the volume is correct. + + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + boxX = box[0][0]; + boxY = box[1][1]; + boxZ = box[2][2]; + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; + ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); + if (!scaleX) { + ASSERT(boxX == initialLength); + } + if (!scaleY) { + ASSERT(boxY == 0.5*initialLength); + } + if (!scaleZ) { + ASSERT(boxZ == 2*initialLength); + } + } +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + const double pressure = 1.5; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temp, true, true, true, 1); + system.addForce(barostat); + ASSERT(barostat->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + barostat->setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + barostat->setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); + ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void testTriclinic() { + const int numParticles = 64; + const int frequency = 10; + const int steps = 1000; + const double pressure = 1.5; + const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 + const double temperature = 300.0; + const double initialVolume = numParticles*BOLTZ*temperature/pressureInMD; + const double initialLength = std::pow(initialVolume, 1.0/3.0); + + // Create a gas of noninteracting particles. + + System system; + Vec3 initialBox[3]; + initialBox[0] = Vec3(initialLength, 0, 0); + initialBox[1] = Vec3(0.2*initialLength, initialLength, 0); + initialBox[2] = Vec3(0.1*initialLength, 0.3*initialLength, initialLength); + system.setDefaultPeriodicBoxVectors(initialBox[0], initialBox[1], initialBox[2]); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt), initialLength*genrand_real2(sfmt)); + } + MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pressure, pressure, pressure), temperature, true, true, true, frequency); + system.addForce(barostat); + + // Run a simulation + + LangevinIntegrator integrator(temperature, 0.1, 0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the volume is correct. + + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + double expected = (numParticles+1)*BOLTZ*temperature/pressureInMD; + ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); + + // Make sure the box vectors have been scaled consistently. + + State state = context.getState(State::Positions); + Vec3 box[3]; + state.getPeriodicBoxVectors(box[0], box[1], box[2]); + double xscale = box[2][0]/(0.1*initialLength); + double yscale = box[2][1]/(0.3*initialLength); + double zscale = box[2][2]/(1.0*initialLength); + for (int i = 0; i < 3; i++) { + ASSERT_EQUAL_VEC(Vec3(xscale*initialBox[i][0], yscale*initialBox[i][1], zscale*initialBox[i][2]), box[i], 1e-5); + } + + // The barostat should have put all particles inside the first periodic box. One integration step + // has happened since then, so they may have moved slightly outside it. + + for (int i = 0; i < numParticles; i++) { + Vec3 pos = state.getPositions()[i]; + ASSERT(pos[2]/box[2][2] > -1 && pos[2]/box[2][2] < 2); + pos -= box[2]*floor(pos[2]/box[2][2]); + ASSERT(pos[1]/box[1][1] > -1 && pos[1]/box[1][1] < 2); + pos -= box[1]*floor(pos[1]/box[1][1]); + ASSERT(pos[0]/box[0][0] > -1 && pos[0]/box[0][0] < 2); + } +} + +/** + * Run a constant pressure simulation on an anisotropic Einstein crystal + * using isotropic and anisotropic barostats. There are a total of 15 simulations: + * + * 1) 3 pressures: 9.0, 10.0, 11.0 bar, for each of the following groups: + * 2) 3 groups of simulations that scale just one axis: x, y, z + * 3) 1 group of simulations that scales all three axes in the anisotropic barostat + * 4) 1 group of simulations that scales all three axes in the isotropic barostat + * + * Results that we will check: + * + * a) In each group of simulations, the volume should decrease with increasing pressure + * b) In the three simulation groups that scale just one axis, the compressibility (i.e. incremental volume change + * with increasing pressure) should go like kx > ky > kz (because the spring constant is largest in the z-direction) + * c) The anisotropic barostat should produce the same result as the isotropic barostat when all three axes are scaled + */ +void testEinsteinCrystal() { + const int numParticles = 64; + const int frequency = 2; + const int equil = 10000; + const int steps = 5000; + const double pressure = 10.0; + const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 + const double temp = 300.0; // Only test one temperature since we're looking at three pressures. + const double pres3[] = {2.0, 8.0, 15.0}; + const double initialVolume = numParticles*BOLTZ*temp/pressureInMD; + const double initialLength = std::pow(initialVolume, 1.0/3.0); + vector initialPositions(3); + vector results; + // Run four groups of anisotropic simulations; scaling just x, y, z, then all three. + for (int a = 0; a < 4; a++) { + // Test barostat for three different pressures. + for (int p = 0; p < 3; p++) { + // Create a system of noninteracting particles attached by harmonic springs to their initial positions. + System system; + system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + // Anisotropic force constants. + CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); + force->addPerParticleParameter("x0"); + force->addPerParticleParameter("y0"); + force->addPerParticleParameter("z0"); + NonbondedForce* nb = new NonbondedForce(); + nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); + initialPositions[0] = positions[i][0]; + initialPositions[1] = positions[i][1]; + initialPositions[2] = positions[i][2]; + force->addParticle(i, initialPositions); + nb->addParticle(0, initialLength/6, 0.1); + } + system.addForce(force); + system.addForce(nb); + // Create the barostat. + MonteCarloAnisotropicBarostat* barostat = new MonteCarloAnisotropicBarostat(Vec3(pres3[p], pres3[p], pres3[p]), temp, (a==0||a==3), (a==1||a==3), (a==2||a==3), frequency); + system.addForce(barostat); + barostat->setTemperature(temp); + LangevinIntegrator integrator(temp, 0.1, 0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + // Let it equilibrate. + integrator.step(equil); + // Now run it for a while and see if the volume is correct. + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + results.push_back(volume); + } + } + for (int p = 0; p < 3; p++) { + // Create a system of noninteracting particles attached by harmonic springs to their initial positions. + System system; + system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, initialLength, 0), Vec3(0, 0, initialLength)); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + // Anisotropic force constants. + CustomExternalForce* force = new CustomExternalForce("0.005*(x-x0)^2 + 0.01*(y-y0)^2 + 0.02*(z-z0)^2"); + force->addPerParticleParameter("x0"); + force->addPerParticleParameter("y0"); + force->addPerParticleParameter("z0"); + NonbondedForce* nb = new NonbondedForce(); + nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(((i/16)%4+0.5)*initialLength/4, ((i/4)%4+0.5)*initialLength/4, (i%4+0.5)*initialLength/4); + initialPositions[0] = positions[i][0]; + initialPositions[1] = positions[i][1]; + initialPositions[2] = positions[i][2]; + force->addParticle(i, initialPositions); + nb->addParticle(0, initialLength/6, 0.1); + } + system.addForce(force); + system.addForce(nb); + // Create the barostat. + MonteCarloBarostat* barostat = new MonteCarloBarostat(pres3[p], temp, frequency); + system.addForce(barostat); + barostat->setTemperature(temp); + LangevinIntegrator integrator(temp, 0.1, 0.001); + Context context(system, integrator, platform); + context.setPositions(positions); + // Let it equilibrate. + integrator.step(equil); + // Now run it for a while and see if the volume is correct. + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + results.push_back(volume); + } + + // Check to see if volumes decrease with increasing pressure. + ASSERT_USUALLY_TRUE(results[0] > results[1]); + ASSERT_USUALLY_TRUE(results[1] > results[2]); + ASSERT_USUALLY_TRUE(results[3] > results[4]); + ASSERT_USUALLY_TRUE(results[4] > results[5]); + ASSERT_USUALLY_TRUE(results[6] > results[7]); + ASSERT_USUALLY_TRUE(results[7] > results[8]); + + // Check to see if incremental volume changes with increasing pressure go like kx > ky > kz. + ASSERT_USUALLY_TRUE((results[0] - results[1]) > (results[3] - results[4])); + ASSERT_USUALLY_TRUE((results[1] - results[2]) > (results[4] - results[5])); + ASSERT_USUALLY_TRUE((results[3] - results[4]) > (results[6] - results[7])); + ASSERT_USUALLY_TRUE((results[4] - results[5]) > (results[7] - results[8])); + + // Check to see if the volumes are equal for isotropic and anisotropic (all axis). + ASSERT_USUALLY_EQUAL_TOL(results[9], results[12], 3/std::sqrt((double) steps)); + ASSERT_USUALLY_EQUAL_TOL(results[10], results[13], 3/std::sqrt((double) steps)); + ASSERT_USUALLY_EQUAL_TOL(results[11], results[14], 3/std::sqrt((double) steps)); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testIdealGas(); + testIdealGasAxis(0); + testIdealGasAxis(1); + testIdealGasAxis(2); + testRandomSeed(); + testTriclinic(); + //testEinsteinCrystal(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestMonteCarloBarostat.h b/tests/TestMonteCarloBarostat.h new file mode 100644 index 0000000000000000000000000000000000000000..e02209ed7a543f514e9a0bae68885f294b7399a4 --- /dev/null +++ b/tests/TestMonteCarloBarostat.h @@ -0,0 +1,289 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/MonteCarloBarostat.h" +#include "openmm/Context.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/VerletIntegrator.h" +#include "sfmt/SFMT.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testChangingBoxSize() { + System system; + system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 5, 0), Vec3(0, 0, 6)); + system.addParticle(1.0); + NonbondedForce* nb = new NonbondedForce(); + nb->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + nb->setCutoffDistance(2.0); + nb->addParticle(1, 0.5, 0.5); + system.addForce(nb); + LangevinIntegrator integrator(300.0, 1.0, 0.01); + Context context(system, integrator, platform); + vector positions; + positions.push_back(Vec3()); + context.setPositions(positions); + Vec3 x, y, z; + context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); + ASSERT_EQUAL_VEC(Vec3(4, 0, 0), x, 0); + ASSERT_EQUAL_VEC(Vec3(0, 5, 0), y, 0); + ASSERT_EQUAL_VEC(Vec3(0, 0, 6), z, 0); + context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 9)); + context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); + ASSERT_EQUAL_VEC(Vec3(7, 0, 0), x, 0); + ASSERT_EQUAL_VEC(Vec3(0, 8, 0), y, 0); + ASSERT_EQUAL_VEC(Vec3(0, 0, 9), z, 0); + + // Shrinking the box too small should produce an exception. + + context.setPeriodicBoxVectors(Vec3(7, 0, 0), Vec3(0, 3.9, 0), Vec3(0, 0, 9)); + bool ok = true; + try { + context.getState(State::Forces).getPeriodicBoxVectors(x, y, z); + ok = false; + } + catch (exception& ex) { + } + ASSERT(ok); +} + +void testIdealGas() { + const int numParticles = 64; + const int frequency = 10; + const int steps = 1000; + const double pressure = 1.5; + const double pressureInMD = pressure*(AVOGADRO*1e-25); // pressure in kJ/mol/nm^3 + const double temp[] = {300.0, 600.0, 1000.0}; + const double initialVolume = numParticles*BOLTZ*temp[1]/pressureInMD; + const double initialLength = std::pow(initialVolume, 1.0/3.0); + + // Create a gas of noninteracting particles. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(initialLength, 0, 0), Vec3(0, 0.5*initialLength, 0), Vec3(0, 0, 2*initialLength)); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(1.0); + positions[i] = Vec3(initialLength*genrand_real2(sfmt), 0.5*initialLength*genrand_real2(sfmt), 2*initialLength*genrand_real2(sfmt)); + } + MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp[0], frequency); + system.addForce(barostat); + ASSERT(barostat->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + + // Test it for three different temperatures. + + for (int i = 0; i < 3; i++) { + barostat->setTemperature(temp[i]); + LangevinIntegrator integrator(temp[i], 0.1, 0.01); + Context context(system, integrator, platform); + context.setPositions(positions); + + // Let it equilibrate. + + integrator.step(10000); + + // Now run it for a while and see if the volume is correct. + + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + ASSERT_EQUAL_TOL(0.5*box[0][0], box[1][1], 1e-5); + ASSERT_EQUAL_TOL(2*box[0][0], box[2][2], 1e-5); + integrator.step(frequency); + } + volume /= steps; + double expected = (numParticles+1)*BOLTZ*temp[i]/pressureInMD; + ASSERT_USUALLY_EQUAL_TOL(expected, volume, 3/std::sqrt((double) steps)); + } +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + const double pressure = 1.5; + System system; + system.setDefaultPeriodicBoxVectors(Vec3(8, 0, 0), Vec3(0, 8, 0), Vec3(0, 0, 8)); + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + forceField->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, 1); + system.addForce(barostat); + ASSERT(barostat->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + barostat->setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + barostat->setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); + ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void testWater() { + const int gridSize = 8; + const int numMolecules = gridSize*gridSize*gridSize; + const int frequency = 10; + const int steps = 400; + const double temp = 273.15; + const double pressure = 3; + const double spacing = 0.32; + const double angle = 109.47*M_PI/180; + const double dOH = 0.1; + const double dHH = dOH*2*std::sin(0.5*angle); + + // Create a box of SPC water molecules. + + System system; + system.setDefaultPeriodicBoxVectors(Vec3(gridSize*spacing, 0, 0), Vec3(0, gridSize*spacing, 0), Vec3(0, 0, gridSize*spacing)); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + nonbonded->setUseDispersionCorrection(true); + vector positions; + Vec3 offset1(dOH, 0, 0); + Vec3 offset2(dOH*std::cos(angle), dOH*std::sin(angle), 0); + for (int i = 0; i < gridSize; ++i) { + for (int j = 0; j < gridSize; ++j) { + for (int k = 0; k < gridSize; ++k) { + int firstParticle = system.getNumParticles(); + system.addParticle(16.0); + system.addParticle(1.0); + system.addParticle(1.0); + nonbonded->addParticle(-0.82, 0.316557, 0.650194); + nonbonded->addParticle(0.41, 1, 0); + nonbonded->addParticle(0.41, 1, 0); + Vec3 pos = Vec3(spacing*i, spacing*j, spacing*k); + positions.push_back(pos); + positions.push_back(pos+offset1); + positions.push_back(pos+offset2); + system.addConstraint(firstParticle, firstParticle+1, dOH); + system.addConstraint(firstParticle, firstParticle+2, dOH); + system.addConstraint(firstParticle+1, firstParticle+2, dHH); + nonbonded->addException(firstParticle, firstParticle+1, 0, 1, 0); + nonbonded->addException(firstParticle, firstParticle+2, 0, 1, 0); + nonbonded->addException(firstParticle+1, firstParticle+2, 0, 1, 0); + } + } + } + system.addForce(nonbonded); + MonteCarloBarostat* barostat = new MonteCarloBarostat(pressure, temp, frequency); + system.addForce(barostat); + + // Simulate it and see if the density matches the expected value (1 g/mL). + + LangevinIntegrator integrator(temp, 1.0, 0.002); + Context context(system, integrator, platform); + context.setPositions(positions); + integrator.step(2000); + double volume = 0.0; + for (int j = 0; j < steps; ++j) { + Vec3 box[3]; + context.getState(0).getPeriodicBoxVectors(box[0], box[1], box[2]); + volume += box[0][0]*box[1][1]*box[2][2]; + integrator.step(frequency); + } + volume /= steps; + double density = numMolecules*18/(AVOGADRO*volume*1e-21); + ASSERT_USUALLY_EQUAL_TOL(1.0, density, 0.02); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testChangingBoxSize(); + testIdealGas(); + testRandomSeed(); + // Don't run testWater() here, because it's very slow on Reference platform. + // Individual platforms can run it from runPlatformTests(). + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestNonbondedForce.h b/tests/TestNonbondedForce.h new file mode 100644 index 0000000000000000000000000000000000000000..56031818426532e4afd558b19454ef37af07b991 --- /dev/null +++ b/tests/TestNonbondedForce.h @@ -0,0 +1,712 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "ReferencePlatform.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testCoulomb() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + forceField->addParticle(0.5, 1, 0); + forceField->addParticle(-1.5, 1, 0); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double force = ONE_4PI_EPS0*(-0.75)/4.0; + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(-0.75)/2.0, state.getPotentialEnergy(), TOL); +} + +void testLJ() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + forceField->addParticle(0, 1.2, 1); + forceField->addParticle(0, 1.4, 2); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double x = 1.3/2.0; + double eps = SQRT_TWO; + double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/2.0; + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_TOL(4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)), state.getPotentialEnergy(), TOL); +} + +void testExclusionsAnd14() { + System system; + NonbondedForce* nonbonded = new NonbondedForce(); + for (int i = 0; i < 5; ++i) { + system.addParticle(1.0); + nonbonded->addParticle(0, 1.5, 0); + } + vector > bonds; + bonds.push_back(pair(0, 1)); + bonds.push_back(pair(1, 2)); + bonds.push_back(pair(2, 3)); + bonds.push_back(pair(3, 4)); + nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); + int first14, second14; + for (int i = 0; i < nonbonded->getNumExceptions(); i++) { + int particle1, particle2; + double chargeProd, sigma, epsilon; + nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); + if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) + first14 = i; + if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) + second14 = i; + } + system.addForce(nonbonded); + VerletIntegrator integrator(0.01); + Context context(system, integrator, platform); + for (int i = 1; i < 5; ++i) { + + // Test LJ forces + + vector positions(5); + const double r = 1.0; + for (int j = 0; j < 5; ++j) { + nonbonded->setParticleParameters(j, 0, 1.5, 0); + positions[j] = Vec3(0, j, 0); + } + nonbonded->setParticleParameters(0, 0, 1.5, 1); + nonbonded->setParticleParameters(i, 0, 1.5, 1); + nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); + nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); + positions[i] = Vec3(r, 0, 0); + context.reinitialize(); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double x = 1.5/r; + double eps = 1.0; + double force = 4.0*eps*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; + double energy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); + if (i == 3) { + force *= 0.5; + energy *= 0.5; + } + if (i < 3) { + force = 0; + energy = 0; + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + + // Test Coulomb forces + + nonbonded->setParticleParameters(0, 2, 1.5, 0); + nonbonded->setParticleParameters(i, 2, 1.5, 0); + nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? 4/1.2 : 0, 1.5, 0); + nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); + context.reinitialize(); + context.setPositions(positions); + state = context.getState(State::Forces | State::Energy); + const vector& forces2 = state.getForces(); + force = ONE_4PI_EPS0*4/(r*r); + energy = ONE_4PI_EPS0*4/r; + if (i == 3) { + force /= 1.2; + energy /= 1.2; + } + if (i < 3) { + force = 0; + energy = 0; + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + } +} + +void testCutoff() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + NonbondedForce* forceField = new NonbondedForce(); + forceField->addParticle(1.0, 1, 0); + forceField->addParticle(1.0, 1, 0); + forceField->addParticle(1.0, 1, 0); + forceField->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + const double cutoff = 2.9; + forceField->setCutoffDistance(cutoff); + const double eps = 50.0; + forceField->setReactionFieldDielectric(eps); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(0, 2, 0); + positions[2] = Vec3(0, 3, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); + const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); + const double force1 = ONE_4PI_EPS0*(1.0)*(0.25-2.0*krf*2.0); + const double force2 = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); + ASSERT_EQUAL_VEC(Vec3(0, -force1, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, force1-force2, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, force2, 0), forces[2], TOL); + const double energy1 = ONE_4PI_EPS0*(1.0)*(0.5+krf*4.0-crf); + const double energy2 = ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf); + ASSERT_EQUAL_TOL(energy1+energy2, state.getPotentialEnergy(), TOL); +} + +void testCutoff14() { + System system; + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + for (int i = 0; i < 5; i++) { + system.addParticle(1.0); + nonbonded->addParticle(0, 1.5, 0); + } + const double cutoff = 3.5; + nonbonded->setCutoffDistance(cutoff); + const double eps = 30.0; + nonbonded->setReactionFieldDielectric(eps); + vector > bonds; + bonds.push_back(pair(0, 1)); + bonds.push_back(pair(1, 2)); + bonds.push_back(pair(2, 3)); + bonds.push_back(pair(3, 4)); + nonbonded->createExceptionsFromBonds(bonds, 0.0, 0.0); + int first14, second14; + for (int i = 0; i < nonbonded->getNumExceptions(); i++) { + int particle1, particle2; + double chargeProd, sigma, epsilon; + nonbonded->getExceptionParameters(i, particle1, particle2, chargeProd, sigma, epsilon); + if ((particle1 == 0 && particle2 == 3) || (particle1 == 3 && particle2 == 0)) + first14 = i; + if ((particle1 == 1 && particle2 == 4) || (particle1 == 4 && particle2 == 1)) + second14 = i; + } + system.addForce(nonbonded); + ASSERT(!nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(5); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(2, 0, 0); + positions[3] = Vec3(3, 0, 0); + positions[4] = Vec3(4, 0, 0); + for (int i = 1; i < 5; ++i) { + + // Test LJ forces + + nonbonded->setParticleParameters(0, 0, 1.5, 1); + for (int j = 1; j < 5; ++j) + nonbonded->setParticleParameters(j, 0, 1.5, 0); + nonbonded->setParticleParameters(i, 0, 1.5, 1); + nonbonded->setExceptionParameters(first14, 0, 3, 0, 1.5, i == 3 ? 0.5 : 0.0); + nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0.0); + context.reinitialize(); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + double r = positions[i][0]; + double x = 1.5/r; + double e = 1.0; + double force = 4.0*e*(12*std::pow(x, 12.0)-6*std::pow(x, 6.0))/r; + double energy = 4.0*e*(std::pow(x, 12.0)-std::pow(x, 6.0)); + if (i == 3) { + force *= 0.5; + energy *= 0.5; + } + if (i < 3 || r > cutoff) { + force = 0; + energy = 0; + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[i], TOL); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + + // Test Coulomb forces + + const double q = 0.7; + nonbonded->setParticleParameters(0, q, 1.5, 0); + nonbonded->setParticleParameters(i, q, 1.5, 0); + nonbonded->setExceptionParameters(first14, 0, 3, i == 3 ? q*q/1.2 : 0, 1.5, 0); + nonbonded->setExceptionParameters(second14, 1, 4, 0, 1.5, 0); + context.reinitialize(); + context.setPositions(positions); + state = context.getState(State::Forces | State::Energy); + const vector& forces2 = state.getForces(); + force = ONE_4PI_EPS0*q*q/(r*r); + energy = ONE_4PI_EPS0*q*q/r; + if (i == 3) { + force /= 1.2; + energy /= 1.2; + } + if (i < 3 || r > cutoff) { + force = 0; + energy = 0; + } + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces2[0], TOL); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces2[i], TOL); + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + } +} + +void testPeriodic() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->addParticle(1.0, 1, 0); + nonbonded->addParticle(1.0, 1, 0); + nonbonded->addParticle(1.0, 1, 0); + nonbonded->addException(0, 1, 0.0, 1.0, 0.0); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + const double cutoff = 2.0; + nonbonded->setCutoffDistance(cutoff); + system.setDefaultPeriodicBoxVectors(Vec3(4, 0, 0), Vec3(0, 4, 0), Vec3(0, 0, 4)); + system.addForce(nonbonded); + ASSERT(nonbonded->usesPeriodicBoundaryConditions()); + ASSERT(system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(2, 0, 0); + positions[2] = Vec3(3, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + const vector& forces = state.getForces(); + const double eps = 78.3; + const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); + const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); + const double force = ONE_4PI_EPS0*(1.0)*(1.0-2.0*krf*1.0); + ASSERT_EQUAL_VEC(Vec3(force, 0, 0), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(-force, 0, 0), forces[1], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), forces[2], TOL); + ASSERT_EQUAL_TOL(2*ONE_4PI_EPS0*(1.0)*(1.0+krf*1.0-crf), state.getPotentialEnergy(), TOL); +} + +void testTriclinic() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + Vec3 a(3.1, 0, 0); + Vec3 b(0.4, 3.5, 0); + Vec3 c(-0.1, -0.5, 4.0); + system.setDefaultPeriodicBoxVectors(a, b, c); + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->addParticle(1.0, 1, 0); + nonbonded->addParticle(1.0, 1, 0); + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + const double cutoff = 1.5; + nonbonded->setCutoffDistance(cutoff); + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(2); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + const double eps = 78.3; + const double krf = (1.0/(cutoff*cutoff*cutoff))*(eps-1.0)/(2.0*eps+1.0); + const double crf = (1.0/cutoff)*(3.0*eps)/(2.0*eps+1.0); + for (int iteration = 0; iteration < 50; iteration++) { + // Generate random positions for the two particles. + + positions[0] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); + positions[1] = a*genrand_real2(sfmt) + b*genrand_real2(sfmt) + c*genrand_real2(sfmt); + context.setPositions(positions); + + // Loop over all possible periodic copies and find the nearest one. + + Vec3 delta; + double distance2 = 100.0; + for (int i = -1; i < 2; i++) + for (int j = -1; j < 2; j++) + for (int k = -1; k < 2; k++) { + Vec3 d = positions[1]-positions[0]+a*i+b*j+c*k; + if (d.dot(d) < distance2) { + delta = d; + distance2 = d.dot(d); + } + } + double distance = sqrt(distance2); + + // See if the force and energy are correct. + + State state = context.getState(State::Forces | State::Energy); + if (distance >= cutoff) { + ASSERT_EQUAL(0.0, state.getPotentialEnergy()); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[0], 0); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getForces()[1], 0); + } + else { + const Vec3 force = delta*ONE_4PI_EPS0*(-1.0/(distance*distance*distance)+2.0*krf); + ASSERT_EQUAL_TOL(ONE_4PI_EPS0*(1.0/distance+krf*distance*distance-crf), state.getPotentialEnergy(), 1e-4); + ASSERT_EQUAL_VEC(force, state.getForces()[0], 1e-4); + ASSERT_EQUAL_VEC(-force, state.getForces()[1], 1e-4); + } + } +} + +void testLargeSystem() { + const int numMolecules = 600; + const int numParticles = numMolecules*2; + const double cutoff = 2.0; + const double boxSize = 20.0; + const double tol = 2e-3; + ReferencePlatform reference; + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + NonbondedForce* nonbonded = new NonbondedForce(); + HarmonicBondForce* bonds = new HarmonicBondForce(); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + nonbonded->addParticle(-1.0, 0.2, 0.1); + nonbonded->addParticle(1.0, 0.1, 0.1); + } + else { + nonbonded->addParticle(-1.0, 0.2, 0.2); + nonbonded->addParticle(1.0, 0.1, 0.2); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + bonds->addBond(2*i, 2*i+1, 1.0, 0.1); + nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); + } + + // Try with cutoffs but not periodic boundary conditions, and make sure it agrees with the Reference platform. + + nonbonded->setNonbondedMethod(NonbondedForce::CutoffNonPeriodic); + nonbonded->setCutoffDistance(cutoff); + system.addForce(nonbonded); + system.addForce(bonds); + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context context(system, integrator1, platform); + Context referenceContext(system, integrator2, reference); + context.setPositions(positions); + context.setVelocities(velocities); + referenceContext.setPositions(positions); + referenceContext.setVelocities(velocities); + State state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); + State referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); + for (int i = 0; i < numParticles; i++) { + ASSERT_EQUAL_VEC(state.getPositions()[i], referenceState.getPositions()[i], tol); + ASSERT_EQUAL_VEC(state.getVelocities()[i], referenceState.getVelocities()[i], tol); + ASSERT_EQUAL_VEC(state.getForces()[i], referenceState.getForces()[i], tol); + } + ASSERT_EQUAL_TOL(state.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); + + // Now do the same thing with periodic boundary conditions. + + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + context.reinitialize(); + referenceContext.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + referenceContext.setPositions(positions); + referenceContext.setVelocities(velocities); + state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); + referenceState = referenceContext.getState(State::Positions | State::Velocities | State::Forces | State::Energy); + for (int i = 0; i < numParticles; i++) { + double dx = state.getPositions()[i][0]-referenceState.getPositions()[i][0]; + double dy = state.getPositions()[i][1]-referenceState.getPositions()[i][1]; + double dz = state.getPositions()[i][2]-referenceState.getPositions()[i][2]; + ASSERT_EQUAL_TOL(dx-floor(dx/boxSize+0.5)*boxSize, 0, tol); + ASSERT_EQUAL_TOL(dy-floor(dy/boxSize+0.5)*boxSize, 0, tol); + ASSERT_EQUAL_TOL(dz-floor(dz/boxSize+0.5)*boxSize, 0, tol); + ASSERT_EQUAL_VEC(state.getVelocities()[i], referenceState.getVelocities()[i], tol); + ASSERT_EQUAL_VEC(state.getForces()[i], referenceState.getForces()[i], tol); + } + ASSERT_EQUAL_TOL(state.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); +} + +void testDispersionCorrection() { + // Create a box full of identical particles. + + int gridSize = 5; + int numParticles = gridSize*gridSize*gridSize; + double boxSize = gridSize*0.7; + double cutoff = boxSize/3; + System system; + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + vector positions(numParticles); + int index = 0; + for (int i = 0; i < gridSize; i++) + for (int j = 0; j < gridSize; j++) + for (int k = 0; k < gridSize; k++) { + system.addParticle(1.0); + nonbonded->addParticle(0, 1.1, 0.5); + positions[index] = Vec3(i*boxSize/gridSize, j*boxSize/gridSize, k*boxSize/gridSize); + index++; + } + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + nonbonded->setCutoffDistance(cutoff); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(nonbonded); + + // See if the correction has the correct value. + + Context context(system, integrator, platform); + context.setPositions(positions); + double energy1 = context.getState(State::Energy).getPotentialEnergy(); + nonbonded->setUseDispersionCorrection(false); + context.reinitialize(); + context.setPositions(positions); + double energy2 = context.getState(State::Energy).getPotentialEnergy(); + double term1 = (0.5*pow(1.1, 12)/pow(cutoff, 9))/9; + double term2 = (0.5*pow(1.1, 6)/pow(cutoff, 3))/3; + double expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); + ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); + + // Now modify half the particles to be different, and see if it is still correct. + + int numType2 = 0; + for (int i = 0; i < numParticles; i += 2) { + nonbonded->setParticleParameters(i, 0, 1, 1); + numType2++; + } + int numType1 = numParticles-numType2; + nonbonded->updateParametersInContext(context); + energy2 = context.getState(State::Energy).getPotentialEnergy(); + nonbonded->setUseDispersionCorrection(true); + context.reinitialize(); + context.setPositions(positions); + energy1 = context.getState(State::Energy).getPotentialEnergy(); + term1 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 12)/pow(cutoff, 9))/9; + term2 = ((numType1*(numType1+1))/2)*(0.5*pow(1.1, 6)/pow(cutoff, 3))/3; + term1 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 12)/pow(cutoff, 9))/9; + term2 += ((numType2*(numType2+1))/2)*(1*pow(1.0, 6)/pow(cutoff, 3))/3; + double combinedSigma = 0.5*(1+1.1); + double combinedEpsilon = sqrt(1*0.5); + term1 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 12)/pow(cutoff, 9))/9; + term2 += (numType1*numType2)*(combinedEpsilon*pow(combinedSigma, 6)/pow(cutoff, 3))/3; + term1 /= (numParticles*(numParticles+1))/2; + term2 /= (numParticles*(numParticles+1))/2; + expected = 8*M_PI*numParticles*numParticles*(term1-term2)/(boxSize*boxSize*boxSize); + ASSERT_EQUAL_TOL(expected, energy1-energy2, 1e-4); +} + +void testChangingParameters() { + const int numMolecules = 600; + const int numParticles = numMolecules*2; + const double cutoff = 2.0; + const double boxSize = 20.0; + const double tol = 2e-3; + ReferencePlatform reference; + System system; + for (int i = 0; i < numParticles; i++) + system.addParticle(1.0); + NonbondedForce* nonbonded = new NonbondedForce(); + vector positions(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numMolecules; i++) { + if (i < numMolecules/2) { + nonbonded->addParticle(-1.0, 0.2, 0.1); + nonbonded->addParticle(1.0, 0.1, 0.1); + } + else { + nonbonded->addParticle(-1.0, 0.2, 0.2); + nonbonded->addParticle(1.0, 0.1, 0.2); + } + positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt)); + positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); + system.addConstraint(2*i, 2*i+1, 1.0); + nonbonded->addException(2*i, 2*i+1, 0.0, 0.15, 0.0); + } + nonbonded->setNonbondedMethod(NonbondedForce::PME); + nonbonded->setCutoffDistance(cutoff); + system.addForce(nonbonded); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + + // See if the forces and energies match the Reference platform. + + VerletIntegrator integrator1(0.01); + VerletIntegrator integrator2(0.01); + Context context(system, integrator1, platform); + Context referenceContext(system, integrator2, reference); + context.setPositions(positions); + referenceContext.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + State referenceState = referenceContext.getState(State::Forces | State::Energy); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state.getForces()[i], referenceState.getForces()[i], tol); + ASSERT_EQUAL_TOL(state.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); + + // Now modify parameters and see if they still agree. + + for (int i = 0; i < numParticles; i += 5) { + double charge, sigma, epsilon; + nonbonded->getParticleParameters(i, charge, sigma, epsilon); + nonbonded->setParticleParameters(i, 1.5*charge, 1.1*sigma, 1.7*epsilon); + } + nonbonded->updateParametersInContext(context); + nonbonded->updateParametersInContext(referenceContext); + state = context.getState(State::Forces | State::Energy); + referenceState = referenceContext.getState(State::Forces | State::Energy); + for (int i = 0; i < numParticles; i++) + ASSERT_EQUAL_VEC(state.getForces()[i], referenceState.getForces()[i], tol); + ASSERT_EQUAL_TOL(state.getPotentialEnergy(), referenceState.getPotentialEnergy(), tol); +} + +void testSwitchingFunction(NonbondedForce::NonbondedMethod method) { + System system; + system.setDefaultPeriodicBoxVectors(Vec3(6, 0, 0), Vec3(0, 6, 0), Vec3(0, 0, 6)); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + NonbondedForce* nonbonded = new NonbondedForce(); + nonbonded->addParticle(0, 1.2, 1); + nonbonded->addParticle(0, 1.4, 2); + nonbonded->setNonbondedMethod(method); + nonbonded->setCutoffDistance(2.0); + nonbonded->setUseSwitchingFunction(true); + nonbonded->setSwitchingDistance(1.5); + nonbonded->setUseDispersionCorrection(false); + system.addForce(nonbonded); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + double eps = SQRT_TWO; + + // Compute the interaction at various distances. + + for (double r = 1.0; r < 2.5; r += 0.1) { + positions[1] = Vec3(r, 0, 0); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + + // See if the energy is correct. + + double x = 1.3/r; + double expectedEnergy = 4.0*eps*(std::pow(x, 12.0)-std::pow(x, 6.0)); + double switchValue; + if (r <= 1.5) + switchValue = 1; + else if (r >= 2.0) + switchValue = 0; + else { + double t = (r-1.5)/0.5; + switchValue = 1+t*t*t*(-10+t*(15-t*6)); + } + ASSERT_EQUAL_TOL(switchValue*expectedEnergy, state.getPotentialEnergy(), TOL); + + // See if the force is the gradient of the energy. + + double delta = 1e-3; + positions[1] = Vec3(r-delta, 0, 0); + context.setPositions(positions); + double e1 = context.getState(State::Energy).getPotentialEnergy(); + positions[1] = Vec3(r+delta, 0, 0); + context.setPositions(positions); + double e2 = context.getState(State::Energy).getPotentialEnergy(); + ASSERT_EQUAL_TOL((e2-e1)/(2*delta), state.getForces()[0][0], 1e-3); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testCoulomb(); + testLJ(); + testExclusionsAnd14(); + testCutoff(); + testCutoff14(); + testPeriodic(); + testTriclinic(); + testLargeSystem(); + testDispersionCorrection(); + testChangingParameters(); + testSwitchingFunction(NonbondedForce::CutoffNonPeriodic); + testSwitchingFunction(NonbondedForce::PME); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestPeriodicTorsionForce.h b/tests/TestPeriodicTorsionForce.h new file mode 100644 index 0000000000000000000000000000000000000000..1e73cf41ffcf02121d600a93d8dba2f160a43477 --- /dev/null +++ b/tests/TestPeriodicTorsionForce.h @@ -0,0 +1,105 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/PeriodicTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testPeriodicTorsions() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + PeriodicTorsionForce* forceField = new PeriodicTorsionForce(); + forceField->addTorsion(0, 1, 2, 3, 2, PI_M/3, 1.1); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(4); + positions[0] = Vec3(0, 1, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + positions[3] = Vec3(1, 0, 2); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double torque = -2*1.1*std::sin(2*PI_M/3); + ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + ASSERT_EQUAL_TOL(1.1*(1+std::cos(2*PI_M/3)), state.getPotentialEnergy(), TOL); + } + + // Try changing the torsion parameters and make sure it's still correct. + + forceField->setTorsionParameters(0, 0, 1, 2, 3, 3, PI_M/3.2, 1.3); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double dtheta = (3*PI_M/2)-(PI_M/3.2); + double torque = -3*1.3*std::sin(dtheta); + ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, 0), forces[3], TOL); + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + ASSERT_EQUAL_TOL(1.3*(1+std::cos(dtheta)), state.getPotentialEnergy(), TOL); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testPeriodicTorsions(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestRBTorsionForce.h b/tests/TestRBTorsionForce.h new file mode 100644 index 0000000000000000000000000000000000000000..eea5067ce14c8c5029712cb38eb2b17d322d4c36 --- /dev/null +++ b/tests/TestRBTorsionForce.h @@ -0,0 +1,124 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/RBTorsionForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testRBTorsions() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + VerletIntegrator integrator(0.01); + RBTorsionForce* forceField = new RBTorsionForce(); + forceField->addTorsion(0, 1, 2, 3, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6); + system.addForce(forceField); + ASSERT(!forceField->usesPeriodicBoundaryConditions()); + ASSERT(!system.usesPeriodicBoundaryConditions()); + Context context(system, integrator, platform); + vector positions(4); + positions[0] = Vec3(0, 1, 0); + positions[1] = Vec3(0, 0, 0); + positions[2] = Vec3(1, 0, 0); + positions[3] = Vec3(1, 1, 1); + context.setPositions(positions); + State state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double psi = 0.25*PI_M - PI_M; + double torque = 0.0; + for (int i = 1; i < 6; ++i) { + double c = 0.1*(i+1); + torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); + } + ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + double energy = 0.0; + for (int i = 0; i < 6; ++i) { + double c = 0.1*(i+1); + energy += c*std::pow(std::cos(psi), i); + } + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + } + + // Try changing the torsion parameters and make sure it's still correct. + + forceField->setTorsionParameters(0, 0, 1, 2, 3, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66); + forceField->updateParametersInContext(context); + state = context.getState(State::Forces | State::Energy); + { + const vector& forces = state.getForces(); + double psi = 0.25*PI_M - PI_M; + double torque = 0.0; + for (int i = 1; i < 6; ++i) { + double c = 0.11*(i+1); + torque += -c*i*std::pow(std::cos(psi), i-1)*std::sin(psi); + } + ASSERT_EQUAL_VEC(Vec3(0, 0, torque), forces[0], TOL); + ASSERT_EQUAL_VEC(Vec3(0, 0.5*torque, -0.5*torque), forces[3], TOL); + ASSERT_EQUAL_VEC(Vec3(forces[0][0]+forces[1][0]+forces[2][0]+forces[3][0], forces[0][1]+forces[1][1]+forces[2][1]+forces[3][1], forces[0][2]+forces[1][2]+forces[2][2]+forces[3][2]), Vec3(0, 0, 0), TOL); + double energy = 0.0; + for (int i = 0; i < 6; ++i) { + double c = 0.11*(i+1); + energy += c*std::pow(std::cos(psi), i); + } + ASSERT_EQUAL_TOL(energy, state.getPotentialEnergy(), TOL); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testRBTorsions(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestSettle.h b/tests/TestSettle.h new file mode 100644 index 0000000000000000000000000000000000000000..3e1818ff15f1d163716b13efe9ec789778a96ae9 --- /dev/null +++ b/tests/TestSettle.h @@ -0,0 +1,114 @@ + +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/LangevinIntegrator.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +void testConstraints() { + const int numMolecules = 10; + const int numParticles = numMolecules*3; + const int numConstraints = numMolecules*3; + const double temp = 100.0; + System system; + LangevinIntegrator integrator(temp, 2.0, 0.001); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numMolecules; ++i) { + system.addParticle(16.0); + system.addParticle(1.0); + system.addParticle(1.0); + forceField->addParticle(-0.82, 0.317, 0.65); + forceField->addParticle(0.41, 1.0, 0.0); + forceField->addParticle(0.41, 1.0, 0.0); + system.addConstraint(i*3, i*3+1, 0.1); + system.addConstraint(i*3, i*3+2, 0.1); + system.addConstraint(i*3+1, i*3+2, 0.163); + } + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numMolecules; ++i) { + positions[i*3] = Vec3((i%4)*0.4, (i/4)*0.4, 0); + positions[i*3+1] = positions[i*3]+Vec3(0.1, 0, 0); + positions[i*3+2] = positions[i*3]+Vec3(-0.03333, 0.09428, 0); + velocities[i*3] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + velocities[i*3+1] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + velocities[i*3+2] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + for (int i = 0; i < 1000; ++i) { + integrator.step(1); + State state = context.getState(State::Positions | State::Forces); + for (int j = 0; j < numConstraints; ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 1e-5); + } + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testConstraints(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestVariableLangevinIntegrator.h b/tests/TestVariableLangevinIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..2cf8282cd146b8cfa950d535c69d9b7a40cee7a7 --- /dev/null +++ b/tests/TestVariableLangevinIntegrator.h @@ -0,0 +1,334 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VariableLangevinIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + VariableLangevinIntegrator integrator(0, 0.1, 1e-6); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // This is simply a damped harmonic oscillator, so compare it to the analytical solution. + + double freq = std::sqrt(1-0.05*0.05); + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Velocities); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::exp(-0.05*time)*std::cos(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); + double expectedSpeed = -0.5*std::exp(-0.05*time)*(0.05*std::cos(freq*time)+freq*std::sin(freq*time)); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); + integrator.step(1); + } + + // Now set the friction to a tiny value and see if it conserves energy. + + integrator.setFriction(5e-5); + context.setPositions(positions); + State state = context.getState(State::Energy); + double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); + for (int i = 0; i < 1000; ++i) { + state = context.getState(State::Energy); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); + integrator.step(1); + } +} + +void testTemperature() { + const int numParticles = 8; + const double temp = 100.0; + System system; + VariableLangevinIntegrator integrator(temp, 5.0, 5e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + for (int i = 0; i < numParticles; ++i) + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Let it equilibrate. + + integrator.step(5000); + + // Now run it for a while and see if the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < 5000; ++i) { + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + integrator.step(5); + } + ke /= 5000; + double expected = 0.5*numParticles*3*BOLTZ*temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.1); +} + +void testConstraints() { + const int numParticles = 8; + const double temp = 100.0; + System system; + VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); + integrator.setConstraintTolerance(1e-5); + integrator.setRandomNumberSeed(0); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + for (int i = 0; i < numParticles-1; ++i) + system.addConstraint(i, i+1, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions); + for (int j = 0; j < numParticles-1; ++j) { + Vec3 p1 = state.getPositions()[j]; + Vec3 p2 = state.getPositions()[j+1]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(1.0, dist, 2e-5); + } + integrator.step(1); + } +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + VariableLangevinIntegrator integrator(300.0, 2.0, 0.01); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +void testRandomSeed() { + const int numParticles = 8; + const double temp = 100.0; + System system; + VariableLangevinIntegrator integrator(temp, 2.0, 1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(2.0); + forceField->addParticle((i%2 == 0 ? 1.0 : -1.0), 1.0, 5.0); + } + system.addForce(forceField); + vector positions(numParticles); + vector velocities(numParticles); + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3((i%2 == 0 ? 2 : -2), (i%4 < 2 ? 2 : -2), (i < 4 ? 2 : -2)); + velocities[i] = Vec3(0, 0, 0); + } + + // Try twice with the same random seed. + + integrator.setRandomNumberSeed(5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state1 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state2 = context.getState(State::Positions); + + // Try twice with a different random seed. + + integrator.setRandomNumberSeed(10); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state3 = context.getState(State::Positions); + context.reinitialize(); + context.setPositions(positions); + context.setVelocities(velocities); + integrator.step(10); + State state4 = context.getState(State::Positions); + + // Compare the results. + + for (int i = 0; i < numParticles; i++) { + for (int j = 0; j < 3; j++) { + ASSERT(state1.getPositions()[i][j] == state2.getPositions()[i][j]); + ASSERT(state3.getPositions()[i][j] == state4.getPositions()[i][j]); + ASSERT(state1.getPositions()[i][j] != state3.getPositions()[i][j]); + } + } +} + +void testArgonBox() { + const int gridSize = 8; + const double mass = 40.0; // Ar atomic mass + const double temp = 120.0; // K + const double epsilon = BOLTZ * temp; // L-J well depth for Ar + const double sigma = 0.34; // L-J size for Ar in nm + const double density = 0.8; // atoms / sigma^3 + double cellSize = sigma / pow(density, 0.333); + double boxSize = gridSize * cellSize; + double cutoff = 2.0 * sigma; + + // Create a box of argon atoms. + + System system; + NonbondedForce* nonbonded = new NonbondedForce(); + vector positions; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + const Vec3 half(0.5, 0.5, 0.5); + int numParticles = 0; + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + for (int k = 0; k < gridSize; k++) { + system.addParticle(mass); + nonbonded->addParticle(0, sigma, epsilon); + positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); + ++numParticles; + } + } + } + + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + nonbonded->setCutoffDistance(cutoff); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(nonbonded); + + VariableLangevinIntegrator integrator(temp, 6.0, 1e-4); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Equilibrate. + + integrator.stepTo(2.0); + + // Make sure the temperature is correct. + + double ke = 0.0; + for (int i = 0; i < 1000; ++i) { + double t = 2.0 + 0.02 * (i + 1); + integrator.stepTo(t); + State state = context.getState(State::Energy); + ke += state.getKineticEnergy(); + } + ke /= 1000; + double expected = 1.5 * numParticles * BOLTZ * temp; + ASSERT_USUALLY_EQUAL_TOL(expected, ke, 0.01); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testTemperature(); + testConstraints(); + testConstrainedMasslessParticles(); + testRandomSeed(); + testArgonBox(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestVariableVerletIntegrator.h b/tests/TestVariableVerletIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..133be36e211cc2f27573a542607e780ff2e3ec6e --- /dev/null +++ b/tests/TestVariableVerletIntegrator.h @@ -0,0 +1,313 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VariableVerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + VariableVerletIntegrator integrator(1e-6); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // This is simply a harmonic oscillator, so compare it to the analytical solution. + + const double freq = 1.0; + State state = context.getState(State::Energy); + const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); + for (int i = 0; i < 1000; ++i) { + state = context.getState(State::Positions | State::Velocities | State::Energy); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::cos(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); + double expectedSpeed = -0.5*freq*std::sin(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.05); + integrator.step(1); + } + ASSERT(state.getTime() > 1.0); +} + +void testConstraints() { + const int numParticles = 8; + const int numConstraints = 5; + System system; + VariableVerletIntegrator integrator(1e-5); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i%2 == 0 ? 5.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(1, 2, 1.0); + system.addConstraint(2, 3, 1.0); + system.addConstraint(4, 5, 1.0); + system.addConstraint(6, 7, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); + for (int j = 0; j < numConstraints; ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 1e-4); + } + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } + double finalTime = context.getState(State::Positions).getTime(); + ASSERT(finalTime > 0.1); + + // Now try the stepTo() method. + + finalTime += 0.5; + integrator.stepTo(finalTime); + ASSERT_EQUAL(finalTime, context.getState(State::Positions).getTime()); +} + +void testConstrainedClusters() { + const int numParticles = 7; + System system; + VariableVerletIntegrator integrator(1e-5); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i > 1 ? 1.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(0, 2, 1.0); + system.addConstraint(0, 3, 1.0); + system.addConstraint(0, 4, 1.0); + system.addConstraint(1, 5, 1.0); + system.addConstraint(1, 6, 1.0); + system.addConstraint(2, 3, sqrt(2.0)); + system.addConstraint(2, 4, sqrt(2.0)); + system.addConstraint(3, 4, sqrt(2.0)); + system.addConstraint(5, 6, sqrt(2.0)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(-1, 0, 0); + positions[3] = Vec3(0, 1, 0); + positions[4] = Vec3(0, 0, 1); + positions[5] = Vec3(2, 0, 0); + positions[6] = Vec3(1, 1, 0); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); + for (int j = 0; j < system.getNumConstraints(); ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 2e-5); + } + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } + ASSERT(context.getState(State::Positions).getTime() > 0.1); +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + VariableVerletIntegrator integrator(0.01); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +void testArgonBox() { + const int gridSize = 8; + const double mass = 40.0; // Ar atomic mass + const double temp = 120.0; // K + const double epsilon = BOLTZ * temp; // L-J well depth for Ar + const double sigma = 0.34; // L-J size for Ar in nm + const double density = 0.8; // atoms / sigma^3 + double cellSize = sigma / pow(density, 0.333); + double boxSize = gridSize * cellSize; + double cutoff = 2.0 * sigma; + + // Create a box of argon atoms. + + System system; + NonbondedForce* nonbonded = new NonbondedForce(); + vector positions; + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + const Vec3 half(0.5, 0.5, 0.5); + for (int i = 0; i < gridSize; i++) { + for (int j = 0; j < gridSize; j++) { + for (int k = 0; k < gridSize; k++) { + system.addParticle(mass); + nonbonded->addParticle(0, sigma, epsilon); + positions.push_back((Vec3(i, j, k) + half + Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt))*0.1) * cellSize); + } + } + } + + nonbonded->setNonbondedMethod(NonbondedForce::CutoffPeriodic); + nonbonded->setCutoffDistance(cutoff); + system.setDefaultPeriodicBoxVectors(Vec3(boxSize, 0, 0), Vec3(0, boxSize, 0), Vec3(0, 0, boxSize)); + system.addForce(nonbonded); + + VariableVerletIntegrator integrator(1e-5); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(temp); + + // Equilibrate. + + integrator.stepTo(1.0); + + // Simulate it and see whether energy remains constant. + + State state0 = context.getState(State::Energy); + double initialEnergy = state0.getKineticEnergy() + state0.getPotentialEnergy(); + for (int i = 0; i < 20; i++) { + double t = 1.0 + 0.05*(i+1); + integrator.stepTo(t); + State state = context.getState(State::Energy); + double energy = state.getKineticEnergy() + state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + } +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testConstraints(); + testConstrainedClusters(); + testConstrainedMasslessParticles(); + testArgonBox(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} + diff --git a/tests/TestVectorize.cpp b/tests/TestVectorize.cpp index 04fcd91b6916ebf86c3d00535befb6ac2f0c0944..66cfc3c3e5665071cbf8da2921508d3d5d770895 100644 --- a/tests/TestVectorize.cpp +++ b/tests/TestVectorize.cpp @@ -149,6 +149,8 @@ void testMathFunctions() { ASSERT_VEC4_EQUAL(max(f1, f2), 1.1, 1.9, 1.3, -3.8); ASSERT_VEC4_EQUAL(sqrt(fvec4(1.5, 3.1, 4.0, 15.0)), sqrt(1.5), sqrt(3.1), sqrt(4.0), sqrt(15.0)); ASSERT_VEC4_EQUAL(rsqrt(fvec4(1.5, 3.1, 4.0, 15.0)), 1.0/sqrt(1.5), 1.0/sqrt(3.1), 1.0/sqrt(4.0), 1.0/sqrt(15.0)); + ASSERT_VEC4_EQUAL(exp(fvec4(-2.1, -0.5, 1.5, 3.1)), expf(-2.1), expf(-0.5), expf(1.5), expf(3.1)); + ASSERT_VEC4_EQUAL(log(fvec4(1.5, 3.1, 4.0, 15.0)), logf(1.5), logf(3.1), logf(4.0), logf(15.0)); ASSERT_EQUAL_TOL(f1[0]*f2[0]+f1[1]*f2[1]+f1[2]*f2[2], dot3(f1, f2), 1e-6); ASSERT_EQUAL_TOL(f1[0]*f2[0]+f1[1]*f2[1]+f1[2]*f2[2]+f1[3]*f2[3], dot4(f1, f2), 1e-6); ASSERT(any(f1 > 0.5)); diff --git a/tests/TestVerletIntegrator.h b/tests/TestVerletIntegrator.h new file mode 100644 index 0000000000000000000000000000000000000000..8b1271009d9057cdf32b1833491bd77225b4b908 --- /dev/null +++ b/tests/TestVerletIntegrator.h @@ -0,0 +1,246 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2008-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/HarmonicBondForce.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "SimTKOpenMMRealType.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +const double TOL = 1e-5; + +void testSingleBond() { + System system; + system.addParticle(2.0); + system.addParticle(2.0); + VerletIntegrator integrator(0.01); + HarmonicBondForce* forceField = new HarmonicBondForce(); + forceField->addBond(0, 1, 1.5, 1); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + + // This is simply a harmonic oscillator, so compare it to the analytical solution. + + const double freq = 1.0; + State state = context.getState(State::Energy); + const double initialEnergy = state.getKineticEnergy()+state.getPotentialEnergy(); + for (int i = 0; i < 1000; ++i) { + state = context.getState(State::Positions | State::Velocities | State::Energy); + double time = state.getTime(); + double expectedDist = 1.5+0.5*std::cos(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedDist, 0, 0), state.getPositions()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedDist, 0, 0), state.getPositions()[1], 0.02); + double expectedSpeed = -0.5*freq*std::sin(freq*time); + ASSERT_EQUAL_VEC(Vec3(-0.5*expectedSpeed, 0, 0), state.getVelocities()[0], 0.02); + ASSERT_EQUAL_VEC(Vec3(0.5*expectedSpeed, 0, 0), state.getVelocities()[1], 0.02); + double energy = state.getKineticEnergy()+state.getPotentialEnergy(); + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } + ASSERT_EQUAL_TOL(10.0, context.getState(0).getTime(), 1e-5); +} + +void testConstraints() { + const int numParticles = 8; + const int numConstraints = 5; + System system; + VerletIntegrator integrator(0.001); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i%2 == 0 ? 5.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(1, 2, 1.0); + system.addConstraint(2, 3, 1.0); + system.addConstraint(4, 5, 1.0); + system.addConstraint(6, 7, 1.0); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) { + positions[i] = Vec3(i/2, (i+1)/2, 0); + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + } + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); + for (int j = 0; j < numConstraints; ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 1e-4); + } + double energy = state.getPotentialEnergy()+state.getKineticEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } +} + +void testConstrainedClusters() { + const int numParticles = 7; + System system; + VerletIntegrator integrator(0.001); + integrator.setConstraintTolerance(1e-5); + NonbondedForce* forceField = new NonbondedForce(); + for (int i = 0; i < numParticles; ++i) { + system.addParticle(i > 1 ? 1.0 : 10.0); + forceField->addParticle((i%2 == 0 ? 0.2 : -0.2), 0.5, 5.0); + } + system.addConstraint(0, 1, 1.0); + system.addConstraint(0, 2, 1.0); + system.addConstraint(0, 3, 1.0); + system.addConstraint(0, 4, 1.0); + system.addConstraint(1, 5, 1.0); + system.addConstraint(1, 6, 1.0); + system.addConstraint(2, 3, sqrt(2.0)); + system.addConstraint(2, 4, sqrt(2.0)); + system.addConstraint(3, 4, sqrt(2.0)); + system.addConstraint(5, 6, sqrt(2.0)); + system.addForce(forceField); + Context context(system, integrator, platform); + vector positions(numParticles); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(-1, 0, 0); + positions[3] = Vec3(0, 1, 0); + positions[4] = Vec3(0, 0, 1); + positions[5] = Vec3(2, 0, 0); + positions[6] = Vec3(1, 1, 0); + vector velocities(numParticles); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + + for (int i = 0; i < numParticles; ++i) + velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5); + context.setPositions(positions); + context.setVelocities(velocities); + + // Simulate it and see whether the constraints remain satisfied. + + double initialEnergy = 0.0; + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Energy | State::Velocities | State::Forces); + for (int j = 0; j < system.getNumConstraints(); ++j) { + int particle1, particle2; + double distance; + system.getConstraintParameters(j, particle1, particle2, distance); + Vec3 p1 = state.getPositions()[particle1]; + Vec3 p2 = state.getPositions()[particle2]; + double dist = std::sqrt((p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1])+(p1[2]-p2[2])*(p1[2]-p2[2])); + ASSERT_EQUAL_TOL(distance, dist, 2e-5); + } + double energy = state.getPotentialEnergy()+state.getKineticEnergy(); + if (i == 1) + initialEnergy = energy; + else if (i > 1) + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + integrator.step(1); + } +} + +void testConstrainedMasslessParticles() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + system.addConstraint(0, 1, 1.5); + vector positions(2); + positions[0] = Vec3(-1, 0, 0); + positions[1] = Vec3(1, 0, 0); + VerletIntegrator integrator(0.01); + bool failed = false; + try { + // This should throw an exception. + + Context context(system, integrator, platform); + } + catch (exception& ex) { + failed = true; + } + ASSERT(failed); + + // Now make both particles massless, which should work. + + system.setParticleMass(1, 0.0); + Context context(system, integrator, platform); + context.setPositions(positions); + context.setVelocitiesToTemperature(300.0); + integrator.step(1); + State state = context.getState(State::Velocities); + ASSERT_EQUAL(0.0, state.getVelocities()[0][0]); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testSingleBond(); + testConstraints(); + testConstrainedClusters(); + testConstrainedMasslessParticles(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/tests/TestVirtualSites.h b/tests/TestVirtualSites.h new file mode 100644 index 0000000000000000000000000000000000000000..725ced5eec20f154cac6fb89e83e3cdefbfbba87 --- /dev/null +++ b/tests/TestVirtualSites.h @@ -0,0 +1,475 @@ +/* -------------------------------------------------------------------------- * + * OpenMM * + * -------------------------------------------------------------------------- * + * This is part of the OpenMM molecular simulation toolkit originating from * + * Simbios, the NIH National Center for Physics-Based Simulation of * + * Biological Structures at Stanford, funded under the NIH Roadmap for * + * Medical Research, grant U54 GM072970. See https://simtk.org. * + * * + * Portions copyright (c) 2012-2015 Stanford University and the Authors. * + * Authors: Peter Eastman * + * Contributors: * + * * + * Permission is hereby granted, free of charge, to any person obtaining a * + * copy of this software and associated documentation files (the "Software"), * + * to deal in the Software without restriction, including without limitation * + * the rights to use, copy, modify, merge, publish, distribute, sublicense, * + * and/or sell copies of the Software, and to permit persons to whom the * + * Software is furnished to do so, subject to the following conditions: * + * * + * The above copyright notice and this permission notice shall be included in * + * all copies or substantial portions of the Software. * + * * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * + * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE * + * USE OR OTHER DEALINGS IN THE SOFTWARE. * + * -------------------------------------------------------------------------- */ + +#include "openmm/internal/AssertionUtilities.h" +#include "openmm/Context.h" +#include "openmm/CustomBondForce.h" +#include "openmm/CustomExternalForce.h" +#include "openmm/LangevinIntegrator.h" +#include "openmm/NonbondedForce.h" +#include "openmm/System.h" +#include "openmm/VerletIntegrator.h" +#include "openmm/VirtualSite.h" +#include "sfmt/SFMT.h" +#include +#include + +using namespace OpenMM; +using namespace std; + +/** + * Check that massless particles are handled correctly. + */ +void testMasslessParticle() { + System system; + system.addParticle(0.0); + system.addParticle(1.0); + CustomBondForce* bonds = new CustomBondForce("-1/r"); + system.addForce(bonds); + vector params; + bonds->addBond(0, 1, params); + VerletIntegrator integrator(0.002); + Context context(system, integrator, platform); + vector positions(2); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + vector velocities(2); + velocities[0] = Vec3(0, 0, 0); + velocities[1] = Vec3(0, 1, 0); + context.setVelocities(velocities); + + // The second particle should move in a circular orbit around the first one. + // Compare it to the analytical solution. + + for (int i = 0; i < 1000; ++i) { + State state = context.getState(State::Positions | State::Velocities | State::Forces); + double time = state.getTime(); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getPositions()[0], 0.0); + ASSERT_EQUAL_VEC(Vec3(0, 0, 0), state.getVelocities()[0], 0.0); + ASSERT_EQUAL_VEC(Vec3(cos(time), sin(time), 0), state.getPositions()[1], 0.01); + ASSERT_EQUAL_VEC(Vec3(-sin(time), cos(time), 0), state.getVelocities()[1], 0.01); + integrator.step(1); + } +} + +/** + * Test a TwoParticleAverageSite virtual site. + */ +void testTwoParticleAverage() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.8, 0.2)); + CustomExternalForce* forceField = new CustomExternalForce("-a*x"); + system.addForce(forceField); + forceField->addPerParticleParameter("a"); + vector params(1); + params[0] = 0.1; + forceField->addParticle(0, params); + params[0] = 0.2; + forceField->addParticle(1, params); + params[0] = 0.3; + forceField->addParticle(2, params); + LangevinIntegrator integrator(300.0, 0.1, 0.002); + Context context(system, integrator, platform); + vector positions(3); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + context.setPositions(positions); + context.applyConstraints(0.0001); + for (int i = 0; i < 1000; i++) { + State state = context.getState(State::Positions | State::Forces); + const vector& pos = state.getPositions(); + ASSERT_EQUAL_VEC(pos[0]*0.8+pos[1]*0.2, pos[2], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.1+0.3*0.8, 0, 0), state.getForces()[0], 1e-4); + ASSERT_EQUAL_VEC(Vec3(0.2+0.3*0.2, 0, 0), state.getForces()[1], 1e-4); + integrator.step(1); + } +} + +/** + * Test a ThreeParticleAverageSite virtual site. + */ +void testThreeParticleAverage() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(3, new ThreeParticleAverageSite(0, 1, 2, 0.2, 0.3, 0.5)); + CustomExternalForce* forceField = new CustomExternalForce("-a*x"); + system.addForce(forceField); + forceField->addPerParticleParameter("a"); + vector params(1); + params[0] = 0.1; + forceField->addParticle(0, params); + params[0] = 0.2; + forceField->addParticle(1, params); + params[0] = 0.3; + forceField->addParticle(2, params); + params[0] = 0.4; + forceField->addParticle(3, params); + LangevinIntegrator integrator(300.0, 0.1, 0.002); + Context context(system, integrator, platform); + vector positions(4); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(0, 1, 0); + context.setPositions(positions); + context.applyConstraints(0.0001); + for (int i = 0; i < 1000; i++) { + State state = context.getState(State::Positions | State::Forces); + const vector& pos = state.getPositions(); + ASSERT_EQUAL_VEC(pos[0]*0.2+pos[1]*0.3+pos[2]*0.5, pos[3], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.1+0.4*0.2, 0, 0), state.getForces()[0], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.2+0.4*0.3, 0, 0), state.getForces()[1], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.3+0.4*0.5, 0, 0), state.getForces()[2], 1e-5); + integrator.step(1); + } +} + +/** + * Test an OutOfPlaneSite virtual site. + */ +void testOutOfPlane() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(3, new OutOfPlaneSite(0, 1, 2, 0.3, 0.4, 0.5)); + CustomExternalForce* forceField = new CustomExternalForce("-a*x"); + system.addForce(forceField); + forceField->addPerParticleParameter("a"); + vector params(1); + params[0] = 0.1; + forceField->addParticle(0, params); + params[0] = 0.2; + forceField->addParticle(1, params); + params[0] = 0.3; + forceField->addParticle(2, params); + params[0] = 0.4; + forceField->addParticle(3, params); + LangevinIntegrator integrator(300.0, 0.1, 0.002); + Context context(system, integrator, platform); + vector positions(4); + positions[0] = Vec3(0, 0, 0); + positions[1] = Vec3(1, 0, 0); + positions[2] = Vec3(0, 1, 0); + context.setPositions(positions); + context.applyConstraints(0.0001); + for (int i = 0; i < 1000; i++) { + State state = context.getState(State::Positions | State::Forces); + const vector& pos = state.getPositions(); + Vec3 v12 = pos[1]-pos[0]; + Vec3 v13 = pos[2]-pos[0]; + Vec3 cross = v12.cross(v13); + ASSERT_EQUAL_VEC(pos[0]+v12*0.3+v13*0.4+cross*0.5, pos[3], 1e-5); + const vector& f = state.getForces(); + ASSERT_EQUAL_VEC(Vec3(0.1+0.2+0.3+0.4, 0, 0), f[0]+f[1]+f[2], 1e-5); + Vec3 f2(0.4*0.3, 0.4*0.5*v13[2], -0.4*0.5*v13[1]); + Vec3 f3(0.4*0.4, -0.4*0.5*v12[2], 0.4*0.5*v12[1]); + ASSERT_EQUAL_VEC(Vec3(0.1+0.4, 0, 0)-f2-f3, f[0], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.2, 0, 0)+f2, f[1], 1e-5); + ASSERT_EQUAL_VEC(Vec3(0.3, 0, 0)+f3, f[2], 1e-5); + integrator.step(1); + } +} + +/** + * Test a LocalCoordinatesSite virtual site. + */ +void testLocalCoordinates() { + const Vec3 originWeights(0.2, 0.3, 0.5); + const Vec3 xWeights(-1.0, 0.5, 0.5); + const Vec3 yWeights(0.0, -1.0, 1.0); + const Vec3 localPosition(0.4, 0.3, 0.2); + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(3, new LocalCoordinatesSite(0, 1, 2, originWeights, xWeights, yWeights, localPosition)); + CustomExternalForce* forceField = new CustomExternalForce("2*x^2+3*y^2+4*z^2"); + system.addForce(forceField); + vector params; + forceField->addParticle(0, params); + forceField->addParticle(1, params); + forceField->addParticle(2, params); + forceField->addParticle(3, params); + LangevinIntegrator integrator(300.0, 0.1, 0.002); + Context context(system, integrator, platform); + vector positions(4), positions2(4), positions3(4); + OpenMM_SFMT::SFMT sfmt; + init_gen_rand(0, sfmt); + for (int i = 0; i < 100; i++) { + // Set the particles at random positions. + + Vec3 xdir, ydir, zdir; + do { + for (int j = 0; j < 3; j++) + positions[j] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt)); + xdir = positions[0]*xWeights[0] + positions[1]*xWeights[1] + positions[2]*xWeights[2]; + ydir = positions[0]*yWeights[0] + positions[1]*yWeights[1] + positions[2]*yWeights[2]; + zdir = xdir.cross(ydir); + if (sqrt(xdir.dot(xdir)) > 0.1 && sqrt(ydir.dot(ydir)) > 0.1 && sqrt(zdir.dot(zdir)) > 0.1) + break; // These positions give a reasonable coordinate system. + } while (true); + context.setPositions(positions); + context.applyConstraints(0.0001); + + // See if the virtual site is positioned correctly. + + State state = context.getState(State::Positions | State::Forces); + const vector& pos = state.getPositions(); + Vec3 origin = pos[0]*originWeights[0] + pos[1]*originWeights[1] + pos[2]*originWeights[2]; + xdir /= sqrt(xdir.dot(xdir)); + zdir /= sqrt(zdir.dot(zdir)); + ydir = zdir.cross(xdir); + ASSERT_EQUAL_VEC(origin+xdir*localPosition[0]+ydir*localPosition[1]+zdir*localPosition[2], pos[3], 1e-5); + + // Take a small step in the direction of the energy gradient and see whether the potential energy changes by the expected amount. + + double norm = 0.0; + for (int i = 0; i < 3; ++i) { + Vec3 f = state.getForces()[i]; + norm += f[0]*f[0] + f[1]*f[1] + f[2]*f[2]; + } + norm = std::sqrt(norm); + const double delta = 1e-2; + double step = 0.5*delta/norm; + for (int i = 0; i < 3; ++i) { + Vec3 p = positions[i]; + Vec3 f = state.getForces()[i]; + positions2[i] = Vec3(p[0]-f[0]*step, p[1]-f[1]*step, p[2]-f[2]*step); + positions3[i] = Vec3(p[0]+f[0]*step, p[1]+f[1]*step, p[2]+f[2]*step); + } + context.setPositions(positions2); + context.applyConstraints(0.0001); + State state2 = context.getState(State::Energy); + context.setPositions(positions3); + context.applyConstraints(0.0001); + State state3 = context.getState(State::Energy); + ASSERT_EQUAL_TOL(norm, (state2.getPotentialEnergy()-state3.getPotentialEnergy())/delta, 1e-3) + } +} + +/** + * Make sure that energy, linear momentum, and angular momentum are all conserved + * when using virtual sites. + */ +void testConservationLaws() { + System system; + NonbondedForce* forceField = new NonbondedForce(); + system.addForce(forceField); + vector positions; + + // Create a linear molecule with a TwoParticleAverage virtual site. + + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(2, new TwoParticleAverageSite(0, 1, 0.4, 0.6)); + system.addConstraint(0, 1, 2.0); + for (int i = 0; i < 3; i++) { + forceField->addParticle(0, 1, 10); + for (int j = 0; j < i; j++) + forceField->addException(i, j, 0, 1, 0); + } + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(2, 0, 0)); + positions.push_back(Vec3()); + + // Create a planar molecule with a ThreeParticleAverage virtual site. + + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(6, new ThreeParticleAverageSite(3, 4, 5, 0.3, 0.5, 0.2)); + system.addConstraint(3, 4, 1.0); + system.addConstraint(3, 5, 1.0); + system.addConstraint(4, 5, sqrt(2.0)); + for (int i = 0; i < 4; i++) { + forceField->addParticle(0, 1, 10); + for (int j = 0; j < i; j++) + forceField->addException(i+3, j+3, 0, 1, 0); + } + positions.push_back(Vec3(0, 0, 1)); + positions.push_back(Vec3(1, 0, 1)); + positions.push_back(Vec3(0, 1, 1)); + positions.push_back(Vec3()); + + // Create a tetrahedral molecule with an OutOfPlane virtual site. + + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(10, new OutOfPlaneSite(7, 8, 9, 0.3, 0.5, 0.2)); + system.addConstraint(7, 8, 1.0); + system.addConstraint(7, 9, 1.0); + system.addConstraint(8, 9, sqrt(2.0)); + for (int i = 0; i < 4; i++) { + forceField->addParticle(0, 1, 10); + for (int j = 0; j < i; j++) + forceField->addException(i+7, j+7, 0, 1, 0); + } + positions.push_back(Vec3(1, 0, -1)); + positions.push_back(Vec3(2, 0, -1)); + positions.push_back(Vec3(1, 1, -1)); + positions.push_back(Vec3()); + + // Create a molecule with a LocalCoordinatesSite virtual site. + + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(0.0); + system.setVirtualSite(14, new LocalCoordinatesSite(11, 12, 13, Vec3(0.3, 0.3, 0.4), Vec3(1.0, -0.5, -0.5), Vec3(0, -1.0, 1.0), Vec3(0.2, 0.2, 1.0))); + system.addConstraint(11, 12, 1.0); + system.addConstraint(11, 13, 1.0); + system.addConstraint(12, 13, sqrt(2.0)); + for (int i = 0; i < 4; i++) { + forceField->addParticle(0, 1, 10); + for (int j = 0; j < i; j++) + forceField->addException(i+11, j+11, 0, 1, 0); + } + positions.push_back(Vec3(1, 2, 0)); + positions.push_back(Vec3(2, 2, 0)); + positions.push_back(Vec3(1, 3, 0)); + positions.push_back(Vec3()); + + // Simulate it and check conservation laws. + + VerletIntegrator integrator(0.002); + Context context(system, integrator, platform); + context.setPositions(positions); + context.applyConstraints(0.0001); + int numParticles = system.getNumParticles(); + double initialEnergy; + Vec3 initialMomentum, initialAngularMomentum; + for (int i = 0; i < 1000; i++) { + State state = context.getState(State::Positions | State::Velocities | State::Forces | State::Energy); + const vector& pos = state.getPositions(); + const vector& vel = state.getVelocities(); + const vector& f = state.getForces(); + double energy = state.getPotentialEnergy(); + for (int j = 0; j < numParticles; j++) { + Vec3 v = vel[j] + f[j]*0.5*integrator.getStepSize(); + energy += 0.5*system.getParticleMass(j)*v.dot(v); + } + if (i == 0) + initialEnergy = energy; + else + ASSERT_EQUAL_TOL(initialEnergy, energy, 0.01); + Vec3 momentum; + for (int j = 0; j < numParticles; j++) + momentum += vel[j]*system.getParticleMass(j); + if (i == 0) + initialMomentum = momentum; + else + ASSERT_EQUAL_VEC(initialMomentum, momentum, 0.02); + Vec3 angularMomentum; + for (int j = 0; j < numParticles; j++) + angularMomentum += pos[j].cross(vel[j])*system.getParticleMass(j); + if (i == 0) + initialAngularMomentum = angularMomentum; + else + ASSERT_EQUAL_VEC(initialAngularMomentum, angularMomentum, 0.05); + integrator.step(1); + } +} + +/** + * Test a System where multiple virtual sites are all calculated from the same particles. + */ +void testOverlappingSites() { + System system; + system.addParticle(1.0); + system.addParticle(1.0); + system.addParticle(1.0); + NonbondedForce* nonbonded = new NonbondedForce(); + system.addForce(nonbonded); + nonbonded->addParticle(1.0, 0.0, 0.0); + nonbonded->addParticle(-0.5, 0.0, 0.0); + nonbonded->addParticle(-0.5, 0.0, 0.0); + vector positions; + positions.push_back(Vec3(0, 0, 0)); + positions.push_back(Vec3(10, 0, 0)); + positions.push_back(Vec3(0, 10, 0)); + for (int i = 0; i < 20; i++) { + system.addParticle(0.0); + double u = 0.1*((i+1)%4); + double v = 0.05*i; + system.setVirtualSite(3+i, new ThreeParticleAverageSite(0, 1, 2, u, v, 1-u-v)); + nonbonded->addParticle(i%2 == 0 ? -1.0 : 1.0, 0.0, 0.0); + positions.push_back(Vec3()); + } + VerletIntegrator i1(0.002); + VerletIntegrator i2(0.002); + Context c1(system, i1, Platform::getPlatformByName("Reference")); + Context c2(system, i2, platform); + c1.setPositions(positions); + c2.setPositions(positions); + c1.applyConstraints(0.0001); + c2.applyConstraints(0.0001); + State s1 = c1.getState(State::Positions | State::Forces); + State s2 = c2.getState(State::Positions | State::Forces); + for (int i = 0; i < system.getNumParticles(); i++) + ASSERT_EQUAL_VEC(s1.getPositions()[i], s2.getPositions()[i], 1e-5); + for (int i = 0; i < 3; i++) + ASSERT_EQUAL_VEC(s1.getForces()[i], s2.getForces()[i], 1e-5); +} + +void runPlatformTests(); + +int main(int argc, char* argv[]) { + try { + initializeTests(argc, argv); + testMasslessParticle(); + testTwoParticleAverage(); + testThreeParticleAverage(); + testOutOfPlane(); + testLocalCoordinates(); + testConservationLaws(); + testOverlappingSites(); + runPlatformTests(); + } + catch(const exception& e) { + cout << "exception: " << e.what() << endl; + return 1; + } + cout << "Done" << endl; + return 0; +} diff --git a/platforms/cpu/tests/nacl_amorph.dat b/tests/nacl_amorph.dat similarity index 100% rename from platforms/cpu/tests/nacl_amorph.dat rename to tests/nacl_amorph.dat diff --git a/platforms/reference/tests/nacl_crystal.dat b/tests/nacl_crystal.dat similarity index 100% rename from platforms/reference/tests/nacl_crystal.dat rename to tests/nacl_crystal.dat diff --git a/wrappers/python/CMakeLists.txt b/wrappers/python/CMakeLists.txt index fdd1ecbaeee3ddc10053268ef685d4841f1d38df..75847391bc0d8d234ba5743f414ab53461e4a578 100644 --- a/wrappers/python/CMakeLists.txt +++ b/wrappers/python/CMakeLists.txt @@ -69,6 +69,7 @@ foreach(SUBDIR ${SUBDIRS}) "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/*.str" "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/*psf" "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/charmm22.*" + "${CMAKE_CURRENT_SOURCE_DIR}/${SUBDIR}/par*.inp" ) foreach(file ${STAGING_INPUT_FILES1}) set(STAGING_INPUT_FILES ${STAGING_INPUT_FILES} "${file}") diff --git a/wrappers/python/setup.py b/wrappers/python/setup.py index dcae1d815355f860fea495cc3eda6d0f696e1272..11adbd20853ed2a294a799c1155b6353402b68db 100644 --- a/wrappers/python/setup.py +++ b/wrappers/python/setup.py @@ -122,11 +122,6 @@ def buildKeywordDictionary(major_version_num=MAJOR_VERSION_NUM, build_info=BUILD_INFO): from distutils.core import Extension setupKeywords = {} - try: - from distutils.command.build_py import build_py_2to3 as build_py - except ImportError: - from distutils.command.build_py import build_py - setupKeywords["cmdclass"] = {'build_py': build_py} setupKeywords["name"] = "OpenMM" setupKeywords["version"] = "%s.%s.%s" % (major_version_num, minor_version_num, @@ -198,6 +193,13 @@ def buildKeywordDictionary(major_version_num=MAJOR_VERSION_NUM, if platform.system() == 'Darwin': extra_compile_args += ['-stdlib=libc++', '-mmacosx-version-min=10.7'] extra_link_args += ['-stdlib=libc++', '-mmacosx-version-min=10.7', '-Wl', '-rpath', openmm_lib_path] + # Hard-code CC and CXX to clang, since gcc/g++ will *not* work with + # Anaconda, despite the fact that distutils will try to use them. + # System Python, homebrew, and MacPorts on Macs will always use + # clang, so this hack should always work and fix issues with users + # that have GCC installed from MacPorts or homebrew *and* Anaconda + os.environ['CC'] = 'clang' + os.environ['CXX'] = 'clang++' library_dirs=[openmm_lib_path] include_dirs=openmm_include_path.split(';') diff --git a/wrappers/python/simtk/openmm/__init__.py b/wrappers/python/simtk/openmm/__init__.py index ee2844aafeb32aee578768aa44363c0ba5b7de3f..0290c6364978d66fe0dcd8637f4d8b961cc02b6f 100644 --- a/wrappers/python/simtk/openmm/__init__.py +++ b/wrappers/python/simtk/openmm/__init__.py @@ -4,11 +4,12 @@ from your own code. It provides a combination of extreme flexibility (through custom forces and integrators), openness, and high performance (especially on recent GPUs) that make it truly unique among simulation codes. """ +from __future__ import absolute_import __author__ = "Peter Eastman" import os, os.path import sys -from simtk.openmm import version +from . import version if sys.platform == 'win32': _path = os.environ['PATH'] diff --git a/wrappers/python/simtk/openmm/amd.py b/wrappers/python/simtk/openmm/amd.py index e4ca0722b4072bc3f38c15c66a1247b85ed2f80b..5112ca8dff24711e9fc3dd02516983ee3cf61531 100644 --- a/wrappers/python/simtk/openmm/amd.py +++ b/wrappers/python/simtk/openmm/amd.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/app/__init__.py b/wrappers/python/simtk/openmm/app/__init__.py index be9dc8dc1c6bc7fa41cb4178a8b6796628cd8e21..86ca7428eb45e2a8cd75657fb3ed1fca61db58b1 100644 --- a/wrappers/python/simtk/openmm/app/__init__.py +++ b/wrappers/python/simtk/openmm/app/__init__.py @@ -1,6 +1,8 @@ """ OpenMM Application """ +from __future__ import absolute_import + __docformat__ = "epytext en" __author__ = "Peter Eastman" @@ -10,26 +12,26 @@ __license__ = "MIT" __maintainer__ = "Peter Eastman" __email__ = "peastman@stanford.edu" -from topology import Topology, Chain, Residue, Atom -from pdbfile import PDBFile -from pdbxfile import PDBxFile -from forcefield import ForceField -from simulation import Simulation -from pdbreporter import PDBReporter -from amberprmtopfile import AmberPrmtopFile, HCT, OBC1, OBC2, GBn, GBn2 -from amberinpcrdfile import AmberInpcrdFile -from dcdfile import DCDFile -from gromacsgrofile import GromacsGroFile -from gromacstopfile import GromacsTopFile -from dcdreporter import DCDReporter -from modeller import Modeller -from statedatareporter import StateDataReporter -from element import Element -from desmonddmsfile import DesmondDMSFile -from checkpointreporter import CheckpointReporter -from charmmcrdfiles import CharmmCrdFile, CharmmRstFile -from charmmparameterset import CharmmParameterSet -from charmmpsffile import CharmmPsfFile, CharmmPSFWarning +from .topology import Topology, Chain, Residue, Atom +from .pdbfile import PDBFile +from .pdbxfile import PDBxFile +from .forcefield import ForceField +from .simulation import Simulation +from .pdbreporter import PDBReporter, PDBxReporter +from .amberprmtopfile import AmberPrmtopFile, HCT, OBC1, OBC2, GBn, GBn2 +from .amberinpcrdfile import AmberInpcrdFile +from .dcdfile import DCDFile +from .gromacsgrofile import GromacsGroFile +from .gromacstopfile import GromacsTopFile +from .dcdreporter import DCDReporter +from .modeller import Modeller +from .statedatareporter import StateDataReporter +from .element import Element +from .desmonddmsfile import DesmondDMSFile +from .checkpointreporter import CheckpointReporter +from .charmmcrdfiles import CharmmCrdFile, CharmmRstFile +from .charmmparameterset import CharmmParameterSet +from .charmmpsffile import CharmmPsfFile, CharmmPSFWarning # Enumerated values diff --git a/wrappers/python/simtk/openmm/app/amberinpcrdfile.py b/wrappers/python/simtk/openmm/app/amberinpcrdfile.py index c390ea398e84fc5959fba905eb1d7209a5565bf1..7ec8712a08428c80581af077df55e8520265c634 100644 --- a/wrappers/python/simtk/openmm/app/amberinpcrdfile.py +++ b/wrappers/python/simtk/openmm/app/amberinpcrdfile.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/app/amberprmtopfile.py b/wrappers/python/simtk/openmm/app/amberprmtopfile.py index c7c854a80363c6a5de29672f93cbf08c09b82a72..66aef49cda1c878621338383b711c394c4bff720 100644 --- a/wrappers/python/simtk/openmm/app/amberprmtopfile.py +++ b/wrappers/python/simtk/openmm/app/amberprmtopfile.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" @@ -35,8 +36,8 @@ from math import sqrt from simtk.openmm.app import Topology from simtk.openmm.app import PDBFile from simtk.openmm.app.internal import amber_file_parser -import forcefield as ff -import element as elem +from . import forcefield as ff +from . import element as elem import simtk.unit as unit import simtk.openmm as mm from simtk.openmm.app.internal.unitcell import computePeriodicBoxVectors diff --git a/wrappers/python/simtk/openmm/app/charmmcrdfiles.py b/wrappers/python/simtk/openmm/app/charmmcrdfiles.py index 8781d36adf9ae995589565b93a8a2ff368948ec7..94428a314acb980816762b9b7d6c7547df41dbbc 100644 --- a/wrappers/python/simtk/openmm/app/charmmcrdfiles.py +++ b/wrappers/python/simtk/openmm/app/charmmcrdfiles.py @@ -33,6 +33,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import +from __future__ import print_function from simtk.openmm.app.internal.charmm.exceptions import CharmmFileError import simtk.unit as u @@ -117,7 +119,7 @@ class CharmmCrdFile(object): len(self.positions)) ) - except (ValueError, IndexError), e: + except (ValueError, IndexError) as e: raise CharmmFileError('Error parsing CHARMM coordinate file') # Apply units to the positions now. Do it this way to allow for @@ -197,7 +199,7 @@ class CharmmRstFile(object): self.jhstrt = int(line[5]) # Num total steps? break - except (ValueError, IndexError), e: + except (ValueError, IndexError) as e: raise CharmmFileError('Problem parsing CHARMM restart') self._scan(crdfile, '!XOLD') @@ -255,9 +257,9 @@ class CharmmRstFile(object): def printcoords(self, crds): for crd in range(len(crds)): - print crds[crd], + print(crds[crd], end=' ') if not (crd+1) % 3: - print '\n', + print('\n', end=' ') if __name__ == '__main__': import doctest diff --git a/wrappers/python/simtk/openmm/app/charmmparameterset.py b/wrappers/python/simtk/openmm/app/charmmparameterset.py index 4740dc00406be3c990c3bbc3ef0715277b61dbf9..6a40a89a8340e49fcb4cfffc6929952790ca4698 100644 --- a/wrappers/python/simtk/openmm/app/charmmparameterset.py +++ b/wrappers/python/simtk/openmm/app/charmmparameterset.py @@ -33,6 +33,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import import os from simtk.openmm.app.internal.charmm._charmmfile import ( CharmmFile, CharmmStreamFile) @@ -99,7 +100,7 @@ class CharmmParameterSet(object): except ValueError: raise CharmmFileError('Could not convert %s to %s' % (msg, type)) - def __init__(self, *args): + def __init__(self, *args, **kwargs): # Instantiate the list types self.atom_types_str = dict() self.atom_types_int = dict() @@ -112,7 +113,7 @@ class CharmmParameterSet(object): self.cmap_types = dict() self.nbfix_types = dict() self.parametersets = [] - + # Load all of the files tops, pars, strs = [], [], [] for arg in args: @@ -134,12 +135,17 @@ class CharmmParameterSet(object): raise TypeError('Unrecognized file type: %s' % arg) else: raise TypeError('Unrecognized file type: %s' % arg) + + permissive=kwargs.pop("permissive", False) + if len(kwargs): + raise TypeError('Unrecognised named argument') + for top in tops: self.readTopologyFile(top) - for par in pars: self.readParameterFile(par) + for par in pars: self.readParameterFile(par, permissive=permissive) for strf in strs: self.readStreamFile(strf) @classmethod - def loadSet(cls, tfile=None, pfile=None, sfiles=[]): + def loadSet(cls, tfile=None, pfile=None, sfiles=[], permissive=False): """ Instantiates a CharmmParameterSet from a Topology file and a Parameter file (or just a Parameter file if it has all information) @@ -148,6 +154,8 @@ class CharmmParameterSet(object): - tfile (str) : Name of the Topology (RTF/TOP) file - pfile (str) : Name of the Parameter (PAR) file - sfiles (list of str) : List or tuple of stream (STR) file names. + - permissive (bool) : Accept non-bonbded parameters for undefined + atom types (default False) Returns: New CharmmParameterSet populated with the parameters found in the @@ -164,7 +172,7 @@ class CharmmParameterSet(object): if tfile is not None: inst.readTopologyFile(tfile) if pfile is not None: - inst.readParameterFile(pfile) + inst.readParameterFile(pfile, permissive=permissive) if isinstance(sfiles, str): # The API docstring requests a list, but allow for users to pass a # string with a single filename instead @@ -174,7 +182,7 @@ class CharmmParameterSet(object): inst.readStreamFile(sfile) return inst - def readParameterFile(self, pfile): + def readParameterFile(self, pfile, permissive=False): """ Reads all of the parameters from a parameter file. Versions 36 and later of the CHARMM force field files have an ATOMS section defining @@ -183,6 +191,8 @@ class CharmmParameterSet(object): Parameters: - pfile (str) : Name of the CHARMM PARameter file to read + - permissive (bool) : Accept non-bonbded parameters for undefined + atom types (default False) Notes: The atom types must all be loaded by the end of this routine. Either supply a PAR file with atom definitions in them or read in a @@ -428,7 +438,7 @@ class CharmmParameterSet(object): # soldier on if not read_first_nonbonded: continue raise CharmmFileError('Could not parse nonbonded terms.') - except CharmmFileError, e: + except CharmmFileError as e: if not read_first_nonbonded: continue raise CharmmFileError(str(e)) else: @@ -476,6 +486,23 @@ class CharmmParameterSet(object): if current_cmap is not None: ty = CmapType(current_cmap_res, current_cmap_data) self.cmap_types[current_cmap] = ty + + # If in permissive mode create an atomtype for every type used in + # the nonbonded parameters. This is a work-around for when all that's + # available is a CHARMM22 inp file, which has no ATOM/MASS fields + + if permissive: + try: + idx = max(self.atom_types_int.keys())+1000 + except ValueError: + idx = 10000 + for key in nonbonded_types: + if not key in self.atom_types_str: + atype =AtomType(name=key, number=idx, mass= float('NaN'), atomic_number= 1 ) + self.atom_types_str[key] = atype + self.atom_types_int[idx] = atype + idx=idx+1 + # Now we're done. Load the nonbonded types into the relevant AtomType # instances. In order for this to work, all keys in nonbonded_types # must be in the self.atom_types_str dict. Raise a RuntimeError if this @@ -486,6 +513,7 @@ class CharmmParameterSet(object): except KeyError: raise RuntimeError('Atom type %s not present in AtomType list' % key) + if parameterset is not None: self.parametersets.append(parameterset) if own_handle: f.close() @@ -587,7 +615,7 @@ class CharmmParameterSet(object): # multiterm dihedral have to have a DIFFERENT periodicity, we don't have # to condense _within_ a single list of torsions assigned to the same # key (they're guaranteed to be different) - keylist = self.dihedral_types.keys() + keylist = list(self.dihedral_types.keys()) for i in range(len(keylist) - 1): key1 = keylist[i] for dihedral in self.dihedral_types[key1]: @@ -606,7 +634,7 @@ class CharmmParameterSet(object): Parameter: - typedict : Type dictionary to condense """ - keylist = typedict.keys() + keylist = list(typedict.keys()) for i in range(len(keylist) - 1): key1 = keylist[i] for j in range(i+1, len(keylist)): diff --git a/wrappers/python/simtk/openmm/app/charmmpsffile.py b/wrappers/python/simtk/openmm/app/charmmpsffile.py index 46745c8576ddf9f5cf1124600687914f68ea6a9b..85ff5ee9d095ff70fb39a1b9bfbb62a455feee2c 100644 --- a/wrappers/python/simtk/openmm/app/charmmpsffile.py +++ b/wrappers/python/simtk/openmm/app/charmmpsffile.py @@ -33,11 +33,14 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ from __future__ import division +from __future__ import absolute_import +from __future__ import print_function from functools import wraps from math import pi, cos, sin, sqrt import os import re +import sys import simtk.openmm as mm from simtk.openmm.vec3 import Vec3 import simtk.unit as u @@ -58,7 +61,8 @@ import warnings TINY = 1e-8 WATNAMES = ('WAT', 'HOH', 'TIP3', 'TIP4', 'TIP5', 'SPCE', 'SPC') - +if sys.version_info >= (3, 0): + xrange = range def _catchindexerror(func): """ @@ -70,7 +74,7 @@ def _catchindexerror(func): """ Catch the index error """ try: return func(*args, **kwargs) - except IndexError, e: + except IndexError as e: raise CharmmPSFError('Array is too short: %s' % e) return newfunc @@ -98,6 +102,15 @@ class _ZeroDict(dict): return [0, 0], [] return 0, [] +def _strip_optunit(thing, unit): + """ + Strips optional units, converting to specified unit type. If no unit + present, it just returns the number + """ + if u.is_quantity(thing): + return thing.value_in_unit(unit) + return thing + # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ _resre = re.compile(r'(\d+)([a-zA-Z]*)') @@ -386,8 +399,8 @@ class CharmmPsfFile(object): """ try: return type(string) - except ValueError, e: - print e + except ValueError as e: + print(e) raise CharmmPSFError('Could not convert %s' % message) @staticmethod @@ -1022,10 +1035,11 @@ class CharmmPsfFile(object): # See if we need to use a switching function if switchDistance and nonbondedMethod is not ff.NoCutoff: # make sure it's legal - if switchDistance >= nonbondedCutoff: + if (_strip_optunit(switchDistance, u.nanometer) >= + _strip_optunit(nonbondedCutoff, u.nanometer)): raise ValueError('switchDistance is too large compared ' 'to the cutoff!') - if abs(switchDistance) != switchDistance: + if _strip_optunit(switchDistance, u.nanometer) < 0: # Detects negatives for both Quantity and float raise ValueError('switchDistance must be non-negative!') force.setUseSwitchingFunction(True) @@ -1066,10 +1080,11 @@ class CharmmPsfFile(object): # See if we need to use a switching function if switchDistance and nonbondedMethod is not ff.NoCutoff: # make sure it's legal - if switchDistance >= nonbondedCutoff: + if (_strip_optunit(switchDistance, u.nanometer) >= + _strip_optunit(nonbondedCutoff, u.nanometer)): raise ValueError('switchDistance is too large compared ' 'to the cutoff!') - if abs(switchDistance) != switchDistance: + if _strip_optunit(switchDistance, u.nanometer) < 0: # Detects negatives for both Quantity and float raise ValueError('switchDistance must be non-negative!') force.setUseSwitchingFunction(True) @@ -1152,11 +1167,15 @@ class CharmmPsfFile(object): raise ValueError('Unrecognized nonbonded method') if switchDistance and nonbondedMethod is not ff.NoCutoff: # make sure it's legal - if switchDistance >= nonbondedCutoff: + if (_strip_optunit(switchDistance, u.nanometer) >= + _strip_optunit(nonbondedCutoff, u.nanometer)): raise ValueError('switchDistance is too large compared ' 'to the cutoff!') - cforce.setUseSwitchingFunction(True) - cforce.setSwitchingDistance(switchDistance) + if _strip_optunit(switchDistance, u.nanometer) < 0: + # Detects negatives for both Quantity and float + raise ValueError('switchDistance must be non-negative!') + cforce.setUseSwitchingFunction(True) + cforce.setSwitchingDistance(switchDistance) for i in lj_idx_list: cforce.addParticle((i - 1,)) # adjust for indexing from 0 @@ -1251,8 +1270,8 @@ class CharmmPsfFile(object): elif implicitSolvent is GBn2: gb = GBSAGBn2Force(solventDielectric, soluteDielectric, None, cutoff, kappa=implicitSolventKappa) - for i, atom in enumerate(self.atom_list): - gb.addParticle([atom.charge] + list(gb_parms[i])) + for atom, gb_parm in zip(self.atom_list, gb_parms): + gb.addParticle([atom.charge] + list(gb_parm)) # Set cutoff method if nonbondedMethod is ff.NoCutoff: gb.setNonbondedMethod(mm.NonbondedForce.NoCutoff) diff --git a/wrappers/python/simtk/openmm/app/checkpointreporter.py b/wrappers/python/simtk/openmm/app/checkpointreporter.py index 6c1bae9982d09522637549fca561c9fe40408674..12c24aad1b7aa766be4f987c15bb594c01ccc4a3 100644 --- a/wrappers/python/simtk/openmm/app/checkpointreporter.py +++ b/wrappers/python/simtk/openmm/app/checkpointreporter.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Robert McGibbon" __version__ = "1.0" @@ -77,7 +78,7 @@ class CheckpointReporter(object): """ self._reportInterval = reportInterval - if isinstance(file, basestring): + if isinstance(file, str): self._own_handle = True self._out = open(file, 'w+b', 0) else: diff --git a/wrappers/python/simtk/openmm/app/dcdfile.py b/wrappers/python/simtk/openmm/app/dcdfile.py index 6d989805678e98589f701f552d2e0c9db6ae61e5..3ba7f1f1c9e7f0079674b786ee899f459a711d00 100644 --- a/wrappers/python/simtk/openmm/app/dcdfile.py +++ b/wrappers/python/simtk/openmm/app/dcdfile.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/app/dcdreporter.py b/wrappers/python/simtk/openmm/app/dcdreporter.py index 3f1264340ad73bec8d1b1d53b7f8de6341062e77..2c4c193f9e23abefb354811549d7ec9f23ce5921 100644 --- a/wrappers/python/simtk/openmm/app/dcdreporter.py +++ b/wrappers/python/simtk/openmm/app/dcdreporter.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/app/desmonddmsfile.py b/wrappers/python/simtk/openmm/app/desmonddmsfile.py index 82e971b4b790e462ad176f1144ba5c917a14a292..7bd84ed8d202c5e9059b888bbb57becc49b0d6e9 100644 --- a/wrappers/python/simtk/openmm/app/desmonddmsfile.py +++ b/wrappers/python/simtk/openmm/app/desmonddmsfile.py @@ -24,6 +24,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import import os import math diff --git a/wrappers/python/simtk/openmm/app/element.py b/wrappers/python/simtk/openmm/app/element.py index a745d722d372c45c979f1083f302c7cd007a5dbf..60cd76f52626318c0d61d4731554748ae266a5bf 100644 --- a/wrappers/python/simtk/openmm/app/element.py +++ b/wrappers/python/simtk/openmm/app/element.py @@ -28,12 +28,18 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Christopher M. Bruns" __version__ = "1.0" +import sys from collections import OrderedDict from simtk.unit import daltons, is_quantity -import copy_reg +if sys.version_info >= (3, 0): + import copyreg +else: + import copy_reg as copyreg + class Element(object): """An Element represents a chemical element. @@ -128,7 +134,7 @@ class Element(object): diff = mass best_guess = None - for elemmass, element in Element._elements_by_mass.iteritems(): + for elemmass, element in _iteritems(Element._elements_by_mass): massdiff = abs(elemmass - mass) if massdiff < diff: best_guess = element @@ -172,7 +178,7 @@ def get_by_symbol(symbol): def _pickle_element(element): return (get_by_symbol, (element.symbol,)) -copy_reg.pickle(Element, _pickle_element) +copyreg.pickle(Element, _pickle_element) # NOTE: getElementByMass assumes all masses are Quantity instances with unit # "daltons". All elements need to obey this assumption, or that method will @@ -299,3 +305,10 @@ ununhexium = Element(116, "ununhexium", "Uuh", 292*daltons) # relational operators will work with any chosen name sulphur = sulfur aluminium = aluminum + +if sys.version_info >= (3, 0): + def _iteritems(dict): + return dict.items() +else: + def _iteritems(dict): + return dict.iteritems() diff --git a/wrappers/python/simtk/openmm/app/forcefield.py b/wrappers/python/simtk/openmm/app/forcefield.py index 6aa241f8aa04b09144b898f76a8ba0009a85e584..5fec0aa77d67c1c29f9b8c7121932572c39004e9 100644 --- a/wrappers/python/simtk/openmm/app/forcefield.py +++ b/wrappers/python/simtk/openmm/app/forcefield.py @@ -28,6 +28,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import +from __future__ import print_function __author__ = "Peter Eastman" __version__ = "1.0" @@ -38,7 +40,7 @@ import math from math import sqrt, cos import simtk.openmm as mm import simtk.unit as unit -import element as elem +from . import element as elem from simtk.openmm.app import Topology def _convertParameterToNumber(param): @@ -148,7 +150,11 @@ class ForceField(object): resName = residue.attrib['name'] template = ForceField._TemplateData(resName) for atom in residue.findall('Atom'): - template.atoms.append(ForceField._TemplateAtomData(atom.attrib['name'], atom.attrib['type'], self._atomTypes[atom.attrib['type']][2])) + params = {} + for key in atom.attrib: + if key not in ('name', 'type'): + params[key] = _convertParameterToNumber(atom.attrib[key]) + template.atoms.append(ForceField._TemplateAtomData(atom.attrib['name'], atom.attrib['type'], self._atomTypes[atom.attrib['type']][2], params)) for site in residue.findall('VirtualSite'): template.virtualSites.append(ForceField._VirtualSiteData(site)) for bond in residue.findall('Bond'): @@ -254,6 +260,7 @@ class ForceField(object): """Inner class used to encapsulate data about the system being created.""" def __init__(self): self.atomType = {} + self.atomParameters = {} self.atoms = [] self.excludeAtomWith = [] self.virtualSites = {} @@ -280,10 +287,11 @@ class ForceField(object): class _TemplateAtomData: """Inner class used to encapsulate data about an atom in a residue template definition.""" - def __init__(self, name, type, element): + def __init__(self, name, type, element, parameters={}): self.name = name self.type = type self.element = element + self.parameters = parameters self.bondedTo = [] self.externalBonds = 0 @@ -323,6 +331,77 @@ class ForceField(object): else: self.excludeWith = self.atoms[0] + class _AtomTypeParameters: + """Inner class used to record parameter values for atom types.""" + def __init__(self, forcefield, forceName, atomTag, paramNames): + self.ff = forcefield + self.forceName = forceName + self.atomTag = atomTag + self.paramNames = paramNames + self.paramsForType = {} + self.extraParamsForType = {} + + def registerAtom(self, parameters, expectedParams=None): + if expectedParams is None: + expectedParams = self.paramNames + types = self.ff._findAtomTypes(parameters, 1) + if None not in types: + values = {} + extraValues = {} + for key in parameters: + if key in expectedParams: + values[key] = _convertParameterToNumber(parameters[key]) + else: + extraValues[key] = parameters[key] + if len(values) < len(expectedParams): + for key in expectedParams: + if key not in values: + raise ValueError('%s: No value specified for "%s"' % (self.forceName, key)) + for t in types[0]: + self.paramsForType[t] = values + self.extraParamsForType[t] = extraValues + + def parseDefinitions(self, element): + """"Load the definitions from an XML element.""" + expectedParams = list(self.paramNames) + excludedParams = [node.attrib['name'] for node in element.findall('UseAttributeFromResidue')] + for param in excludedParams: + if param not in expectedParams: + raise ValueError('%s: specified an invalid attribute: %s' % (self.forceName, param)) + expectedParams.remove(param) + for atom in element.findall(self.atomTag): + for param in excludedParams: + if param in atom.attrib: + raise ValueError('%s: The attribute "%s" appeared in both <%s> and tags' % (self.forceName, param, self.atomTag)) + self.registerAtom(atom.attrib, expectedParams) + + def getAtomParameters(self, atom, data): + """Get the parameter values for a particular atom.""" + t = data.atomType[atom] + p = data.atomParameters[atom] + if t in self.paramsForType: + values = self.paramsForType[t] + result = [None]*len(self.paramNames) + for i, name in enumerate(self.paramNames): + if name in values: + result[i] = values[name] + elif name in p: + result[i] = p[name] + else: + raise ValueError('%s: No value specified for "%s"' % (self.forceName, name)) + return result + else: + raise ValueError('%s: No parameters defined for atom type %s' % (self.forceName, t)) + + def getExtraParameters(self, atom, data): + """Get extra parameter values for an atom that appeared in the tag but were not included in paramNames.""" + t = data.atomType[atom] + if t in self.paramsForType: + return self.extraParamsForType[t] + else: + raise ValueError('%s: No parameters defined for atom type %s' % (self.forceName, t)) + + def createSystem(self, topology, nonbondedMethod=NoCutoff, nonbondedCutoff=1.0*unit.nanometer, constraints=None, rigidWater=True, removeCMMotion=True, hydrogenMass=None, **args): """Construct an OpenMM System representing a Topology with this force field. @@ -383,6 +462,7 @@ class ForceField(object): matchAtoms = dict(zip(matches, res.atoms())) for atom, match in zip(res.atoms(), matches): data.atomType[atom] = template.atoms[match].type + data.atomParameters[atom] = template.atoms[match].parameters for site in template.virtualSites: if match == site.index: data.virtualSites[atom] = (site, [matchAtoms[i].index for i in site.atoms], matchAtoms[site.excludeWith].index) @@ -1136,14 +1216,10 @@ class NonbondedGenerator: self.ff = forcefield self.coulomb14scale = coulomb14scale self.lj14scale = lj14scale - self.typeMap = {} + self.params = ForceField._AtomTypeParameters(forcefield, 'NonbondedForce', 'Atom', ('charge', 'sigma', 'epsilon')) def registerAtom(self, parameters): - types = self.ff._findAtomTypes(parameters, 1) - if None not in types: - values = (_convertParameterToNumber(parameters['charge']), _convertParameterToNumber(parameters['sigma']), _convertParameterToNumber(parameters['epsilon'])) - for t in types[0]: - self.typeMap[t] = values + self.params.registerAtom(parameters) @staticmethod def parseElement(element, ff): @@ -1156,8 +1232,7 @@ class NonbondedGenerator: generator = existing[0] if generator.coulomb14scale != float(element.attrib['coulomb14scale']) or generator.lj14scale != float(element.attrib['lj14scale']): raise ValueError('Found multiple NonbondedForce tags with different 1-4 scales') - for atom in element.findall('Atom'): - generator.registerAtom(atom.attrib) + generator.params.parseDefinitions(element) def createForce(self, sys, data, nonbondedMethod, nonbondedCutoff, args): methodMap = {NoCutoff:mm.NonbondedForce.NoCutoff, @@ -1169,12 +1244,8 @@ class NonbondedGenerator: raise ValueError('Illegal nonbonded method for NonbondedForce') force = mm.NonbondedForce() for atom in data.atoms: - t = data.atomType[atom] - if t in self.typeMap: - values = self.typeMap[t] - force.addParticle(values[0], values[1], values[2]) - else: - raise ValueError('No nonbonded parameters defined for atom type '+t) + values = self.params.getAtomParameters(atom, data) + force.addParticle(values[0], values[1], values[2]) force.setNonbondedMethod(methodMap[nonbondedMethod]) force.setCutoffDistance(nonbondedCutoff) if 'ewaldErrorTolerance' in args: @@ -1223,14 +1294,10 @@ class GBSAOBCGenerator: def __init__(self, forcefield): self.ff = forcefield - self.typeMap = {} + self.params = ForceField._AtomTypeParameters(forcefield, 'GBSAOBCForce', 'Atom', ('charge', 'radius', 'scale')) def registerAtom(self, parameters): - types = self.ff._findAtomTypes(parameters, 1) - if None not in types: - values = (_convertParameterToNumber(parameters['charge']), _convertParameterToNumber(parameters['radius']), _convertParameterToNumber(parameters['scale'])) - for t in types[0]: - self.typeMap[t] = values + self.params.registerAtom(parameters) @staticmethod def parseElement(element, ff): @@ -1241,8 +1308,7 @@ class GBSAOBCGenerator: else: # Multiple tags were found, probably in different files. Simply add more types to the existing one. generator = existing[0] - for atom in element.findall('Atom'): - generator.registerAtom(atom.attrib) + generator.params.parseDefinitions(element) def createForce(self, sys, data, nonbondedMethod, nonbondedCutoff, args): methodMap = {NoCutoff:mm.NonbondedForce.NoCutoff, @@ -1252,12 +1318,8 @@ class GBSAOBCGenerator: raise ValueError('Illegal nonbonded method for GBSAOBCForce') force = mm.GBSAOBCForce() for atom in data.atoms: - t = data.atomType[atom] - if t in self.typeMap: - values = self.typeMap[t] - force.addParticle(values[0], values[1], values[2]) - else: - raise ValueError('No GBSAOBC parameters defined for atom type '+t) + values = self.params.getAtomParameters(atom, data) + force.addParticle(values[0], values[1], values[2]) force.setNonbondedMethod(methodMap[nonbondedMethod]) force.setCutoffDistance(nonbondedCutoff) if 'soluteDielectric' in args: @@ -1575,7 +1637,6 @@ class CustomNonbondedGenerator: self.ff = forcefield self.energy = energy self.bondCutoff = bondCutoff - self.typeMap = {} self.globalParams = {} self.perParticleParams = [] self.functions = [] @@ -1588,12 +1649,8 @@ class CustomNonbondedGenerator: generator.globalParams[param.attrib['name']] = float(param.attrib['defaultValue']) for param in element.findall('PerParticleParameter'): generator.perParticleParams.append(param.attrib['name']) - for atom in element.findall('Atom'): - types = ff._findAtomTypes(atom.attrib, 1) - if None not in types: - values = [float(atom.attrib[param]) for param in generator.perParticleParams] - for t in types[0]: - generator.typeMap[t] = values + generator.params = ForceField._AtomTypeParameters(ff, 'CustomNonbondedForce', 'Atom', generator.perParticleParams) + generator.params.parseDefinitions(element) def createForce(self, sys, data, nonbondedMethod, nonbondedCutoff, args): methodMap = {NoCutoff:mm.CustomNonbondedForce.NoCutoff, @@ -1620,11 +1677,8 @@ class CustomNonbondedGenerator: elif type == 'Discrete3D': force.addTabulatedFunction(name, mm.Discrete2DFunction(params['xsize'], params['ysize'], params['zsize'], values)) for atom in data.atoms: - t = data.atomType[atom] - if t in self.typeMap: - force.addParticle(self.typeMap[t]) - else: - raise ValueError('No CustomNonbonded parameters defined for atom type '+t) + values = self.params.getAtomParameters(atom, data) + force.addParticle(values) force.setNonbondedMethod(methodMap[nonbondedMethod]) force.setCutoffDistance(nonbondedCutoff) sys.addForce(force) @@ -1669,7 +1723,6 @@ class CustomGBGenerator: def __init__(self, forcefield): self.ff = forcefield - self.typeMap = {} self.globalParams = {} self.perParticleParams = [] self.computedValues = [] @@ -1684,12 +1737,8 @@ class CustomGBGenerator: generator.globalParams[param.attrib['name']] = float(param.attrib['defaultValue']) for param in element.findall('PerParticleParameter'): generator.perParticleParams.append(param.attrib['name']) - for atom in element.findall('Atom'): - types = ff._findAtomTypes(atom.attrib, 1) - if None not in types: - values = [float(atom.attrib[param]) for param in generator.perParticleParams] - for t in types[0]: - generator.typeMap[t] = values + generator.params = ForceField._AtomTypeParameters(ff, 'CustomGBForce', 'Atom', generator.perParticleParams) + generator.params.parseDefinitions(element) computationMap = {"SingleParticle" : mm.CustomGBForce.SingleParticle, "ParticlePair" : mm.CustomGBForce.ParticlePair, "ParticlePairNoExclusions" : mm.CustomGBForce.ParticlePairNoExclusions} @@ -1740,11 +1789,8 @@ class CustomGBGenerator: elif type == 'Discrete3D': force.addTabulatedFunction(name, mm.Discrete2DFunction(params['xsize'], params['ysize'], params['zsize'], values)) for atom in data.atoms: - t = data.atomType[atom] - if t in self.typeMap: - force.addParticle(self.typeMap[t]) - else: - raise ValueError('No CustomGB parameters defined for atom type '+t) + values = self.params.getAtomParameters(atom, data) + force.addParticle(values) force.setNonbondedMethod(methodMap[nonbondedMethod]) force.setCutoffDistance(nonbondedCutoff) sys.addForce(force) @@ -1762,7 +1808,6 @@ class CustomManyParticleGenerator: self.energy = energy self.permutationMode = permutationMode self.bondCutoff = bondCutoff - self.typeMap = {} self.globalParams = {} self.perParticleParams = [] self.functions = [] @@ -1780,12 +1825,8 @@ class CustomManyParticleGenerator: generator.perParticleParams.append(param.attrib['name']) for param in element.findall('TypeFilter'): generator.typeFilters.append((int(param.attrib['index']), [int(x) for x in param.attrib['types'].split(',')])) - for atom in element.findall('Atom'): - types = ff._findAtomTypes(atom.attrib, 1) - if None not in types: - values = [float(atom.attrib[param]) for param in generator.perParticleParams] - for t in types[0]: - generator.typeMap[t] = (values, int(atom.attrib['filterType'])) + generator.params = ForceField._AtomTypeParameters(ff, 'CustomManyParticleForce', 'Atom', generator.perParticleParams) + generator.params.parseDefinitions(element) def createForce(self, sys, data, nonbondedMethod, nonbondedCutoff, args): methodMap = {NoCutoff:mm.CustomManyParticleForce.NoCutoff, @@ -1815,12 +1856,9 @@ class CustomManyParticleGenerator: elif type == 'Discrete3D': force.addTabulatedFunction(name, mm.Discrete2DFunction(params['xsize'], params['ysize'], params['zsize'], values)) for atom in data.atoms: - t = data.atomType[atom] - if t in self.typeMap: - values = self.typeMap[t] - force.addParticle(values[0], values[1]) - else: - raise ValueError('No CustomManyParticle parameters defined for atom type '+t) + values = self.params.getAtomParameters(atom, data) + type = int(self.params.getExtraParameters(atom, data)['filterType']) + force.addParticle(values, type) force.setNonbondedMethod(methodMap[nonbondedMethod]) force.setCutoffDistance(nonbondedCutoff) sys.addForce(force) @@ -1883,7 +1921,7 @@ def countConstraint(data): if (isConstrained): angleCount += 1 - print "Constraints bond=%d angle=%d total=%d" % (bondCount, angleCount, (bondCount+angleCount)) + print("Constraints bond=%d angle=%d total=%d" % (bondCount, angleCount, (bondCount+angleCount))) ## @private class AmoebaBondGenerator: @@ -3081,8 +3119,6 @@ class AmoebaVdwGenerator: self.vdw14Scale = vdw14Scale self.vdw15Scale = vdw15Scale - self.typeMap = {} - #============================================================================================= @staticmethod @@ -3095,31 +3131,10 @@ class AmoebaVdwGenerator: generator = AmoebaVdwGenerator(element.attrib['type'], element.attrib['radiusrule'], element.attrib['radiustype'], element.attrib['radiussize'], element.attrib['epsilonrule'], float(element.attrib['vdw-13-scale']), float(element.attrib['vdw-14-scale']), float(element.attrib['vdw-15-scale'])) forceField._forces.append(generator) + generator.params = ForceField._AtomTypeParameters(forceField, 'AmoebaVdwForce', 'Vdw', ('sigma', 'epsilon', 'reduction')) + generator.params.parseDefinitions(element) two_six = 1.122462048309372 - # types[] = [ sigma, epsilon, reductionFactor, class ] - # sigma is modified based on radiustype and radiussize - - for atom in element.findall('Vdw'): - types = forceField._findAtomTypes(atom.attrib, 1) - if None not in types: - - values = [float(atom.attrib['sigma']), float(atom.attrib['epsilon']), float(atom.attrib['reduction'])] - - - if (generator.radiustype == 'SIGMA'): - values[0] *= two_six - - if (generator.radiussize == 'DIAMETER'): - values[0] *= 0.5 - - for t in types[0]: - generator.typeMap[t] = values - - else: - outputString = "AmoebaVdwGenerator: error getting type: %s" % (atom.attrib['class']) - raise ValueError(outputString) - #============================================================================================= # Return a set containing the indices of particles bonded to particle with index=particleIndex @@ -3197,28 +3212,25 @@ class AmoebaVdwGenerator: force = existing[0] # add particles to force - # throw error if particle type not available + sigmaScale = 1 + if self.radiustype == 'SIGMA': + sigmaScale = 1.122462048309372 + if self.radiussize == 'DIAMETER': + sigmaScale = 0.5 for (i, atom) in enumerate(data.atoms): - t = data.atomType[atom] - if t in self.typeMap: - - values = self.typeMap[t] - - # ivIndex = index of bonded partner for hydrogens; otherwise ivIndex = particle index - - ivIndex = i - mass = sys.getParticleMass(i)/unit.dalton - if (mass < 1.9 and len(data.atomBonds[i]) == 1): - bondIndex = data.atomBonds[i][0] - if (data.bonds[bondIndex].atom1 == i): - ivIndex = data.bonds[bondIndex].atom2 - else: - ivIndex = data.bonds[bondIndex].atom1 + values = self.params.getAtomParameters(atom, data) + # ivIndex = index of bonded partner for hydrogens; otherwise ivIndex = particle index + + ivIndex = i + if atom.element == elem.hydrogen and len(data.atomBonds[i]) == 1: + bondIndex = data.atomBonds[i][0] + if (data.bonds[bondIndex].atom1 == i): + ivIndex = data.bonds[bondIndex].atom2 + else: + ivIndex = data.bonds[bondIndex].atom1 - force.addParticle(ivIndex, values[0], values[1], values[2]) - else: - raise ValueError('No vdw type for atom %s' % (atom.name)) + force.addParticle(ivIndex, values[0]*sigmaScale, values[1], values[2]) # set combining rules @@ -3935,8 +3947,6 @@ class AmoebaWcaDispersionGenerator: self.dispoff = dispoff self.shctd = shctd - self.typeMap = {} - #========================================================================================= @staticmethod @@ -3955,19 +3965,8 @@ class AmoebaWcaDispersionGenerator: element.attrib['dispoff'], element.attrib['shctd']) forceField._forces.append(generator) - - # typeMap[] = [ radius, epsilon ] - - for atom in element.findall('WcaDispersion'): - types = forceField._findAtomTypes(atom.attrib, 1) - if None not in types: - - values = [float(atom.attrib['radius']), float(atom.attrib['epsilon'])] - for t in types[0]: - generator.typeMap[t] = values - else: - outputString = "AmoebaWcaDispersionGenerator: error getting type: %s" % (atom.attrib['class']) - raise ValueError(outputString) + generator.params = ForceField._AtomTypeParameters(forceField, 'AmoebaWcaDispersionForce', 'WcaDispersion', ('radius', 'epsilon')) + generator.params.parseDefinitions(element) #========================================================================================= @@ -3995,14 +3994,9 @@ class AmoebaWcaDispersionGenerator: force.setAwater( float(self.awater )) force.setShctd( float(self.shctd )) - for (i, atom) in enumerate(data.atoms): - t = data.atomType[atom] - if t in self.typeMap: - - values = self.typeMap[t] - force.addParticle(values[0], values[1]) - else: - raise ValueError('No WcaDispersion type for atom %s of %s %d' % (atom.name, atom.residue.name, atom.residue.index)) + for atom in data.atoms: + values = self.params.getAtomParameters(atom, data) + force.addParticle(values[0], values[1]) parsers["AmoebaWcaDispersionForce"] = AmoebaWcaDispersionGenerator.parseElement diff --git a/wrappers/python/simtk/openmm/app/gromacsgrofile.py b/wrappers/python/simtk/openmm/app/gromacsgrofile.py index 967769aea4675818b610bfa6760c57a15bc3a5ef..e978b6a1967c72804ce76a207a9218b62f64c92e 100644 --- a/wrappers/python/simtk/openmm/app/gromacsgrofile.py +++ b/wrappers/python/simtk/openmm/app/gromacsgrofile.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Lee-Ping Wang" __version__ = "1.0" @@ -36,7 +37,7 @@ import sys from simtk.openmm import Vec3 from re import sub, match from simtk.unit import nanometers, angstroms, Quantity -import element as elem +from . import element as elem try: import numpy except: diff --git a/wrappers/python/simtk/openmm/app/gromacstopfile.py b/wrappers/python/simtk/openmm/app/gromacstopfile.py index 3406faaa9e1db10f30d585f5a311963e6278cf4c..e1792bcb1ec3fc3ab0e359bca8d525dc8a7681df 100644 --- a/wrappers/python/simtk/openmm/app/gromacstopfile.py +++ b/wrappers/python/simtk/openmm/app/gromacstopfile.py @@ -28,14 +28,15 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" from simtk.openmm.app import Topology from simtk.openmm.app import PDBFile -import forcefield as ff -import element as elem -import amberprmtopfile as prmtop +from . import forcefield as ff +from . import element as elem +from . import amberprmtopfile as prmtop import simtk.unit as unit import simtk.openmm as mm import math @@ -601,7 +602,7 @@ class GromacsTopFile(object): for key in self._dihedralTypes: if key[1] == 'X' or key[2] == 'X': wildcardDihedralTypes.append(key) - for types in dihedralTypeTable.itervalues(): + for types in dihedralTypeTable.values(): types.append(key) # Loop over molecules and create the specified number of each type. @@ -617,7 +618,7 @@ class GromacsTopFile(object): try: bondedTypes = [self._atomTypes[t][1] for t in atomTypes] except KeyError as e: - raise ValueError('Unknown atom type: '+e.message) + raise ValueError('Unknown atom type: ' + e.message) bondedTypes = [b if b is not None else a for a, b in zip(atomTypes, bondedTypes)] # Add atoms. diff --git a/wrappers/python/simtk/openmm/app/internal/amber_file_parser.py b/wrappers/python/simtk/openmm/app/internal/amber_file_parser.py index a1118582756b4374b471565a631e8d6c68567e1c..f62246fef207810d6f9858ec5d3d425f93955a25 100644 --- a/wrappers/python/simtk/openmm/app/internal/amber_file_parser.py +++ b/wrappers/python/simtk/openmm/app/internal/amber_file_parser.py @@ -34,6 +34,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import +from __future__ import print_function #============================================================================================= # GLOBAL IMPORTS @@ -54,7 +56,7 @@ import simtk.openmm from simtk.openmm.app import element as elem from simtk.openmm.app.internal.unitcell import computePeriodicBoxVectors from simtk.openmm.vec3 import Vec3 -import customgbforces as customgb +from . import customgbforces as customgb #============================================================================================= # AMBER parmtop loader (from 'zander', by Randall J. Radmer) @@ -713,7 +715,7 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No raise Exception("Cannot specify both a filename and a loader") if prmtop_filename is not None: # Load prmtop file. - if verbose: print "Reading prmtop file '%s'..." % prmtop_filename + if verbose: print("Reading prmtop file '%s'..." % prmtop_filename) prmtop = PrmtopLoader(prmtop_filename) else: prmtop = prmtop_loader @@ -737,11 +739,11 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No mm = simtk.openmm # Create OpenMM System. - if verbose: print "Creating OpenMM system..." + if verbose: print("Creating OpenMM system...") system = mm.System() # Populate system with atomic masses. - if verbose: print "Adding particles..." + if verbose: print("Adding particles...") for mass in prmtop.getMasses(): system.addParticle(mass) @@ -759,7 +761,7 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No system.addConstraint(iAtom, jAtom, rMin) # Add harmonic bonds. - if verbose: print "Adding bonds..." + if verbose: print("Adding bonds...") force = mm.HarmonicBondForce() if flexibleConstraints or (shake not in ('h-bonds', 'all-bonds', 'h-angles')): for (iAtom, jAtom, k, rMin) in prmtop.getBondsWithH(): @@ -771,7 +773,7 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No system.addForce(force) # Add harmonic angles. - if verbose: print "Adding angles..." + if verbose: print("Adding angles...") force = mm.HarmonicAngleForce() if shake == 'h-angles': numConstrainedBonds = system.getNumConstraints() @@ -809,14 +811,14 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No system.addForce(force) # Add torsions. - if verbose: print "Adding torsions..." + if verbose: print("Adding torsions...") force = mm.PeriodicTorsionForce() for (iAtom, jAtom, kAtom, lAtom, forceConstant, phase, periodicity) in prmtop.getDihedrals(): force.addTorsion(iAtom, jAtom, kAtom, lAtom, periodicity, phase, forceConstant) system.addForce(force) # Add nonbonded interactions. - if verbose: print "Adding nonbonded interactions..." + if verbose: print("Adding nonbonded interactions...") force = mm.NonbondedForce() if (prmtop.getIfBox() == 0): # System is non-periodic. @@ -1044,7 +1046,7 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No # Convert implicitSolventKappa to nanometers if it is a unit. if units.is_quantity(implicitSolventKappa): implicitSolventKappa = implicitSolventKappa.value_in_unit((1/units.nanometers).unit) - if verbose: print "Adding GB parameters..." + if verbose: print("Adding GB parameters...") charges = prmtop.getCharges() cutoff = None if nonbondedMethod != 'NoCutoff': @@ -1071,14 +1073,15 @@ def readAmberSystem(topology, prmtop_filename=None, prmtop_loader=None, shake=No gb = customgb.GBSAGBn2Force(solventDielectric, soluteDielectric, 'ACE', cutoff, implicitSolventKappa) else: raise Exception("Illegal value specified for implicit solvent model") - for iAtom in range(prmtop.getNumAtoms()): + + for charge, gb_parm in zip(charges, gb_parms): if gbmodel == 'OBC2' and implicitSolventKappa == 0: - gb.addParticle(charges[iAtom], gb_parms[iAtom][0], gb_parms[iAtom][1]) + gb.addParticle(charge, gb_parm[0], gb_parm[1]) elif gbmodel == 'GBn2': - gb.addParticle([charges[iAtom], gb_parms[iAtom][0], gb_parms[iAtom][1], - gb_parms[iAtom][2], gb_parms[iAtom][3], gb_parms[iAtom][4]]) + gb.addParticle([charge, gb_parm[0], gb_parm[1], + gb_parm[2], gb_parm[3], gb_parm[4]]) else: - gb.addParticle([charges[iAtom], gb_parms[iAtom][0], gb_parms[iAtom][1]]) + gb.addParticle([charge, gb_parm[0], gb_parm[1]]) system.addForce(gb) if nonbondedMethod == 'NoCutoff': gb.setNonbondedMethod(mm.NonbondedForce.NoCutoff) diff --git a/wrappers/python/simtk/openmm/app/internal/charmm/_charmmfile.py b/wrappers/python/simtk/openmm/app/internal/charmm/_charmmfile.py index f8179e466c30fbbf426a99b3358f26d53a34e5f6..a8730cfa009bc5ef381c25211444c131e743de3d 100644 --- a/wrappers/python/simtk/openmm/app/internal/charmm/_charmmfile.py +++ b/wrappers/python/simtk/openmm/app/internal/charmm/_charmmfile.py @@ -33,7 +33,12 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import from simtk.openmm.app.internal.charmm.exceptions import CharmmFileError +import sys +if sys.version_info < (3, 0): + from codecs import open + class CharmmFile(object): """ @@ -54,8 +59,8 @@ class CharmmFile(object): else: self.status = 'NEW' try: - self._handle = open(fname, mode) - except IOError, e: + self._handle = open(fname, mode, encoding='utf-8') + except IOError as e: raise CharmmFileError(str(e)) self.closed = False self.line_number = 0 diff --git a/wrappers/python/simtk/openmm/app/internal/charmm/topologyobjects.py b/wrappers/python/simtk/openmm/app/internal/charmm/topologyobjects.py index c4e29d8e83449b7d1966e5b8584a418ecd84fb58..fefd55b79ed596ca1f0a77f46853137d3136bb5c 100644 --- a/wrappers/python/simtk/openmm/app/internal/charmm/topologyobjects.py +++ b/wrappers/python/simtk/openmm/app/internal/charmm/topologyobjects.py @@ -32,6 +32,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import from simtk.openmm.app.internal.charmm.exceptions import ( SplitResidueWarning, BondError, ResidueError, CmapError, MissingParameter) diff --git a/wrappers/python/simtk/openmm/app/internal/customgbforces.py b/wrappers/python/simtk/openmm/app/internal/customgbforces.py index 61c9da8eca65ab284c354e3e8b08cd7e8e7253f2..9d6b48244e1fc109366559ee35e888b84807b936 100644 --- a/wrappers/python/simtk/openmm/app/internal/customgbforces.py +++ b/wrappers/python/simtk/openmm/app/internal/customgbforces.py @@ -30,6 +30,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. """ from __future__ import division +from __future__ import absolute_import from simtk.openmm import CustomGBForce, Continuous2DFunction @@ -369,13 +370,13 @@ def GBSAGBn2Force(solventDielectric=78.5, soluteDielectric=1, SA=None, def convertParameters(params, gbmodel): """Convert the GB parameters from the file into the values expected by the appropriate CustomGBForce.""" - newparams = [None]*len(params) if gbmodel == 'GBn2': offset = 0.0195141 else: offset = 0.009 - for i in range(len(params)): - newparams[i] = list(params[i]) - newparams[i][0] -= offset - newparams[i][1] *= newparams[i][0] - return newparams + + for p in params: + newParam = list(p) + newParam[0] -= offset + newParam[1] *= newParam[0] + yield newParam diff --git a/wrappers/python/simtk/openmm/app/internal/pdbstructure.py b/wrappers/python/simtk/openmm/app/internal/pdbstructure.py index ddf79bec14e833217b4b59b7148bf0eb131115e0..630c49a717d67305a4c3d7807d0f6897a6e2ad97 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbstructure.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbstructure.py @@ -1,1092 +1,1092 @@ -#!/bin/env python - -""" -pdbstructure.py: Used for managing PDB formated files. - -This is part of the OpenMM molecular simulation toolkit originating from -Simbios, the NIH National Center for Physics-Based Simulation of -Biological Structures at Stanford, funded under the NIH Roadmap for -Medical Research, grant U54 GM072970. See https://simtk.org. - -Portions copyright (c) 2012-2015 Stanford University and the Authors. -Authors: Christopher M. Bruns -Contributors: Peter Eastman - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. -""" -__author__ = "Christopher M. Bruns" -__version__ = "1.0" - - -from simtk.openmm.vec3 import Vec3 -import simtk.unit as unit -from .. import element -from unitcell import computePeriodicBoxVectors -import warnings -import sys -import math - -class PdbStructure(object): - """ - PdbStructure object holds a parsed Protein Data Bank format file. - - Examples: - - Load a pdb structure from a file: - > pdb = PdbStructure(open("1ARJ.pdb")) - - Fetch the first atom of the structure: - > print pdb.iter_atoms().next() - ATOM 1 O5' G N 17 13.768 -8.431 11.865 1.00 0.00 O - - Loop over all of the atoms of the structure - > for atom in pdb.iter_atoms(): - > print atom - ATOM 1 O5' G N 17 13.768 -8.431 11.865 1.00 0.00 O - ... - - Get a list of all atoms in the structure: - > atoms = list(pdb.iter_atoms()) - - also: - residues = list(pdb.iter_residues()) - positions = list(pdb.iter_positions()) - chains = list(pdb.iter_chains()) - models = list(pdb.iter_models()) - - Fetch atomic coordinates of first atom: - > print pdb.iter_positions().next() - [13.768, -8.431, 11.865] A - - or - - > print pdb.iter_atoms().next().position - [13.768, -8.431, 11.865] A - - Strip the length units from an atomic position: - > import simtk.unit - > pos = pdb.iter_positions().next() - > print pos - [13.768, -8.431, 11.865] A - > print pos / simtk.unit.angstroms - [13.768, -8.431, 11.865] - > print pos / simtk.unit.nanometers - [1.3768, -0.8431, 1.1865] - - - The hierarchical structure of the parsed PDB structure is as follows: - PdbStructure - Model - Chain - Residue - Atom - Location - - Model - A PDB structure consists of one or more Models. Each model corresponds to one version of - an NMR structure, or to one frame of a molecular dynamics trajectory. - - Chain - A Model contains one or more Chains. Each chain corresponds to one molecule, although multiple - water molecules are frequently included in the same chain. - - Residue - A Chain contains one or more Residues. One Residue corresponds to one of the repeating - unit that constitutes a polymer such as protein or DNA. For non-polymeric molecules, one Residue - represents one molecule. - - Atom - A Residue contains one or more Atoms. Atoms are chemical atoms. - - Location - An atom can sometimes have more that one position, due to static disorder in X-ray - crystal structures. To see all of the atom positions, use the atom.iter_positions() method, - or pass the parameter "include_alt_loc=True" to one of the other iter_positions() methods. - - > for pos in pdb.iter_positions(include_alt_loc=True): - > ... - - Will loop over all atom positions, including multiple alternate locations for atoms that have - multiple positions. The default value of include_alt_loc is False for the iter_positions() - methods. - """ - - - def __init__(self, input_stream, load_all_models = False): - """Create a PDB model from a PDB file stream. - - Parameters: - - self (PdbStructure) The new object that is created. - - input_stream (stream) An input file stream, probably created with - open(). - - load_all_models (bool) Whether to load every model of an NMR - structure or trajectory, or just load the first model, to save memory. - """ - # initialize models - self.load_all_models = load_all_models - self.models = [] - self._current_model = None - self.default_model = None - self.models_by_number = {} - self._periodic_box_vectors = None - self.sequences = [] - self.modified_residues = [] - # read file - self._load(input_stream) - - def _load(self, input_stream): - self._reset_atom_numbers() - self._reset_residue_numbers() - # Read one line at a time - for pdb_line in input_stream: - if not isinstance(pdb_line, str): - pdb_line = pdb_line.decode('utf-8') - # Look for atoms - if (pdb_line.find("ATOM ") == 0) or (pdb_line.find("HETATM") == 0): - self._add_atom(Atom(pdb_line, self)) - # Notice MODEL punctuation, for the next level of detail - # in the structure->model->chain->residue->atom->position hierarchy - elif (pdb_line.find("MODEL") == 0): - model_number = int(pdb_line[10:14]) - self._add_model(Model(model_number)) - self._reset_atom_numbers() - self._reset_residue_numbers() - elif (pdb_line.find("ENDMDL") == 0): - self._current_model._finalize() - if not self.load_all_models: - break - elif (pdb_line.find("END") == 0): - self._current_model._finalize() - if not self.load_all_models: - break - elif (pdb_line.find("TER") == 0 and pdb_line.split()[0] == "TER"): - self._current_model._current_chain._add_ter_record() - self._reset_residue_numbers() - elif (pdb_line.find("CRYST1") == 0): - a_length = float(pdb_line[6:15])*0.1 - b_length = float(pdb_line[15:24])*0.1 - c_length = float(pdb_line[24:33])*0.1 - alpha = float(pdb_line[33:40])*math.pi/180.0 - beta = float(pdb_line[40:47])*math.pi/180.0 - gamma = float(pdb_line[47:54])*math.pi/180.0 - self._periodic_box_vectors = computePeriodicBoxVectors(a_length, b_length, c_length, alpha, beta, gamma) - elif (pdb_line.find("CONECT") == 0): - atoms = [int(pdb_line[6:11])] - for pos in (11,16,21,26): - try: - atoms.append(int(pdb_line[pos:pos+5])) - except: - pass - self._current_model.connects.append(atoms) - elif (pdb_line.find("SEQRES") == 0): - chain_id = pdb_line[11] - if len(self.sequences) == 0 or chain_id != self.sequences[-1].chain_id: - self.sequences.append(Sequence(chain_id)) - self.sequences[-1].residues.extend(pdb_line[19:].split()) - elif (pdb_line.find("MODRES") == 0): - self.modified_residues.append(ModifiedResidue(pdb_line[16], int(pdb_line[18:22]), pdb_line[12:15].strip(), pdb_line[24:27].strip())) - self._finalize() - - def _reset_atom_numbers(self): - self._atom_numbers_are_hex = False - self._next_atom_number = 1 - - def _reset_residue_numbers(self): - self._residue_numbers_are_hex = False - self._next_residue_number = 1 - - def write(self, output_stream=sys.stdout): - """Write out structure in PDB format""" - for model in self.models: - if len(model.chains) == 0: - continue - if len(self.models) > 1: - print >>output_stream, "MODEL %4d" % (model.number) - model.write(output_stream) - if len(self.models) > 1: - print >>output_stream, "ENDMDL" - print >>output_stream, "END" - - def _add_model(self, model): - if self.default_model == None: - self.default_model = model - self.models.append(model) - self._current_model = model - if model.number not in self.models_by_number: - self.models_by_number[model.number] = model - - def get_model(self, model_number): - return self.models_by_number[model_number] - - def model_numbers(self): - return self.models_by_number.keys() - - def __contains__(self, model_number): - return self.models_by_number.__contains__(model_number) - - def __getitem__(self, model_number): - return self.models_by_number[model_number] - - def __iter__(self): - for model in self.models: - yield model - - def iter_models(self, use_all_models=False): - if use_all_models: - for model in self: - yield model - elif len(self.models) > 0: - yield self.models[0] - - def iter_chains(self, use_all_models=False): - for model in self.iter_models(use_all_models): - for chain in model.iter_chains(): - yield chain - - def iter_residues(self, use_all_models=False): - for model in self.iter_models(use_all_models): - for res in model.iter_residues(): - yield res - - def iter_atoms(self, use_all_models=False): - for model in self.iter_models(use_all_models): - for atom in model.iter_atoms(): - yield atom - - def iter_positions(self, use_all_models=False, include_alt_loc=False): - """ - Iterate over atomic positions. - - Parameters - - use_all_models (bool=False) Get positions from all models or just the first one. - - include_alt_loc (bool=False) Get all positions for each atom, or just the first one. - """ - for model in self.iter_models(use_all_models): - for loc in model.iter_positions(include_alt_loc): - yield loc - - def __len__(self): - return len(self.models) - - def _add_atom(self, atom): - """ - """ - if self._current_model == None: - self._add_model(Model(0)) - atom.model_number = self._current_model.number - # Atom might be alternate position for existing atom - self._current_model._add_atom(atom) - - def _finalize(self): - """Establish first and last residues, atoms, etc.""" - for model in self.models: - model._finalize() - - def get_periodic_box_vectors(self): - """Get the vectors defining the crystallographic unit cell (may be None).""" - return self._periodic_box_vectors - - -class Sequence(object): - """Sequence holds the sequence of a chain, as specified by SEQRES records.""" - def __init__(self, chain_id): - self.chain_id = chain_id - self.residues = [] - -class ModifiedResidue(object): - """ModifiedResidue holds information about a modified residue, as specified by a MODRES record.""" - def __init__(self, chain_id, number, residue_name, standard_name): - self.chain_id = chain_id - self.number = number - self.residue_name = residue_name - self.standard_name = standard_name - - -class Model(object): - """Model holds one model of a PDB structure. - - NMR structures usually have multiple models. This represents one - of them. - """ - def __init__(self, model_number=1): - self.number = model_number - self.chains = [] - self._current_chain = None - self.chains_by_id = {} - self.connects = [] - - def _add_atom(self, atom): - """ - """ - if len(self.chains) == 0: - self._add_chain(Chain(atom.chain_id)) - # Create a new chain if the chain id has changed - if self._current_chain.chain_id != atom.chain_id: - self._add_chain(Chain(atom.chain_id)) - # Create a new chain after TER record, even if ID is the same - elif self._current_chain.has_ter_record: - self._add_chain(Chain(atom.chain_id)) - self._current_chain._add_atom(atom) - - def _add_chain(self, chain): - self.chains.append(chain) - self._current_chain = chain - if not chain.chain_id in self.chains_by_id: - self.chains_by_id[chain.chain_id] = chain - - def get_chain(self, chain_id): - return self.chains_by_id[chain_id] - - def chain_ids(self): - return self.chains_by_id.keys() - - def __contains__(self, chain_id): - return self.chains_by_id.__contains__(chain_id) - - def __getitem__(self, chain_id): - return self.chains_by_id[chain_id] - - def __iter__(self): - return iter(self.chains) - - def iter_chains(self): - for chain in self: - yield chain - - def iter_residues(self): - for chain in self: - for res in chain.iter_residues(): - yield res - - def iter_atoms(self): - for chain in self: - for atom in chain.iter_atoms(): - yield atom - - def iter_positions(self, include_alt_loc=False): - for chain in self: - for loc in chain.iter_positions(include_alt_loc): - yield loc - - def __len__(self): - return len(self.chains) - - def write(self, output_stream=sys.stdout): - # Start atom serial numbers at 1 - sn = Model.AtomSerialNumber(1) - for chain in self.chains: - chain.write(sn, output_stream) - - def _finalize(self): - for chain in self.chains: - chain._finalize() - - - class AtomSerialNumber(object): - """pdb.Model inner class for pass-by-reference incrementable serial number""" - def __init__(self, val): - self.val = val - - def increment(self): - self.val += 1 - - -class Chain(object): - def __init__(self, chain_id=' '): - self.chain_id = chain_id - self.residues = [] - self.has_ter_record = False - self._current_residue = None - self.residues_by_num_icode = {} - self.residues_by_number = {} - - def _add_atom(self, atom): - """ - """ - # Create a residue if none have been created - if len(self.residues) == 0: - self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) - # Create a residue if the residue information has changed - elif self._current_residue.number != atom.residue_number: - self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) - elif self._current_residue.insertion_code != atom.insertion_code: - self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) - elif self._current_residue.name_with_spaces == atom.residue_name_with_spaces: - # This is a normal case: number, name, and iCode have not changed - pass - elif atom.alternate_location_indicator != ' ': - # OK - this is a point mutation, Residue._add_atom will know what to do - pass - else: # Residue name does not match - # Only residue name does not match - warnings.warn("WARNING: two consecutive residues with same number (%s, %s)" % (atom, self._current_residue.atoms[-1])) - self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) - self._current_residue._add_atom(atom) - - def _add_residue(self, residue): - if len(self.residues) == 0: - residue.is_first_in_chain = True - self.residues.append(residue) - self._current_residue = residue - key = str(residue.number) + residue.insertion_code - # only store the first residue with a particular key - if key not in self.residues_by_num_icode: - self.residues_by_num_icode[key] = residue - if residue.number not in self.residues_by_number: - self.residues_by_number[residue.number] = residue - - def write(self, next_serial_number, output_stream=sys.stdout): - for residue in self.residues: - residue.write(next_serial_number, output_stream) - if self.has_ter_record: - r = self.residues[-1] - print >>output_stream, "TER %5d %3s %1s%4d%1s" % (next_serial_number.val, r.name_with_spaces, self.chain_id, r.number, r.insertion_code) - next_serial_number.increment() - - def _add_ter_record(self): - self.has_ter_record = True - self._finalize() - - def get_residue(self, residue_number, insertion_code=' '): - return self.residues_by_num_icode[str(residue_number) + insertion_code] - - def __contains__(self, residue_number): - return self.residues_by_number.__contains__(residue_number) - - def __getitem__(self, residue_number): - """Returns the FIRST residue in this chain with a particular residue number""" - return self.residues_by_number[residue_number] - - def __iter__(self): - for res in self.residues: - yield res - - def iter_residues(self): - for res in self: - yield res - - def iter_atoms(self): - for res in self: - for atom in res: - yield atom; - - def iter_positions(self, include_alt_loc=False): - for res in self: - for loc in res.iter_positions(include_alt_loc): - yield loc - - def __len__(self): - return len(self.residues) - - def _finalize(self): - self.residues[0].is_first_in_chain = True - self.residues[-1].is_final_in_chain = True - for residue in self.residues: - residue._finalize() - - -class Residue(object): - def __init__(self, name, number, insertion_code=' ', primary_alternate_location_indicator=' '): - alt_loc = primary_alternate_location_indicator - self.primary_location_id = alt_loc - self.locations = {} - self.locations[alt_loc] = Residue.Location(alt_loc, name) - self.name_with_spaces = name - self.number = number - self.insertion_code = insertion_code - self.atoms = [] - self.atoms_by_name = {} - self.is_first_in_chain = False - self.is_final_in_chain = False - self._current_atom = None - - def _add_atom(self, atom): - """ - """ - alt_loc = atom.alternate_location_indicator - if not self.locations.has_key(alt_loc): - self.locations[alt_loc] = Residue.Location(alt_loc, atom.residue_name_with_spaces) - assert atom.residue_number == self.number - assert atom.insertion_code == self.insertion_code - # Check whether this is an existing atom with another position - if (atom.name_with_spaces in self.atoms_by_name): - old_atom = self.atoms_by_name[atom.name_with_spaces] - # Unless this is a duplicated atom (warn about file error) - if atom.alternate_location_indicator in old_atom.locations: - warnings.warn("WARNING: duplicate atom (%s, %s)" % (atom, old_atom._pdb_string(old_atom.serial_number, atom.alternate_location_indicator))) - else: - for alt_loc, position in atom.locations.items(): - old_atom.locations[alt_loc] = position - return # no new atom added - # actually use new atom - self.atoms_by_name[atom.name] = atom - self.atoms_by_name[atom.name_with_spaces] = atom - self.atoms.append(atom) - self._current_atom = atom - - def write(self, next_serial_number, output_stream=sys.stdout, alt_loc = "*"): - for atom in self.atoms: - atom.write(next_serial_number, output_stream, alt_loc) - - def _finalize(self): - if len(self.atoms) > 0: - self.atoms[0].is_first_atom_in_chain = self.is_first_in_chain - self.atoms[-1].is_final_atom_in_chain = self.is_final_in_chain - for atom in self.atoms: - atom.is_first_residue_in_chain = self.is_first_in_chain - atom.is_final_residue_in_chain = self.is_final_in_chain - - def set_name_with_spaces(self, name, alt_loc=None): - # Gromacs ffamber PDB files can have 4-character residue names - # assert len(name) == 3 - if alt_loc == None: - alt_loc = self.primary_location_id - loc = self.locations[alt_loc] - loc.name_with_spaces = name - loc.name = name.strip() - def get_name_with_spaces(self, alt_loc=None): - if alt_loc == None: - alt_loc = self.primary_location_id - loc = self.locations[alt_loc] - return loc.name_with_spaces - name_with_spaces = property(get_name_with_spaces, set_name_with_spaces, doc='four-character residue name including spaces') - - def get_name(self, alt_loc=None): - if alt_loc == None: - alt_loc = self.primary_location_id - loc = self.locations[alt_loc] - return loc.name - name = property(get_name, doc='residue name') - - def get_atom(self, atom_name): - return self.atoms_by_name[atom_name] - - def __contains__(self, atom_name): - return self.atoms_by_name.__contains__(atom_name) - - def __getitem__(self, atom_name): - """Returns the FIRST atom in this residue with a particular atom name""" - return self.atoms_by_name[atom_name] - - def __iter__(self): - """ - >>> pdb_lines = [ \ - "ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N",\ - "ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C",\ - "ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C",\ - "ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O",\ - "ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C",\ - "ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S"] - >>> res = Residue("CYS", 42) - >>> for l in pdb_lines: - ... res._add_atom(Atom(l)) - ... - >>> for atom in res: - ... print atom - ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N - ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C - ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C - ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O - ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C - ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S - """ - for atom in self.iter_atoms(): - yield atom - - # Three possibilities: primary alt_loc, certain alt_loc, or all alt_locs - def iter_atoms(self, alt_loc=None): - if alt_loc == None: - locs = [self.primary_location_id] - elif alt_loc == "": - locs = [self.primary_location_id] - elif alt_loc == "*": - locs = None - else: - locs = list(alt_loc) - # If an atom has any location in alt_loc, emit the atom - for atom in self.atoms: - use_atom = False # start pessimistic - for loc2 in atom.locations.keys(): - # print "#%s#%s" % (loc2,locs) - if locs == None: # means all locations - use_atom = True - elif loc2 in locs: - use_atom = True - if use_atom: - yield atom - - def iter_positions(self, include_alt_loc=False): - """ - Returns one position per atom, even if an individual atom has multiple positions. - - >>> pdb_lines = [ \ - "ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N",\ - "ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C",\ - "ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C",\ - "ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O",\ - "ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C",\ - "ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S"] - >>> res = Residue("CYS", 42) - >>> for l in pdb_lines: res._add_atom(Atom(l)) - >>> for c in res.iter_positions: - ... print c - Traceback (most recent call last): - File "", line 1, in - TypeError: 'instancemethod' object is not iterable - >>> for c in res.iter_positions(): - ... print c - [40.714, -5.292, 12.123] A - [39.736, -5.883, 12.911] A - [40.339, -6.654, 14.087] A - [41.181, -7.53, 13.859] A - [38.949, -6.825, 12.002] A - [37.557, -7.514, 12.922] A - """ - for atom in self: - if include_alt_loc: - for loc in atom.iter_positions(): - yield loc - else: - yield atom.position - - def __len__(self): - return len(self.atoms) - - # Residues can have multiple locations, based on alt_loc indicator - class Location: - """ - Inner class of residue to allow different residue names for different alternate_locations. - """ - def __init__(self, alternate_location_indicator, residue_name_with_spaces): - self.alternate_location_indicator = alternate_location_indicator - self.residue_name_with_spaces = residue_name_with_spaces - - -class Atom(object): - """Atom represents one atom in a PDB structure. - """ - def __init__(self, pdb_line, pdbstructure=None): - """Create a new pdb.Atom from an ATOM or HETATM line. - - Example line: - ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C - 00000000011111111112222222222333333333344444444445555555555666666666677777777778 - 12345678901234567890123456789012345678901234567890123456789012345678901234567890 - - ATOM line format description from - http://deposit.rcsb.org/adit/docs/pdb_atom_format.html: - - COLUMNS DATA TYPE CONTENTS - -------------------------------------------------------------------------------- - 1 - 6 Record name "ATOM " - 7 - 11 Integer Atom serial number. - 13 - 16 Atom Atom name. - 17 Character Alternate location indicator. - 18 - 20 Residue name Residue name. - 22 Character Chain identifier. - 23 - 26 Integer Residue sequence number. - 27 AChar Code for insertion of residues. - 31 - 38 Real(8.3) Orthogonal coordinates for X in Angstroms. - 39 - 46 Real(8.3) Orthogonal coordinates for Y in Angstroms. - 47 - 54 Real(8.3) Orthogonal coordinates for Z in Angstroms. - 55 - 60 Real(6.2) Occupancy (Default = 1.0). - 61 - 66 Real(6.2) Temperature factor (Default = 0.0). - 73 - 76 LString(4) Segment identifier, left-justified. - 77 - 78 LString(2) Element symbol, right-justified. - 79 - 80 LString(2) Charge on the atom. - - """ - # We might modify first/final status during _finalize() methods - self.is_first_atom_in_chain = False - self.is_final_atom_in_chain = False - self.is_first_residue_in_chain = False - self.is_final_residue_in_chain = False - # Start parsing fields from pdb line - self.record_name = pdb_line[0:6].strip() - if pdbstructure is not None and pdbstructure._atom_numbers_are_hex: - self.serial_number = int(pdb_line[6:11], 16) - else: - try: - self.serial_number = int(pdb_line[6:11]) - except: - try: - self.serial_number = int(pdb_line[6:11], 16) - pdbstructure._atom_numbers_are_hex = True - except: - # Just give it the next number in sequence. - self.serial_number = pdbstructure._next_atom_number - self.name_with_spaces = pdb_line[12:16] - alternate_location_indicator = pdb_line[16] - - self.residue_name_with_spaces = pdb_line[17:20] - # In some MD codes, notably ffamber in gromacs, residue name has a fourth character in - # column 21 - possible_fourth_character = pdb_line[20:21] - if possible_fourth_character != " ": - # Fourth character should only be there if official 3 are already full - if len(self.residue_name_with_spaces.strip()) != 3: - raise ValueError('Misaligned residue name: %s' % pdb_line) - self.residue_name_with_spaces += possible_fourth_character - self.residue_name = self.residue_name_with_spaces.strip() - - self.chain_id = pdb_line[21] - if pdbstructure is not None and pdbstructure._residue_numbers_are_hex: - self.residue_number = int(pdb_line[22:26], 16) - else: - try: - self.residue_number = int(pdb_line[22:26]) - except: - try: - self.residue_number = int(pdb_line[22:26], 16) - pdbstructure._residue_numbers_are_hex = True - except: - # When VMD runs out of hex values it starts filling the residue ID field with ****. - # Look at the most recent atoms to figure out whether this is a new residue or not. - if pdbstructure._current_model is None or pdbstructure._current_model._current_chain is None or pdbstructure._current_model._current_chain._current_residue is None: - # This is the first residue in the model. - self.residue_number = pdbstructure._next_residue_number - else: - currentRes = pdbstructure._current_model._current_chain._current_residue - if currentRes.name_with_spaces != self.residue_name_with_spaces: - # The residue name has changed. - self.residue_number = pdbstructure._next_residue_number - elif self.name_with_spaces in currentRes.atoms_by_name: - # There is already an atom with this name. - self.residue_number = pdbstructure._next_residue_number - else: - self.residue_number = currentRes.number - self.insertion_code = pdb_line[26] - # coordinates, occupancy, and temperature factor belong in Atom.Location object - x = float(pdb_line[30:38]) - y = float(pdb_line[38:46]) - z = float(pdb_line[46:54]) - try: - occupancy = float(pdb_line[54:60]) - except: - occupancy = 1.0 - try: - temperature_factor = float(pdb_line[60:66]) * unit.angstroms * unit.angstroms - except: - temperature_factor = 0.0 * unit.angstroms * unit.angstroms - self.locations = {} - loc = Atom.Location(alternate_location_indicator, Vec3(x,y,z) * unit.angstroms, occupancy, temperature_factor, self.residue_name_with_spaces) - self.locations[alternate_location_indicator] = loc - self.default_location_id = alternate_location_indicator - # segment id, element_symbol, and formal_charge are not always present - self.segment_id = pdb_line[72:76].strip() - self.element_symbol = pdb_line[76:78].strip() - try: self.formal_charge = int(pdb_line[78:80]) - except ValueError: self.formal_charge = None - # figure out atom element - try: - # Try to find a sensible element symbol from columns 76-77 - self.element = element.get_by_symbol(self.element_symbol) - except KeyError: - self.element = None - if pdbstructure is not None: - pdbstructure._next_atom_number = self.serial_number+1 - pdbstructure._next_residue_number = self.residue_number+1 - - def iter_locations(self): - """ - Iterate over Atom.Location objects for this atom, including primary location. - - >>> atom = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") - >>> for c in atom.iter_locations(): - ... print c - ... - [6.167, 22.607, 20.046] A - """ - for alt_loc in self.locations: - yield self.locations[alt_loc] - - def iter_positions(self): - """ - Iterate over atomic positions. Returns Quantity(Vec3(), unit) objects, unlike - iter_locations, which returns Atom.Location objects. - """ - for loc in self.iter_locations(): - yield loc.position - - def iter_coordinates(self): - """ - Iterate over x, y, z values of primary atom position. - - >>> atom = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") - >>> for c in atom.iter_coordinates(): - ... print c - ... - 6.167 A - 22.607 A - 20.046 A - """ - for coord in self.position: - yield coord - - # Hide existence of multiple alternate locations to avoid scaring casual users - def get_location(self, location_id=None): - id = location_id - if (id == None): - id = self.default_location_id - return self.locations[id] - def set_location(self, new_location, location_id=None): - id = location_id - if (id == None): - id = self.default_location_id - self.locations[id] = new_location - location = property(get_location, set_location, doc='default Atom.Location object') - - def get_position(self): - return self.location.position - def set_position(self, coords): - self.location.position = coords - position = property(get_position, set_position, doc='orthogonal coordinates') - - def get_alternate_location_indicator(self): - return self.location.alternate_location_indicator - alternate_location_indicator = property(get_alternate_location_indicator) - - def get_occupancy(self): - return self.location.occupancy - occupancy = property(get_occupancy) - - def get_temperature_factor(self): - return self.location.temperature_factor - temperature_factor = property(get_temperature_factor) - - def get_x(self): return self.position[0] - x = property(get_x) - - def get_y(self): return self.position[1] - y = property(get_y) - - def get_z(self): return self.position[2] - z = property(get_z) - - def _pdb_string(self, serial_number=None, alternate_location_indicator=None): - """ - Produce a PDB line for this atom using a particular serial number and alternate location - """ - if serial_number == None: - serial_number = self.serial_number - if alternate_location_indicator == None: - alternate_location_indicator = self.alternate_location_indicator - # produce PDB line in three parts: names, numbers, and end - # Accomodate 4-character residue names that use column 21 - long_res_name = self.residue_name_with_spaces - if len(long_res_name) == 3: - long_res_name += " " - assert len(long_res_name) == 4 - names = "%-6s%5d %4s%1s%4s%1s%4d%1s " % ( - self.record_name, serial_number, \ - self.name_with_spaces, alternate_location_indicator, \ - long_res_name, self.chain_id, \ - self.residue_number, self.insertion_code) - numbers = "%8.3f%8.3f%8.3f%6.2f%6.2f " % ( - self.x.value_in_unit(unit.angstroms), \ - self.y.value_in_unit(unit.angstroms), \ - self.z.value_in_unit(unit.angstroms), \ - self.occupancy, \ - self.temperature_factor.value_in_unit(unit.angstroms * unit.angstroms)) - end = "%-4s%2s" % (\ - self.segment_id, self.element_symbol) - formal_charge = " " - if (self.formal_charge != None): formal_charge = "%+2d" % self.formal_charge - return names+numbers+end+formal_charge - - def __str__(self): - return self._pdb_string(self.serial_number, self.alternate_location_indicator) - - def write(self, next_serial_number, output_stream=sys.stdout, alt_loc = "*"): - """ - alt_loc = "*" means write all alternate locations - alt_loc = None means write just the primary location - alt_loc = "AB" means write locations "A" and "B" - """ - if alt_loc == None: - locs = [self.default_location_id] - elif alt_loc == "": - locs = [self.default_location_id] - elif alt_loc == "*": - locs = self.locations.keys() - locs.sort() - else: - locs = list(alt_loc) - for loc_id in locs: - print >>output_stream, self._pdb_string(next_serial_number.val, loc_id) - next_serial_number.increment() - - def set_name_with_spaces(self, name): - assert len(name) == 4 - self._name_with_spaces = name - self._name = name.strip() - def get_name_with_spaces(self): - return self._name_with_spaces - name_with_spaces = property(get_name_with_spaces, set_name_with_spaces, doc='four-character residue name including spaces') - - def get_name(self): - return self._name - name = property(get_name, doc='residue name') - - class Location(object): - """ - Inner class of Atom for holding alternate locations - """ - def __init__(self, alt_loc, position, occupancy, temperature_factor, residue_name): - self.alternate_location_indicator = alt_loc - self.position = position - self.occupancy = occupancy - self.temperature_factor = temperature_factor - self.residue_name = residue_name - - def __iter__(self): - """ - Examples - - >>> from simtk.openmm.vec3 import Vec3 - >>> import simtk.unit as unit - >>> l = Atom.Location(' ', Vec3(1,2,3)*unit.angstroms, 1.0, 20.0*unit.angstroms**2, "XXX") - >>> for c in l: - ... print c - ... - 1 A - 2 A - 3 A - """ - for coord in self.position: - yield coord - - def __str__(self): - return str(self.position) - - -# run module directly for testing -if __name__=='__main__': - # Test the examples in the docstrings - import doctest, sys - doctest.testmod(sys.modules[__name__]) - - import os - import gzip - import re - import time - - # Test atom line parsing - pdb_line = "ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C" - a = Atom(pdb_line) - assert a.record_name == "ATOM" - assert a.serial_number == 2209 - assert a.name == "CB" - assert a.name_with_spaces == " CB " - assert a.residue_name == "TYR" - assert a.residue_name_with_spaces == "TYR" - assert a.chain_id == "A" - assert a.residue_number == 299 - assert a.insertion_code == " " - assert a.alternate_location_indicator == " " - assert a.x == 6.167 * unit.angstroms - assert a.y == 22.607 * unit.angstroms - assert a.z == 20.046 * unit.angstroms - assert a.occupancy == 1.00 - assert a.temperature_factor == 8.12 * unit.angstroms * unit.angstroms - assert a.segment_id == "" - assert a.element_symbol == "C" - - # print pdb_line - # print str(a) - assert str(a).rstrip() == pdb_line.rstrip() - - a = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") - - # misaligned residue name - bad - try: - a = Atom("ATOM 2209 CB TYRA 299 6.167 22.607 20.046 1.00 8.12 C") - assert(False) - except ValueError: pass - # four character residue name -- not so bad - a = Atom("ATOM 2209 CB NTYRA 299 6.167 22.607 20.046 1.00 8.12 C") - - atom_count = 0 - residue_count = 0 - chain_count = 0 - model_count = 0 - structure_count = 0 - - def parse_one_pdb(pdb_file_name): - global atom_count, residue_count, chain_count, model_count, structure_count - print pdb_file_name - if pdb_file_name[-3:] == ".gz": - fh = gzip.open(pdb_file_name) - else: - fh = open(pdb_file_name) - pdb = PdbStructure(fh, load_all_models=True) - # print " %d atoms found" % len(pdb.atoms) - atom_count += len(list(pdb.iter_atoms())) - residue_count += len(list(pdb.iter_residues())) - chain_count += len(list(pdb.iter_chains())) - model_count += len(list(pdb.iter_models())) - structure_count += 1 - fh.close - return pdb - - # Parse one file - pdb_file_name = "/home/Christopher Bruns/Desktop/1ARJ.pdb" - if os.path.exists(pdb_file_name): - parse_one_pdb(pdb_file_name) - - # try parsing the entire PDB - pdb_dir = "/cygdrive/j/pdb/data/structures/divided/pdb" - if os.path.exists(pdb_dir): - parse_entire_pdb = False - parse_one_division = False - parse_one_file = False - start_time = time.time() - if parse_one_file: - pdb_id = "2aed" - middle_two = pdb_id[1:3] - full_pdb_file = os.path.join(pdb_dir, middle_two, "pdb%s.ent.gz" % pdb_id) - parse_one_pdb(full_pdb_file) - if parse_one_division: - subdir = "ae" - full_subdir = os.path.join(pdb_dir, subdir) - for pdb_file in os.listdir(full_subdir): - if not re.match("pdb.%2s.\.ent\.gz" % subdir , pdb_file): - continue - full_pdb_file = os.path.join(full_subdir, pdb_file) - parse_one_pdb(full_pdb_file) - if parse_entire_pdb: - for subdir in os.listdir(pdb_dir): - if not len(subdir) == 2: continue - full_subdir = os.path.join(pdb_dir, subdir) - if not os.path.isdir(full_subdir): - continue - for pdb_file in os.listdir(full_subdir): - if not re.match("pdb.%2s.\.ent\.gz" % subdir , pdb_file): - continue - full_pdb_file = os.path.join(full_subdir, pdb_file) - parse_one_pdb(full_pdb_file) - - end_time = time.time() - elapsed = end_time - start_time - minutes = elapsed / 60 - seconds = elapsed % 60 - hours = minutes / 60 - minutes = minutes % 60 - print "%dh:%02dm:%02ds elapsed" % (hours, minutes, seconds) - - print "%d atoms found" % atom_count - print "%d residues found" % residue_count - print "%d chains found" % chain_count - print "%d models found" % model_count - print "%d structures found" % structure_count +""" +pdbstructure.py: Used for managing PDB formated files. + +This is part of the OpenMM molecular simulation toolkit originating from +Simbios, the NIH National Center for Physics-Based Simulation of +Biological Structures at Stanford, funded under the NIH Roadmap for +Medical Research, grant U54 GM072970. See https://simtk.org. + +Portions copyright (c) 2012-2015 Stanford University and the Authors. +Authors: Christopher M. Bruns +Contributors: Peter Eastman + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +""" +from __future__ import absolute_import +from __future__ import print_function +__author__ = "Christopher M. Bruns" +__version__ = "1.0" + + +from simtk.openmm.vec3 import Vec3 +import simtk.unit as unit +from .. import element +from .unitcell import computePeriodicBoxVectors +import warnings +import sys +import math + +class PdbStructure(object): + """ + PdbStructure object holds a parsed Protein Data Bank format file. + + Examples: + + Load a pdb structure from a file: + > pdb = PdbStructure(open("1ARJ.pdb")) + + Fetch the first atom of the structure: + > print pdb.iter_atoms().next() + ATOM 1 O5' G N 17 13.768 -8.431 11.865 1.00 0.00 O + + Loop over all of the atoms of the structure + > for atom in pdb.iter_atoms(): + > print atom + ATOM 1 O5' G N 17 13.768 -8.431 11.865 1.00 0.00 O + ... + + Get a list of all atoms in the structure: + > atoms = list(pdb.iter_atoms()) + + also: + residues = list(pdb.iter_residues()) + positions = list(pdb.iter_positions()) + chains = list(pdb.iter_chains()) + models = list(pdb.iter_models()) + + Fetch atomic coordinates of first atom: + > print pdb.iter_positions().next() + [13.768, -8.431, 11.865] A + + or + + > print pdb.iter_atoms().next().position + [13.768, -8.431, 11.865] A + + Strip the length units from an atomic position: + > import simtk.unit + > pos = pdb.iter_positions().next() + > print pos + [13.768, -8.431, 11.865] A + > print pos / simtk.unit.angstroms + [13.768, -8.431, 11.865] + > print pos / simtk.unit.nanometers + [1.3768, -0.8431, 1.1865] + + + The hierarchical structure of the parsed PDB structure is as follows: + PdbStructure + Model + Chain + Residue + Atom + Location + + Model - A PDB structure consists of one or more Models. Each model corresponds to one version of + an NMR structure, or to one frame of a molecular dynamics trajectory. + + Chain - A Model contains one or more Chains. Each chain corresponds to one molecule, although multiple + water molecules are frequently included in the same chain. + + Residue - A Chain contains one or more Residues. One Residue corresponds to one of the repeating + unit that constitutes a polymer such as protein or DNA. For non-polymeric molecules, one Residue + represents one molecule. + + Atom - A Residue contains one or more Atoms. Atoms are chemical atoms. + + Location - An atom can sometimes have more that one position, due to static disorder in X-ray + crystal structures. To see all of the atom positions, use the atom.iter_positions() method, + or pass the parameter "include_alt_loc=True" to one of the other iter_positions() methods. + + > for pos in pdb.iter_positions(include_alt_loc=True): + > ... + + Will loop over all atom positions, including multiple alternate locations for atoms that have + multiple positions. The default value of include_alt_loc is False for the iter_positions() + methods. + """ + + + def __init__(self, input_stream, load_all_models = False): + """Create a PDB model from a PDB file stream. + + Parameters: + - self (PdbStructure) The new object that is created. + - input_stream (stream) An input file stream, probably created with + open(). + - load_all_models (bool) Whether to load every model of an NMR + structure or trajectory, or just load the first model, to save memory. + """ + # initialize models + self.load_all_models = load_all_models + self.models = [] + self._current_model = None + self.default_model = None + self.models_by_number = {} + self._periodic_box_vectors = None + self.sequences = [] + self.modified_residues = [] + # read file + self._load(input_stream) + + def _load(self, input_stream): + self._reset_atom_numbers() + self._reset_residue_numbers() + # Read one line at a time + for pdb_line in input_stream: + if not isinstance(pdb_line, str): + pdb_line = pdb_line.decode('utf-8') + # Look for atoms + if (pdb_line.find("ATOM ") == 0) or (pdb_line.find("HETATM") == 0): + self._add_atom(Atom(pdb_line, self)) + # Notice MODEL punctuation, for the next level of detail + # in the structure->model->chain->residue->atom->position hierarchy + elif (pdb_line.find("MODEL") == 0): + model_number = int(pdb_line[10:14]) + self._add_model(Model(model_number)) + self._reset_atom_numbers() + self._reset_residue_numbers() + elif (pdb_line.find("ENDMDL") == 0): + self._current_model._finalize() + if not self.load_all_models: + break + elif (pdb_line.find("END") == 0): + self._current_model._finalize() + if not self.load_all_models: + break + elif (pdb_line.find("TER") == 0 and pdb_line.split()[0] == "TER"): + self._current_model._current_chain._add_ter_record() + self._reset_residue_numbers() + elif (pdb_line.find("CRYST1") == 0): + a_length = float(pdb_line[6:15])*0.1 + b_length = float(pdb_line[15:24])*0.1 + c_length = float(pdb_line[24:33])*0.1 + alpha = float(pdb_line[33:40])*math.pi/180.0 + beta = float(pdb_line[40:47])*math.pi/180.0 + gamma = float(pdb_line[47:54])*math.pi/180.0 + self._periodic_box_vectors = computePeriodicBoxVectors(a_length, b_length, c_length, alpha, beta, gamma) + elif (pdb_line.find("CONECT") == 0): + atoms = [int(pdb_line[6:11])] + for pos in (11,16,21,26): + try: + atoms.append(int(pdb_line[pos:pos+5])) + except: + pass + self._current_model.connects.append(atoms) + elif (pdb_line.find("SEQRES") == 0): + chain_id = pdb_line[11] + if len(self.sequences) == 0 or chain_id != self.sequences[-1].chain_id: + self.sequences.append(Sequence(chain_id)) + self.sequences[-1].residues.extend(pdb_line[19:].split()) + elif (pdb_line.find("MODRES") == 0): + self.modified_residues.append(ModifiedResidue(pdb_line[16], int(pdb_line[18:22]), pdb_line[12:15].strip(), pdb_line[24:27].strip())) + self._finalize() + + def _reset_atom_numbers(self): + self._atom_numbers_are_hex = False + self._next_atom_number = 1 + + def _reset_residue_numbers(self): + self._residue_numbers_are_hex = False + self._next_residue_number = 1 + + def write(self, output_stream=sys.stdout): + """Write out structure in PDB format""" + for model in self.models: + if len(model.chains) == 0: + continue + if len(self.models) > 1: + print("MODEL %4d" % (model.number), file=output_stream) + model.write(output_stream) + if len(self.models) > 1: + print("ENDMDL", file=output_stream) + print("END", file=output_stream) + + def _add_model(self, model): + if self.default_model == None: + self.default_model = model + self.models.append(model) + self._current_model = model + if model.number not in self.models_by_number: + self.models_by_number[model.number] = model + + def get_model(self, model_number): + return self.models_by_number[model_number] + + def model_numbers(self): + return self.models_by_number.keys() + + def __contains__(self, model_number): + return self.models_by_number.__contains__(model_number) + + def __getitem__(self, model_number): + return self.models_by_number[model_number] + + def __iter__(self): + for model in self.models: + yield model + + def iter_models(self, use_all_models=False): + if use_all_models: + for model in self: + yield model + elif len(self.models) > 0: + yield self.models[0] + + def iter_chains(self, use_all_models=False): + for model in self.iter_models(use_all_models): + for chain in model.iter_chains(): + yield chain + + def iter_residues(self, use_all_models=False): + for model in self.iter_models(use_all_models): + for res in model.iter_residues(): + yield res + + def iter_atoms(self, use_all_models=False): + for model in self.iter_models(use_all_models): + for atom in model.iter_atoms(): + yield atom + + def iter_positions(self, use_all_models=False, include_alt_loc=False): + """ + Iterate over atomic positions. + + Parameters + - use_all_models (bool=False) Get positions from all models or just the first one. + - include_alt_loc (bool=False) Get all positions for each atom, or just the first one. + """ + for model in self.iter_models(use_all_models): + for loc in model.iter_positions(include_alt_loc): + yield loc + + def __len__(self): + return len(self.models) + + def _add_atom(self, atom): + """ + """ + if self._current_model == None: + self._add_model(Model(0)) + atom.model_number = self._current_model.number + # Atom might be alternate position for existing atom + self._current_model._add_atom(atom) + + def _finalize(self): + """Establish first and last residues, atoms, etc.""" + for model in self.models: + model._finalize() + + def get_periodic_box_vectors(self): + """Get the vectors defining the crystallographic unit cell (may be None).""" + return self._periodic_box_vectors + + +class Sequence(object): + """Sequence holds the sequence of a chain, as specified by SEQRES records.""" + def __init__(self, chain_id): + self.chain_id = chain_id + self.residues = [] + +class ModifiedResidue(object): + """ModifiedResidue holds information about a modified residue, as specified by a MODRES record.""" + def __init__(self, chain_id, number, residue_name, standard_name): + self.chain_id = chain_id + self.number = number + self.residue_name = residue_name + self.standard_name = standard_name + + +class Model(object): + """Model holds one model of a PDB structure. + + NMR structures usually have multiple models. This represents one + of them. + """ + def __init__(self, model_number=1): + self.number = model_number + self.chains = [] + self._current_chain = None + self.chains_by_id = {} + self.connects = [] + + def _add_atom(self, atom): + """ + """ + if len(self.chains) == 0: + self._add_chain(Chain(atom.chain_id)) + # Create a new chain if the chain id has changed + if self._current_chain.chain_id != atom.chain_id: + self._add_chain(Chain(atom.chain_id)) + # Create a new chain after TER record, even if ID is the same + elif self._current_chain.has_ter_record: + self._add_chain(Chain(atom.chain_id)) + self._current_chain._add_atom(atom) + + def _add_chain(self, chain): + self.chains.append(chain) + self._current_chain = chain + if not chain.chain_id in self.chains_by_id: + self.chains_by_id[chain.chain_id] = chain + + def get_chain(self, chain_id): + return self.chains_by_id[chain_id] + + def chain_ids(self): + return self.chains_by_id.keys() + + def __contains__(self, chain_id): + return self.chains_by_id.__contains__(chain_id) + + def __getitem__(self, chain_id): + return self.chains_by_id[chain_id] + + def __iter__(self): + return iter(self.chains) + + def iter_chains(self): + for chain in self: + yield chain + + def iter_residues(self): + for chain in self: + for res in chain.iter_residues(): + yield res + + def iter_atoms(self): + for chain in self: + for atom in chain.iter_atoms(): + yield atom + + def iter_positions(self, include_alt_loc=False): + for chain in self: + for loc in chain.iter_positions(include_alt_loc): + yield loc + + def __len__(self): + return len(self.chains) + + def write(self, output_stream=sys.stdout): + # Start atom serial numbers at 1 + sn = Model.AtomSerialNumber(1) + for chain in self.chains: + chain.write(sn, output_stream) + + def _finalize(self): + for chain in self.chains: + chain._finalize() + + + class AtomSerialNumber(object): + """pdb.Model inner class for pass-by-reference incrementable serial number""" + def __init__(self, val): + self.val = val + + def increment(self): + self.val += 1 + + +class Chain(object): + def __init__(self, chain_id=' '): + self.chain_id = chain_id + self.residues = [] + self.has_ter_record = False + self._current_residue = None + self.residues_by_num_icode = {} + self.residues_by_number = {} + + def _add_atom(self, atom): + """ + """ + # Create a residue if none have been created + if len(self.residues) == 0: + self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) + # Create a residue if the residue information has changed + elif self._current_residue.number != atom.residue_number: + self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) + elif self._current_residue.insertion_code != atom.insertion_code: + self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) + elif self._current_residue.name_with_spaces == atom.residue_name_with_spaces: + # This is a normal case: number, name, and iCode have not changed + pass + elif atom.alternate_location_indicator != ' ': + # OK - this is a point mutation, Residue._add_atom will know what to do + pass + else: # Residue name does not match + # Only residue name does not match + warnings.warn("WARNING: two consecutive residues with same number (%s, %s)" % (atom, self._current_residue.atoms[-1])) + self._add_residue(Residue(atom.residue_name_with_spaces, atom.residue_number, atom.insertion_code, atom.alternate_location_indicator)) + self._current_residue._add_atom(atom) + + def _add_residue(self, residue): + if len(self.residues) == 0: + residue.is_first_in_chain = True + self.residues.append(residue) + self._current_residue = residue + key = str(residue.number) + residue.insertion_code + # only store the first residue with a particular key + if key not in self.residues_by_num_icode: + self.residues_by_num_icode[key] = residue + if residue.number not in self.residues_by_number: + self.residues_by_number[residue.number] = residue + + def write(self, next_serial_number, output_stream=sys.stdout): + for residue in self.residues: + residue.write(next_serial_number, output_stream) + if self.has_ter_record: + r = self.residues[-1] + print("TER %5d %3s %1s%4d%1s" % (next_serial_number.val, r.name_with_spaces, self.chain_id, r.number, r.insertion_code), file=output_stream) + next_serial_number.increment() + + def _add_ter_record(self): + self.has_ter_record = True + self._finalize() + + def get_residue(self, residue_number, insertion_code=' '): + return self.residues_by_num_icode[str(residue_number) + insertion_code] + + def __contains__(self, residue_number): + return self.residues_by_number.__contains__(residue_number) + + def __getitem__(self, residue_number): + """Returns the FIRST residue in this chain with a particular residue number""" + return self.residues_by_number[residue_number] + + def __iter__(self): + for res in self.residues: + yield res + + def iter_residues(self): + for res in self: + yield res + + def iter_atoms(self): + for res in self: + for atom in res: + yield atom; + + def iter_positions(self, include_alt_loc=False): + for res in self: + for loc in res.iter_positions(include_alt_loc): + yield loc + + def __len__(self): + return len(self.residues) + + def _finalize(self): + self.residues[0].is_first_in_chain = True + self.residues[-1].is_final_in_chain = True + for residue in self.residues: + residue._finalize() + + +class Residue(object): + def __init__(self, name, number, insertion_code=' ', primary_alternate_location_indicator=' '): + alt_loc = primary_alternate_location_indicator + self.primary_location_id = alt_loc + self.locations = {} + self.locations[alt_loc] = Residue.Location(alt_loc, name) + self.name_with_spaces = name + self.number = number + self.insertion_code = insertion_code + self.atoms = [] + self.atoms_by_name = {} + self.is_first_in_chain = False + self.is_final_in_chain = False + self._current_atom = None + + def _add_atom(self, atom): + """ + """ + alt_loc = atom.alternate_location_indicator + if alt_loc not in self.locations: + self.locations[alt_loc] = Residue.Location(alt_loc, atom.residue_name_with_spaces) + assert atom.residue_number == self.number + assert atom.insertion_code == self.insertion_code + # Check whether this is an existing atom with another position + if (atom.name_with_spaces in self.atoms_by_name): + old_atom = self.atoms_by_name[atom.name_with_spaces] + # Unless this is a duplicated atom (warn about file error) + if atom.alternate_location_indicator in old_atom.locations: + warnings.warn("WARNING: duplicate atom (%s, %s)" % (atom, old_atom._pdb_string(old_atom.serial_number, atom.alternate_location_indicator))) + else: + for alt_loc, position in atom.locations.items(): + old_atom.locations[alt_loc] = position + return # no new atom added + # actually use new atom + self.atoms_by_name[atom.name] = atom + self.atoms_by_name[atom.name_with_spaces] = atom + self.atoms.append(atom) + self._current_atom = atom + + def write(self, next_serial_number, output_stream=sys.stdout, alt_loc = "*"): + for atom in self.atoms: + atom.write(next_serial_number, output_stream, alt_loc) + + def _finalize(self): + if len(self.atoms) > 0: + self.atoms[0].is_first_atom_in_chain = self.is_first_in_chain + self.atoms[-1].is_final_atom_in_chain = self.is_final_in_chain + for atom in self.atoms: + atom.is_first_residue_in_chain = self.is_first_in_chain + atom.is_final_residue_in_chain = self.is_final_in_chain + + def set_name_with_spaces(self, name, alt_loc=None): + # Gromacs ffamber PDB files can have 4-character residue names + # assert len(name) == 3 + if alt_loc == None: + alt_loc = self.primary_location_id + loc = self.locations[alt_loc] + loc.name_with_spaces = name + loc.name = name.strip() + def get_name_with_spaces(self, alt_loc=None): + if alt_loc == None: + alt_loc = self.primary_location_id + loc = self.locations[alt_loc] + return loc.name_with_spaces + name_with_spaces = property(get_name_with_spaces, set_name_with_spaces, doc='four-character residue name including spaces') + + def get_name(self, alt_loc=None): + if alt_loc == None: + alt_loc = self.primary_location_id + loc = self.locations[alt_loc] + return loc.name + name = property(get_name, doc='residue name') + + def get_atom(self, atom_name): + return self.atoms_by_name[atom_name] + + def __contains__(self, atom_name): + return self.atoms_by_name.__contains__(atom_name) + + def __getitem__(self, atom_name): + """Returns the FIRST atom in this residue with a particular atom name""" + return self.atoms_by_name[atom_name] + + def __iter__(self): + """ + >>> pdb_lines = [ \ + "ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N",\ + "ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C",\ + "ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C",\ + "ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O",\ + "ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C",\ + "ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S"] + >>> res = Residue("CYS", 42) + >>> for l in pdb_lines: + ... res._add_atom(Atom(l)) + ... + >>> for atom in res: + ... print atom + ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N + ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C + ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C + ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O + ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C + ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S + """ + for atom in self.iter_atoms(): + yield atom + + # Three possibilities: primary alt_loc, certain alt_loc, or all alt_locs + def iter_atoms(self, alt_loc=None): + if alt_loc == None: + locs = [self.primary_location_id] + elif alt_loc == "": + locs = [self.primary_location_id] + elif alt_loc == "*": + locs = None + else: + locs = list(alt_loc) + # If an atom has any location in alt_loc, emit the atom + for atom in self.atoms: + use_atom = False # start pessimistic + for loc2 in atom.locations.keys(): + # print "#%s#%s" % (loc2,locs) + if locs == None: # means all locations + use_atom = True + elif loc2 in locs: + use_atom = True + if use_atom: + yield atom + + def iter_positions(self, include_alt_loc=False): + """ + Returns one position per atom, even if an individual atom has multiple positions. + + >>> pdb_lines = [ \ + "ATOM 188 N CYS A 42 40.714 -5.292 12.123 1.00 11.29 N",\ + "ATOM 189 CA CYS A 42 39.736 -5.883 12.911 1.00 10.01 C",\ + "ATOM 190 C CYS A 42 40.339 -6.654 14.087 1.00 22.28 C",\ + "ATOM 191 O CYS A 42 41.181 -7.530 13.859 1.00 13.70 O",\ + "ATOM 192 CB CYS A 42 38.949 -6.825 12.002 1.00 9.67 C",\ + "ATOM 193 SG CYS A 42 37.557 -7.514 12.922 1.00 20.12 S"] + >>> res = Residue("CYS", 42) + >>> for l in pdb_lines: res._add_atom(Atom(l)) + >>> for c in res.iter_positions: + ... print c + Traceback (most recent call last): + File "", line 1, in + TypeError: 'instancemethod' object is not iterable + >>> for c in res.iter_positions(): + ... print c + [40.714, -5.292, 12.123] A + [39.736, -5.883, 12.911] A + [40.339, -6.654, 14.087] A + [41.181, -7.53, 13.859] A + [38.949, -6.825, 12.002] A + [37.557, -7.514, 12.922] A + """ + for atom in self: + if include_alt_loc: + for loc in atom.iter_positions(): + yield loc + else: + yield atom.position + + def __len__(self): + return len(self.atoms) + + # Residues can have multiple locations, based on alt_loc indicator + class Location: + """ + Inner class of residue to allow different residue names for different alternate_locations. + """ + def __init__(self, alternate_location_indicator, residue_name_with_spaces): + self.alternate_location_indicator = alternate_location_indicator + self.residue_name_with_spaces = residue_name_with_spaces + + +class Atom(object): + """Atom represents one atom in a PDB structure. + """ + def __init__(self, pdb_line, pdbstructure=None): + """Create a new pdb.Atom from an ATOM or HETATM line. + + Example line: + ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C + 00000000011111111112222222222333333333344444444445555555555666666666677777777778 + 12345678901234567890123456789012345678901234567890123456789012345678901234567890 + + ATOM line format description from + http://deposit.rcsb.org/adit/docs/pdb_atom_format.html: + + COLUMNS DATA TYPE CONTENTS + -------------------------------------------------------------------------------- + 1 - 6 Record name "ATOM " + 7 - 11 Integer Atom serial number. + 13 - 16 Atom Atom name. + 17 Character Alternate location indicator. + 18 - 20 Residue name Residue name. + 22 Character Chain identifier. + 23 - 26 Integer Residue sequence number. + 27 AChar Code for insertion of residues. + 31 - 38 Real(8.3) Orthogonal coordinates for X in Angstroms. + 39 - 46 Real(8.3) Orthogonal coordinates for Y in Angstroms. + 47 - 54 Real(8.3) Orthogonal coordinates for Z in Angstroms. + 55 - 60 Real(6.2) Occupancy (Default = 1.0). + 61 - 66 Real(6.2) Temperature factor (Default = 0.0). + 73 - 76 LString(4) Segment identifier, left-justified. + 77 - 78 LString(2) Element symbol, right-justified. + 79 - 80 LString(2) Charge on the atom. + + """ + # We might modify first/final status during _finalize() methods + self.is_first_atom_in_chain = False + self.is_final_atom_in_chain = False + self.is_first_residue_in_chain = False + self.is_final_residue_in_chain = False + # Start parsing fields from pdb line + self.record_name = pdb_line[0:6].strip() + if pdbstructure is not None and pdbstructure._atom_numbers_are_hex: + self.serial_number = int(pdb_line[6:11], 16) + else: + try: + self.serial_number = int(pdb_line[6:11]) + except: + try: + self.serial_number = int(pdb_line[6:11], 16) + pdbstructure._atom_numbers_are_hex = True + except: + # Just give it the next number in sequence. + self.serial_number = pdbstructure._next_atom_number + self.name_with_spaces = pdb_line[12:16] + alternate_location_indicator = pdb_line[16] + + self.residue_name_with_spaces = pdb_line[17:20] + # In some MD codes, notably ffamber in gromacs, residue name has a fourth character in + # column 21 + possible_fourth_character = pdb_line[20:21] + if possible_fourth_character != " ": + # Fourth character should only be there if official 3 are already full + if len(self.residue_name_with_spaces.strip()) != 3: + raise ValueError('Misaligned residue name: %s' % pdb_line) + self.residue_name_with_spaces += possible_fourth_character + self.residue_name = self.residue_name_with_spaces.strip() + + self.chain_id = pdb_line[21] + if pdbstructure is not None and pdbstructure._residue_numbers_are_hex: + self.residue_number = int(pdb_line[22:26], 16) + else: + try: + self.residue_number = int(pdb_line[22:26]) + except: + try: + self.residue_number = int(pdb_line[22:26], 16) + pdbstructure._residue_numbers_are_hex = True + except: + # When VMD runs out of hex values it starts filling the residue ID field with ****. + # Look at the most recent atoms to figure out whether this is a new residue or not. + if pdbstructure._current_model is None or pdbstructure._current_model._current_chain is None or pdbstructure._current_model._current_chain._current_residue is None: + # This is the first residue in the model. + self.residue_number = pdbstructure._next_residue_number + else: + currentRes = pdbstructure._current_model._current_chain._current_residue + if currentRes.name_with_spaces != self.residue_name_with_spaces: + # The residue name has changed. + self.residue_number = pdbstructure._next_residue_number + elif self.name_with_spaces in currentRes.atoms_by_name: + # There is already an atom with this name. + self.residue_number = pdbstructure._next_residue_number + else: + self.residue_number = currentRes.number + self.insertion_code = pdb_line[26] + # coordinates, occupancy, and temperature factor belong in Atom.Location object + x = float(pdb_line[30:38]) + y = float(pdb_line[38:46]) + z = float(pdb_line[46:54]) + try: + occupancy = float(pdb_line[54:60]) + except: + occupancy = 1.0 + try: + temperature_factor = float(pdb_line[60:66]) * unit.angstroms * unit.angstroms + except: + temperature_factor = 0.0 * unit.angstroms * unit.angstroms + self.locations = {} + loc = Atom.Location(alternate_location_indicator, Vec3(x,y,z) * unit.angstroms, occupancy, temperature_factor, self.residue_name_with_spaces) + self.locations[alternate_location_indicator] = loc + self.default_location_id = alternate_location_indicator + # segment id, element_symbol, and formal_charge are not always present + self.segment_id = pdb_line[72:76].strip() + self.element_symbol = pdb_line[76:78].strip() + try: self.formal_charge = int(pdb_line[78:80]) + except ValueError: self.formal_charge = None + # figure out atom element + try: + # Try to find a sensible element symbol from columns 76-77 + self.element = element.get_by_symbol(self.element_symbol) + except KeyError: + self.element = None + if pdbstructure is not None: + pdbstructure._next_atom_number = self.serial_number+1 + pdbstructure._next_residue_number = self.residue_number+1 + + def iter_locations(self): + """ + Iterate over Atom.Location objects for this atom, including primary location. + + >>> atom = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") + >>> for c in atom.iter_locations(): + ... print c + ... + [6.167, 22.607, 20.046] A + """ + for alt_loc in self.locations: + yield self.locations[alt_loc] + + def iter_positions(self): + """ + Iterate over atomic positions. Returns Quantity(Vec3(), unit) objects, unlike + iter_locations, which returns Atom.Location objects. + """ + for loc in self.iter_locations(): + yield loc.position + + def iter_coordinates(self): + """ + Iterate over x, y, z values of primary atom position. + + >>> atom = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") + >>> for c in atom.iter_coordinates(): + ... print c + ... + 6.167 A + 22.607 A + 20.046 A + """ + for coord in self.position: + yield coord + + # Hide existence of multiple alternate locations to avoid scaring casual users + def get_location(self, location_id=None): + id = location_id + if (id == None): + id = self.default_location_id + return self.locations[id] + def set_location(self, new_location, location_id=None): + id = location_id + if (id == None): + id = self.default_location_id + self.locations[id] = new_location + location = property(get_location, set_location, doc='default Atom.Location object') + + def get_position(self): + return self.location.position + def set_position(self, coords): + self.location.position = coords + position = property(get_position, set_position, doc='orthogonal coordinates') + + def get_alternate_location_indicator(self): + return self.location.alternate_location_indicator + alternate_location_indicator = property(get_alternate_location_indicator) + + def get_occupancy(self): + return self.location.occupancy + occupancy = property(get_occupancy) + + def get_temperature_factor(self): + return self.location.temperature_factor + temperature_factor = property(get_temperature_factor) + + def get_x(self): return self.position[0] + x = property(get_x) + + def get_y(self): return self.position[1] + y = property(get_y) + + def get_z(self): return self.position[2] + z = property(get_z) + + def _pdb_string(self, serial_number=None, alternate_location_indicator=None): + """ + Produce a PDB line for this atom using a particular serial number and alternate location + """ + if serial_number == None: + serial_number = self.serial_number + if alternate_location_indicator == None: + alternate_location_indicator = self.alternate_location_indicator + # produce PDB line in three parts: names, numbers, and end + # Accomodate 4-character residue names that use column 21 + long_res_name = self.residue_name_with_spaces + if len(long_res_name) == 3: + long_res_name += " " + assert len(long_res_name) == 4 + names = "%-6s%5d %4s%1s%4s%1s%4d%1s " % ( + self.record_name, serial_number, \ + self.name_with_spaces, alternate_location_indicator, \ + long_res_name, self.chain_id, \ + self.residue_number, self.insertion_code) + numbers = "%8.3f%8.3f%8.3f%6.2f%6.2f " % ( + self.x.value_in_unit(unit.angstroms), \ + self.y.value_in_unit(unit.angstroms), \ + self.z.value_in_unit(unit.angstroms), \ + self.occupancy, \ + self.temperature_factor.value_in_unit(unit.angstroms * unit.angstroms)) + end = "%-4s%2s" % (\ + self.segment_id, self.element_symbol) + formal_charge = " " + if (self.formal_charge != None): formal_charge = "%+2d" % self.formal_charge + return names+numbers+end+formal_charge + + def __str__(self): + return self._pdb_string(self.serial_number, self.alternate_location_indicator) + + def write(self, next_serial_number, output_stream=sys.stdout, alt_loc = "*"): + """ + alt_loc = "*" means write all alternate locations + alt_loc = None means write just the primary location + alt_loc = "AB" means write locations "A" and "B" + """ + if alt_loc == None: + locs = [self.default_location_id] + elif alt_loc == "": + locs = [self.default_location_id] + elif alt_loc == "*": + locs = self.locations.keys() + locs.sort() + else: + locs = list(alt_loc) + for loc_id in locs: + print(self._pdb_string(next_serial_number.val, loc_id), file=output_stream) + next_serial_number.increment() + + def set_name_with_spaces(self, name): + assert len(name) == 4 + self._name_with_spaces = name + self._name = name.strip() + def get_name_with_spaces(self): + return self._name_with_spaces + name_with_spaces = property(get_name_with_spaces, set_name_with_spaces, doc='four-character residue name including spaces') + + def get_name(self): + return self._name + name = property(get_name, doc='residue name') + + class Location(object): + """ + Inner class of Atom for holding alternate locations + """ + def __init__(self, alt_loc, position, occupancy, temperature_factor, residue_name): + self.alternate_location_indicator = alt_loc + self.position = position + self.occupancy = occupancy + self.temperature_factor = temperature_factor + self.residue_name = residue_name + + def __iter__(self): + """ + Examples + + >>> from simtk.openmm.vec3 import Vec3 + >>> import simtk.unit as unit + >>> l = Atom.Location(' ', Vec3(1,2,3)*unit.angstroms, 1.0, 20.0*unit.angstroms**2, "XXX") + >>> for c in l: + ... print c + ... + 1 A + 2 A + 3 A + """ + for coord in self.position: + yield coord + + def __str__(self): + return str(self.position) + + +# run module directly for testing +if __name__=='__main__': + # Test the examples in the docstrings + import doctest, sys + doctest.testmod(sys.modules[__name__]) + + import os + import gzip + import re + import time + + # Test atom line parsing + pdb_line = "ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C" + a = Atom(pdb_line) + assert a.record_name == "ATOM" + assert a.serial_number == 2209 + assert a.name == "CB" + assert a.name_with_spaces == " CB " + assert a.residue_name == "TYR" + assert a.residue_name_with_spaces == "TYR" + assert a.chain_id == "A" + assert a.residue_number == 299 + assert a.insertion_code == " " + assert a.alternate_location_indicator == " " + assert a.x == 6.167 * unit.angstroms + assert a.y == 22.607 * unit.angstroms + assert a.z == 20.046 * unit.angstroms + assert a.occupancy == 1.00 + assert a.temperature_factor == 8.12 * unit.angstroms * unit.angstroms + assert a.segment_id == "" + assert a.element_symbol == "C" + + # print pdb_line + # print str(a) + assert str(a).rstrip() == pdb_line.rstrip() + + a = Atom("ATOM 2209 CB TYR A 299 6.167 22.607 20.046 1.00 8.12 C") + + # misaligned residue name - bad + try: + a = Atom("ATOM 2209 CB TYRA 299 6.167 22.607 20.046 1.00 8.12 C") + assert(False) + except ValueError: pass + # four character residue name -- not so bad + a = Atom("ATOM 2209 CB NTYRA 299 6.167 22.607 20.046 1.00 8.12 C") + + atom_count = 0 + residue_count = 0 + chain_count = 0 + model_count = 0 + structure_count = 0 + + def parse_one_pdb(pdb_file_name): + global atom_count, residue_count, chain_count, model_count, structure_count + print(pdb_file_name) + if pdb_file_name[-3:] == ".gz": + fh = gzip.open(pdb_file_name) + else: + fh = open(pdb_file_name) + pdb = PdbStructure(fh, load_all_models=True) + # print " %d atoms found" % len(pdb.atoms) + atom_count += len(list(pdb.iter_atoms())) + residue_count += len(list(pdb.iter_residues())) + chain_count += len(list(pdb.iter_chains())) + model_count += len(list(pdb.iter_models())) + structure_count += 1 + fh.close + return pdb + + # Parse one file + pdb_file_name = "/home/Christopher Bruns/Desktop/1ARJ.pdb" + if os.path.exists(pdb_file_name): + parse_one_pdb(pdb_file_name) + + # try parsing the entire PDB + pdb_dir = "/cygdrive/j/pdb/data/structures/divided/pdb" + if os.path.exists(pdb_dir): + parse_entire_pdb = False + parse_one_division = False + parse_one_file = False + start_time = time.time() + if parse_one_file: + pdb_id = "2aed" + middle_two = pdb_id[1:3] + full_pdb_file = os.path.join(pdb_dir, middle_two, "pdb%s.ent.gz" % pdb_id) + parse_one_pdb(full_pdb_file) + if parse_one_division: + subdir = "ae" + full_subdir = os.path.join(pdb_dir, subdir) + for pdb_file in os.listdir(full_subdir): + if not re.match("pdb.%2s.\.ent\.gz" % subdir , pdb_file): + continue + full_pdb_file = os.path.join(full_subdir, pdb_file) + parse_one_pdb(full_pdb_file) + if parse_entire_pdb: + for subdir in os.listdir(pdb_dir): + if not len(subdir) == 2: continue + full_subdir = os.path.join(pdb_dir, subdir) + if not os.path.isdir(full_subdir): + continue + for pdb_file in os.listdir(full_subdir): + if not re.match("pdb.%2s.\.ent\.gz" % subdir , pdb_file): + continue + full_pdb_file = os.path.join(full_subdir, pdb_file) + parse_one_pdb(full_pdb_file) + + end_time = time.time() + elapsed = end_time - start_time + minutes = elapsed / 60 + seconds = elapsed % 60 + hours = minutes / 60 + minutes = minutes % 60 + print("%dh:%02dm:%02ds elapsed" % (hours, minutes, seconds)) + + print("%d atoms found" % atom_count) + print("%d residues found" % residue_count) + print("%d chains found" % chain_count) + print("%d models found" % model_count) + print("%d structures found" % structure_count) diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxContainers.py b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxContainers.py index ef5e4ba0d7dcc5053329b8438878a9751a87c724..adedadc25d2b4a7263eb8972723049f853031840 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxContainers.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxContainers.py @@ -36,6 +36,7 @@ The DataCategory class provides base storage container for instance data and definition meta data. """ +from __future__ import absolute_import __docformat__ = "restructuredtext en" __author__ = "John Westbrook" @@ -99,13 +100,13 @@ class ContainerBase(object): self.__name=name def exists(self,name): - if self.__objCatalog.has_key(name): + if name in self.__objCatalog: return True else: return False def getObj(self,name): - if self.__objCatalog.has_key(name): + if name in self.__objCatalog: return self.__objCatalog[name] else: return None @@ -118,7 +119,7 @@ class ContainerBase(object): of the same name will be overwritten. """ if obj.getName() is not None: - if not self.__objCatalog.has_key(obj.getName()): + if obj.getName() not in self.__objCatalog: # self.__objNameList is keeping track of object order here -- self.__objNameList.append(obj.getName()) self.__objCatalog[obj.getName()]=obj @@ -126,7 +127,7 @@ class ContainerBase(object): def replace(self,obj): """ Replace an existing object with the input object """ - if ((obj.getName() is not None) and (self.__objCatalog.has_key(obj.getName())) ): + if ((obj.getName() is not None) and (obj.getName() in self.__objCatalog) ): self.__objCatalog[obj.getName()]=obj @@ -158,7 +159,7 @@ class ContainerBase(object): """ Revmove object by name. Return True on success or False otherwise. """ try: - if self.__objCatalog.has_key(curName): + if curName in self.__objCatalog: del self.__objCatalog[curName] i=self.__objNameList.index(curName) del self.__objNameList[i] @@ -217,7 +218,7 @@ class DataContainer(ContainerBase): def invokeDataBlockMethod(self,type,method,db): self.__currentRow = 1 - exec method.getInline() + exec(method.getInline()) def setGlobal(self): self.__globalFlag=True @@ -328,7 +329,7 @@ class DataCategory(DataCategoryBase): return self._rowList[0][ii] except (IndexError, KeyError): raise KeyError - raise TypeError, x + raise TypeError(x) def getCurrentAttribute(self): @@ -464,7 +465,7 @@ class DataCategory(DataCategoryBase): return self._rowList[rowI][self._attributeNameList.index(attribute)] except (IndexError): raise IndexError - raise IndexError, attribute + raise IndexError(attribute) def setValue(self,value,attributeName=None,rowIndex=None): if attributeName is None: @@ -544,13 +545,13 @@ class DataCategory(DataCategoryBase): if (ind >= ll): row.extend([None for ii in xrange(2*ind-ll)]) row[ind]=None - exec method.getInline() + exec(method.getInline()) self.__currentRowIndex+=1 currentRowIndex=self.__currentRowIndex def invokeCategoryMethod(self,type,method,db): self.__currentRowIndex = 0 - exec method.getInline() + exec(method.getInline()) def getAttributeLengthMaximumList(self): mList=[0 for i in len(self._attributeNameList)] @@ -750,7 +751,7 @@ class DataCategory(DataCategoryBase): except (IndexError): self.__lfh.write("attributeName %s rowI %r rowdata %r\n" % (attributeName,rowI,self._rowList[rowI])) raise IndexError - raise TypeError, attribute + raise TypeError(attribute) def getValueFormattedByIndex(self,attributeIndex,rowIndex): diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxParser.py b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxParser.py index c48c046d2f538008ce961640f6a9ea74be706290..78f68039c337cd9c0c62fcde375e7056a5cac475 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxParser.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxParser.py @@ -27,6 +27,7 @@ Acknowledgements: See: http://pymmlib.sourceforge.net/ """ +from __future__ import absolute_import __docformat__ = "restructuredtext en" __author__ = "John Westbrook" @@ -137,7 +138,7 @@ class PdbxReader(object): # Find the first reserved word and begin capturing data. # while True: - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) if curWord is None: continue reservedWord, state = self.__getState(curWord) @@ -194,7 +195,7 @@ class PdbxReader(object): # Get the data for this attribute from the next token - tCat, tAtt, curQuotedString, curWord = tokenizer.next() + tCat, tAtt, curQuotedString, curWord = next(tokenizer) if tCat is not None or (curQuotedString is None and curWord is None): self.__syntaxError("Missing data for item _%s.%s" % (curCatName,curAttName)) @@ -215,7 +216,7 @@ class PdbxReader(object): else: self.__syntaxError("Missing value in item-value pair") - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) continue # @@ -225,14 +226,14 @@ class PdbxReader(object): # The category name in the next curCatName,curAttName pair # defines the name of the category container. - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) if curCatName is None or curAttName is None: self.__syntaxError("Unexpected token in loop_ declaration") return # Check for a previous category declaration. - if categoryIndex.has_key(curCatName): + if curCatName in categoryIndex: self.__syntaxError("Duplicate category declaration in loop_") return @@ -248,7 +249,7 @@ class PdbxReader(object): # Read the rest of the loop_ declaration while True: - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) if curCatName is None: break @@ -280,7 +281,7 @@ class PdbxReader(object): elif curQuotedString is not None: curRow.append(curQuotedString) - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) # loop_ data processing ends if - @@ -306,7 +307,7 @@ class PdbxReader(object): categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_DATA_CONTAINER": # @@ -317,7 +318,7 @@ class PdbxReader(object): containerList.append(curContainer) categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_STOP": return @@ -327,7 +328,7 @@ class PdbxReader(object): containerList.append(curContainer) categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_UNKNOWN": self.__syntaxError("Unrecogized syntax element: " + str(curWord)) @@ -366,7 +367,7 @@ class PdbxReader(object): ## Tokenizer loop begins here --- while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 # Dump comments @@ -379,7 +380,7 @@ class PdbxReader(object): if line.startswith(";"): mlString = [line[1:]] while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 if line.startswith(";"): break @@ -451,7 +452,7 @@ class PdbxReader(object): ## Tokenizer loop begins here --- while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 # Dump comments @@ -464,7 +465,7 @@ class PdbxReader(object): if line.startswith(";"): mlString = [line[1:]] while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 if line.startswith(";"): break diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReadWriteTests.py b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReadWriteTests.py index de681781fd0fe7768669b0d20880e23eee4e42f0..2afdf3341e8934bc208d2206c25dfb7e2f9bbb24 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReadWriteTests.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReadWriteTests.py @@ -10,6 +10,7 @@ ## """ Various tests caess for PDBx/mmCIF data file and dictionary reader and writer. """ +from __future__ import absolute_import __docformat__ = "restructuredtext en" __author__ = "John Westbrook" diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReader.py b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReader.py index 3947ed61bbd3a333dc3bae8c79555b9e0dedffae..0dd63b22f54f4bbcf5368e54745cefb2c2aabec8 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReader.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReader.py @@ -22,6 +22,7 @@ Acknowledgements: See: http://pymmlib.sourceforge.net/ """ +from __future__ import absolute_import import re,sys from simtk.openmm.app.internal.pdbx.reader.PdbxContainers import * @@ -126,7 +127,7 @@ class PdbxReader(object): # Find the first reserved word and begin capturing data. # while True: - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) if curWord is None: continue reservedWord, state = self.__getState(curWord) @@ -183,7 +184,7 @@ class PdbxReader(object): # Get the data for this attribute from the next token - tCat, tAtt, curQuotedString, curWord = tokenizer.next() + tCat, tAtt, curQuotedString, curWord = next(tokenizer) if tCat is not None or (curQuotedString is None and curWord is None): self.__syntaxError("Missing data for item _%s.%s" % (curCatName,curAttName)) @@ -204,7 +205,7 @@ class PdbxReader(object): else: self.__syntaxError("Missing value in item-value pair") - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) continue # @@ -214,14 +215,14 @@ class PdbxReader(object): # The category name in the next curCatName,curAttName pair # defines the name of the category container. - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) if curCatName is None or curAttName is None: self.__syntaxError("Unexpected token in loop_ declaration") return # Check for a previous category declaration. - if categoryIndex.has_key(curCatName): + if curCatName in categoryIndex: self.__syntaxError("Duplicate category declaration in loop_") return @@ -237,7 +238,7 @@ class PdbxReader(object): # Read the rest of the loop_ declaration while True: - curCatName, curAttName, curQuotedString, curWord = tokenizer.next() + curCatName, curAttName, curQuotedString, curWord = next(tokenizer) if curCatName is None: break @@ -269,7 +270,7 @@ class PdbxReader(object): elif curQuotedString is not None: curRow.append(curQuotedString) - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) # loop_ data processing ends if - @@ -295,7 +296,7 @@ class PdbxReader(object): categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_DATA_CONTAINER": # @@ -306,7 +307,7 @@ class PdbxReader(object): containerList.append(curContainer) categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_STOP": return @@ -316,7 +317,7 @@ class PdbxReader(object): containerList.append(curContainer) categoryIndex = {} curCategory = None - curCatName,curAttName,curQuotedString,curWord = tokenizer.next() + curCatName,curAttName,curQuotedString,curWord = next(tokenizer) elif state == "ST_UNKNOWN": self.__syntaxError("Unrecogized syntax element: " + str(curWord)) @@ -355,7 +356,7 @@ class PdbxReader(object): ## Tokenizer loop begins here --- while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 # Dump comments @@ -368,7 +369,7 @@ class PdbxReader(object): if line.startswith(";"): mlString = [line[1:]] while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 if line.startswith(";"): break @@ -426,7 +427,7 @@ class PdbxReader(object): ## Tokenizer loop begins here --- while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 # Dump comments @@ -439,7 +440,7 @@ class PdbxReader(object): if line.startswith(";"): mlString = [line[1:]] while True: - line = fileIter.next() + line = next(fileIter) self.__curLineNumber += 1 if line.startswith(";"): break diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReaderTests.py b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReaderTests.py index da9e6c54719a5ca06c5a9472f086da96e8311ef8..df79b2d36caba8bb6830e42c1f6424798b24219f 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReaderTests.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/reader/PdbxReaderTests.py @@ -12,6 +12,7 @@ Test cases for reading PDBx/mmCIF data files PdbxReader class - """ +from __future__ import absolute_import import sys, unittest, traceback import sys, time, os, os.path, shutil diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriter.py b/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriter.py index 780983feb47c2a8a46a293694479ce729746bda8..cabfb8d3c1ba0d73958bc66a4a8c26e959aefadd 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriter.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriter.py @@ -11,6 +11,7 @@ Classes for writing data and dictionary containers in PDBx/mmCIF format. """ +from __future__ import absolute_import __docformat__ = "restructuredtext en" __author__ = "John Westbrook" __email__ = "jwest@rcsb.rutgers.edu" diff --git a/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriterTests.py b/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriterTests.py index a9395356ea4e37e7a4f04a03e2a977287b0efe78..70d974f71dc447b017268151eba54d9c84c11fa8 100644 --- a/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriterTests.py +++ b/wrappers/python/simtk/openmm/app/internal/pdbx/writer/PdbxWriterTests.py @@ -12,6 +12,7 @@ Test implementing PDBx/mmCIF write and formatting operations. """ +from __future__ import absolute_import __docformat__ = "restructuredtext en" __author__ = "John Westbrook" __email__ = "jwest@rcsb.rutgers.edu" diff --git a/wrappers/python/simtk/openmm/app/internal/unitcell.py b/wrappers/python/simtk/openmm/app/internal/unitcell.py index 308415d83695b301327d5ceff637cdfe5575c5cd..e2aa6ff5c155e6cc8eaada867184060fa40a96e6 100644 --- a/wrappers/python/simtk/openmm/app/internal/unitcell.py +++ b/wrappers/python/simtk/openmm/app/internal/unitcell.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/app/modeller.py b/wrappers/python/simtk/openmm/app/modeller.py index e501ac9e369a82b92119cc7a11df0bdf870cccbb..da8ae5ffa6883f123e7f8d1b59ca70bb10f06f56 100644 --- a/wrappers/python/simtk/openmm/app/modeller.py +++ b/wrappers/python/simtk/openmm/app/modeller.py @@ -29,6 +29,7 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ from __future__ import division +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" @@ -40,7 +41,7 @@ from simtk.openmm.vec3 import Vec3 from simtk.openmm import System, Context, NonbondedForce, CustomNonbondedForce, HarmonicBondForce, HarmonicAngleForce, VerletIntegrator, LocalEnergyMinimizer from simtk.unit import nanometer, molar, elementary_charge, amu, gram, liter, degree, sqrt, acos, is_quantity, dot, norm import simtk.unit as unit -import element as elem +from . import element as elem import os import random import xml.etree.ElementTree as etree @@ -877,7 +878,7 @@ class Modeller(object): # Create copies of all residue templates that have had all extra points removed. templatesNoEP = {} - for resName, template in forcefield._templates.iteritems(): + for resName, template in forcefield._templates.items(): if any(atom.element is None for atom in template.atoms): index = 0 newIndex = {} diff --git a/wrappers/python/simtk/openmm/app/pdbfile.py b/wrappers/python/simtk/openmm/app/pdbfile.py index 79074298e37091fa2bdc5395e79c8069e65827ea..78b661184046c9fc75c1f07dceec5005bc3423b6 100644 --- a/wrappers/python/simtk/openmm/app/pdbfile.py +++ b/wrappers/python/simtk/openmm/app/pdbfile.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import print_function, division, absolute_import __author__ = "Peter Eastman" __version__ = "1.0" @@ -39,12 +40,13 @@ from copy import copy from datetime import date from simtk.openmm import Vec3, Platform from simtk.openmm.app.internal.pdbstructure import PdbStructure +from simtk.openmm.app.internal.unitcell import computeLengthsAndAngles from simtk.openmm.app import Topology from simtk.unit import nanometers, angstroms, is_quantity, norm, Quantity, dot -import element as elem +from . import element as elem try: import numpy -except: +except ImportError: pass class PDBFile(object): @@ -252,17 +254,13 @@ class PDBFile(object): - topology (Topology) The Topology defining the molecular system being written - file (file=stdout) A file to write the file to """ - print >>file, "REMARK 1 CREATED WITH OPENMM %s, %s" % (Platform.getOpenMMVersion(), str(date.today())) + print("REMARK 1 CREATED WITH OPENMM %s, %s" % (Platform.getOpenMMVersion(), str(date.today())), file=file) vectors = topology.getPeriodicBoxVectors() if vectors is not None: - (a, b, c) = vectors.value_in_unit(angstroms) - a_length = norm(a) - b_length = norm(b) - c_length = norm(c) - alpha = math.acos(dot(b, c)/(b_length*c_length))*180.0/math.pi - beta = math.acos(dot(c, a)/(c_length*a_length))*180.0/math.pi - gamma = math.acos(dot(a, b)/(a_length*b_length))*180.0/math.pi - print >>file, "CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f P 1 1 " % (a_length, b_length, c_length, alpha, beta, gamma) + a, b, c, alpha, beta, gamma = computeLengthsAndAngles(vectors) + RAD_TO_DEG = 180/math.pi + print("CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f P 1 1 " % ( + a*10, b*10, c*10, alpha*RAD_TO_DEG, beta*RAD_TO_DEG, gamma*RAD_TO_DEG), file=file) @staticmethod def writeModel(topology, positions, file=sys.stdout, modelIndex=None, keepIds=False): @@ -288,7 +286,7 @@ class PDBFile(object): atomIndex = 1 posIndex = 0 if modelIndex is not None: - print >>file, "MODEL %4d" % modelIndex + print("MODEL %4d" % modelIndex, file=file) for (chainIndex, chain) in enumerate(topology.chains()): if keepIds: chainName = chain.id @@ -320,14 +318,14 @@ class PDBFile(object): atomIndex%100000, atomName, resName, chainName, resId, _format_83(coords[0]), _format_83(coords[1]), _format_83(coords[2]), symbol) assert len(line) == 80, 'Fixed width overflow detected' - print >>file, line + print(line, file=file) posIndex += 1 atomIndex += 1 if resIndex == len(residues)-1: - print >>file, "TER %5d %3s %s%4s" % (atomIndex, resName, chainName, resId) + print("TER %5d %3s %s%4s" % (atomIndex, resName, chainName, resId), file=file) atomIndex += 1 if modelIndex is not None: - print >>file, "ENDMDL" + print("ENDMDL", file=file) @staticmethod def writeFooter(topology, file=sys.stdout): @@ -381,13 +379,13 @@ class PDBFile(object): for index1 in sorted(atomBonds): bonded = atomBonds[index1] while len(bonded) > 4: - print >>file, "CONECT%5d%5d%5d%5d" % (index1, bonded[0], bonded[1], bonded[2]) + print("CONECT%5d%5d%5d%5d" % (index1, bonded[0], bonded[1], bonded[2]), file=file) del bonded[:4] line = "CONECT%5d" % index1 for index2 in bonded: line = "%s%5d" % (line, index2) - print >>file, line - print >>file, "END" + print(line, file=file) + print("END", file=file) def _format_83(f): diff --git a/wrappers/python/simtk/openmm/app/pdbreporter.py b/wrappers/python/simtk/openmm/app/pdbreporter.py index 19bc41b5cd38a365b3c6b8608e093d7e3c4c88ca..44a6894cb22194cf36275a9cd404115b718b1837 100644 --- a/wrappers/python/simtk/openmm/app/pdbreporter.py +++ b/wrappers/python/simtk/openmm/app/pdbreporter.py @@ -28,11 +28,12 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" import simtk.openmm as mm -from simtk.openmm.app import PDBFile +from simtk.openmm.app import PDBFile, PDBxFile class PDBReporter(object): """PDBReporter outputs a series of frames from a Simulation to a PDB file. @@ -77,8 +78,34 @@ class PDBReporter(object): self._nextModel += 1 PDBFile.writeModel(simulation.topology, state.getPositions(), self._out, self._nextModel) self._nextModel += 1 + if hasattr(self._out, 'flush') and callable(self._out.flush): + self._out.flush() def __del__(self): if self._topology is not None: PDBFile.writeFooter(self._topology, self._out) self._out.close() + +class PDBxReporter(PDBReporter): + """PDBxReporter outputs a series of frames from a Simulation to a PDBx/mmCIF file. + + To use it, create a PDBxReporter, then add it to the Simulation's list of reporters. + """ + + def report(self, simulation, state): + """Generate a report. + + Parameters: + - simulation (Simulation) The Simulation to generate a report for + - state (State) The current state of the simulation + """ + if self._nextModel == 0: + PDBxFile.writeHeader(simulation.topology, self._out) + self._nextModel += 1 + PDBxFile.writeModel(simulation.topology, state.getPositions(), self._out, self._nextModel) + self._nextModel += 1 + if hasattr(self._out, 'flush') and callable(self._out.flush): + self._out.flush() + + def __del__(self): + self._out.close() diff --git a/wrappers/python/simtk/openmm/app/pdbxfile.py b/wrappers/python/simtk/openmm/app/pdbxfile.py index 0e3ebd8a4836ddc1f0c1c7ae0f0a6bc53f73b38e..cd9f99b757d973029d964f3ea3abd7cafae889cf 100644 --- a/wrappers/python/simtk/openmm/app/pdbxfile.py +++ b/wrappers/python/simtk/openmm/app/pdbxfile.py @@ -1,14 +1,14 @@ """ -pdbfile.py: Used for loading PDB files. +pdbxfile.py: Used for loading PDBx/mmCIF files. This is part of the OpenMM molecular simulation toolkit originating from Simbios, the NIH National Center for Physics-Based Simulation of Biological Structures at Stanford, funded under the NIH Roadmap for Medical Research, grant U54 GM072970. See https://simtk.org. -Portions copyright (c) 2014-2015 Stanford University and the Authors. +Portions copyright (c) 2015 Stanford University and the Authors. Authors: Peter Eastman -Contributors: +Contributors: Jason Swails Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -28,18 +28,20 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import division, absolute_import, print_function + __author__ = "Peter Eastman" -__version__ = "1.0" +__version__ = "2.0" -import os import sys import math -from simtk.openmm import Vec3 +from simtk.openmm import Vec3, Platform +from datetime import date from simtk.openmm.app.internal.pdbx.reader.PdbxReader import PdbxReader -from simtk.openmm.app.internal.unitcell import computePeriodicBoxVectors +from simtk.openmm.app.internal.unitcell import computePeriodicBoxVectors, computeLengthsAndAngles from simtk.openmm.app import Topology -from simtk.unit import nanometers, angstroms, is_quantity, norm, Quantity -import element as elem +from simtk.unit import nanometers, angstroms, is_quantity, norm, Quantity, dot +from . import element as elem try: import numpy except: @@ -202,3 +204,120 @@ class PDBxFile(object): self._numpyPositions[frame] = Quantity(numpy.array(self._positions[frame].value_in_unit(nanometers)), nanometers) return self._numpyPositions[frame] return self._positions[frame] + + @staticmethod + def writeFile(topology, positions, file=sys.stdout, keepIds=False, + entry=None): + """Write a PDBx/mmCIF file containing a single model. + + Parameters: + - topology (Topology) The Topology defining the model to write + - positions (list) The list of atomic positions to write + - file (file=stdout) A file to write to + - keepIds (bool=False) If True, keep the residue and chain IDs specified in the Topology rather than generating + new ones. Warning: It is up to the caller to make sure these are valid IDs that satisfy the requirements of + the PDBx/mmCIF format. Otherwise, the output file will be invalid. + - entry (str=None) The entry ID to assign to the CIF file + """ + PDBxFile.writeHeader(topology, file, entry) + PDBxFile.writeModel(topology, positions, file, keepIds=keepIds) + + @staticmethod + def writeHeader(topology, file=sys.stdout, entry=None): + """Write out the header for a PDBx/mmCIF file. + + Parameters: + - topology (Topology) The Topology defining the molecular system being written + - file (file=stdout) A file to write the file to + - entry (str=None) The entry ID to assign to the CIF file + """ + if entry is not None: + print('data_%s' % entry, file=file) + else: + print('data_cell', file=file) + print("# Created with OpenMM %s, %s" % (Platform.getOpenMMVersion(), str(date.today())), file=file) + print('#', file=file) + vectors = topology.getPeriodicBoxVectors() + if vectors is not None: + a, b, c, alpha, beta, gamma = computeLengthsAndAngles(vectors) + RAD_TO_DEG = 180/math.pi + print('_cell.length_a %10.4f' % (a*10), file=file) + print('_cell.length_b %10.4f' % (b*10), file=file) + print('_cell.length_c %10.4f' % (c*10), file=file) + print('_cell.angle_alpha %10.4f' % (alpha*RAD_TO_DEG), file=file) + print('_cell.angle_beta %10.4f' % (beta*RAD_TO_DEG), file=file) + print('_cell.angle_gamma %10.4f' % (gamma*RAD_TO_DEG), file=file) + print('##', file=file) + print('loop_', file=file) + print('_atom_site.group_PDB', file=file) + print('_atom_site.id', file=file) + print('_atom_site.type_symbol', file=file) + print('_atom_site.label_atom_id', file=file) + print('_atom_site.label_alt_id', file=file) + print('_atom_site.label_comp_id', file=file) + print('_atom_site.label_asym_id', file=file) + print('_atom_site.label_entity_id', file=file) + print('_atom_site.label_seq_id', file=file) + print('_atom_site.pdbx_PDB_ins_code', file=file) + print('_atom_site.Cartn_x', file=file) + print('_atom_site.Cartn_y', file=file) + print('_atom_site.Cartn_z', file=file) + print('_atom_site.occupancy', file=file) + print('_atom_site.B_iso_or_equiv', file=file) + print('_atom_site.Cartn_x_esd', file=file) + print('_atom_site.Cartn_y_esd', file=file) + print('_atom_site.Cartn_z_esd', file=file) + print('_atom_site.occupancy_esd', file=file) + print('_atom_site.B_iso_or_equiv_esd', file=file) + print('_atom_site.pdbx_formal_charge', file=file) + print('_atom_site.auth_seq_id', file=file) + print('_atom_site.auth_comp_id', file=file) + print('_atom_site.auth_asym_id', file=file) + print('_atom_site.auth_atom_id', file=file) + print('_atom_site.pdbx_PDB_model_num', file=file) + + @staticmethod + def writeModel(topology, positions, file=sys.stdout, modelIndex=1, keepIds=False): + """Write out a model to a PDBx/mmCIF file. + + Parameters: + - topology (Topology) The Topology defining the model to write + - positions (list) The list of atomic positions to write + - file (file=stdout) A file to write the model to + - modelIndex (int=1) The model number of this frame + - keepIds (bool=False) If True, keep the residue and chain IDs specified in the Topology rather than generating + new ones. Warning: It is up to the caller to make sure these are valid IDs that satisfy the requirements of + the PDBx/mmCIF format. Otherwise, the output file will be invalid. + """ + if len(list(topology.atoms())) != len(positions): + raise ValueError('The number of positions must match the number of atoms') + if is_quantity(positions): + positions = positions.value_in_unit(angstroms) + if any(math.isnan(norm(pos)) for pos in positions): + raise ValueError('Particle position is NaN') + if any(math.isinf(norm(pos)) for pos in positions): + raise ValueError('Particle position is infinite') + atomIndex = 1 + posIndex = 0 + for (chainIndex, chain) in enumerate(topology.chains()): + if keepIds: + chainName = chain.id + else: + chainName = chr(ord('A')+chainIndex%26) + residues = list(chain.residues()) + for (resIndex, res) in enumerate(residues): + if keepIds: + resId = res.id + else: + resId = resIndex + 1 + for atom in res.atoms(): + coords = positions[posIndex] + if atom.element is not None: + symbol = atom.element.symbol + else: + symbol = '?' + line = "ATOM %5d %-3s %-4s . %-4s %s ? %5s . %10.4f %10.4f %10.4f 0.0 0.0 ? ? ? ? ? . %5s %4s %s %4s %5d" + print(line % (atomIndex, symbol, atom.name, res.name, chainName, resId, coords[0], coords[1], coords[2], + resId, res.name, chainName, atom.name, modelIndex), file=file) + posIndex += 1 + atomIndex += 1 diff --git a/wrappers/python/simtk/openmm/app/simulation.py b/wrappers/python/simtk/openmm/app/simulation.py index 51a2e998e0a97151cf6d567a2caa187529c1e6ac..8fa65b156a24888701fde4f176fb8eb3dcdfed91 100644 --- a/wrappers/python/simtk/openmm/app/simulation.py +++ b/wrappers/python/simtk/openmm/app/simulation.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" @@ -133,7 +134,7 @@ class Simulation(object): def _simulate(self, endStep=None, endTime=None): if endStep is None: - endStep = sys.maxint + endStep = sys.maxsize nextReport = [None]*len(self.reporters) while self.currentStep < endStep and (endTime is None or datetime.now() < endTime): nextSteps = endStep-self.currentStep diff --git a/wrappers/python/simtk/openmm/app/statedatareporter.py b/wrappers/python/simtk/openmm/app/statedatareporter.py index 8bacbe31e8021f54825ec85a31676bdd4e641960..96bca93978bfdc9482c45a23cb34d570d2d87a6e 100644 --- a/wrappers/python/simtk/openmm/app/statedatareporter.py +++ b/wrappers/python/simtk/openmm/app/statedatareporter.py @@ -28,6 +28,8 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import +from __future__ import print_function __author__ = "Peter Eastman" __version__ = "1.0" @@ -146,7 +148,7 @@ class StateDataReporter(object): if not self._hasInitialized: self._initializeConstants(simulation) headers = self._constructHeaders() - print >>self._out, '#"%s"' % ('"'+self._separator+'"').join(headers) + print('#"%s"' % ('"'+self._separator+'"').join(headers), file=self._out) try: self._out.flush() except AttributeError: @@ -163,7 +165,7 @@ class StateDataReporter(object): values = self._constructReportValues(simulation, state) # Write the values. - print >>self._out, self._separator.join(str(v) for v in values) + print(self._separator.join(str(v) for v in values), file=self._out) try: self._out.flush() except AttributeError: diff --git a/wrappers/python/simtk/openmm/app/topology.py b/wrappers/python/simtk/openmm/app/topology.py index f452e77700465c420c1ed505c84843215da32280..949864ccc7b75062bdbaada8a61dc5b37ba9c451 100644 --- a/wrappers/python/simtk/openmm/app/topology.py +++ b/wrappers/python/simtk/openmm/app/topology.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" @@ -61,12 +62,30 @@ class Topology(object): def __repr__(self): nchains = len(self._chains) - nres = sum(1 for r in self.residues()) - natom = sum(1 for a in self.atoms()) + nres = self._numResidues + natom = self._numAtoms nbond = len(self._bonds) return '<%s; %d chains, %d residues, %d atoms, %d bonds>' % ( type(self).__name__, nchains, nres, natom, nbond) + def getNumAtoms(self): + """Return the number of atoms in the Topology. + """ + natom = self._numAtoms + return natom + + def getNumResidues(self): + """Return the number of residues in the Topology. + """ + nres = self._numResidues + return nres + + def getNumChains(self): + """Return the number of chains in the Topology. + """ + nchain = len(self._chains) + return nchain + def addChain(self, id=None): """Create a new Chain and add it to the Topology. diff --git a/wrappers/python/simtk/openmm/mtsintegrator.py b/wrappers/python/simtk/openmm/mtsintegrator.py index ad221e7e437193aad2219da5eb980c458f99c48c..5d18fcd221f11ff28b0d1b524de6c105b7409f91 100644 --- a/wrappers/python/simtk/openmm/mtsintegrator.py +++ b/wrappers/python/simtk/openmm/mtsintegrator.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/openmm/vec3.py b/wrappers/python/simtk/openmm/vec3.py index 213f7099e68b3f52c0e44f086171f6da977cf803..69a7539b7e337e450b49b78b36fd3b5088cfc289 100644 --- a/wrappers/python/simtk/openmm/vec3.py +++ b/wrappers/python/simtk/openmm/vec3.py @@ -28,6 +28,7 @@ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ +from __future__ import absolute_import __author__ = "Peter Eastman" __version__ = "1.0" diff --git a/wrappers/python/simtk/testInstallation.py b/wrappers/python/simtk/testInstallation.py index 18f4c3aef5997991e453bac2e59b0764895a974c..20352ac8b10c10511032f2dcca53f9e23be76dd2 100644 --- a/wrappers/python/simtk/testInstallation.py +++ b/wrappers/python/simtk/testInstallation.py @@ -1,4 +1,5 @@ from __future__ import print_function +from __future__ import absolute_import from functools import wraps import os import sys diff --git a/wrappers/python/simtk/unit/__init__.py b/wrappers/python/simtk/unit/__init__.py index a47a76734d60ba5d27e669de36e9705b1b5150b4..18cb646151cc80fc7d829e17188adb3b8438f6f8 100644 --- a/wrappers/python/simtk/unit/__init__.py +++ b/wrappers/python/simtk/unit/__init__.py @@ -1,17 +1,18 @@ -""" -Physical quantities with units for dimensional analysis and automatic unit conversion. -""" -__docformat__ = "epytext en" - -__author__ = "Christopher M. Bruns" -__copyright__ = "Copyright 2010, Stanford University and Christopher M. Bruns" -__credits__ = [] -__license__ = "MIT" -__maintainer__ = "Christopher M. Bruns" -__email__ = "cmbruns@stanford.edu" - -from unit import Unit, is_unit -from quantity import Quantity, is_quantity -from unit_math import * -from unit_definitions import * -from constants import * +""" +Physical quantities with units for dimensional analysis and automatic unit conversion. +""" +from __future__ import absolute_import + +__docformat__ = "epytext en" +__author__ = "Christopher M. Bruns" +__copyright__ = "Copyright 2010, Stanford University and Christopher M. Bruns" +__credits__ = [] +__license__ = "MIT" +__maintainer__ = "Christopher M. Bruns" +__email__ = "cmbruns@stanford.edu" + +from .unit import Unit, is_unit +from .quantity import Quantity, is_quantity +from .unit_math import * +from .unit_definitions import * +from .constants import * diff --git a/wrappers/python/simtk/unit/quantity.py b/wrappers/python/simtk/unit/quantity.py index 27ace5ed4e82b450ebaaedcc3a9d40a24d5210d2..b5751688fc241bade9ab3f17e60dea5fcae367bf 100644 --- a/wrappers/python/simtk/unit/quantity.py +++ b/wrappers/python/simtk/unit/quantity.py @@ -807,8 +807,8 @@ def _is_string(x): if isinstance(x, str): return True try: - first_item = iter(x).next() - inner_item = iter(first_item).next() + first_item = next(iter(x)) + inner_item = next(iter(first_item)) if first_item is inner_item: return True else: diff --git a/wrappers/python/simtk/unit/unit.py b/wrappers/python/simtk/unit/unit.py index 2e48dfa4e9765914b9754676da3aa1e8162cb858..f7adc6fd2b7e3040f48b0baf83cebe96c05243b9 100644 --- a/wrappers/python/simtk/unit/unit.py +++ b/wrappers/python/simtk/unit/unit.py @@ -102,10 +102,10 @@ class Unit(object): # TODO - also handle non-simple units, i.e. units with multiple BaseUnits/ScaledUnits assert len(self._top_base_units) == 1 assert len(self._scaled_units) == 0 - dimension = self._top_base_units.iterkeys().next() + dimension = next(iter(self._top_base_units)) base_unit_dict = self._top_base_units[dimension] assert len(base_unit_dict) == 1 - parent_base_unit = base_unit_dict.iterkeys().next() + parent_base_unit = next(iter(base_unit_dict)) parent_exponent = base_unit_dict[parent_base_unit] new_base_unit = BaseUnit(parent_base_unit.dimension, name, symbol) # BaseUnit scale might be different depending on exponent @@ -121,10 +121,8 @@ class Unit(object): Yields (BaseDimension, exponent) tuples comprising this unit. """ # There might be two units with the same dimension? No. - for dimension in sorted(self._all_base_units.iterkeys()): - exponent = 0 - for base_unit in sorted(self._all_base_units[dimension].iterkeys()): - exponent += self._all_base_units[dimension][base_unit] + for dimension in sorted(self._all_base_units.keys()): + exponent = sum(self._all_base_units[dimension].values()) if exponent != 0: yield (dimension, exponent) @@ -135,8 +133,8 @@ class Unit(object): There might be multiple BaseUnits with the same dimension. """ - for dimension in sorted(self._all_base_units.iterkeys()): - for base_unit in sorted(self._all_base_units[dimension].iterkeys()): + for dimension in sorted(self._all_base_units.keys()): + for base_unit in sorted(self._all_base_units[dimension].keys()): exponent = self._all_base_units[dimension][base_unit] yield (base_unit, exponent) @@ -144,8 +142,8 @@ class Unit(object): """ Yields (BaseUnit, exponent) tuples in this Unit, excluding those within BaseUnits. """ - for dimension in sorted(self._top_base_units.iterkeys()): - for unit in sorted(self._top_base_units[dimension].iterkeys()): + for dimension in sorted(self._top_base_units.keys()): + for unit in sorted(self._top_base_units[dimension].keys()): exponent = self._top_base_units[dimension][unit] yield (unit, exponent) @@ -518,7 +516,7 @@ class ScaledUnit(object): self.symbol = symbol def __iter__(self): - for dim in sorted(self.base_units.iterkeys()): + for dim in sorted(self.base_units.keys()): yield self.base_units[dim] def iter_base_units(self): @@ -602,8 +600,7 @@ class UnitSystem(object): if not len(self.base_units) == len(self.units): raise ArithmeticError("UnitSystem must have same number of units as base dimensions") # self.dimensions is a dict of {BaseDimension: index} - dimensions = base_units.keys() - dimensions.sort() + dimensions = sorted(base_units.keys()) self.dimensions = {} for d in range(len(dimensions)): self.dimensions[dimensions[d]] = d diff --git a/wrappers/python/src/swig_doxygen/OpenMM.i b/wrappers/python/src/swig_doxygen/OpenMM.i index 01df7c83c5f690d82406b3d234397ae24211ef24..cee39314382e5b554016789d99a6e47d808bc401 100644 --- a/wrappers/python/src/swig_doxygen/OpenMM.i +++ b/wrappers/python/src/swig_doxygen/OpenMM.i @@ -61,49 +61,3 @@ using namespace OpenMM; # namespace __all__ = [k for k in locals().keys() if not (k.endswith('_swigregister') or k.startswith('_'))] %} - -/* -%extend OpenMM::XmlSerializer { - %template(XmlSerializer_serialize_AndersenThermostat) XmlSerializer::serialize; - %template(XmlSerializer_serialize_RBTorsionForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CMAPTorsionForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CMMotionRemover) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomAngleForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomBondForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomExternalForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomGBForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomHbondForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomNonbondedForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_CustomTorsionForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_GBSAOBCForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_GBVIForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_HarmonicAngleForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_HarmonicBondForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_MonteCarloBarostat) XmlSerializer::serialize; - %template(XmlSerializer_serialize_MonteCarloAnisotropicBarostat) XmlSerializer::serialize; - %template(XmlSerializer_serialize_NonbondedForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_RBTorsionForce) XmlSerializer::serialize; - %template(XmlSerializer_serialize_System) XmlSerializer::serialize; - - %template(XmlSerializer_deserialize_AndersenThermostat) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_RBTorsionForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CMAPTorsionForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CMMotionRemover) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomAngleForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomBondForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomExternalForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomGBForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomHbondForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomNonbondedForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_CustomTorsionForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_GBSAOBCForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_GBVIForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_HarmonicAngleForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_HarmonicBondForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_MonteCarloBarostat) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_MonteCarloAnisotropicBarostat) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_NonbondedForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_RBTorsionForce) XmlSerializer::deserialize; - %template(XmlSerializer_deserialize_System) XmlSerializer::deserialize; -}; -*/ diff --git a/wrappers/python/src/swig_doxygen/swigInputBuilder.py b/wrappers/python/src/swig_doxygen/swigInputBuilder.py index a06896a5bb8607acd93e76e76f518bc8b6d0e9a7..73e3122b6a476c05a6befc39543431d8d348dd10 100755 --- a/wrappers/python/src/swig_doxygen/swigInputBuilder.py +++ b/wrappers/python/src/swig_doxygen/swigInputBuilder.py @@ -10,6 +10,7 @@ import getopt import re import xml.etree.ElementTree as etree from distutils.version import LooseVersion +import copy try: from html.parser import HTMLParser @@ -20,7 +21,6 @@ except ImportError: INDENT = " " docTags = {'emphasis':'i', 'bold':'b', 'itemizedlist':'ul', 'listitem':'li', 'preformatted':'pre', 'computeroutput':'tt', 'subscript':'sub'} - def striphtmltags(s): """Strip a couple html tags used inside docstrings in the C++ source to produce something more easily read as plain text. @@ -157,7 +157,7 @@ class SwigInputBuilder: skipAdditionalMethods=[], SWIG_VERSION='3.0.2'): self.nodeByID={} - self.SWIG_COMPACT_ARGUMENTS = LooseVersion(SWIG_VERSION) < LooseVersion('3.0.6') + self.SWIG_COMPACT_ARGUMENTS = LooseVersion(SWIG_VERSION) < LooseVersion('3.0.5') self.configModule = __import__(os.path.splitext(configFilename)[0]) @@ -243,22 +243,37 @@ class SwigInputBuilder: forceSubclassList.append(shortClassName) elif baseName == 'OpenMM::Integrator': integratorSubclassList.append(shortClassName) + self.fOut.write("%factory(OpenMM::Force& OpenMM::System::getForce") for name in sorted(forceSubclassList): self.fOut.write(",\n OpenMM::%s" % name) self.fOut.write(");\n\n") + + self.fOut.write("%factory(OpenMM::Force* OpenMM::Force::__copy__") + for name in sorted(forceSubclassList): + self.fOut.write(",\n OpenMM::%s" % name) + self.fOut.write(");\n\n") + self.fOut.write("%factory(OpenMM::Force* OpenMM_XmlSerializer__deserializeForce") for name in sorted(forceSubclassList): self.fOut.write(",\n OpenMM::%s" % name) self.fOut.write(");\n\n") + + self.fOut.write("%factory(OpenMM::Integrator* OpenMM::Integrator::__copy__") + for name in sorted(integratorSubclassList): + self.fOut.write(",\n OpenMM::%s" % name) + self.fOut.write(");\n\n") + self.fOut.write("%factory(OpenMM::Integrator* OpenMM_XmlSerializer__deserializeIntegrator") for name in sorted(integratorSubclassList): self.fOut.write(",\n OpenMM::%s" % name) self.fOut.write(");\n\n") + self.fOut.write("%factory(OpenMM::Integrator& OpenMM::Context::getIntegrator") for name in sorted(integratorSubclassList): self.fOut.write(",\n OpenMM::%s" % name) self.fOut.write(");\n\n") + self.fOut.write("%factory(OpenMM::VirtualSite& OpenMM::System::getVirtualSite, OpenMM::TwoParticleAverageSite, OpenMM::ThreeParticleAverageSite, OpenMM::OutOfPlaneSite);\n\n") self.fOut.write("\n") @@ -477,7 +492,7 @@ class SwigInputBuilder: valueUnits=[None, ()] index=0 - if valueUnits[0]: + if valueUnits[0] is not None: sys.stdout.write("%s.%s() returns %s\n" % (shortClassName, methName, valueUnits[0])) if len(valueUnits[1])>0: @@ -491,10 +506,10 @@ class SwigInputBuilder: % (addText, INDENT, valueUnits[0]) for vUnit in valueUnits[1]: - if vUnit!=None: - addText = "%s%sval[%s]=unit.Quantity(val[%s], %s)\n" \ + if vUnit is not None: + addText = "%s%sval[%s]=unit.Quantity(val[%s], %s)\n" \ % (addText, INDENT, index, index, vUnit) - index+=1 + index+=1 if key in self.configModule.STEAL_OWNERSHIP: for argNum in self.configModule.STEAL_OWNERSHIP[key]: diff --git a/wrappers/python/src/swig_doxygen/swigInputConfig.py b/wrappers/python/src/swig_doxygen/swigInputConfig.py index d2bbb281e6dd3608afb55af527c30a2c701292e6..22de6deebd578ecb5069d537fb634a38989c110a 100755 --- a/wrappers/python/src/swig_doxygen/swigInputConfig.py +++ b/wrappers/python/src/swig_doxygen/swigInputConfig.py @@ -216,22 +216,22 @@ UNITS = { ("AmoebaGeneralizedKirkwoodForce", "getDielectricOffset") : ( 'unit.nanometer', ()), ("AmoebaGeneralizedKirkwoodForce", "getIncludeCavityTerm") : ( None,()), ("AmoebaGeneralizedKirkwoodForce", "getProbeRadius") : ( 'unit.nanometer', ()), -("AmoebaGeneralizedKirkwoodForce", "getSurfaceAreaFactor") : ( '(unit.nanometer*unit.nanometer)/unit.kilojoule_per_mole',()), +("AmoebaGeneralizedKirkwoodForce", "getSurfaceAreaFactor") : ( 'unit.kilojoule_per_mole/(unit.nanometer*unit.nanometer)',()), -("AmoebaAngleForce", "getAmoebaGlobalAngleCubic") : ( None,()), -("AmoebaAngleForce", "getAmoebaGlobalAngleQuartic") : ( None,()), -("AmoebaAngleForce", "getAmoebaGlobalAnglePentic") : ( None,()), -("AmoebaAngleForce", "getAmoebaGlobalAngleSextic") : ( None,()), -("AmoebaAngleForce", "getAngleParameters") : ( None, (None, None, None, 'unit.radian', 'unit.kilojoule_per_mole/(unit.radian*unit.radian)')), +("AmoebaAngleForce", "getAmoebaGlobalAngleCubic") : ( '1/unit.radian',()), +("AmoebaAngleForce", "getAmoebaGlobalAngleQuartic") : ( '1/unit.radian**2',()), +("AmoebaAngleForce", "getAmoebaGlobalAnglePentic") : ( '1/unit.radian**3',()), +("AmoebaAngleForce", "getAmoebaGlobalAngleSextic") : ( '1/unit.radian**4',()), +("AmoebaAngleForce", "getAngleParameters") : ( None, (None, None, None, 'unit.degree', 'unit.kilojoule_per_mole/(unit.radian*unit.radian)')), -("AmoebaBondForce", "getAmoebaGlobalBondCubic") : ( None,()), -("AmoebaBondForce", "getAmoebaGlobalBondQuartic") : ( None,()), +("AmoebaBondForce", "getAmoebaGlobalBondCubic") : ( '1/unit.nanometer',()), +("AmoebaBondForce", "getAmoebaGlobalBondQuartic") : ( '1/unit.nanometer**2',()), ("AmoebaBondForce", "getBondParameters") : ( None, (None, None, 'unit.nanometer', 'unit.kilojoule_per_mole/(unit.nanometer*unit.nanometer)')), -("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleCubic") : ( None,()), -("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleQuartic") : ( None,()), -("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAnglePentic") : ( None,()), -("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleSextic") : ( None,()), +("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleCubic") : ( '1/unit.radian',()), +("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleQuartic") : ( '1/unit.radian**2',()), +("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAnglePentic") : ( '1/unit.radian**3',()), +("AmoebaInPlaneAngleForce", "getAmoebaGlobalInPlaneAngleSextic") : ( '1/unit.radian**4',()), ("AmoebaInPlaneAngleForce", "getAngleParameters") : ( None, (None, None, None, None, 'unit.radian', 'unit.kilojoule_per_mole/(unit.radian*unit.radian)')), ("AmoebaMultipoleForce", "getNumMultipoles") : ( None,()), @@ -256,7 +256,9 @@ UNITS = { # void getCovalentMap(int index, CovalentType typeId, std::vector& covalentAtoms ) # void getCovalentMaps(int index, std::vector < std::vector >& covalentLists ) -("AmoebaMultipoleForce", "getMultipoleParameters") : ( None, ()), +("AmoebaMultipoleForce", "getMultipoleParameters") : ( None, ('unit.elementary_charge', 'unit.elementary_charge*unit.nanometer', + 'unit.elementary_charge*unit.nanometer**2', None, None, None, None, None, None, + 'unit.nanometer**3')), ("AmoebaMultipoleForce", "getCovalentMap") : ( None, ()), ("AmoebaMultipoleForce", "getCovalentMaps") : ( None, ()), ("AmoebaMultipoleForce", "getScalingDistanceCutoff") : ( 'unit.nanometer', ()), @@ -268,17 +270,17 @@ UNITS = { ("AmoebaMultipoleForce", "getSystemMultipoleMoments") : ( None, ()), ("AmoebaOutOfPlaneBendForce", "getNumOutOfPlaneBends") : ( None, ()), -("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendCubic") : ( None,()), -("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendQuartic") : ( None,()), -("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendPentic") : ( None,()), -("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendSextic") : ( None,()), -("AmoebaOutOfPlaneBendForce", "getOutOfPlaneBendParameters") : ( None, (None, None, None, None, 'unit.kilojoule_per_mole')), +("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendCubic") : ( '1/unit.radian',()), +("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendQuartic") : ( '1/unit.radian**2',()), +("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendPentic") : ( '1/unit.radian**3',()), +("AmoebaOutOfPlaneBendForce", "getAmoebaGlobalOutOfPlaneBendSextic") : ( '1/unit.radian**4',()), +("AmoebaOutOfPlaneBendForce", "getOutOfPlaneBendParameters") : ( None, (None, None, None, None, 'unit.kilojoule_per_mole/unit.radians**2')), ("AmoebaPiTorsionForce", "getNumPiTorsions") : ( None, ()), ("AmoebaPiTorsionForce", "getPiTorsionParameters") : ( None, (None, None, None, None, None, None, 'unit.kilojoule_per_mole')), ("AmoebaStretchBendForce", "getNumStretchBends") : ( None, ()), -("AmoebaStretchBendForce", "getStretchBendParameters") : ( None, (None, None, None, 'unit.nanometer', 'unit.nanometer', 'unit.radian', 'unit.kilojoule_per_mole/unit.nanometer/unit.degree', 'unit.kilojoule_per_mole/unit.nanometer/unit.degree')), +("AmoebaStretchBendForce", "getStretchBendParameters") : ( None, (None, None, None, 'unit.nanometer', 'unit.nanometer', 'unit.radian', 'unit.kilojoule_per_mole/unit.nanometer/unit.radian', 'unit.kilojoule_per_mole/unit.nanometer/unit.radian')), ("AmoebaTorsionTorsionForce", "getNumTorsionTorsions") : ( None, ()), ("AmoebaTorsionTorsionForce", "getNumTorsionTorsionGrids") : ( None, ()), @@ -376,6 +378,9 @@ UNITS = { ("CustomTorsionForce", "getPerTorsionParameterName") : (None, ()), ("CustomTorsionForce", "getGlobalParameterName") : (None, ()), ("CustomTorsionForce", "getTorsionParameters") : (None, ()), +("DrudeForce", "getParticleParameters") : (None, (None, None, None, None, None, 'unit.elementary_charge', 'unit.nanometer**3', None, None)), +("DrudeForce", "getNumScreenedPairs") : (None, ()), +("DrudeForce", "getScreenedPairParameters") : (None, ()), ("GBSAOBCForce", "getParticleParameters") : (None, ('unit.elementary_charge', 'unit.nanometer', None)), @@ -420,6 +425,7 @@ UNITS = { ("System", "getForce") : (None, ()), ("System", "getVirtualSite") : (None, ()), ("DrudeLangevinIntegrator", "getDrudeTemperature") : ("unit.kelvin", ()), +("DrudeLangevinIntegrator", "getMaxDrudeDistance") : ("unit.nanometer", ()), ("MonteCarloMembraneBarostat", "getXYMode") : (None, ()), ("MonteCarloMembraneBarostat", "getZMode") : (None, ()), ("DrudeLangevinIntegrator", "getDrudeFriction") : ("1/unit.picosecond", ()), diff --git a/wrappers/python/src/swig_doxygen/swig_lib/python/extend.i b/wrappers/python/src/swig_doxygen/swig_lib/python/extend.i index 33571a76390b084b693b240d6fd1cacab8b4aa94..f0f11aca72d1316eeffe3f77fd3c888e9eda84eb 100644 --- a/wrappers/python/src/swig_doxygen/swig_lib/python/extend.i +++ b/wrappers/python/src/swig_doxygen/swig_lib/python/extend.i @@ -45,9 +45,9 @@ enforcePeriodicBox = False, groups = -1) -> State - + Get a State object recording the current state information stored in this context. - + Parameters: - getPositions (bool=False) whether to store particle positions in the State - getVelocities (bool=False) whether to store particle velocities in the State @@ -55,26 +55,31 @@ - getEnergy (bool=False) whether to store potential and kinetic energy in the State - getParameter (bool=False) whether to store context parameters in the State - enforcePeriodicBox (bool=False) if false, the position of each particle will be whatever position is stored in the Context, regardless of periodic boundary conditions. If true, particle positions will be translated so the center of every molecule lies in the same periodic box. - - groups (int=-1) a set of bit flags for which force groups to include when computing forces and energies. Group i will be included if (groups&(1< State - + Get a State object recording the current state information about one copy of the system. - + Parameters: - copy (int) the index of the copy for which to retrieve state information - getPositions (bool=False) whether to store particle positions in the State @@ -207,26 +212,30 @@ Parameters: - getEnergy (bool=False) whether to store potential and kinetic energy in the State - getParameter (bool=False) whether to store context parameters in the State - enforcePeriodicBox (bool=False) if false, the position of each particle will be whatever position is stored in the Context, regardless of periodic boundary conditions. If true, particle positions will be translated so the center of every molecule lies in the same periodic box. - - groups (int=-1) a set of bit flags for which force groups to include when computing forces and energies. Group i will be included if (groups&(1<(*self); } @@ -298,7 +308,7 @@ Parameters: ss << inputString; return OpenMM::XmlSerializer::deserialize(ss); } - + static std::string _serializeForce(const OpenMM::Force* object) { std::stringstream ss; OpenMM::XmlSerializer::serialize(object, "Force", ss); @@ -311,7 +321,7 @@ Parameters: ss << inputString; return OpenMM::XmlSerializer::deserialize(ss); } - + static std::string _serializeIntegrator(const OpenMM::Integrator* object) { std::stringstream ss; OpenMM::XmlSerializer::serialize(object, "Integrator", ss); @@ -326,8 +336,8 @@ Parameters: } static std::string _serializeStateAsLists( - const std::vector& pos, - const std::vector& vel, + const std::vector& pos, + const std::vector& vel, const std::vector& forces, double kineticEnergy, double potentialEnergy, @@ -340,7 +350,7 @@ Parameters: OpenMM::XmlSerializer::serialize(&myState, "State", buffer); return buffer.str(); } - + static PyObject* _deserializeStringIntoLists(const std::string &stateAsString) { std::stringstream ss; ss << stateAsString; @@ -368,7 +378,7 @@ Parameters: try: velocities = pythonState.getVelocities().value_in_unit(unit.nanometers/unit.picoseconds) types |= 2 - except: + except: pass try: forces = pythonState.getForces().value_in_unit(unit.kilojoules_per_mole/unit.nanometers) @@ -389,14 +399,14 @@ Parameters: time = pythonState.getTime().value_in_unit(unit.picoseconds) boxVectors = pythonState.getPeriodicBoxVectors().value_in_unit(unit.nanometers) string = XmlSerializer._serializeStateAsLists(positions, velocities, forces, kineticEnergy, potentialEnergy, time, boxVectors, params, types) - return string + return string @staticmethod def _deserializeState(pythonString): - + (simTime, periodicBoxVectorsList, energy, coordList, velList, forceList, paramMap) = XmlSerializer._deserializeStringIntoLists(pythonString) - + state = State(simTime=simTime, energy=energy, coordList=coordList, @@ -449,9 +459,18 @@ Parameters: %extend OpenMM::Force { %pythoncode %{ + def __getstate__(self): + serializationString = XmlSerializer.serialize(self) + return serializationString + + def __setstate__(self, serializationString): + system = XmlSerializer.deserialize(serializationString) + self.this = system.this + def __deepcopy__(self, memo): return self.__copy__() %} + %newobject __copy__; OpenMM::Force* __copy__() { return OpenMM::XmlSerializer::clone(*self); } @@ -470,6 +489,7 @@ Parameters: def __deepcopy__(self, memo): return self.__copy__() %} + %newobject __copy__; OpenMM::Integrator* __copy__() { return OpenMM::XmlSerializer::clone(*self); } diff --git a/wrappers/python/src/swig_doxygen/swig_lib/python/pythoncode.i b/wrappers/python/src/swig_doxygen/swig_lib/python/pythoncode.i index d3c217f928d1fb3cd770dd721743dc78c9e380c0..b0a9aad1fcd02c29fcc073d902add4c3ae934388 100644 --- a/wrappers/python/src/swig_doxygen/swig_lib/python/pythoncode.i +++ b/wrappers/python/src/swig_doxygen/swig_lib/python/pythoncode.i @@ -2,11 +2,14 @@ try: import numpy -except: - pass +except ImportError: + numpy = None +import copy import sys import math +import functools +import operator RMIN_PER_SIGMA=math.pow(2, 1/6.0) RVDW_PER_SIGMA=math.pow(2, 1/6.0)/2.0 if sys.version_info[0] == 2: @@ -224,3 +227,70 @@ class State(_object): self._system = args[0] self._integrator = args[1] %} + +%pythonprepend OpenMM::AmoebaAngleForce::addAngle %{ + try: + length = args[3] + if isinstance(args, tuple): + args = list(args) + except (NameError, UnboundLocalError): + if unit.is_quantity(length): + length = length.value_in_unit(unit.degree) + else: + if unit.is_quantity(length): + args[3] = length.value_in_unit(unit.degree) +%} + +%pythonprepend OpenMM::AmoebaAngleForce::setAngleParameters %{ + try: + length = args[4] + if isinstance(args, tuple): + args = list(args) + except (NameError, UnboundLocalError): + if unit.is_quantity(length): + length = length.value_in_unit(unit.degree) + else: + if unit.is_quantity(length): + args[4] = length.value_in_unit(unit.degree) +%} + +%pythonprepend OpenMM::AmoebaTorsionTorsionForce::setTorsionTorsionGrid %{ + def deunitize_grid(grid): + if isinstance(grid, tuple): + grid = list(grid) + for i, row in enumerate(grid): + if isinstance(row, tuple): + row = list(row) + grid[i] = row + for i, column in enumerate(row): + if isinstance(column, tuple): + column = list(column) + row[i] = column + # Data is angle, angle, energy, de/dang1, de/dang2, d^2e/dang1dang2 + if unit.is_quantity(column[0]): + column[0] = column[0].value_in_unit(unit.degree) + if unit.is_quantity(column[1]): + column[1] = column[1].value_in_unit(unit.degree) + if unit.is_quantity(column[2]): + column[2] = column[2].value_in_unit(unit.kilojoule_per_mole) + if len(column) > 3 and unit.is_quantity(column[3]): + column[3] = column[3].value_in_unit(unit.kilojoule_per_mole/unit.radians) + if len(column) > 4 and unit.is_quantity(column[4]): + column[4] = column[4].value_in_unit(unit.kilojoule_per_mole/unit.radians) + if len(column) > 5 and unit.is_quantity(column[5]): + column[5] = column[5].value_in_unit(unit.kilojoule_per_mole/unit.radians**2) + return grid + try: + grid = copy.deepcopy(args[1]) + if isinstance(args, tuple): + args = list(args) + except (NameError, UnboundLocalError): + try: + # Support numpy arrays + grid = grid.tolist() + except AttributeError: + grid = copy.deepcopy(grid) + grid = deunitize_grid(grid) + else: + args[1] = deunitize_grid(grid) +%} diff --git a/wrappers/python/src/swig_doxygen/swig_lib/python/typemaps.i b/wrappers/python/src/swig_doxygen/swig_lib/python/typemaps.i index 2a53c74a6cdc605574fd46e0b46c8d688af39fa7..ecd223b0d229ecd36a8b3a6ec09d793915763608 100644 --- a/wrappers/python/src/swig_doxygen/swig_lib/python/typemaps.i +++ b/wrappers/python/src/swig_doxygen/swig_lib/python/typemaps.i @@ -1,10 +1,44 @@ -%fragment("Py_StripOpenMMUnits", "header") { +%fragment("Vec3_to_PyVec3", "header") { +/** + * Convert an OpenMM::Vec3 into a Python simtk.openmm.Vec3 object + * + * Returns a new reference. + */ +PyObject* Vec3_to_PyVec3(const OpenMM::Vec3& v) { + static PyObject *__s_mm = NULL; + static PyObject *__s_Vec3 = NULL; + if (__s_mm == NULL) { + __s_mm = PyImport_AddModule("simtk.openmm"); + __s_Vec3 = PyObject_GetAttrString(__s_mm, "Vec3"); + } + PyObject* tuple = Py_BuildValue("(d,d,d)", v[0], v[1], v[2]); + PyObject* PyVec3 = PyObject_CallObject(__s_Vec3, tuple); + Py_DECREF(tuple); + return PyVec3; +} +} -static PyObject *__s_Quantity = NULL; -static PyObject *__s_md_unit_system_tuple = NULL; -static PyObject *__s_bar_tuple = NULL; +%fragment("Py_StripOpenMMUnits", "header") { +/** + * Strip any OpenMM units of an input PyObject. + * + * This is equivalent to the following Python code + * + * >>> from simtk import unit + * >>> if isinstance(input, unit.Quantity) + * ... if input.is_compatible(unit.bar) + * ... return input.value_in_unit(unit.bar) + * ... return input.value_in_unit_system(unit.md_input_system) + * ... return input + * + * Returns a new reference. + */ PyObject* Py_StripOpenMMUnits(PyObject *input) { + static PyObject *__s_Quantity = NULL; + static PyObject *__s_md_unit_system_tuple = NULL; + static PyObject *__s_bar_tuple = NULL; + if (__s_Quantity == NULL) { PyObject* module = NULL; module = PyImport_ImportModule("simtk.unit"); @@ -137,6 +171,8 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { while ((item = PyIter_Next(iterator))) { item1 = Py_StripOpenMMUnits(item); if (item1 == NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); Py_DECREF(item); return SWIG_ERROR; } @@ -145,6 +181,8 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { Py_DECREF(item1); if (PyErr_Occurred() != NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); return SWIG_ERROR; } out.push_back(d); @@ -152,10 +190,134 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { Py_DECREF(iterator); Py_DECREF(stripped); return SWIG_OK; - } +} +} + +%fragment("Py_SequenceToVecVec3", "header", fragment="Py_SequenceToVec3") { +int Py_SequenceToVecVec3(PyObject* obj, std::vector& out) { + int ret = 0; + PyObject* stripped = NULL; + PyObject* item = NULL; + PyObject* item1 = NULL; + PyObject* iterator = NULL; + stripped = Py_StripOpenMMUnits(obj); // new reference + iterator = PyObject_GetIter(stripped); // new reference + + if (iterator == NULL) { + Py_DECREF(stripped); + return SWIG_ERROR; + } + + while ((item = PyIter_Next(iterator))) { // new reference + item1 = Py_StripOpenMMUnits(item); // new reference + if (item1 == NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); + Py_DECREF(item); + return SWIG_ERROR; + } + + OpenMM::Vec3 v = Py_SequenceToVec3(item1, ret); + Py_DECREF(item); + Py_DECREF(item1); + + if (!SWIG_IsOK(ret)) { + Py_DECREF(stripped); + Py_DECREF(iterator); + return SWIG_ERROR; + } + + out.push_back(v); + } + + Py_DECREF(iterator); + Py_DECREF(stripped); + return SWIG_OK; +} +} + +%fragment("Py_SequenceToVecVecDouble", "header", fragment="Py_SequenceToVecDouble") { +int Py_SequenceToVecVecDouble(PyObject* obj, std::vector >& out) { + PyObject* stripped = NULL; + PyObject* item = NULL; + PyObject* item1 = NULL; + PyObject* iterator = NULL; + stripped = Py_StripOpenMMUnits(obj); + iterator = PyObject_GetIter(stripped); + + if (iterator == NULL) { + Py_DECREF(stripped); + return SWIG_ERROR; + } + + while ((item = PyIter_Next(iterator))) { + item1 = Py_StripOpenMMUnits(item); + if (item1 == NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); + Py_DECREF(item); + return SWIG_ERROR; + } + std::vector v; + int r2 = Py_SequenceToVecDouble(item1, v); + Py_DECREF(item); + Py_DECREF(item1); + + if (!SWIG_IsOK(r2) || PyErr_Occurred() != NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); + return SWIG_ERROR; + } + out.push_back(v); + } + Py_DECREF(iterator); + Py_DECREF(stripped); + return SWIG_OK; +} } +%fragment("Py_SequenceToVecVecVecDouble", "header", fragment="Py_SequenceToVecVecDouble") { +int Py_SequenceToVecVecVecDouble(PyObject* obj, std::vector > >& out) { + PyObject* stripped = NULL; + PyObject* item = NULL; + PyObject* item1 = NULL; + PyObject* iterator = NULL; + stripped = Py_StripOpenMMUnits(obj); + iterator = PyObject_GetIter(stripped); + if (iterator == NULL) { + Py_DECREF(stripped); + return SWIG_ERROR; + } + + while ((item = PyIter_Next(iterator))) { + item1 = Py_StripOpenMMUnits(item); + if (item1 == NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); + Py_DECREF(item); + return SWIG_ERROR; + } + std::vector >v; + int r2 = Py_SequenceToVecVecDouble(item1, v); + Py_DECREF(item); + Py_DECREF(item1); + + if (!SWIG_IsOK(r2) || PyErr_Occurred() != NULL) { + Py_DECREF(stripped); + Py_DECREF(iterator); + return SWIG_ERROR; + } + out.push_back(v); + } + Py_DECREF(iterator); + Py_DECREF(stripped); + return SWIG_OK; +} +} + + +// ------ typemap for double ---- %typemap(typecheck, precedence=SWIG_TYPECHECK_DOUBLE, fragment="Py_StripOpenMMUnits") double { double argp = 0; PyObject* s = NULL; @@ -163,7 +325,6 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { $1 = (s != NULL) ? SWIG_IsOK(SWIG_AsVal_double(s, &argp)) : 0; Py_DECREF(s); } - %typemap(in, noblock=1, fragment="Py_StripOpenMMUnits") double (double argp = 0, int res = 0, PyObject* stripped = NULL) { @@ -179,6 +340,7 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { } +// ------ typemap for Vec3 %typemap(in, fragment="Py_SequenceToVec3") Vec3 (int res=0){ // typemap -- %typemap(in) Vec3 $1 = Py_SequenceToVec3($input, res); @@ -187,8 +349,14 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { SWIG_fail; } } +%typemap(typecheck, fragment="Py_SequenceToVec3") Vec3 { + int res = 0; + Py_SequenceToVec3($input, res); + $1 = SWIG_IsOK(res); +} +// typemap for const Vec3& %typemap(in, fragment="Py_SequenceToVec3") const Vec3& (OpenMM::Vec3 myVec, int res=0) { // typemap -- %typemap(in) Vec3 myVec = Py_SequenceToVec3($input, res); @@ -198,30 +366,63 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { } $1 = &myVec; } +%typemap(typecheck, fragment="Py_SequenceToVec3") const Vec3& { + int res = 0; + Py_SequenceToVec3($input, res); + $1 = SWIG_IsOK(res); +} -/* Convert python list of tuples to C++ std::vector of Vec3 objects */ -%typemap(in, fragment="Py_SequenceToVec3") const std::vector& (std::vector vVec, PyObject* s=NULL, PyObject* o=NULL) { - int i, pLength, ret; - s = Py_StripOpenMMUnits($input); - pLength = (int)PySequence_Length(s); - for (i = 0; i < pLength; i++) { - o = PySequence_GetItem(s, i); - OpenMM::Vec3 v = Py_SequenceToVec3(o, ret); - if (!SWIG_IsOK(ret)) { - Py_DECREF(s); - Py_DECREF(o); - PyErr_SetString(PyExc_ValueError, "in method $symname, argument $argnum could not be converted to type $type"); - SWIG_fail; - } - vVec.push_back(v); +// typemap for const vector > +%typemap(in, fragment="Py_SequenceToVecVecDouble") const std::vector >(std::vector > v, int res=0) { + res = Py_SequenceToVecVecDouble($input, v); + if (!SWIG_IsOK(res)) { + PyErr_SetString(PyExc_ValueError, "in method $symname, argument $argnum could not be converted to type $type"); + SWIG_fail; } - $1 = &vVec; - Py_DECREF(s); + $1 = &v; +} +%typemap(typecheck, fragment="Py_SequenceToVecVecDouble") const std::vector > { + std::vector > v; + int res = Py_SequenceToVecVecDouble($input, v); + $1 = SWIG_IsOK(res); } +// typemap for const vector > > +%typemap(in, fragment="Py_SequenceToVecVecVecDouble") const std::vector > >(std::vector > > v, int res=0) { + res = Py_SequenceToVecVecVecDouble($input, v); + if (!SWIG_IsOK(res)) { + PyErr_SetString(PyExc_ValueError, "in method $symname, argument $argnum could not be converted to type $type"); + SWIG_fail; + } + $1 = &v; +} +%typemap(typecheck, fragment="Py_SequenceToVecVecVecDouble") const std::vector > >{ + std::vector > > v; + int res = Py_SequenceToVecVecVecDouble($input, v); + $1 = SWIG_IsOK(res); +} + + +// typemap for vector +%typemap(in, fragment="Py_SequenceToVecVec3") const std::vector& (std::vector v, int res=0) { + res = Py_SequenceToVecVec3($input, v); + if (!SWIG_IsOK(res)) { + PyErr_SetString(PyExc_ValueError, "in method $symname, argument $argnum could not be converted to type $type"); + SWIG_fail; + } + $1 = &v; +} +%typemap(typecheck, precedence=SWIG_TYPECHECK_DOUBLE_ARRAY, fragment="Py_SequenceToVecVec3") const std::vector& { + std::vector v; + int res=0; + res = Py_SequenceToVecVec3($input, v); + $1 = SWIG_IsOK(res); +} + +// typemap for const vector %typemap(in, fragment="Py_SequenceToVecDouble") const std::vector & (std::vector v, int res=0) { res = Py_SequenceToVecDouble($input, v); if (!SWIG_IsOK(res)) { @@ -230,6 +431,14 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { } $1 = &v; } +%typemap(typecheck, precedence=SWIG_TYPECHECK_DOUBLE_ARRAY) const std::vector & { + std::vector v; + int res = 0; + res = Py_SequenceToVecDouble($input, v); + $1 = SWIG_IsOK(res); +} + + /* The following two typemaps cause a non-const vector& to become a return value. */ %typemap(in, numinputs=0) std::vector& (std::vector temp) { @@ -237,19 +446,12 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { } -%typemap(argout) std::vector& { - int i, n; - PyObject *pyList; - - n=(*$1).size(); - pyList=PyList_New(n); - PyObject* mm = PyImport_AddModule("simtk.openmm"); - PyObject* vec3 = PyObject_GetAttrString(mm, "Vec3"); - for (i=0; i& { + int n = (*$1).size(); + PyObject * pyList = PyList_New(n); + for (int i=0; i& out) { %typemap(argout) const std::vector& { } -/* Convert python tuple to C++ Vec3 object*/ -%typemap(typecheck) Vec3 { - // typemap -- %typemap(typecheck) Vec3 - $1 = (PySequence_Length($input) >= 3 ? 1 : 0); -} - -%typemap(typecheck) const Vec3& { - // typemap -- %typemap(typecheck) Vec3 - $1 = (PySequence_Length($input) >= 3 ? 1 : 0); +%typemap(out, fragment="Vec3_to_PyVec3") Vec3 { + $result = Vec3_to_PyVec3(*$1); } -%typemap(out) Vec3 { - PyObject* mm = PyImport_AddModule("simtk.openmm"); - PyObject* vec3 = PyObject_GetAttrString(mm, "Vec3"); - PyObject* args = Py_BuildValue("(d,d,d)", ($1)[0], ($1)[1], ($1)[2]); - $result = PyObject_CallObject(vec3, args); - Py_DECREF(args); -} - - -%typemap(out) const Vec3& { - PyObject* mm = PyImport_AddModule("simtk.openmm"); - PyObject* vec3 = PyObject_GetAttrString(mm, "Vec3"); - PyObject* args = Py_BuildValue("(d,d,d)", (*$1)[0], (*$1)[1], (*$1)[2]); - $result = PyObject_CallObject(vec3, args); - Py_DECREF(args); +%typemap(out, fragment="Vec3_to_PyVec3") const Vec3& { + $result = Vec3_to_PyVec3(*$1); } /* Convert C++ (Vec3&, Vec3&, Vec3&) object to python tuple or tuples */ -%typemap(argout) (Vec3& a, Vec3& b, Vec3& c) { - // %typemap(argout) (Vec3& a, Vec3& b, Vec3& c) - PyObject* mm = PyImport_AddModule("simtk.openmm"); - PyObject* vec3 = PyObject_GetAttrString(mm, "Vec3"); - PyObject* args1 = Py_BuildValue("(d,d,d)", (*$1)[0], (*$1)[1], (*$1)[2]); - PyObject* args2 = Py_BuildValue("(d,d,d)", (*$2)[0], (*$2)[1], (*$2)[2]); - PyObject* args3 = Py_BuildValue("(d,d,d)", (*$3)[0], (*$3)[1], (*$3)[2]); - PyObject* pyVec1 = PyObject_CallObject(vec3, args1); - PyObject* pyVec2 = PyObject_CallObject(vec3, args2); - PyObject* pyVec3 = PyObject_CallObject(vec3, args3); - Py_DECREF(args1); - Py_DECREF(args2); - Py_DECREF(args3); - Py_DECREF(mm); - Py_DECREF(vec3); +%typemap(argout, fragment="Vec3_to_PyVec3") (Vec3& a, Vec3& b, Vec3& c) { + PyObject* pyVec1 = Vec3_to_PyVec3(*$1); + PyObject* pyVec2 = Vec3_to_PyVec3(*$2); + PyObject* pyVec3 = Vec3_to_PyVec3(*$3); PyObject *o, *o2, *o3; o = Py_BuildValue("[N, N, N]", pyVec1, pyVec2, pyVec3); if ((!$result) || ($result == Py_None)) { @@ -337,3 +508,32 @@ int Py_SequenceToVecDouble(PyObject* obj, std::vector& out) { // createCheckpoint returns a bytes object $result = PyBytes_FromStringAndSize($1.c_str(), $1.length()); } + + +%typemap(in) std::string { + // if we have a C++ method that takes in a std::string, we're most happy + // to accept a python bytes object. But if the user passes in a unicode + // object we'll try to recover by encoding it to UTF-8 bytes + PyObject* temp = NULL; + char* c_str = NULL; + Py_ssize_t len = 0; + + if (PyUnicode_Check($input)) { + temp = PyUnicode_AsUTF8String($input); + if (temp == NULL) { + SWIG_exception_fail(SWIG_TypeError, "'utf-8' codec can't decode byte"); + } + PyBytes_AsStringAndSize(temp, &c_str, &len); + Py_XDECREF(temp); + } else if (PyBytes_Check($input)) { + PyBytes_AsStringAndSize($input, &c_str, &len); + } else { + SWIG_exception_fail(SWIG_TypeError, "argument must be str or bytes"); + } + + if (c_str == NULL) { + SWIG_exception_fail(SWIG_TypeError, "argument must be str or bytes"); + } + + $1 = std::string(c_str, len); +} diff --git a/wrappers/python/tests/TestAPIUnits.py b/wrappers/python/tests/TestAPIUnits.py new file mode 100644 index 0000000000000000000000000000000000000000..5b8b2dce32868939be4922348cec6c3998a3dcff --- /dev/null +++ b/wrappers/python/tests/TestAPIUnits.py @@ -0,0 +1,1219 @@ +from __future__ import division + +import unittest +from simtk.openmm import * +from simtk.openmm.app import * +from simtk.unit import * +import random +import math + +class TestAPIUnits(unittest.TestCase): + """Test the Simulation class""" + + def assertAlmostEqualUnit(self, x1, x2): + self.assertAlmostEqual(x1._value, x2.value_in_unit(x1.unit)) + + def assertAlmostEqualUnitArray(self, a1, a2): + for x1, x2 in zip(a1._value, a2.value_in_unit(a1.unit)): + self.assertAlmostEqual(x1, x2) + + def testHarmonicBondForce(self): + """ Tests HarmonicBondForce API features """ + force = HarmonicBondForce() + force.addBond(0, 1, 1.0, 1.0) + force.addBond(2, 3, 1.0*angstroms, + 1.0*kilocalories_per_mole/angstroms**2) + i, j, length, K = force.getBondParameters(0) + self.assertEqual(force.getNumBonds(), 2) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(length, 1.0*nanometers) + self.assertEqual(K, 1*kilojoules_per_mole/nanometers**2) + self.assertIs(length.unit, nanometers) + self.assertIs(K.unit, kilojoules_per_mole/nanometers**2) + + i, j, length, K = force.getBondParameters(1) + self.assertEqual(i, 2) + self.assertEqual(j, 3) + self.assertEqual(length, 1.0*angstroms) + self.assertAlmostEqualUnit(K, 1*kilocalories_per_mole/angstroms**2) + self.assertIs(length.unit, nanometers) + self.assertIs(K.unit, kilojoules_per_mole/nanometers**2) + + def testHarmonicAngleForce(self): + """ Tests HarmonicAngleForce API features """ + force = HarmonicAngleForce() + force.addAngle(0, 1, 2, 180*degrees, + 1.0*kilocalories_per_mole/radians**2) + force.addAngle(1, 2, 3, math.pi/2, 1.0) + self.assertEqual(force.getNumAngles(), 2) + i, j, k, angle, K = force.getAngleParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(angle, 180*degrees) + self.assertEqual(K, 1.0*kilocalories_per_mole/radians**2) + self.assertIs(angle.unit, radians) + self.assertIs(K.unit, kilojoules_per_mole/radians**2) + + i, j, k, angle, K = force.getAngleParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(angle, math.pi/2*radians) + self.assertEqual(K, 1.0*kilojoules_per_mole/radians**2) + self.assertIs(angle.unit, radians) + self.assertIs(K.unit, kilojoules_per_mole/radians**2) + + def testPeriodicTorsionForce(self): + """ Tests PeriodicTorsionForce API features """ + force = PeriodicTorsionForce() + force.addTorsion(0, 1, 2, 3, 1, math.pi, 1) + force.addTorsion(1, 2, 3, 4, 2, 180*degrees, 1*kilocalories_per_mole) + + self.assertEqual(force.getNumTorsions(), 2) + i, j, k, l, per, phase, K = force.getTorsionParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(per, 1) + self.assertFalse(is_quantity(per)) + self.assertEqual(phase, math.pi*radians) + self.assertEqual(K, 1*kilojoules_per_mole) + self.assertIs(phase.unit, radians) + self.assertIs(K.unit, kilojoules_per_mole) + + i, j, k, l, per, phase, K = force.getTorsionParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertEqual(per, 2) + self.assertFalse(is_quantity(per)) + self.assertEqual(phase, 180*degrees) + self.assertEqual(K, 1*kilocalories_per_mole) + self.assertIs(phase.unit, radians) + self.assertIs(K.unit, kilojoules_per_mole) + + def testRBTorsionForce(self): + """ Tests the RBTorsionForce API features """ + force = RBTorsionForce() + force.addTorsion(0, 1, 2, 3, 1, 2, 3, 4, 5, 6) + force.addTorsion(1, 2, 3, 4, 1*kilocalories_per_mole, + 2*kilocalories_per_mole, 3*kilocalories_per_mole, + 4*kilocalories_per_mole, 5*kilocalories_per_mole, + 6*kilocalories_per_mole) + + self.assertEqual(force.getNumTorsions(), 2) + i, j, k, l, c0, c1, c2, c3, c4, c5 = force.getTorsionParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(c0, 1*kilojoules_per_mole) + self.assertEqual(c1, 2*kilojoules_per_mole) + self.assertEqual(c2, 3*kilojoules_per_mole) + self.assertEqual(c3, 4*kilojoules_per_mole) + self.assertEqual(c4, 5*kilojoules_per_mole) + self.assertEqual(c5, 6*kilojoules_per_mole) + self.assertIs(c0.unit, kilojoules_per_mole) + self.assertIs(c1.unit, kilojoules_per_mole) + self.assertIs(c2.unit, kilojoules_per_mole) + self.assertIs(c3.unit, kilojoules_per_mole) + self.assertIs(c4.unit, kilojoules_per_mole) + self.assertIs(c5.unit, kilojoules_per_mole) + + i, j, k, l, c0, c1, c2, c3, c4, c5 = force.getTorsionParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertAlmostEqualUnit(c0, 1*kilocalories_per_mole) + self.assertAlmostEqualUnit(c1, 2*kilocalories_per_mole) + self.assertAlmostEqualUnit(c2, 3*kilocalories_per_mole) + self.assertAlmostEqualUnit(c3, 4*kilocalories_per_mole) + self.assertAlmostEqualUnit(c4, 5*kilocalories_per_mole) + self.assertAlmostEqualUnit(c5, 6*kilocalories_per_mole) + self.assertIs(c0.unit, kilojoules_per_mole) + self.assertIs(c1.unit, kilojoules_per_mole) + self.assertIs(c2.unit, kilojoules_per_mole) + self.assertIs(c3.unit, kilojoules_per_mole) + self.assertIs(c4.unit, kilojoules_per_mole) + self.assertIs(c5.unit, kilojoules_per_mole) + + def testNonbondedForce(self): + """ Tests the NonbondedForce API features """ + force = NonbondedForce() + force.addParticle(1.0, 1.0, 1.0) + force.addParticle(1.0*coulombs, 1.0*angstroms, + 1.0*kilocalories_per_mole) + + self.assertEqual(force.getNumParticles(), 2) + charge, sigma, epsilon = force.getParticleParameters(0) + self.assertEqual(charge, 1.0*elementary_charge) + self.assertEqual(sigma, 1.0*nanometers) + self.assertEqual(epsilon, 1.0*kilojoules_per_mole) + self.assertIs(charge.unit, elementary_charge) + self.assertIs(sigma.unit, nanometers) + self.assertIs(epsilon.unit, kilojoules_per_mole) + + charge, sigma, epsilon = force.getParticleParameters(1) + self.assertEqual(charge, 1.0*coulombs) + self.assertEqual(sigma, 1.0*angstroms) + self.assertEqual(epsilon, 1.0*kilocalories_per_mole) + self.assertIs(charge.unit, elementary_charge) + self.assertIs(sigma.unit, nanometers) + self.assertIs(epsilon.unit, kilojoules_per_mole) + + force.setCutoffDistance(10*angstroms) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + force.setCutoffDistance(1) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + + force.setSwitchingDistance(8*angstroms) + self.assertEqual(force.getSwitchingDistance(), 0.8*nanometers) + self.assertIs(force.getSwitchingDistance().unit, nanometer) + + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(NonbondedForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(NonbondedForce.CutoffNonPeriodic) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(NonbondedForce.CutoffPeriodic) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(NonbondedForce.Ewald) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(NonbondedForce.PME) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + + def testCmapForce(self): + """ Tests the CMAPTorsionForce API features """ + map1 = [random.random() for i in range(24*24)] + map2 = [random.random() for i in range(12*12)] * kilocalories_per_mole + force = CMAPTorsionForce() + force.addMap(24, map1) + force.addMap(12, map2) + force.addTorsion(0, 0, 1, 2, 3, 1, 2, 3, 4) + force.addTorsion(1, 5, 6, 7, 8, 6, 7, 8, 9) + force.addTorsion(0, 10, 11, 12, 13, 11, 12, 13, 14) + force.addTorsion(1, 15, 16, 17, 18, 16, 17, 18, 19) + + self.assertEqual(force.getNumTorsions(), 4) + self.assertEqual(force.getNumMaps(), 2) + self.assertEqual(force.getMapParameters(0)[0], 24) + self.assertEqual(force.getMapParameters(1)[0], 12) + self.assertIs(force.getMapParameters(0)[1].unit, kilojoules_per_mole) + self.assertIs(force.getMapParameters(1)[1].unit, kilojoules_per_mole) + + for x, y in zip(force.getMapParameters(0)[1], map1): + self.assertAlmostEqual(x.value_in_unit(kilojoules_per_mole), y) + + for x, y in zip(force.getMapParameters(1)[1], map2): + self.assertAlmostEqualUnit(x, y) + + def testCustomBondForce(self): + """ Tests the CustomBondForce API features """ + force = CustomBondForce('1/2*k*(r-r0)^2') + force.addPerBondParameter('r0') + force.addBond(0, 1, [0.1]) + force.addBond(1, 2, [1.0*angstroms]) + + self.assertEqual(force.getNumBonds(), 2) + i, j, req = force.getBondParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(req[0], 0.1) + + i, j, req = force.getBondParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(req[0], 0.1) + + def testCustomAngleForce(self): + """ Tests the CustomAngleForce API features """ + force = CustomAngleForce('1/2*k*(theta-theta0)^2') + force.addPerAngleParameter('theta0') + force.addAngle(0, 1, 2, [math.pi / 2]) + force.addAngle(3, 4, 5, [90*degrees]) + + self.assertEqual(force.getNumAngles(), 2) + i, j, k, theta = force.getAngleParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(theta[0], math.pi / 2) + + i, j, k, theta = force.getAngleParameters(1) + self.assertEqual(i, 3) + self.assertEqual(j, 4) + self.assertEqual(k, 5) + self.assertEqual(theta[0], math.pi / 2) + + def testCustomTorsionForce(self): + """ Tests the CustomTorsionForce API features """ + force = CustomTorsionForce('1/2*k*(theta-theta0)^2') + force.addTorsion(0, 1, 2, 3, [math.pi]) + force.addTorsion(4, 5, 6, 7, [180*degrees]) + + self.assertEqual(force.getNumTorsions(), 2) + i, j, k, l, theta = force.getTorsionParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(theta[0], math.pi) + + i, j, k, l, theta = force.getTorsionParameters(1) + self.assertEqual(i, 4) + self.assertEqual(j, 5) + self.assertEqual(k, 6) + self.assertEqual(l, 7) + self.assertEqual(theta[0], math.pi) + + def testCustomCompoundBondForce(self): + """ Tests the CustomCompoundBondForce API features """ + force = CustomCompoundBondForce(4, 'kb*distance(p1, p2)*distance(p2, p3)*distance(p3, p4)+' + 'ka*angle(p1, p2, p3)*angle(p2, p3, p4)+' + 'kd*dihedral(p1, p2, p3, p4)') + force.addPerBondParameter('kb') + force.addPerBondParameter('ka') + force.addPerBondParameter('kd') + force.addBond([0, 1, 2, 3], [1.0, 2.0, 3.0]) + force.addBond([4, 5, 6, 7], [1.0*kilocalories_per_mole/angstroms, + 2.0*kilocalories_per_mole/radians, + 3.0*kilocalories_per_mole] + ) + + self.assertEqual(force.getNumBonds(), 2) + (i, j, k, l), (kb, ka, kd) = force.getBondParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(kb, 1) + self.assertEqual(ka, 2) + self.assertEqual(kd, 3) + + (i, j, k, l), (kb, ka, kd) = force.getBondParameters(1) + self.assertEqual(i, 4) + self.assertEqual(j, 5) + self.assertEqual(k, 6) + self.assertEqual(l, 7) + self.assertEqual(kb, 1*10*4.184) + self.assertEqual(ka, 2*4.184) + self.assertEqual(kd, 3*4.184) + + def testCustomExternalForce(self): + """ Tests the CustomExternalForce API features """ + force = CustomExternalForce('1/2*k*k2*((x-x0)^2+(y-y0)^2+(z-z0)^2)') + force.addGlobalParameter('k', 10*kilocalories_per_mole/angstroms**2) + force.addGlobalParameter('k2', 20) + force.addPerParticleParameter('x0') + force.addPerParticleParameter('y0') + force.addPerParticleParameter('z0') + force.addParticle(0, [1.0, 2.0, 3.0]) + force.addParticle(1, [1.0*angstroms, 2.0*angstroms, 3.0*angstroms]) + + self.assertEqual(force.getNumParticles(), 2) + self.assertEqual(force.getNumGlobalParameters(), 2) + self.assertEqual(force.getGlobalParameterName(0), 'k') + self.assertEqual(force.getGlobalParameterName(1), 'k2') + self.assertEqual(force.getGlobalParameterDefaultValue(0), 1000*4.184) + self.assertEqual(force.getGlobalParameterDefaultValue(1), 20) + + i, (x0, y0, z0) = force.getParticleParameters(0) + self.assertEqual(i, 0) + self.assertEqual(x0, 1) + self.assertEqual(y0, 2) + self.assertEqual(z0, 3) + + i, (x0, y0, z0) = force.getParticleParameters(1) + self.assertEqual(i, 1) + self.assertAlmostEqual(x0, 1/10) + self.assertAlmostEqual(y0, 2/10) + self.assertAlmostEqual(z0, 3/10) + + def testCustomGBForce(self): + """ Tests the CustomGBForce API features """ + force = CustomGBForce() + force.addPerParticleParameter('q') + force.addPerParticleParameter('radius') + force.addPerParticleParameter('scale') + force.addGlobalParameter('extDiel', 78.5) + force.addGlobalParameter('intDiel', 1.0) + force.addComputedValue('I', + 'step(r+sr2-or1)*0.5*(1/L-1/U+0.25*(1/U^2-1/L^2)*' + '(r-sr2^2/r)+0.5*log(L/U)/r+C);' + 'U=r+sr2; C=2*(1/or1-1/L)*step(sr2-r-or1);' + 'L=max(or1, D); D=abs(r-sr2); sr2=scale2*or2;' + 'or1=radius1-0.009; or2=radius2-0.009', + CustomGBForce.ParticlePairNoExclusions + ) + force.addComputedValue('B', + '1/(1/or-tanh(1*psi-0.8*psi^2+4.85*psi^3)/radius);' + 'psi=I*or; or=radius-0.009', + CustomGBForce.SingleParticle + ) + force.addEnergyTerm('-138.935456*(1/intDiel-1/extDiel)*q1*q2/f;' + 'f=sqrt(r^2+B1*B2*exp(-r^2/(4*B1*B2)))', + CustomGBForce.ParticlePair + ) + + force.setNonbondedMethod(CustomGBForce.CutoffPeriodic) + + force.addParticle([1.0, 0.1, 0.5]) + force.addParticle([-1.0*coulombs, 1.0*angstroms, 0.5]) + + self.assertEqual(force.getNumParticles(), 2) + self.assertEqual(force.getNumComputedValues(), 2) + self.assertEqual(force.getNumEnergyTerms(), 1) + self.assertEqual(force.getNumPerParticleParameters(), 3) + self.assertEqual(force.getPerParticleParameterName(0), 'q') + self.assertEqual(force.getPerParticleParameterName(1), 'radius') + self.assertEqual(force.getPerParticleParameterName(2), 'scale') + self.assertTrue(force.usesPeriodicBoundaryConditions()) + + force.setNonbondedMethod(CustomGBForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomGBForce.CutoffNonPeriodic) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + + q, rad, scale = force.getParticleParameters(0) + self.assertEqual(q, 1.0) + self.assertEqual(rad, 0.1) + self.assertEqual(scale, 0.5) + + q, rad, scale = force.getParticleParameters(1) + self.assertEqual(q, -6.24150962915265e+18) # very electronegative + self.assertEqual(rad, 0.1) + self.assertEqual(scale, 0.5) + + force.setCutoffDistance(12*angstroms) + self.assertAlmostEqualUnit(force.getCutoffDistance(), 1.2*nanometers) + force.setCutoffDistance(1) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + + def testCustomHBondForce(self): + """ Tests the CustomHbondForce API features """ + force = CustomHbondForce('kd*(distance(a1,d1)-r0)^2 + ' + 'ka*(angle(a1,d1,d2)-theta0)^2') + force.addPerAcceptorParameter('r0') + force.addPerAcceptorParameter('ka') + force.addPerDonorParameter('theta0') + force.addPerDonorParameter('kd') + force.setCutoffDistance(10*angstroms) + + self.assertEqual(force.getNumPerAcceptorParameters(), 2) + self.assertEqual(force.getNumPerDonorParameters(), 2) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + self.assertIs(force.getCutoffDistance().unit, nanometer) + + force.addAcceptor(0, 1, 2, [0.2, 10.0]) + force.addAcceptor(3, -1, -1, [4*angstroms, + 20.0*kilocalories_per_mole/angstroms**2]) + force.addDonor(4, 5, 6, [math.pi, 30]) + force.addDonor(7, 8, -1, [180*degrees, + 40*kilocalories_per_mole/radians**2]) + + self.assertEqual(force.getNumAcceptors(), 2) + self.assertEqual(force.getNumDonors(), 2) + + i, j, k, (r0, ka) = force.getAcceptorParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(r0, 0.2) + self.assertEqual(ka, 10) + + i, j, k, (r0, ka) = force.getAcceptorParameters(1) + self.assertEqual(i, 3) + self.assertEqual(j, -1) + self.assertEqual(k, -1) + self.assertEqual(r0, 0.4) + self.assertEqual(ka, 20*4.184*100) + + i, j, k, (theta0, kd) = force.getDonorParameters(0) + self.assertEqual(i, 4) + self.assertEqual(j, 5) + self.assertEqual(k, 6) + self.assertEqual(theta0, math.pi) + self.assertEqual(kd, 30) + + i, j, k, (theta0, kd) = force.getDonorParameters(1) + self.assertEqual(i, 7) + self.assertEqual(j, 8) + self.assertEqual(k, -1) + self.assertEqual(theta0, math.pi) + self.assertEqual(kd, 40*4.184) + + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomHbondForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomHbondForce.CutoffNonPeriodic) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomHbondForce.CutoffPeriodic) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + + def testCustomNonbondedForce(self): + """ Tests the CustomNonbondedForce API features """ + force = CustomNonbondedForce('4*diel*q1*q2/r+sqrt(p1*p2)/r^2-sqrt(m1*m2)/r^3') + force.addGlobalParameter('diel', 1.0) + force.addPerParticleParameter('q') + force.addPerParticleParameter('p') + force.addPerParticleParameter('m') + force.addParticle([1, 2, 3]) + force.addParticle([1*coulombs, 2*kilocalories_per_mole*angstroms**2, 3*kilocalories_per_mole*angstroms**3]) + + self.assertEqual(force.getNumParticles(), 2) + charge, sigma, epsilon = force.getParticleParameters(0) + self.assertEqual(charge, 1) + self.assertEqual(sigma, 2) + self.assertEqual(epsilon, 3) + + charge, sigma, epsilon = force.getParticleParameters(1) + self.assertEqual(charge, 6.24150962915265e+18) # very electronegative + self.assertEqual(sigma, 2*4.184/100) + self.assertAlmostEqual(epsilon, 3*4.184/1000) + + force.setCutoffDistance(10*angstroms) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + force.setCutoffDistance(1) + self.assertEqual(force.getCutoffDistance(), 1*nanometers) + + force.setSwitchingDistance(8*angstroms) + self.assertEqual(force.getSwitchingDistance(), 0.8*nanometers) + self.assertIs(force.getSwitchingDistance().unit, nanometer) + + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomNonbondedForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomNonbondedForce.CutoffNonPeriodic) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(CustomNonbondedForce.CutoffPeriodic) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + + def testCustomManyParticleForce(self): + """ Tests the CustomManyParticleForce API features """ + force = CustomManyParticleForce(3, + "C*(1+3*cos(theta1)*cos(theta2)*cos(theta3))/(r12*r13*r23)^3;" + "theta1=k1*angle(p1,p2,p3); theta2=k2*angle(p2,p3,p1); theta3=k3*angle(p3,p1,p2);" + "r12=distance(p1,p2); r13=distance(p1,p3); r23=distance(p2,p3)") + force.setPermutationMode(CustomManyParticleForce.SinglePermutation) + force.setTypeFilter(0, [0]) + force.setTypeFilter(1, [1]) + force.setTypeFilter(2, [2]) + + force.addGlobalParameter('C', 1.0*kilocalories_per_mole) + force.addPerParticleParameter('k') + + self.assertEqual(force.getNumGlobalParameters(), 1) + self.assertEqual(force.getGlobalParameterName(0), 'C') + self.assertEqual(force.getGlobalParameterDefaultValue(0), 4.184) + self.assertEqual(force.getNumPerParticleParameters(), 1) + + force.addParticle([10], 0) + force.addParticle([20], 1) + force.addParticle([30*kilocalories_per_mole], 2) + + self.assertEqual(force.getNumParticles(), 3) + self.assertEqual(force.getParticleParameters(0)[0][0], 10) + self.assertEqual(force.getParticleParameters(1)[0][0], 20) + self.assertEqual(force.getParticleParameters(2)[0][0], 30*4.184) + + def testDrudeForce(self): + """ Tests the DrudeForce API features """ + force = DrudeForce() + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.addParticle(0, 1, -1, -1, -1, 1, 1, 0, 0) + force.addParticle(1, 2, 3, -1, -1, 1*elementary_charge, 1*angstrom**3, 0.5, 0) + force.addParticle(2, 3, 4, 5, 6, 1*elementary_charge, 10*angstrom**3, 0.5, 0.5) + force.addScreenedPair(0, 1, 0.5) + force.addScreenedPair(1, 2, 0.25) + force.addScreenedPair(0, 2, 0.125) + + self.assertEqual(force.getNumParticles(), 3) + self.assertEqual(force.getNumScreenedPairs(), 3) + + i, j, k, l, m, q, a, an12, an34 = force.getParticleParameters(0) + + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, -1) + self.assertEqual(l, -1) + self.assertEqual(m, -1) + self.assertEqual(q, 1*elementary_charge) + self.assertEqual(a, 1*nanometer**3) + self.assertEqual(an12, 0) + self.assertEqual(an34, 0) + + i, j, k, l, m, q, a, an12, an34 = force.getParticleParameters(1) + + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, -1) + self.assertEqual(m, -1) + self.assertEqual(q, 1*elementary_charge) + self.assertAlmostEqualUnit(a, 1*angstrom**3) + self.assertEqual(an12, 0.5) + self.assertEqual(an34, 0) + + i, j, k, l, m, q, a, an12, an34 = force.getParticleParameters(2) + + self.assertEqual(i, 2) + self.assertEqual(j, 3) + self.assertEqual(k, 4) + self.assertEqual(l, 5) + self.assertEqual(m, 6) + self.assertEqual(q, 1*elementary_charge) + self.assertAlmostEqualUnit(a, 10*angstrom**3) + self.assertEqual(an12, 0.5) + self.assertEqual(an34, 0.5) + + i, j, thole = force.getScreenedPairParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(thole, 0.5) + + i, j, thole = force.getScreenedPairParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(thole, 0.25) + + i, j, thole = force.getScreenedPairParameters(2) + self.assertEqual(i, 0) + self.assertEqual(j, 2) + self.assertEqual(thole, 0.125) + + def testAmoebaBondForce(self): + """ Tests the AmoebaBondForce API features """ + force1 = AmoebaBondForce() + force2 = AmoebaBondForce() + force1.setAmoebaGlobalBondCubic(1.5) + force2.setAmoebaGlobalBondCubic(1.5/angstrom) + force1.setAmoebaGlobalBondQuartic(1.5) + force2.setAmoebaGlobalBondQuartic(1.5/angstrom**2) + + self.assertEqual(force1.getAmoebaGlobalBondCubic(), 1.5/nanometer) + self.assertEqual(force2.getAmoebaGlobalBondCubic(), 1.5/angstrom) + self.assertEqual(force1.getAmoebaGlobalBondQuartic(), 1.5/nanometer**2) + self.assertAlmostEqualUnit(force2.getAmoebaGlobalBondQuartic(), 1.5/angstrom**2) + + force1.addBond(0, 1, 0.15, 10.0) + force1.addBond(1, 2, 1.5*angstroms, 10.0*kilocalories_per_mole/angstroms**2) + + self.assertEqual(force1.getNumBonds(), 2) + self.assertEqual(force2.getNumBonds(), 0) + + i, j, req, k = force1.getBondParameters(0) + self.assertEqual(req, 0.15*nanometers) + self.assertEqual(k, 10.0*kilojoules_per_mole/nanometers**2) + + i, j, req, k = force1.getBondParameters(1) + self.assertAlmostEqualUnit(req, 1.5*angstroms) + self.assertAlmostEqualUnit(k, 10.0*kilocalories_per_mole/angstroms**2) + + def testAmoebaAngleForce(self): + """ Tests the AmoebaAngleForce API features """ + force = AmoebaAngleForce() + force.setAmoebaGlobalAngleCubic(1.0) + force.setAmoebaGlobalAngleQuartic(2.0/radians**2) + force.setAmoebaGlobalAnglePentic(3.0/degrees**3) + force.setAmoebaGlobalAngleSextic(4.0) + + self.assertEqual(force.getAmoebaGlobalAngleCubic(), 1.0/radians) + self.assertEqual(force.getAmoebaGlobalAngleQuartic(), 2.0/radians**2) + self.assertAlmostEqualUnit(force.getAmoebaGlobalAnglePentic(), 3.0/degrees**3) + self.assertEqual(force.getAmoebaGlobalAngleSextic(), 4.0/radians**4) + + force.addAngle(0, 1, 2, math.pi*radians, 1.5*kilocalories_per_mole/radians**2) + force.addAngle(1, 2, 3, 180*degrees, 1.5*kilocalories_per_mole/radians**2) + force.addAngle(2, 3, 4, 109.4, 1.5) + + self.assertEqual(force.getNumAngles(), 3) + + i, j, k, t, tk = force.getAngleParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertAlmostEqualUnit(t, math.pi*radians) + self.assertIs(t.unit, degree) + self.assertAlmostEqualUnit(tk, 1.5*kilocalories_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + i, j, k, t, tk = force.getAngleParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertAlmostEqualUnit(t, 180*degrees) + self.assertIs(t.unit, degree) + self.assertAlmostEqualUnit(tk, 1.5*kilocalories_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + i, j, k, t, tk = force.getAngleParameters(2) + self.assertEqual(i, 2) + self.assertEqual(j, 3) + self.assertEqual(k, 4) + self.assertAlmostEqualUnit(t, 109.4*degrees) + self.assertIs(t.unit, degree) + self.assertAlmostEqualUnit(tk, 1.5*kilojoules_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + def testGeneralizedKirkwood(self): + """ Tests the AmoebaGeneralizedKirkwoodForce API features """ + force = AmoebaGeneralizedKirkwoodForce() + + self.assertEqual(force.getProbeRadius(), 0.14*nanometer) # default + force.setProbeRadius(0.16) + self.assertEqual(force.getProbeRadius(), 0.16*nanometer) + self.assertIs(force.getProbeRadius().unit, nanometer) + force.setProbeRadius(1.4*angstrom) + self.assertEqual(force.getProbeRadius(), 1.4*angstrom) + self.assertIs(force.getProbeRadius().unit, nanometer) + + self.assertEqual(force.getSoluteDielectric(), 1.0) # default + force.setSoluteDielectric(2.0) + self.assertEqual(force.getSoluteDielectric(), 2.0) + + self.assertEqual(force.getSolventDielectric(), 78.3) # default + force.setSolventDielectric(80) + self.assertEqual(force.getSolventDielectric(), 80) + + self.assertEqual(force.getSurfaceAreaFactor(), + -170.35173066268223*kilojoule_per_mole/nanometer**2) # default + force.setSurfaceAreaFactor(-1.0*kilocalorie_per_mole/angstrom**2) + self.assertAlmostEqualUnit(force.getSurfaceAreaFactor(), + -1.0*kilocalorie_per_mole/angstrom**2) # default + + force.addParticle(1.0*coulomb, 1.0*angstroms, 0.5) + force.addParticle(1.0, 1.0, 0.4) + + self.assertEqual(force.getNumParticles(), 2) + + q, r, s = force.getParticleParameters(0) + self.assertAlmostEqualUnit(q, 1.0*coulomb) + self.assertIs(q.unit, elementary_charge) + self.assertEqual(r, 1.0*angstroms) + self.assertIs(r.unit, nanometer) + self.assertEqual(s, 0.5) + + q, r, s = force.getParticleParameters(1) + self.assertAlmostEqualUnit(q, 1.0*elementary_charge) + self.assertIs(q.unit, elementary_charge) + self.assertEqual(r, 1.0*nanometer) + self.assertIs(r.unit, nanometer) + self.assertEqual(s, 0.4) + + def testAmoebaInPlaneAngleForce(self): + """ Tests the AmoebaInPlaneAngleForce API features """ + force = AmoebaInPlaneAngleForce() + + force.setAmoebaGlobalInPlaneAngleCubic(1.0) + self.assertEqual(force.getAmoebaGlobalInPlaneAngleCubic(), 1/radian) + self.assertEqual(str(force.getAmoebaGlobalInPlaneAngleCubic().unit), '/radian') + + force.setAmoebaGlobalInPlaneAngleQuartic(1.0/degrees**2) + self.assertAlmostEqualUnit(force.getAmoebaGlobalInPlaneAngleQuartic(), 1/degrees**2) + self.assertEqual(str(force.getAmoebaGlobalInPlaneAngleQuartic().unit), '/(radian**2)') + + force.setAmoebaGlobalInPlaneAnglePentic(1.0/radians**3) + self.assertEqual(force.getAmoebaGlobalInPlaneAnglePentic(), 1/radian**3) + self.assertEqual(str(force.getAmoebaGlobalInPlaneAnglePentic().unit), '/(radian**3)') + + force.setAmoebaGlobalInPlaneAngleSextic(1.0/radians**4) + self.assertEqual(force.getAmoebaGlobalInPlaneAngleSextic(), 1/radian**4) + self.assertEqual(str(force.getAmoebaGlobalInPlaneAngleSextic().unit), '/(radian**4)') + + force.addAngle(0, 1, 2, 3, math.pi, 1.0) + force.addAngle(1, 2, 3, 4, 180*degrees, 1.0*kilocalories_per_mole/radians**2) + + self.assertEqual(force.getNumAngles(), 2) + + i, j, k, l, t, tk = force.getAngleParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(t, math.pi*radians) + self.assertIs(t.unit, radians) + self.assertEqual(tk, 1.0*kilojoules_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + i, j, k, l, t, tk = force.getAngleParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertEqual(t, 180*degrees) + self.assertIs(t.unit, radians) + self.assertEqual(tk, 1.0*kilocalorie_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + def testAmoebaOutOfPlaneBendForce(self): + """ Tests the AmoebaOutOfPlaneBendForce API features """ + force = AmoebaOutOfPlaneBendForce() + + force.setAmoebaGlobalOutOfPlaneBendCubic(1.0) + self.assertEqual(force.getAmoebaGlobalOutOfPlaneBendCubic(), 1/radian) + self.assertEqual(str(force.getAmoebaGlobalOutOfPlaneBendCubic().unit), '/radian') + + force.setAmoebaGlobalOutOfPlaneBendQuartic(1.0/degrees**2) + self.assertAlmostEqualUnit(force.getAmoebaGlobalOutOfPlaneBendQuartic(), 1/degrees**2) + self.assertEqual(str(force.getAmoebaGlobalOutOfPlaneBendQuartic().unit), '/(radian**2)') + + force.setAmoebaGlobalOutOfPlaneBendPentic(1.0/radians**3) + self.assertEqual(force.getAmoebaGlobalOutOfPlaneBendPentic(), 1/radian**3) + self.assertEqual(str(force.getAmoebaGlobalOutOfPlaneBendPentic().unit), '/(radian**3)') + + force.setAmoebaGlobalOutOfPlaneBendSextic(1.0/radians**4) + self.assertEqual(force.getAmoebaGlobalOutOfPlaneBendSextic(), 1/radian**4) + self.assertEqual(str(force.getAmoebaGlobalOutOfPlaneBendSextic().unit), '/(radian**4)') + + force.addOutOfPlaneBend(0, 1, 2, 3, 1.0) + force.addOutOfPlaneBend(1, 2, 3, 4, 1.0*kilocalories_per_mole/radians**2) + + self.assertEqual(force.getNumOutOfPlaneBends(), 2) + + i, j, k, l, tk = force.getOutOfPlaneBendParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(tk, 1.0*kilojoules_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + i, j, k, l, tk = force.getOutOfPlaneBendParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertEqual(tk, 1.0*kilocalorie_per_mole/radians**2) + self.assertIs(tk.unit, kilojoules_per_mole/radians**2) + + def testAmoebaPiTorsionForce(self): + """ Tests the AmoebaPiTorsionForce API features """ + force = AmoebaPiTorsionForce() + + force.addPiTorsion(0, 1, 2, 3, 4, 5, 1.0) + force.addPiTorsion(1, 2, 3, 4, 5, 6, 1.0*kilocalories_per_mole) + + self.assertEqual(force.getNumPiTorsions(), 2) + + i, j, k, l, m, n, tk = force.getPiTorsionParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(m, 4) + self.assertEqual(n, 5) + self.assertEqual(tk, 1.0*kilojoules_per_mole) + self.assertIs(tk.unit, kilojoule_per_mole) + + i, j, k, l, m, n, tk = force.getPiTorsionParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertEqual(m, 5) + self.assertEqual(n, 6) + self.assertEqual(tk, 1.0*kilocalories_per_mole) + self.assertIs(tk.unit, kilojoule_per_mole) + + def testAmoebaStretchBendForce(self): + """ Tests the AmoebaStretchBendForce API features """ + force = AmoebaStretchBendForce() + + force.addStretchBend(0, 1, 2, 0.10, 0.12, math.pi/2, 10.0, 12.0) + force.addStretchBend(1, 2, 3, 1.0*angstroms, 1.2*angstroms, 60*degrees, + 10.0*kilocalories_per_mole/angstroms/radians, + 12.0*kilocalories_per_mole/angstroms/radians) + + self.assertEqual(force.getNumStretchBends(), 2) + + i, j, k, r1, r2, t, k1, k2 = force.getStretchBendParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(r1, 0.1*nanometers) + self.assertIs(r1.unit, nanometers) + self.assertEqual(r2, 0.12*nanometers) + self.assertIs(r2.unit, nanometers) + self.assertEqual(t, math.pi/2*radians) + self.assertIs(t.unit, radians) + self.assertEqual(k1, 10*kilojoules_per_mole/nanometers/radians) + self.assertIs(k1.unit, kilojoules_per_mole/nanometers/radians) + self.assertEqual(k2, 12*kilojoules_per_mole/nanometers/radians) + self.assertIs(k2.unit, kilojoules_per_mole/nanometers/radians) + + i, j, k, r1, r2, t, k1, k2 = force.getStretchBendParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(r1, 1.0*angstroms) + self.assertIs(r1.unit, nanometers) + self.assertEqual(r2, 1.2*angstroms) + self.assertIs(r2.unit, nanometers) + self.assertAlmostEqualUnit(t, 60*degrees) + self.assertIs(t.unit, radians) + self.assertEqual(k1, 10*kilocalories_per_mole/angstroms/radians) + self.assertIs(k1.unit, kilojoules_per_mole/nanometers/radians) + self.assertEqual(k2, 12*kilocalories_per_mole/angstroms/radians) + self.assertIs(k2.unit, kilojoules_per_mole/nanometers/radians) + + def testAmoebaTorsionTorsionForce(self): + """ Tests the AmoebaTorsionTorsionForce API features """ + force = AmoebaTorsionTorsionForce() + + grid1 = [[[i, j, random.random(), random.random(), random.random(), random.random()] + for j in range(-180, 180, 24)] for i in range(-180, 180, 24)] + kcal = kilocalories_per_mole + grid2 = [[[i*math.pi/180*radians, j*math.pi/180*radians, random.random()*kcal, + random.random()*kcal/radians, random.random()*kcal/radians, + random.random()*kcal/radians**2] + for j in range(-180, 0, 10)] for i in range(-180, 0, 10)] + grid3 = [[[i, j, random.random()*kcal] + for j in range(-180, 180, 24)] for i in range(-180, 180, 24)] + force.setTorsionTorsionGrid(0, grid1) + force.setTorsionTorsionGrid(1, grid2) + force.setTorsionTorsionGrid(2, grid3) + + self.assertEqual(force.getNumTorsionTorsionGrids(), 3) + + # Check the grids + g1 = force.getTorsionTorsionGrid(0) + for row1, row2 in zip(g1, grid1): + for column1, column2 in zip(row1, row2): + self.assertEqual(len(column1), len(column2)) + for x1, x2 in zip(column1, column2): + self.assertEqual(x1, x2) + g2 = force.getTorsionTorsionGrid(1) + for row1, row2 in zip(g2, grid2): + for column1, column2 in zip(row1, row2): + self.assertEqual(column1[0], column2[0].value_in_unit(degree)) + self.assertEqual(column1[1], column2[1].value_in_unit(degree)) + self.assertEqual(column1[2], column2[2].value_in_unit(kilojoules_per_mole)) + self.assertEqual(column1[3], column2[3].value_in_unit(kilojoules_per_mole/radian)) + self.assertEqual(column1[4], column2[4].value_in_unit(kilojoules_per_mole/radian)) + self.assertEqual(column1[5], column2[5].value_in_unit(kilojoules_per_mole/radian**2)) + g3 = force.getTorsionTorsionGrid(2) + for row1, row2 in zip(g3, grid3): + for column1, column2 in zip(row1, row2): + self.assertEqual(len(column1), 6) + self.assertEqual(len(column2), 3) + self.assertEqual(column1[0], column2[0]) + self.assertEqual(column1[1], column2[1]) + self.assertEqual(column1[2], column2[2].value_in_unit(kilojoules_per_mole)) + + force.addTorsionTorsion(0, 1, 2, 3, 4, 5, 0) + force.addTorsionTorsion(1, 2, 3, 4, 5, 6, 1) + force.addTorsionTorsion(2, 3, 4, 5, 6, 7, 2) + + self.assertEqual(force.getNumTorsionTorsions(), 3) + + i, j, k, l, m, ch, g = force.getTorsionTorsionParameters(0) + self.assertEqual(i, 0) + self.assertEqual(j, 1) + self.assertEqual(k, 2) + self.assertEqual(l, 3) + self.assertEqual(m, 4) + self.assertEqual(ch, 5) + self.assertEqual(g, 0) + + i, j, k, l, m, ch, g = force.getTorsionTorsionParameters(1) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(l, 4) + self.assertEqual(m, 5) + self.assertEqual(ch, 6) + self.assertEqual(g, 1) + + def testAmoebaVdwForce(self): + """ Tests the AmoebaVdwForce API features """ + force = AmoebaVdwForce() + + self.assertEqual(force.getSigmaCombiningRule(), 'CUBIC-MEAN') + force.setSigmaCombiningRule('ARITHMETIC') + self.assertEqual(force.getSigmaCombiningRule(), 'ARITHMETIC') + force.setSigmaCombiningRule('GEOMETRIC') + self.assertEqual(force.getSigmaCombiningRule(), 'GEOMETRIC') + + self.assertEqual(force.getEpsilonCombiningRule(), 'HHG') + force.setEpsilonCombiningRule('HARMONIC') + self.assertEqual(force.getEpsilonCombiningRule(), 'HARMONIC') + force.setEpsilonCombiningRule('GEOMETRIC') + self.assertEqual(force.getEpsilonCombiningRule(), 'GEOMETRIC') + force.setEpsilonCombiningRule('ARITHMETIC') + self.assertEqual(force.getEpsilonCombiningRule(), 'ARITHMETIC') + + self.assertTrue(force.getUseDispersionCorrection()) + force.setUseDispersionCorrection(False) + self.assertFalse(force.getUseDispersionCorrection()) + + self.assertIs(force.getNonbondedMethod(), AmoebaVdwForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(AmoebaVdwForce.CutoffPeriodic) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + self.assertIs(force.getNonbondedMethod(), AmoebaVdwForce.CutoffPeriodic) + + force.setCutoff(10.0*angstroms) + self.assertEqual(force.getCutoff(), 10.0*angstroms) + self.assertIs(force.getCutoff().unit, nanometers) + + force.addParticle(0, 0.1, 1.0, 1.0) + force.addParticle(1, 1.0*angstroms, 1.0*kilocalories_per_mole, 0.5) + force.addParticle(1, 0.8*angstroms, 2.0*kilocalories_per_mole, 0.25) + + self.assertEqual(force.getNumParticles(), 3) + + p, sig, eps, scale = force.getParticleParameters(0) + self.assertEqual(p, 0) + self.assertEqual(sig, 0.1*nanometers) + self.assertIs(sig.unit, nanometers) + self.assertEqual(eps, 1.0*kilojoules_per_mole) + self.assertIs(eps.unit, kilojoules_per_mole) + self.assertEqual(scale, 1.0) + + p, sig, eps, scale = force.getParticleParameters(1) + self.assertEqual(p, 1) + self.assertEqual(sig, 1.0*angstroms) + self.assertIs(sig.unit, nanometers) + self.assertEqual(eps, 1.0*kilocalories_per_mole) + self.assertIs(eps.unit, kilojoules_per_mole) + self.assertEqual(scale, 0.5) + + p, sig, eps, scale = force.getParticleParameters(2) + self.assertEqual(p, 1) + self.assertAlmostEqualUnit(sig, 0.8*angstroms) + self.assertIs(sig.unit, nanometers) + self.assertEqual(eps, 2.0*kilocalories_per_mole) + self.assertIs(eps.unit, kilojoules_per_mole) + self.assertEqual(scale, 0.25) + + def testAmoebaWcaDispersionForce(self): + """ Tests the AmoebaWcaDispersionForce API features """ + force = AmoebaWcaDispersionForce() + + self.assertEqual(force.getDispoff(), 0.26*nanometer) + self.assertEqual(force.getAwater(), 0.033428*nanometer**-3) + self.assertEqual(force.getEpsh(), 0.0135*kilojoule_per_mole) + self.assertEqual(force.getEpso(), 0.11*kilojoule_per_mole) + self.assertEqual(force.getRminh(), 1.3275*nanometer) + self.assertEqual(force.getRmino(), 1.7025*nanometer) + self.assertEqual(force.getShctd(), 0.81) + self.assertEqual(force.getSlevy(), 1.0) + + force.setDispoff(3*angstroms) + self.assertAlmostEqualUnit(force.getDispoff(), 3*angstroms) + self.assertIs(force.getDispoff().unit, nanometer) + + force.setAwater(3*angstroms**-3) + self.assertAlmostEqualUnit(force.getAwater(), 3*angstroms**-3) + self.assertEqual(1*force.getAwater().unit, 1*nanometer**-3) + + force.setEpsh(1*kilocalorie_per_mole) + self.assertEqual(force.getEpsh(), 1*kilocalorie_per_mole) + self.assertIs(force.getEpsh().unit, kilojoule_per_mole) + + force.setEpso(1*kilocalorie_per_mole) + self.assertEqual(force.getEpso(), 1*kilocalorie_per_mole) + self.assertIs(force.getEpso().unit, kilojoule_per_mole) + + force.setRminh(20*angstroms) + self.assertEqual(force.getRminh(), 20*angstroms) + self.assertIs(force.getRminh().unit, nanometer) + + force.setRmino(30*angstroms) + self.assertEqual(force.getRmino(), 30*angstroms) + self.assertIs(force.getRmino().unit, nanometer) + + force.setShctd(1) + self.assertEqual(force.getShctd(), 1) + + force.setSlevy(2) + self.assertEqual(force.getSlevy(), 2) + + force.addParticle(0.5, 1) + force.addParticle(3*angstroms, 1*kilocalorie_per_mole) + + self.assertEqual(force.getNumParticles(), 2) + + sig, eps = force.getParticleParameters(0) + self.assertEqual(sig, 0.5*nanometer) + self.assertIs(sig.unit, nanometer) + self.assertEqual(eps, 1*kilojoule_per_mole) + self.assertIs(eps.unit, kilojoule_per_mole) + + sig, eps = force.getParticleParameters(1) + self.assertAlmostEqualUnit(sig, 3*angstrom) + self.assertIs(sig.unit, nanometer) + self.assertEqual(eps, 1*kilocalorie_per_mole) + self.assertIs(eps.unit, kilojoule_per_mole) + + def testAmoebaMultipoleForce(self): + """ Tests the AmoebaMultipoleForce API features """ + force = AmoebaMultipoleForce() + self.assertIs(force.getNonbondedMethod(), AmoebaMultipoleForce.NoCutoff) + self.assertFalse(force.usesPeriodicBoundaryConditions()) + force.setNonbondedMethod(AmoebaMultipoleForce.PME) + self.assertIs(force.getNonbondedMethod(), AmoebaMultipoleForce.PME) + self.assertTrue(force.usesPeriodicBoundaryConditions()) + + self.assertEqual(force.getCutoffDistance(), 1*nanometer) + self.assertIs(force.getCutoffDistance().unit, nanometer) + force.setCutoffDistance(8*angstroms) + self.assertEqual(force.getCutoffDistance(), 8*angstrom) + self.assertIs(force.getCutoffDistance().unit, nanometer) + + self.assertEqual(force.getPolarizationType(), AmoebaMultipoleForce.Mutual) + force.setPolarizationType(AmoebaMultipoleForce.Direct) + self.assertEqual(force.getPolarizationType(), AmoebaMultipoleForce.Direct) + force.setPolarizationType(AmoebaMultipoleForce.Mutual) + self.assertEqual(force.getPolarizationType(), AmoebaMultipoleForce.Mutual) + + force.addMultipole(1.0, [0.5, 0, -0.5], list(range(9)), + AmoebaMultipoleForce.ZThenX, 1, 2, 3, 0.5, 0.5, 1.0) + force.addMultipole(1.0*elementary_charge, [0.5, 0, -0.5]*elementary_charge*angstrom, + list(range(9))*elementary_charge*angstrom**2, + AmoebaMultipoleForce.Bisector, 2, 3, 4, 0.5, 0.5, 1.0*angstrom**3) + + self.assertEqual(force.getNumMultipoles(), 2) + + q, mu, quad, ax, i, j, k, thole, damp, polarity = force.getMultipoleParameters(0) + + self.assertEqual(q, 1.0*elementary_charge) + self.assertEqual(mu, (0.5, 0, -0.5)*elementary_charge*nanometer) + self.assertEqual(quad, tuple(range(9))*elementary_charge*nanometer**2) + self.assertEqual(ax, AmoebaMultipoleForce.ZThenX) + self.assertEqual(i, 1) + self.assertEqual(j, 2) + self.assertEqual(k, 3) + self.assertEqual(thole, 0.5) + self.assertEqual(damp, 0.5) + self.assertEqual(polarity, 1*nanometer**3) + + q, mu, quad, ax, i, j, k, thole, damp, polarity = force.getMultipoleParameters(1) + + self.assertEqual(q, 1.0*elementary_charge) + self.assertEqual(mu, (0.5, 0, -0.5)*elementary_charge*angstrom) + self.assertAlmostEqualUnitArray(quad, tuple(range(9))*elementary_charge*angstrom**2) + self.assertEqual(ax, AmoebaMultipoleForce.Bisector) + self.assertEqual(i, 2) + self.assertEqual(j, 3) + self.assertEqual(k, 4) + self.assertEqual(thole, 0.5) + self.assertEqual(damp, 0.5) + self.assertAlmostEqualUnit(polarity, 1*angstrom**3) + + def testVerletIntegrator(self): + """ Tests the VerletIntegrator API features """ + integrator = VerletIntegrator(1.0) + self.assertEqual(integrator.getStepSize(), 1.0*picosecond) + self.assertEqual(integrator.getConstraintTolerance(), 1e-5) + integrator.setConstraintTolerance(1e-6) + self.assertEqual(integrator.getConstraintTolerance(), 1e-6) + + integrator = VerletIntegrator(1.0*femtoseconds) + self.assertEqual(integrator.getStepSize(), 1.0*femtoseconds) + + def testVariableVerletIntegrator(self): + """ Tests the VariableVerletIntegrator API features """ + integrator = VariableVerletIntegrator(0.1) + self.assertEqual(integrator.getErrorTolerance(), 0.1) + integrator.setErrorTolerance(0.01) + self.assertEqual(integrator.getErrorTolerance(), 0.01) + self.assertEqual(integrator.getConstraintTolerance(), 1e-5) + integrator.setConstraintTolerance(1e-6) + self.assertEqual(integrator.getConstraintTolerance(), 1e-6) + + def testLangevinIntegrator(self): + """ Tests the LangevinIntegrator API features """ + integrator = LangevinIntegrator(300, 0.1, 1) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertEqual(integrator.getFriction(), 0.1/picosecond) + self.assertEqual(integrator.getStepSize(), 1*picosecond) + + integrator = LangevinIntegrator(300*kelvin, 0.1/microsecond, 1*femtosecond) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertAlmostEqualUnit(integrator.getFriction(), 0.1/microsecond) + self.assertEqual(integrator.getStepSize(), 1*femtosecond) + + def testVariableLangevinIntegrator(self): + """ Tests the VariableLangevinIntegrator API features """ + integrator = VariableLangevinIntegrator(300, 0.1, 0.1) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertEqual(integrator.getFriction(), 0.1/picosecond) + self.assertEqual(integrator.getErrorTolerance(), 0.1) + + integrator = VariableLangevinIntegrator(300*kelvin, 0.1/microsecond, 0.01) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertAlmostEqualUnit(integrator.getFriction(), 0.1/microsecond) + self.assertEqual(integrator.getErrorTolerance(), 0.01) + + def testBrownianIntegrator(self): + """ Tests the BrownianIntegrator API features """ + integrator = BrownianIntegrator(300, 0.1, 1) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertEqual(integrator.getFriction(), 0.1/picosecond) + self.assertEqual(integrator.getStepSize(), 1*picosecond) + + integrator = BrownianIntegrator(300*kelvin, 0.1/microsecond, 1*femtosecond) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + self.assertAlmostEqualUnit(integrator.getFriction(), 0.1/microsecond) + self.assertEqual(integrator.getStepSize(), 1*femtosecond) + + def testAndersenThermostat(self): + """ Tests the AndersenThermostat API features """ + force = AndersenThermostat(300*kelvin, 1/microsecond) + self.assertEqual(force.getDefaultTemperature(), 300*kelvin) + self.assertAlmostEqualUnit(force.getDefaultCollisionFrequency(), 1/microsecond) + + force.setDefaultTemperature(298.15) + force.setDefaultCollisionFrequency(1) + self.assertEqual(force.getDefaultTemperature(), 298.15*kelvin) + self.assertAlmostEqualUnit(force.getDefaultCollisionFrequency(), 1/picosecond) + + def testDrudeSCFIntegrator(self): + """ Tests the DrudeSCFIntegrator API features """ + integrator = DrudeSCFIntegrator(0.002) + self.assertEqual(integrator.getStepSize(), 0.002*picoseconds) + self.assertAlmostEqualUnit(integrator.getMinimizationErrorTolerance(), + 0.1*kilojoule_per_mole/nanometer) + integrator.setMinimizationErrorTolerance(1*kilocalorie_per_mole/angstrom) + self.assertAlmostEqualUnit(integrator.getMinimizationErrorTolerance(), + 1*kilocalorie_per_mole/angstrom) + + def testDrudeLangevinIntegrator(self): + """ Tests the DrudeLangevinIntegrator API features """ + integrator = DrudeLangevinIntegrator(300*kelvin, 1.0/microsecond, + 100*kelvin, 1/picosecond, 0.1*femtosecond) + self.assertEqual(integrator.getTemperature(), 300*kelvin) + integrator.setTemperature(298.15) + self.assertEqual(integrator.getTemperature(), 298.15*kelvin) + self.assertAlmostEqualUnit(integrator.getFriction(), 1/microsecond) + integrator.setFriction(1) + self.assertEqual(integrator.getFriction(), 1/picosecond) + self.assertEqual(integrator.getDrudeTemperature(), 100*kelvin) + integrator.setDrudeTemperature(50) + self.assertEqual(integrator.getDrudeTemperature(), 50*kelvin) + self.assertEqual(integrator.getStepSize(), 0.1*femtosecond) + integrator.setStepSize(0.0005) + self.assertEqual(integrator.getStepSize(), 0.0005*picosecond) + self.assertEqual(integrator.getMaxDrudeDistance(), 0*nanometer) + integrator.setMaxDrudeDistance(0.05) + self.assertEqual(integrator.getMaxDrudeDistance(), 0.05*nanometer) + + def testCustomIntegrator(self): + """ Tests the CustomIntegrator API features """ + integrator = CustomIntegrator(1.0) + self.assertEqual(integrator.getStepSize(), 1.0*picosecond) + self.assertEqual(integrator.getConstraintTolerance(), 1e-5) + integrator.setConstraintTolerance(1e-6) + self.assertEqual(integrator.getConstraintTolerance(), 1e-6) + + integrator = CustomIntegrator(1.0*femtoseconds) + self.assertEqual(integrator.getStepSize(), 1.0*femtoseconds) + +if __name__ == '__main__': + unittest.main() diff --git a/wrappers/python/tests/TestAmberInpcrdFile.py b/wrappers/python/tests/TestAmberInpcrdFile.py index 06b04632a7bcae4bba06dd1cabedd7d233de633f..83c6f2b2ae658da755eb997120cf8eedb1c92b0f 100644 --- a/wrappers/python/tests/TestAmberInpcrdFile.py +++ b/wrappers/python/tests/TestAmberInpcrdFile.py @@ -4,14 +4,21 @@ from simtk.openmm.app import * from simtk.openmm import * from simtk.unit import * import simtk.openmm.app.element as elem +try: + from scipy.io import netcdf + SCIPY_IMPORT_FAILED = False +except: + SCIPY_IMPORT_FAILED = True + def compareByElement(array1, array2, cmp): for x, y in zip(array1, array2): cmp(x, y) + class TestAmberInpcrdFile(unittest.TestCase): """Test the Amber inpcrd file parser""" - + def test_CrdVelBox(self): """ Test parsing ASCII restarts with crds, vels, and box """ cmp = self.assertAlmostEqual @@ -24,24 +31,21 @@ class TestAmberInpcrdFile(unittest.TestCase): compareByElement(inpcrd.boxVectors[0].value_in_unit(angstroms), [30.2642725, 0.0, 0.0], cmp) + @unittest.skipIf(SCIPY_IMPORT_FAILED, "Scipy is not installed") def test_NetCDF(self): """ Test NetCDF restart file parsing """ cmp = self.assertAlmostEqual - try: - from scipy.io import netcdf - except ImportError: - print('Not testing NetCDF file parser... scipy cannot be found') - else: - inpcrd = AmberInpcrdFile('systems/amber.ncrst') - self.assertEqual(len(inpcrd.positions), 2101) - compareByElement(inpcrd.positions[0].value_in_unit(angstroms), - [6.82122492718229, 6.6276250662042, -8.51668999892245], - cmp) - compareByElement(inpcrd.velocities[-1].value_in_unit(angstroms/picosecond), - [0.349702202733541*20.455, 0.391525333168534*20.455, - 0.417941679767662*20.455], cmp) - self.assertAlmostEqual(inpcrd.boxVectors[0][0].value_in_unit(angstroms), - 30.2642725, places=6) + + inpcrd = AmberInpcrdFile('systems/amber.ncrst') + self.assertEqual(len(inpcrd.positions), 2101) + compareByElement(inpcrd.positions[0].value_in_unit(angstroms), + [6.82122492718229, 6.6276250662042, -8.51668999892245], + cmp) + compareByElement(inpcrd.velocities[-1].value_in_unit(angstroms/picosecond), + [0.349702202733541*20.455, 0.391525333168534*20.455, + 0.417941679767662*20.455], cmp) + self.assertAlmostEqual(inpcrd.boxVectors[0][0].value_in_unit(angstroms), + 30.2642725, places=6) def test_CrdBox(self): """ Test parsing ASCII restarts with only crds and box """ diff --git a/wrappers/python/tests/TestAmberPrmtopFile.py b/wrappers/python/tests/TestAmberPrmtopFile.py index 5f84a205999bd71bafc22d99a56ca3a348c24276..9947a10314a096494dcc1bb6e34f74fca4d58ac4 100644 --- a/wrappers/python/tests/TestAmberPrmtopFile.py +++ b/wrappers/python/tests/TestAmberPrmtopFile.py @@ -23,23 +23,23 @@ class TestAmberPrmtopFile(unittest.TestCase): def test_NonbondedMethod(self): """Test all five options for the nonbondedMethod parameter.""" - methodMap = {NoCutoff:NonbondedForce.NoCutoff, - CutoffNonPeriodic:NonbondedForce.CutoffNonPeriodic, - CutoffPeriodic:NonbondedForce.CutoffPeriodic, + methodMap = {NoCutoff:NonbondedForce.NoCutoff, + CutoffNonPeriodic:NonbondedForce.CutoffNonPeriodic, + CutoffPeriodic:NonbondedForce.CutoffPeriodic, Ewald:NonbondedForce.Ewald, PME: NonbondedForce.PME} for method in methodMap: system = prmtop1.createSystem(nonbondedMethod=method) forces = system.getForces() - self.assertTrue(any(isinstance(f, NonbondedForce) and - f.getNonbondedMethod()==methodMap[method] + self.assertTrue(any(isinstance(f, NonbondedForce) and + f.getNonbondedMethod()==methodMap[method] for f in forces)) def test_Cutoff(self): """Test to make sure the nonbondedCutoff parameter is passed correctly.""" for method in [CutoffNonPeriodic, CutoffPeriodic, Ewald, PME]: - system = prmtop1.createSystem(nonbondedMethod=method, - nonbondedCutoff=2*nanometer, + system = prmtop1.createSystem(nonbondedMethod=method, + nonbondedCutoff=2*nanometer, constraints=HBonds) cutoff_distance = 0.0*nanometer cutoff_check = 2.0*nanometer @@ -52,8 +52,8 @@ class TestAmberPrmtopFile(unittest.TestCase): """Test to make sure the ewaldErrorTolerance parameter is passed correctly.""" for method in [Ewald, PME]: - system = prmtop1.createSystem(nonbondedMethod=method, - ewaldErrorTolerance=1e-6, + system = prmtop1.createSystem(nonbondedMethod=method, + ewaldErrorTolerance=1e-6, constraints=HBonds) tolerance = 0 tolerance_check = 1e-6 @@ -76,13 +76,13 @@ class TestAmberPrmtopFile(unittest.TestCase): topology = prmtop1.topology for constraints_value in [None, HBonds, AllBonds, HAngles]: for rigidWater_value in [True, False]: - system = prmtop1.createSystem(constraints=constraints_value, + system = prmtop1.createSystem(constraints=constraints_value, rigidWater=rigidWater_value) - validateConstraints(self, topology, system, + validateConstraints(self, topology, system, constraints_value, rigidWater_value) def test_ImplicitSolvent(self): - """Test the four types of implicit solvents using the implicitSolvent + """Test the four types of implicit solvents using the implicitSolvent parameter. """ @@ -93,7 +93,7 @@ class TestAmberPrmtopFile(unittest.TestCase): force_type = CustomGBForce else: force_type = GBSAOBCForce - + self.assertTrue(any(isinstance(f, force_type) for f in forces)) def test_ImplicitSolventParameters(self): @@ -102,7 +102,7 @@ class TestAmberPrmtopFile(unittest.TestCase): CutoffNonPeriodic:NonbondedForce.CutoffNonPeriodic} for implicitSolvent_value in [HCT, OBC1, OBC2, GBn]: for method in methodMap: - system = prmtop2.createSystem(implicitSolvent=implicitSolvent_value, + system = prmtop2.createSystem(implicitSolvent=implicitSolvent_value, solventDielectric=50.0, soluteDielectric=0.9, nonbondedMethod=method) if implicitSolvent_value in set([HCT, OBC1, GBn]): for force in system.getForces(): @@ -122,12 +122,12 @@ class TestAmberPrmtopFile(unittest.TestCase): if isinstance(force, NonbondedForce): self.assertEqual(force.getReactionFieldDielectric(), 1.0) self.assertEqual(force.getNonbondedMethod(), methodMap[method]) - self.assertTrue(found_matching_solvent_dielectric and + self.assertTrue(found_matching_solvent_dielectric and found_matching_solute_dielectric) def test_HydrogenMass(self): """Test that altering the mass of hydrogens works correctly.""" - + topology = prmtop1.topology hydrogenMass = 4*amu system1 = prmtop1.createSystem() @@ -279,7 +279,7 @@ class TestAmberPrmtopFile(unittest.TestCase): def test_ImplicitSolventForces(self): """Compute forces for different implicit solvent types, and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed.""" - + solventType = [HCT, OBC1, OBC2, GBn, GBn2] nonbondedMethod = [NoCutoff, CutoffNonPeriodic, CutoffNonPeriodic, NoCutoff, NoCutoff] salt = [0.0, 0.0, 0.5, 0.5, 0.0]*(moles/liter) @@ -288,7 +288,7 @@ class TestAmberPrmtopFile(unittest.TestCase): for i in range(5): system = prmtop2.createSystem(implicitSolvent=solventType[i], nonbondedMethod=nonbondedMethod[i], implicitSolventSaltConc=salt[i]) integrator = VerletIntegrator(0.001) - context = Context(system, integrator, Platform.getPlatformByName("CPU")) + context = Context(system, integrator, Platform.getPlatformByName("Reference")) context.setPositions(pdb.positions) state1 = context.getState(getForces=True) state2 = XmlSerializer.deserialize(open('systems/alanine-dipeptide-implicit-forces/'+file[i]+'.xml').read()) @@ -307,7 +307,7 @@ class TestAmberPrmtopFile(unittest.TestCase): system.addForce(MonteCarloBarostat(1.0 * atmospheres, temperature, 1)) integrator = LangevinIntegrator(temperature, 1.0 / picosecond, 0.0001 * picoseconds) - + simulation = Simulation(prmtop.topology, system, integrator) simulation.context.setPositions(inpcrd.positions) simulation.context.setPeriodicBoxVectors(*inpcrd.boxVectors) @@ -315,6 +315,7 @@ class TestAmberPrmtopFile(unittest.TestCase): fname = tempfile.mktemp(suffix='.dcd') simulation.reporters.append(DCDReporter(fname, 1)) # This is an explicit test for the bugs in issue #850 simulation.step(5) + del simulation os.remove(fname) def testChamber(self): diff --git a/wrappers/python/tests/TestCharmmFiles.py b/wrappers/python/tests/TestCharmmFiles.py index 7cc18c5785a3e311d98a51b856872b7ea678069f..ba275f457ea58cd9ec8348a40b7fca53b1097252 100644 --- a/wrappers/python/tests/TestCharmmFiles.py +++ b/wrappers/python/tests/TestCharmmFiles.py @@ -4,11 +4,12 @@ from simtk.openmm.app import * from simtk.openmm import * from simtk.unit import * import simtk.openmm.app.element as elem +import warnings class TestCharmmFiles(unittest.TestCase): """Test the GromacsTopFile.createSystem() method.""" - + def setUp(self): """Set up the tests by loading the input files.""" @@ -23,14 +24,14 @@ class TestCharmmFiles(unittest.TestCase): def test_NonbondedMethod(self): """Test both non-periodic methods for the systems""" - methodMap = {NoCutoff:NonbondedForce.NoCutoff, + methodMap = {NoCutoff:NonbondedForce.NoCutoff, CutoffNonPeriodic:NonbondedForce.CutoffNonPeriodic} for top in (self.psf_c, self.psf_x, self.psf_v): for method in methodMap: system = top.createSystem(self.params, nonbondedMethod=method) forces = system.getForces() - self.assertTrue(any(isinstance(f, NonbondedForce) and - f.getNonbondedMethod()==methodMap[method] + self.assertTrue(any(isinstance(f, NonbondedForce) and + f.getNonbondedMethod()==methodMap[method] for f in forces)) def test_Cutoff(self): @@ -39,7 +40,7 @@ class TestCharmmFiles(unittest.TestCase): for top in (self.psf_c, self.psf_x, self.psf_v): for method in [CutoffNonPeriodic]: system = top.createSystem(self.params, nonbondedMethod=method, - nonbondedCutoff=2*nanometer, + nonbondedCutoff=2*nanometer, constraints=HBonds) cutoff_distance = 0.0*nanometer cutoff_check = 2.0*nanometer @@ -67,7 +68,7 @@ class TestCharmmFiles(unittest.TestCase): """ system = self.psf_x.createSystem(self.params, implicitSolvent=GBn, - solventDielectric=50.0, + solventDielectric=50.0, soluteDielectric = 0.9) for force in system.getForces(): if isinstance(force, NonbondedForce): @@ -75,7 +76,7 @@ class TestCharmmFiles(unittest.TestCase): def test_HydrogenMass(self): """Test that altering the mass of hydrogens works correctly.""" - + topology = self.psf_v.topology hydrogenMass = 4*amu system1 = self.psf_v.createSystem(self.params) @@ -90,7 +91,6 @@ class TestCharmmFiles(unittest.TestCase): def test_NBFIX(self): """Tests CHARMM systems with NBFIX Lennard-Jones modifications""" - import warnings warnings.filterwarnings('ignore', category=CharmmPSFWarning) psf = CharmmPsfFile('systems/ala3_solv.psf') crd = CharmmCrdFile('systems/ala3_solv.crd') @@ -122,6 +122,34 @@ class TestCharmmFiles(unittest.TestCase): self.assertEqual(len(list(psf.topology.residues())), 20169) self.assertEqual(len(list(psf.topology.bonds())), 46634) + def testSystemOptions(self): + """ Test various options in CharmmPsfFile.createSystem """ + warnings.filterwarnings('ignore', category=CharmmPSFWarning) + psf = CharmmPsfFile('systems/ala3_solv.psf') + crd = CharmmCrdFile('systems/ala3_solv.crd') + params = CharmmParameterSet('systems/par_all36_prot.prm', + 'systems/toppar_water_ions.str') + # Box dimensions (found from bounding box) + psf.setBox(32.7119500*angstroms, 32.9959600*angstroms, 33.0071500*angstroms) + + # Check some illegal options + self.assertRaises(ValueError, lambda: + psf.createSystem(params, nonbondedMethod=5)) + self.assertRaises(TypeError, lambda: + psf.createSystem(params, nonbondedMethod=PME, + nonbondedCutoff=1*radian) + ) + self.assertRaises(TypeError, lambda: + psf.createSystem(params, nonbondedMethod=PME, + switchDistance=1*radian) + ) + + # Check what should be some legal options + psf.createSystem(params, nonbondedMethod=PME, switchDistance=0.8, + nonbondedCutoff=1.2) + psf.createSystem(params, nonbondedMethod=PME, switchDistance=0.8, + nonbondedCutoff=1.2*nanometer) + def test_ImplicitSolventForces(self): """Compute forces for different implicit solvent types, and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed.""" solventType = [HCT, OBC1, OBC2, GBn, GBn2] @@ -131,7 +159,7 @@ class TestCharmmFiles(unittest.TestCase): for i in range(5): system = self.psf_c.createSystem(self.params, implicitSolvent=solventType[i], nonbondedMethod=nonbondedMethod[i], implicitSolventSaltConc=salt[i]) integrator = VerletIntegrator(0.001) - context = Context(system, integrator, Platform.getPlatformByName("CPU")) + context = Context(system, integrator, Platform.getPlatformByName("Reference")) context.setPositions(self.pdb.positions) state1 = context.getState(getForces=True) #out = open('systems/ala-ala-ala-implicit-forces/'+file[i]+'.xml', 'w') @@ -142,6 +170,43 @@ class TestCharmmFiles(unittest.TestCase): diff = norm(f1-f2) self.assertTrue(diff < 0.1 or diff/norm(f1) < 1e-4) + def test_PermissiveRead(self): + """Compare permissive and strict reading of Charmm parameters""" + + psf = CharmmPsfFile('systems/5dhfr_cube.psf') + pdb = PDBFile('systems/5dhfr_cube.pdb') + + params_strict = CharmmParameterSet('systems/par_all22_prot_with_mass.inp') + params_permissive = CharmmParameterSet('systems/par_all22_prot.inp', permissive=True) + # Box dimensions (found from bounding box) + psf.setBox(62.23*angstroms, 62.23*angstroms, 62.23*angstroms) + + # Turn off charges so we only test the Lennard-Jones energies + for a in psf.atom_list: + a.charge = 0.0 + + # Now compute the full energy + plat = Platform.getPlatformByName('Reference') + + system_strict = psf.createSystem(params_strict , nonbondedMethod=PME, + nonbondedCutoff=8*angstroms) + system_permissive = psf.createSystem(params_permissive, nonbondedMethod=PME, + nonbondedCutoff=8*angstroms) + + con_strict = Context(system_strict , VerletIntegrator(2*femtoseconds), plat) + con_permissive = Context(system_permissive, VerletIntegrator(2*femtoseconds), plat) + + con_strict.setPositions(pdb.positions) + con_permissive.setPositions(pdb.positions) + + state_strict = con_strict.getState(getEnergy=True, enforcePeriodicBox=True) + state_permissive = con_permissive.getState(getEnergy=True, enforcePeriodicBox=True) + + ene_strict = state_strict.getPotentialEnergy().value_in_unit(kilocalories_per_mole) + ene_permissive = state_permissive.getPotentialEnergy().value_in_unit(kilocalories_per_mole) + self.assertAlmostEqual(ene_strict, ene_permissive, delta=0.00001) + + if __name__ == '__main__': unittest.main() diff --git a/wrappers/python/tests/TestCheckpointReporter.py b/wrappers/python/tests/TestCheckpointReporter.py index 59ee07b2a5902072f7c7bc87c623a1110c1c6cc7..e488138357d97e776cc572d7a93be1777ccb05c2 100644 --- a/wrappers/python/tests/TestCheckpointReporter.py +++ b/wrappers/python/tests/TestCheckpointReporter.py @@ -1,6 +1,6 @@ +import os import unittest import tempfile -import numpy as np from simtk.openmm import app import simtk.openmm as mm from simtk import unit @@ -18,21 +18,24 @@ class TestCheckpointReporter(unittest.TestCase): self.simulation.context.setPositions(pdb.positions) def test_1(self): - file = tempfile.NamedTemporaryFile() + file = tempfile.NamedTemporaryFile(delete=False) self.simulation.reporters.append(app.CheckpointReporter(file, 1)) self.simulation.step(1) # get the current positions - positions = self.simulation.context.getState(getPositions=True).getPositions(asNumpy=True)._value + positions = self.simulation.context.getState(getPositions=True).getPositions() + # now set the positions into junk... - self.simulation.context.setPositions(np.random.random(positions.shape)) + self.simulation.context.setPositions([mm.Vec3(0, 0, 0)] * len(positions)) + # then reload the right positions from the checkpoint + file.close() with open(file.name, 'rb') as f: self.simulation.context.loadCheckpoint(f.read()) - file.close() + os.unlink(file.name) - newPositions = self.simulation.context.getState(getPositions=True).getPositions(asNumpy=True)._value - np.testing.assert_array_equal(positions, newPositions) + newPositions = self.simulation.context.getState(getPositions=True).getPositions() + self.assertSequenceEqual(positions, newPositions) if __name__ == '__main__': unittest.main() diff --git a/wrappers/python/tests/TestForceField.py b/wrappers/python/tests/TestForceField.py index c49440be75bc18553e361cc80f6b339fd6ff72a5..73eb412c219f11dfda17708f1bc0eb740ecdf3f1 100644 --- a/wrappers/python/tests/TestForceField.py +++ b/wrappers/python/tests/TestForceField.py @@ -6,6 +6,10 @@ from simtk.unit import * import simtk.openmm.app.element as elem import simtk.openmm.app.forcefield as forcefield import math +if sys.version_info >= (3, 0): + from io import StringIO +else: + from cStringIO import StringIO class TestForceField(unittest.TestCase): """Test the ForceField.createSystem() method.""" @@ -144,7 +148,8 @@ class TestForceField(unittest.TestCase): context = Context(system, integrator) context.setPositions(pdb.positions) state1 = context.getState(getForces=True) - state2 = XmlSerializer.deserialize(open('systems/lysozyme-implicit-forces.xml').read()) + with open('systems/lysozyme-implicit-forces.xml') as input: + state2 = XmlSerializer.deserialize(input.read()) numDifferences = 0 for f1, f2, in zip(state1.getForces().value_in_unit(kilojoules_per_mole/nanometer), state2.getForces().value_in_unit(kilojoules_per_mole/nanometer)): diff = norm(f1-f2) @@ -197,7 +202,51 @@ class TestForceField(unittest.TestCase): for i in range(3): self.assertEqual(vectors[i], self.pdb1.topology.getPeriodicBoxVectors()[i]) self.assertEqual(vectors[i], system.getDefaultPeriodicBoxVectors()[i]) - + + def test_ResidueAttributes(self): + """Test a ForceField that gets per-particle parameters from residue attributes.""" + + xml = """ + + + + + + + + + + + + + + + + + + + +""" + ff = ForceField(StringIO(xml)) + + # Build a water box. + modeller = Modeller(Topology(), []) + modeller.addSolvent(ff, boxSize=Vec3(3, 3, 3)*nanometers) + + # Create a system and make sure all nonbonded parameters are correct. + system = ff.createSystem(modeller.topology) + nonbonded = [f for f in system.getForces() if isinstance(f, NonbondedForce)][0] + atoms = list(modeller.topology.atoms()) + for i in range(len(atoms)): + params = nonbonded.getParticleParameters(i) + if atoms[i].element == elem.oxygen: + self.assertEqual(params[0], -0.834*elementary_charge) + self.assertEqual(params[1], 0.315*nanometers) + self.assertEqual(params[2], 0.635*kilojoule_per_mole) + else: + self.assertEqual(params[0], 0.417*elementary_charge) + self.assertEqual(params[1], 1.0*nanometers) + self.assertEqual(params[2], 0.0*kilojoule_per_mole) class AmoebaTestForceField(unittest.TestCase): """Test the ForceField.createSystem() method with the AMOEBA forcefield.""" @@ -270,6 +319,22 @@ class AmoebaTestForceField(unittest.TestCase): self.assertAlmostEqual(constraints[(0,2)], hoDist) self.assertAlmostEqual(constraints[(1,2)], hohDist) + def test_Forces(self): + """Compute forces and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed.""" + + pdb = PDBFile('systems/alanine-dipeptide-implicit.pdb') + forcefield = ForceField('amoeba2013.xml', 'amoeba2013_gk.xml') + system = forcefield.createSystem(pdb.topology, polarization='direct') + integrator = VerletIntegrator(0.001) + context = Context(system, integrator) + context.setPositions(pdb.positions) + state1 = context.getState(getForces=True) + with open('systems/alanine-dipeptide-amoeba-forces.xml') as input: + state2 = XmlSerializer.deserialize(input.read()) + for f1, f2, in zip(state1.getForces().value_in_unit(kilojoules_per_mole/nanometer), state2.getForces().value_in_unit(kilojoules_per_mole/nanometer)): + diff = norm(f1-f2) + self.assertTrue(diff < 0.1 or diff/norm(f1) < 1e-3) + if __name__ == '__main__': unittest.main() diff --git a/wrappers/python/tests/TestForceGroups.py b/wrappers/python/tests/TestForceGroups.py new file mode 100644 index 0000000000000000000000000000000000000000..180d2ecfdd36955fceeee9abf7f9752523b91c0d --- /dev/null +++ b/wrappers/python/tests/TestForceGroups.py @@ -0,0 +1,40 @@ +import unittest +import itertools +import simtk.openmm as mm + + +class TestForceGroups(unittest.TestCase): + def setUp(self): + system = mm.System() + system.addParticle(1.0) + + for i in range(32): + force = mm.CustomExternalForce(str(i)) + force.addParticle(0, []) + force.setForceGroup(i) + system.addForce(force) + + platform = mm.Platform.getPlatformByName('Reference') + context = mm.Context(system, mm.VerletIntegrator(0), platform) + context.setPositions([(0,0,0)]) + self.context = context + + def test1(self): + n = 31 # Should be 32, but github issue #1198 + for (i,j) in itertools.combinations(range(n), 2): + groups = 1<= (3, 0): + from io import StringIO +else: + from cStringIO import StringIO + class TestPdbFile(unittest.TestCase): """Test the PDB file parser""" - + def test_Triclinic(self): """Test parsing a file that describes a triclinic box.""" pdb = PDBFile('systems/triclinic.pdb') @@ -43,9 +48,9 @@ class TestPdbFile(unittest.TestCase): def test_WriteFile(self): """Write a file, read it back, and make sure it matches the original.""" pdb1 = PDBFile('systems/triclinic.pdb') - output = cStringIO.StringIO() + output = StringIO() PDBFile.writeFile(pdb1.topology, pdb1.positions, output) - input = cStringIO.StringIO(output.getvalue()) + input = StringIO(output.getvalue()) pdb2 = PDBFile(input) output.close(); input.close(); diff --git a/wrappers/python/tests/TestPdbxFile.py b/wrappers/python/tests/TestPdbxFile.py index a74743e33115ba6b449f37087d7ce91f8d04a459..4cb8dff934253156d9105ea9081555c681c40dec 100644 --- a/wrappers/python/tests/TestPdbxFile.py +++ b/wrappers/python/tests/TestPdbxFile.py @@ -3,6 +3,7 @@ from simtk.openmm.app import * from simtk.openmm import * from simtk.unit import * import simtk.openmm.app.element as elem +import os class TestPdbxFile(unittest.TestCase): """Test the PDBx/mmCIF file parser""" @@ -48,6 +49,71 @@ class TestPdbxFile(unittest.TestCase): diff = abs(p1[i]-p2[i])/scale self.assertTrue(diff < tol) + def testReporterImplicit(self): + """ Tests the PDBxReporter without PBC """ + parm = AmberPrmtopFile('systems/alanine-dipeptide-implicit.prmtop') + system = parm.createSystem() + sim = Simulation(parm.topology, system, VerletIntegrator(1*femtoseconds), + Platform.getPlatformByName('Reference')) + sim.context.setPositions(PDBFile('systems/alanine-dipeptide-implicit.pdb').getPositions()) + sim.reporters.append(PDBxReporter('test.cif', 1)) + sim.step(10) + pdb = PDBxFile('test.cif') + self.assertEqual(len(list(pdb.topology.atoms())), len(list(parm.topology.atoms()))) + self.assertEqual(len(list(pdb.topology.residues())), len(list(parm.topology.residues()))) + for res1, res2 in zip(pdb.topology.residues(), parm.topology.residues()): + self.assertEqual(res1.name, res2.name) + for atom1, atom2 in zip(res1.atoms(), res2.atoms()): + self.assertEqual(atom1.name, atom2.name) + positions = pdb.getPositions(frame=9) + self.assertFalse(all(x1 == x2 for x1, x2 in zip(positions, pdb.getPositions(frame=0)))) + # There should only be 10 frames (0 through 9) + self.assertRaises(IndexError, lambda: pdb.getPositions(frame=10)) + self.assertIs(pdb.topology.getPeriodicBoxVectors(), None) + del sim + os.unlink('test.cif') + + def assertAlmostEqualVec(self, vec1, vec2, *args, **kwargs): + if is_quantity(vec1): + vec1 = vec1.value_in_unit_system(md_unit_system) + if is_quantity(vec2): + vec2 = vec2.value_in_unit_system(md_unit_system) + for x, y in zip(vec1, vec2): + self.assertAlmostEqual(x, y, *args, **kwargs) + + def testReporterExplicit(self): + """ Tests the PDBxReporter with PBC """ + parm = AmberPrmtopFile('systems/alanine-dipeptide-explicit.prmtop') + system = parm.createSystem(nonbondedCutoff=1.0, nonbondedMethod=PME) + sim = Simulation(parm.topology, system, VerletIntegrator(1*femtoseconds), + Platform.getPlatformByName('Reference')) + orig_pdb = PDBFile('systems/alanine-dipeptide-explicit.pdb') + sim.context.setPositions(orig_pdb.getPositions()) + sim.context.setPeriodicBoxVectors(*parm.topology.getPeriodicBoxVectors()) + sim.reporters.append(PDBxReporter('test.cif', 1)) + sim.step(10) + pdb = PDBxFile('test.cif') + self.assertEqual(len(list(pdb.topology.atoms())), len(list(parm.topology.atoms()))) + self.assertEqual(len(list(pdb.topology.residues())), len(list(parm.topology.residues()))) + for res1, res2 in zip(pdb.topology.residues(), parm.topology.residues()): + self.assertEqual(res1.name, res2.name) + for atom1, atom2 in zip(res1.atoms(), res2.atoms()): + self.assertEqual(atom1.name, atom2.name) + positions = pdb.getPositions(frame=9) + self.assertFalse(all(x1 == x2 for x1, x2 in zip(positions, pdb.getPositions(frame=0)))) + # There should only be 10 frames (0 through 9) + self.assertRaises(IndexError, lambda: pdb.getPositions(frame=10)) + self.assertAlmostEqualVec(parm.topology.getPeriodicBoxVectors()[0], + pdb.topology.getPeriodicBoxVectors()[0], + places=5) + self.assertAlmostEqualVec(parm.topology.getPeriodicBoxVectors()[1], + pdb.topology.getPeriodicBoxVectors()[1], + places=5) + self.assertAlmostEqualVec(parm.topology.getPeriodicBoxVectors()[2], + pdb.topology.getPeriodicBoxVectors()[2], + places=5) + del sim + os.unlink('test.cif') if __name__ == '__main__': unittest.main() diff --git a/wrappers/python/tests/TestPickle.py b/wrappers/python/tests/TestPickle.py index 0d3dd47bdfbee63c40f5a4f44f68f93fa28ef773..37fc7ecb7d96739fba4034a5c9e13d71ebfb3203 100644 --- a/wrappers/python/tests/TestPickle.py +++ b/wrappers/python/tests/TestPickle.py @@ -3,13 +3,14 @@ from validateConstraints import * from simtk.openmm.app import * from simtk.openmm import * from simtk.unit import * +import simtk.openmm import simtk.openmm.app.element as elem import simtk.openmm.app.forcefield as forcefield import copy import pickle class TestPickle(unittest.TestCase): - """Pickling / deepcopy of OpenMM state and integrator objects.""" + """Pickling / deepcopy of OpenMM objects.""" def setUp(self): """Set up the tests by loading the input pdb files and force field @@ -26,28 +27,46 @@ class TestPickle(unittest.TestCase): self.pdb2 = PDBFile('systems/alanine-dipeptide-implicit.pdb') self.forcefield2 = ForceField('amber99sb.xml', 'amber99_obc.xml') + def check_copy(self, object, object_copy): + """Check that an object's copy is an accurate replica.""" + # Check class name is same. + self.assertEqual(object.__class__.__name__, object_copy.__class__.__name__) + # Check serialized contents are the same. + self.assertEqual(XmlSerializer.serialize(object), XmlSerializer.serialize(object_copy)) def test_deepcopy(self): """Test that serialization/deserialization works (via deepcopy).""" + # Create system, integrator, and state. system = self.forcefield1.createSystem(self.pdb1.topology) integrator = VerletIntegrator(2*femtosecond) context = Context(system, integrator) context.setPositions(self.pdb1.positions) state = context.getState(getPositions=True, getForces=True, getEnergy=True) - system2 = copy.deepcopy(system) - integrator2 = copy.deepcopy(integrator) - state2 = copy.deepcopy(state) - - str_state = pickle.dumps(state) - str_integrator = pickle.dumps(integrator) - - state3 = pickle.loads(str_state) - context.setState(state3) + # + # Test deepcopy + # + self.check_copy(system, copy.deepcopy(system)) + self.check_copy(integrator, copy.deepcopy(integrator)) + self.check_copy(state, copy.deepcopy(state)) + for force_index in range(system.getNumForces()): + force = system.getForce(force_index) + force_copy = copy.deepcopy(force) + self.check_copy(force, force_copy) - del context, integrator + # + # Test pickle + # + + self.check_copy(system, pickle.loads(pickle.dumps(system))) + self.check_copy(integrator, pickle.loads(pickle.dumps(integrator))) + self.check_copy(state, pickle.loads(pickle.dumps(state))) + for force_index in range(system.getNumForces()): + force = system.getForce(force_index) + force_copy = pickle.loads(pickle.dumps(force)) + self.check_copy(force, force_copy) if __name__ == '__main__': unittest.main() diff --git a/wrappers/python/tests/TestSwigWrappers.py b/wrappers/python/tests/TestSwigWrappers.py new file mode 100644 index 0000000000000000000000000000000000000000..09a52bfd28e05231815b5081b467d53342a900cd --- /dev/null +++ b/wrappers/python/tests/TestSwigWrappers.py @@ -0,0 +1,15 @@ +import unittest +import simtk.openmm as mm + + +class TestSwigWrappers(unittest.TestCase): + def test_1(self): + # This tests for a refcounting bug in the swig wrappers + # that was previously problematic. + # See https://github.com/pandegroup/openmm/issues/1214 + for cycle in range(10): + system = mm.System() + system.getDefaultPeriodicBoxVectors() + +if __name__ == '__main__': + unittest.main() diff --git a/wrappers/python/tests/TestTopology.py b/wrappers/python/tests/TestTopology.py new file mode 100644 index 0000000000000000000000000000000000000000..7a536a17254fb18aadc2c2df9b31784a9c0398e8 --- /dev/null +++ b/wrappers/python/tests/TestTopology.py @@ -0,0 +1,30 @@ +import sys +import unittest +from simtk.openmm.app import * +from simtk.openmm import * +from simtk.unit import * +import simtk.openmm.app.element as elem +if sys.version_info >= (3, 0): + from io import StringIO +else: + from cStringIO import StringIO + + +class TestTopology(unittest.TestCase): + """Test the Topology object""" + + + def check_pdbfile(self, pdbfilename, natoms, nres, nchains): + """Check that a PDB file has the specified number of atoms, residues, and chains.""" + pdb = PDBFile(pdbfilename) + top = pdb.topology + self.assertEqual(pdb.topology.getNumAtoms(), natoms) + self.assertEqual(pdb.topology.getNumResidues(), nres) + self.assertEqual(pdb.topology.getNumChains(), nchains) + + def test_getters(self): + """Test getters for number of atoms, residues, chains.""" + self.check_pdbfile('systems/1T2Y.pdb', 271, 25, 1) + +if __name__ == '__main__': + unittest.main() diff --git a/wrappers/python/tests/systems/5dhfr_cube.pdb b/wrappers/python/tests/systems/5dhfr_cube.pdb new file mode 100644 index 0000000000000000000000000000000000000000..af87b29ebcae49fcf5d2a2b8f30cdeeeefd45a57 --- /dev/null +++ b/wrappers/python/tests/systems/5dhfr_cube.pdb @@ -0,0 +1,23560 @@ +REMARK original generated coordinate pdb file +ATOM 1 N MET X 1 5.880 -12.591 6.438 1.00 0.00 P1 N +ATOM 2 HT1 MET X 1 6.770 -12.300 5.987 1.00 0.00 P1 H +ATOM 3 HT2 MET X 1 5.944 -13.583 6.741 1.00 0.00 P1 H +ATOM 4 HT3 MET X 1 5.709 -11.994 7.282 1.00 0.00 P1 H +ATOM 5 CA MET X 1 4.731 -12.415 5.500 1.00 0.00 P1 C +ATOM 6 HA MET X 1 4.810 -13.181 4.740 1.00 0.00 P1 H +ATOM 7 CB MET X 1 3.397 -12.592 6.287 1.00 0.00 P1 C +ATOM 8 HB1 MET X 1 3.522 -12.236 7.332 1.00 0.00 P1 H +ATOM 9 HB2 MET X 1 3.166 -13.679 6.338 1.00 0.00 P1 H +ATOM 10 CG MET X 1 2.170 -11.835 5.736 1.00 0.00 P1 C +ATOM 11 HG1 MET X 1 2.133 -11.998 4.638 1.00 0.00 P1 H +ATOM 12 HG2 MET X 1 2.304 -10.743 5.894 1.00 0.00 P1 H +ATOM 13 SD MET X 1 0.575 -12.363 6.433 1.00 0.00 P1 S +ATOM 14 CE MET X 1 0.711 -11.577 8.065 1.00 0.00 P1 C +ATOM 15 HE1 MET X 1 0.806 -10.476 7.966 1.00 0.00 P1 H +ATOM 16 HE2 MET X 1 1.598 -11.950 8.621 1.00 0.00 P1 H +ATOM 17 HE3 MET X 1 -0.189 -11.788 8.681 1.00 0.00 P1 H +ATOM 18 C MET X 1 4.811 -11.080 4.805 1.00 0.00 P1 C +ATOM 19 O MET X 1 5.209 -10.087 5.405 1.00 0.00 P1 O +ATOM 20 N ILE X 2 4.456 -11.035 3.500 1.00 0.00 P1 N +ATOM 21 HN ILE X 2 4.143 -11.843 3.009 1.00 0.00 P1 H +ATOM 22 CA ILE X 2 4.441 -9.816 2.719 1.00 0.00 P1 C +ATOM 23 HA ILE X 2 4.880 -9.006 3.285 1.00 0.00 P1 H +ATOM 24 CB ILE X 2 5.223 -9.955 1.415 1.00 0.00 P1 C +ATOM 25 HB ILE X 2 4.862 -10.854 0.865 1.00 0.00 P1 H +ATOM 26 CG2 ILE X 2 5.023 -8.719 0.506 1.00 0.00 P1 C +ATOM 27 HG21 ILE X 2 5.350 -7.797 1.032 1.00 0.00 P1 H +ATOM 28 HG22 ILE X 2 3.962 -8.602 0.205 1.00 0.00 P1 H +ATOM 29 HG23 ILE X 2 5.615 -8.820 -0.427 1.00 0.00 P1 H +ATOM 30 CG1 ILE X 2 6.714 -10.172 1.776 1.00 0.00 P1 C +ATOM 31 HG11 ILE X 2 6.806 -11.062 2.435 1.00 0.00 P1 H +ATOM 32 HG12 ILE X 2 7.076 -9.290 2.349 1.00 0.00 P1 H +ATOM 33 CD ILE X 2 7.631 -10.387 0.572 1.00 0.00 P1 C +ATOM 34 HD1 ILE X 2 7.711 -9.465 -0.042 1.00 0.00 P1 H +ATOM 35 HD2 ILE X 2 7.243 -11.209 -0.067 1.00 0.00 P1 H +ATOM 36 HD3 ILE X 2 8.648 -10.667 0.919 1.00 0.00 P1 H +ATOM 37 C ILE X 2 2.993 -9.474 2.488 1.00 0.00 P1 C +ATOM 38 O ILE X 2 2.184 -10.332 2.136 1.00 0.00 P1 O +ATOM 39 N SER X 3 2.644 -8.194 2.728 1.00 0.00 P1 N +ATOM 40 HN SER X 3 3.316 -7.522 3.046 1.00 0.00 P1 H +ATOM 41 CA SER X 3 1.292 -7.705 2.656 1.00 0.00 P1 C +ATOM 42 HA SER X 3 0.662 -8.430 2.166 1.00 0.00 P1 H +ATOM 43 CB SER X 3 0.736 -7.354 4.046 1.00 0.00 P1 C +ATOM 44 HB1 SER X 3 -0.292 -6.945 3.949 1.00 0.00 P1 H +ATOM 45 HB2 SER X 3 1.385 -6.596 4.538 1.00 0.00 P1 H +ATOM 46 OG SER X 3 0.697 -8.513 4.870 1.00 0.00 P1 O +ATOM 47 HG1 SER X 3 0.472 -8.216 5.772 1.00 0.00 P1 H +ATOM 48 C SER X 3 1.286 -6.436 1.856 1.00 0.00 P1 C +ATOM 49 O SER X 3 2.249 -5.676 1.886 1.00 0.00 P1 O +ATOM 50 N LEU X 4 0.188 -6.170 1.119 1.00 0.00 P1 N +ATOM 51 HN LEU X 4 -0.579 -6.812 1.095 1.00 0.00 P1 H +ATOM 52 CA LEU X 4 0.019 -4.953 0.349 1.00 0.00 P1 C +ATOM 53 HA LEU X 4 0.910 -4.342 0.386 1.00 0.00 P1 H +ATOM 54 CB LEU X 4 -0.383 -5.203 -1.128 1.00 0.00 P1 C +ATOM 55 HB1 LEU X 4 -0.897 -4.302 -1.536 1.00 0.00 P1 H +ATOM 56 HB2 LEU X 4 -1.109 -6.041 -1.160 1.00 0.00 P1 H +ATOM 57 CG LEU X 4 0.781 -5.506 -2.103 1.00 0.00 P1 C +ATOM 58 HG LEU X 4 1.440 -4.608 -2.126 1.00 0.00 P1 H +ATOM 59 CD1 LEU X 4 1.664 -6.688 -1.685 1.00 0.00 P1 C +ATOM 60 HD11 LEU X 4 1.017 -7.558 -1.456 1.00 0.00 P1 H +ATOM 61 HD12 LEU X 4 2.262 -6.442 -0.784 1.00 0.00 P1 H +ATOM 62 HD13 LEU X 4 2.365 -6.961 -2.502 1.00 0.00 P1 H +ATOM 63 CD2 LEU X 4 0.237 -5.728 -3.527 1.00 0.00 P1 C +ATOM 64 HD21 LEU X 4 -0.336 -4.842 -3.867 1.00 0.00 P1 H +ATOM 65 HD22 LEU X 4 -0.432 -6.614 -3.549 1.00 0.00 P1 H +ATOM 66 HD23 LEU X 4 1.073 -5.902 -4.236 1.00 0.00 P1 H +ATOM 67 C LEU X 4 -1.101 -4.188 0.995 1.00 0.00 P1 C +ATOM 68 O LEU X 4 -2.072 -4.780 1.458 1.00 0.00 P1 O +ATOM 69 N ILE X 5 -0.995 -2.842 1.030 1.00 0.00 P1 N +ATOM 70 HN ILE X 5 -0.183 -2.370 0.686 1.00 0.00 P1 H +ATOM 71 CA ILE X 5 -2.054 -1.992 1.529 1.00 0.00 P1 C +ATOM 72 HA ILE X 5 -2.956 -2.573 1.585 1.00 0.00 P1 H +ATOM 73 CB ILE X 5 -1.789 -1.446 2.931 1.00 0.00 P1 C +ATOM 74 HB ILE X 5 -1.723 -2.337 3.602 1.00 0.00 P1 H +ATOM 75 CG2 ILE X 5 -0.429 -0.717 3.014 1.00 0.00 P1 C +ATOM 76 HG21 ILE X 5 -0.428 0.189 2.373 1.00 0.00 P1 H +ATOM 77 HG22 ILE X 5 0.402 -1.380 2.695 1.00 0.00 P1 H +ATOM 78 HG23 ILE X 5 -0.230 -0.400 4.059 1.00 0.00 P1 H +ATOM 79 CG1 ILE X 5 -2.972 -0.588 3.444 1.00 0.00 P1 C +ATOM 80 HG11 ILE X 5 -3.924 -1.048 3.097 1.00 0.00 P1 H +ATOM 81 HG12 ILE X 5 -2.912 0.430 3.000 1.00 0.00 P1 H +ATOM 82 CD ILE X 5 -3.027 -0.487 4.971 1.00 0.00 P1 C +ATOM 83 HD1 ILE X 5 -2.121 0.019 5.365 1.00 0.00 P1 H +ATOM 84 HD2 ILE X 5 -3.093 -1.500 5.424 1.00 0.00 P1 H +ATOM 85 HD3 ILE X 5 -3.920 0.095 5.286 1.00 0.00 P1 H +ATOM 86 C ILE X 5 -2.295 -0.918 0.499 1.00 0.00 P1 C +ATOM 87 O ILE X 5 -1.348 -0.294 0.026 1.00 0.00 P1 O +ATOM 88 N ALA X 6 -3.570 -0.711 0.080 1.00 0.00 P1 N +ATOM 89 HN ALA X 6 -4.341 -1.222 0.464 1.00 0.00 P1 H +ATOM 90 CA ALA X 6 -3.874 0.198 -1.003 1.00 0.00 P1 C +ATOM 91 HA ALA X 6 -3.185 1.031 -0.969 1.00 0.00 P1 H +ATOM 92 CB ALA X 6 -3.782 -0.505 -2.373 1.00 0.00 P1 C +ATOM 93 HB1 ALA X 6 -4.522 -1.330 -2.445 1.00 0.00 P1 H +ATOM 94 HB2 ALA X 6 -2.771 -0.945 -2.504 1.00 0.00 P1 H +ATOM 95 HB3 ALA X 6 -3.957 0.210 -3.204 1.00 0.00 P1 H +ATOM 96 C ALA X 6 -5.268 0.758 -0.871 1.00 0.00 P1 C +ATOM 97 O ALA X 6 -6.172 0.104 -0.358 1.00 0.00 P1 O +ATOM 98 N ALA X 7 -5.468 2.002 -1.364 1.00 0.00 P1 N +ATOM 99 HN ALA X 7 -4.720 2.524 -1.765 1.00 0.00 P1 H +ATOM 100 CA ALA X 7 -6.757 2.649 -1.425 1.00 0.00 P1 C +ATOM 101 HA ALA X 7 -7.495 2.051 -0.910 1.00 0.00 P1 H +ATOM 102 CB ALA X 7 -6.733 4.053 -0.799 1.00 0.00 P1 C +ATOM 103 HB1 ALA X 7 -5.996 4.706 -1.313 1.00 0.00 P1 H +ATOM 104 HB2 ALA X 7 -6.445 3.980 0.271 1.00 0.00 P1 H +ATOM 105 HB3 ALA X 7 -7.732 4.528 -0.856 1.00 0.00 P1 H +ATOM 106 C ALA X 7 -7.147 2.749 -2.878 1.00 0.00 P1 C +ATOM 107 O ALA X 7 -6.392 3.254 -3.707 1.00 0.00 P1 O +ATOM 108 N LEU X 8 -8.333 2.208 -3.214 1.00 0.00 P1 N +ATOM 109 HN LEU X 8 -8.949 1.858 -2.503 1.00 0.00 P1 H +ATOM 110 CA LEU X 8 -8.784 1.975 -4.563 1.00 0.00 P1 C +ATOM 111 HA LEU X 8 -8.045 2.294 -5.287 1.00 0.00 P1 H +ATOM 112 CB LEU X 8 -9.168 0.484 -4.777 1.00 0.00 P1 C +ATOM 113 HB1 LEU X 8 -9.934 0.393 -5.580 1.00 0.00 P1 H +ATOM 114 HB2 LEU X 8 -9.636 0.111 -3.839 1.00 0.00 P1 H +ATOM 115 CG LEU X 8 -8.014 -0.471 -5.171 1.00 0.00 P1 C +ATOM 116 HG LEU X 8 -7.733 -0.226 -6.221 1.00 0.00 P1 H +ATOM 117 CD1 LEU X 8 -6.731 -0.339 -4.339 1.00 0.00 P1 C +ATOM 118 HD11 LEU X 8 -6.954 -0.484 -3.260 1.00 0.00 P1 H +ATOM 119 HD12 LEU X 8 -6.264 0.657 -4.478 1.00 0.00 P1 H +ATOM 120 HD13 LEU X 8 -5.992 -1.108 -4.649 1.00 0.00 P1 H +ATOM 121 CD2 LEU X 8 -8.508 -1.929 -5.131 1.00 0.00 P1 C +ATOM 122 HD21 LEU X 8 -9.410 -2.051 -5.767 1.00 0.00 P1 H +ATOM 123 HD22 LEU X 8 -8.768 -2.218 -4.091 1.00 0.00 P1 H +ATOM 124 HD23 LEU X 8 -7.717 -2.616 -5.500 1.00 0.00 P1 H +ATOM 125 C LEU X 8 -10.038 2.772 -4.764 1.00 0.00 P1 C +ATOM 126 O LEU X 8 -10.982 2.656 -3.992 1.00 0.00 P1 O +ATOM 127 N ALA X 9 -10.096 3.560 -5.856 1.00 0.00 P1 N +ATOM 128 HN ALA X 9 -9.291 3.701 -6.433 1.00 0.00 P1 H +ATOM 129 CA ALA X 9 -11.332 4.106 -6.364 1.00 0.00 P1 C +ATOM 130 HA ALA X 9 -12.029 4.269 -5.555 1.00 0.00 P1 H +ATOM 131 CB ALA X 9 -11.066 5.439 -7.082 1.00 0.00 P1 C +ATOM 132 HB1 ALA X 9 -10.172 5.358 -7.736 1.00 0.00 P1 H +ATOM 133 HB2 ALA X 9 -10.884 6.222 -6.321 1.00 0.00 P1 H +ATOM 134 HB3 ALA X 9 -11.914 5.775 -7.705 1.00 0.00 P1 H +ATOM 135 C ALA X 9 -11.932 3.087 -7.312 1.00 0.00 P1 C +ATOM 136 O ALA X 9 -11.475 1.946 -7.382 1.00 0.00 P1 O +ATOM 137 N VAL X 10 -12.982 3.461 -8.082 1.00 0.00 P1 N +ATOM 138 HN VAL X 10 -13.356 4.385 -8.034 1.00 0.00 P1 H +ATOM 139 CA VAL X 10 -13.628 2.565 -9.029 1.00 0.00 P1 C +ATOM 140 HA VAL X 10 -13.817 1.633 -8.514 1.00 0.00 P1 H +ATOM 141 CB VAL X 10 -14.962 3.108 -9.538 1.00 0.00 P1 C +ATOM 142 HB VAL X 10 -14.785 4.002 -10.180 1.00 0.00 P1 H +ATOM 143 CG1 VAL X 10 -15.717 2.040 -10.359 1.00 0.00 P1 C +ATOM 144 HG11 VAL X 10 -15.849 1.112 -9.766 1.00 0.00 P1 H +ATOM 145 HG12 VAL X 10 -15.176 1.801 -11.299 1.00 0.00 P1 H +ATOM 146 HG13 VAL X 10 -16.722 2.424 -10.639 1.00 0.00 P1 H +ATOM 147 CG2 VAL X 10 -15.832 3.545 -8.339 1.00 0.00 P1 C +ATOM 148 HG21 VAL X 10 -15.361 4.358 -7.757 1.00 0.00 P1 H +ATOM 149 HG22 VAL X 10 -16.015 2.686 -7.659 1.00 0.00 P1 H +ATOM 150 HG23 VAL X 10 -16.816 3.914 -8.700 1.00 0.00 P1 H +ATOM 151 C VAL X 10 -12.665 2.289 -10.176 1.00 0.00 P1 C +ATOM 152 O VAL X 10 -11.867 3.156 -10.527 1.00 0.00 P1 O +ATOM 153 N ASP X 11 -12.675 1.032 -10.705 1.00 0.00 P1 N +ATOM 154 HN ASP X 11 -13.378 0.391 -10.412 1.00 0.00 P1 H +ATOM 155 CA ASP X 11 -11.740 0.481 -11.681 1.00 0.00 P1 C +ATOM 156 HA ASP X 11 -12.173 -0.461 -11.988 1.00 0.00 P1 H +ATOM 157 CB ASP X 11 -11.515 1.329 -12.964 1.00 0.00 P1 C +ATOM 158 HB1 ASP X 11 -10.764 0.845 -13.624 1.00 0.00 P1 H +ATOM 159 HB2 ASP X 11 -11.163 2.348 -12.715 1.00 0.00 P1 H +ATOM 160 CG ASP X 11 -12.817 1.426 -13.743 1.00 0.00 P1 C +ATOM 161 OD1 ASP X 11 -13.314 0.350 -14.169 1.00 0.00 P1 O +ATOM 162 OD2 ASP X 11 -13.323 2.562 -13.927 1.00 0.00 P1 O +ATOM 163 C ASP X 11 -10.413 0.118 -11.049 1.00 0.00 P1 C +ATOM 164 O ASP X 11 -9.473 -0.296 -11.730 1.00 0.00 P1 O +ATOM 165 N ARG X 12 -10.330 0.236 -9.703 1.00 0.00 P1 N +ATOM 166 HN ARG X 12 -11.130 0.551 -9.195 1.00 0.00 P1 H +ATOM 167 CA ARG X 12 -9.155 0.036 -8.882 1.00 0.00 P1 C +ATOM 168 HA ARG X 12 -9.472 0.294 -7.883 1.00 0.00 P1 H +ATOM 169 CB ARG X 12 -8.611 -1.409 -8.825 1.00 0.00 P1 C +ATOM 170 HB1 ARG X 12 -8.072 -1.562 -7.868 1.00 0.00 P1 H +ATOM 171 HB2 ARG X 12 -7.861 -1.545 -9.630 1.00 0.00 P1 H +ATOM 172 CG ARG X 12 -9.686 -2.495 -8.987 1.00 0.00 P1 C +ATOM 173 HG1 ARG X 12 -10.151 -2.415 -9.993 1.00 0.00 P1 H +ATOM 174 HG2 ARG X 12 -10.493 -2.320 -8.239 1.00 0.00 P1 H +ATOM 175 CD ARG X 12 -9.174 -3.935 -8.811 1.00 0.00 P1 C +ATOM 176 HD1 ARG X 12 -9.921 -4.661 -9.203 1.00 0.00 P1 H +ATOM 177 HD2 ARG X 12 -9.047 -4.123 -7.723 1.00 0.00 P1 H +ATOM 178 NE ARG X 12 -7.836 -4.216 -9.464 1.00 0.00 P1 N +ATOM 179 HE ARG X 12 -7.247 -4.861 -8.982 1.00 0.00 P1 H +ATOM 180 CZ ARG X 12 -7.528 -4.050 -10.781 1.00 0.00 P1 C +ATOM 181 NH1 ARG X 12 -6.611 -4.873 -11.335 1.00 0.00 P1 N +ATOM 182 HH11 ARG X 12 -6.063 -5.461 -10.747 1.00 0.00 P1 H +ATOM 183 HH12 ARG X 12 -6.351 -4.811 -12.302 1.00 0.00 P1 H +ATOM 184 NH2 ARG X 12 -8.061 -3.097 -11.571 1.00 0.00 P1 N +ATOM 185 HH21 ARG X 12 -7.770 -3.032 -12.521 1.00 0.00 P1 H +ATOM 186 HH22 ARG X 12 -8.692 -2.426 -11.184 1.00 0.00 P1 H +ATOM 187 C ARG X 12 -8.068 1.006 -9.262 1.00 0.00 P1 C +ATOM 188 O ARG X 12 -6.906 0.644 -9.436 1.00 0.00 P1 O +ATOM 189 N VAL X 13 -8.460 2.284 -9.412 1.00 0.00 P1 N +ATOM 190 HN VAL X 13 -9.418 2.532 -9.285 1.00 0.00 P1 H +ATOM 191 CA VAL X 13 -7.591 3.369 -9.788 1.00 0.00 P1 C +ATOM 192 HA VAL X 13 -6.834 3.006 -10.470 1.00 0.00 P1 H +ATOM 193 CB VAL X 13 -8.396 4.472 -10.460 1.00 0.00 P1 C +ATOM 194 HB VAL X 13 -9.299 4.698 -9.847 1.00 0.00 P1 H +ATOM 195 CG1 VAL X 13 -7.580 5.765 -10.618 1.00 0.00 P1 C +ATOM 196 HG11 VAL X 13 -6.644 5.558 -11.180 1.00 0.00 P1 H +ATOM 197 HG12 VAL X 13 -7.319 6.201 -9.634 1.00 0.00 P1 H +ATOM 198 HG13 VAL X 13 -8.174 6.518 -11.179 1.00 0.00 P1 H +ATOM 199 CG2 VAL X 13 -8.855 3.954 -11.837 1.00 0.00 P1 C +ATOM 200 HG21 VAL X 13 -9.435 3.016 -11.731 1.00 0.00 P1 H +ATOM 201 HG22 VAL X 13 -7.977 3.754 -12.488 1.00 0.00 P1 H +ATOM 202 HG23 VAL X 13 -9.499 4.709 -12.336 1.00 0.00 P1 H +ATOM 203 C VAL X 13 -6.919 3.853 -8.526 1.00 0.00 P1 C +ATOM 204 O VAL X 13 -7.588 4.054 -7.511 1.00 0.00 P1 O +ATOM 205 N ILE X 14 -5.568 4.006 -8.558 1.00 0.00 P1 N +ATOM 206 HN ILE X 14 -5.061 3.839 -9.404 1.00 0.00 P1 H +ATOM 207 CA ILE X 14 -4.786 4.333 -7.378 1.00 0.00 P1 C +ATOM 208 HA ILE X 14 -5.475 4.497 -6.559 1.00 0.00 P1 H +ATOM 209 CB ILE X 14 -3.871 3.220 -6.883 1.00 0.00 P1 C +ATOM 210 HB ILE X 14 -3.451 3.513 -5.891 1.00 0.00 P1 H +ATOM 211 CG2 ILE X 14 -4.740 1.964 -6.641 1.00 0.00 P1 C +ATOM 212 HG21 ILE X 14 -5.087 1.534 -7.604 1.00 0.00 P1 H +ATOM 213 HG22 ILE X 14 -5.631 2.228 -6.033 1.00 0.00 P1 H +ATOM 214 HG23 ILE X 14 -4.168 1.188 -6.092 1.00 0.00 P1 H +ATOM 215 CG1 ILE X 14 -2.684 2.980 -7.842 1.00 0.00 P1 C +ATOM 216 HG11 ILE X 14 -1.953 3.811 -7.731 1.00 0.00 P1 H +ATOM 217 HG12 ILE X 14 -3.059 2.994 -8.889 1.00 0.00 P1 H +ATOM 218 CD ILE X 14 -1.965 1.654 -7.624 1.00 0.00 P1 C +ATOM 219 HD1 ILE X 14 -2.611 0.801 -7.911 1.00 0.00 P1 H +ATOM 220 HD2 ILE X 14 -1.698 1.544 -6.559 1.00 0.00 P1 H +ATOM 221 HD3 ILE X 14 -1.037 1.607 -8.231 1.00 0.00 P1 H +ATOM 222 C ILE X 14 -4.025 5.639 -7.486 1.00 0.00 P1 C +ATOM 223 O ILE X 14 -3.969 6.326 -6.471 1.00 0.00 P1 O +ATOM 224 N GLY X 15 -3.425 6.062 -8.646 1.00 0.00 P1 N +ATOM 225 HN GLY X 15 -3.427 5.527 -9.485 1.00 0.00 P1 H +ATOM 226 CA GLY X 15 -2.965 7.454 -8.696 1.00 0.00 P1 C +ATOM 227 HA1 GLY X 15 -2.694 7.784 -7.702 1.00 0.00 P1 H +ATOM 228 HA2 GLY X 15 -3.819 7.983 -9.085 1.00 0.00 P1 H +ATOM 229 C GLY X 15 -1.834 7.946 -9.556 1.00 0.00 P1 C +ATOM 230 O GLY X 15 -2.015 8.991 -10.175 1.00 0.00 P1 O +ATOM 231 N MET X 16 -0.646 7.291 -9.563 1.00 0.00 P1 N +ATOM 232 HN MET X 16 -0.518 6.485 -8.992 1.00 0.00 P1 H +ATOM 233 CA MET X 16 0.491 7.627 -10.422 1.00 0.00 P1 C +ATOM 234 HA MET X 16 1.004 6.685 -10.537 1.00 0.00 P1 H +ATOM 235 CB MET X 16 0.120 8.081 -11.864 1.00 0.00 P1 C +ATOM 236 HB1 MET X 16 -0.236 9.133 -11.863 1.00 0.00 P1 H +ATOM 237 HB2 MET X 16 -0.741 7.448 -12.176 1.00 0.00 P1 H +ATOM 238 CG MET X 16 1.216 7.906 -12.928 1.00 0.00 P1 C +ATOM 239 HG1 MET X 16 1.693 6.915 -12.761 1.00 0.00 P1 H +ATOM 240 HG2 MET X 16 2.001 8.678 -12.777 1.00 0.00 P1 H +ATOM 241 SD MET X 16 0.577 7.963 -14.638 1.00 0.00 P1 S +ATOM 242 CE MET X 16 0.145 9.728 -14.703 1.00 0.00 P1 C +ATOM 243 HE1 MET X 16 1.054 10.362 -14.626 1.00 0.00 P1 H +ATOM 244 HE2 MET X 16 -0.537 10.015 -13.875 1.00 0.00 P1 H +ATOM 245 HE3 MET X 16 -0.366 9.977 -15.658 1.00 0.00 P1 H +ATOM 246 C MET X 16 1.528 8.542 -9.813 1.00 0.00 P1 C +ATOM 247 O MET X 16 2.611 8.083 -9.453 1.00 0.00 P1 O +ATOM 248 N GLU X 17 1.251 9.862 -9.719 1.00 0.00 P1 N +ATOM 249 HN GLU X 17 0.352 10.210 -9.975 1.00 0.00 P1 H +ATOM 250 CA GLU X 17 2.245 10.827 -9.286 1.00 0.00 P1 C +ATOM 251 HA GLU X 17 2.974 10.341 -8.652 1.00 0.00 P1 H +ATOM 252 CB GLU X 17 2.982 11.503 -10.472 1.00 0.00 P1 C +ATOM 253 HB1 GLU X 17 2.246 11.911 -11.197 1.00 0.00 P1 H +ATOM 254 HB2 GLU X 17 3.561 10.709 -10.996 1.00 0.00 P1 H +ATOM 255 CG GLU X 17 3.949 12.631 -10.042 1.00 0.00 P1 C +ATOM 256 HG1 GLU X 17 4.571 12.289 -9.188 1.00 0.00 P1 H +ATOM 257 HG2 GLU X 17 3.375 13.528 -9.725 1.00 0.00 P1 H +ATOM 258 CD GLU X 17 4.886 13.021 -11.182 1.00 0.00 P1 C +ATOM 259 OE1 GLU X 17 5.756 12.179 -11.532 1.00 0.00 P1 O +ATOM 260 OE2 GLU X 17 4.756 14.161 -11.701 1.00 0.00 P1 O +ATOM 261 C GLU X 17 1.583 11.877 -8.442 1.00 0.00 P1 C +ATOM 262 O GLU X 17 1.962 12.085 -7.290 1.00 0.00 P1 O +ATOM 263 N ASN X 18 0.566 12.573 -8.998 1.00 0.00 P1 N +ATOM 264 HN ASN X 18 0.275 12.408 -9.936 1.00 0.00 P1 H +ATOM 265 CA ASN X 18 -0.138 13.620 -8.290 1.00 0.00 P1 C +ATOM 266 HA ASN X 18 0.589 14.219 -7.755 1.00 0.00 P1 H +ATOM 267 CB ASN X 18 -0.968 14.528 -9.236 1.00 0.00 P1 C +ATOM 268 HB1 ASN X 18 -1.575 15.250 -8.649 1.00 0.00 P1 H +ATOM 269 HB2 ASN X 18 -1.649 13.903 -9.851 1.00 0.00 P1 H +ATOM 270 CG ASN X 18 -0.034 15.334 -10.146 1.00 0.00 P1 C +ATOM 271 OD1 ASN X 18 1.139 15.557 -9.833 1.00 0.00 P1 O +ATOM 272 ND2 ASN X 18 -0.583 15.804 -11.300 1.00 0.00 P1 N +ATOM 273 HD21 ASN X 18 -0.007 16.333 -11.921 1.00 0.00 P1 H +ATOM 274 HD22 ASN X 18 -1.537 15.607 -11.520 1.00 0.00 P1 H +ATOM 275 C ASN X 18 -1.063 13.008 -7.263 1.00 0.00 P1 C +ATOM 276 O ASN X 18 -1.442 11.841 -7.357 1.00 0.00 P1 O +ATOM 277 N ALA X 19 -1.431 13.803 -6.232 1.00 0.00 P1 N +ATOM 278 HN ALA X 19 -1.130 14.751 -6.177 1.00 0.00 P1 H +ATOM 279 CA ALA X 19 -2.239 13.347 -5.125 1.00 0.00 P1 C +ATOM 280 HA ALA X 19 -1.810 12.423 -4.762 1.00 0.00 P1 H +ATOM 281 CB ALA X 19 -2.263 14.374 -3.976 1.00 0.00 P1 C +ATOM 282 HB1 ALA X 19 -2.705 15.335 -4.317 1.00 0.00 P1 H +ATOM 283 HB2 ALA X 19 -1.228 14.572 -3.625 1.00 0.00 P1 H +ATOM 284 HB3 ALA X 19 -2.855 13.997 -3.115 1.00 0.00 P1 H +ATOM 285 C ALA X 19 -3.660 13.071 -5.561 1.00 0.00 P1 C +ATOM 286 O ALA X 19 -4.166 13.674 -6.507 1.00 0.00 P1 O +ATOM 287 N MET X 20 -4.327 12.113 -4.877 1.00 0.00 P1 N +ATOM 288 HN MET X 20 -3.922 11.656 -4.092 1.00 0.00 P1 H +ATOM 289 CA MET X 20 -5.631 11.637 -5.277 1.00 0.00 P1 C +ATOM 290 HA MET X 20 -5.640 11.668 -6.352 1.00 0.00 P1 H +ATOM 291 CB MET X 20 -5.892 10.190 -4.799 1.00 0.00 P1 C +ATOM 292 HB1 MET X 20 -6.960 9.921 -4.959 1.00 0.00 P1 H +ATOM 293 HB2 MET X 20 -5.685 10.112 -3.709 1.00 0.00 P1 H +ATOM 294 CG MET X 20 -5.037 9.177 -5.565 1.00 0.00 P1 C +ATOM 295 HG1 MET X 20 -5.248 8.155 -5.182 1.00 0.00 P1 H +ATOM 296 HG2 MET X 20 -3.964 9.388 -5.361 1.00 0.00 P1 H +ATOM 297 SD MET X 20 -5.342 9.258 -7.355 1.00 0.00 P1 S +ATOM 298 CE MET X 20 -6.766 8.151 -7.484 1.00 0.00 P1 C +ATOM 299 HE1 MET X 20 -7.643 8.596 -6.974 1.00 0.00 P1 H +ATOM 300 HE2 MET X 20 -6.554 7.157 -7.036 1.00 0.00 P1 H +ATOM 301 HE3 MET X 20 -7.044 8.001 -8.548 1.00 0.00 P1 H +ATOM 302 C MET X 20 -6.740 12.520 -4.748 1.00 0.00 P1 C +ATOM 303 O MET X 20 -6.591 13.083 -3.665 1.00 0.00 P1 O +ATOM 304 N PRO X 21 -7.856 12.692 -5.462 1.00 0.00 P1 N +ATOM 305 CD PRO X 21 -8.025 12.254 -6.853 1.00 0.00 P1 C +ATOM 306 HD1 PRO X 21 -8.143 11.150 -6.902 1.00 0.00 P1 H +ATOM 307 HD2 PRO X 21 -7.148 12.580 -7.457 1.00 0.00 P1 H +ATOM 308 CA PRO X 21 -8.875 13.656 -5.074 1.00 0.00 P1 C +ATOM 309 HA PRO X 21 -8.468 14.463 -4.480 1.00 0.00 P1 H +ATOM 310 CB PRO X 21 -9.366 14.187 -6.427 1.00 0.00 P1 C +ATOM 311 HB1 PRO X 21 -8.655 14.967 -6.781 1.00 0.00 P1 H +ATOM 312 HB2 PRO X 21 -10.383 14.627 -6.392 1.00 0.00 P1 H +ATOM 313 CG PRO X 21 -9.270 12.980 -7.358 1.00 0.00 P1 C +ATOM 314 HG1 PRO X 21 -10.163 12.331 -7.222 1.00 0.00 P1 H +ATOM 315 HG2 PRO X 21 -9.187 13.279 -8.423 1.00 0.00 P1 H +ATOM 316 C PRO X 21 -10.008 13.008 -4.292 1.00 0.00 P1 C +ATOM 317 O PRO X 21 -11.095 12.810 -4.833 1.00 0.00 P1 O +ATOM 318 N TRP X 22 -9.797 12.717 -2.995 1.00 0.00 P1 N +ATOM 319 HN TRP X 22 -8.901 12.852 -2.571 1.00 0.00 P1 H +ATOM 320 CA TRP X 22 -10.852 12.338 -2.081 1.00 0.00 P1 C +ATOM 321 HA TRP X 22 -11.733 12.928 -2.297 1.00 0.00 P1 H +ATOM 322 CB TRP X 22 -11.203 10.819 -2.128 1.00 0.00 P1 C +ATOM 323 HB1 TRP X 22 -11.672 10.608 -3.114 1.00 0.00 P1 H +ATOM 324 HB2 TRP X 22 -11.957 10.589 -1.346 1.00 0.00 P1 H +ATOM 325 CG TRP X 22 -10.015 9.884 -1.954 1.00 0.00 P1 C +ATOM 326 CD1 TRP X 22 -9.218 9.744 -0.851 1.00 0.00 P1 C +ATOM 327 HD1 TRP X 22 -9.368 10.253 0.090 1.00 0.00 P1 H +ATOM 328 NE1 TRP X 22 -8.193 8.868 -1.106 1.00 0.00 P1 N +ATOM 329 HE1 TRP X 22 -7.499 8.594 -0.475 1.00 0.00 P1 H +ATOM 330 CE2 TRP X 22 -8.330 8.392 -2.388 1.00 0.00 P1 C +ATOM 331 CD2 TRP X 22 -9.471 9.003 -2.956 1.00 0.00 P1 C +ATOM 332 CE3 TRP X 22 -9.868 8.709 -4.258 1.00 0.00 P1 C +ATOM 333 HE3 TRP X 22 -10.724 9.177 -4.719 1.00 0.00 P1 H +ATOM 334 CZ3 TRP X 22 -9.111 7.770 -4.971 1.00 0.00 P1 C +ATOM 335 HZ3 TRP X 22 -9.372 7.547 -5.993 1.00 0.00 P1 H +ATOM 336 CZ2 TRP X 22 -7.579 7.467 -3.102 1.00 0.00 P1 C +ATOM 337 HZ2 TRP X 22 -6.714 6.984 -2.674 1.00 0.00 P1 H +ATOM 338 CH2 TRP X 22 -7.991 7.147 -4.401 1.00 0.00 P1 C +ATOM 339 HH2 TRP X 22 -7.431 6.421 -4.973 1.00 0.00 P1 H +ATOM 340 C TRP X 22 -10.322 12.774 -0.732 1.00 0.00 P1 C +ATOM 341 O TRP X 22 -9.146 13.118 -0.633 1.00 0.00 P1 O +ATOM 342 N ASN X 23 -11.148 12.795 0.341 1.00 0.00 P1 N +ATOM 343 HN ASN X 23 -12.101 12.504 0.291 1.00 0.00 P1 H +ATOM 344 CA ASN X 23 -10.691 13.277 1.632 1.00 0.00 P1 C +ATOM 345 HA ASN X 23 -9.609 13.273 1.671 1.00 0.00 P1 H +ATOM 346 CB ASN X 23 -11.224 14.714 1.916 1.00 0.00 P1 C +ATOM 347 HB1 ASN X 23 -12.307 14.703 2.151 1.00 0.00 P1 H +ATOM 348 HB2 ASN X 23 -11.089 15.306 0.984 1.00 0.00 P1 H +ATOM 349 CG ASN X 23 -10.461 15.412 3.054 1.00 0.00 P1 C +ATOM 350 OD1 ASN X 23 -10.130 14.820 4.084 1.00 0.00 P1 O +ATOM 351 ND2 ASN X 23 -10.173 16.729 2.852 1.00 0.00 P1 N +ATOM 352 HD21 ASN X 23 -9.682 17.225 3.565 1.00 0.00 P1 H +ATOM 353 HD22 ASN X 23 -10.455 17.182 2.008 1.00 0.00 P1 H +ATOM 354 C ASN X 23 -11.186 12.305 2.669 1.00 0.00 P1 C +ATOM 355 O ASN X 23 -12.281 12.466 3.205 1.00 0.00 P1 O +ATOM 356 N LEU X 24 -10.393 11.247 2.960 1.00 0.00 P1 N +ATOM 357 HN LEU X 24 -9.501 11.130 2.534 1.00 0.00 P1 H +ATOM 358 CA LEU X 24 -10.812 10.196 3.866 1.00 0.00 P1 C +ATOM 359 HA LEU X 24 -11.799 10.394 4.258 1.00 0.00 P1 H +ATOM 360 CB LEU X 24 -10.895 8.821 3.153 1.00 0.00 P1 C +ATOM 361 HB1 LEU X 24 -10.694 8.002 3.879 1.00 0.00 P1 H +ATOM 362 HB2 LEU X 24 -10.107 8.772 2.372 1.00 0.00 P1 H +ATOM 363 CG LEU X 24 -12.273 8.488 2.520 1.00 0.00 P1 C +ATOM 364 HG LEU X 24 -13.005 8.373 3.356 1.00 0.00 P1 H +ATOM 365 CD1 LEU X 24 -12.843 9.548 1.562 1.00 0.00 P1 C +ATOM 366 HD11 LEU X 24 -12.091 9.815 0.791 1.00 0.00 P1 H +ATOM 367 HD12 LEU X 24 -13.145 10.459 2.114 1.00 0.00 P1 H +ATOM 368 HD13 LEU X 24 -13.746 9.151 1.052 1.00 0.00 P1 H +ATOM 369 CD2 LEU X 24 -12.188 7.141 1.793 1.00 0.00 P1 C +ATOM 370 HD21 LEU X 24 -11.877 6.337 2.494 1.00 0.00 P1 H +ATOM 371 HD22 LEU X 24 -11.443 7.206 0.973 1.00 0.00 P1 H +ATOM 372 HD23 LEU X 24 -13.174 6.874 1.359 1.00 0.00 P1 H +ATOM 373 C LEU X 24 -9.860 10.111 5.047 1.00 0.00 P1 C +ATOM 374 O LEU X 24 -8.869 9.379 4.984 1.00 0.00 P1 O +ATOM 375 N PRO X 25 -10.150 10.787 6.171 1.00 0.00 P1 N +ATOM 376 CD PRO X 25 -10.989 11.990 6.196 1.00 0.00 P1 C +ATOM 377 HD1 PRO X 25 -12.057 11.690 6.252 1.00 0.00 P1 H +ATOM 378 HD2 PRO X 25 -10.814 12.631 5.307 1.00 0.00 P1 H +ATOM 379 CA PRO X 25 -9.418 10.629 7.423 1.00 0.00 P1 C +ATOM 380 HA PRO X 25 -8.375 10.831 7.232 1.00 0.00 P1 H +ATOM 381 CB PRO X 25 -10.082 11.637 8.376 1.00 0.00 P1 C +ATOM 382 HB1 PRO X 25 -9.374 12.008 9.144 1.00 0.00 P1 H +ATOM 383 HB2 PRO X 25 -10.968 11.189 8.879 1.00 0.00 P1 H +ATOM 384 CG PRO X 25 -10.575 12.750 7.454 1.00 0.00 P1 C +ATOM 385 HG1 PRO X 25 -11.407 13.337 7.891 1.00 0.00 P1 H +ATOM 386 HG2 PRO X 25 -9.730 13.432 7.208 1.00 0.00 P1 H +ATOM 387 C PRO X 25 -9.543 9.244 7.999 1.00 0.00 P1 C +ATOM 388 O PRO X 25 -8.680 8.837 8.775 1.00 0.00 P1 O +ATOM 389 N ALA X 26 -10.612 8.505 7.629 1.00 0.00 P1 N +ATOM 390 HN ALA X 26 -11.318 8.889 7.032 1.00 0.00 P1 H +ATOM 391 CA ALA X 26 -10.845 7.156 8.073 1.00 0.00 P1 C +ATOM 392 HA ALA X 26 -10.724 7.121 9.147 1.00 0.00 P1 H +ATOM 393 CB ALA X 26 -12.254 6.693 7.699 1.00 0.00 P1 C +ATOM 394 HB1 ALA X 26 -12.411 6.730 6.599 1.00 0.00 P1 H +ATOM 395 HB2 ALA X 26 -13.008 7.355 8.176 1.00 0.00 P1 H +ATOM 396 HB3 ALA X 26 -12.441 5.655 8.051 1.00 0.00 P1 H +ATOM 397 C ALA X 26 -9.860 6.201 7.454 1.00 0.00 P1 C +ATOM 398 O ALA X 26 -9.352 5.308 8.130 1.00 0.00 P1 O +ATOM 399 N ASP X 27 -9.532 6.391 6.153 1.00 0.00 P1 N +ATOM 400 HN ASP X 27 -9.933 7.132 5.622 1.00 0.00 P1 H +ATOM 401 CA ASP X 27 -8.551 5.578 5.470 1.00 0.00 P1 C +ATOM 402 HA ASP X 27 -8.791 4.544 5.679 1.00 0.00 P1 H +ATOM 403 CB ASP X 27 -8.568 5.792 3.933 1.00 0.00 P1 C +ATOM 404 HB1 ASP X 27 -8.297 6.836 3.676 1.00 0.00 P1 H +ATOM 405 HB2 ASP X 27 -9.588 5.585 3.548 1.00 0.00 P1 H +ATOM 406 CG ASP X 27 -7.595 4.826 3.258 1.00 0.00 P1 C +ATOM 407 OD1 ASP X 27 -7.643 3.618 3.606 1.00 0.00 P1 O +ATOM 408 OD2 ASP X 27 -6.781 5.286 2.420 1.00 0.00 P1 O +ATOM 409 C ASP X 27 -7.168 5.849 6.029 1.00 0.00 P1 C +ATOM 410 O ASP X 27 -6.392 4.925 6.249 1.00 0.00 P1 O +ATOM 411 N LEU X 28 -6.842 7.127 6.317 1.00 0.00 P1 N +ATOM 412 HN LEU X 28 -7.477 7.871 6.119 1.00 0.00 P1 H +ATOM 413 CA LEU X 28 -5.572 7.512 6.898 1.00 0.00 P1 C +ATOM 414 HA LEU X 28 -4.791 7.135 6.252 1.00 0.00 P1 H +ATOM 415 CB LEU X 28 -5.454 9.051 6.977 1.00 0.00 P1 C +ATOM 416 HB1 LEU X 28 -4.594 9.346 7.618 1.00 0.00 P1 H +ATOM 417 HB2 LEU X 28 -6.379 9.450 7.448 1.00 0.00 P1 H +ATOM 418 CG LEU X 28 -5.265 9.714 5.590 1.00 0.00 P1 C +ATOM 419 HG LEU X 28 -5.919 9.183 4.859 1.00 0.00 P1 H +ATOM 420 CD1 LEU X 28 -5.713 11.185 5.595 1.00 0.00 P1 C +ATOM 421 HD11 LEU X 28 -5.122 11.767 6.334 1.00 0.00 P1 H +ATOM 422 HD12 LEU X 28 -6.788 11.264 5.857 1.00 0.00 P1 H +ATOM 423 HD13 LEU X 28 -5.566 11.635 4.590 1.00 0.00 P1 H +ATOM 424 CD2 LEU X 28 -3.809 9.593 5.100 1.00 0.00 P1 C +ATOM 425 HD21 LEU X 28 -3.505 8.528 5.025 1.00 0.00 P1 H +ATOM 426 HD22 LEU X 28 -3.122 10.111 5.802 1.00 0.00 P1 H +ATOM 427 HD23 LEU X 28 -3.704 10.057 4.096 1.00 0.00 P1 H +ATOM 428 C LEU X 28 -5.340 6.893 8.269 1.00 0.00 P1 C +ATOM 429 O LEU X 28 -4.227 6.468 8.575 1.00 0.00 P1 O +ATOM 430 N ALA X 29 -6.396 6.776 9.109 1.00 0.00 P1 N +ATOM 431 HN ALA X 29 -7.288 7.156 8.863 1.00 0.00 P1 H +ATOM 432 CA ALA X 29 -6.323 6.128 10.405 1.00 0.00 P1 C +ATOM 433 HA ALA X 29 -5.461 6.522 10.926 1.00 0.00 P1 H +ATOM 434 CB ALA X 29 -7.583 6.422 11.240 1.00 0.00 P1 C +ATOM 435 HB1 ALA X 29 -8.491 6.027 10.736 1.00 0.00 P1 H +ATOM 436 HB2 ALA X 29 -7.707 7.520 11.359 1.00 0.00 P1 H +ATOM 437 HB3 ALA X 29 -7.507 5.969 12.251 1.00 0.00 P1 H +ATOM 438 C ALA X 29 -6.150 4.621 10.293 1.00 0.00 P1 C +ATOM 439 O ALA X 29 -5.445 4.010 11.095 1.00 0.00 P1 O +ATOM 440 N TRP X 30 -6.772 3.997 9.265 1.00 0.00 P1 N +ATOM 441 HN TRP X 30 -7.365 4.524 8.656 1.00 0.00 P1 H +ATOM 442 CA TRP X 30 -6.646 2.591 8.921 1.00 0.00 P1 C +ATOM 443 HA TRP X 30 -6.831 2.005 9.810 1.00 0.00 P1 H +ATOM 444 CB TRP X 30 -7.702 2.223 7.835 1.00 0.00 P1 C +ATOM 445 HB1 TRP X 30 -7.747 3.058 7.106 1.00 0.00 P1 H +ATOM 446 HB2 TRP X 30 -8.698 2.173 8.327 1.00 0.00 P1 H +ATOM 447 CG TRP X 30 -7.505 0.957 7.008 1.00 0.00 P1 C +ATOM 448 CD1 TRP X 30 -6.921 0.850 5.775 1.00 0.00 P1 C +ATOM 449 HD1 TRP X 30 -6.503 1.679 5.221 1.00 0.00 P1 H +ATOM 450 NE1 TRP X 30 -6.983 -0.449 5.325 1.00 0.00 P1 N +ATOM 451 HE1 TRP X 30 -6.727 -0.749 4.432 1.00 0.00 P1 H +ATOM 452 CE2 TRP X 30 -7.631 -1.210 6.273 1.00 0.00 P1 C +ATOM 453 CD2 TRP X 30 -7.970 -0.360 7.350 1.00 0.00 P1 C +ATOM 454 CE3 TRP X 30 -8.647 -0.844 8.463 1.00 0.00 P1 C +ATOM 455 HE3 TRP X 30 -8.927 -0.196 9.277 1.00 0.00 P1 H +ATOM 456 CZ3 TRP X 30 -8.981 -2.206 8.489 1.00 0.00 P1 C +ATOM 457 HZ3 TRP X 30 -9.519 -2.608 9.334 1.00 0.00 P1 H +ATOM 458 CZ2 TRP X 30 -7.968 -2.558 6.295 1.00 0.00 P1 C +ATOM 459 HZ2 TRP X 30 -7.734 -3.217 5.473 1.00 0.00 P1 H +ATOM 460 CH2 TRP X 30 -8.647 -3.049 7.420 1.00 0.00 P1 C +ATOM 461 HH2 TRP X 30 -8.942 -4.086 7.455 1.00 0.00 P1 H +ATOM 462 C TRP X 30 -5.238 2.272 8.454 1.00 0.00 P1 C +ATOM 463 O TRP X 30 -4.633 1.307 8.915 1.00 0.00 P1 O +ATOM 464 N PHE X 31 -4.673 3.093 7.540 1.00 0.00 P1 N +ATOM 465 HN PHE X 31 -5.211 3.846 7.151 1.00 0.00 P1 H +ATOM 466 CA PHE X 31 -3.324 2.970 7.020 1.00 0.00 P1 C +ATOM 467 HA PHE X 31 -3.242 2.007 6.538 1.00 0.00 P1 H +ATOM 468 CB PHE X 31 -3.049 4.097 5.978 1.00 0.00 P1 C +ATOM 469 HB1 PHE X 31 -3.304 5.084 6.422 1.00 0.00 P1 H +ATOM 470 HB2 PHE X 31 -3.703 3.947 5.092 1.00 0.00 P1 H +ATOM 471 CG PHE X 31 -1.615 4.147 5.502 1.00 0.00 P1 C +ATOM 472 CD1 PHE X 31 -1.131 3.240 4.546 1.00 0.00 P1 C +ATOM 473 HD1 PHE X 31 -1.797 2.505 4.118 1.00 0.00 P1 H +ATOM 474 CE1 PHE X 31 0.211 3.281 4.145 1.00 0.00 P1 C +ATOM 475 HE1 PHE X 31 0.568 2.579 3.407 1.00 0.00 P1 H +ATOM 476 CZ PHE X 31 1.084 4.222 4.706 1.00 0.00 P1 C +ATOM 477 HZ PHE X 31 2.119 4.248 4.398 1.00 0.00 P1 H +ATOM 478 CD2 PHE X 31 -0.730 5.092 6.054 1.00 0.00 P1 C +ATOM 479 HD2 PHE X 31 -1.091 5.790 6.796 1.00 0.00 P1 H +ATOM 480 CE2 PHE X 31 0.613 5.129 5.663 1.00 0.00 P1 C +ATOM 481 HE2 PHE X 31 1.284 5.858 6.090 1.00 0.00 P1 H +ATOM 482 C PHE X 31 -2.307 3.011 8.143 1.00 0.00 P1 C +ATOM 483 O PHE X 31 -1.425 2.158 8.223 1.00 0.00 P1 O +ATOM 484 N LYS X 32 -2.437 4.005 9.050 1.00 0.00 P1 N +ATOM 485 HN LYS X 32 -3.169 4.681 8.947 1.00 0.00 P1 H +ATOM 486 CA LYS X 32 -1.564 4.210 10.183 1.00 0.00 P1 C +ATOM 487 HA LYS X 32 -0.560 4.326 9.798 1.00 0.00 P1 H +ATOM 488 CB LYS X 32 -1.973 5.489 10.942 1.00 0.00 P1 C +ATOM 489 HB1 LYS X 32 -2.944 5.336 11.463 1.00 0.00 P1 H +ATOM 490 HB2 LYS X 32 -2.153 6.279 10.176 1.00 0.00 P1 H +ATOM 491 CG LYS X 32 -0.930 6.035 11.934 1.00 0.00 P1 C +ATOM 492 HG1 LYS X 32 -0.044 5.367 11.973 1.00 0.00 P1 H +ATOM 493 HG2 LYS X 32 -1.396 6.045 12.946 1.00 0.00 P1 H +ATOM 494 CD LYS X 32 -0.497 7.467 11.565 1.00 0.00 P1 C +ATOM 495 HD1 LYS X 32 -1.415 8.018 11.249 1.00 0.00 P1 H +ATOM 496 HD2 LYS X 32 0.185 7.439 10.689 1.00 0.00 P1 H +ATOM 497 CE LYS X 32 0.115 8.288 12.710 1.00 0.00 P1 C +ATOM 498 HE1 LYS X 32 -0.563 8.285 13.590 1.00 0.00 P1 H +ATOM 499 HE2 LYS X 32 0.273 9.338 12.382 1.00 0.00 P1 H +ATOM 500 NZ LYS X 32 1.425 7.751 13.139 1.00 0.00 P1 N +ATOM 501 HZ1 LYS X 32 2.103 7.797 12.355 1.00 0.00 P1 H +ATOM 502 HZ2 LYS X 32 1.306 6.761 13.437 1.00 0.00 P1 H +ATOM 503 HZ3 LYS X 32 1.784 8.310 13.941 1.00 0.00 P1 H +ATOM 504 C LYS X 32 -1.579 3.019 11.112 1.00 0.00 P1 C +ATOM 505 O LYS X 32 -0.527 2.468 11.418 1.00 0.00 P1 O +ATOM 506 N ARG X 33 -2.788 2.560 11.515 1.00 0.00 P1 N +ATOM 507 HN ARG X 33 -3.620 3.035 11.226 1.00 0.00 P1 H +ATOM 508 CA ARG X 33 -3.026 1.402 12.357 1.00 0.00 P1 C +ATOM 509 HA ARG X 33 -2.604 1.615 13.329 1.00 0.00 P1 H +ATOM 510 CB ARG X 33 -4.555 1.174 12.504 1.00 0.00 P1 C +ATOM 511 HB1 ARG X 33 -5.021 1.139 11.495 1.00 0.00 P1 H +ATOM 512 HB2 ARG X 33 -4.973 2.061 13.030 1.00 0.00 P1 H +ATOM 513 CG ARG X 33 -4.963 -0.095 13.276 1.00 0.00 P1 C +ATOM 514 HG1 ARG X 33 -4.285 -0.194 14.155 1.00 0.00 P1 H +ATOM 515 HG2 ARG X 33 -4.812 -0.989 12.632 1.00 0.00 P1 H +ATOM 516 CD ARG X 33 -6.403 -0.083 13.813 1.00 0.00 P1 C +ATOM 517 HD1 ARG X 33 -6.546 0.812 14.459 1.00 0.00 P1 H +ATOM 518 HD2 ARG X 33 -6.589 -0.985 14.436 1.00 0.00 P1 H +ATOM 519 NE ARG X 33 -7.408 0.002 12.692 1.00 0.00 P1 N +ATOM 520 HE ARG X 33 -7.672 0.916 12.393 1.00 0.00 P1 H +ATOM 521 CZ ARG X 33 -8.264 -1.013 12.398 1.00 0.00 P1 C +ATOM 522 NH1 ARG X 33 -9.476 -0.728 11.863 1.00 0.00 P1 N +ATOM 523 HH11 ARG X 33 -9.746 0.220 11.716 1.00 0.00 P1 H +ATOM 524 HH12 ARG X 33 -10.127 -1.462 11.682 1.00 0.00 P1 H +ATOM 525 NH2 ARG X 33 -7.940 -2.301 12.649 1.00 0.00 P1 N +ATOM 526 HH21 ARG X 33 -8.581 -3.030 12.423 1.00 0.00 P1 H +ATOM 527 HH22 ARG X 33 -7.028 -2.511 12.989 1.00 0.00 P1 H +ATOM 528 C ARG X 33 -2.373 0.128 11.850 1.00 0.00 P1 C +ATOM 529 O ARG X 33 -1.832 -0.652 12.633 1.00 0.00 P1 O +ATOM 530 N ASN X 34 -2.405 -0.108 10.521 1.00 0.00 P1 N +ATOM 531 HN ASN X 34 -2.852 0.538 9.901 1.00 0.00 P1 H +ATOM 532 CA ASN X 34 -1.917 -1.334 9.926 1.00 0.00 P1 C +ATOM 533 HA ASN X 34 -2.016 -2.136 10.647 1.00 0.00 P1 H +ATOM 534 CB ASN X 34 -2.722 -1.698 8.656 1.00 0.00 P1 C +ATOM 535 HB1 ASN X 34 -2.243 -2.542 8.111 1.00 0.00 P1 H +ATOM 536 HB2 ASN X 34 -2.781 -0.823 7.976 1.00 0.00 P1 H +ATOM 537 CG ASN X 34 -4.119 -2.171 9.069 1.00 0.00 P1 C +ATOM 538 OD1 ASN X 34 -4.253 -3.123 9.844 1.00 0.00 P1 O +ATOM 539 ND2 ASN X 34 -5.179 -1.510 8.533 1.00 0.00 P1 N +ATOM 540 HD21 ASN X 34 -5.031 -0.674 8.003 1.00 0.00 P1 H +ATOM 541 HD22 ASN X 34 -6.104 -1.821 8.742 1.00 0.00 P1 H +ATOM 542 C ASN X 34 -0.453 -1.288 9.548 1.00 0.00 P1 C +ATOM 543 O ASN X 34 0.123 -2.339 9.273 1.00 0.00 P1 O +ATOM 544 N THR X 35 0.190 -0.098 9.507 1.00 0.00 P1 N +ATOM 545 HN THR X 35 -0.290 0.750 9.729 1.00 0.00 P1 H +ATOM 546 CA THR X 35 1.576 0.019 9.074 1.00 0.00 P1 C +ATOM 547 HA THR X 35 1.910 -0.929 8.685 1.00 0.00 P1 H +ATOM 548 CB THR X 35 1.805 1.033 7.959 1.00 0.00 P1 C +ATOM 549 HB THR X 35 2.895 1.111 7.740 1.00 0.00 P1 H +ATOM 550 OG1 THR X 35 1.325 2.328 8.295 1.00 0.00 P1 O +ATOM 551 HG1 THR X 35 0.358 2.260 8.246 1.00 0.00 P1 H +ATOM 552 CG2 THR X 35 1.108 0.569 6.668 1.00 0.00 P1 C +ATOM 553 HG21 THR X 35 0.010 0.488 6.812 1.00 0.00 P1 H +ATOM 554 HG22 THR X 35 1.493 -0.421 6.352 1.00 0.00 P1 H +ATOM 555 HG23 THR X 35 1.302 1.292 5.848 1.00 0.00 P1 H +ATOM 556 C THR X 35 2.506 0.325 10.220 1.00 0.00 P1 C +ATOM 557 O THR X 35 3.706 0.089 10.100 1.00 0.00 P1 O +ATOM 558 N LEU X 36 1.996 0.856 11.357 1.00 0.00 P1 N +ATOM 559 HN LEU X 36 1.019 1.048 11.439 1.00 0.00 P1 H +ATOM 560 CA LEU X 36 2.800 1.250 12.501 1.00 0.00 P1 C +ATOM 561 HA LEU X 36 3.543 1.935 12.127 1.00 0.00 P1 H +ATOM 562 CB LEU X 36 1.911 1.911 13.597 1.00 0.00 P1 C +ATOM 563 HB1 LEU X 36 1.781 1.235 14.470 1.00 0.00 P1 H +ATOM 564 HB2 LEU X 36 0.895 2.020 13.169 1.00 0.00 P1 H +ATOM 565 CG LEU X 36 2.318 3.315 14.116 1.00 0.00 P1 C +ATOM 566 HG LEU X 36 3.120 3.171 14.878 1.00 0.00 P1 H +ATOM 567 CD1 LEU X 36 2.877 4.268 13.043 1.00 0.00 P1 C +ATOM 568 HD11 LEU X 36 2.156 4.367 12.204 1.00 0.00 P1 H +ATOM 569 HD12 LEU X 36 3.845 3.900 12.644 1.00 0.00 P1 H +ATOM 570 HD13 LEU X 36 3.060 5.270 13.482 1.00 0.00 P1 H +ATOM 571 CD2 LEU X 36 1.106 3.970 14.807 1.00 0.00 P1 C +ATOM 572 HD21 LEU X 36 0.731 3.314 15.622 1.00 0.00 P1 H +ATOM 573 HD22 LEU X 36 0.284 4.127 14.077 1.00 0.00 P1 H +ATOM 574 HD23 LEU X 36 1.390 4.948 15.247 1.00 0.00 P1 H +ATOM 575 C LEU X 36 3.534 0.062 13.083 1.00 0.00 P1 C +ATOM 576 O LEU X 36 2.953 -1.015 13.217 1.00 0.00 P1 O +ATOM 577 N ASP X 37 4.843 0.246 13.393 1.00 0.00 P1 N +ATOM 578 HN ASP X 37 5.289 1.130 13.246 1.00 0.00 P1 H +ATOM 579 CA ASP X 37 5.712 -0.755 13.980 1.00 0.00 P1 C +ATOM 580 HA ASP X 37 6.638 -0.237 14.187 1.00 0.00 P1 H +ATOM 581 CB ASP X 37 5.135 -1.267 15.338 1.00 0.00 P1 C +ATOM 582 HB1 ASP X 37 4.244 -1.903 15.155 1.00 0.00 P1 H +ATOM 583 HB2 ASP X 37 4.811 -0.389 15.936 1.00 0.00 P1 H +ATOM 584 CG ASP X 37 6.126 -2.056 16.191 1.00 0.00 P1 C +ATOM 585 OD1 ASP X 37 5.653 -2.947 16.946 1.00 0.00 P1 O +ATOM 586 OD2 ASP X 37 7.349 -1.768 16.115 1.00 0.00 P1 O +ATOM 587 C ASP X 37 6.051 -1.869 12.993 1.00 0.00 P1 C +ATOM 588 O ASP X 37 6.255 -3.021 13.372 1.00 0.00 P1 O +ATOM 589 N LYS X 38 6.124 -1.553 11.675 1.00 0.00 P1 N +ATOM 590 HN LYS X 38 5.945 -0.628 11.348 1.00 0.00 P1 H +ATOM 591 CA LYS X 38 6.426 -2.540 10.656 1.00 0.00 P1 C +ATOM 592 HA LYS X 38 6.943 -3.369 11.114 1.00 0.00 P1 H +ATOM 593 CB LYS X 38 5.158 -3.051 9.925 1.00 0.00 P1 C +ATOM 594 HB1 LYS X 38 5.440 -3.789 9.141 1.00 0.00 P1 H +ATOM 595 HB2 LYS X 38 4.654 -2.196 9.423 1.00 0.00 P1 H +ATOM 596 CG LYS X 38 4.154 -3.719 10.873 1.00 0.00 P1 C +ATOM 597 HG1 LYS X 38 3.875 -2.986 11.665 1.00 0.00 P1 H +ATOM 598 HG2 LYS X 38 4.630 -4.591 11.371 1.00 0.00 P1 H +ATOM 599 CD LYS X 38 2.864 -4.156 10.175 1.00 0.00 P1 C +ATOM 600 HD1 LYS X 38 3.082 -5.005 9.490 1.00 0.00 P1 H +ATOM 601 HD2 LYS X 38 2.501 -3.301 9.561 1.00 0.00 P1 H +ATOM 602 CE LYS X 38 1.775 -4.540 11.181 1.00 0.00 P1 C +ATOM 603 HE1 LYS X 38 1.567 -3.686 11.862 1.00 0.00 P1 H +ATOM 604 HE2 LYS X 38 2.083 -5.423 11.781 1.00 0.00 P1 H +ATOM 605 NZ LYS X 38 0.520 -4.875 10.479 1.00 0.00 P1 N +ATOM 606 HZ1 LYS X 38 0.649 -5.782 9.954 1.00 0.00 P1 H +ATOM 607 HZ2 LYS X 38 0.288 -4.102 9.813 1.00 0.00 P1 H +ATOM 608 HZ3 LYS X 38 -0.254 -4.991 11.161 1.00 0.00 P1 H +ATOM 609 C LYS X 38 7.328 -1.904 9.624 1.00 0.00 P1 C +ATOM 610 O LYS X 38 7.375 -0.676 9.544 1.00 0.00 P1 O +ATOM 611 N PRO X 39 8.056 -2.658 8.796 1.00 0.00 P1 N +ATOM 612 CD PRO X 39 8.393 -4.066 9.001 1.00 0.00 P1 C +ATOM 613 HD1 PRO X 39 7.625 -4.686 8.493 1.00 0.00 P1 H +ATOM 614 HD2 PRO X 39 8.467 -4.335 10.076 1.00 0.00 P1 H +ATOM 615 CA PRO X 39 8.734 -2.113 7.633 1.00 0.00 P1 C +ATOM 616 HA PRO X 39 9.292 -1.235 7.927 1.00 0.00 P1 H +ATOM 617 CB PRO X 39 9.635 -3.252 7.124 1.00 0.00 P1 C +ATOM 618 HB1 PRO X 39 10.626 -2.877 6.796 1.00 0.00 P1 H +ATOM 619 HB2 PRO X 39 9.163 -3.805 6.280 1.00 0.00 P1 H +ATOM 620 CG PRO X 39 9.747 -4.210 8.310 1.00 0.00 P1 C +ATOM 621 HG1 PRO X 39 9.971 -5.241 7.981 1.00 0.00 P1 H +ATOM 622 HG2 PRO X 39 10.549 -3.859 8.996 1.00 0.00 P1 H +ATOM 623 C PRO X 39 7.733 -1.745 6.568 1.00 0.00 P1 C +ATOM 624 O PRO X 39 6.759 -2.478 6.382 1.00 0.00 P1 O +ATOM 625 N VAL X 40 7.971 -0.619 5.866 1.00 0.00 P1 N +ATOM 626 HN VAL X 40 8.766 -0.044 6.069 1.00 0.00 P1 H +ATOM 627 CA VAL X 40 7.138 -0.166 4.780 1.00 0.00 P1 C +ATOM 628 HA VAL X 40 6.388 -0.912 4.575 1.00 0.00 P1 H +ATOM 629 CB VAL X 40 6.394 1.140 5.062 1.00 0.00 P1 C +ATOM 630 HB VAL X 40 5.841 1.451 4.145 1.00 0.00 P1 H +ATOM 631 CG1 VAL X 40 5.354 0.879 6.171 1.00 0.00 P1 C +ATOM 632 HG11 VAL X 40 5.851 0.577 7.117 1.00 0.00 P1 H +ATOM 633 HG12 VAL X 40 4.653 0.077 5.866 1.00 0.00 P1 H +ATOM 634 HG13 VAL X 40 4.764 1.800 6.359 1.00 0.00 P1 H +ATOM 635 CG2 VAL X 40 7.340 2.288 5.470 1.00 0.00 P1 C +ATOM 636 HG21 VAL X 40 8.012 2.572 4.635 1.00 0.00 P1 H +ATOM 637 HG22 VAL X 40 7.956 2.003 6.347 1.00 0.00 P1 H +ATOM 638 HG23 VAL X 40 6.747 3.183 5.749 1.00 0.00 P1 H +ATOM 639 C VAL X 40 8.019 -0.068 3.556 1.00 0.00 P1 C +ATOM 640 O VAL X 40 9.033 0.628 3.545 1.00 0.00 P1 O +ATOM 641 N ILE X 41 7.658 -0.811 2.485 1.00 0.00 P1 N +ATOM 642 HN ILE X 41 6.858 -1.414 2.531 1.00 0.00 P1 H +ATOM 643 CA ILE X 41 8.372 -0.803 1.228 1.00 0.00 P1 C +ATOM 644 HA ILE X 41 9.351 -0.373 1.375 1.00 0.00 P1 H +ATOM 645 CB ILE X 41 8.563 -2.184 0.604 1.00 0.00 P1 C +ATOM 646 HB ILE X 41 7.569 -2.623 0.361 1.00 0.00 P1 H +ATOM 647 CG2 ILE X 41 9.381 -2.037 -0.703 1.00 0.00 P1 C +ATOM 648 HG21 ILE X 41 10.358 -1.552 -0.491 1.00 0.00 P1 H +ATOM 649 HG22 ILE X 41 8.839 -1.428 -1.455 1.00 0.00 P1 H +ATOM 650 HG23 ILE X 41 9.576 -3.026 -1.160 1.00 0.00 P1 H +ATOM 651 CG1 ILE X 41 9.267 -3.133 1.608 1.00 0.00 P1 C +ATOM 652 HG11 ILE X 41 8.683 -3.170 2.554 1.00 0.00 P1 H +ATOM 653 HG12 ILE X 41 10.271 -2.720 1.849 1.00 0.00 P1 H +ATOM 654 CD ILE X 41 9.426 -4.570 1.097 1.00 0.00 P1 C +ATOM 655 HD1 ILE X 41 10.024 -4.605 0.166 1.00 0.00 P1 H +ATOM 656 HD2 ILE X 41 8.432 -5.021 0.891 1.00 0.00 P1 H +ATOM 657 HD3 ILE X 41 9.949 -5.190 1.856 1.00 0.00 P1 H +ATOM 658 C ILE X 41 7.583 0.087 0.305 1.00 0.00 P1 C +ATOM 659 O ILE X 41 6.379 -0.101 0.126 1.00 0.00 P1 O +ATOM 660 N MET X 42 8.245 1.102 -0.289 1.00 0.00 P1 N +ATOM 661 HN MET X 42 9.221 1.257 -0.123 1.00 0.00 P1 H +ATOM 662 CA MET X 42 7.582 2.037 -1.161 1.00 0.00 P1 C +ATOM 663 HA MET X 42 6.643 1.617 -1.497 1.00 0.00 P1 H +ATOM 664 CB MET X 42 7.293 3.385 -0.461 1.00 0.00 P1 C +ATOM 665 HB1 MET X 42 6.806 3.148 0.507 1.00 0.00 P1 H +ATOM 666 HB2 MET X 42 6.563 3.964 -1.065 1.00 0.00 P1 H +ATOM 667 CG MET X 42 8.513 4.277 -0.169 1.00 0.00 P1 C +ATOM 668 HG1 MET X 42 8.941 4.629 -1.132 1.00 0.00 P1 H +ATOM 669 HG2 MET X 42 9.295 3.664 0.331 1.00 0.00 P1 H +ATOM 670 SD MET X 42 8.109 5.717 0.865 1.00 0.00 P1 S +ATOM 671 CE MET X 42 8.182 4.832 2.449 1.00 0.00 P1 C +ATOM 672 HE1 MET X 42 9.211 4.467 2.654 1.00 0.00 P1 H +ATOM 673 HE2 MET X 42 7.504 3.953 2.462 1.00 0.00 P1 H +ATOM 674 HE3 MET X 42 7.885 5.499 3.286 1.00 0.00 P1 H +ATOM 675 C MET X 42 8.411 2.275 -2.384 1.00 0.00 P1 C +ATOM 676 O MET X 42 9.595 1.948 -2.436 1.00 0.00 P1 O +ATOM 677 N GLY X 43 7.776 2.877 -3.411 1.00 0.00 P1 N +ATOM 678 HN GLY X 43 6.796 3.070 -3.363 1.00 0.00 P1 H +ATOM 679 CA GLY X 43 8.443 3.304 -4.615 1.00 0.00 P1 C +ATOM 680 HA1 GLY X 43 7.700 3.326 -5.399 1.00 0.00 P1 H +ATOM 681 HA2 GLY X 43 9.271 2.641 -4.827 1.00 0.00 P1 H +ATOM 682 C GLY X 43 8.968 4.692 -4.433 1.00 0.00 P1 C +ATOM 683 O GLY X 43 8.584 5.423 -3.522 1.00 0.00 P1 O +ATOM 684 N ARG X 44 9.876 5.095 -5.337 1.00 0.00 P1 N +ATOM 685 HN ARG X 44 10.166 4.475 -6.062 1.00 0.00 P1 H +ATOM 686 CA ARG X 44 10.593 6.345 -5.283 1.00 0.00 P1 C +ATOM 687 HA ARG X 44 11.032 6.424 -4.298 1.00 0.00 P1 H +ATOM 688 CB ARG X 44 11.749 6.250 -6.309 1.00 0.00 P1 C +ATOM 689 HB1 ARG X 44 11.334 6.055 -7.319 1.00 0.00 P1 H +ATOM 690 HB2 ARG X 44 12.320 5.329 -6.040 1.00 0.00 P1 H +ATOM 691 CG ARG X 44 12.798 7.385 -6.356 1.00 0.00 P1 C +ATOM 692 HG1 ARG X 44 13.658 7.003 -6.952 1.00 0.00 P1 H +ATOM 693 HG2 ARG X 44 13.171 7.595 -5.331 1.00 0.00 P1 H +ATOM 694 CD ARG X 44 12.362 8.698 -7.022 1.00 0.00 P1 C +ATOM 695 HD1 ARG X 44 13.230 9.338 -7.290 1.00 0.00 P1 H +ATOM 696 HD2 ARG X 44 11.719 9.262 -6.321 1.00 0.00 P1 H +ATOM 697 NE ARG X 44 11.528 8.368 -8.226 1.00 0.00 P1 N +ATOM 698 HE ARG X 44 10.606 8.031 -8.061 1.00 0.00 P1 H +ATOM 699 CZ ARG X 44 12.043 8.181 -9.466 1.00 0.00 P1 C +ATOM 700 NH1 ARG X 44 13.173 8.810 -9.855 1.00 0.00 P1 N +ATOM 701 HH11 ARG X 44 13.522 8.687 -10.779 1.00 0.00 P1 H +ATOM 702 HH12 ARG X 44 13.574 9.484 -9.238 1.00 0.00 P1 H +ATOM 703 NH2 ARG X 44 11.399 7.363 -10.333 1.00 0.00 P1 N +ATOM 704 HH21 ARG X 44 10.492 7.004 -10.106 1.00 0.00 P1 H +ATOM 705 HH22 ARG X 44 11.758 7.243 -11.253 1.00 0.00 P1 H +ATOM 706 C ARG X 44 9.674 7.551 -5.458 1.00 0.00 P1 C +ATOM 707 O ARG X 44 9.909 8.597 -4.862 1.00 0.00 P1 O +ATOM 708 N HSD X 45 8.562 7.427 -6.227 1.00 0.00 P1 N +ATOM 709 HN HSD X 45 8.367 6.573 -6.700 1.00 0.00 P1 H +ATOM 710 CA HSD X 45 7.573 8.488 -6.387 1.00 0.00 P1 C +ATOM 711 HA HSD X 45 8.095 9.406 -6.629 1.00 0.00 P1 H +ATOM 712 CB HSD X 45 6.541 8.175 -7.492 1.00 0.00 P1 C +ATOM 713 HB1 HSD X 45 5.814 9.011 -7.596 1.00 0.00 P1 H +ATOM 714 HB2 HSD X 45 5.970 7.258 -7.227 1.00 0.00 P1 H +ATOM 715 ND1 HSD X 45 7.492 8.919 -9.734 1.00 0.00 P1 N +ATOM 716 HD1 HSD X 45 7.292 9.898 -9.644 1.00 0.00 P1 H +ATOM 717 CG HSD X 45 7.178 7.934 -8.823 1.00 0.00 P1 C +ATOM 718 CE1 HSD X 45 8.081 8.302 -10.788 1.00 0.00 P1 C +ATOM 719 HE1 HSD X 45 8.425 8.842 -11.670 1.00 0.00 P1 H +ATOM 720 NE2 HSD X 45 8.182 6.997 -10.609 1.00 0.00 P1 N +ATOM 721 CD2 HSD X 45 7.601 6.766 -9.377 1.00 0.00 P1 C +ATOM 722 HD2 HSD X 45 7.541 5.757 -8.989 1.00 0.00 P1 H +ATOM 723 C HSD X 45 6.772 8.711 -5.126 1.00 0.00 P1 C +ATOM 724 O HSD X 45 6.448 9.844 -4.772 1.00 0.00 P1 O +ATOM 725 N THR X 46 6.446 7.610 -4.405 1.00 0.00 P1 N +ATOM 726 HN THR X 46 6.702 6.702 -4.724 1.00 0.00 P1 H +ATOM 727 CA THR X 46 5.741 7.626 -3.136 1.00 0.00 P1 C +ATOM 728 HA THR X 46 4.835 8.199 -3.266 1.00 0.00 P1 H +ATOM 729 CB THR X 46 5.370 6.234 -2.645 1.00 0.00 P1 C +ATOM 730 HB THR X 46 6.289 5.642 -2.443 1.00 0.00 P1 H +ATOM 731 OG1 THR X 46 4.625 5.558 -3.650 1.00 0.00 P1 O +ATOM 732 HG1 THR X 46 4.579 4.631 -3.388 1.00 0.00 P1 H +ATOM 733 CG2 THR X 46 4.508 6.309 -1.369 1.00 0.00 P1 C +ATOM 734 HG21 THR X 46 3.607 6.933 -1.546 1.00 0.00 P1 H +ATOM 735 HG22 THR X 46 5.084 6.745 -0.529 1.00 0.00 P1 H +ATOM 736 HG23 THR X 46 4.178 5.292 -1.065 1.00 0.00 P1 H +ATOM 737 C THR X 46 6.601 8.315 -2.109 1.00 0.00 P1 C +ATOM 738 O THR X 46 6.121 9.163 -1.367 1.00 0.00 P1 O +ATOM 739 N TRP X 47 7.919 8.010 -2.099 1.00 0.00 P1 N +ATOM 740 HN TRP X 47 8.269 7.291 -2.701 1.00 0.00 P1 H +ATOM 741 CA TRP X 47 8.918 8.678 -1.290 1.00 0.00 P1 C +ATOM 742 HA TRP X 47 8.638 8.541 -0.255 1.00 0.00 P1 H +ATOM 743 CB TRP X 47 10.320 8.042 -1.515 1.00 0.00 P1 C +ATOM 744 HB1 TRP X 47 10.483 7.918 -2.604 1.00 0.00 P1 H +ATOM 745 HB2 TRP X 47 10.314 7.027 -1.066 1.00 0.00 P1 H +ATOM 746 CG TRP X 47 11.511 8.811 -0.963 1.00 0.00 P1 C +ATOM 747 CD1 TRP X 47 12.474 9.476 -1.669 1.00 0.00 P1 C +ATOM 748 HD1 TRP X 47 12.552 9.480 -2.746 1.00 0.00 P1 H +ATOM 749 NE1 TRP X 47 13.301 10.167 -0.813 1.00 0.00 P1 N +ATOM 750 HE1 TRP X 47 14.038 10.753 -1.070 1.00 0.00 P1 H +ATOM 751 CE2 TRP X 47 12.862 9.967 0.476 1.00 0.00 P1 C +ATOM 752 CD2 TRP X 47 11.734 9.120 0.423 1.00 0.00 P1 C +ATOM 753 CE3 TRP X 47 11.053 8.753 1.580 1.00 0.00 P1 C +ATOM 754 HE3 TRP X 47 10.188 8.109 1.560 1.00 0.00 P1 H +ATOM 755 CZ3 TRP X 47 11.531 9.244 2.802 1.00 0.00 P1 C +ATOM 756 HZ3 TRP X 47 11.028 8.963 3.714 1.00 0.00 P1 H +ATOM 757 CZ2 TRP X 47 13.330 10.456 1.687 1.00 0.00 P1 C +ATOM 758 HZ2 TRP X 47 14.182 11.113 1.738 1.00 0.00 P1 H +ATOM 759 CH2 TRP X 47 12.656 10.081 2.857 1.00 0.00 P1 C +ATOM 760 HH2 TRP X 47 13.013 10.441 3.809 1.00 0.00 P1 H +ATOM 761 C TRP X 47 8.957 10.177 -1.536 1.00 0.00 P1 C +ATOM 762 O TRP X 47 8.873 10.950 -0.587 1.00 0.00 P1 O +ATOM 763 N GLU X 48 9.073 10.624 -2.807 1.00 0.00 P1 N +ATOM 764 HN GLU X 48 9.162 9.982 -3.570 1.00 0.00 P1 H +ATOM 765 CA GLU X 48 9.155 12.029 -3.164 1.00 0.00 P1 C +ATOM 766 HA GLU X 48 9.961 12.469 -2.593 1.00 0.00 P1 H +ATOM 767 CB GLU X 48 9.466 12.201 -4.667 1.00 0.00 P1 C +ATOM 768 HB1 GLU X 48 9.331 13.262 -4.976 1.00 0.00 P1 H +ATOM 769 HB2 GLU X 48 8.753 11.578 -5.250 1.00 0.00 P1 H +ATOM 770 CG GLU X 48 10.918 11.797 -4.993 1.00 0.00 P1 C +ATOM 771 HG1 GLU X 48 11.142 10.797 -4.568 1.00 0.00 P1 H +ATOM 772 HG2 GLU X 48 11.619 12.529 -4.538 1.00 0.00 P1 H +ATOM 773 CD GLU X 48 11.177 11.730 -6.497 1.00 0.00 P1 C +ATOM 774 OE1 GLU X 48 10.232 11.408 -7.263 1.00 0.00 P1 O +ATOM 775 OE2 GLU X 48 12.361 11.925 -6.885 1.00 0.00 P1 O +ATOM 776 C GLU X 48 7.898 12.804 -2.830 1.00 0.00 P1 C +ATOM 777 O GLU X 48 7.970 13.970 -2.448 1.00 0.00 P1 O +ATOM 778 N SER X 49 6.713 12.166 -2.938 1.00 0.00 P1 N +ATOM 779 HN SER X 49 6.673 11.226 -3.276 1.00 0.00 P1 H +ATOM 780 CA SER X 49 5.449 12.779 -2.575 1.00 0.00 P1 C +ATOM 781 HA SER X 49 5.480 13.811 -2.897 1.00 0.00 P1 H +ATOM 782 CB SER X 49 4.231 12.136 -3.292 1.00 0.00 P1 C +ATOM 783 HB1 SER X 49 4.274 12.395 -4.373 1.00 0.00 P1 H +ATOM 784 HB2 SER X 49 3.281 12.542 -2.882 1.00 0.00 P1 H +ATOM 785 OG SER X 49 4.221 10.717 -3.185 1.00 0.00 P1 O +ATOM 786 HG1 SER X 49 4.878 10.389 -3.814 1.00 0.00 P1 H +ATOM 787 C SER X 49 5.244 12.813 -1.069 1.00 0.00 P1 C +ATOM 788 O SER X 49 4.603 13.729 -0.558 1.00 0.00 P1 O +ATOM 789 N ILE X 50 5.811 11.838 -0.320 1.00 0.00 P1 N +ATOM 790 HN ILE X 50 6.269 11.070 -0.769 1.00 0.00 P1 H +ATOM 791 CA ILE X 50 5.795 11.784 1.133 1.00 0.00 P1 C +ATOM 792 HA ILE X 50 4.808 12.080 1.460 1.00 0.00 P1 H +ATOM 793 CB ILE X 50 6.037 10.348 1.623 1.00 0.00 P1 C +ATOM 794 HB ILE X 50 6.648 9.817 0.859 1.00 0.00 P1 H +ATOM 795 CG2 ILE X 50 6.841 10.266 2.932 1.00 0.00 P1 C +ATOM 796 HG21 ILE X 50 6.335 10.854 3.721 1.00 0.00 P1 H +ATOM 797 HG22 ILE X 50 7.870 10.652 2.781 1.00 0.00 P1 H +ATOM 798 HG23 ILE X 50 6.942 9.216 3.278 1.00 0.00 P1 H +ATOM 799 CG1 ILE X 50 4.669 9.631 1.737 1.00 0.00 P1 C +ATOM 800 HG11 ILE X 50 4.149 9.723 0.757 1.00 0.00 P1 H +ATOM 801 HG12 ILE X 50 4.047 10.149 2.499 1.00 0.00 P1 H +ATOM 802 CD ILE X 50 4.767 8.144 2.093 1.00 0.00 P1 C +ATOM 803 HD1 ILE X 50 5.132 8.006 3.131 1.00 0.00 P1 H +ATOM 804 HD2 ILE X 50 5.469 7.629 1.404 1.00 0.00 P1 H +ATOM 805 HD3 ILE X 50 3.770 7.660 2.009 1.00 0.00 P1 H +ATOM 806 C ILE X 50 6.750 12.811 1.723 1.00 0.00 P1 C +ATOM 807 O ILE X 50 6.362 13.588 2.595 1.00 0.00 P1 O +ATOM 808 N GLY X 51 8.019 12.855 1.258 1.00 0.00 P1 N +ATOM 809 HN GLY X 51 8.334 12.187 0.577 1.00 0.00 P1 H +ATOM 810 CA GLY X 51 8.944 13.924 1.580 1.00 0.00 P1 C +ATOM 811 HA1 GLY X 51 8.392 14.798 1.896 1.00 0.00 P1 H +ATOM 812 HA2 GLY X 51 9.512 14.108 0.679 1.00 0.00 P1 H +ATOM 813 C GLY X 51 9.935 13.588 2.662 1.00 0.00 P1 C +ATOM 814 O GLY X 51 11.104 13.950 2.555 1.00 0.00 P1 O +ATOM 815 N ARG X 52 9.502 12.927 3.757 1.00 0.00 P1 N +ATOM 816 HN ARG X 52 8.562 12.602 3.820 1.00 0.00 P1 H +ATOM 817 CA ARG X 52 10.384 12.620 4.870 1.00 0.00 P1 C +ATOM 818 HA ARG X 52 11.393 12.558 4.487 1.00 0.00 P1 H +ATOM 819 CB ARG X 52 10.347 13.683 6.017 1.00 0.00 P1 C +ATOM 820 HB1 ARG X 52 10.324 14.695 5.559 1.00 0.00 P1 H +ATOM 821 HB2 ARG X 52 11.307 13.611 6.575 1.00 0.00 P1 H +ATOM 822 CG ARG X 52 9.217 13.569 7.067 1.00 0.00 P1 C +ATOM 823 HG1 ARG X 52 9.464 14.236 7.924 1.00 0.00 P1 H +ATOM 824 HG2 ARG X 52 9.189 12.536 7.472 1.00 0.00 P1 H +ATOM 825 CD ARG X 52 7.836 13.977 6.545 1.00 0.00 P1 C +ATOM 826 HD1 ARG X 52 7.667 13.616 5.508 1.00 0.00 P1 H +ATOM 827 HD2 ARG X 52 7.745 15.086 6.534 1.00 0.00 P1 H +ATOM 828 NE ARG X 52 6.768 13.420 7.443 1.00 0.00 P1 N +ATOM 829 HE ARG X 52 6.409 14.008 8.164 1.00 0.00 P1 H +ATOM 830 CZ ARG X 52 6.049 12.312 7.120 1.00 0.00 P1 C +ATOM 831 NH1 ARG X 52 4.849 12.103 7.711 1.00 0.00 P1 N +ATOM 832 HH11 ARG X 52 4.496 12.773 8.359 1.00 0.00 P1 H +ATOM 833 HH12 ARG X 52 4.293 11.325 7.435 1.00 0.00 P1 H +ATOM 834 NH2 ARG X 52 6.488 11.417 6.209 1.00 0.00 P1 N +ATOM 835 HH21 ARG X 52 7.424 11.478 5.853 1.00 0.00 P1 H +ATOM 836 HH22 ARG X 52 5.941 10.616 5.991 1.00 0.00 P1 H +ATOM 837 C ARG X 52 10.014 11.246 5.376 1.00 0.00 P1 C +ATOM 838 O ARG X 52 8.967 10.753 4.965 1.00 0.00 P1 O +ATOM 839 N PRO X 53 10.762 10.568 6.248 1.00 0.00 P1 N +ATOM 840 CD PRO X 53 12.115 10.948 6.662 1.00 0.00 P1 C +ATOM 841 HD1 PRO X 53 12.034 11.632 7.534 1.00 0.00 P1 H +ATOM 842 HD2 PRO X 53 12.686 11.434 5.842 1.00 0.00 P1 H +ATOM 843 CA PRO X 53 10.427 9.216 6.676 1.00 0.00 P1 C +ATOM 844 HA PRO X 53 10.355 8.589 5.799 1.00 0.00 P1 H +ATOM 845 CB PRO X 53 11.589 8.817 7.600 1.00 0.00 P1 C +ATOM 846 HB1 PRO X 53 11.787 7.727 7.569 1.00 0.00 P1 H +ATOM 847 HB2 PRO X 53 11.385 9.124 8.650 1.00 0.00 P1 H +ATOM 848 CG PRO X 53 12.772 9.637 7.082 1.00 0.00 P1 C +ATOM 849 HG1 PRO X 53 13.557 9.780 7.850 1.00 0.00 P1 H +ATOM 850 HG2 PRO X 53 13.210 9.142 6.189 1.00 0.00 P1 H +ATOM 851 C PRO X 53 9.113 9.156 7.420 1.00 0.00 P1 C +ATOM 852 O PRO X 53 8.804 10.076 8.176 1.00 0.00 P1 O +ATOM 853 N LEU X 54 8.326 8.077 7.214 1.00 0.00 P1 N +ATOM 854 HN LEU X 54 8.587 7.366 6.556 1.00 0.00 P1 H +ATOM 855 CA LEU X 54 7.101 7.844 7.941 1.00 0.00 P1 C +ATOM 856 HA LEU X 54 6.531 8.757 7.918 1.00 0.00 P1 H +ATOM 857 CB LEU X 54 6.263 6.684 7.344 1.00 0.00 P1 C +ATOM 858 HB1 LEU X 54 5.480 6.379 8.069 1.00 0.00 P1 H +ATOM 859 HB2 LEU X 54 6.932 5.808 7.186 1.00 0.00 P1 H +ATOM 860 CG LEU X 54 5.543 7.002 6.016 1.00 0.00 P1 C +ATOM 861 HG LEU X 54 6.296 7.410 5.301 1.00 0.00 P1 H +ATOM 862 CD1 LEU X 54 4.963 5.716 5.400 1.00 0.00 P1 C +ATOM 863 HD11 LEU X 54 4.244 5.239 6.099 1.00 0.00 P1 H +ATOM 864 HD12 LEU X 54 5.778 4.997 5.176 1.00 0.00 P1 H +ATOM 865 HD13 LEU X 54 4.434 5.949 4.451 1.00 0.00 P1 H +ATOM 866 CD2 LEU X 54 4.427 8.048 6.194 1.00 0.00 P1 C +ATOM 867 HD21 LEU X 54 4.832 9.000 6.588 1.00 0.00 P1 H +ATOM 868 HD22 LEU X 54 3.659 7.668 6.901 1.00 0.00 P1 H +ATOM 869 HD23 LEU X 54 3.936 8.252 5.219 1.00 0.00 P1 H +ATOM 870 C LEU X 54 7.465 7.455 9.362 1.00 0.00 P1 C +ATOM 871 O LEU X 54 8.273 6.539 9.522 1.00 0.00 P1 O +ATOM 872 N PRO X 55 6.951 8.093 10.414 1.00 0.00 P1 N +ATOM 873 CD PRO X 55 6.028 9.227 10.344 1.00 0.00 P1 C +ATOM 874 HD1 PRO X 55 5.160 9.000 9.689 1.00 0.00 P1 H +ATOM 875 HD2 PRO X 55 6.584 10.110 9.958 1.00 0.00 P1 H +ATOM 876 CA PRO X 55 7.420 7.852 11.769 1.00 0.00 P1 C +ATOM 877 HA PRO X 55 8.502 7.839 11.785 1.00 0.00 P1 H +ATOM 878 CB PRO X 55 6.829 9.019 12.581 1.00 0.00 P1 C +ATOM 879 HB1 PRO X 55 7.564 9.856 12.584 1.00 0.00 P1 H +ATOM 880 HB2 PRO X 55 6.592 8.753 13.631 1.00 0.00 P1 H +ATOM 881 CG PRO X 55 5.593 9.458 11.790 1.00 0.00 P1 C +ATOM 882 HG1 PRO X 55 4.739 8.792 12.037 1.00 0.00 P1 H +ATOM 883 HG2 PRO X 55 5.314 10.512 11.989 1.00 0.00 P1 H +ATOM 884 C PRO X 55 6.909 6.523 12.275 1.00 0.00 P1 C +ATOM 885 O PRO X 55 5.794 6.134 11.929 1.00 0.00 P1 O +ATOM 886 N GLY X 56 7.725 5.814 13.088 1.00 0.00 P1 N +ATOM 887 HN GLY X 56 8.628 6.163 13.325 1.00 0.00 P1 H +ATOM 888 CA GLY X 56 7.348 4.564 13.722 1.00 0.00 P1 C +ATOM 889 HA1 GLY X 56 6.325 4.647 14.063 1.00 0.00 P1 H +ATOM 890 HA2 GLY X 56 8.044 4.397 14.530 1.00 0.00 P1 H +ATOM 891 C GLY X 56 7.434 3.381 12.800 1.00 0.00 P1 C +ATOM 892 O GLY X 56 6.799 2.360 13.050 1.00 0.00 P1 O +ATOM 893 N ARG X 57 8.210 3.501 11.704 1.00 0.00 P1 N +ATOM 894 HN ARG X 57 8.735 4.333 11.534 1.00 0.00 P1 H +ATOM 895 CA ARG X 57 8.312 2.504 10.665 1.00 0.00 P1 C +ATOM 896 HA ARG X 57 8.161 1.511 11.067 1.00 0.00 P1 H +ATOM 897 CB ARG X 57 7.333 2.819 9.505 1.00 0.00 P1 C +ATOM 898 HB1 ARG X 57 7.652 2.307 8.569 1.00 0.00 P1 H +ATOM 899 HB2 ARG X 57 7.355 3.915 9.316 1.00 0.00 P1 H +ATOM 900 CG ARG X 57 5.890 2.372 9.795 1.00 0.00 P1 C +ATOM 901 HG1 ARG X 57 5.683 2.385 10.884 1.00 0.00 P1 H +ATOM 902 HG2 ARG X 57 5.807 1.311 9.471 1.00 0.00 P1 H +ATOM 903 CD ARG X 57 4.798 3.179 9.084 1.00 0.00 P1 C +ATOM 904 HD1 ARG X 57 3.849 2.606 9.120 1.00 0.00 P1 H +ATOM 905 HD2 ARG X 57 5.072 3.395 8.029 1.00 0.00 P1 H +ATOM 906 NE ARG X 57 4.596 4.465 9.823 1.00 0.00 P1 N +ATOM 907 HE ARG X 57 5.313 4.785 10.446 1.00 0.00 P1 H +ATOM 908 CZ ARG X 57 3.524 5.277 9.631 1.00 0.00 P1 C +ATOM 909 NH1 ARG X 57 2.470 4.913 8.870 1.00 0.00 P1 N +ATOM 910 HH11 ARG X 57 2.386 3.965 8.548 1.00 0.00 P1 H +ATOM 911 HH12 ARG X 57 1.699 5.531 8.756 1.00 0.00 P1 H +ATOM 912 NH2 ARG X 57 3.528 6.497 10.216 1.00 0.00 P1 N +ATOM 913 HH21 ARG X 57 2.819 7.155 9.985 1.00 0.00 P1 H +ATOM 914 HH22 ARG X 57 4.320 6.730 10.788 1.00 0.00 P1 H +ATOM 915 C ARG X 57 9.710 2.604 10.122 1.00 0.00 P1 C +ATOM 916 O ARG X 57 10.310 3.677 10.162 1.00 0.00 P1 O +ATOM 917 N LYS X 58 10.260 1.493 9.568 1.00 0.00 P1 N +ATOM 918 HN LYS X 58 9.778 0.620 9.558 1.00 0.00 P1 H +ATOM 919 CA LYS X 58 11.489 1.561 8.798 1.00 0.00 P1 C +ATOM 920 HA LYS X 58 12.034 2.449 9.087 1.00 0.00 P1 H +ATOM 921 CB LYS X 58 12.495 0.381 8.912 1.00 0.00 P1 C +ATOM 922 HB1 LYS X 58 13.470 0.830 9.205 1.00 0.00 P1 H +ATOM 923 HB2 LYS X 58 12.676 -0.109 7.929 1.00 0.00 P1 H +ATOM 924 CG LYS X 58 12.140 -0.724 9.919 1.00 0.00 P1 C +ATOM 925 HG1 LYS X 58 11.587 -1.528 9.384 1.00 0.00 P1 H +ATOM 926 HG2 LYS X 58 11.479 -0.340 10.726 1.00 0.00 P1 H +ATOM 927 CD LYS X 58 13.384 -1.308 10.608 1.00 0.00 P1 C +ATOM 928 HD1 LYS X 58 14.159 -1.531 9.844 1.00 0.00 P1 H +ATOM 929 HD2 LYS X 58 13.089 -2.267 11.091 1.00 0.00 P1 H +ATOM 930 CE LYS X 58 13.935 -0.360 11.687 1.00 0.00 P1 C +ATOM 931 HE1 LYS X 58 13.151 -0.149 12.446 1.00 0.00 P1 H +ATOM 932 HE2 LYS X 58 14.272 0.599 11.240 1.00 0.00 P1 H +ATOM 933 NZ LYS X 58 15.091 -0.962 12.388 1.00 0.00 P1 N +ATOM 934 HZ1 LYS X 58 15.851 -1.152 11.703 1.00 0.00 P1 H +ATOM 935 HZ2 LYS X 58 14.800 -1.855 12.835 1.00 0.00 P1 H +ATOM 936 HZ3 LYS X 58 15.439 -0.308 13.118 1.00 0.00 P1 H +ATOM 937 C LYS X 58 11.078 1.722 7.368 1.00 0.00 P1 C +ATOM 938 O LYS X 58 10.244 0.979 6.855 1.00 0.00 P1 O +ATOM 939 N ASN X 59 11.652 2.740 6.707 1.00 0.00 P1 N +ATOM 940 HN ASN X 59 12.378 3.284 7.122 1.00 0.00 P1 H +ATOM 941 CA ASN X 59 11.249 3.151 5.391 1.00 0.00 P1 C +ATOM 942 HA ASN X 59 10.275 2.747 5.145 1.00 0.00 P1 H +ATOM 943 CB ASN X 59 11.233 4.693 5.249 1.00 0.00 P1 C +ATOM 944 HB1 ASN X 59 11.125 4.977 4.179 1.00 0.00 P1 H +ATOM 945 HB2 ASN X 59 12.188 5.107 5.629 1.00 0.00 P1 H +ATOM 946 CG ASN X 59 10.074 5.351 6.013 1.00 0.00 P1 C +ATOM 947 OD1 ASN X 59 9.248 6.033 5.400 1.00 0.00 P1 O +ATOM 948 ND2 ASN X 59 10.024 5.190 7.365 1.00 0.00 P1 N +ATOM 949 HD21 ASN X 59 9.311 5.650 7.898 1.00 0.00 P1 H +ATOM 950 HD22 ASN X 59 10.688 4.608 7.831 1.00 0.00 P1 H +ATOM 951 C ASN X 59 12.261 2.569 4.446 1.00 0.00 P1 C +ATOM 952 O ASN X 59 13.459 2.826 4.566 1.00 0.00 P1 O +ATOM 953 N ILE X 60 11.786 1.729 3.503 1.00 0.00 P1 N +ATOM 954 HN ILE X 60 10.811 1.502 3.448 1.00 0.00 P1 H +ATOM 955 CA ILE X 60 12.623 1.053 2.542 1.00 0.00 P1 C +ATOM 956 HA ILE X 60 13.647 1.378 2.653 1.00 0.00 P1 H +ATOM 957 CB ILE X 60 12.574 -0.463 2.686 1.00 0.00 P1 C +ATOM 958 HB ILE X 60 11.538 -0.824 2.494 1.00 0.00 P1 H +ATOM 959 CG2 ILE X 60 13.521 -1.111 1.648 1.00 0.00 P1 C +ATOM 960 HG21 ILE X 60 14.566 -0.774 1.813 1.00 0.00 P1 H +ATOM 961 HG22 ILE X 60 13.222 -0.844 0.614 1.00 0.00 P1 H +ATOM 962 HG23 ILE X 60 13.490 -2.218 1.724 1.00 0.00 P1 H +ATOM 963 CG1 ILE X 60 12.940 -0.840 4.147 1.00 0.00 P1 C +ATOM 964 HG11 ILE X 60 12.159 -0.440 4.831 1.00 0.00 P1 H +ATOM 965 HG12 ILE X 60 13.903 -0.354 4.416 1.00 0.00 P1 H +ATOM 966 CD ILE X 60 13.059 -2.342 4.398 1.00 0.00 P1 C +ATOM 967 HD1 ILE X 60 13.913 -2.778 3.841 1.00 0.00 P1 H +ATOM 968 HD2 ILE X 60 12.128 -2.849 4.069 1.00 0.00 P1 H +ATOM 969 HD3 ILE X 60 13.212 -2.547 5.479 1.00 0.00 P1 H +ATOM 970 C ILE X 60 12.126 1.502 1.196 1.00 0.00 P1 C +ATOM 971 O ILE X 60 10.943 1.380 0.885 1.00 0.00 P1 O +ATOM 972 N ILE X 61 13.021 2.089 0.376 1.00 0.00 P1 N +ATOM 973 HN ILE X 61 13.985 2.177 0.644 1.00 0.00 P1 H +ATOM 974 CA ILE X 61 12.660 2.704 -0.878 1.00 0.00 P1 C +ATOM 975 HA ILE X 61 11.583 2.733 -0.971 1.00 0.00 P1 H +ATOM 976 CB ILE X 61 13.189 4.126 -1.052 1.00 0.00 P1 C +ATOM 977 HB ILE X 61 14.255 4.089 -1.383 1.00 0.00 P1 H +ATOM 978 CG2 ILE X 61 12.373 4.822 -2.165 1.00 0.00 P1 C +ATOM 979 HG21 ILE X 61 11.296 4.857 -1.897 1.00 0.00 P1 H +ATOM 980 HG22 ILE X 61 12.478 4.283 -3.129 1.00 0.00 P1 H +ATOM 981 HG23 ILE X 61 12.735 5.863 -2.305 1.00 0.00 P1 H +ATOM 982 CG1 ILE X 61 13.213 4.943 0.270 1.00 0.00 P1 C +ATOM 983 HG11 ILE X 61 13.607 5.956 0.027 1.00 0.00 P1 H +ATOM 984 HG12 ILE X 61 13.946 4.474 0.964 1.00 0.00 P1 H +ATOM 985 CD ILE X 61 11.881 5.114 1.011 1.00 0.00 P1 C +ATOM 986 HD1 ILE X 61 11.459 4.141 1.330 1.00 0.00 P1 H +ATOM 987 HD2 ILE X 61 11.141 5.624 0.362 1.00 0.00 P1 H +ATOM 988 HD3 ILE X 61 12.030 5.739 1.918 1.00 0.00 P1 H +ATOM 989 C ILE X 61 13.220 1.827 -1.967 1.00 0.00 P1 C +ATOM 990 O ILE X 61 14.423 1.582 -2.023 1.00 0.00 P1 O +ATOM 991 N LEU X 62 12.344 1.323 -2.858 1.00 0.00 P1 N +ATOM 992 HN LEU X 62 11.365 1.528 -2.785 1.00 0.00 P1 H +ATOM 993 CA LEU X 62 12.718 0.460 -3.950 1.00 0.00 P1 C +ATOM 994 HA LEU X 62 13.682 0.022 -3.742 1.00 0.00 P1 H +ATOM 995 CB LEU X 62 11.685 -0.683 -4.099 1.00 0.00 P1 C +ATOM 996 HB1 LEU X 62 10.670 -0.243 -4.221 1.00 0.00 P1 H +ATOM 997 HB2 LEU X 62 11.682 -1.246 -3.139 1.00 0.00 P1 H +ATOM 998 CG LEU X 62 11.921 -1.699 -5.240 1.00 0.00 P1 C +ATOM 999 HG LEU X 62 11.666 -1.191 -6.200 1.00 0.00 P1 H +ATOM 1000 CD1 LEU X 62 13.369 -2.196 -5.357 1.00 0.00 P1 C +ATOM 1001 HD11 LEU X 62 13.671 -2.719 -4.428 1.00 0.00 P1 H +ATOM 1002 HD12 LEU X 62 14.075 -1.363 -5.550 1.00 0.00 P1 H +ATOM 1003 HD13 LEU X 62 13.454 -2.911 -6.203 1.00 0.00 P1 H +ATOM 1004 CD2 LEU X 62 10.985 -2.907 -5.077 1.00 0.00 P1 C +ATOM 1005 HD21 LEU X 62 9.927 -2.571 -5.063 1.00 0.00 P1 H +ATOM 1006 HD22 LEU X 62 11.209 -3.443 -4.130 1.00 0.00 P1 H +ATOM 1007 HD23 LEU X 62 11.118 -3.615 -5.922 1.00 0.00 P1 H +ATOM 1008 C LEU X 62 12.850 1.324 -5.184 1.00 0.00 P1 C +ATOM 1009 O LEU X 62 11.866 1.848 -5.706 1.00 0.00 P1 O +ATOM 1010 N SER X 63 14.112 1.537 -5.631 1.00 0.00 P1 N +ATOM 1011 HN SER X 63 14.890 1.042 -5.235 1.00 0.00 P1 H +ATOM 1012 CA SER X 63 14.458 2.545 -6.611 1.00 0.00 P1 C +ATOM 1013 HA SER X 63 13.601 2.757 -7.236 1.00 0.00 P1 H +ATOM 1014 CB SER X 63 14.973 3.834 -5.920 1.00 0.00 P1 C +ATOM 1015 HB1 SER X 63 15.939 3.632 -5.406 1.00 0.00 P1 H +ATOM 1016 HB2 SER X 63 14.235 4.147 -5.149 1.00 0.00 P1 H +ATOM 1017 OG SER X 63 15.136 4.909 -6.841 1.00 0.00 P1 O +ATOM 1018 HG1 SER X 63 15.864 5.445 -6.509 1.00 0.00 P1 H +ATOM 1019 C SER X 63 15.571 2.007 -7.477 1.00 0.00 P1 C +ATOM 1020 O SER X 63 16.360 1.179 -7.033 1.00 0.00 P1 O +ATOM 1021 N SER X 64 15.676 2.475 -8.743 1.00 0.00 P1 N +ATOM 1022 HN SER X 64 15.060 3.175 -9.094 1.00 0.00 P1 H +ATOM 1023 CA SER X 64 16.684 2.004 -9.675 1.00 0.00 P1 C +ATOM 1024 HA SER X 64 16.837 0.949 -9.495 1.00 0.00 P1 H +ATOM 1025 CB SER X 64 16.254 2.144 -11.162 1.00 0.00 P1 C +ATOM 1026 HB1 SER X 64 15.389 1.469 -11.343 1.00 0.00 P1 H +ATOM 1027 HB2 SER X 64 17.084 1.830 -11.831 1.00 0.00 P1 H +ATOM 1028 OG SER X 64 15.854 3.473 -11.491 1.00 0.00 P1 O +ATOM 1029 HG1 SER X 64 15.713 3.492 -12.443 1.00 0.00 P1 H +ATOM 1030 C SER X 64 18.022 2.678 -9.452 1.00 0.00 P1 C +ATOM 1031 O SER X 64 19.039 2.000 -9.316 1.00 0.00 P1 O +ATOM 1032 N GLN X 65 18.066 4.030 -9.410 1.00 0.00 P1 N +ATOM 1033 HN GLN X 65 17.234 4.567 -9.521 1.00 0.00 P1 H +ATOM 1034 CA GLN X 65 19.301 4.771 -9.230 1.00 0.00 P1 C +ATOM 1035 HA GLN X 65 20.122 4.131 -9.522 1.00 0.00 P1 H +ATOM 1036 CB GLN X 65 19.333 6.013 -10.166 1.00 0.00 P1 C +ATOM 1037 HB1 GLN X 65 19.133 6.930 -9.570 1.00 0.00 P1 H +ATOM 1038 HB2 GLN X 65 18.497 5.930 -10.894 1.00 0.00 P1 H +ATOM 1039 CG GLN X 65 20.675 6.190 -10.932 1.00 0.00 P1 C +ATOM 1040 HG1 GLN X 65 21.450 5.526 -10.499 1.00 0.00 P1 H +ATOM 1041 HG2 GLN X 65 21.006 7.244 -10.798 1.00 0.00 P1 H +ATOM 1042 CD GLN X 65 20.627 5.906 -12.437 1.00 0.00 P1 C +ATOM 1043 OE1 GLN X 65 19.632 5.456 -13.007 1.00 0.00 P1 O +ATOM 1044 NE2 GLN X 65 21.783 6.196 -13.105 1.00 0.00 P1 N +ATOM 1045 HE21 GLN X 65 21.819 6.035 -14.089 1.00 0.00 P1 H +ATOM 1046 HE22 GLN X 65 22.570 6.562 -12.612 1.00 0.00 P1 H +ATOM 1047 C GLN X 65 19.466 5.064 -7.733 1.00 0.00 P1 C +ATOM 1048 O GLN X 65 18.530 4.769 -6.986 1.00 0.00 P1 O +ATOM 1049 N PRO X 66 20.593 5.555 -7.187 1.00 0.00 P1 N +ATOM 1050 CD PRO X 66 21.729 6.147 -7.892 1.00 0.00 P1 C +ATOM 1051 HD1 PRO X 66 21.397 7.015 -8.500 1.00 0.00 P1 H +ATOM 1052 HD2 PRO X 66 22.213 5.368 -8.518 1.00 0.00 P1 H +ATOM 1053 CA PRO X 66 20.859 5.458 -5.766 1.00 0.00 P1 C +ATOM 1054 HA PRO X 66 20.561 4.486 -5.399 1.00 0.00 P1 H +ATOM 1055 CB PRO X 66 22.375 5.702 -5.650 1.00 0.00 P1 C +ATOM 1056 HB1 PRO X 66 22.904 4.737 -5.808 1.00 0.00 P1 H +ATOM 1057 HB2 PRO X 66 22.690 6.124 -4.674 1.00 0.00 P1 H +ATOM 1058 CG PRO X 66 22.696 6.633 -6.814 1.00 0.00 P1 C +ATOM 1059 HG1 PRO X 66 22.443 7.680 -6.533 1.00 0.00 P1 H +ATOM 1060 HG2 PRO X 66 23.756 6.580 -7.130 1.00 0.00 P1 H +ATOM 1061 C PRO X 66 20.105 6.507 -5.006 1.00 0.00 P1 C +ATOM 1062 O PRO X 66 19.463 7.383 -5.587 1.00 0.00 P1 O +ATOM 1063 N GLY X 67 20.196 6.406 -3.671 1.00 0.00 P1 N +ATOM 1064 HN GLY X 67 20.753 5.696 -3.249 1.00 0.00 P1 H +ATOM 1065 CA GLY X 67 19.518 7.286 -2.774 1.00 0.00 P1 C +ATOM 1066 HA1 GLY X 67 19.485 6.778 -1.827 1.00 0.00 P1 H +ATOM 1067 HA2 GLY X 67 18.543 7.527 -3.176 1.00 0.00 P1 H +ATOM 1068 C GLY X 67 20.274 8.537 -2.550 1.00 0.00 P1 C +ATOM 1069 O GLY X 67 21.481 8.623 -2.769 1.00 0.00 P1 O +ATOM 1070 N THR X 68 19.532 9.551 -2.087 1.00 0.00 P1 N +ATOM 1071 HN THR X 68 18.546 9.450 -1.975 1.00 0.00 P1 H +ATOM 1072 CA THR X 68 20.057 10.856 -1.787 1.00 0.00 P1 C +ATOM 1073 HA THR X 68 21.135 10.820 -1.710 1.00 0.00 P1 H +ATOM 1074 CB THR X 68 19.650 11.886 -2.836 1.00 0.00 P1 C +ATOM 1075 HB THR X 68 19.962 12.909 -2.522 1.00 0.00 P1 H +ATOM 1076 OG1 THR X 68 18.243 11.875 -3.068 1.00 0.00 P1 O +ATOM 1077 HG1 THR X 68 17.853 12.341 -2.323 1.00 0.00 P1 H +ATOM 1078 CG2 THR X 68 20.365 11.555 -4.163 1.00 0.00 P1 C +ATOM 1079 HG21 THR X 68 20.030 10.574 -4.562 1.00 0.00 P1 H +ATOM 1080 HG22 THR X 68 21.464 11.519 -4.013 1.00 0.00 P1 H +ATOM 1081 HG23 THR X 68 20.137 12.332 -4.923 1.00 0.00 P1 H +ATOM 1082 C THR X 68 19.522 11.224 -0.426 1.00 0.00 P1 C +ATOM 1083 O THR X 68 19.246 12.391 -0.154 1.00 0.00 P1 O +ATOM 1084 N ASP X 69 19.353 10.217 0.463 1.00 0.00 P1 N +ATOM 1085 HN ASP X 69 19.586 9.276 0.232 1.00 0.00 P1 H +ATOM 1086 CA ASP X 69 18.836 10.441 1.789 1.00 0.00 P1 C +ATOM 1087 HA ASP X 69 19.288 11.345 2.177 1.00 0.00 P1 H +ATOM 1088 CB ASP X 69 17.286 10.548 1.794 1.00 0.00 P1 C +ATOM 1089 HB1 ASP X 69 16.809 9.550 1.721 1.00 0.00 P1 H +ATOM 1090 HB2 ASP X 69 16.967 11.145 0.911 1.00 0.00 P1 H +ATOM 1091 CG ASP X 69 16.791 11.266 3.042 1.00 0.00 P1 C +ATOM 1092 OD1 ASP X 69 17.075 10.789 4.171 1.00 0.00 P1 O +ATOM 1093 OD2 ASP X 69 16.113 12.315 2.890 1.00 0.00 P1 O +ATOM 1094 C ASP X 69 19.275 9.277 2.648 1.00 0.00 P1 C +ATOM 1095 O ASP X 69 18.921 8.131 2.383 1.00 0.00 P1 O +ATOM 1096 N ASP X 70 20.056 9.544 3.715 1.00 0.00 P1 N +ATOM 1097 HN ASP X 70 20.342 10.474 3.929 1.00 0.00 P1 H +ATOM 1098 CA ASP X 70 20.608 8.510 4.566 1.00 0.00 P1 C +ATOM 1099 HA ASP X 70 20.797 7.623 3.975 1.00 0.00 P1 H +ATOM 1100 CB ASP X 70 21.927 8.973 5.237 1.00 0.00 P1 C +ATOM 1101 HB1 ASP X 70 22.267 8.230 5.991 1.00 0.00 P1 H +ATOM 1102 HB2 ASP X 70 21.779 9.949 5.745 1.00 0.00 P1 H +ATOM 1103 CG ASP X 70 23.051 9.105 4.212 1.00 0.00 P1 C +ATOM 1104 OD1 ASP X 70 23.031 8.362 3.195 1.00 0.00 P1 O +ATOM 1105 OD2 ASP X 70 23.959 9.941 4.455 1.00 0.00 P1 O +ATOM 1106 C ASP X 70 19.655 8.105 5.668 1.00 0.00 P1 C +ATOM 1107 O ASP X 70 19.976 7.235 6.475 1.00 0.00 P1 O +ATOM 1108 N ARG X 71 18.446 8.705 5.741 1.00 0.00 P1 N +ATOM 1109 HN ARG X 71 18.158 9.411 5.087 1.00 0.00 P1 H +ATOM 1110 CA ARG X 71 17.508 8.399 6.798 1.00 0.00 P1 C +ATOM 1111 HA ARG X 71 18.057 8.188 7.707 1.00 0.00 P1 H +ATOM 1112 CB ARG X 71 16.567 9.590 7.083 1.00 0.00 P1 C +ATOM 1113 HB1 ARG X 71 15.845 9.314 7.884 1.00 0.00 P1 H +ATOM 1114 HB2 ARG X 71 15.985 9.813 6.164 1.00 0.00 P1 H +ATOM 1115 CG ARG X 71 17.334 10.848 7.542 1.00 0.00 P1 C +ATOM 1116 HG1 ARG X 71 18.163 11.063 6.832 1.00 0.00 P1 H +ATOM 1117 HG2 ARG X 71 17.793 10.634 8.533 1.00 0.00 P1 H +ATOM 1118 CD ARG X 71 16.460 12.101 7.660 1.00 0.00 P1 C +ATOM 1119 HD1 ARG X 71 17.051 12.953 8.062 1.00 0.00 P1 H +ATOM 1120 HD2 ARG X 71 15.581 11.902 8.311 1.00 0.00 P1 H +ATOM 1121 NE ARG X 71 15.994 12.448 6.279 1.00 0.00 P1 N +ATOM 1122 HE ARG X 71 16.359 11.917 5.497 1.00 0.00 P1 H +ATOM 1123 CZ ARG X 71 15.083 13.419 6.013 1.00 0.00 P1 C +ATOM 1124 NH1 ARG X 71 14.549 14.177 6.997 1.00 0.00 P1 N +ATOM 1125 HH11 ARG X 71 14.853 14.039 7.935 1.00 0.00 P1 H +ATOM 1126 HH12 ARG X 71 13.912 14.907 6.767 1.00 0.00 P1 H +ATOM 1127 NH2 ARG X 71 14.705 13.629 4.732 1.00 0.00 P1 N +ATOM 1128 HH21 ARG X 71 14.058 14.348 4.498 1.00 0.00 P1 H +ATOM 1129 HH22 ARG X 71 15.189 13.117 3.994 1.00 0.00 P1 H +ATOM 1130 C ARG X 71 16.680 7.176 6.471 1.00 0.00 P1 C +ATOM 1131 O ARG X 71 16.005 6.641 7.348 1.00 0.00 P1 O +ATOM 1132 N VAL X 72 16.712 6.705 5.203 1.00 0.00 P1 N +ATOM 1133 HN VAL X 72 17.303 7.126 4.517 1.00 0.00 P1 H +ATOM 1134 CA VAL X 72 15.934 5.570 4.753 1.00 0.00 P1 C +ATOM 1135 HA VAL X 72 15.499 5.070 5.607 1.00 0.00 P1 H +ATOM 1136 CB VAL X 72 14.801 5.975 3.814 1.00 0.00 P1 C +ATOM 1137 HB VAL X 72 14.188 5.082 3.558 1.00 0.00 P1 H +ATOM 1138 CG1 VAL X 72 13.895 6.985 4.545 1.00 0.00 P1 C +ATOM 1139 HG11 VAL X 72 14.406 7.967 4.637 1.00 0.00 P1 H +ATOM 1140 HG12 VAL X 72 13.644 6.625 5.564 1.00 0.00 P1 H +ATOM 1141 HG13 VAL X 72 12.956 7.136 3.974 1.00 0.00 P1 H +ATOM 1142 CG2 VAL X 72 15.342 6.595 2.512 1.00 0.00 P1 C +ATOM 1143 HG21 VAL X 72 15.875 5.833 1.906 1.00 0.00 P1 H +ATOM 1144 HG22 VAL X 72 16.036 7.435 2.725 1.00 0.00 P1 H +ATOM 1145 HG23 VAL X 72 14.503 6.994 1.905 1.00 0.00 P1 H +ATOM 1146 C VAL X 72 16.860 4.570 4.094 1.00 0.00 P1 C +ATOM 1147 O VAL X 72 18.026 4.861 3.832 1.00 0.00 P1 O +ATOM 1148 N THR X 73 16.354 3.344 3.821 1.00 0.00 P1 N +ATOM 1149 HN THR X 73 15.408 3.115 4.055 1.00 0.00 P1 H +ATOM 1150 CA THR X 73 17.125 2.281 3.195 1.00 0.00 P1 C +ATOM 1151 HA THR X 73 18.181 2.489 3.293 1.00 0.00 P1 H +ATOM 1152 CB THR X 73 16.833 0.907 3.788 1.00 0.00 P1 C +ATOM 1153 HB THR X 73 15.760 0.650 3.644 1.00 0.00 P1 H +ATOM 1154 OG1 THR X 73 17.101 0.920 5.184 1.00 0.00 P1 O +ATOM 1155 HG1 THR X 73 16.797 0.075 5.523 1.00 0.00 P1 H +ATOM 1156 CG2 THR X 73 17.719 -0.182 3.150 1.00 0.00 P1 C +ATOM 1157 HG21 THR X 73 18.793 0.075 3.271 1.00 0.00 P1 H +ATOM 1158 HG22 THR X 73 17.503 -0.293 2.068 1.00 0.00 P1 H +ATOM 1159 HG23 THR X 73 17.538 -1.162 3.636 1.00 0.00 P1 H +ATOM 1160 C THR X 73 16.757 2.273 1.736 1.00 0.00 P1 C +ATOM 1161 O THR X 73 15.580 2.267 1.396 1.00 0.00 P1 O +ATOM 1162 N TRP X 74 17.755 2.280 0.826 1.00 0.00 P1 N +ATOM 1163 HN TRP X 74 18.713 2.278 1.098 1.00 0.00 P1 H +ATOM 1164 CA TRP X 74 17.509 2.268 -0.600 1.00 0.00 P1 C +ATOM 1165 HA TRP X 74 16.458 2.418 -0.805 1.00 0.00 P1 H +ATOM 1166 CB TRP X 74 18.317 3.334 -1.368 1.00 0.00 P1 C +ATOM 1167 HB1 TRP X 74 18.094 3.269 -2.456 1.00 0.00 P1 H +ATOM 1168 HB2 TRP X 74 19.405 3.156 -1.220 1.00 0.00 P1 H +ATOM 1169 CG TRP X 74 17.998 4.723 -0.877 1.00 0.00 P1 C +ATOM 1170 CD1 TRP X 74 18.467 5.345 0.244 1.00 0.00 P1 C +ATOM 1171 HD1 TRP X 74 19.161 4.911 0.950 1.00 0.00 P1 H +ATOM 1172 NE1 TRP X 74 17.920 6.596 0.355 1.00 0.00 P1 N +ATOM 1173 HE1 TRP X 74 18.117 7.222 1.090 1.00 0.00 P1 H +ATOM 1174 CE2 TRP X 74 17.072 6.808 -0.705 1.00 0.00 P1 C +ATOM 1175 CD2 TRP X 74 17.093 5.647 -1.508 1.00 0.00 P1 C +ATOM 1176 CE3 TRP X 74 16.348 5.568 -2.680 1.00 0.00 P1 C +ATOM 1177 HE3 TRP X 74 16.355 4.688 -3.303 1.00 0.00 P1 H +ATOM 1178 CZ3 TRP X 74 15.597 6.691 -3.055 1.00 0.00 P1 C +ATOM 1179 HZ3 TRP X 74 15.023 6.666 -3.970 1.00 0.00 P1 H +ATOM 1180 CZ2 TRP X 74 16.310 7.912 -1.064 1.00 0.00 P1 C +ATOM 1181 HZ2 TRP X 74 16.286 8.809 -0.465 1.00 0.00 P1 H +ATOM 1182 CH2 TRP X 74 15.583 7.848 -2.261 1.00 0.00 P1 C +ATOM 1183 HH2 TRP X 74 15.009 8.703 -2.583 1.00 0.00 P1 H +ATOM 1184 C TRP X 74 17.907 0.919 -1.102 1.00 0.00 P1 C +ATOM 1185 O TRP X 74 18.996 0.438 -0.798 1.00 0.00 P1 O +ATOM 1186 N VAL X 75 17.010 0.270 -1.866 1.00 0.00 P1 N +ATOM 1187 HN VAL X 75 16.122 0.676 -2.094 1.00 0.00 P1 H +ATOM 1188 CA VAL X 75 17.243 -1.053 -2.386 1.00 0.00 P1 C +ATOM 1189 HA VAL X 75 18.288 -1.312 -2.277 1.00 0.00 P1 H +ATOM 1190 CB VAL X 75 16.413 -2.132 -1.704 1.00 0.00 P1 C +ATOM 1191 HB VAL X 75 16.583 -3.111 -2.207 1.00 0.00 P1 H +ATOM 1192 CG1 VAL X 75 16.888 -2.258 -0.243 1.00 0.00 P1 C +ATOM 1193 HG11 VAL X 75 16.631 -1.341 0.327 1.00 0.00 P1 H +ATOM 1194 HG12 VAL X 75 17.988 -2.402 -0.201 1.00 0.00 P1 H +ATOM 1195 HG13 VAL X 75 16.399 -3.123 0.251 1.00 0.00 P1 H +ATOM 1196 CG2 VAL X 75 14.913 -1.795 -1.765 1.00 0.00 P1 C +ATOM 1197 HG21 VAL X 75 14.554 -1.762 -2.810 1.00 0.00 P1 H +ATOM 1198 HG22 VAL X 75 14.706 -0.818 -1.284 1.00 0.00 P1 H +ATOM 1199 HG23 VAL X 75 14.330 -2.557 -1.219 1.00 0.00 P1 H +ATOM 1200 C VAL X 75 16.961 -1.012 -3.856 1.00 0.00 P1 C +ATOM 1201 O VAL X 75 16.127 -0.241 -4.331 1.00 0.00 P1 O +ATOM 1202 N LYS X 76 17.699 -1.841 -4.619 1.00 0.00 P1 N +ATOM 1203 HN LYS X 76 18.389 -2.446 -4.216 1.00 0.00 P1 H +ATOM 1204 CA LYS X 76 17.657 -1.832 -6.059 1.00 0.00 P1 C +ATOM 1205 HA LYS X 76 17.199 -0.921 -6.405 1.00 0.00 P1 H +ATOM 1206 CB LYS X 76 19.091 -1.869 -6.629 1.00 0.00 P1 C +ATOM 1207 HB1 LYS X 76 19.074 -2.072 -7.723 1.00 0.00 P1 H +ATOM 1208 HB2 LYS X 76 19.662 -2.682 -6.130 1.00 0.00 P1 H +ATOM 1209 CG LYS X 76 19.788 -0.516 -6.394 1.00 0.00 P1 C +ATOM 1210 HG1 LYS X 76 19.599 -0.184 -5.348 1.00 0.00 P1 H +ATOM 1211 HG2 LYS X 76 19.324 0.238 -7.070 1.00 0.00 P1 H +ATOM 1212 CD LYS X 76 21.307 -0.532 -6.604 1.00 0.00 P1 C +ATOM 1213 HD1 LYS X 76 21.521 -0.939 -7.617 1.00 0.00 P1 H +ATOM 1214 HD2 LYS X 76 21.759 -1.216 -5.851 1.00 0.00 P1 H +ATOM 1215 CE LYS X 76 21.913 0.872 -6.477 1.00 0.00 P1 C +ATOM 1216 HE1 LYS X 76 21.687 1.302 -5.477 1.00 0.00 P1 H +ATOM 1217 HE2 LYS X 76 21.503 1.543 -7.262 1.00 0.00 P1 H +ATOM 1218 NZ LYS X 76 23.384 0.827 -6.632 1.00 0.00 P1 N +ATOM 1219 HZ1 LYS X 76 23.620 0.430 -7.564 1.00 0.00 P1 H +ATOM 1220 HZ2 LYS X 76 23.790 0.224 -5.888 1.00 0.00 P1 H +ATOM 1221 HZ3 LYS X 76 23.778 1.786 -6.554 1.00 0.00 P1 H +ATOM 1222 C LYS X 76 16.799 -2.955 -6.575 1.00 0.00 P1 C +ATOM 1223 O LYS X 76 16.387 -2.927 -7.734 1.00 0.00 P1 O +ATOM 1224 N SER X 77 16.472 -3.959 -5.726 1.00 0.00 P1 N +ATOM 1225 HN SER X 77 16.805 -3.971 -4.786 1.00 0.00 P1 H +ATOM 1226 CA SER X 77 15.624 -5.057 -6.139 1.00 0.00 P1 C +ATOM 1227 HA SER X 77 15.034 -4.742 -6.989 1.00 0.00 P1 H +ATOM 1228 CB SER X 77 16.430 -6.313 -6.566 1.00 0.00 P1 C +ATOM 1229 HB1 SER X 77 17.149 -6.025 -7.365 1.00 0.00 P1 H +ATOM 1230 HB2 SER X 77 15.754 -7.088 -6.987 1.00 0.00 P1 H +ATOM 1231 OG SER X 77 17.157 -6.887 -5.483 1.00 0.00 P1 O +ATOM 1232 HG1 SER X 77 17.914 -6.308 -5.328 1.00 0.00 P1 H +ATOM 1233 C SER X 77 14.630 -5.438 -5.067 1.00 0.00 P1 C +ATOM 1234 O SER X 77 14.693 -4.997 -3.920 1.00 0.00 P1 O +ATOM 1235 N VAL X 78 13.681 -6.314 -5.468 1.00 0.00 P1 N +ATOM 1236 HN VAL X 78 13.672 -6.618 -6.416 1.00 0.00 P1 H +ATOM 1237 CA VAL X 78 12.625 -6.900 -4.672 1.00 0.00 P1 C +ATOM 1238 HA VAL X 78 12.069 -6.101 -4.202 1.00 0.00 P1 H +ATOM 1239 CB VAL X 78 11.701 -7.707 -5.585 1.00 0.00 P1 C +ATOM 1240 HB VAL X 78 12.318 -8.354 -6.251 1.00 0.00 P1 H +ATOM 1241 CG1 VAL X 78 10.731 -8.625 -4.810 1.00 0.00 P1 C +ATOM 1242 HG11 VAL X 78 10.147 -8.033 -4.077 1.00 0.00 P1 H +ATOM 1243 HG12 VAL X 78 11.276 -9.428 -4.271 1.00 0.00 P1 H +ATOM 1244 HG13 VAL X 78 10.019 -9.103 -5.516 1.00 0.00 P1 H +ATOM 1245 CG2 VAL X 78 10.915 -6.708 -6.462 1.00 0.00 P1 C +ATOM 1246 HG21 VAL X 78 11.594 -6.078 -7.073 1.00 0.00 P1 H +ATOM 1247 HG22 VAL X 78 10.289 -6.046 -5.826 1.00 0.00 P1 H +ATOM 1248 HG23 VAL X 78 10.245 -7.261 -7.154 1.00 0.00 P1 H +ATOM 1249 C VAL X 78 13.203 -7.763 -3.573 1.00 0.00 P1 C +ATOM 1250 O VAL X 78 12.789 -7.672 -2.421 1.00 0.00 P1 O +ATOM 1251 N ASP X 79 14.201 -8.611 -3.893 1.00 0.00 P1 N +ATOM 1252 HN ASP X 79 14.543 -8.690 -4.827 1.00 0.00 P1 H +ATOM 1253 CA ASP X 79 14.776 -9.543 -2.945 1.00 0.00 P1 C +ATOM 1254 HA ASP X 79 13.966 -9.993 -2.384 1.00 0.00 P1 H +ATOM 1255 CB ASP X 79 15.545 -10.665 -3.678 1.00 0.00 P1 C +ATOM 1256 HB1 ASP X 79 15.898 -11.434 -2.961 1.00 0.00 P1 H +ATOM 1257 HB2 ASP X 79 16.416 -10.246 -4.225 1.00 0.00 P1 H +ATOM 1258 CG ASP X 79 14.593 -11.319 -4.680 1.00 0.00 P1 C +ATOM 1259 OD1 ASP X 79 13.554 -11.886 -4.243 1.00 0.00 P1 O +ATOM 1260 OD2 ASP X 79 14.875 -11.220 -5.903 1.00 0.00 P1 O +ATOM 1261 C ASP X 79 15.670 -8.829 -1.948 1.00 0.00 P1 C +ATOM 1262 O ASP X 79 15.757 -9.218 -0.785 1.00 0.00 P1 O +ATOM 1263 N GLU X 80 16.306 -7.716 -2.379 1.00 0.00 P1 N +ATOM 1264 HN GLU X 80 16.234 -7.446 -3.338 1.00 0.00 P1 H +ATOM 1265 CA GLU X 80 17.100 -6.828 -1.554 1.00 0.00 P1 C +ATOM 1266 HA GLU X 80 17.807 -7.427 -0.998 1.00 0.00 P1 H +ATOM 1267 CB GLU X 80 17.860 -5.859 -2.484 1.00 0.00 P1 C +ATOM 1268 HB1 GLU X 80 17.128 -5.202 -3.003 1.00 0.00 P1 H +ATOM 1269 HB2 GLU X 80 18.344 -6.497 -3.260 1.00 0.00 P1 H +ATOM 1270 CG GLU X 80 18.981 -4.999 -1.867 1.00 0.00 P1 C +ATOM 1271 HG1 GLU X 80 19.763 -5.643 -1.417 1.00 0.00 P1 H +ATOM 1272 HG2 GLU X 80 18.570 -4.336 -1.081 1.00 0.00 P1 H +ATOM 1273 CD GLU X 80 19.619 -4.142 -2.966 1.00 0.00 P1 C +ATOM 1274 OE1 GLU X 80 20.219 -3.089 -2.629 1.00 0.00 P1 O +ATOM 1275 OE2 GLU X 80 19.481 -4.508 -4.165 1.00 0.00 P1 O +ATOM 1276 C GLU X 80 16.224 -6.075 -0.572 1.00 0.00 P1 C +ATOM 1277 O GLU X 80 16.606 -5.860 0.576 1.00 0.00 P1 O +ATOM 1278 N ALA X 81 14.988 -5.708 -0.990 1.00 0.00 P1 N +ATOM 1279 HN ALA X 81 14.710 -5.860 -1.938 1.00 0.00 P1 H +ATOM 1280 CA ALA X 81 13.989 -5.088 -0.145 1.00 0.00 P1 C +ATOM 1281 HA ALA X 81 14.425 -4.196 0.281 1.00 0.00 P1 H +ATOM 1282 CB ALA X 81 12.734 -4.711 -0.952 1.00 0.00 P1 C +ATOM 1283 HB1 ALA X 81 12.191 -5.619 -1.279 1.00 0.00 P1 H +ATOM 1284 HB2 ALA X 81 13.016 -4.137 -1.859 1.00 0.00 P1 H +ATOM 1285 HB3 ALA X 81 12.053 -4.082 -0.341 1.00 0.00 P1 H +ATOM 1286 C ALA X 81 13.568 -5.988 0.991 1.00 0.00 P1 C +ATOM 1287 O ALA X 81 13.541 -5.566 2.144 1.00 0.00 P1 O +ATOM 1288 N ILE X 82 13.271 -7.270 0.677 1.00 0.00 P1 N +ATOM 1289 HN ILE X 82 13.304 -7.561 -0.279 1.00 0.00 P1 H +ATOM 1290 CA ILE X 82 12.882 -8.301 1.621 1.00 0.00 P1 C +ATOM 1291 HA ILE X 82 12.043 -7.927 2.191 1.00 0.00 P1 H +ATOM 1292 CB ILE X 82 12.454 -9.573 0.886 1.00 0.00 P1 C +ATOM 1293 HB ILE X 82 13.272 -9.879 0.194 1.00 0.00 P1 H +ATOM 1294 CG2 ILE X 82 12.195 -10.732 1.877 1.00 0.00 P1 C +ATOM 1295 HG21 ILE X 82 11.426 -10.436 2.622 1.00 0.00 P1 H +ATOM 1296 HG22 ILE X 82 13.120 -11.021 2.417 1.00 0.00 P1 H +ATOM 1297 HG23 ILE X 82 11.833 -11.631 1.338 1.00 0.00 P1 H +ATOM 1298 CG1 ILE X 82 11.192 -9.272 0.038 1.00 0.00 P1 C +ATOM 1299 HG11 ILE X 82 11.338 -8.332 -0.535 1.00 0.00 P1 H +ATOM 1300 HG12 ILE X 82 10.334 -9.103 0.724 1.00 0.00 P1 H +ATOM 1301 CD ILE X 82 10.839 -10.373 -0.968 1.00 0.00 P1 C +ATOM 1302 HD1 ILE X 82 10.596 -11.324 -0.451 1.00 0.00 P1 H +ATOM 1303 HD2 ILE X 82 11.691 -10.551 -1.660 1.00 0.00 P1 H +ATOM 1304 HD3 ILE X 82 9.957 -10.068 -1.572 1.00 0.00 P1 H +ATOM 1305 C ILE X 82 14.009 -8.573 2.601 1.00 0.00 P1 C +ATOM 1306 O ILE X 82 13.784 -8.651 3.808 1.00 0.00 P1 O +ATOM 1307 N ALA X 83 15.262 -8.674 2.099 1.00 0.00 P1 N +ATOM 1308 HN ALA X 83 15.413 -8.626 1.110 1.00 0.00 P1 H +ATOM 1309 CA ALA X 83 16.459 -8.890 2.886 1.00 0.00 P1 C +ATOM 1310 HA ALA X 83 16.324 -9.807 3.443 1.00 0.00 P1 H +ATOM 1311 CB ALA X 83 17.686 -9.025 1.965 1.00 0.00 P1 C +ATOM 1312 HB1 ALA X 83 17.852 -8.092 1.385 1.00 0.00 P1 H +ATOM 1313 HB2 ALA X 83 17.526 -9.856 1.244 1.00 0.00 P1 H +ATOM 1314 HB3 ALA X 83 18.602 -9.248 2.553 1.00 0.00 P1 H +ATOM 1315 C ALA X 83 16.733 -7.777 3.880 1.00 0.00 P1 C +ATOM 1316 O ALA X 83 17.196 -8.025 4.991 1.00 0.00 P1 O +ATOM 1317 N ALA X 84 16.422 -6.517 3.497 1.00 0.00 P1 N +ATOM 1318 HN ALA X 84 16.071 -6.343 2.577 1.00 0.00 P1 H +ATOM 1319 CA ALA X 84 16.612 -5.338 4.311 1.00 0.00 P1 C +ATOM 1320 HA ALA X 84 17.601 -5.385 4.745 1.00 0.00 P1 H +ATOM 1321 CB ALA X 84 16.507 -4.074 3.436 1.00 0.00 P1 C +ATOM 1322 HB1 ALA X 84 15.514 -4.019 2.943 1.00 0.00 P1 H +ATOM 1323 HB2 ALA X 84 17.283 -4.101 2.641 1.00 0.00 P1 H +ATOM 1324 HB3 ALA X 84 16.659 -3.158 4.043 1.00 0.00 P1 H +ATOM 1325 C ALA X 84 15.611 -5.224 5.449 1.00 0.00 P1 C +ATOM 1326 O ALA X 84 15.823 -4.451 6.382 1.00 0.00 P1 O +ATOM 1327 N CYS X 85 14.498 -5.999 5.404 1.00 0.00 P1 N +ATOM 1328 HN CYS X 85 14.341 -6.612 4.631 1.00 0.00 P1 H +ATOM 1329 CA CYS X 85 13.454 -5.981 6.413 1.00 0.00 P1 C +ATOM 1330 HA CYS X 85 13.311 -4.959 6.739 1.00 0.00 P1 H +ATOM 1331 CB CYS X 85 12.105 -6.527 5.882 1.00 0.00 P1 C +ATOM 1332 HB1 CYS X 85 11.381 -6.596 6.724 1.00 0.00 P1 H +ATOM 1333 HB2 CYS X 85 12.255 -7.559 5.496 1.00 0.00 P1 H +ATOM 1334 SG CYS X 85 11.382 -5.479 4.586 1.00 0.00 P1 S +ATOM 1335 HG1 CYS X 85 10.302 -6.227 4.412 1.00 0.00 P1 H +ATOM 1336 C CYS X 85 13.810 -6.801 7.635 1.00 0.00 P1 C +ATOM 1337 O CYS X 85 13.402 -6.459 8.744 1.00 0.00 P1 O +ATOM 1338 N GLY X 86 14.567 -7.911 7.465 1.00 0.00 P1 N +ATOM 1339 HN GLY X 86 14.869 -8.186 6.554 1.00 0.00 P1 H +ATOM 1340 CA GLY X 86 15.023 -8.734 8.572 1.00 0.00 P1 C +ATOM 1341 HA1 GLY X 86 15.177 -8.108 9.440 1.00 0.00 P1 H +ATOM 1342 HA2 GLY X 86 15.927 -9.224 8.242 1.00 0.00 P1 H +ATOM 1343 C GLY X 86 14.027 -9.808 8.919 1.00 0.00 P1 C +ATOM 1344 O GLY X 86 13.336 -10.330 8.047 1.00 0.00 P1 O +ATOM 1345 N ASP X 87 13.947 -10.166 10.223 1.00 0.00 P1 N +ATOM 1346 HN ASP X 87 14.532 -9.746 10.909 1.00 0.00 P1 H +ATOM 1347 CA ASP X 87 13.041 -11.181 10.725 1.00 0.00 P1 C +ATOM 1348 HA ASP X 87 12.581 -11.711 9.901 1.00 0.00 P1 H +ATOM 1349 CB ASP X 87 13.726 -12.199 11.680 1.00 0.00 P1 C +ATOM 1350 HB1 ASP X 87 12.984 -12.615 12.399 1.00 0.00 P1 H +ATOM 1351 HB2 ASP X 87 14.534 -11.712 12.261 1.00 0.00 P1 H +ATOM 1352 CG ASP X 87 14.288 -13.404 10.925 1.00 0.00 P1 C +ATOM 1353 OD1 ASP X 87 14.479 -13.323 9.685 1.00 0.00 P1 O +ATOM 1354 OD2 ASP X 87 14.506 -14.443 11.603 1.00 0.00 P1 O +ATOM 1355 C ASP X 87 11.925 -10.488 11.465 1.00 0.00 P1 C +ATOM 1356 O ASP X 87 11.949 -10.339 12.686 1.00 0.00 P1 O +ATOM 1357 N VAL X 88 10.900 -10.059 10.704 1.00 0.00 P1 N +ATOM 1358 HN VAL X 88 10.913 -10.187 9.715 1.00 0.00 P1 H +ATOM 1359 CA VAL X 88 9.692 -9.468 11.229 1.00 0.00 P1 C +ATOM 1360 HA VAL X 88 9.717 -9.500 12.308 1.00 0.00 P1 H +ATOM 1361 CB VAL X 88 9.472 -8.034 10.761 1.00 0.00 P1 C +ATOM 1362 HB VAL X 88 8.450 -7.694 11.051 1.00 0.00 P1 H +ATOM 1363 CG1 VAL X 88 10.482 -7.121 11.485 1.00 0.00 P1 C +ATOM 1364 HG11 VAL X 88 11.522 -7.395 11.209 1.00 0.00 P1 H +ATOM 1365 HG12 VAL X 88 10.371 -7.213 12.586 1.00 0.00 P1 H +ATOM 1366 HG13 VAL X 88 10.312 -6.062 11.199 1.00 0.00 P1 H +ATOM 1367 CG2 VAL X 88 9.597 -7.932 9.226 1.00 0.00 P1 C +ATOM 1368 HG21 VAL X 88 8.928 -8.650 8.709 1.00 0.00 P1 H +ATOM 1369 HG22 VAL X 88 10.643 -8.111 8.897 1.00 0.00 P1 H +ATOM 1370 HG23 VAL X 88 9.297 -6.918 8.903 1.00 0.00 P1 H +ATOM 1371 C VAL X 88 8.557 -10.332 10.735 1.00 0.00 P1 C +ATOM 1372 O VAL X 88 8.722 -11.018 9.724 1.00 0.00 P1 O +ATOM 1373 N PRO X 89 7.390 -10.358 11.372 1.00 0.00 P1 N +ATOM 1374 CD PRO X 89 7.147 -9.816 12.712 1.00 0.00 P1 C +ATOM 1375 HD1 PRO X 89 7.398 -8.735 12.765 1.00 0.00 P1 H +ATOM 1376 HD2 PRO X 89 7.756 -10.391 13.444 1.00 0.00 P1 H +ATOM 1377 CA PRO X 89 6.303 -11.202 10.916 1.00 0.00 P1 C +ATOM 1378 HA PRO X 89 6.690 -12.171 10.631 1.00 0.00 P1 H +ATOM 1379 CB PRO X 89 5.358 -11.300 12.127 1.00 0.00 P1 C +ATOM 1380 HB1 PRO X 89 5.637 -12.198 12.722 1.00 0.00 P1 H +ATOM 1381 HB2 PRO X 89 4.289 -11.378 11.846 1.00 0.00 P1 H +ATOM 1382 CG PRO X 89 5.657 -10.049 12.960 1.00 0.00 P1 C +ATOM 1383 HG1 PRO X 89 5.076 -9.190 12.558 1.00 0.00 P1 H +ATOM 1384 HG2 PRO X 89 5.419 -10.186 14.034 1.00 0.00 P1 H +ATOM 1385 C PRO X 89 5.614 -10.605 9.709 1.00 0.00 P1 C +ATOM 1386 O PRO X 89 5.066 -11.385 8.933 1.00 0.00 P1 O +ATOM 1387 N GLU X 90 5.613 -9.262 9.516 1.00 0.00 P1 N +ATOM 1388 HN GLU X 90 6.085 -8.639 10.134 1.00 0.00 P1 H +ATOM 1389 CA GLU X 90 4.841 -8.664 8.448 1.00 0.00 P1 C +ATOM 1390 HA GLU X 90 4.721 -9.390 7.660 1.00 0.00 P1 H +ATOM 1391 CB GLU X 90 3.426 -8.247 8.910 1.00 0.00 P1 C +ATOM 1392 HB1 GLU X 90 3.491 -7.391 9.615 1.00 0.00 P1 H +ATOM 1393 HB2 GLU X 90 2.986 -9.105 9.468 1.00 0.00 P1 H +ATOM 1394 CG GLU X 90 2.484 -7.910 7.736 1.00 0.00 P1 C +ATOM 1395 HG1 GLU X 90 2.473 -8.766 7.027 1.00 0.00 P1 H +ATOM 1396 HG2 GLU X 90 2.844 -7.013 7.189 1.00 0.00 P1 H +ATOM 1397 CD GLU X 90 1.055 -7.654 8.200 1.00 0.00 P1 C +ATOM 1398 OE1 GLU X 90 0.845 -7.318 9.394 1.00 0.00 P1 O +ATOM 1399 OE2 GLU X 90 0.133 -7.775 7.349 1.00 0.00 P1 O +ATOM 1400 C GLU X 90 5.547 -7.471 7.849 1.00 0.00 P1 C +ATOM 1401 O GLU X 90 6.005 -6.576 8.556 1.00 0.00 P1 O +ATOM 1402 N ILE X 91 5.640 -7.463 6.500 1.00 0.00 P1 N +ATOM 1403 HN ILE X 91 5.276 -8.237 5.978 1.00 0.00 P1 H +ATOM 1404 CA ILE X 91 6.247 -6.435 5.688 1.00 0.00 P1 C +ATOM 1405 HA ILE X 91 6.724 -5.691 6.312 1.00 0.00 P1 H +ATOM 1406 CB ILE X 91 7.242 -7.036 4.698 1.00 0.00 P1 C +ATOM 1407 HB ILE X 91 6.716 -7.810 4.092 1.00 0.00 P1 H +ATOM 1408 CG2 ILE X 91 7.774 -5.951 3.736 1.00 0.00 P1 C +ATOM 1409 HG21 ILE X 91 8.258 -5.130 4.305 1.00 0.00 P1 H +ATOM 1410 HG22 ILE X 91 6.965 -5.521 3.110 1.00 0.00 P1 H +ATOM 1411 HG23 ILE X 91 8.522 -6.393 3.047 1.00 0.00 P1 H +ATOM 1412 CG1 ILE X 91 8.391 -7.752 5.453 1.00 0.00 P1 C +ATOM 1413 HG11 ILE X 91 7.966 -8.415 6.237 1.00 0.00 P1 H +ATOM 1414 HG12 ILE X 91 9.013 -6.989 5.968 1.00 0.00 P1 H +ATOM 1415 CD ILE X 91 9.274 -8.624 4.553 1.00 0.00 P1 C +ATOM 1416 HD1 ILE X 91 9.772 -8.019 3.767 1.00 0.00 P1 H +ATOM 1417 HD2 ILE X 91 8.666 -9.411 4.060 1.00 0.00 P1 H +ATOM 1418 HD3 ILE X 91 10.063 -9.121 5.157 1.00 0.00 P1 H +ATOM 1419 C ILE X 91 5.119 -5.798 4.919 1.00 0.00 P1 C +ATOM 1420 O ILE X 91 4.354 -6.493 4.254 1.00 0.00 P1 O +ATOM 1421 N MET X 92 4.986 -4.455 4.985 1.00 0.00 P1 N +ATOM 1422 HN MET X 92 5.618 -3.882 5.510 1.00 0.00 P1 H +ATOM 1423 CA MET X 92 3.923 -3.750 4.309 1.00 0.00 P1 C +ATOM 1424 HA MET X 92 3.130 -4.436 4.044 1.00 0.00 P1 H +ATOM 1425 CB MET X 92 3.330 -2.627 5.186 1.00 0.00 P1 C +ATOM 1426 HB1 MET X 92 2.511 -2.111 4.639 1.00 0.00 P1 H +ATOM 1427 HB2 MET X 92 4.126 -1.879 5.394 1.00 0.00 P1 H +ATOM 1428 CG MET X 92 2.806 -3.131 6.545 1.00 0.00 P1 C +ATOM 1429 HG1 MET X 92 2.439 -2.257 7.120 1.00 0.00 P1 H +ATOM 1430 HG2 MET X 92 3.669 -3.541 7.115 1.00 0.00 P1 H +ATOM 1431 SD MET X 92 1.494 -4.392 6.469 1.00 0.00 P1 S +ATOM 1432 CE MET X 92 0.190 -3.357 5.747 1.00 0.00 P1 C +ATOM 1433 HE1 MET X 92 0.442 -3.059 4.707 1.00 0.00 P1 H +ATOM 1434 HE2 MET X 92 0.035 -2.434 6.346 1.00 0.00 P1 H +ATOM 1435 HE3 MET X 92 -0.776 -3.904 5.715 1.00 0.00 P1 H +ATOM 1436 C MET X 92 4.466 -3.136 3.048 1.00 0.00 P1 C +ATOM 1437 O MET X 92 5.525 -2.518 3.047 1.00 0.00 P1 O +ATOM 1438 N VAL X 93 3.745 -3.301 1.926 1.00 0.00 P1 N +ATOM 1439 HN VAL X 93 2.941 -3.898 1.920 1.00 0.00 P1 H +ATOM 1440 CA VAL X 93 4.087 -2.708 0.658 1.00 0.00 P1 C +ATOM 1441 HA VAL X 93 5.062 -2.244 0.709 1.00 0.00 P1 H +ATOM 1442 CB VAL X 93 4.099 -3.735 -0.462 1.00 0.00 P1 C +ATOM 1443 HB VAL X 93 3.099 -4.216 -0.543 1.00 0.00 P1 H +ATOM 1444 CG1 VAL X 93 4.444 -3.059 -1.798 1.00 0.00 P1 C +ATOM 1445 HG11 VAL X 93 5.426 -2.545 -1.717 1.00 0.00 P1 H +ATOM 1446 HG12 VAL X 93 3.671 -2.317 -2.087 1.00 0.00 P1 H +ATOM 1447 HG13 VAL X 93 4.511 -3.818 -2.605 1.00 0.00 P1 H +ATOM 1448 CG2 VAL X 93 5.137 -4.825 -0.114 1.00 0.00 P1 C +ATOM 1449 HG21 VAL X 93 4.863 -5.359 0.820 1.00 0.00 P1 H +ATOM 1450 HG22 VAL X 93 6.144 -4.377 0.013 1.00 0.00 P1 H +ATOM 1451 HG23 VAL X 93 5.188 -5.575 -0.930 1.00 0.00 P1 H +ATOM 1452 C VAL X 93 3.053 -1.632 0.444 1.00 0.00 P1 C +ATOM 1453 O VAL X 93 1.861 -1.918 0.325 1.00 0.00 P1 O +ATOM 1454 N ILE X 94 3.497 -0.351 0.463 1.00 0.00 P1 N +ATOM 1455 HN ILE X 94 4.477 -0.152 0.525 1.00 0.00 P1 H +ATOM 1456 CA ILE X 94 2.609 0.791 0.561 1.00 0.00 P1 C +ATOM 1457 HA ILE X 94 1.625 0.436 0.837 1.00 0.00 P1 H +ATOM 1458 CB ILE X 94 3.003 1.797 1.636 1.00 0.00 P1 C +ATOM 1459 HB ILE X 94 2.175 2.541 1.725 1.00 0.00 P1 H +ATOM 1460 CG2 ILE X 94 3.100 1.044 2.983 1.00 0.00 P1 C +ATOM 1461 HG21 ILE X 94 3.960 0.341 2.983 1.00 0.00 P1 H +ATOM 1462 HG22 ILE X 94 2.172 0.467 3.173 1.00 0.00 P1 H +ATOM 1463 HG23 ILE X 94 3.238 1.761 3.819 1.00 0.00 P1 H +ATOM 1464 CG1 ILE X 94 4.291 2.586 1.316 1.00 0.00 P1 C +ATOM 1465 HG11 ILE X 94 4.260 2.965 0.272 1.00 0.00 P1 H +ATOM 1466 HG12 ILE X 94 5.167 1.908 1.406 1.00 0.00 P1 H +ATOM 1467 CD ILE X 94 4.482 3.802 2.230 1.00 0.00 P1 C +ATOM 1468 HD1 ILE X 94 4.652 3.484 3.280 1.00 0.00 P1 H +ATOM 1469 HD2 ILE X 94 3.582 4.453 2.198 1.00 0.00 P1 H +ATOM 1470 HD3 ILE X 94 5.354 4.403 1.899 1.00 0.00 P1 H +ATOM 1471 C ILE X 94 2.439 1.492 -0.759 1.00 0.00 P1 C +ATOM 1472 O ILE X 94 1.561 2.342 -0.885 1.00 0.00 P1 O +ATOM 1473 N GLY X 95 3.244 1.138 -1.788 1.00 0.00 P1 N +ATOM 1474 HN GLY X 95 4.023 0.533 -1.652 1.00 0.00 P1 H +ATOM 1475 CA GLY X 95 2.805 1.359 -3.147 1.00 0.00 P1 C +ATOM 1476 HA1 GLY X 95 1.876 1.913 -3.158 1.00 0.00 P1 H +ATOM 1477 HA2 GLY X 95 2.682 0.370 -3.564 1.00 0.00 P1 H +ATOM 1478 C GLY X 95 3.718 2.086 -4.066 1.00 0.00 P1 C +ATOM 1479 O GLY X 95 4.784 2.594 -3.718 1.00 0.00 P1 O +ATOM 1480 N GLY X 96 3.227 2.123 -5.319 1.00 0.00 P1 N +ATOM 1481 HN GLY X 96 2.307 1.779 -5.483 1.00 0.00 P1 H +ATOM 1482 CA GLY X 96 3.898 2.669 -6.465 1.00 0.00 P1 C +ATOM 1483 HA1 GLY X 96 4.886 2.237 -6.530 1.00 0.00 P1 H +ATOM 1484 HA2 GLY X 96 3.889 3.746 -6.377 1.00 0.00 P1 H +ATOM 1485 C GLY X 96 3.126 2.286 -7.695 1.00 0.00 P1 C +ATOM 1486 O GLY X 96 3.213 2.958 -8.717 1.00 0.00 P1 O +ATOM 1487 N GLY X 97 2.369 1.161 -7.655 1.00 0.00 P1 N +ATOM 1488 HN GLY X 97 2.286 0.614 -6.828 1.00 0.00 P1 H +ATOM 1489 CA GLY X 97 1.729 0.620 -8.840 1.00 0.00 P1 C +ATOM 1490 HA1 GLY X 97 1.601 1.380 -9.597 1.00 0.00 P1 H +ATOM 1491 HA2 GLY X 97 0.809 0.142 -8.543 1.00 0.00 P1 H +ATOM 1492 C GLY X 97 2.656 -0.421 -9.348 1.00 0.00 P1 C +ATOM 1493 O GLY X 97 2.390 -1.606 -9.198 1.00 0.00 P1 O +ATOM 1494 N ARG X 98 3.816 0.032 -9.878 1.00 0.00 P1 N +ATOM 1495 HN ARG X 98 3.935 1.016 -9.995 1.00 0.00 P1 H +ATOM 1496 CA ARG X 98 4.973 -0.762 -10.233 1.00 0.00 P1 C +ATOM 1497 HA ARG X 98 4.676 -1.436 -11.026 1.00 0.00 P1 H +ATOM 1498 CB ARG X 98 6.137 0.149 -10.711 1.00 0.00 P1 C +ATOM 1499 HB1 ARG X 98 7.099 -0.094 -10.208 1.00 0.00 P1 H +ATOM 1500 HB2 ARG X 98 5.887 1.199 -10.439 1.00 0.00 P1 H +ATOM 1501 CG ARG X 98 6.351 0.078 -12.233 1.00 0.00 P1 C +ATOM 1502 HG1 ARG X 98 6.639 1.080 -12.619 1.00 0.00 P1 H +ATOM 1503 HG2 ARG X 98 5.377 -0.179 -12.710 1.00 0.00 P1 H +ATOM 1504 CD ARG X 98 7.399 -0.963 -12.658 1.00 0.00 P1 C +ATOM 1505 HD1 ARG X 98 7.266 -1.217 -13.733 1.00 0.00 P1 H +ATOM 1506 HD2 ARG X 98 7.316 -1.884 -12.040 1.00 0.00 P1 H +ATOM 1507 NE ARG X 98 8.757 -0.341 -12.488 1.00 0.00 P1 N +ATOM 1508 HE ARG X 98 8.801 0.646 -12.356 1.00 0.00 P1 H +ATOM 1509 CZ ARG X 98 9.914 -0.988 -12.786 1.00 0.00 P1 C +ATOM 1510 NH1 ARG X 98 9.948 -2.330 -12.945 1.00 0.00 P1 N +ATOM 1511 HH11 ARG X 98 10.806 -2.788 -13.162 1.00 0.00 P1 H +ATOM 1512 HH12 ARG X 98 9.110 -2.856 -12.826 1.00 0.00 P1 H +ATOM 1513 NH2 ARG X 98 11.055 -0.273 -12.932 1.00 0.00 P1 N +ATOM 1514 HH21 ARG X 98 11.037 0.718 -12.831 1.00 0.00 P1 H +ATOM 1515 HH22 ARG X 98 11.904 -0.741 -13.162 1.00 0.00 P1 H +ATOM 1516 C ARG X 98 5.432 -1.610 -9.076 1.00 0.00 P1 C +ATOM 1517 O ARG X 98 5.636 -2.802 -9.238 1.00 0.00 P1 O +ATOM 1518 N VAL X 99 5.559 -1.019 -7.869 1.00 0.00 P1 N +ATOM 1519 HN VAL X 99 5.387 -0.043 -7.776 1.00 0.00 P1 H +ATOM 1520 CA VAL X 99 5.942 -1.702 -6.647 1.00 0.00 P1 C +ATOM 1521 HA VAL X 99 6.861 -2.235 -6.847 1.00 0.00 P1 H +ATOM 1522 CB VAL X 99 6.215 -0.678 -5.551 1.00 0.00 P1 C +ATOM 1523 HB VAL X 99 5.479 0.154 -5.635 1.00 0.00 P1 H +ATOM 1524 CG1 VAL X 99 6.106 -1.241 -4.124 1.00 0.00 P1 C +ATOM 1525 HG11 VAL X 99 6.786 -2.106 -3.989 1.00 0.00 P1 H +ATOM 1526 HG12 VAL X 99 5.064 -1.549 -3.905 1.00 0.00 P1 H +ATOM 1527 HG13 VAL X 99 6.390 -0.460 -3.386 1.00 0.00 P1 H +ATOM 1528 CG2 VAL X 99 7.630 -0.121 -5.798 1.00 0.00 P1 C +ATOM 1529 HG21 VAL X 99 7.690 0.397 -6.778 1.00 0.00 P1 H +ATOM 1530 HG22 VAL X 99 8.379 -0.941 -5.782 1.00 0.00 P1 H +ATOM 1531 HG23 VAL X 99 7.898 0.598 -4.999 1.00 0.00 P1 H +ATOM 1532 C VAL X 99 4.928 -2.761 -6.255 1.00 0.00 P1 C +ATOM 1533 O VAL X 99 5.302 -3.904 -6.003 1.00 0.00 P1 O +ATOM 1534 N TYR X 100 3.610 -2.436 -6.258 1.00 0.00 P1 N +ATOM 1535 HN TYR X 100 3.314 -1.517 -6.497 1.00 0.00 P1 H +ATOM 1536 CA TYR X 100 2.543 -3.386 -5.980 1.00 0.00 P1 C +ATOM 1537 HA TYR X 100 2.692 -3.775 -4.982 1.00 0.00 P1 H +ATOM 1538 CB TYR X 100 1.126 -2.769 -6.128 1.00 0.00 P1 C +ATOM 1539 HB1 TYR X 100 0.354 -3.564 -6.031 1.00 0.00 P1 H +ATOM 1540 HB2 TYR X 100 1.019 -2.307 -7.133 1.00 0.00 P1 H +ATOM 1541 CG TYR X 100 0.778 -1.743 -5.084 1.00 0.00 P1 C +ATOM 1542 CD1 TYR X 100 0.886 -2.024 -3.710 1.00 0.00 P1 C +ATOM 1543 HD1 TYR X 100 1.322 -2.952 -3.386 1.00 0.00 P1 H +ATOM 1544 CE1 TYR X 100 0.372 -1.137 -2.753 1.00 0.00 P1 C +ATOM 1545 HE1 TYR X 100 0.435 -1.380 -1.704 1.00 0.00 P1 H +ATOM 1546 CZ TYR X 100 -0.219 0.063 -3.167 1.00 0.00 P1 C +ATOM 1547 OH TYR X 100 -0.742 0.992 -2.248 1.00 0.00 P1 O +ATOM 1548 HH TYR X 100 -0.767 0.573 -1.375 1.00 0.00 P1 H +ATOM 1549 CD2 TYR X 100 0.187 -0.530 -5.477 1.00 0.00 P1 C +ATOM 1550 HD2 TYR X 100 0.056 -0.313 -6.524 1.00 0.00 P1 H +ATOM 1551 CE2 TYR X 100 -0.287 0.375 -4.523 1.00 0.00 P1 C +ATOM 1552 HE2 TYR X 100 -0.726 1.315 -4.819 1.00 0.00 P1 H +ATOM 1553 C TYR X 100 2.576 -4.563 -6.935 1.00 0.00 P1 C +ATOM 1554 O TYR X 100 2.398 -5.705 -6.528 1.00 0.00 P1 O +ATOM 1555 N GLU X 101 2.836 -4.286 -8.229 1.00 0.00 P1 N +ATOM 1556 HN GLU X 101 2.956 -3.333 -8.510 1.00 0.00 P1 H +ATOM 1557 CA GLU X 101 2.917 -5.225 -9.325 1.00 0.00 P1 C +ATOM 1558 HA GLU X 101 1.952 -5.703 -9.414 1.00 0.00 P1 H +ATOM 1559 CB GLU X 101 3.217 -4.425 -10.611 1.00 0.00 P1 C +ATOM 1560 HB1 GLU X 101 4.302 -4.211 -10.709 1.00 0.00 P1 H +ATOM 1561 HB2 GLU X 101 2.708 -3.445 -10.479 1.00 0.00 P1 H +ATOM 1562 CG GLU X 101 2.675 -4.973 -11.937 1.00 0.00 P1 C +ATOM 1563 HG1 GLU X 101 1.622 -5.304 -11.817 1.00 0.00 P1 H +ATOM 1564 HG2 GLU X 101 3.288 -5.817 -12.311 1.00 0.00 P1 H +ATOM 1565 CD GLU X 101 2.718 -3.810 -12.930 1.00 0.00 P1 C +ATOM 1566 OE1 GLU X 101 3.847 -3.357 -13.263 1.00 0.00 P1 O +ATOM 1567 OE2 GLU X 101 1.623 -3.329 -13.322 1.00 0.00 P1 O +ATOM 1568 C GLU X 101 3.962 -6.297 -9.106 1.00 0.00 P1 C +ATOM 1569 O GLU X 101 3.676 -7.481 -9.265 1.00 0.00 P1 O +ATOM 1570 N GLN X 102 5.199 -5.908 -8.698 1.00 0.00 P1 N +ATOM 1571 HN GLN X 102 5.412 -4.941 -8.567 1.00 0.00 P1 H +ATOM 1572 CA GLN X 102 6.292 -6.849 -8.507 1.00 0.00 P1 C +ATOM 1573 HA GLN X 102 6.211 -7.589 -9.292 1.00 0.00 P1 H +ATOM 1574 CB GLN X 102 7.720 -6.234 -8.617 1.00 0.00 P1 C +ATOM 1575 HB1 GLN X 102 8.352 -6.945 -9.195 1.00 0.00 P1 H +ATOM 1576 HB2 GLN X 102 8.185 -6.119 -7.611 1.00 0.00 P1 H +ATOM 1577 CG GLN X 102 7.747 -4.846 -9.273 1.00 0.00 P1 C +ATOM 1578 HG1 GLN X 102 7.332 -4.139 -8.523 1.00 0.00 P1 H +ATOM 1579 HG2 GLN X 102 7.120 -4.836 -10.191 1.00 0.00 P1 H +ATOM 1580 CD GLN X 102 9.151 -4.373 -9.658 1.00 0.00 P1 C +ATOM 1581 OE1 GLN X 102 10.021 -5.158 -10.043 1.00 0.00 P1 O +ATOM 1582 NE2 GLN X 102 9.359 -3.027 -9.582 1.00 0.00 P1 N +ATOM 1583 HE21 GLN X 102 10.263 -2.668 -9.809 1.00 0.00 P1 H +ATOM 1584 HE22 GLN X 102 8.623 -2.428 -9.273 1.00 0.00 P1 H +ATOM 1585 C GLN X 102 6.199 -7.584 -7.187 1.00 0.00 P1 C +ATOM 1586 O GLN X 102 6.753 -8.672 -7.053 1.00 0.00 P1 O +ATOM 1587 N PHE X 103 5.511 -7.008 -6.172 1.00 0.00 P1 N +ATOM 1588 HN PHE X 103 5.100 -6.103 -6.278 1.00 0.00 P1 H +ATOM 1589 CA PHE X 103 5.394 -7.625 -4.865 1.00 0.00 P1 C +ATOM 1590 HA PHE X 103 6.241 -8.282 -4.713 1.00 0.00 P1 H +ATOM 1591 CB PHE X 103 5.337 -6.599 -3.711 1.00 0.00 P1 C +ATOM 1592 HB1 PHE X 103 4.842 -7.016 -2.807 1.00 0.00 P1 H +ATOM 1593 HB2 PHE X 103 4.792 -5.684 -4.024 1.00 0.00 P1 H +ATOM 1594 CG PHE X 103 6.736 -6.249 -3.295 1.00 0.00 P1 C +ATOM 1595 CD1 PHE X 103 7.499 -7.165 -2.547 1.00 0.00 P1 C +ATOM 1596 HD1 PHE X 103 7.081 -8.125 -2.285 1.00 0.00 P1 H +ATOM 1597 CE1 PHE X 103 8.794 -6.836 -2.129 1.00 0.00 P1 C +ATOM 1598 HE1 PHE X 103 9.374 -7.542 -1.556 1.00 0.00 P1 H +ATOM 1599 CZ PHE X 103 9.338 -5.592 -2.466 1.00 0.00 P1 C +ATOM 1600 HZ PHE X 103 10.333 -5.331 -2.155 1.00 0.00 P1 H +ATOM 1601 CD2 PHE X 103 7.291 -5.003 -3.610 1.00 0.00 P1 C +ATOM 1602 HD2 PHE X 103 6.710 -4.280 -4.151 1.00 0.00 P1 H +ATOM 1603 CE2 PHE X 103 8.581 -4.671 -3.195 1.00 0.00 P1 C +ATOM 1604 HE2 PHE X 103 8.976 -3.693 -3.413 1.00 0.00 P1 H +ATOM 1605 C PHE X 103 4.187 -8.513 -4.752 1.00 0.00 P1 C +ATOM 1606 O PHE X 103 4.217 -9.451 -3.956 1.00 0.00 P1 O +ATOM 1607 N LEU X 104 3.115 -8.267 -5.549 1.00 0.00 P1 N +ATOM 1608 HN LEU X 104 3.107 -7.465 -6.150 1.00 0.00 P1 H +ATOM 1609 CA LEU X 104 1.902 -9.071 -5.598 1.00 0.00 P1 C +ATOM 1610 HA LEU X 104 1.396 -8.868 -4.665 1.00 0.00 P1 H +ATOM 1611 CB LEU X 104 0.925 -8.659 -6.742 1.00 0.00 P1 C +ATOM 1612 HB1 LEU X 104 1.413 -8.825 -7.724 1.00 0.00 P1 H +ATOM 1613 HB2 LEU X 104 0.735 -7.567 -6.664 1.00 0.00 P1 H +ATOM 1614 CG LEU X 104 -0.451 -9.375 -6.755 1.00 0.00 P1 C +ATOM 1615 HG LEU X 104 -0.282 -10.469 -6.633 1.00 0.00 P1 H +ATOM 1616 CD1 LEU X 104 -1.360 -8.903 -5.605 1.00 0.00 P1 C +ATOM 1617 HD11 LEU X 104 -1.554 -7.813 -5.690 1.00 0.00 P1 H +ATOM 1618 HD12 LEU X 104 -0.887 -9.105 -4.622 1.00 0.00 P1 H +ATOM 1619 HD13 LEU X 104 -2.333 -9.437 -5.640 1.00 0.00 P1 H +ATOM 1620 CD2 LEU X 104 -1.159 -9.191 -8.110 1.00 0.00 P1 C +ATOM 1621 HD21 LEU X 104 -0.514 -9.548 -8.940 1.00 0.00 P1 H +ATOM 1622 HD22 LEU X 104 -1.392 -8.119 -8.276 1.00 0.00 P1 H +ATOM 1623 HD23 LEU X 104 -2.111 -9.762 -8.132 1.00 0.00 P1 H +ATOM 1624 C LEU X 104 2.166 -10.571 -5.621 1.00 0.00 P1 C +ATOM 1625 O LEU X 104 1.558 -11.226 -4.778 1.00 0.00 P1 O +ATOM 1626 N PRO X 105 3.033 -11.197 -6.438 1.00 0.00 P1 N +ATOM 1627 CD PRO X 105 3.728 -10.578 -7.571 1.00 0.00 P1 C +ATOM 1628 HD1 PRO X 105 4.728 -10.247 -7.221 1.00 0.00 P1 H +ATOM 1629 HD2 PRO X 105 3.181 -9.720 -8.008 1.00 0.00 P1 H +ATOM 1630 CA PRO X 105 3.186 -12.650 -6.470 1.00 0.00 P1 C +ATOM 1631 HA PRO X 105 2.206 -13.077 -6.610 1.00 0.00 P1 H +ATOM 1632 CB PRO X 105 4.105 -12.910 -7.676 1.00 0.00 P1 C +ATOM 1633 HB1 PRO X 105 3.866 -13.870 -8.177 1.00 0.00 P1 H +ATOM 1634 HB2 PRO X 105 5.175 -12.913 -7.370 1.00 0.00 P1 H +ATOM 1635 CG PRO X 105 3.871 -11.705 -8.585 1.00 0.00 P1 C +ATOM 1636 HG1 PRO X 105 4.703 -11.536 -9.298 1.00 0.00 P1 H +ATOM 1637 HG2 PRO X 105 2.917 -11.830 -9.144 1.00 0.00 P1 H +ATOM 1638 C PRO X 105 3.798 -13.266 -5.225 1.00 0.00 P1 C +ATOM 1639 O PRO X 105 3.754 -14.488 -5.111 1.00 0.00 P1 O +ATOM 1640 N LYS X 106 4.371 -12.467 -4.295 1.00 0.00 P1 N +ATOM 1641 HN LYS X 106 4.413 -11.476 -4.422 1.00 0.00 P1 H +ATOM 1642 CA LYS X 106 4.939 -12.970 -3.060 1.00 0.00 P1 C +ATOM 1643 HA LYS X 106 4.999 -14.050 -3.086 1.00 0.00 P1 H +ATOM 1644 CB LYS X 106 6.356 -12.408 -2.799 1.00 0.00 P1 C +ATOM 1645 HB1 LYS X 106 6.679 -12.699 -1.773 1.00 0.00 P1 H +ATOM 1646 HB2 LYS X 106 6.337 -11.298 -2.849 1.00 0.00 P1 H +ATOM 1647 CG LYS X 106 7.419 -12.951 -3.773 1.00 0.00 P1 C +ATOM 1648 HG1 LYS X 106 7.210 -12.580 -4.799 1.00 0.00 P1 H +ATOM 1649 HG2 LYS X 106 7.346 -14.062 -3.785 1.00 0.00 P1 H +ATOM 1650 CD LYS X 106 8.841 -12.555 -3.340 1.00 0.00 P1 C +ATOM 1651 HD1 LYS X 106 8.949 -12.864 -2.274 1.00 0.00 P1 H +ATOM 1652 HD2 LYS X 106 8.954 -11.450 -3.370 1.00 0.00 P1 H +ATOM 1653 CE LYS X 106 9.985 -13.237 -4.113 1.00 0.00 P1 C +ATOM 1654 HE1 LYS X 106 9.751 -14.305 -4.302 1.00 0.00 P1 H +ATOM 1655 HE2 LYS X 106 10.922 -13.173 -3.516 1.00 0.00 P1 H +ATOM 1656 NZ LYS X 106 10.259 -12.576 -5.410 1.00 0.00 P1 N +ATOM 1657 HZ1 LYS X 106 10.539 -11.589 -5.237 1.00 0.00 P1 H +ATOM 1658 HZ2 LYS X 106 9.412 -12.603 -6.012 1.00 0.00 P1 H +ATOM 1659 HZ3 LYS X 106 11.048 -13.062 -5.884 1.00 0.00 P1 H +ATOM 1660 C LYS X 106 4.052 -12.600 -1.894 1.00 0.00 P1 C +ATOM 1661 O LYS X 106 4.313 -12.985 -0.754 1.00 0.00 P1 O +ATOM 1662 N ALA X 107 2.961 -11.849 -2.155 1.00 0.00 P1 N +ATOM 1663 HN ALA X 107 2.743 -11.556 -3.086 1.00 0.00 P1 H +ATOM 1664 CA ALA X 107 2.069 -11.378 -1.131 1.00 0.00 P1 C +ATOM 1665 HA ALA X 107 2.669 -11.042 -0.297 1.00 0.00 P1 H +ATOM 1666 CB ALA X 107 1.217 -10.203 -1.624 1.00 0.00 P1 C +ATOM 1667 HB1 ALA X 107 0.525 -10.520 -2.434 1.00 0.00 P1 H +ATOM 1668 HB2 ALA X 107 1.889 -9.422 -2.039 1.00 0.00 P1 H +ATOM 1669 HB3 ALA X 107 0.623 -9.760 -0.796 1.00 0.00 P1 H +ATOM 1670 C ALA X 107 1.141 -12.465 -0.658 1.00 0.00 P1 C +ATOM 1671 O ALA X 107 0.688 -13.316 -1.426 1.00 0.00 P1 O +ATOM 1672 N GLN X 108 0.859 -12.434 0.657 1.00 0.00 P1 N +ATOM 1673 HN GLN X 108 1.290 -11.744 1.244 1.00 0.00 P1 H +ATOM 1674 CA GLN X 108 0.006 -13.376 1.333 1.00 0.00 P1 C +ATOM 1675 HA GLN X 108 -0.279 -14.176 0.665 1.00 0.00 P1 H +ATOM 1676 CB GLN X 108 0.710 -13.957 2.580 1.00 0.00 P1 C +ATOM 1677 HB1 GLN X 108 0.010 -14.613 3.145 1.00 0.00 P1 H +ATOM 1678 HB2 GLN X 108 0.990 -13.114 3.249 1.00 0.00 P1 H +ATOM 1679 CG GLN X 108 1.991 -14.753 2.255 1.00 0.00 P1 C +ATOM 1680 HG1 GLN X 108 2.513 -14.995 3.206 1.00 0.00 P1 H +ATOM 1681 HG2 GLN X 108 2.682 -14.160 1.622 1.00 0.00 P1 H +ATOM 1682 CD GLN X 108 1.635 -16.079 1.575 1.00 0.00 P1 C +ATOM 1683 OE1 GLN X 108 1.162 -17.009 2.236 1.00 0.00 P1 O +ATOM 1684 NE2 GLN X 108 1.868 -16.171 0.237 1.00 0.00 P1 N +ATOM 1685 HE21 GLN X 108 1.658 -17.029 -0.229 1.00 0.00 P1 H +ATOM 1686 HE22 GLN X 108 2.238 -15.388 -0.262 1.00 0.00 P1 H +ATOM 1687 C GLN X 108 -1.247 -12.678 1.786 1.00 0.00 P1 C +ATOM 1688 O GLN X 108 -2.230 -13.339 2.113 1.00 0.00 P1 O +ATOM 1689 N LYS X 109 -1.244 -11.325 1.829 1.00 0.00 P1 N +ATOM 1690 HN LYS X 109 -0.462 -10.783 1.530 1.00 0.00 P1 H +ATOM 1691 CA LYS X 109 -2.330 -10.592 2.425 1.00 0.00 P1 C +ATOM 1692 HA LYS X 109 -3.240 -11.163 2.324 1.00 0.00 P1 H +ATOM 1693 CB LYS X 109 -2.023 -10.367 3.918 1.00 0.00 P1 C +ATOM 1694 HB1 LYS X 109 -1.317 -9.522 4.035 1.00 0.00 P1 H +ATOM 1695 HB2 LYS X 109 -1.500 -11.279 4.291 1.00 0.00 P1 H +ATOM 1696 CG LYS X 109 -3.233 -10.162 4.830 1.00 0.00 P1 C +ATOM 1697 HG1 LYS X 109 -3.968 -10.979 4.666 1.00 0.00 P1 H +ATOM 1698 HG2 LYS X 109 -3.727 -9.197 4.580 1.00 0.00 P1 H +ATOM 1699 CD LYS X 109 -2.789 -10.157 6.301 1.00 0.00 P1 C +ATOM 1700 HD1 LYS X 109 -2.011 -9.366 6.415 1.00 0.00 P1 H +ATOM 1701 HD2 LYS X 109 -2.314 -11.136 6.537 1.00 0.00 P1 H +ATOM 1702 CE LYS X 109 -3.932 -9.893 7.279 1.00 0.00 P1 C +ATOM 1703 HE1 LYS X 109 -4.649 -10.742 7.287 1.00 0.00 P1 H +ATOM 1704 HE2 LYS X 109 -4.464 -8.958 7.002 1.00 0.00 P1 H +ATOM 1705 NZ LYS X 109 -3.406 -9.711 8.649 1.00 0.00 P1 N +ATOM 1706 HZ1 LYS X 109 -2.848 -8.827 8.677 1.00 0.00 P1 H +ATOM 1707 HZ2 LYS X 109 -2.799 -10.516 8.901 1.00 0.00 P1 H +ATOM 1708 HZ3 LYS X 109 -4.193 -9.641 9.324 1.00 0.00 P1 H +ATOM 1709 C LYS X 109 -2.514 -9.276 1.703 1.00 0.00 P1 C +ATOM 1710 O LYS X 109 -1.546 -8.651 1.273 1.00 0.00 P1 O +ATOM 1711 N LEU X 110 -3.780 -8.832 1.541 1.00 0.00 P1 N +ATOM 1712 HN LEU X 110 -4.553 -9.382 1.863 1.00 0.00 P1 H +ATOM 1713 CA LEU X 110 -4.122 -7.549 0.965 1.00 0.00 P1 C +ATOM 1714 HA LEU X 110 -3.229 -6.971 0.774 1.00 0.00 P1 H +ATOM 1715 CB LEU X 110 -4.987 -7.645 -0.320 1.00 0.00 P1 C +ATOM 1716 HB1 LEU X 110 -5.199 -6.619 -0.695 1.00 0.00 P1 H +ATOM 1717 HB2 LEU X 110 -5.961 -8.119 -0.065 1.00 0.00 P1 H +ATOM 1718 CG LEU X 110 -4.371 -8.459 -1.480 1.00 0.00 P1 C +ATOM 1719 HG LEU X 110 -4.206 -9.495 -1.108 1.00 0.00 P1 H +ATOM 1720 CD1 LEU X 110 -5.348 -8.552 -2.667 1.00 0.00 P1 C +ATOM 1721 HD11 LEU X 110 -5.553 -7.543 -3.081 1.00 0.00 P1 H +ATOM 1722 HD12 LEU X 110 -6.308 -9.007 -2.344 1.00 0.00 P1 H +ATOM 1723 HD13 LEU X 110 -4.916 -9.185 -3.471 1.00 0.00 P1 H +ATOM 1724 CD2 LEU X 110 -3.011 -7.913 -1.945 1.00 0.00 P1 C +ATOM 1725 HD21 LEU X 110 -2.260 -7.977 -1.131 1.00 0.00 P1 H +ATOM 1726 HD22 LEU X 110 -3.110 -6.853 -2.258 1.00 0.00 P1 H +ATOM 1727 HD23 LEU X 110 -2.636 -8.505 -2.806 1.00 0.00 P1 H +ATOM 1728 C LEU X 110 -4.957 -6.825 1.985 1.00 0.00 P1 C +ATOM 1729 O LEU X 110 -5.809 -7.437 2.620 1.00 0.00 P1 O +ATOM 1730 N TYR X 111 -4.737 -5.504 2.151 1.00 0.00 P1 N +ATOM 1731 HN TYR X 111 -3.967 -5.059 1.690 1.00 0.00 P1 H +ATOM 1732 CA TYR X 111 -5.566 -4.626 2.949 1.00 0.00 P1 C +ATOM 1733 HA TYR X 111 -6.422 -5.156 3.344 1.00 0.00 P1 H +ATOM 1734 CB TYR X 111 -4.800 -3.879 4.078 1.00 0.00 P1 C +ATOM 1735 HB1 TYR X 111 -5.475 -3.157 4.585 1.00 0.00 P1 H +ATOM 1736 HB2 TYR X 111 -3.953 -3.311 3.641 1.00 0.00 P1 H +ATOM 1737 CG TYR X 111 -4.203 -4.784 5.124 1.00 0.00 P1 C +ATOM 1738 CD1 TYR X 111 -3.032 -5.515 4.854 1.00 0.00 P1 C +ATOM 1739 HD1 TYR X 111 -2.587 -5.479 3.872 1.00 0.00 P1 H +ATOM 1740 CE1 TYR X 111 -2.407 -6.259 5.860 1.00 0.00 P1 C +ATOM 1741 HE1 TYR X 111 -1.508 -6.809 5.646 1.00 0.00 P1 H +ATOM 1742 CZ TYR X 111 -2.929 -6.273 7.156 1.00 0.00 P1 C +ATOM 1743 OH TYR X 111 -2.257 -6.985 8.176 1.00 0.00 P1 O +ATOM 1744 HH TYR X 111 -1.365 -7.215 7.850 1.00 0.00 P1 H +ATOM 1745 CD2 TYR X 111 -4.732 -4.821 6.428 1.00 0.00 P1 C +ATOM 1746 HD2 TYR X 111 -5.613 -4.245 6.666 1.00 0.00 P1 H +ATOM 1747 CE2 TYR X 111 -4.101 -5.563 7.437 1.00 0.00 P1 C +ATOM 1748 HE2 TYR X 111 -4.507 -5.561 8.438 1.00 0.00 P1 H +ATOM 1749 C TYR X 111 -6.031 -3.577 1.970 1.00 0.00 P1 C +ATOM 1750 O TYR X 111 -5.226 -2.806 1.457 1.00 0.00 P1 O +ATOM 1751 N LEU X 112 -7.335 -3.531 1.646 1.00 0.00 P1 N +ATOM 1752 HN LEU X 112 -8.010 -4.136 2.077 1.00 0.00 P1 H +ATOM 1753 CA LEU X 112 -7.828 -2.670 0.596 1.00 0.00 P1 C +ATOM 1754 HA LEU X 112 -7.036 -2.050 0.208 1.00 0.00 P1 H +ATOM 1755 CB LEU X 112 -8.442 -3.466 -0.579 1.00 0.00 P1 C +ATOM 1756 HB1 LEU X 112 -8.809 -2.762 -1.358 1.00 0.00 P1 H +ATOM 1757 HB2 LEU X 112 -9.316 -4.045 -0.204 1.00 0.00 P1 H +ATOM 1758 CG LEU X 112 -7.463 -4.463 -1.245 1.00 0.00 P1 C +ATOM 1759 HG LEU X 112 -7.092 -5.156 -0.455 1.00 0.00 P1 H +ATOM 1760 CD1 LEU X 112 -8.196 -5.323 -2.287 1.00 0.00 P1 C +ATOM 1761 HD11 LEU X 112 -8.544 -4.691 -3.132 1.00 0.00 P1 H +ATOM 1762 HD12 LEU X 112 -9.083 -5.812 -1.833 1.00 0.00 P1 H +ATOM 1763 HD13 LEU X 112 -7.522 -6.108 -2.689 1.00 0.00 P1 H +ATOM 1764 CD2 LEU X 112 -6.240 -3.776 -1.883 1.00 0.00 P1 C +ATOM 1765 HD21 LEU X 112 -5.643 -3.232 -1.122 1.00 0.00 P1 H +ATOM 1766 HD22 LEU X 112 -6.567 -3.053 -2.661 1.00 0.00 P1 H +ATOM 1767 HD23 LEU X 112 -5.583 -4.533 -2.362 1.00 0.00 P1 H +ATOM 1768 C LEU X 112 -8.876 -1.762 1.162 1.00 0.00 P1 C +ATOM 1769 O LEU X 112 -9.699 -2.178 1.973 1.00 0.00 P1 O +ATOM 1770 N THR X 113 -8.872 -0.487 0.727 1.00 0.00 P1 N +ATOM 1771 HN THR X 113 -8.132 -0.146 0.146 1.00 0.00 P1 H +ATOM 1772 CA THR X 113 -9.938 0.444 1.024 1.00 0.00 P1 C +ATOM 1773 HA THR X 113 -10.662 -0.010 1.683 1.00 0.00 P1 H +ATOM 1774 CB THR X 113 -9.468 1.741 1.647 1.00 0.00 P1 C +ATOM 1775 HB THR X 113 -8.764 2.280 0.974 1.00 0.00 P1 H +ATOM 1776 OG1 THR X 113 -8.780 1.431 2.847 1.00 0.00 P1 O +ATOM 1777 HG1 THR X 113 -8.332 2.255 3.128 1.00 0.00 P1 H +ATOM 1778 CG2 THR X 113 -10.667 2.649 1.992 1.00 0.00 P1 C +ATOM 1779 HG21 THR X 113 -11.369 2.118 2.670 1.00 0.00 P1 H +ATOM 1780 HG22 THR X 113 -11.218 2.952 1.079 1.00 0.00 P1 H +ATOM 1781 HG23 THR X 113 -10.315 3.569 2.504 1.00 0.00 P1 H +ATOM 1782 C THR X 113 -10.582 0.726 -0.292 1.00 0.00 P1 C +ATOM 1783 O THR X 113 -9.960 1.319 -1.166 1.00 0.00 P1 O +ATOM 1784 N HSD X 114 -11.846 0.295 -0.487 1.00 0.00 P1 N +ATOM 1785 HN HSD X 114 -12.346 -0.190 0.236 1.00 0.00 P1 H +ATOM 1786 CA HSD X 114 -12.552 0.568 -1.715 1.00 0.00 P1 C +ATOM 1787 HA HSD X 114 -11.831 0.787 -2.491 1.00 0.00 P1 H +ATOM 1788 CB HSD X 114 -13.409 -0.602 -2.242 1.00 0.00 P1 C +ATOM 1789 HB1 HSD X 114 -14.428 -0.604 -1.801 1.00 0.00 P1 H +ATOM 1790 HB2 HSD X 114 -12.914 -1.553 -1.946 1.00 0.00 P1 H +ATOM 1791 ND1 HSD X 114 -14.099 0.355 -4.520 1.00 0.00 P1 N +ATOM 1792 HD1 HSD X 114 -14.627 1.136 -4.182 1.00 0.00 P1 H +ATOM 1793 CG HSD X 114 -13.467 -0.600 -3.749 1.00 0.00 P1 C +ATOM 1794 CE1 HSD X 114 -13.818 0.062 -5.815 1.00 0.00 P1 C +ATOM 1795 HE1 HSD X 114 -14.177 0.666 -6.647 1.00 0.00 P1 H +ATOM 1796 NE2 HSD X 114 -13.050 -1.004 -5.931 1.00 0.00 P1 N +ATOM 1797 CD2 HSD X 114 -12.829 -1.420 -4.630 1.00 0.00 P1 C +ATOM 1798 HD2 HSD X 114 -12.199 -2.279 -4.438 1.00 0.00 P1 H +ATOM 1799 C HSD X 114 -13.387 1.791 -1.483 1.00 0.00 P1 C +ATOM 1800 O HSD X 114 -14.309 1.790 -0.675 1.00 0.00 P1 O +ATOM 1801 N ILE X 115 -13.027 2.878 -2.180 1.00 0.00 P1 N +ATOM 1802 HN ILE X 115 -12.276 2.814 -2.845 1.00 0.00 P1 H +ATOM 1803 CA ILE X 115 -13.580 4.197 -2.057 1.00 0.00 P1 C +ATOM 1804 HA ILE X 115 -14.108 4.302 -1.118 1.00 0.00 P1 H +ATOM 1805 CB ILE X 115 -12.474 5.242 -2.190 1.00 0.00 P1 C +ATOM 1806 HB ILE X 115 -11.952 5.094 -3.165 1.00 0.00 P1 H +ATOM 1807 CG2 ILE X 115 -13.061 6.673 -2.177 1.00 0.00 P1 C +ATOM 1808 HG21 ILE X 115 -13.587 6.862 -1.218 1.00 0.00 P1 H +ATOM 1809 HG22 ILE X 115 -13.777 6.825 -3.010 1.00 0.00 P1 H +ATOM 1810 HG23 ILE X 115 -12.254 7.426 -2.290 1.00 0.00 P1 H +ATOM 1811 CG1 ILE X 115 -11.430 5.007 -1.069 1.00 0.00 P1 C +ATOM 1812 HG11 ILE X 115 -11.075 3.953 -1.097 1.00 0.00 P1 H +ATOM 1813 HG12 ILE X 115 -11.920 5.162 -0.085 1.00 0.00 P1 H +ATOM 1814 CD ILE X 115 -10.188 5.891 -1.176 1.00 0.00 P1 C +ATOM 1815 HD1 ILE X 115 -10.458 6.966 -1.130 1.00 0.00 P1 H +ATOM 1816 HD2 ILE X 115 -9.660 5.699 -2.134 1.00 0.00 P1 H +ATOM 1817 HD3 ILE X 115 -9.492 5.678 -0.337 1.00 0.00 P1 H +ATOM 1818 C ILE X 115 -14.542 4.304 -3.198 1.00 0.00 P1 C +ATOM 1819 O ILE X 115 -14.172 4.040 -4.342 1.00 0.00 P1 O +ATOM 1820 N ASP X 116 -15.816 4.672 -2.931 1.00 0.00 P1 N +ATOM 1821 HN ASP X 116 -16.145 4.870 -2.007 1.00 0.00 P1 H +ATOM 1822 CA ASP X 116 -16.779 4.777 -4.000 1.00 0.00 P1 C +ATOM 1823 HA ASP X 116 -16.486 4.087 -4.782 1.00 0.00 P1 H +ATOM 1824 CB ASP X 116 -18.215 4.400 -3.561 1.00 0.00 P1 C +ATOM 1825 HB1 ASP X 116 -18.718 5.234 -3.033 1.00 0.00 P1 H +ATOM 1826 HB2 ASP X 116 -18.167 3.528 -2.874 1.00 0.00 P1 H +ATOM 1827 CG ASP X 116 -19.017 3.974 -4.789 1.00 0.00 P1 C +ATOM 1828 OD1 ASP X 116 -18.573 3.004 -5.460 1.00 0.00 P1 O +ATOM 1829 OD2 ASP X 116 -20.062 4.610 -5.075 1.00 0.00 P1 O +ATOM 1830 C ASP X 116 -16.692 6.177 -4.565 1.00 0.00 P1 C +ATOM 1831 O ASP X 116 -17.340 7.111 -4.098 1.00 0.00 P1 O +ATOM 1832 N ALA X 117 -15.817 6.337 -5.576 1.00 0.00 P1 N +ATOM 1833 HN ALA X 117 -15.271 5.569 -5.904 1.00 0.00 P1 H +ATOM 1834 CA ALA X 117 -15.544 7.606 -6.188 1.00 0.00 P1 C +ATOM 1835 HA ALA X 117 -16.462 8.171 -6.282 1.00 0.00 P1 H +ATOM 1836 CB ALA X 117 -14.471 8.401 -5.415 1.00 0.00 P1 C +ATOM 1837 HB1 ALA X 117 -13.523 7.826 -5.347 1.00 0.00 P1 H +ATOM 1838 HB2 ALA X 117 -14.823 8.602 -4.382 1.00 0.00 P1 H +ATOM 1839 HB3 ALA X 117 -14.267 9.375 -5.907 1.00 0.00 P1 H +ATOM 1840 C ALA X 117 -15.009 7.297 -7.556 1.00 0.00 P1 C +ATOM 1841 O ALA X 117 -14.119 6.463 -7.697 1.00 0.00 P1 O +ATOM 1842 N GLU X 118 -15.543 7.952 -8.609 1.00 0.00 P1 N +ATOM 1843 HN GLU X 118 -16.275 8.618 -8.504 1.00 0.00 P1 H +ATOM 1844 CA GLU X 118 -15.050 7.763 -9.955 1.00 0.00 P1 C +ATOM 1845 HA GLU X 118 -14.591 6.787 -10.045 1.00 0.00 P1 H +ATOM 1846 CB GLU X 118 -16.141 7.865 -11.041 1.00 0.00 P1 C +ATOM 1847 HB1 GLU X 118 -15.639 7.871 -12.038 1.00 0.00 P1 H +ATOM 1848 HB2 GLU X 118 -16.707 8.816 -10.941 1.00 0.00 P1 H +ATOM 1849 CG GLU X 118 -17.108 6.666 -10.998 1.00 0.00 P1 C +ATOM 1850 HG1 GLU X 118 -17.820 6.767 -10.153 1.00 0.00 P1 H +ATOM 1851 HG2 GLU X 118 -16.526 5.729 -10.859 1.00 0.00 P1 H +ATOM 1852 CD GLU X 118 -17.873 6.535 -12.313 1.00 0.00 P1 C +ATOM 1853 OE1 GLU X 118 -19.131 6.509 -12.271 1.00 0.00 P1 O +ATOM 1854 OE2 GLU X 118 -17.202 6.438 -13.374 1.00 0.00 P1 O +ATOM 1855 C GLU X 118 -14.000 8.800 -10.223 1.00 0.00 P1 C +ATOM 1856 O GLU X 118 -14.202 9.984 -9.957 1.00 0.00 P1 O +ATOM 1857 N VAL X 119 -12.824 8.365 -10.729 1.00 0.00 P1 N +ATOM 1858 HN VAL X 119 -12.655 7.411 -10.969 1.00 0.00 P1 H +ATOM 1859 CA VAL X 119 -11.750 9.286 -11.002 1.00 0.00 P1 C +ATOM 1860 HA VAL X 119 -12.179 10.245 -11.261 1.00 0.00 P1 H +ATOM 1861 CB VAL X 119 -10.718 9.471 -9.885 1.00 0.00 P1 C +ATOM 1862 HB VAL X 119 -9.824 8.822 -10.049 1.00 0.00 P1 H +ATOM 1863 CG1 VAL X 119 -10.268 10.943 -9.910 1.00 0.00 P1 C +ATOM 1864 HG11 VAL X 119 -11.106 11.614 -9.623 1.00 0.00 P1 H +ATOM 1865 HG12 VAL X 119 -9.890 11.247 -10.905 1.00 0.00 P1 H +ATOM 1866 HG13 VAL X 119 -9.436 11.069 -9.190 1.00 0.00 P1 H +ATOM 1867 CG2 VAL X 119 -11.267 9.092 -8.493 1.00 0.00 P1 C +ATOM 1868 HG21 VAL X 119 -11.557 8.021 -8.457 1.00 0.00 P1 H +ATOM 1869 HG22 VAL X 119 -12.151 9.714 -8.239 1.00 0.00 P1 H +ATOM 1870 HG23 VAL X 119 -10.489 9.265 -7.719 1.00 0.00 P1 H +ATOM 1871 C VAL X 119 -11.009 8.797 -12.207 1.00 0.00 P1 C +ATOM 1872 O VAL X 119 -10.940 7.596 -12.472 1.00 0.00 P1 O +ATOM 1873 N GLU X 120 -10.396 9.753 -12.938 1.00 0.00 P1 N +ATOM 1874 HN GLU X 120 -10.500 10.719 -12.722 1.00 0.00 P1 H +ATOM 1875 CA GLU X 120 -9.550 9.461 -14.055 1.00 0.00 P1 C +ATOM 1876 HA GLU X 120 -9.774 8.465 -14.415 1.00 0.00 P1 H +ATOM 1877 CB GLU X 120 -9.732 10.417 -15.256 1.00 0.00 P1 C +ATOM 1878 HB1 GLU X 120 -9.134 10.011 -16.104 1.00 0.00 P1 H +ATOM 1879 HB2 GLU X 120 -9.325 11.423 -15.013 1.00 0.00 P1 H +ATOM 1880 CG GLU X 120 -11.192 10.596 -15.754 1.00 0.00 P1 C +ATOM 1881 HG1 GLU X 120 -11.185 10.782 -16.848 1.00 0.00 P1 H +ATOM 1882 HG2 GLU X 120 -11.621 11.495 -15.259 1.00 0.00 P1 H +ATOM 1883 CD GLU X 120 -12.139 9.421 -15.464 1.00 0.00 P1 C +ATOM 1884 OE1 GLU X 120 -11.780 8.251 -15.749 1.00 0.00 P1 O +ATOM 1885 OE2 GLU X 120 -13.251 9.707 -14.942 1.00 0.00 P1 O +ATOM 1886 C GLU X 120 -8.133 9.447 -13.565 1.00 0.00 P1 C +ATOM 1887 O GLU X 120 -7.516 10.480 -13.302 1.00 0.00 P1 O +ATOM 1888 N GLY X 121 -7.627 8.208 -13.429 1.00 0.00 P1 N +ATOM 1889 HN GLY X 121 -8.206 7.417 -13.622 1.00 0.00 P1 H +ATOM 1890 CA GLY X 121 -6.243 7.871 -13.255 1.00 0.00 P1 C +ATOM 1891 HA1 GLY X 121 -6.112 7.374 -12.309 1.00 0.00 P1 H +ATOM 1892 HA2 GLY X 121 -5.665 8.765 -13.385 1.00 0.00 P1 H +ATOM 1893 C GLY X 121 -6.028 6.893 -14.383 1.00 0.00 P1 C +ATOM 1894 O GLY X 121 -7.009 6.313 -14.840 1.00 0.00 P1 O +ATOM 1895 N ASP X 122 -4.832 6.609 -14.946 1.00 0.00 P1 N +ATOM 1896 HN ASP X 122 -4.897 5.995 -15.728 1.00 0.00 P1 H +ATOM 1897 CA ASP X 122 -3.461 6.940 -14.649 1.00 0.00 P1 C +ATOM 1898 HA ASP X 122 -3.011 7.122 -15.615 1.00 0.00 P1 H +ATOM 1899 CB ASP X 122 -3.127 8.197 -13.793 1.00 0.00 P1 C +ATOM 1900 HB1 ASP X 122 -2.032 8.247 -13.654 1.00 0.00 P1 H +ATOM 1901 HB2 ASP X 122 -3.590 8.151 -12.790 1.00 0.00 P1 H +ATOM 1902 CG ASP X 122 -3.547 9.503 -14.498 1.00 0.00 P1 C +ATOM 1903 OD1 ASP X 122 -2.939 10.553 -14.169 1.00 0.00 P1 O +ATOM 1904 OD2 ASP X 122 -4.469 9.481 -15.353 1.00 0.00 P1 O +ATOM 1905 C ASP X 122 -2.881 5.617 -14.194 1.00 0.00 P1 C +ATOM 1906 O ASP X 122 -2.518 4.805 -15.044 1.00 0.00 P1 O +ATOM 1907 N THR X 123 -2.822 5.317 -12.875 1.00 0.00 P1 N +ATOM 1908 HN THR X 123 -3.124 5.970 -12.186 1.00 0.00 P1 H +ATOM 1909 CA THR X 123 -2.334 4.025 -12.398 1.00 0.00 P1 C +ATOM 1910 HA THR X 123 -1.895 3.474 -13.218 1.00 0.00 P1 H +ATOM 1911 CB THR X 123 -1.271 4.152 -11.320 1.00 0.00 P1 C +ATOM 1912 HB THR X 123 -1.687 4.656 -10.421 1.00 0.00 P1 H +ATOM 1913 OG1 THR X 123 -0.219 4.950 -11.814 1.00 0.00 P1 O +ATOM 1914 HG1 THR X 123 0.132 4.490 -12.581 1.00 0.00 P1 H +ATOM 1915 CG2 THR X 123 -0.630 2.816 -10.913 1.00 0.00 P1 C +ATOM 1916 HG21 THR X 123 -0.221 2.283 -11.797 1.00 0.00 P1 H +ATOM 1917 HG22 THR X 123 -1.364 2.157 -10.412 1.00 0.00 P1 H +ATOM 1918 HG23 THR X 123 0.200 2.999 -10.197 1.00 0.00 P1 H +ATOM 1919 C THR X 123 -3.475 3.201 -11.863 1.00 0.00 P1 C +ATOM 1920 O THR X 123 -4.391 3.724 -11.230 1.00 0.00 P1 O +ATOM 1921 N HSD X 124 -3.414 1.870 -12.100 1.00 0.00 P1 N +ATOM 1922 HN HSD X 124 -2.660 1.481 -12.623 1.00 0.00 P1 H +ATOM 1923 CA HSD X 124 -4.324 0.893 -11.551 1.00 0.00 P1 C +ATOM 1924 HA HSD X 124 -5.126 1.389 -11.022 1.00 0.00 P1 H +ATOM 1925 CB HSD X 124 -4.910 -0.032 -12.640 1.00 0.00 P1 C +ATOM 1926 HB1 HSD X 124 -5.447 -0.891 -12.180 1.00 0.00 P1 H +ATOM 1927 HB2 HSD X 124 -4.089 -0.438 -13.270 1.00 0.00 P1 H +ATOM 1928 ND1 HSD X 124 -7.246 0.601 -13.413 1.00 0.00 P1 N +ATOM 1929 HD1 HSD X 124 -7.764 0.051 -12.751 1.00 0.00 P1 H +ATOM 1930 CG HSD X 124 -5.876 0.707 -13.515 1.00 0.00 P1 C +ATOM 1931 CE1 HSD X 124 -7.774 1.481 -14.299 1.00 0.00 P1 C +ATOM 1932 HE1 HSD X 124 -8.847 1.626 -14.423 1.00 0.00 P1 H +ATOM 1933 NE2 HSD X 124 -6.844 2.148 -14.951 1.00 0.00 P1 N +ATOM 1934 CD2 HSD X 124 -5.648 1.661 -14.459 1.00 0.00 P1 C +ATOM 1935 HD2 HSD X 124 -4.712 2.063 -14.825 1.00 0.00 P1 H +ATOM 1936 C HSD X 124 -3.574 0.029 -10.574 1.00 0.00 P1 C +ATOM 1937 O HSD X 124 -2.356 -0.125 -10.653 1.00 0.00 P1 O +ATOM 1938 N PHE X 125 -4.316 -0.591 -9.629 1.00 0.00 P1 N +ATOM 1939 HN PHE X 125 -5.294 -0.391 -9.546 1.00 0.00 P1 H +ATOM 1940 CA PHE X 125 -3.814 -1.631 -8.756 1.00 0.00 P1 C +ATOM 1941 HA PHE X 125 -2.836 -1.336 -8.406 1.00 0.00 P1 H +ATOM 1942 CB PHE X 125 -4.793 -1.841 -7.561 1.00 0.00 P1 C +ATOM 1943 HB1 PHE X 125 -5.774 -2.208 -7.932 1.00 0.00 P1 H +ATOM 1944 HB2 PHE X 125 -4.965 -0.867 -7.059 1.00 0.00 P1 H +ATOM 1945 CG PHE X 125 -4.279 -2.795 -6.510 1.00 0.00 P1 C +ATOM 1946 CD1 PHE X 125 -3.259 -2.410 -5.621 1.00 0.00 P1 C +ATOM 1947 HD1 PHE X 125 -2.839 -1.417 -5.684 1.00 0.00 P1 H +ATOM 1948 CE1 PHE X 125 -2.770 -3.311 -4.665 1.00 0.00 P1 C +ATOM 1949 HE1 PHE X 125 -1.983 -3.006 -3.991 1.00 0.00 P1 H +ATOM 1950 CZ PHE X 125 -3.306 -4.601 -4.581 1.00 0.00 P1 C +ATOM 1951 HZ PHE X 125 -2.928 -5.294 -3.845 1.00 0.00 P1 H +ATOM 1952 CD2 PHE X 125 -4.823 -4.086 -6.398 1.00 0.00 P1 C +ATOM 1953 HD2 PHE X 125 -5.613 -4.390 -7.068 1.00 0.00 P1 H +ATOM 1954 CE2 PHE X 125 -4.336 -4.988 -5.444 1.00 0.00 P1 C +ATOM 1955 HE2 PHE X 125 -4.751 -5.982 -5.371 1.00 0.00 P1 H +ATOM 1956 C PHE X 125 -3.724 -2.880 -9.613 1.00 0.00 P1 C +ATOM 1957 O PHE X 125 -4.556 -3.008 -10.510 1.00 0.00 P1 O +ATOM 1958 N PRO X 126 -2.787 -3.812 -9.454 1.00 0.00 P1 N +ATOM 1959 CD PRO X 126 -1.582 -3.663 -8.644 1.00 0.00 P1 C +ATOM 1960 HD1 PRO X 126 -1.808 -3.286 -7.627 1.00 0.00 P1 H +ATOM 1961 HD2 PRO X 126 -0.884 -2.973 -9.168 1.00 0.00 P1 H +ATOM 1962 CA PRO X 126 -2.715 -4.984 -10.311 1.00 0.00 P1 C +ATOM 1963 HA PRO X 126 -2.785 -4.677 -11.346 1.00 0.00 P1 H +ATOM 1964 CB PRO X 126 -1.353 -5.617 -9.982 1.00 0.00 P1 C +ATOM 1965 HB1 PRO X 126 -0.600 -5.236 -10.709 1.00 0.00 P1 H +ATOM 1966 HB2 PRO X 126 -1.354 -6.724 -10.024 1.00 0.00 P1 H +ATOM 1967 CG PRO X 126 -1.008 -5.075 -8.594 1.00 0.00 P1 C +ATOM 1968 HG1 PRO X 126 -1.547 -5.664 -7.819 1.00 0.00 P1 H +ATOM 1969 HG2 PRO X 126 0.077 -5.091 -8.381 1.00 0.00 P1 H +ATOM 1970 C PRO X 126 -3.855 -5.929 -10.024 1.00 0.00 P1 C +ATOM 1971 O PRO X 126 -4.551 -5.801 -9.016 1.00 0.00 P1 O +ATOM 1972 N ASP X 127 -4.101 -6.860 -10.960 1.00 0.00 P1 N +ATOM 1973 HN ASP X 127 -3.516 -6.956 -11.766 1.00 0.00 P1 H +ATOM 1974 CA ASP X 127 -5.272 -7.701 -10.974 1.00 0.00 P1 C +ATOM 1975 HA ASP X 127 -6.082 -7.182 -10.487 1.00 0.00 P1 H +ATOM 1976 CB ASP X 127 -5.768 -8.093 -12.398 1.00 0.00 P1 C +ATOM 1977 HB1 ASP X 127 -6.848 -7.865 -12.503 1.00 0.00 P1 H +ATOM 1978 HB2 ASP X 127 -5.624 -9.178 -12.591 1.00 0.00 P1 H +ATOM 1979 CG ASP X 127 -4.987 -7.326 -13.463 1.00 0.00 P1 C +ATOM 1980 OD1 ASP X 127 -5.300 -6.126 -13.691 1.00 0.00 P1 O +ATOM 1981 OD2 ASP X 127 -4.021 -7.924 -14.001 1.00 0.00 P1 O +ATOM 1982 C ASP X 127 -4.977 -8.902 -10.141 1.00 0.00 P1 C +ATOM 1983 O ASP X 127 -4.092 -9.701 -10.441 1.00 0.00 P1 O +ATOM 1984 N TYR X 128 -5.730 -9.014 -9.035 1.00 0.00 P1 N +ATOM 1985 HN TYR X 128 -6.425 -8.335 -8.817 1.00 0.00 P1 H +ATOM 1986 CA TYR X 128 -5.678 -10.117 -8.125 1.00 0.00 P1 C +ATOM 1987 HA TYR X 128 -4.738 -10.639 -8.251 1.00 0.00 P1 H +ATOM 1988 CB TYR X 128 -5.780 -9.679 -6.635 1.00 0.00 P1 C +ATOM 1989 HB1 TYR X 128 -4.851 -9.134 -6.360 1.00 0.00 P1 H +ATOM 1990 HB2 TYR X 128 -5.857 -10.564 -5.980 1.00 0.00 P1 H +ATOM 1991 CG TYR X 128 -6.937 -8.764 -6.321 1.00 0.00 P1 C +ATOM 1992 CD1 TYR X 128 -6.869 -7.398 -6.645 1.00 0.00 P1 C +ATOM 1993 HD1 TYR X 128 -5.993 -7.008 -7.141 1.00 0.00 P1 H +ATOM 1994 CE1 TYR X 128 -7.909 -6.529 -6.301 1.00 0.00 P1 C +ATOM 1995 HE1 TYR X 128 -7.827 -5.479 -6.531 1.00 0.00 P1 H +ATOM 1996 CZ TYR X 128 -9.032 -7.014 -5.623 1.00 0.00 P1 C +ATOM 1997 OH TYR X 128 -10.067 -6.120 -5.273 1.00 0.00 P1 O +ATOM 1998 HH TYR X 128 -10.709 -6.601 -4.745 1.00 0.00 P1 H +ATOM 1999 CD2 TYR X 128 -8.065 -9.241 -5.629 1.00 0.00 P1 C +ATOM 2000 HD2 TYR X 128 -8.124 -10.284 -5.354 1.00 0.00 P1 H +ATOM 2001 CE2 TYR X 128 -9.109 -8.371 -5.280 1.00 0.00 P1 C +ATOM 2002 HE2 TYR X 128 -9.966 -8.753 -4.745 1.00 0.00 P1 H +ATOM 2003 C TYR X 128 -6.784 -11.048 -8.549 1.00 0.00 P1 C +ATOM 2004 O TYR X 128 -7.854 -10.613 -8.970 1.00 0.00 P1 O +ATOM 2005 N GLU X 129 -6.508 -12.365 -8.501 1.00 0.00 P1 N +ATOM 2006 HN GLU X 129 -5.640 -12.696 -8.144 1.00 0.00 P1 H +ATOM 2007 CA GLU X 129 -7.361 -13.392 -9.052 1.00 0.00 P1 C +ATOM 2008 HA GLU X 129 -7.877 -13.006 -9.917 1.00 0.00 P1 H +ATOM 2009 CB GLU X 129 -6.476 -14.582 -9.507 1.00 0.00 P1 C +ATOM 2010 HB1 GLU X 129 -5.778 -14.810 -8.667 1.00 0.00 P1 H +ATOM 2011 HB2 GLU X 129 -5.844 -14.262 -10.363 1.00 0.00 P1 H +ATOM 2012 CG GLU X 129 -7.177 -15.920 -9.849 1.00 0.00 P1 C +ATOM 2013 HG1 GLU X 129 -8.024 -16.133 -9.173 1.00 0.00 P1 H +ATOM 2014 HG2 GLU X 129 -6.430 -16.732 -9.687 1.00 0.00 P1 H +ATOM 2015 CD GLU X 129 -7.647 -16.049 -11.296 1.00 0.00 P1 C +ATOM 2016 OE1 GLU X 129 -7.467 -17.163 -11.856 1.00 0.00 P1 O +ATOM 2017 OE2 GLU X 129 -8.200 -15.064 -11.849 1.00 0.00 P1 O +ATOM 2018 C GLU X 129 -8.323 -13.854 -7.971 1.00 0.00 P1 C +ATOM 2019 O GLU X 129 -7.845 -14.339 -6.950 1.00 0.00 P1 O +ATOM 2020 N PRO X 130 -9.651 -13.774 -8.086 1.00 0.00 P1 N +ATOM 2021 CD PRO X 130 -10.324 -13.008 -9.129 1.00 0.00 P1 C +ATOM 2022 HD1 PRO X 130 -9.914 -13.236 -10.138 1.00 0.00 P1 H +ATOM 2023 HD2 PRO X 130 -10.230 -11.924 -8.900 1.00 0.00 P1 H +ATOM 2024 CA PRO X 130 -10.565 -14.086 -6.989 1.00 0.00 P1 C +ATOM 2025 HA PRO X 130 -10.277 -13.484 -6.138 1.00 0.00 P1 H +ATOM 2026 CB PRO X 130 -11.962 -13.713 -7.529 1.00 0.00 P1 C +ATOM 2027 HB1 PRO X 130 -12.282 -12.760 -7.051 1.00 0.00 P1 H +ATOM 2028 HB2 PRO X 130 -12.737 -14.482 -7.334 1.00 0.00 P1 H +ATOM 2029 CG PRO X 130 -11.771 -13.471 -9.032 1.00 0.00 P1 C +ATOM 2030 HG1 PRO X 130 -11.883 -14.436 -9.575 1.00 0.00 P1 H +ATOM 2031 HG2 PRO X 130 -12.488 -12.731 -9.440 1.00 0.00 P1 H +ATOM 2032 C PRO X 130 -10.536 -15.529 -6.534 1.00 0.00 P1 C +ATOM 2033 O PRO X 130 -10.891 -15.778 -5.386 1.00 0.00 P1 O +ATOM 2034 N ASP X 131 -10.095 -16.489 -7.378 1.00 0.00 P1 N +ATOM 2035 HN ASP X 131 -9.835 -16.274 -8.315 1.00 0.00 P1 H +ATOM 2036 CA ASP X 131 -9.969 -17.878 -6.983 1.00 0.00 P1 C +ATOM 2037 HA ASP X 131 -10.760 -18.098 -6.278 1.00 0.00 P1 H +ATOM 2038 CB ASP X 131 -10.062 -18.829 -8.217 1.00 0.00 P1 C +ATOM 2039 HB1 ASP X 131 -9.209 -19.541 -8.247 1.00 0.00 P1 H +ATOM 2040 HB2 ASP X 131 -10.032 -18.234 -9.153 1.00 0.00 P1 H +ATOM 2041 CG ASP X 131 -11.354 -19.653 -8.209 1.00 0.00 P1 C +ATOM 2042 OD1 ASP X 131 -12.365 -19.196 -7.615 1.00 0.00 P1 O +ATOM 2043 OD2 ASP X 131 -11.335 -20.765 -8.801 1.00 0.00 P1 O +ATOM 2044 C ASP X 131 -8.677 -18.116 -6.217 1.00 0.00 P1 C +ATOM 2045 O ASP X 131 -8.431 -19.226 -5.747 1.00 0.00 P1 O +ATOM 2046 N ASP X 132 -7.842 -17.067 -6.035 1.00 0.00 P1 N +ATOM 2047 HN ASP X 132 -8.031 -16.181 -6.460 1.00 0.00 P1 H +ATOM 2048 CA ASP X 132 -6.601 -17.145 -5.298 1.00 0.00 P1 C +ATOM 2049 HA ASP X 132 -6.362 -18.179 -5.081 1.00 0.00 P1 H +ATOM 2050 CB ASP X 132 -5.410 -16.506 -6.059 1.00 0.00 P1 C +ATOM 2051 HB1 ASP X 132 -4.522 -16.462 -5.390 1.00 0.00 P1 H +ATOM 2052 HB2 ASP X 132 -5.657 -15.474 -6.378 1.00 0.00 P1 H +ATOM 2053 CG ASP X 132 -4.993 -17.317 -7.285 1.00 0.00 P1 C +ATOM 2054 OD1 ASP X 132 -5.722 -18.253 -7.701 1.00 0.00 P1 O +ATOM 2055 OD2 ASP X 132 -3.897 -16.991 -7.816 1.00 0.00 P1 O +ATOM 2056 C ASP X 132 -6.708 -16.428 -3.973 1.00 0.00 P1 C +ATOM 2057 O ASP X 132 -5.871 -16.646 -3.102 1.00 0.00 P1 O +ATOM 2058 N TRP X 133 -7.713 -15.545 -3.769 1.00 0.00 P1 N +ATOM 2059 HN TRP X 133 -8.424 -15.392 -4.452 1.00 0.00 P1 H +ATOM 2060 CA TRP X 133 -7.808 -14.768 -2.548 1.00 0.00 P1 C +ATOM 2061 HA TRP X 133 -7.020 -15.048 -1.861 1.00 0.00 P1 H +ATOM 2062 CB TRP X 133 -7.713 -13.244 -2.780 1.00 0.00 P1 C +ATOM 2063 HB1 TRP X 133 -7.826 -12.710 -1.817 1.00 0.00 P1 H +ATOM 2064 HB2 TRP X 133 -8.528 -12.921 -3.464 1.00 0.00 P1 H +ATOM 2065 CG TRP X 133 -6.387 -12.849 -3.384 1.00 0.00 P1 C +ATOM 2066 CD1 TRP X 133 -6.049 -12.817 -4.702 1.00 0.00 P1 C +ATOM 2067 HD1 TRP X 133 -6.749 -12.917 -5.509 1.00 0.00 P1 H +ATOM 2068 NE1 TRP X 133 -4.712 -12.540 -4.853 1.00 0.00 P1 N +ATOM 2069 HE1 TRP X 133 -4.223 -12.488 -5.695 1.00 0.00 P1 H +ATOM 2070 CE2 TRP X 133 -4.169 -12.335 -3.610 1.00 0.00 P1 C +ATOM 2071 CD2 TRP X 133 -5.192 -12.526 -2.656 1.00 0.00 P1 C +ATOM 2072 CE3 TRP X 133 -4.940 -12.394 -1.299 1.00 0.00 P1 C +ATOM 2073 HE3 TRP X 133 -5.712 -12.529 -0.559 1.00 0.00 P1 H +ATOM 2074 CZ3 TRP X 133 -3.636 -12.071 -0.906 1.00 0.00 P1 C +ATOM 2075 HZ3 TRP X 133 -3.426 -11.961 0.144 1.00 0.00 P1 H +ATOM 2076 CZ2 TRP X 133 -2.880 -11.997 -3.221 1.00 0.00 P1 C +ATOM 2077 HZ2 TRP X 133 -2.092 -11.835 -3.940 1.00 0.00 P1 H +ATOM 2078 CH2 TRP X 133 -2.618 -11.871 -1.850 1.00 0.00 P1 C +ATOM 2079 HH2 TRP X 133 -1.625 -11.611 -1.515 1.00 0.00 P1 H +ATOM 2080 C TRP X 133 -9.105 -15.062 -1.866 1.00 0.00 P1 C +ATOM 2081 O TRP X 133 -10.132 -15.288 -2.499 1.00 0.00 P1 O +ATOM 2082 N GLU X 134 -9.066 -15.062 -0.524 1.00 0.00 P1 N +ATOM 2083 HN GLU X 134 -8.203 -14.930 -0.029 1.00 0.00 P1 H +ATOM 2084 CA GLU X 134 -10.211 -15.289 0.307 1.00 0.00 P1 C +ATOM 2085 HA GLU X 134 -11.083 -15.512 -0.293 1.00 0.00 P1 H +ATOM 2086 CB GLU X 134 -9.942 -16.450 1.286 1.00 0.00 P1 C +ATOM 2087 HB1 GLU X 134 -9.139 -16.157 2.000 1.00 0.00 P1 H +ATOM 2088 HB2 GLU X 134 -9.561 -17.319 0.705 1.00 0.00 P1 H +ATOM 2089 CG GLU X 134 -11.197 -16.901 2.054 1.00 0.00 P1 C +ATOM 2090 HG1 GLU X 134 -11.941 -17.347 1.363 1.00 0.00 P1 H +ATOM 2091 HG2 GLU X 134 -11.662 -16.023 2.554 1.00 0.00 P1 H +ATOM 2092 CD GLU X 134 -10.855 -17.915 3.142 1.00 0.00 P1 C +ATOM 2093 OE1 GLU X 134 -9.733 -18.486 3.122 1.00 0.00 P1 O +ATOM 2094 OE2 GLU X 134 -11.735 -18.120 4.019 1.00 0.00 P1 O +ATOM 2095 C GLU X 134 -10.447 -14.020 1.078 1.00 0.00 P1 C +ATOM 2096 O GLU X 134 -9.556 -13.540 1.775 1.00 0.00 P1 O +ATOM 2097 N SER X 135 -11.664 -13.440 0.967 1.00 0.00 P1 N +ATOM 2098 HN SER X 135 -12.370 -13.842 0.391 1.00 0.00 P1 H +ATOM 2099 CA SER X 135 -12.057 -12.262 1.711 1.00 0.00 P1 C +ATOM 2100 HA SER X 135 -11.215 -11.586 1.775 1.00 0.00 P1 H +ATOM 2101 CB SER X 135 -13.253 -11.527 1.056 1.00 0.00 P1 C +ATOM 2102 HB1 SER X 135 -14.156 -12.176 1.051 1.00 0.00 P1 H +ATOM 2103 HB2 SER X 135 -12.993 -11.294 -0.001 1.00 0.00 P1 H +ATOM 2104 OG SER X 135 -13.561 -10.303 1.717 1.00 0.00 P1 O +ATOM 2105 HG1 SER X 135 -13.411 -9.606 1.047 1.00 0.00 P1 H +ATOM 2106 C SER X 135 -12.455 -12.700 3.096 1.00 0.00 P1 C +ATOM 2107 O SER X 135 -13.412 -13.454 3.261 1.00 0.00 P1 O +ATOM 2108 N VAL X 136 -11.697 -12.254 4.119 1.00 0.00 P1 N +ATOM 2109 HN VAL X 136 -10.922 -11.643 3.959 1.00 0.00 P1 H +ATOM 2110 CA VAL X 136 -11.901 -12.677 5.489 1.00 0.00 P1 C +ATOM 2111 HA VAL X 136 -12.588 -13.512 5.513 1.00 0.00 P1 H +ATOM 2112 CB VAL X 136 -10.610 -13.140 6.164 1.00 0.00 P1 C +ATOM 2113 HB VAL X 136 -10.832 -13.423 7.220 1.00 0.00 P1 H +ATOM 2114 CG1 VAL X 136 -10.105 -14.408 5.440 1.00 0.00 P1 C +ATOM 2115 HG11 VAL X 136 -9.831 -14.182 4.389 1.00 0.00 P1 H +ATOM 2116 HG12 VAL X 136 -10.887 -15.197 5.439 1.00 0.00 P1 H +ATOM 2117 HG13 VAL X 136 -9.204 -14.807 5.953 1.00 0.00 P1 H +ATOM 2118 CG2 VAL X 136 -9.531 -12.036 6.174 1.00 0.00 P1 C +ATOM 2119 HG21 VAL X 136 -9.889 -11.125 6.696 1.00 0.00 P1 H +ATOM 2120 HG22 VAL X 136 -9.232 -11.766 5.141 1.00 0.00 P1 H +ATOM 2121 HG23 VAL X 136 -8.626 -12.404 6.704 1.00 0.00 P1 H +ATOM 2122 C VAL X 136 -12.545 -11.567 6.287 1.00 0.00 P1 C +ATOM 2123 O VAL X 136 -13.003 -11.792 7.406 1.00 0.00 P1 O +ATOM 2124 N PHE X 137 -12.596 -10.333 5.736 1.00 0.00 P1 N +ATOM 2125 HN PHE X 137 -12.269 -10.161 4.808 1.00 0.00 P1 H +ATOM 2126 CA PHE X 137 -13.049 -9.181 6.476 1.00 0.00 P1 C +ATOM 2127 HA PHE X 137 -13.859 -9.467 7.135 1.00 0.00 P1 H +ATOM 2128 CB PHE X 137 -11.860 -8.580 7.276 1.00 0.00 P1 C +ATOM 2129 HB1 PHE X 137 -11.029 -8.351 6.578 1.00 0.00 P1 H +ATOM 2130 HB2 PHE X 137 -11.493 -9.331 8.008 1.00 0.00 P1 H +ATOM 2131 CG PHE X 137 -12.200 -7.329 8.037 1.00 0.00 P1 C +ATOM 2132 CD1 PHE X 137 -12.944 -7.388 9.226 1.00 0.00 P1 C +ATOM 2133 HD1 PHE X 137 -13.282 -8.342 9.602 1.00 0.00 P1 H +ATOM 2134 CE1 PHE X 137 -13.245 -6.215 9.930 1.00 0.00 P1 C +ATOM 2135 HE1 PHE X 137 -13.819 -6.263 10.844 1.00 0.00 P1 H +ATOM 2136 CZ PHE X 137 -12.799 -4.976 9.452 1.00 0.00 P1 C +ATOM 2137 HZ PHE X 137 -13.035 -4.072 9.996 1.00 0.00 P1 H +ATOM 2138 CD2 PHE X 137 -11.773 -6.079 7.556 1.00 0.00 P1 C +ATOM 2139 HD2 PHE X 137 -11.219 -6.019 6.632 1.00 0.00 P1 H +ATOM 2140 CE2 PHE X 137 -12.067 -4.908 8.261 1.00 0.00 P1 C +ATOM 2141 HE2 PHE X 137 -11.735 -3.951 7.887 1.00 0.00 P1 H +ATOM 2142 C PHE X 137 -13.576 -8.181 5.476 1.00 0.00 P1 C +ATOM 2143 O PHE X 137 -12.957 -7.970 4.439 1.00 0.00 P1 O +ATOM 2144 N SER X 138 -14.731 -7.545 5.790 1.00 0.00 P1 N +ATOM 2145 HN SER X 138 -15.213 -7.755 6.638 1.00 0.00 P1 H +ATOM 2146 CA SER X 138 -15.323 -6.463 5.029 1.00 0.00 P1 C +ATOM 2147 HA SER X 138 -14.556 -5.924 4.497 1.00 0.00 P1 H +ATOM 2148 CB SER X 138 -16.452 -6.902 4.066 1.00 0.00 P1 C +ATOM 2149 HB1 SER X 138 -17.011 -6.014 3.695 1.00 0.00 P1 H +ATOM 2150 HB2 SER X 138 -17.165 -7.579 4.585 1.00 0.00 P1 H +ATOM 2151 OG SER X 138 -15.921 -7.561 2.924 1.00 0.00 P1 O +ATOM 2152 HG1 SER X 138 -15.452 -8.340 3.239 1.00 0.00 P1 H +ATOM 2153 C SER X 138 -15.970 -5.560 6.045 1.00 0.00 P1 C +ATOM 2154 O SER X 138 -16.619 -6.053 6.964 1.00 0.00 P1 O +ATOM 2155 N GLU X 139 -15.823 -4.223 5.915 1.00 0.00 P1 N +ATOM 2156 HN GLU X 139 -15.233 -3.833 5.207 1.00 0.00 P1 H +ATOM 2157 CA GLU X 139 -16.436 -3.294 6.840 1.00 0.00 P1 C +ATOM 2158 HA GLU X 139 -17.332 -3.736 7.255 1.00 0.00 P1 H +ATOM 2159 CB GLU X 139 -15.474 -2.922 7.989 1.00 0.00 P1 C +ATOM 2160 HB1 GLU X 139 -14.609 -2.348 7.589 1.00 0.00 P1 H +ATOM 2161 HB2 GLU X 139 -15.074 -3.874 8.405 1.00 0.00 P1 H +ATOM 2162 CG GLU X 139 -16.134 -2.147 9.142 1.00 0.00 P1 C +ATOM 2163 HG1 GLU X 139 -16.965 -2.747 9.569 1.00 0.00 P1 H +ATOM 2164 HG2 GLU X 139 -16.541 -1.179 8.788 1.00 0.00 P1 H +ATOM 2165 CD GLU X 139 -15.097 -1.885 10.232 1.00 0.00 P1 C +ATOM 2166 OE1 GLU X 139 -14.144 -1.102 9.983 1.00 0.00 P1 O +ATOM 2167 OE2 GLU X 139 -15.232 -2.493 11.327 1.00 0.00 P1 O +ATOM 2168 C GLU X 139 -16.833 -2.053 6.086 1.00 0.00 P1 C +ATOM 2169 O GLU X 139 -15.978 -1.305 5.618 1.00 0.00 P1 O +ATOM 2170 N PHE X 140 -18.158 -1.824 5.932 1.00 0.00 P1 N +ATOM 2171 HN PHE X 140 -18.832 -2.415 6.365 1.00 0.00 P1 H +ATOM 2172 CA PHE X 140 -18.705 -0.775 5.096 1.00 0.00 P1 C +ATOM 2173 HA PHE X 140 -17.979 -0.501 4.343 1.00 0.00 P1 H +ATOM 2174 CB PHE X 140 -20.038 -1.170 4.407 1.00 0.00 P1 C +ATOM 2175 HB1 PHE X 140 -20.455 -0.313 3.835 1.00 0.00 P1 H +ATOM 2176 HB2 PHE X 140 -20.788 -1.489 5.162 1.00 0.00 P1 H +ATOM 2177 CG PHE X 140 -19.826 -2.307 3.446 1.00 0.00 P1 C +ATOM 2178 CD1 PHE X 140 -19.833 -3.637 3.902 1.00 0.00 P1 C +ATOM 2179 HD1 PHE X 140 -19.991 -3.847 4.949 1.00 0.00 P1 H +ATOM 2180 CE1 PHE X 140 -19.628 -4.697 3.011 1.00 0.00 P1 C +ATOM 2181 HE1 PHE X 140 -19.627 -5.715 3.372 1.00 0.00 P1 H +ATOM 2182 CZ PHE X 140 -19.431 -4.437 1.650 1.00 0.00 P1 C +ATOM 2183 HZ PHE X 140 -19.272 -5.255 0.961 1.00 0.00 P1 H +ATOM 2184 CD2 PHE X 140 -19.633 -2.058 2.076 1.00 0.00 P1 C +ATOM 2185 HD2 PHE X 140 -19.630 -1.042 1.711 1.00 0.00 P1 H +ATOM 2186 CE2 PHE X 140 -19.440 -3.118 1.181 1.00 0.00 P1 C +ATOM 2187 HE2 PHE X 140 -19.286 -2.917 0.131 1.00 0.00 P1 H +ATOM 2188 C PHE X 140 -19.006 0.438 5.931 1.00 0.00 P1 C +ATOM 2189 O PHE X 140 -19.502 0.337 7.052 1.00 0.00 P1 O +ATOM 2190 N HSD X 141 -18.718 1.629 5.372 1.00 0.00 P1 N +ATOM 2191 HN HSD X 141 -18.277 1.695 4.474 1.00 0.00 P1 H +ATOM 2192 CA HSD X 141 -18.966 2.883 6.026 1.00 0.00 P1 C +ATOM 2193 HA HSD X 141 -19.645 2.752 6.859 1.00 0.00 P1 H +ATOM 2194 CB HSD X 141 -17.670 3.549 6.492 1.00 0.00 P1 C +ATOM 2195 HB1 HSD X 141 -17.853 4.578 6.873 1.00 0.00 P1 H +ATOM 2196 HB2 HSD X 141 -16.971 3.617 5.629 1.00 0.00 P1 H +ATOM 2197 ND1 HSD X 141 -17.292 2.885 8.907 1.00 0.00 P1 N +ATOM 2198 HD1 HSD X 141 -17.952 3.518 9.313 1.00 0.00 P1 H +ATOM 2199 CG HSD X 141 -17.001 2.763 7.567 1.00 0.00 P1 C +ATOM 2200 CE1 HSD X 141 -16.510 1.990 9.556 1.00 0.00 P1 C +ATOM 2201 HE1 HSD X 141 -16.521 1.858 10.638 1.00 0.00 P1 H +ATOM 2202 NE2 HSD X 141 -15.746 1.310 8.727 1.00 0.00 P1 N +ATOM 2203 CD2 HSD X 141 -16.061 1.788 7.473 1.00 0.00 P1 C +ATOM 2204 HD2 HSD X 141 -15.575 1.375 6.598 1.00 0.00 P1 H +ATOM 2205 C HSD X 141 -19.588 3.832 5.058 1.00 0.00 P1 C +ATOM 2206 O HSD X 141 -19.313 3.807 3.859 1.00 0.00 P1 O +ATOM 2207 N ASP X 142 -20.426 4.728 5.610 1.00 0.00 P1 N +ATOM 2208 HN ASP X 142 -20.631 4.704 6.583 1.00 0.00 P1 H +ATOM 2209 CA ASP X 142 -21.047 5.811 4.903 1.00 0.00 P1 C +ATOM 2210 HA ASP X 142 -21.275 5.490 3.895 1.00 0.00 P1 H +ATOM 2211 CB ASP X 142 -22.309 6.310 5.672 1.00 0.00 P1 C +ATOM 2212 HB1 ASP X 142 -22.375 7.417 5.702 1.00 0.00 P1 H +ATOM 2213 HB2 ASP X 142 -22.275 5.956 6.723 1.00 0.00 P1 H +ATOM 2214 CG ASP X 142 -23.603 5.836 5.022 1.00 0.00 P1 C +ATOM 2215 OD1 ASP X 142 -23.634 5.733 3.768 1.00 0.00 P1 O +ATOM 2216 OD2 ASP X 142 -24.587 5.617 5.775 1.00 0.00 P1 O +ATOM 2217 C ASP X 142 -20.080 6.963 4.801 1.00 0.00 P1 C +ATOM 2218 O ASP X 142 -19.069 7.031 5.500 1.00 0.00 P1 O +ATOM 2219 N ALA X 143 -20.427 7.934 3.925 1.00 0.00 P1 N +ATOM 2220 HN ALA X 143 -21.237 7.834 3.354 1.00 0.00 P1 H +ATOM 2221 CA ALA X 143 -19.828 9.245 3.926 1.00 0.00 P1 C +ATOM 2222 HA ALA X 143 -18.757 9.152 4.042 1.00 0.00 P1 H +ATOM 2223 CB ALA X 143 -20.169 10.045 2.653 1.00 0.00 P1 C +ATOM 2224 HB1 ALA X 143 -21.265 10.205 2.568 1.00 0.00 P1 H +ATOM 2225 HB2 ALA X 143 -19.837 9.492 1.753 1.00 0.00 P1 H +ATOM 2226 HB3 ALA X 143 -19.664 11.034 2.661 1.00 0.00 P1 H +ATOM 2227 C ALA X 143 -20.403 9.979 5.109 1.00 0.00 P1 C +ATOM 2228 O ALA X 143 -21.510 9.678 5.552 1.00 0.00 P1 O +ATOM 2229 N ASP X 144 -19.668 10.942 5.681 1.00 0.00 P1 N +ATOM 2230 HN ASP X 144 -18.780 11.238 5.323 1.00 0.00 P1 H +ATOM 2231 CA ASP X 144 -20.157 11.576 6.876 1.00 0.00 P1 C +ATOM 2232 HA ASP X 144 -21.233 11.668 6.803 1.00 0.00 P1 H +ATOM 2233 CB ASP X 144 -19.853 10.751 8.174 1.00 0.00 P1 C +ATOM 2234 HB1 ASP X 144 -20.326 9.752 8.042 1.00 0.00 P1 H +ATOM 2235 HB2 ASP X 144 -20.336 11.217 9.056 1.00 0.00 P1 H +ATOM 2236 CG ASP X 144 -18.377 10.496 8.504 1.00 0.00 P1 C +ATOM 2237 OD1 ASP X 144 -17.476 11.135 7.903 1.00 0.00 P1 O +ATOM 2238 OD2 ASP X 144 -18.137 9.656 9.409 1.00 0.00 P1 O +ATOM 2239 C ASP X 144 -19.670 12.991 6.912 1.00 0.00 P1 C +ATOM 2240 O ASP X 144 -19.356 13.593 5.886 1.00 0.00 P1 O +ATOM 2241 N ALA X 145 -19.611 13.555 8.134 1.00 0.00 P1 N +ATOM 2242 HN ALA X 145 -19.865 13.025 8.938 1.00 0.00 P1 H +ATOM 2243 CA ALA X 145 -19.196 14.904 8.405 1.00 0.00 P1 C +ATOM 2244 HA ALA X 145 -19.823 15.571 7.830 1.00 0.00 P1 H +ATOM 2245 CB ALA X 145 -19.352 15.204 9.909 1.00 0.00 P1 C +ATOM 2246 HB1 ALA X 145 -18.719 14.523 10.516 1.00 0.00 P1 H +ATOM 2247 HB2 ALA X 145 -20.411 15.063 10.215 1.00 0.00 P1 H +ATOM 2248 HB3 ALA X 145 -19.063 16.254 10.133 1.00 0.00 P1 H +ATOM 2249 C ALA X 145 -17.758 15.139 7.996 1.00 0.00 P1 C +ATOM 2250 O ALA X 145 -17.398 16.251 7.617 1.00 0.00 P1 O +ATOM 2251 N GLN X 146 -16.910 14.086 8.058 1.00 0.00 P1 N +ATOM 2252 HN GLN X 146 -17.244 13.170 8.287 1.00 0.00 P1 H +ATOM 2253 CA GLN X 146 -15.490 14.201 7.817 1.00 0.00 P1 C +ATOM 2254 HA GLN X 146 -15.227 15.240 7.671 1.00 0.00 P1 H +ATOM 2255 CB GLN X 146 -14.699 13.696 9.043 1.00 0.00 P1 C +ATOM 2256 HB1 GLN X 146 -13.612 13.665 8.806 1.00 0.00 P1 H +ATOM 2257 HB2 GLN X 146 -15.033 12.666 9.296 1.00 0.00 P1 H +ATOM 2258 CG GLN X 146 -14.913 14.647 10.242 1.00 0.00 P1 C +ATOM 2259 HG1 GLN X 146 -15.996 14.751 10.465 1.00 0.00 P1 H +ATOM 2260 HG2 GLN X 146 -14.516 15.653 9.988 1.00 0.00 P1 H +ATOM 2261 CD GLN X 146 -14.202 14.155 11.502 1.00 0.00 P1 C +ATOM 2262 OE1 GLN X 146 -13.220 14.751 11.953 1.00 0.00 P1 O +ATOM 2263 NE2 GLN X 146 -14.734 13.049 12.095 1.00 0.00 P1 N +ATOM 2264 HE21 GLN X 146 -15.530 12.601 11.692 1.00 0.00 P1 H +ATOM 2265 HE22 GLN X 146 -14.309 12.699 12.927 1.00 0.00 P1 H +ATOM 2266 C GLN X 146 -15.062 13.482 6.558 1.00 0.00 P1 C +ATOM 2267 O GLN X 146 -14.190 13.973 5.846 1.00 0.00 P1 O +ATOM 2268 N ASN X 147 -15.646 12.305 6.242 1.00 0.00 P1 N +ATOM 2269 HN ASN X 147 -16.375 11.914 6.818 1.00 0.00 P1 H +ATOM 2270 CA ASN X 147 -15.242 11.497 5.107 1.00 0.00 P1 C +ATOM 2271 HA ASN X 147 -14.237 11.765 4.808 1.00 0.00 P1 H +ATOM 2272 CB ASN X 147 -15.289 9.982 5.410 1.00 0.00 P1 C +ATOM 2273 HB1 ASN X 147 -15.022 9.397 4.504 1.00 0.00 P1 H +ATOM 2274 HB2 ASN X 147 -16.306 9.681 5.740 1.00 0.00 P1 H +ATOM 2275 CG ASN X 147 -14.268 9.657 6.500 1.00 0.00 P1 C +ATOM 2276 OD1 ASN X 147 -13.106 9.362 6.200 1.00 0.00 P1 O +ATOM 2277 ND2 ASN X 147 -14.712 9.710 7.788 1.00 0.00 P1 N +ATOM 2278 HD21 ASN X 147 -15.659 9.989 7.977 1.00 0.00 P1 H +ATOM 2279 HD22 ASN X 147 -14.081 9.503 8.533 1.00 0.00 P1 H +ATOM 2280 C ASN X 147 -16.167 11.765 3.951 1.00 0.00 P1 C +ATOM 2281 O ASN X 147 -17.377 11.580 4.052 1.00 0.00 P1 O +ATOM 2282 N SER X 148 -15.606 12.216 2.808 1.00 0.00 P1 N +ATOM 2283 HN SER X 148 -14.616 12.329 2.729 1.00 0.00 P1 H +ATOM 2284 CA SER X 148 -16.373 12.723 1.687 1.00 0.00 P1 C +ATOM 2285 HA SER X 148 -17.159 13.348 2.088 1.00 0.00 P1 H +ATOM 2286 CB SER X 148 -15.504 13.614 0.760 1.00 0.00 P1 C +ATOM 2287 HB1 SER X 148 -15.196 14.516 1.335 1.00 0.00 P1 H +ATOM 2288 HB2 SER X 148 -16.095 13.955 -0.118 1.00 0.00 P1 H +ATOM 2289 OG SER X 148 -14.319 12.955 0.312 1.00 0.00 P1 O +ATOM 2290 HG1 SER X 148 -13.877 13.595 -0.254 1.00 0.00 P1 H +ATOM 2291 C SER X 148 -17.054 11.660 0.852 1.00 0.00 P1 C +ATOM 2292 O SER X 148 -17.930 11.980 0.051 1.00 0.00 P1 O +ATOM 2293 N HSD X 149 -16.672 10.374 1.010 1.00 0.00 P1 N +ATOM 2294 HN HSD X 149 -16.002 10.116 1.700 1.00 0.00 P1 H +ATOM 2295 CA HSD X 149 -17.236 9.296 0.230 1.00 0.00 P1 C +ATOM 2296 HA HSD X 149 -18.176 9.602 -0.210 1.00 0.00 P1 H +ATOM 2297 CB HSD X 149 -16.286 8.771 -0.873 1.00 0.00 P1 C +ATOM 2298 HB1 HSD X 149 -16.762 7.927 -1.419 1.00 0.00 P1 H +ATOM 2299 HB2 HSD X 149 -15.340 8.399 -0.426 1.00 0.00 P1 H +ATOM 2300 ND1 HSD X 149 -15.047 10.838 -1.683 1.00 0.00 P1 N +ATOM 2301 HD1 HSD X 149 -14.550 11.020 -0.832 1.00 0.00 P1 H +ATOM 2302 CG HSD X 149 -15.961 9.827 -1.885 1.00 0.00 P1 C +ATOM 2303 CE1 HSD X 149 -15.108 11.646 -2.768 1.00 0.00 P1 C +ATOM 2304 HE1 HSD X 149 -14.501 12.544 -2.877 1.00 0.00 P1 H +ATOM 2305 NE2 HSD X 149 -15.992 11.227 -3.650 1.00 0.00 P1 N +ATOM 2306 CD2 HSD X 149 -16.532 10.083 -3.092 1.00 0.00 P1 C +ATOM 2307 HD2 HSD X 149 -17.325 9.559 -3.608 1.00 0.00 P1 H +ATOM 2308 C HSD X 149 -17.515 8.161 1.160 1.00 0.00 P1 C +ATOM 2309 O HSD X 149 -17.000 8.116 2.275 1.00 0.00 P1 O +ATOM 2310 N SER X 150 -18.338 7.199 0.692 1.00 0.00 P1 N +ATOM 2311 HN SER X 150 -18.775 7.265 -0.203 1.00 0.00 P1 H +ATOM 2312 CA SER X 150 -18.539 5.928 1.341 1.00 0.00 P1 C +ATOM 2313 HA SER X 150 -18.546 6.073 2.413 1.00 0.00 P1 H +ATOM 2314 CB SER X 150 -19.867 5.251 0.911 1.00 0.00 P1 C +ATOM 2315 HB1 SER X 150 -20.714 5.821 1.350 1.00 0.00 P1 H +ATOM 2316 HB2 SER X 150 -19.918 4.208 1.292 1.00 0.00 P1 H +ATOM 2317 OG SER X 150 -20.016 5.258 -0.508 1.00 0.00 P1 O +ATOM 2318 HG1 SER X 150 -20.841 4.806 -0.707 1.00 0.00 P1 H +ATOM 2319 C SER X 150 -17.362 5.051 0.988 1.00 0.00 P1 C +ATOM 2320 O SER X 150 -16.751 5.200 -0.071 1.00 0.00 P1 O +ATOM 2321 N TYR X 151 -16.982 4.142 1.905 1.00 0.00 P1 N +ATOM 2322 HN TYR X 151 -17.498 3.984 2.748 1.00 0.00 P1 H +ATOM 2323 CA TYR X 151 -15.782 3.362 1.729 1.00 0.00 P1 C +ATOM 2324 HA TYR X 151 -15.681 3.146 0.677 1.00 0.00 P1 H +ATOM 2325 CB TYR X 151 -14.473 4.059 2.221 1.00 0.00 P1 C +ATOM 2326 HB1 TYR X 151 -14.282 4.945 1.579 1.00 0.00 P1 H +ATOM 2327 HB2 TYR X 151 -13.602 3.377 2.130 1.00 0.00 P1 H +ATOM 2328 CG TYR X 151 -14.572 4.541 3.649 1.00 0.00 P1 C +ATOM 2329 CD1 TYR X 151 -15.197 5.766 3.930 1.00 0.00 P1 C +ATOM 2330 HD1 TYR X 151 -15.556 6.371 3.114 1.00 0.00 P1 H +ATOM 2331 CE1 TYR X 151 -15.411 6.181 5.248 1.00 0.00 P1 C +ATOM 2332 HE1 TYR X 151 -15.950 7.097 5.438 1.00 0.00 P1 H +ATOM 2333 CZ TYR X 151 -14.962 5.385 6.306 1.00 0.00 P1 C +ATOM 2334 OH TYR X 151 -15.250 5.759 7.637 1.00 0.00 P1 O +ATOM 2335 HH TYR X 151 -15.766 6.568 7.612 1.00 0.00 P1 H +ATOM 2336 CD2 TYR X 151 -14.093 3.764 4.718 1.00 0.00 P1 C +ATOM 2337 HD2 TYR X 151 -13.607 2.819 4.524 1.00 0.00 P1 H +ATOM 2338 CE2 TYR X 151 -14.282 4.189 6.041 1.00 0.00 P1 C +ATOM 2339 HE2 TYR X 151 -13.952 3.572 6.861 1.00 0.00 P1 H +ATOM 2340 C TYR X 151 -15.978 2.041 2.412 1.00 0.00 P1 C +ATOM 2341 O TYR X 151 -16.851 1.891 3.262 1.00 0.00 P1 O +ATOM 2342 N CYS X 152 -15.163 1.040 2.026 1.00 0.00 P1 N +ATOM 2343 HN CYS X 152 -14.503 1.174 1.286 1.00 0.00 P1 H +ATOM 2344 CA CYS X 152 -15.213 -0.276 2.605 1.00 0.00 P1 C +ATOM 2345 HA CYS X 152 -15.726 -0.232 3.551 1.00 0.00 P1 H +ATOM 2346 CB CYS X 152 -15.906 -1.301 1.668 1.00 0.00 P1 C +ATOM 2347 HB1 CYS X 152 -15.347 -1.354 0.708 1.00 0.00 P1 H +ATOM 2348 HB2 CYS X 152 -16.916 -0.901 1.427 1.00 0.00 P1 H +ATOM 2349 SG CYS X 152 -16.087 -2.975 2.387 1.00 0.00 P1 S +ATOM 2350 HG1 CYS X 152 -14.786 -3.207 2.511 1.00 0.00 P1 H +ATOM 2351 C CYS X 152 -13.798 -0.715 2.845 1.00 0.00 P1 C +ATOM 2352 O CYS X 152 -12.966 -0.630 1.948 1.00 0.00 P1 O +ATOM 2353 N PHE X 153 -13.506 -1.231 4.057 1.00 0.00 P1 N +ATOM 2354 HN PHE X 153 -14.199 -1.266 4.780 1.00 0.00 P1 H +ATOM 2355 CA PHE X 153 -12.234 -1.846 4.367 1.00 0.00 P1 C +ATOM 2356 HA PHE X 153 -11.463 -1.450 3.721 1.00 0.00 P1 H +ATOM 2357 CB PHE X 153 -11.836 -1.691 5.854 1.00 0.00 P1 C +ATOM 2358 HB1 PHE X 153 -10.876 -2.208 6.058 1.00 0.00 P1 H +ATOM 2359 HB2 PHE X 153 -12.624 -2.116 6.514 1.00 0.00 P1 H +ATOM 2360 CG PHE X 153 -11.644 -0.246 6.203 1.00 0.00 P1 C +ATOM 2361 CD1 PHE X 153 -10.773 0.560 5.451 1.00 0.00 P1 C +ATOM 2362 HD1 PHE X 153 -10.220 0.139 4.624 1.00 0.00 P1 H +ATOM 2363 CE1 PHE X 153 -10.601 1.912 5.766 1.00 0.00 P1 C +ATOM 2364 HE1 PHE X 153 -9.931 2.521 5.177 1.00 0.00 P1 H +ATOM 2365 CZ PHE X 153 -11.277 2.465 6.859 1.00 0.00 P1 C +ATOM 2366 HZ PHE X 153 -11.139 3.506 7.108 1.00 0.00 P1 H +ATOM 2367 CD2 PHE X 153 -12.319 0.321 7.297 1.00 0.00 P1 C +ATOM 2368 HD2 PHE X 153 -12.992 -0.284 7.887 1.00 0.00 P1 H +ATOM 2369 CE2 PHE X 153 -12.131 1.667 7.630 1.00 0.00 P1 C +ATOM 2370 HE2 PHE X 153 -12.659 2.089 8.473 1.00 0.00 P1 H +ATOM 2371 C PHE X 153 -12.366 -3.317 4.108 1.00 0.00 P1 C +ATOM 2372 O PHE X 153 -13.338 -3.925 4.541 1.00 0.00 P1 O +ATOM 2373 N GLU X 154 -11.404 -3.926 3.387 1.00 0.00 P1 N +ATOM 2374 HN GLU X 154 -10.640 -3.410 2.990 1.00 0.00 P1 H +ATOM 2375 CA GLU X 154 -11.431 -5.341 3.108 1.00 0.00 P1 C +ATOM 2376 HA GLU X 154 -12.110 -5.828 3.790 1.00 0.00 P1 H +ATOM 2377 CB GLU X 154 -11.854 -5.650 1.652 1.00 0.00 P1 C +ATOM 2378 HB1 GLU X 154 -11.042 -5.350 0.954 1.00 0.00 P1 H +ATOM 2379 HB2 GLU X 154 -12.746 -5.031 1.406 1.00 0.00 P1 H +ATOM 2380 CG GLU X 154 -12.234 -7.130 1.435 1.00 0.00 P1 C +ATOM 2381 HG1 GLU X 154 -13.155 -7.352 2.017 1.00 0.00 P1 H +ATOM 2382 HG2 GLU X 154 -11.424 -7.800 1.792 1.00 0.00 P1 H +ATOM 2383 CD GLU X 154 -12.502 -7.477 -0.027 1.00 0.00 P1 C +ATOM 2384 OE1 GLU X 154 -12.974 -8.623 -0.256 1.00 0.00 P1 O +ATOM 2385 OE2 GLU X 154 -12.227 -6.638 -0.923 1.00 0.00 P1 O +ATOM 2386 C GLU X 154 -10.052 -5.893 3.346 1.00 0.00 P1 C +ATOM 2387 O GLU X 154 -9.060 -5.263 2.988 1.00 0.00 P1 O +ATOM 2388 N ILE X 155 -9.955 -7.094 3.962 1.00 0.00 P1 N +ATOM 2389 HN ILE X 155 -10.776 -7.590 4.246 1.00 0.00 P1 H +ATOM 2390 CA ILE X 155 -8.701 -7.805 4.099 1.00 0.00 P1 C +ATOM 2391 HA ILE X 155 -7.923 -7.259 3.592 1.00 0.00 P1 H +ATOM 2392 CB ILE X 155 -8.253 -8.048 5.539 1.00 0.00 P1 C +ATOM 2393 HB ILE X 155 -9.032 -8.637 6.070 1.00 0.00 P1 H +ATOM 2394 CG2 ILE X 155 -6.936 -8.861 5.571 1.00 0.00 P1 C +ATOM 2395 HG21 ILE X 155 -6.121 -8.300 5.069 1.00 0.00 P1 H +ATOM 2396 HG22 ILE X 155 -7.047 -9.849 5.080 1.00 0.00 P1 H +ATOM 2397 HG23 ILE X 155 -6.640 -9.057 6.621 1.00 0.00 P1 H +ATOM 2398 CG1 ILE X 155 -8.085 -6.695 6.272 1.00 0.00 P1 C +ATOM 2399 HG11 ILE X 155 -9.022 -6.107 6.174 1.00 0.00 P1 H +ATOM 2400 HG12 ILE X 155 -7.276 -6.116 5.774 1.00 0.00 P1 H +ATOM 2401 CD ILE X 155 -7.766 -6.835 7.764 1.00 0.00 P1 C +ATOM 2402 HD1 ILE X 155 -6.785 -7.330 7.918 1.00 0.00 P1 H +ATOM 2403 HD2 ILE X 155 -8.552 -7.433 8.273 1.00 0.00 P1 H +ATOM 2404 HD3 ILE X 155 -7.719 -5.835 8.246 1.00 0.00 P1 H +ATOM 2405 C ILE X 155 -8.897 -9.113 3.387 1.00 0.00 P1 C +ATOM 2406 O ILE X 155 -9.903 -9.794 3.588 1.00 0.00 P1 O +ATOM 2407 N LEU X 156 -7.926 -9.483 2.524 1.00 0.00 P1 N +ATOM 2408 HN LEU X 156 -7.119 -8.907 2.382 1.00 0.00 P1 H +ATOM 2409 CA LEU X 156 -7.950 -10.733 1.812 1.00 0.00 P1 C +ATOM 2410 HA LEU X 156 -8.785 -11.324 2.155 1.00 0.00 P1 H +ATOM 2411 CB LEU X 156 -8.045 -10.593 0.275 1.00 0.00 P1 C +ATOM 2412 HB1 LEU X 156 -8.142 -11.621 -0.136 1.00 0.00 P1 H +ATOM 2413 HB2 LEU X 156 -7.117 -10.146 -0.141 1.00 0.00 P1 H +ATOM 2414 CG LEU X 156 -9.259 -9.774 -0.218 1.00 0.00 P1 C +ATOM 2415 HG LEU X 156 -10.063 -9.851 0.552 1.00 0.00 P1 H +ATOM 2416 CD1 LEU X 156 -8.919 -8.285 -0.408 1.00 0.00 P1 C +ATOM 2417 HD11 LEU X 156 -8.119 -8.167 -1.168 1.00 0.00 P1 H +ATOM 2418 HD12 LEU X 156 -8.579 -7.825 0.542 1.00 0.00 P1 H +ATOM 2419 HD13 LEU X 156 -9.816 -7.733 -0.758 1.00 0.00 P1 H +ATOM 2420 CD2 LEU X 156 -9.834 -10.361 -1.520 1.00 0.00 P1 C +ATOM 2421 HD21 LEU X 156 -10.129 -11.421 -1.370 1.00 0.00 P1 H +ATOM 2422 HD22 LEU X 156 -9.081 -10.308 -2.333 1.00 0.00 P1 H +ATOM 2423 HD23 LEU X 156 -10.734 -9.786 -1.829 1.00 0.00 P1 H +ATOM 2424 C LEU X 156 -6.691 -11.481 2.139 1.00 0.00 P1 C +ATOM 2425 O LEU X 156 -5.631 -10.880 2.289 1.00 0.00 P1 O +ATOM 2426 N GLU X 157 -6.791 -12.822 2.255 1.00 0.00 P1 N +ATOM 2427 HN GLU X 157 -7.677 -13.279 2.148 1.00 0.00 P1 H +ATOM 2428 CA GLU X 157 -5.667 -13.695 2.498 1.00 0.00 P1 C +ATOM 2429 HA GLU X 157 -4.753 -13.119 2.535 1.00 0.00 P1 H +ATOM 2430 CB GLU X 157 -5.800 -14.501 3.809 1.00 0.00 P1 C +ATOM 2431 HB1 GLU X 157 -4.924 -15.181 3.908 1.00 0.00 P1 H +ATOM 2432 HB2 GLU X 157 -6.721 -15.124 3.783 1.00 0.00 P1 H +ATOM 2433 CG GLU X 157 -5.849 -13.575 5.042 1.00 0.00 P1 C +ATOM 2434 HG1 GLU X 157 -6.784 -12.976 5.032 1.00 0.00 P1 H +ATOM 2435 HG2 GLU X 157 -4.985 -12.879 5.004 1.00 0.00 P1 H +ATOM 2436 CD GLU X 157 -5.772 -14.337 6.363 1.00 0.00 P1 C +ATOM 2437 OE1 GLU X 157 -5.729 -15.595 6.349 1.00 0.00 P1 O +ATOM 2438 OE2 GLU X 157 -5.741 -13.642 7.415 1.00 0.00 P1 O +ATOM 2439 C GLU X 157 -5.572 -14.646 1.339 1.00 0.00 P1 C +ATOM 2440 O GLU X 157 -6.583 -15.068 0.783 1.00 0.00 P1 O +ATOM 2441 N ARG X 158 -4.332 -14.988 0.930 1.00 0.00 P1 N +ATOM 2442 HN ARG X 158 -3.529 -14.623 1.403 1.00 0.00 P1 H +ATOM 2443 CA ARG X 158 -4.048 -15.846 -0.198 1.00 0.00 P1 C +ATOM 2444 HA ARG X 158 -4.645 -15.520 -1.039 1.00 0.00 P1 H +ATOM 2445 CB ARG X 158 -2.535 -15.753 -0.547 1.00 0.00 P1 C +ATOM 2446 HB1 ARG X 158 -1.956 -16.138 0.324 1.00 0.00 P1 H +ATOM 2447 HB2 ARG X 158 -2.260 -14.683 -0.671 1.00 0.00 P1 H +ATOM 2448 CG ARG X 158 -2.088 -16.525 -1.801 1.00 0.00 P1 C +ATOM 2449 HG1 ARG X 158 -2.636 -17.493 -1.835 1.00 0.00 P1 H +ATOM 2450 HG2 ARG X 158 -1.009 -16.782 -1.706 1.00 0.00 P1 H +ATOM 2451 CD ARG X 158 -2.321 -15.794 -3.130 1.00 0.00 P1 C +ATOM 2452 HD1 ARG X 158 -3.270 -15.215 -3.120 1.00 0.00 P1 H +ATOM 2453 HD2 ARG X 158 -2.358 -16.554 -3.943 1.00 0.00 P1 H +ATOM 2454 NE ARG X 158 -1.165 -14.866 -3.372 1.00 0.00 P1 N +ATOM 2455 HE ARG X 158 -0.654 -14.510 -2.587 1.00 0.00 P1 H +ATOM 2456 CZ ARG X 158 -0.751 -14.503 -4.612 1.00 0.00 P1 C +ATOM 2457 NH1 ARG X 158 -1.385 -14.914 -5.734 1.00 0.00 P1 N +ATOM 2458 HH11 ARG X 158 -2.172 -15.524 -5.666 1.00 0.00 P1 H +ATOM 2459 HH12 ARG X 158 -1.035 -14.657 -6.630 1.00 0.00 P1 H +ATOM 2460 NH2 ARG X 158 0.324 -13.696 -4.720 1.00 0.00 P1 N +ATOM 2461 HH21 ARG X 158 0.766 -13.350 -3.892 1.00 0.00 P1 H +ATOM 2462 HH22 ARG X 158 0.605 -13.347 -5.607 1.00 0.00 P1 H +ATOM 2463 C ARG X 158 -4.409 -17.279 0.155 1.00 0.00 P1 C +ATOM 2464 O ARG X 158 -3.843 -17.836 1.094 1.00 0.00 P1 O +ATOM 2465 C ARG X 159 -4.973 -20.184 -1.379 1.00 0.00 P1 C +ATOM 2466 OT1 ARG X 159 -5.514 -21.251 -1.775 1.00 0.00 P1 O +ATOM 2467 OT2 ARG X 159 -3.818 -19.825 -1.737 1.00 0.00 P1 O +ATOM 2468 N ARG X 159 -5.372 -17.898 -0.577 1.00 0.00 P1 N +ATOM 2469 HN ARG X 159 -5.791 -17.448 -1.366 1.00 0.00 P1 H +ATOM 2470 CA ARG X 159 -5.742 -19.291 -0.378 1.00 0.00 P1 C +ATOM 2471 HA ARG X 159 -5.417 -19.592 0.609 1.00 0.00 P1 H +ATOM 2472 CB ARG X 159 -7.278 -19.577 -0.432 1.00 0.00 P1 C +ATOM 2473 HB1 ARG X 159 -7.772 -18.952 0.344 1.00 0.00 P1 H +ATOM 2474 HB2 ARG X 159 -7.435 -20.642 -0.149 1.00 0.00 P1 H +ATOM 2475 CG ARG X 159 -7.979 -19.332 -1.786 1.00 0.00 P1 C +ATOM 2476 HG1 ARG X 159 -7.440 -19.863 -2.599 1.00 0.00 P1 H +ATOM 2477 HG2 ARG X 159 -7.914 -18.242 -2.002 1.00 0.00 P1 H +ATOM 2478 CD ARG X 159 -9.468 -19.733 -1.822 1.00 0.00 P1 C +ATOM 2479 HD1 ARG X 159 -9.961 -19.279 -2.710 1.00 0.00 P1 H +ATOM 2480 HD2 ARG X 159 -9.980 -19.349 -0.912 1.00 0.00 P1 H +ATOM 2481 NE ARG X 159 -9.645 -21.234 -1.865 1.00 0.00 P1 N +ATOM 2482 HE ARG X 159 -9.811 -21.706 -1.003 1.00 0.00 P1 H +ATOM 2483 CZ ARG X 159 -9.841 -21.933 -3.017 1.00 0.00 P1 C +ATOM 2484 NH1 ARG X 159 -9.539 -21.414 -4.229 1.00 0.00 P1 N +ATOM 2485 HH11 ARG X 159 -9.098 -20.517 -4.309 1.00 0.00 P1 H +ATOM 2486 HH12 ARG X 159 -9.706 -21.938 -5.059 1.00 0.00 P1 H +ATOM 2487 NH2 ARG X 159 -10.369 -23.180 -2.959 1.00 0.00 P1 N +ATOM 2488 HH21 ARG X 159 -10.601 -23.579 -2.077 1.00 0.00 P1 H +ATOM 2489 HH22 ARG X 159 -10.517 -23.689 -3.803 1.00 0.00 P1 H +ATOM 2490 OH2 TIP3X 1 -29.096 -20.058 -26.806 1.00 0.00 W1 O +ATOM 2491 H1 TIP3X 1 -28.914 -20.134 -25.869 1.00 0.00 W1 H +ATOM 2492 H2 TIP3X 1 -29.120 -19.116 -26.970 1.00 0.00 W1 H +ATOM 2493 OH2 TIP3X 2 -17.994 -22.567 -23.068 1.00 0.00 W1 O +ATOM 2494 H1 TIP3X 2 -17.759 -22.303 -23.957 1.00 0.00 W1 H +ATOM 2495 H2 TIP3X 2 -17.165 -22.831 -22.669 1.00 0.00 W1 H +ATOM 2496 OH2 TIP3X 3 -26.010 -22.844 -27.089 1.00 0.00 W1 O +ATOM 2497 H1 TIP3X 3 -25.979 -21.934 -26.792 1.00 0.00 W1 H +ATOM 2498 H2 TIP3X 3 -25.502 -23.327 -26.437 1.00 0.00 W1 H +ATOM 2499 OH2 TIP3X 4 -18.206 -18.684 -24.946 1.00 0.00 W1 O +ATOM 2500 H1 TIP3X 4 -18.481 -18.194 -24.171 1.00 0.00 W1 H +ATOM 2501 H2 TIP3X 4 -18.732 -19.484 -24.922 1.00 0.00 W1 H +ATOM 2502 OH2 TIP3X 5 -19.690 -20.241 -27.903 1.00 0.00 W1 O +ATOM 2503 H1 TIP3X 5 -19.528 -20.470 -28.818 1.00 0.00 W1 H +ATOM 2504 H2 TIP3X 5 -20.619 -20.012 -27.873 1.00 0.00 W1 H +ATOM 2505 OH2 TIP3X 6 -15.842 -19.709 -23.118 1.00 0.00 W1 O +ATOM 2506 H1 TIP3X 6 -16.394 -19.626 -23.896 1.00 0.00 W1 H +ATOM 2507 H2 TIP3X 6 -16.453 -19.926 -22.413 1.00 0.00 W1 H +ATOM 2508 OH2 TIP3X 7 -29.206 -18.445 -20.667 1.00 0.00 W1 O +ATOM 2509 H1 TIP3X 7 -28.800 -18.242 -19.824 1.00 0.00 W1 H +ATOM 2510 H2 TIP3X 7 -29.777 -19.191 -20.484 1.00 0.00 W1 H +ATOM 2511 OH2 TIP3X 8 -21.831 -16.820 -21.441 1.00 0.00 W1 O +ATOM 2512 H1 TIP3X 8 -21.530 -17.721 -21.319 1.00 0.00 W1 H +ATOM 2513 H2 TIP3X 8 -21.205 -16.440 -22.058 1.00 0.00 W1 H +ATOM 2514 OH2 TIP3X 9 -18.398 -16.863 -21.561 1.00 0.00 W1 O +ATOM 2515 H1 TIP3X 9 -18.834 -16.040 -21.781 1.00 0.00 W1 H +ATOM 2516 H2 TIP3X 9 -17.469 -16.638 -21.512 1.00 0.00 W1 H +ATOM 2517 OH2 TIP3X 10 -25.950 -17.289 -22.432 1.00 0.00 W1 O +ATOM 2518 H1 TIP3X 10 -25.595 -16.440 -22.695 1.00 0.00 W1 H +ATOM 2519 H2 TIP3X 10 -26.885 -17.229 -22.628 1.00 0.00 W1 H +ATOM 2520 OH2 TIP3X 11 -21.109 -25.396 -23.530 1.00 0.00 W1 O +ATOM 2521 H1 TIP3X 11 -21.186 -26.206 -24.035 1.00 0.00 W1 H +ATOM 2522 H2 TIP3X 11 -20.166 -25.257 -23.443 1.00 0.00 W1 H +ATOM 2523 OH2 TIP3X 12 -25.086 -29.299 -21.168 1.00 0.00 W1 O +ATOM 2524 H1 TIP3X 12 -24.828 -30.036 -20.615 1.00 0.00 W1 H +ATOM 2525 H2 TIP3X 12 -25.762 -29.655 -21.744 1.00 0.00 W1 H +ATOM 2526 OH2 TIP3X 13 -16.842 -28.294 -24.745 1.00 0.00 W1 O +ATOM 2527 H1 TIP3X 13 -17.150 -27.956 -23.904 1.00 0.00 W1 H +ATOM 2528 H2 TIP3X 13 -16.774 -29.240 -24.614 1.00 0.00 W1 H +ATOM 2529 OH2 TIP3X 14 -18.244 -27.099 -22.791 1.00 0.00 W1 O +ATOM 2530 H1 TIP3X 14 -17.669 -27.327 -22.061 1.00 0.00 W1 H +ATOM 2531 H2 TIP3X 14 -19.119 -27.353 -22.496 1.00 0.00 W1 H +ATOM 2532 OH2 TIP3X 15 -25.198 -25.974 -21.420 1.00 0.00 W1 O +ATOM 2533 H1 TIP3X 15 -24.695 -26.677 -21.008 1.00 0.00 W1 H +ATOM 2534 H2 TIP3X 15 -24.541 -25.332 -21.687 1.00 0.00 W1 H +ATOM 2535 OH2 TIP3X 16 -17.721 -24.926 -24.523 1.00 0.00 W1 O +ATOM 2536 H1 TIP3X 16 -17.680 -25.826 -24.199 1.00 0.00 W1 H +ATOM 2537 H2 TIP3X 16 -17.839 -24.393 -23.736 1.00 0.00 W1 H +ATOM 2538 OH2 TIP3X 17 -19.037 -28.283 -26.654 1.00 0.00 W1 O +ATOM 2539 H1 TIP3X 17 -18.212 -28.098 -26.205 1.00 0.00 W1 H +ATOM 2540 H2 TIP3X 17 -18.960 -27.828 -27.493 1.00 0.00 W1 H +ATOM 2541 OH2 TIP3X 18 -22.854 -22.311 -20.583 1.00 0.00 W1 O +ATOM 2542 H1 TIP3X 18 -21.977 -22.289 -20.966 1.00 0.00 W1 H +ATOM 2543 H2 TIP3X 18 -23.119 -21.393 -20.537 1.00 0.00 W1 H +ATOM 2544 OH2 TIP3X 19 -23.704 -19.763 -20.773 1.00 0.00 W1 O +ATOM 2545 H1 TIP3X 19 -23.728 -19.536 -21.702 1.00 0.00 W1 H +ATOM 2546 H2 TIP3X 19 -24.624 -19.817 -20.514 1.00 0.00 W1 H +ATOM 2547 OH2 TIP3X 20 -28.841 -27.882 -23.935 1.00 0.00 W1 O +ATOM 2548 H1 TIP3X 20 -29.166 -27.002 -23.744 1.00 0.00 W1 H +ATOM 2549 H2 TIP3X 20 -28.964 -27.984 -24.878 1.00 0.00 W1 H +ATOM 2550 OH2 TIP3X 21 -26.685 -24.324 -23.922 1.00 0.00 W1 O +ATOM 2551 H1 TIP3X 21 -27.368 -24.774 -24.419 1.00 0.00 W1 H +ATOM 2552 H2 TIP3X 21 -26.199 -25.028 -23.490 1.00 0.00 W1 H +ATOM 2553 OH2 TIP3X 22 -20.629 -19.400 -21.526 1.00 0.00 W1 O +ATOM 2554 H1 TIP3X 22 -20.871 -19.986 -22.243 1.00 0.00 W1 H +ATOM 2555 H2 TIP3X 22 -19.679 -19.489 -21.453 1.00 0.00 W1 H +ATOM 2556 OH2 TIP3X 23 -16.331 -15.765 -24.745 1.00 0.00 W1 O +ATOM 2557 H1 TIP3X 23 -16.336 -16.233 -23.910 1.00 0.00 W1 H +ATOM 2558 H2 TIP3X 23 -17.212 -15.894 -25.098 1.00 0.00 W1 H +ATOM 2559 OH2 TIP3X 24 -24.459 -19.429 -23.723 1.00 0.00 W1 O +ATOM 2560 H1 TIP3X 24 -25.031 -20.148 -23.454 1.00 0.00 W1 H +ATOM 2561 H2 TIP3X 24 -24.920 -18.638 -23.441 1.00 0.00 W1 H +ATOM 2562 OH2 TIP3X 25 -22.238 -28.977 -19.153 1.00 0.00 W1 O +ATOM 2563 H1 TIP3X 25 -22.980 -28.498 -18.786 1.00 0.00 W1 H +ATOM 2564 H2 TIP3X 25 -22.618 -29.789 -19.487 1.00 0.00 W1 H +ATOM 2565 OH2 TIP3X 26 -26.886 -28.272 -29.351 1.00 0.00 W1 O +ATOM 2566 H1 TIP3X 26 -26.984 -28.934 -28.667 1.00 0.00 W1 H +ATOM 2567 H2 TIP3X 26 -27.069 -28.741 -30.166 1.00 0.00 W1 H +ATOM 2568 OH2 TIP3X 27 -15.992 -27.350 -21.162 1.00 0.00 W1 O +ATOM 2569 H1 TIP3X 27 -15.473 -26.682 -21.609 1.00 0.00 W1 H +ATOM 2570 H2 TIP3X 27 -15.550 -27.475 -20.322 1.00 0.00 W1 H +ATOM 2571 OH2 TIP3X 28 -29.934 -30.998 -27.002 1.00 0.00 W1 O +ATOM 2572 H1 TIP3X 28 -29.209 -30.377 -26.933 1.00 0.00 W1 H +ATOM 2573 H2 TIP3X 28 -30.306 -31.031 -26.120 1.00 0.00 W1 H +ATOM 2574 OH2 TIP3X 29 -24.668 -24.762 -17.015 1.00 0.00 W1 O +ATOM 2575 H1 TIP3X 29 -23.804 -24.364 -17.116 1.00 0.00 W1 H +ATOM 2576 H2 TIP3X 29 -24.516 -25.699 -17.138 1.00 0.00 W1 H +ATOM 2577 OH2 TIP3X 30 -21.502 -19.852 -24.276 1.00 0.00 W1 O +ATOM 2578 H1 TIP3X 30 -21.408 -20.715 -24.679 1.00 0.00 W1 H +ATOM 2579 H2 TIP3X 30 -22.435 -19.652 -24.352 1.00 0.00 W1 H +ATOM 2580 OH2 TIP3X 31 -22.890 -21.568 -26.745 1.00 0.00 W1 O +ATOM 2581 H1 TIP3X 31 -23.455 -22.182 -26.275 1.00 0.00 W1 H +ATOM 2582 H2 TIP3X 31 -23.364 -20.737 -26.716 1.00 0.00 W1 H +ATOM 2583 OH2 TIP3X 32 -30.352 -21.055 -20.288 1.00 0.00 W1 O +ATOM 2584 H1 TIP3X 32 -30.887 -21.657 -20.806 1.00 0.00 W1 H +ATOM 2585 H2 TIP3X 32 -30.823 -20.969 -19.459 1.00 0.00 W1 H +ATOM 2586 OH2 TIP3X 33 -19.056 -22.034 -25.920 1.00 0.00 W1 O +ATOM 2587 H1 TIP3X 33 -19.112 -22.949 -26.197 1.00 0.00 W1 H +ATOM 2588 H2 TIP3X 33 -19.229 -21.532 -26.716 1.00 0.00 W1 H +ATOM 2589 OH2 TIP3X 34 -18.759 -21.520 -18.896 1.00 0.00 W1 O +ATOM 2590 H1 TIP3X 34 -19.662 -21.436 -18.588 1.00 0.00 W1 H +ATOM 2591 H2 TIP3X 34 -18.591 -22.462 -18.892 1.00 0.00 W1 H +ATOM 2592 OH2 TIP3X 35 -16.393 -23.561 -21.090 1.00 0.00 W1 O +ATOM 2593 H1 TIP3X 35 -15.730 -24.241 -21.209 1.00 0.00 W1 H +ATOM 2594 H2 TIP3X 35 -17.109 -24.000 -20.631 1.00 0.00 W1 H +ATOM 2595 OH2 TIP3X 36 -27.248 -23.874 -15.946 1.00 0.00 W1 O +ATOM 2596 H1 TIP3X 36 -27.777 -24.108 -16.708 1.00 0.00 W1 H +ATOM 2597 H2 TIP3X 36 -26.353 -23.826 -16.280 1.00 0.00 W1 H +ATOM 2598 OH2 TIP3X 37 -26.338 -20.668 -20.384 1.00 0.00 W1 O +ATOM 2599 H1 TIP3X 37 -26.383 -21.223 -19.606 1.00 0.00 W1 H +ATOM 2600 H2 TIP3X 37 -26.971 -19.969 -20.218 1.00 0.00 W1 H +ATOM 2601 OH2 TIP3X 38 -17.666 -19.538 -20.635 1.00 0.00 W1 O +ATOM 2602 H1 TIP3X 38 -17.243 -18.770 -20.251 1.00 0.00 W1 H +ATOM 2603 H2 TIP3X 38 -17.970 -20.046 -19.882 1.00 0.00 W1 H +ATOM 2604 OH2 TIP3X 39 -19.579 -17.562 -18.810 1.00 0.00 W1 O +ATOM 2605 H1 TIP3X 39 -20.286 -18.191 -18.952 1.00 0.00 W1 H +ATOM 2606 H2 TIP3X 39 -19.250 -17.368 -19.687 1.00 0.00 W1 H +ATOM 2607 OH2 TIP3X 40 -19.328 -19.026 -16.413 1.00 0.00 W1 O +ATOM 2608 H1 TIP3X 40 -19.961 -19.633 -16.797 1.00 0.00 W1 H +ATOM 2609 H2 TIP3X 40 -19.214 -18.346 -17.077 1.00 0.00 W1 H +ATOM 2610 OH2 TIP3X 41 -15.717 -17.118 -22.347 1.00 0.00 W1 O +ATOM 2611 H1 TIP3X 41 -15.040 -17.276 -21.690 1.00 0.00 W1 H +ATOM 2612 H2 TIP3X 41 -15.951 -17.989 -22.666 1.00 0.00 W1 H +ATOM 2613 OH2 TIP3X 42 -25.161 -30.647 -23.954 1.00 0.00 W1 O +ATOM 2614 H1 TIP3X 42 -25.453 -29.737 -24.015 1.00 0.00 W1 H +ATOM 2615 H2 TIP3X 42 -24.329 -30.664 -24.427 1.00 0.00 W1 H +ATOM 2616 OH2 TIP3X 43 -23.037 -20.700 -30.300 1.00 0.00 W1 O +ATOM 2617 H1 TIP3X 43 -23.732 -21.322 -30.085 1.00 0.00 W1 H +ATOM 2618 H2 TIP3X 43 -23.055 -20.064 -29.585 1.00 0.00 W1 H +ATOM 2619 OH2 TIP3X 44 -15.657 -21.937 -30.863 1.00 0.00 W1 O +ATOM 2620 H1 TIP3X 44 -15.920 -22.686 -31.397 1.00 0.00 W1 H +ATOM 2621 H2 TIP3X 44 -15.911 -21.173 -31.381 1.00 0.00 W1 H +ATOM 2622 OH2 TIP3X 45 -29.709 -18.240 -31.146 1.00 0.00 W1 O +ATOM 2623 H1 TIP3X 45 -29.263 -18.789 -30.501 1.00 0.00 W1 H +ATOM 2624 H2 TIP3X 45 -30.605 -18.574 -31.167 1.00 0.00 W1 H +ATOM 2625 OH2 TIP3X 46 -17.615 -16.111 -29.888 1.00 0.00 W1 O +ATOM 2626 H1 TIP3X 46 -16.730 -16.439 -30.046 1.00 0.00 W1 H +ATOM 2627 H2 TIP3X 46 -17.845 -15.643 -30.690 1.00 0.00 W1 H +ATOM 2628 OH2 TIP3X 47 -16.223 -20.449 -17.810 1.00 0.00 W1 O +ATOM 2629 H1 TIP3X 47 -16.333 -19.500 -17.751 1.00 0.00 W1 H +ATOM 2630 H2 TIP3X 47 -17.116 -20.794 -17.820 1.00 0.00 W1 H +ATOM 2631 OH2 TIP3X 48 -29.537 -17.623 -28.191 1.00 0.00 W1 O +ATOM 2632 H1 TIP3X 48 -29.605 -16.787 -27.731 1.00 0.00 W1 H +ATOM 2633 H2 TIP3X 48 -30.432 -17.962 -28.208 1.00 0.00 W1 H +ATOM 2634 OH2 TIP3X 49 -16.957 -19.130 -30.547 1.00 0.00 W1 O +ATOM 2635 H1 TIP3X 49 -16.925 -19.210 -29.594 1.00 0.00 W1 H +ATOM 2636 H2 TIP3X 49 -17.790 -18.693 -30.724 1.00 0.00 W1 H +ATOM 2637 OH2 TIP3X 50 -20.586 -30.836 -17.663 1.00 0.00 W1 O +ATOM 2638 H1 TIP3X 50 -20.893 -30.087 -18.176 1.00 0.00 W1 H +ATOM 2639 H2 TIP3X 50 -20.532 -31.553 -18.295 1.00 0.00 W1 H +ATOM 2640 OH2 TIP3X 51 -26.372 -16.919 -19.634 1.00 0.00 W1 O +ATOM 2641 H1 TIP3X 51 -25.524 -16.681 -19.260 1.00 0.00 W1 H +ATOM 2642 H2 TIP3X 51 -26.161 -17.299 -20.487 1.00 0.00 W1 H +ATOM 2643 OH2 TIP3X 52 -27.906 -28.901 -16.284 1.00 0.00 W1 O +ATOM 2644 H1 TIP3X 52 -28.783 -28.811 -15.910 1.00 0.00 W1 H +ATOM 2645 H2 TIP3X 52 -27.843 -28.188 -16.920 1.00 0.00 W1 H +ATOM 2646 OH2 TIP3X 53 -21.709 -26.954 -30.553 1.00 0.00 W1 O +ATOM 2647 H1 TIP3X 53 -21.875 -26.657 -31.448 1.00 0.00 W1 H +ATOM 2648 H2 TIP3X 53 -22.580 -27.077 -30.176 1.00 0.00 W1 H +ATOM 2649 OH2 TIP3X 54 -16.311 -19.193 -27.505 1.00 0.00 W1 O +ATOM 2650 H1 TIP3X 54 -15.738 -19.930 -27.292 1.00 0.00 W1 H +ATOM 2651 H2 TIP3X 54 -16.642 -18.894 -26.658 1.00 0.00 W1 H +ATOM 2652 OH2 TIP3X 55 -21.050 -30.157 -30.576 1.00 0.00 W1 O +ATOM 2653 H1 TIP3X 55 -20.318 -29.541 -30.552 1.00 0.00 W1 H +ATOM 2654 H2 TIP3X 55 -20.809 -30.790 -31.253 1.00 0.00 W1 H +ATOM 2655 OH2 TIP3X 56 -16.518 -30.064 -20.311 1.00 0.00 W1 O +ATOM 2656 H1 TIP3X 56 -16.026 -30.693 -19.784 1.00 0.00 W1 H +ATOM 2657 H2 TIP3X 56 -15.918 -29.821 -21.016 1.00 0.00 W1 H +ATOM 2658 OH2 TIP3X 57 -29.011 -20.843 -24.233 1.00 0.00 W1 O +ATOM 2659 H1 TIP3X 57 -29.679 -20.520 -23.629 1.00 0.00 W1 H +ATOM 2660 H2 TIP3X 57 -28.219 -20.913 -23.701 1.00 0.00 W1 H +ATOM 2661 OH2 TIP3X 58 -24.014 -19.424 -17.123 1.00 0.00 W1 O +ATOM 2662 H1 TIP3X 58 -23.790 -19.802 -16.272 1.00 0.00 W1 H +ATOM 2663 H2 TIP3X 58 -24.621 -20.053 -17.513 1.00 0.00 W1 H +ATOM 2664 OH2 TIP3X 59 -20.535 -28.119 -21.710 1.00 0.00 W1 O +ATOM 2665 H1 TIP3X 59 -20.476 -28.301 -20.772 1.00 0.00 W1 H +ATOM 2666 H2 TIP3X 59 -21.473 -28.032 -21.879 1.00 0.00 W1 H +ATOM 2667 OH2 TIP3X 60 -24.343 -27.463 -17.531 1.00 0.00 W1 O +ATOM 2668 H1 TIP3X 60 -25.210 -27.533 -17.931 1.00 0.00 W1 H +ATOM 2669 H2 TIP3X 60 -24.398 -28.003 -16.743 1.00 0.00 W1 H +ATOM 2670 OH2 TIP3X 61 -16.857 -24.742 -15.778 1.00 0.00 W1 O +ATOM 2671 H1 TIP3X 61 -16.063 -25.276 -15.795 1.00 0.00 W1 H +ATOM 2672 H2 TIP3X 61 -17.151 -24.777 -14.868 1.00 0.00 W1 H +ATOM 2673 OH2 TIP3X 62 -28.672 -30.875 -19.860 1.00 0.00 W1 O +ATOM 2674 H1 TIP3X 62 -28.898 -30.422 -20.672 1.00 0.00 W1 H +ATOM 2675 H2 TIP3X 62 -27.842 -31.312 -20.051 1.00 0.00 W1 H +ATOM 2676 OH2 TIP3X 63 -22.577 -30.418 -24.778 1.00 0.00 W1 O +ATOM 2677 H1 TIP3X 63 -22.095 -29.904 -25.426 1.00 0.00 W1 H +ATOM 2678 H2 TIP3X 63 -22.233 -30.124 -23.934 1.00 0.00 W1 H +ATOM 2679 OH2 TIP3X 64 -28.107 -25.826 -29.625 1.00 0.00 W1 O +ATOM 2680 H1 TIP3X 64 -27.685 -25.180 -30.191 1.00 0.00 W1 H +ATOM 2681 H2 TIP3X 64 -27.395 -26.401 -29.344 1.00 0.00 W1 H +ATOM 2682 OH2 TIP3X 65 -27.583 -25.170 -20.314 1.00 0.00 W1 O +ATOM 2683 H1 TIP3X 65 -27.667 -24.378 -19.782 1.00 0.00 W1 H +ATOM 2684 H2 TIP3X 65 -26.668 -25.174 -20.595 1.00 0.00 W1 H +ATOM 2685 OH2 TIP3X 66 -28.400 -24.451 -27.129 1.00 0.00 W1 O +ATOM 2686 H1 TIP3X 66 -28.337 -24.740 -28.039 1.00 0.00 W1 H +ATOM 2687 H2 TIP3X 66 -27.625 -23.906 -26.996 1.00 0.00 W1 H +ATOM 2688 OH2 TIP3X 67 -19.380 -27.882 -29.369 1.00 0.00 W1 O +ATOM 2689 H1 TIP3X 67 -20.087 -27.393 -29.789 1.00 0.00 W1 H +ATOM 2690 H2 TIP3X 67 -18.655 -27.838 -29.992 1.00 0.00 W1 H +ATOM 2691 OH2 TIP3X 68 -30.829 -26.995 -18.281 1.00 0.00 W1 O +ATOM 2692 H1 TIP3X 68 -31.734 -26.701 -18.170 1.00 0.00 W1 H +ATOM 2693 H2 TIP3X 68 -30.689 -27.614 -17.564 1.00 0.00 W1 H +ATOM 2694 OH2 TIP3X 69 -29.686 -30.158 -22.298 1.00 0.00 W1 O +ATOM 2695 H1 TIP3X 69 -29.579 -30.859 -22.941 1.00 0.00 W1 H +ATOM 2696 H2 TIP3X 69 -29.550 -29.352 -22.797 1.00 0.00 W1 H +ATOM 2697 OH2 TIP3X 70 -18.164 -26.530 -17.411 1.00 0.00 W1 O +ATOM 2698 H1 TIP3X 70 -17.853 -25.951 -16.715 1.00 0.00 W1 H +ATOM 2699 H2 TIP3X 70 -19.108 -26.594 -17.265 1.00 0.00 W1 H +ATOM 2700 OH2 TIP3X 71 -21.121 -26.524 -17.464 1.00 0.00 W1 O +ATOM 2701 H1 TIP3X 71 -21.481 -25.956 -18.145 1.00 0.00 W1 H +ATOM 2702 H2 TIP3X 71 -21.459 -27.394 -17.675 1.00 0.00 W1 H +ATOM 2703 OH2 TIP3X 72 -22.918 -26.055 -27.598 1.00 0.00 W1 O +ATOM 2704 H1 TIP3X 72 -22.829 -25.475 -28.355 1.00 0.00 W1 H +ATOM 2705 H2 TIP3X 72 -23.688 -26.589 -27.795 1.00 0.00 W1 H +ATOM 2706 OH2 TIP3X 73 -24.615 -26.723 -29.911 1.00 0.00 W1 O +ATOM 2707 H1 TIP3X 73 -25.053 -26.531 -30.740 1.00 0.00 W1 H +ATOM 2708 H2 TIP3X 73 -25.022 -27.534 -29.607 1.00 0.00 W1 H +ATOM 2709 OH2 TIP3X 74 -23.905 -29.661 -16.122 1.00 0.00 W1 O +ATOM 2710 H1 TIP3X 74 -24.371 -30.048 -15.381 1.00 0.00 W1 H +ATOM 2711 H2 TIP3X 74 -22.991 -29.629 -15.839 1.00 0.00 W1 H +ATOM 2712 OH2 TIP3X 75 -18.342 -24.317 -19.440 1.00 0.00 W1 O +ATOM 2713 H1 TIP3X 75 -18.322 -24.966 -18.737 1.00 0.00 W1 H +ATOM 2714 H2 TIP3X 75 -19.176 -24.468 -19.884 1.00 0.00 W1 H +ATOM 2715 OH2 TIP3X 76 -30.267 -27.216 -30.971 1.00 0.00 W1 O +ATOM 2716 H1 TIP3X 76 -31.023 -27.409 -30.417 1.00 0.00 W1 H +ATOM 2717 H2 TIP3X 76 -29.733 -26.618 -30.448 1.00 0.00 W1 H +ATOM 2718 OH2 TIP3X 77 -30.348 -15.723 -30.484 1.00 0.00 W1 O +ATOM 2719 H1 TIP3X 77 -29.932 -16.470 -30.054 1.00 0.00 W1 H +ATOM 2720 H2 TIP3X 77 -30.335 -15.029 -29.824 1.00 0.00 W1 H +ATOM 2721 OH2 TIP3X 78 -21.600 -27.563 -25.491 1.00 0.00 W1 O +ATOM 2722 H1 TIP3X 78 -21.937 -27.212 -26.315 1.00 0.00 W1 H +ATOM 2723 H2 TIP3X 78 -20.703 -27.830 -25.692 1.00 0.00 W1 H +ATOM 2724 OH2 TIP3X 79 -26.145 -28.252 -23.747 1.00 0.00 W1 O +ATOM 2725 H1 TIP3X 79 -27.087 -28.299 -23.905 1.00 0.00 W1 H +ATOM 2726 H2 TIP3X 79 -26.006 -27.378 -23.383 1.00 0.00 W1 H +ATOM 2727 OH2 TIP3X 80 -30.783 -27.126 -26.953 1.00 0.00 W1 O +ATOM 2728 H1 TIP3X 80 -31.057 -27.251 -26.045 1.00 0.00 W1 H +ATOM 2729 H2 TIP3X 80 -30.977 -26.208 -27.139 1.00 0.00 W1 H +ATOM 2730 OH2 TIP3X 81 -26.782 -27.799 -18.893 1.00 0.00 W1 O +ATOM 2731 H1 TIP3X 81 -26.760 -28.605 -19.409 1.00 0.00 W1 H +ATOM 2732 H2 TIP3X 81 -27.176 -27.151 -19.477 1.00 0.00 W1 H +ATOM 2733 OH2 TIP3X 82 -26.199 -21.264 -23.088 1.00 0.00 W1 O +ATOM 2734 H1 TIP3X 82 -26.271 -22.199 -23.276 1.00 0.00 W1 H +ATOM 2735 H2 TIP3X 82 -26.195 -21.210 -22.132 1.00 0.00 W1 H +ATOM 2736 OH2 TIP3X 83 -22.010 -24.245 -18.526 1.00 0.00 W1 O +ATOM 2737 H1 TIP3X 83 -21.598 -23.413 -18.289 1.00 0.00 W1 H +ATOM 2738 H2 TIP3X 83 -22.560 -24.034 -19.280 1.00 0.00 W1 H +ATOM 2739 OH2 TIP3X 84 -16.215 -28.878 -29.201 1.00 0.00 W1 O +ATOM 2740 H1 TIP3X 84 -15.780 -28.651 -28.379 1.00 0.00 W1 H +ATOM 2741 H2 TIP3X 84 -16.735 -29.654 -28.992 1.00 0.00 W1 H +ATOM 2742 OH2 TIP3X 85 -25.060 -22.918 -30.023 1.00 0.00 W1 O +ATOM 2743 H1 TIP3X 85 -25.349 -23.040 -29.119 1.00 0.00 W1 H +ATOM 2744 H2 TIP3X 85 -24.371 -23.572 -30.144 1.00 0.00 W1 H +ATOM 2745 OH2 TIP3X 86 -18.357 -24.402 -28.955 1.00 0.00 W1 O +ATOM 2746 H1 TIP3X 86 -19.222 -24.601 -28.596 1.00 0.00 W1 H +ATOM 2747 H2 TIP3X 86 -17.800 -24.281 -28.186 1.00 0.00 W1 H +ATOM 2748 OH2 TIP3X 87 -23.524 -24.148 -22.485 1.00 0.00 W1 O +ATOM 2749 H1 TIP3X 87 -23.427 -23.351 -21.963 1.00 0.00 W1 H +ATOM 2750 H2 TIP3X 87 -22.649 -24.538 -22.493 1.00 0.00 W1 H +ATOM 2751 OH2 TIP3X 88 -23.778 -23.766 -25.569 1.00 0.00 W1 O +ATOM 2752 H1 TIP3X 88 -23.157 -24.363 -25.987 1.00 0.00 W1 H +ATOM 2753 H2 TIP3X 88 -23.753 -24.004 -24.642 1.00 0.00 W1 H +ATOM 2754 OH2 TIP3X 89 -20.884 -22.151 -16.633 1.00 0.00 W1 O +ATOM 2755 H1 TIP3X 89 -21.562 -21.867 -16.020 1.00 0.00 W1 H +ATOM 2756 H2 TIP3X 89 -20.086 -22.191 -16.106 1.00 0.00 W1 H +ATOM 2757 OH2 TIP3X 90 -28.374 -22.735 -18.937 1.00 0.00 W1 O +ATOM 2758 H1 TIP3X 90 -27.857 -22.330 -18.241 1.00 0.00 W1 H +ATOM 2759 H2 TIP3X 90 -28.757 -21.998 -19.412 1.00 0.00 W1 H +ATOM 2760 OH2 TIP3X 91 -29.468 -24.773 -17.315 1.00 0.00 W1 O +ATOM 2761 H1 TIP3X 91 -29.672 -25.613 -17.728 1.00 0.00 W1 H +ATOM 2762 H2 TIP3X 91 -29.591 -24.127 -18.011 1.00 0.00 W1 H +ATOM 2763 OH2 TIP3X 92 -29.575 -23.900 -24.492 1.00 0.00 W1 O +ATOM 2764 H1 TIP3X 92 -29.219 -23.028 -24.662 1.00 0.00 W1 H +ATOM 2765 H2 TIP3X 92 -29.677 -24.291 -25.360 1.00 0.00 W1 H +ATOM 2766 OH2 TIP3X 93 -18.816 -21.635 -30.305 1.00 0.00 W1 O +ATOM 2767 H1 TIP3X 93 -18.111 -21.137 -30.717 1.00 0.00 W1 H +ATOM 2768 H2 TIP3X 93 -18.367 -22.266 -29.742 1.00 0.00 W1 H +ATOM 2769 OH2 TIP3X 94 -16.220 -24.288 -26.943 1.00 0.00 W1 O +ATOM 2770 H1 TIP3X 94 -16.507 -24.115 -26.046 1.00 0.00 W1 H +ATOM 2771 H2 TIP3X 94 -15.707 -23.516 -27.183 1.00 0.00 W1 H +ATOM 2772 OH2 TIP3X 95 -29.722 -25.171 -22.221 1.00 0.00 W1 O +ATOM 2773 H1 TIP3X 95 -29.628 -24.493 -22.889 1.00 0.00 W1 H +ATOM 2774 H2 TIP3X 95 -29.064 -24.952 -21.561 1.00 0.00 W1 H +ATOM 2775 OH2 TIP3X 96 -26.935 -16.664 -28.957 1.00 0.00 W1 O +ATOM 2776 H1 TIP3X 96 -27.164 -16.304 -29.814 1.00 0.00 W1 H +ATOM 2777 H2 TIP3X 96 -27.348 -17.527 -28.941 1.00 0.00 W1 H +ATOM 2778 OH2 TIP3X 97 -28.160 -21.431 -30.459 1.00 0.00 W1 O +ATOM 2779 H1 TIP3X 97 -28.976 -21.721 -30.867 1.00 0.00 W1 H +ATOM 2780 H2 TIP3X 97 -27.628 -22.225 -30.397 1.00 0.00 W1 H +ATOM 2781 OH2 TIP3X 98 -26.742 -20.592 -17.384 1.00 0.00 W1 O +ATOM 2782 H1 TIP3X 98 -27.315 -19.990 -17.858 1.00 0.00 W1 H +ATOM 2783 H2 TIP3X 98 -27.216 -20.788 -16.576 1.00 0.00 W1 H +ATOM 2784 OH2 TIP3X 99 -23.666 -15.849 -19.693 1.00 0.00 W1 O +ATOM 2785 H1 TIP3X 99 -23.349 -16.143 -18.840 1.00 0.00 W1 H +ATOM 2786 H2 TIP3X 99 -23.233 -16.426 -20.322 1.00 0.00 W1 H +ATOM 2787 OH2 TIP3X 100 -18.960 -15.607 -25.560 1.00 0.00 W1 O +ATOM 2788 H1 TIP3X 100 -19.373 -16.298 -26.078 1.00 0.00 W1 H +ATOM 2789 H2 TIP3X 100 -19.156 -14.800 -26.036 1.00 0.00 W1 H +ATOM 2790 OH2 TIP3X 101 -22.382 -18.925 -28.308 1.00 0.00 W1 O +ATOM 2791 H1 TIP3X 101 -22.123 -18.139 -28.790 1.00 0.00 W1 H +ATOM 2792 H2 TIP3X 101 -22.952 -18.601 -27.610 1.00 0.00 W1 H +ATOM 2793 OH2 TIP3X 102 -22.365 -23.770 -29.236 1.00 0.00 W1 O +ATOM 2794 H1 TIP3X 102 -21.542 -23.697 -29.719 1.00 0.00 W1 H +ATOM 2795 H2 TIP3X 102 -22.358 -23.026 -28.635 1.00 0.00 W1 H +ATOM 2796 OH2 TIP3X 103 -18.964 -29.047 -19.445 1.00 0.00 W1 O +ATOM 2797 H1 TIP3X 103 -18.159 -29.277 -19.909 1.00 0.00 W1 H +ATOM 2798 H2 TIP3X 103 -18.673 -28.494 -18.720 1.00 0.00 W1 H +ATOM 2799 OH2 TIP3X 104 -30.999 -21.945 -28.039 1.00 0.00 W1 O +ATOM 2800 H1 TIP3X 104 -31.152 -21.853 -28.979 1.00 0.00 W1 H +ATOM 2801 H2 TIP3X 104 -30.045 -21.945 -27.950 1.00 0.00 W1 H +ATOM 2802 OH2 TIP3X 105 -20.237 -22.357 -21.443 1.00 0.00 W1 O +ATOM 2803 H1 TIP3X 105 -19.691 -21.696 -21.017 1.00 0.00 W1 H +ATOM 2804 H2 TIP3X 105 -19.778 -22.558 -22.259 1.00 0.00 W1 H +ATOM 2805 OH2 TIP3X 106 -21.414 -17.384 -30.366 1.00 0.00 W1 O +ATOM 2806 H1 TIP3X 106 -20.590 -17.348 -29.881 1.00 0.00 W1 H +ATOM 2807 H2 TIP3X 106 -21.211 -17.896 -31.148 1.00 0.00 W1 H +ATOM 2808 OH2 TIP3X 107 -21.422 -19.596 -18.715 1.00 0.00 W1 O +ATOM 2809 H1 TIP3X 107 -22.243 -19.349 -18.288 1.00 0.00 W1 H +ATOM 2810 H2 TIP3X 107 -21.651 -19.692 -19.639 1.00 0.00 W1 H +ATOM 2811 OH2 TIP3X 108 -24.797 -19.371 -26.828 1.00 0.00 W1 O +ATOM 2812 H1 TIP3X 108 -25.504 -19.224 -27.456 1.00 0.00 W1 H +ATOM 2813 H2 TIP3X 108 -25.134 -19.027 -26.001 1.00 0.00 W1 H +ATOM 2814 OH2 TIP3X 109 -28.232 -18.459 -18.117 1.00 0.00 W1 O +ATOM 2815 H1 TIP3X 109 -27.498 -17.848 -18.181 1.00 0.00 W1 H +ATOM 2816 H2 TIP3X 109 -28.544 -18.365 -17.217 1.00 0.00 W1 H +ATOM 2817 OH2 TIP3X 110 -28.642 -16.755 -24.015 1.00 0.00 W1 O +ATOM 2818 H1 TIP3X 110 -29.228 -17.496 -24.169 1.00 0.00 W1 H +ATOM 2819 H2 TIP3X 110 -28.199 -16.621 -24.853 1.00 0.00 W1 H +ATOM 2820 OH2 TIP3X 111 -20.289 -30.741 -22.935 1.00 0.00 W1 O +ATOM 2821 H1 TIP3X 111 -19.956 -30.816 -23.829 1.00 0.00 W1 H +ATOM 2822 H2 TIP3X 111 -20.334 -29.799 -22.774 1.00 0.00 W1 H +ATOM 2823 OH2 TIP3X 112 -23.051 -28.612 -22.700 1.00 0.00 W1 O +ATOM 2824 H1 TIP3X 112 -23.413 -28.123 -23.439 1.00 0.00 W1 H +ATOM 2825 H2 TIP3X 112 -23.782 -28.702 -22.090 1.00 0.00 W1 H +ATOM 2826 OH2 TIP3X 113 -24.332 -30.628 -28.772 1.00 0.00 W1 O +ATOM 2827 H1 TIP3X 113 -23.476 -30.883 -28.427 1.00 0.00 W1 H +ATOM 2828 H2 TIP3X 113 -24.850 -31.432 -28.747 1.00 0.00 W1 H +ATOM 2829 OH2 TIP3X 114 -21.580 -30.784 -27.729 1.00 0.00 W1 O +ATOM 2830 H1 TIP3X 114 -21.124 -31.520 -27.320 1.00 0.00 W1 H +ATOM 2831 H2 TIP3X 114 -21.173 -30.698 -28.590 1.00 0.00 W1 H +ATOM 2832 OH2 TIP3X 115 -26.941 -16.206 -16.274 1.00 0.00 W1 O +ATOM 2833 H1 TIP3X 115 -27.191 -15.449 -16.804 1.00 0.00 W1 H +ATOM 2834 H2 TIP3X 115 -26.030 -16.375 -16.513 1.00 0.00 W1 H +ATOM 2835 OH2 TIP3X 116 -21.934 -17.511 -25.974 1.00 0.00 W1 O +ATOM 2836 H1 TIP3X 116 -21.273 -18.153 -25.714 1.00 0.00 W1 H +ATOM 2837 H2 TIP3X 116 -21.947 -16.877 -25.257 1.00 0.00 W1 H +ATOM 2838 OH2 TIP3X 117 -24.195 -16.609 -17.064 1.00 0.00 W1 O +ATOM 2839 H1 TIP3X 117 -23.977 -17.501 -16.794 1.00 0.00 W1 H +ATOM 2840 H2 TIP3X 117 -23.587 -16.055 -16.575 1.00 0.00 W1 H +ATOM 2841 OH2 TIP3X 118 -25.248 -28.491 -27.020 1.00 0.00 W1 O +ATOM 2842 H1 TIP3X 118 -24.591 -29.150 -27.242 1.00 0.00 W1 H +ATOM 2843 H2 TIP3X 118 -25.206 -28.422 -26.066 1.00 0.00 W1 H +ATOM 2844 OH2 TIP3X 119 -30.535 -30.152 -17.564 1.00 0.00 W1 O +ATOM 2845 H1 TIP3X 119 -29.787 -30.348 -18.128 1.00 0.00 W1 H +ATOM 2846 H2 TIP3X 119 -30.327 -30.578 -16.732 1.00 0.00 W1 H +ATOM 2847 OH2 TIP3X 120 -19.415 -17.425 -27.962 1.00 0.00 W1 O +ATOM 2848 H1 TIP3X 120 -19.271 -18.365 -27.859 1.00 0.00 W1 H +ATOM 2849 H2 TIP3X 120 -18.592 -17.093 -28.319 1.00 0.00 W1 H +ATOM 2850 OH2 TIP3X 121 -17.748 -30.659 -16.735 1.00 0.00 W1 O +ATOM 2851 H1 TIP3X 121 -18.361 -30.585 -17.466 1.00 0.00 W1 H +ATOM 2852 H2 TIP3X 121 -16.978 -30.164 -17.017 1.00 0.00 W1 H +ATOM 2853 OH2 TIP3X 122 -26.954 -16.446 -26.249 1.00 0.00 W1 O +ATOM 2854 H1 TIP3X 122 -26.961 -16.401 -27.205 1.00 0.00 W1 H +ATOM 2855 H2 TIP3X 122 -26.147 -16.000 -25.993 1.00 0.00 W1 H +ATOM 2856 OH2 TIP3X 123 -16.045 -17.507 -18.299 1.00 0.00 W1 O +ATOM 2857 H1 TIP3X 123 -16.768 -16.956 -17.998 1.00 0.00 W1 H +ATOM 2858 H2 TIP3X 123 -15.257 -17.008 -18.085 1.00 0.00 W1 H +ATOM 2859 OH2 TIP3X 124 -28.419 -28.185 -26.619 1.00 0.00 W1 O +ATOM 2860 H1 TIP3X 124 -29.063 -27.797 -27.212 1.00 0.00 W1 H +ATOM 2861 H2 TIP3X 124 -27.617 -27.688 -26.777 1.00 0.00 W1 H +ATOM 2862 OH2 TIP3X 125 -26.991 -19.586 -28.888 1.00 0.00 W1 O +ATOM 2863 H1 TIP3X 125 -27.030 -20.214 -29.609 1.00 0.00 W1 H +ATOM 2864 H2 TIP3X 125 -27.710 -19.840 -28.310 1.00 0.00 W1 H +ATOM 2865 OH2 TIP3X 126 -29.096 -20.058 -11.248 1.00 0.00 W1 O +ATOM 2866 H1 TIP3X 126 -28.914 -20.134 -10.312 1.00 0.00 W1 H +ATOM 2867 H2 TIP3X 126 -29.120 -19.116 -11.413 1.00 0.00 W1 H +ATOM 2868 OH2 TIP3X 127 -17.994 -22.567 -7.510 1.00 0.00 W1 O +ATOM 2869 H1 TIP3X 127 -17.759 -22.303 -8.400 1.00 0.00 W1 H +ATOM 2870 H2 TIP3X 127 -17.165 -22.831 -7.111 1.00 0.00 W1 H +ATOM 2871 OH2 TIP3X 128 -26.010 -22.844 -11.532 1.00 0.00 W1 O +ATOM 2872 H1 TIP3X 128 -25.979 -21.934 -11.235 1.00 0.00 W1 H +ATOM 2873 H2 TIP3X 128 -25.502 -23.327 -10.880 1.00 0.00 W1 H +ATOM 2874 OH2 TIP3X 129 -18.206 -18.684 -9.388 1.00 0.00 W1 O +ATOM 2875 H1 TIP3X 129 -18.481 -18.194 -8.613 1.00 0.00 W1 H +ATOM 2876 H2 TIP3X 129 -18.732 -19.484 -9.365 1.00 0.00 W1 H +ATOM 2877 OH2 TIP3X 130 -19.690 -20.241 -12.345 1.00 0.00 W1 O +ATOM 2878 H1 TIP3X 130 -19.528 -20.470 -13.260 1.00 0.00 W1 H +ATOM 2879 H2 TIP3X 130 -20.619 -20.012 -12.315 1.00 0.00 W1 H +ATOM 2880 OH2 TIP3X 131 -15.842 -19.709 -7.561 1.00 0.00 W1 O +ATOM 2881 H1 TIP3X 131 -16.394 -19.626 -8.338 1.00 0.00 W1 H +ATOM 2882 H2 TIP3X 131 -16.453 -19.926 -6.856 1.00 0.00 W1 H +ATOM 2883 OH2 TIP3X 132 -29.206 -18.445 -5.110 1.00 0.00 W1 O +ATOM 2884 H1 TIP3X 132 -28.800 -18.242 -4.267 1.00 0.00 W1 H +ATOM 2885 H2 TIP3X 132 -29.777 -19.191 -4.927 1.00 0.00 W1 H +ATOM 2886 OH2 TIP3X 133 -21.831 -16.820 -5.884 1.00 0.00 W1 O +ATOM 2887 H1 TIP3X 133 -21.530 -17.721 -5.762 1.00 0.00 W1 H +ATOM 2888 H2 TIP3X 133 -21.205 -16.440 -6.501 1.00 0.00 W1 H +ATOM 2889 OH2 TIP3X 134 -18.398 -16.863 -6.004 1.00 0.00 W1 O +ATOM 2890 H1 TIP3X 134 -18.834 -16.040 -6.223 1.00 0.00 W1 H +ATOM 2891 H2 TIP3X 134 -17.469 -16.638 -5.954 1.00 0.00 W1 H +ATOM 2892 OH2 TIP3X 135 -25.950 -17.289 -6.874 1.00 0.00 W1 O +ATOM 2893 H1 TIP3X 135 -25.595 -16.440 -7.138 1.00 0.00 W1 H +ATOM 2894 H2 TIP3X 135 -26.885 -17.229 -7.070 1.00 0.00 W1 H +ATOM 2895 OH2 TIP3X 136 -21.109 -25.396 -7.973 1.00 0.00 W1 O +ATOM 2896 H1 TIP3X 136 -21.186 -26.206 -8.477 1.00 0.00 W1 H +ATOM 2897 H2 TIP3X 136 -20.166 -25.257 -7.885 1.00 0.00 W1 H +ATOM 2898 OH2 TIP3X 137 -25.086 -29.299 -5.611 1.00 0.00 W1 O +ATOM 2899 H1 TIP3X 137 -24.828 -30.036 -5.058 1.00 0.00 W1 H +ATOM 2900 H2 TIP3X 137 -25.762 -29.655 -6.186 1.00 0.00 W1 H +ATOM 2901 OH2 TIP3X 138 -16.842 -28.294 -9.188 1.00 0.00 W1 O +ATOM 2902 H1 TIP3X 138 -17.150 -27.956 -8.347 1.00 0.00 W1 H +ATOM 2903 H2 TIP3X 138 -16.774 -29.240 -9.056 1.00 0.00 W1 H +ATOM 2904 OH2 TIP3X 139 -18.244 -27.099 -7.234 1.00 0.00 W1 O +ATOM 2905 H1 TIP3X 139 -17.669 -27.327 -6.503 1.00 0.00 W1 H +ATOM 2906 H2 TIP3X 139 -19.119 -27.353 -6.939 1.00 0.00 W1 H +ATOM 2907 OH2 TIP3X 140 -25.198 -25.974 -5.863 1.00 0.00 W1 O +ATOM 2908 H1 TIP3X 140 -24.695 -26.677 -5.451 1.00 0.00 W1 H +ATOM 2909 H2 TIP3X 140 -24.541 -25.332 -6.129 1.00 0.00 W1 H +ATOM 2910 OH2 TIP3X 141 -17.721 -24.926 -8.965 1.00 0.00 W1 O +ATOM 2911 H1 TIP3X 141 -17.680 -25.826 -8.641 1.00 0.00 W1 H +ATOM 2912 H2 TIP3X 141 -17.839 -24.393 -8.179 1.00 0.00 W1 H +ATOM 2913 OH2 TIP3X 142 -19.037 -28.283 -11.097 1.00 0.00 W1 O +ATOM 2914 H1 TIP3X 142 -18.212 -28.098 -10.648 1.00 0.00 W1 H +ATOM 2915 H2 TIP3X 142 -18.960 -27.828 -11.936 1.00 0.00 W1 H +ATOM 2916 OH2 TIP3X 143 -22.854 -22.311 -5.025 1.00 0.00 W1 O +ATOM 2917 H1 TIP3X 143 -21.977 -22.289 -5.408 1.00 0.00 W1 H +ATOM 2918 H2 TIP3X 143 -23.119 -21.393 -4.979 1.00 0.00 W1 H +ATOM 2919 OH2 TIP3X 144 -23.704 -19.763 -5.215 1.00 0.00 W1 O +ATOM 2920 H1 TIP3X 144 -23.728 -19.536 -6.145 1.00 0.00 W1 H +ATOM 2921 H2 TIP3X 144 -24.624 -19.817 -4.957 1.00 0.00 W1 H +ATOM 2922 OH2 TIP3X 145 -28.841 -27.882 -8.377 1.00 0.00 W1 O +ATOM 2923 H1 TIP3X 145 -29.166 -27.002 -8.186 1.00 0.00 W1 H +ATOM 2924 H2 TIP3X 145 -28.964 -27.984 -9.321 1.00 0.00 W1 H +ATOM 2925 OH2 TIP3X 146 -26.685 -24.324 -8.365 1.00 0.00 W1 O +ATOM 2926 H1 TIP3X 146 -27.368 -24.774 -8.862 1.00 0.00 W1 H +ATOM 2927 H2 TIP3X 146 -26.199 -25.028 -7.933 1.00 0.00 W1 H +ATOM 2928 OH2 TIP3X 147 -20.629 -19.400 -5.968 1.00 0.00 W1 O +ATOM 2929 H1 TIP3X 147 -20.871 -19.986 -6.685 1.00 0.00 W1 H +ATOM 2930 H2 TIP3X 147 -19.679 -19.489 -5.896 1.00 0.00 W1 H +ATOM 2931 OH2 TIP3X 148 -16.331 -15.765 -9.188 1.00 0.00 W1 O +ATOM 2932 H1 TIP3X 148 -16.336 -16.233 -8.353 1.00 0.00 W1 H +ATOM 2933 H2 TIP3X 148 -17.212 -15.894 -9.541 1.00 0.00 W1 H +ATOM 2934 OH2 TIP3X 149 -24.459 -19.429 -8.166 1.00 0.00 W1 O +ATOM 2935 H1 TIP3X 149 -25.031 -20.148 -7.897 1.00 0.00 W1 H +ATOM 2936 H2 TIP3X 149 -24.920 -18.638 -7.883 1.00 0.00 W1 H +ATOM 2937 OH2 TIP3X 150 -22.238 -28.977 -3.595 1.00 0.00 W1 O +ATOM 2938 H1 TIP3X 150 -22.980 -28.498 -3.228 1.00 0.00 W1 H +ATOM 2939 H2 TIP3X 150 -22.618 -29.789 -3.930 1.00 0.00 W1 H +ATOM 2940 OH2 TIP3X 151 -26.886 -28.272 -13.794 1.00 0.00 W1 O +ATOM 2941 H1 TIP3X 151 -26.984 -28.934 -13.109 1.00 0.00 W1 H +ATOM 2942 H2 TIP3X 151 -27.069 -28.741 -14.608 1.00 0.00 W1 H +ATOM 2943 OH2 TIP3X 152 -15.992 -27.350 -5.604 1.00 0.00 W1 O +ATOM 2944 H1 TIP3X 152 -15.473 -26.682 -6.051 1.00 0.00 W1 H +ATOM 2945 H2 TIP3X 152 -15.550 -27.475 -4.764 1.00 0.00 W1 H +ATOM 2946 OH2 TIP3X 153 -29.934 -30.998 -11.444 1.00 0.00 W1 O +ATOM 2947 H1 TIP3X 153 -29.209 -30.377 -11.375 1.00 0.00 W1 H +ATOM 2948 H2 TIP3X 153 -30.306 -31.031 -10.563 1.00 0.00 W1 H +ATOM 2949 OH2 TIP3X 154 -24.668 -24.762 -1.458 1.00 0.00 W1 O +ATOM 2950 H1 TIP3X 154 -23.804 -24.364 -1.559 1.00 0.00 W1 H +ATOM 2951 H2 TIP3X 154 -24.516 -25.699 -1.580 1.00 0.00 W1 H +ATOM 2952 OH2 TIP3X 155 -21.502 -19.852 -8.718 1.00 0.00 W1 O +ATOM 2953 H1 TIP3X 155 -21.408 -20.715 -9.122 1.00 0.00 W1 H +ATOM 2954 H2 TIP3X 155 -22.435 -19.652 -8.794 1.00 0.00 W1 H +ATOM 2955 OH2 TIP3X 156 -22.890 -21.568 -11.187 1.00 0.00 W1 O +ATOM 2956 H1 TIP3X 156 -23.455 -22.182 -10.718 1.00 0.00 W1 H +ATOM 2957 H2 TIP3X 156 -23.364 -20.737 -11.159 1.00 0.00 W1 H +ATOM 2958 OH2 TIP3X 157 -30.352 -21.055 -4.730 1.00 0.00 W1 O +ATOM 2959 H1 TIP3X 157 -30.887 -21.657 -5.248 1.00 0.00 W1 H +ATOM 2960 H2 TIP3X 157 -30.823 -20.969 -3.901 1.00 0.00 W1 H +ATOM 2961 OH2 TIP3X 158 -19.056 -22.034 -10.363 1.00 0.00 W1 O +ATOM 2962 H1 TIP3X 158 -19.112 -22.949 -10.639 1.00 0.00 W1 H +ATOM 2963 H2 TIP3X 158 -19.229 -21.532 -11.159 1.00 0.00 W1 H +ATOM 2964 OH2 TIP3X 159 -18.759 -21.520 -3.338 1.00 0.00 W1 O +ATOM 2965 H1 TIP3X 159 -19.662 -21.436 -3.030 1.00 0.00 W1 H +ATOM 2966 H2 TIP3X 159 -18.591 -22.462 -3.335 1.00 0.00 W1 H +ATOM 2967 OH2 TIP3X 160 -16.393 -23.561 -5.533 1.00 0.00 W1 O +ATOM 2968 H1 TIP3X 160 -15.730 -24.241 -5.652 1.00 0.00 W1 H +ATOM 2969 H2 TIP3X 160 -17.109 -24.000 -5.074 1.00 0.00 W1 H +ATOM 2970 OH2 TIP3X 161 -27.248 -23.874 -0.388 1.00 0.00 W1 O +ATOM 2971 H1 TIP3X 161 -27.777 -24.108 -1.151 1.00 0.00 W1 H +ATOM 2972 H2 TIP3X 161 -26.353 -23.826 -0.723 1.00 0.00 W1 H +ATOM 2973 OH2 TIP3X 162 -26.338 -20.668 -4.827 1.00 0.00 W1 O +ATOM 2974 H1 TIP3X 162 -26.383 -21.223 -4.048 1.00 0.00 W1 H +ATOM 2975 H2 TIP3X 162 -26.971 -19.969 -4.661 1.00 0.00 W1 H +ATOM 2976 OH2 TIP3X 163 -17.666 -19.538 -5.077 1.00 0.00 W1 O +ATOM 2977 H1 TIP3X 163 -17.243 -18.770 -4.693 1.00 0.00 W1 H +ATOM 2978 H2 TIP3X 163 -17.970 -20.046 -4.325 1.00 0.00 W1 H +ATOM 2979 OH2 TIP3X 164 -19.579 -17.562 -3.252 1.00 0.00 W1 O +ATOM 2980 H1 TIP3X 164 -20.286 -18.191 -3.395 1.00 0.00 W1 H +ATOM 2981 H2 TIP3X 164 -19.250 -17.368 -4.130 1.00 0.00 W1 H +ATOM 2982 OH2 TIP3X 165 -19.328 -19.026 -0.856 1.00 0.00 W1 O +ATOM 2983 H1 TIP3X 165 -19.961 -19.633 -1.240 1.00 0.00 W1 H +ATOM 2984 H2 TIP3X 165 -19.214 -18.346 -1.520 1.00 0.00 W1 H +ATOM 2985 OH2 TIP3X 166 -15.717 -17.118 -6.789 1.00 0.00 W1 O +ATOM 2986 H1 TIP3X 166 -15.040 -17.276 -6.133 1.00 0.00 W1 H +ATOM 2987 H2 TIP3X 166 -15.951 -17.989 -7.108 1.00 0.00 W1 H +ATOM 2988 OH2 TIP3X 167 -25.161 -30.647 -8.397 1.00 0.00 W1 O +ATOM 2989 H1 TIP3X 167 -25.453 -29.737 -8.457 1.00 0.00 W1 H +ATOM 2990 H2 TIP3X 167 -24.329 -30.664 -8.870 1.00 0.00 W1 H +ATOM 2991 OH2 TIP3X 168 -23.037 -20.700 -14.742 1.00 0.00 W1 O +ATOM 2992 H1 TIP3X 168 -23.732 -21.322 -14.528 1.00 0.00 W1 H +ATOM 2993 H2 TIP3X 168 -23.055 -20.064 -14.027 1.00 0.00 W1 H +ATOM 2994 OH2 TIP3X 169 -15.657 -21.937 -15.306 1.00 0.00 W1 O +ATOM 2995 H1 TIP3X 169 -15.920 -22.686 -15.839 1.00 0.00 W1 H +ATOM 2996 H2 TIP3X 169 -15.911 -21.173 -15.823 1.00 0.00 W1 H +ATOM 2997 OH2 TIP3X 170 -29.709 -18.240 -15.589 1.00 0.00 W1 O +ATOM 2998 H1 TIP3X 170 -29.263 -18.789 -14.943 1.00 0.00 W1 H +ATOM 2999 H2 TIP3X 170 -30.605 -18.574 -15.610 1.00 0.00 W1 H +ATOM 3000 OH2 TIP3X 171 -17.615 -16.111 -14.330 1.00 0.00 W1 O +ATOM 3001 H1 TIP3X 171 -16.730 -16.439 -14.489 1.00 0.00 W1 H +ATOM 3002 H2 TIP3X 171 -17.845 -15.643 -15.133 1.00 0.00 W1 H +ATOM 3003 OH2 TIP3X 172 -16.223 -20.449 -2.253 1.00 0.00 W1 O +ATOM 3004 H1 TIP3X 172 -16.333 -19.500 -2.194 1.00 0.00 W1 H +ATOM 3005 H2 TIP3X 172 -17.116 -20.794 -2.263 1.00 0.00 W1 H +ATOM 3006 OH2 TIP3X 173 -29.537 -17.623 -12.634 1.00 0.00 W1 O +ATOM 3007 H1 TIP3X 173 -29.605 -16.787 -12.174 1.00 0.00 W1 H +ATOM 3008 H2 TIP3X 173 -30.432 -17.962 -12.651 1.00 0.00 W1 H +ATOM 3009 OH2 TIP3X 174 -16.957 -19.130 -14.990 1.00 0.00 W1 O +ATOM 3010 H1 TIP3X 174 -16.925 -19.210 -14.036 1.00 0.00 W1 H +ATOM 3011 H2 TIP3X 174 -17.790 -18.693 -15.166 1.00 0.00 W1 H +ATOM 3012 OH2 TIP3X 175 -20.586 -30.836 -2.106 1.00 0.00 W1 O +ATOM 3013 H1 TIP3X 175 -20.893 -30.087 -2.618 1.00 0.00 W1 H +ATOM 3014 H2 TIP3X 175 -20.532 -31.553 -2.738 1.00 0.00 W1 H +ATOM 3015 OH2 TIP3X 176 -26.372 -16.919 -4.077 1.00 0.00 W1 O +ATOM 3016 H1 TIP3X 176 -25.524 -16.681 -3.703 1.00 0.00 W1 H +ATOM 3017 H2 TIP3X 176 -26.161 -17.299 -4.930 1.00 0.00 W1 H +ATOM 3018 OH2 TIP3X 177 -27.906 -28.901 -0.726 1.00 0.00 W1 O +ATOM 3019 H1 TIP3X 177 -28.783 -28.811 -0.352 1.00 0.00 W1 H +ATOM 3020 H2 TIP3X 177 -27.843 -28.188 -1.363 1.00 0.00 W1 H +ATOM 3021 OH2 TIP3X 178 -21.709 -26.954 -14.996 1.00 0.00 W1 O +ATOM 3022 H1 TIP3X 178 -21.875 -26.657 -15.891 1.00 0.00 W1 H +ATOM 3023 H2 TIP3X 178 -22.580 -27.077 -14.619 1.00 0.00 W1 H +ATOM 3024 OH2 TIP3X 179 -16.311 -19.193 -11.948 1.00 0.00 W1 O +ATOM 3025 H1 TIP3X 179 -15.738 -19.930 -11.735 1.00 0.00 W1 H +ATOM 3026 H2 TIP3X 179 -16.642 -18.894 -11.101 1.00 0.00 W1 H +ATOM 3027 OH2 TIP3X 180 -21.050 -30.157 -15.019 1.00 0.00 W1 O +ATOM 3028 H1 TIP3X 180 -20.318 -29.541 -14.994 1.00 0.00 W1 H +ATOM 3029 H2 TIP3X 180 -20.809 -30.790 -15.695 1.00 0.00 W1 H +ATOM 3030 OH2 TIP3X 181 -16.518 -30.064 -4.754 1.00 0.00 W1 O +ATOM 3031 H1 TIP3X 181 -16.026 -30.693 -4.226 1.00 0.00 W1 H +ATOM 3032 H2 TIP3X 181 -15.918 -29.821 -5.459 1.00 0.00 W1 H +ATOM 3033 OH2 TIP3X 182 -29.011 -20.843 -8.676 1.00 0.00 W1 O +ATOM 3034 H1 TIP3X 182 -29.679 -20.520 -8.071 1.00 0.00 W1 H +ATOM 3035 H2 TIP3X 182 -28.219 -20.913 -8.144 1.00 0.00 W1 H +ATOM 3036 OH2 TIP3X 183 -24.014 -19.424 -1.565 1.00 0.00 W1 O +ATOM 3037 H1 TIP3X 183 -23.790 -19.802 -0.715 1.00 0.00 W1 H +ATOM 3038 H2 TIP3X 183 -24.621 -20.053 -1.956 1.00 0.00 W1 H +ATOM 3039 OH2 TIP3X 184 -20.535 -28.119 -6.153 1.00 0.00 W1 O +ATOM 3040 H1 TIP3X 184 -20.476 -28.301 -5.215 1.00 0.00 W1 H +ATOM 3041 H2 TIP3X 184 -21.473 -28.032 -6.321 1.00 0.00 W1 H +ATOM 3042 OH2 TIP3X 185 -24.343 -27.463 -1.974 1.00 0.00 W1 O +ATOM 3043 H1 TIP3X 185 -25.210 -27.533 -2.374 1.00 0.00 W1 H +ATOM 3044 H2 TIP3X 185 -24.398 -28.003 -1.186 1.00 0.00 W1 H +ATOM 3045 OH2 TIP3X 186 -16.857 -24.742 -0.221 1.00 0.00 W1 O +ATOM 3046 H1 TIP3X 186 -16.063 -25.276 -0.237 1.00 0.00 W1 H +ATOM 3047 H2 TIP3X 186 -17.151 -24.777 0.690 1.00 0.00 W1 H +ATOM 3048 OH2 TIP3X 187 -28.672 -30.875 -4.302 1.00 0.00 W1 O +ATOM 3049 H1 TIP3X 187 -28.898 -30.422 -5.115 1.00 0.00 W1 H +ATOM 3050 H2 TIP3X 187 -27.842 -31.312 -4.494 1.00 0.00 W1 H +ATOM 3051 OH2 TIP3X 188 -22.577 -30.418 -9.221 1.00 0.00 W1 O +ATOM 3052 H1 TIP3X 188 -22.095 -29.904 -9.868 1.00 0.00 W1 H +ATOM 3053 H2 TIP3X 188 -22.233 -30.124 -8.377 1.00 0.00 W1 H +ATOM 3054 OH2 TIP3X 189 -28.107 -25.826 -14.068 1.00 0.00 W1 O +ATOM 3055 H1 TIP3X 189 -27.685 -25.180 -14.634 1.00 0.00 W1 H +ATOM 3056 H2 TIP3X 189 -27.395 -26.401 -13.787 1.00 0.00 W1 H +ATOM 3057 OH2 TIP3X 190 -27.583 -25.170 -4.757 1.00 0.00 W1 O +ATOM 3058 H1 TIP3X 190 -27.667 -24.378 -4.225 1.00 0.00 W1 H +ATOM 3059 H2 TIP3X 190 -26.668 -25.174 -5.037 1.00 0.00 W1 H +ATOM 3060 OH2 TIP3X 191 -28.400 -24.451 -11.571 1.00 0.00 W1 O +ATOM 3061 H1 TIP3X 191 -28.337 -24.740 -12.482 1.00 0.00 W1 H +ATOM 3062 H2 TIP3X 191 -27.625 -23.906 -11.438 1.00 0.00 W1 H +ATOM 3063 OH2 TIP3X 192 -19.380 -27.882 -13.811 1.00 0.00 W1 O +ATOM 3064 H1 TIP3X 192 -20.087 -27.393 -14.231 1.00 0.00 W1 H +ATOM 3065 H2 TIP3X 192 -18.655 -27.838 -14.435 1.00 0.00 W1 H +ATOM 3066 OH2 TIP3X 193 -30.829 -26.995 -2.723 1.00 0.00 W1 O +ATOM 3067 H1 TIP3X 193 -31.734 -26.701 -2.612 1.00 0.00 W1 H +ATOM 3068 H2 TIP3X 193 -30.689 -27.614 -2.007 1.00 0.00 W1 H +ATOM 3069 OH2 TIP3X 194 -29.686 -30.158 -6.741 1.00 0.00 W1 O +ATOM 3070 H1 TIP3X 194 -29.579 -30.859 -7.383 1.00 0.00 W1 H +ATOM 3071 H2 TIP3X 194 -29.550 -29.352 -7.240 1.00 0.00 W1 H +ATOM 3072 OH2 TIP3X 195 -18.164 -26.530 -1.853 1.00 0.00 W1 O +ATOM 3073 H1 TIP3X 195 -17.853 -25.951 -1.157 1.00 0.00 W1 H +ATOM 3074 H2 TIP3X 195 -19.108 -26.594 -1.708 1.00 0.00 W1 H +ATOM 3075 OH2 TIP3X 196 -21.121 -26.524 -1.906 1.00 0.00 W1 O +ATOM 3076 H1 TIP3X 196 -21.481 -25.956 -2.587 1.00 0.00 W1 H +ATOM 3077 H2 TIP3X 196 -21.459 -27.394 -2.117 1.00 0.00 W1 H +ATOM 3078 OH2 TIP3X 197 -22.918 -26.055 -12.041 1.00 0.00 W1 O +ATOM 3079 H1 TIP3X 197 -22.829 -25.475 -12.797 1.00 0.00 W1 H +ATOM 3080 H2 TIP3X 197 -23.688 -26.589 -12.237 1.00 0.00 W1 H +ATOM 3081 OH2 TIP3X 198 -24.615 -26.723 -14.353 1.00 0.00 W1 O +ATOM 3082 H1 TIP3X 198 -25.053 -26.531 -15.183 1.00 0.00 W1 H +ATOM 3083 H2 TIP3X 198 -25.022 -27.534 -14.050 1.00 0.00 W1 H +ATOM 3084 OH2 TIP3X 199 -23.905 -29.661 -0.564 1.00 0.00 W1 O +ATOM 3085 H1 TIP3X 199 -24.371 -30.048 0.176 1.00 0.00 W1 H +ATOM 3086 H2 TIP3X 199 -22.991 -29.629 -0.282 1.00 0.00 W1 H +ATOM 3087 OH2 TIP3X 200 -18.342 -24.317 -3.883 1.00 0.00 W1 O +ATOM 3088 H1 TIP3X 200 -18.322 -24.966 -3.180 1.00 0.00 W1 H +ATOM 3089 H2 TIP3X 200 -19.176 -24.468 -4.327 1.00 0.00 W1 H +ATOM 3090 OH2 TIP3X 201 -30.267 -27.216 -15.413 1.00 0.00 W1 O +ATOM 3091 H1 TIP3X 201 -31.023 -27.409 -14.859 1.00 0.00 W1 H +ATOM 3092 H2 TIP3X 201 -29.733 -26.618 -14.891 1.00 0.00 W1 H +ATOM 3093 OH2 TIP3X 202 -30.348 -15.723 -14.926 1.00 0.00 W1 O +ATOM 3094 H1 TIP3X 202 -29.932 -16.470 -14.497 1.00 0.00 W1 H +ATOM 3095 H2 TIP3X 202 -30.335 -15.029 -14.267 1.00 0.00 W1 H +ATOM 3096 OH2 TIP3X 203 -21.600 -27.563 -9.933 1.00 0.00 W1 O +ATOM 3097 H1 TIP3X 203 -21.937 -27.212 -10.758 1.00 0.00 W1 H +ATOM 3098 H2 TIP3X 203 -20.703 -27.830 -10.135 1.00 0.00 W1 H +ATOM 3099 OH2 TIP3X 204 -26.145 -28.252 -8.189 1.00 0.00 W1 O +ATOM 3100 H1 TIP3X 204 -27.087 -28.299 -8.348 1.00 0.00 W1 H +ATOM 3101 H2 TIP3X 204 -26.006 -27.378 -7.826 1.00 0.00 W1 H +ATOM 3102 OH2 TIP3X 205 -30.783 -27.126 -11.396 1.00 0.00 W1 O +ATOM 3103 H1 TIP3X 205 -31.057 -27.251 -10.487 1.00 0.00 W1 H +ATOM 3104 H2 TIP3X 205 -30.977 -26.208 -11.582 1.00 0.00 W1 H +ATOM 3105 OH2 TIP3X 206 -26.782 -27.799 -3.335 1.00 0.00 W1 O +ATOM 3106 H1 TIP3X 206 -26.760 -28.605 -3.851 1.00 0.00 W1 H +ATOM 3107 H2 TIP3X 206 -27.176 -27.151 -3.920 1.00 0.00 W1 H +ATOM 3108 OH2 TIP3X 207 -26.199 -21.264 -7.531 1.00 0.00 W1 O +ATOM 3109 H1 TIP3X 207 -26.271 -22.199 -7.718 1.00 0.00 W1 H +ATOM 3110 H2 TIP3X 207 -26.195 -21.210 -6.575 1.00 0.00 W1 H +ATOM 3111 OH2 TIP3X 208 -22.010 -24.245 -2.968 1.00 0.00 W1 O +ATOM 3112 H1 TIP3X 208 -21.598 -23.413 -2.732 1.00 0.00 W1 H +ATOM 3113 H2 TIP3X 208 -22.560 -24.034 -3.723 1.00 0.00 W1 H +ATOM 3114 OH2 TIP3X 209 -16.215 -28.878 -13.644 1.00 0.00 W1 O +ATOM 3115 H1 TIP3X 209 -15.780 -28.651 -12.822 1.00 0.00 W1 H +ATOM 3116 H2 TIP3X 209 -16.735 -29.654 -13.434 1.00 0.00 W1 H +ATOM 3117 OH2 TIP3X 210 -25.060 -22.918 -14.466 1.00 0.00 W1 O +ATOM 3118 H1 TIP3X 210 -25.349 -23.040 -13.561 1.00 0.00 W1 H +ATOM 3119 H2 TIP3X 210 -24.371 -23.572 -14.587 1.00 0.00 W1 H +ATOM 3120 OH2 TIP3X 211 -18.357 -24.402 -13.398 1.00 0.00 W1 O +ATOM 3121 H1 TIP3X 211 -19.222 -24.601 -13.039 1.00 0.00 W1 H +ATOM 3122 H2 TIP3X 211 -17.800 -24.281 -12.629 1.00 0.00 W1 H +ATOM 3123 OH2 TIP3X 212 -23.524 -24.148 -6.927 1.00 0.00 W1 O +ATOM 3124 H1 TIP3X 212 -23.427 -23.351 -6.406 1.00 0.00 W1 H +ATOM 3125 H2 TIP3X 212 -22.649 -24.538 -6.936 1.00 0.00 W1 H +ATOM 3126 OH2 TIP3X 213 -23.778 -23.766 -10.011 1.00 0.00 W1 O +ATOM 3127 H1 TIP3X 213 -23.157 -24.363 -10.429 1.00 0.00 W1 H +ATOM 3128 H2 TIP3X 213 -23.753 -24.004 -9.084 1.00 0.00 W1 H +ATOM 3129 OH2 TIP3X 214 -20.884 -22.151 -1.075 1.00 0.00 W1 O +ATOM 3130 H1 TIP3X 214 -21.562 -21.867 -0.462 1.00 0.00 W1 H +ATOM 3131 H2 TIP3X 214 -20.086 -22.191 -0.549 1.00 0.00 W1 H +ATOM 3132 OH2 TIP3X 215 -28.374 -22.735 -3.379 1.00 0.00 W1 O +ATOM 3133 H1 TIP3X 215 -27.857 -22.330 -2.683 1.00 0.00 W1 H +ATOM 3134 H2 TIP3X 215 -28.757 -21.998 -3.855 1.00 0.00 W1 H +ATOM 3135 OH2 TIP3X 216 -29.468 -24.773 -1.758 1.00 0.00 W1 O +ATOM 3136 H1 TIP3X 216 -29.672 -25.613 -2.170 1.00 0.00 W1 H +ATOM 3137 H2 TIP3X 216 -29.591 -24.127 -2.453 1.00 0.00 W1 H +ATOM 3138 OH2 TIP3X 217 -29.575 -23.900 -8.934 1.00 0.00 W1 O +ATOM 3139 H1 TIP3X 217 -29.219 -23.028 -9.104 1.00 0.00 W1 H +ATOM 3140 H2 TIP3X 217 -29.677 -24.291 -9.802 1.00 0.00 W1 H +ATOM 3141 OH2 TIP3X 218 -18.816 -21.635 -14.748 1.00 0.00 W1 O +ATOM 3142 H1 TIP3X 218 -18.111 -21.137 -15.160 1.00 0.00 W1 H +ATOM 3143 H2 TIP3X 218 -18.367 -22.266 -14.184 1.00 0.00 W1 H +ATOM 3144 OH2 TIP3X 219 -16.220 -24.288 -11.385 1.00 0.00 W1 O +ATOM 3145 H1 TIP3X 219 -16.507 -24.115 -10.489 1.00 0.00 W1 H +ATOM 3146 H2 TIP3X 219 -15.707 -23.516 -11.626 1.00 0.00 W1 H +ATOM 3147 OH2 TIP3X 220 -29.722 -25.171 -6.663 1.00 0.00 W1 O +ATOM 3148 H1 TIP3X 220 -29.628 -24.493 -7.332 1.00 0.00 W1 H +ATOM 3149 H2 TIP3X 220 -29.064 -24.952 -6.004 1.00 0.00 W1 H +ATOM 3150 OH2 TIP3X 221 -26.935 -16.664 -13.399 1.00 0.00 W1 O +ATOM 3151 H1 TIP3X 221 -27.164 -16.304 -14.256 1.00 0.00 W1 H +ATOM 3152 H2 TIP3X 221 -27.348 -17.527 -13.383 1.00 0.00 W1 H +ATOM 3153 OH2 TIP3X 222 -28.160 -21.431 -14.901 1.00 0.00 W1 O +ATOM 3154 H1 TIP3X 222 -28.976 -21.721 -15.310 1.00 0.00 W1 H +ATOM 3155 H2 TIP3X 222 -27.628 -22.225 -14.840 1.00 0.00 W1 H +ATOM 3156 OH2 TIP3X 223 -26.742 -20.592 -1.826 1.00 0.00 W1 O +ATOM 3157 H1 TIP3X 223 -27.315 -19.990 -2.301 1.00 0.00 W1 H +ATOM 3158 H2 TIP3X 223 -27.216 -20.788 -1.018 1.00 0.00 W1 H +ATOM 3159 OH2 TIP3X 224 -23.666 -15.849 -4.136 1.00 0.00 W1 O +ATOM 3160 H1 TIP3X 224 -23.349 -16.143 -3.282 1.00 0.00 W1 H +ATOM 3161 H2 TIP3X 224 -23.233 -16.426 -4.765 1.00 0.00 W1 H +ATOM 3162 OH2 TIP3X 225 -18.960 -15.607 -10.002 1.00 0.00 W1 O +ATOM 3163 H1 TIP3X 225 -19.373 -16.298 -10.521 1.00 0.00 W1 H +ATOM 3164 H2 TIP3X 225 -19.156 -14.800 -10.479 1.00 0.00 W1 H +ATOM 3165 OH2 TIP3X 226 -22.382 -18.925 -12.750 1.00 0.00 W1 O +ATOM 3166 H1 TIP3X 226 -22.123 -18.139 -13.232 1.00 0.00 W1 H +ATOM 3167 H2 TIP3X 226 -22.952 -18.601 -12.052 1.00 0.00 W1 H +ATOM 3168 OH2 TIP3X 227 -22.365 -23.770 -13.679 1.00 0.00 W1 O +ATOM 3169 H1 TIP3X 227 -21.542 -23.697 -14.162 1.00 0.00 W1 H +ATOM 3170 H2 TIP3X 227 -22.358 -23.026 -13.077 1.00 0.00 W1 H +ATOM 3171 OH2 TIP3X 228 -18.964 -29.047 -3.888 1.00 0.00 W1 O +ATOM 3172 H1 TIP3X 228 -18.159 -29.277 -4.351 1.00 0.00 W1 H +ATOM 3173 H2 TIP3X 228 -18.673 -28.494 -3.163 1.00 0.00 W1 H +ATOM 3174 OH2 TIP3X 229 -30.999 -21.945 -12.482 1.00 0.00 W1 O +ATOM 3175 H1 TIP3X 229 -31.152 -21.853 -13.422 1.00 0.00 W1 H +ATOM 3176 H2 TIP3X 229 -30.045 -21.945 -12.393 1.00 0.00 W1 H +ATOM 3177 OH2 TIP3X 230 -20.237 -22.357 -5.886 1.00 0.00 W1 O +ATOM 3178 H1 TIP3X 230 -19.691 -21.696 -5.460 1.00 0.00 W1 H +ATOM 3179 H2 TIP3X 230 -19.778 -22.558 -6.701 1.00 0.00 W1 H +ATOM 3180 OH2 TIP3X 231 -21.414 -17.384 -14.808 1.00 0.00 W1 O +ATOM 3181 H1 TIP3X 231 -20.590 -17.348 -14.324 1.00 0.00 W1 H +ATOM 3182 H2 TIP3X 231 -21.211 -17.896 -15.591 1.00 0.00 W1 H +ATOM 3183 OH2 TIP3X 232 -21.422 -19.596 -3.157 1.00 0.00 W1 O +ATOM 3184 H1 TIP3X 232 -22.243 -19.349 -2.731 1.00 0.00 W1 H +ATOM 3185 H2 TIP3X 232 -21.651 -19.692 -4.082 1.00 0.00 W1 H +ATOM 3186 OH2 TIP3X 233 -24.797 -19.371 -11.271 1.00 0.00 W1 O +ATOM 3187 H1 TIP3X 233 -25.504 -19.224 -11.899 1.00 0.00 W1 H +ATOM 3188 H2 TIP3X 233 -25.134 -19.027 -10.444 1.00 0.00 W1 H +ATOM 3189 OH2 TIP3X 234 -28.232 -18.459 -2.559 1.00 0.00 W1 O +ATOM 3190 H1 TIP3X 234 -27.498 -17.848 -2.624 1.00 0.00 W1 H +ATOM 3191 H2 TIP3X 234 -28.544 -18.365 -1.660 1.00 0.00 W1 H +ATOM 3192 OH2 TIP3X 235 -28.642 -16.755 -8.458 1.00 0.00 W1 O +ATOM 3193 H1 TIP3X 235 -29.228 -17.496 -8.611 1.00 0.00 W1 H +ATOM 3194 H2 TIP3X 235 -28.199 -16.621 -9.296 1.00 0.00 W1 H +ATOM 3195 OH2 TIP3X 236 -20.289 -30.741 -7.377 1.00 0.00 W1 O +ATOM 3196 H1 TIP3X 236 -19.956 -30.816 -8.272 1.00 0.00 W1 H +ATOM 3197 H2 TIP3X 236 -20.334 -29.799 -7.216 1.00 0.00 W1 H +ATOM 3198 OH2 TIP3X 237 -23.051 -28.612 -7.143 1.00 0.00 W1 O +ATOM 3199 H1 TIP3X 237 -23.413 -28.123 -7.882 1.00 0.00 W1 H +ATOM 3200 H2 TIP3X 237 -23.782 -28.702 -6.533 1.00 0.00 W1 H +ATOM 3201 OH2 TIP3X 238 -24.332 -30.628 -13.215 1.00 0.00 W1 O +ATOM 3202 H1 TIP3X 238 -23.476 -30.883 -12.869 1.00 0.00 W1 H +ATOM 3203 H2 TIP3X 238 -24.850 -31.432 -13.190 1.00 0.00 W1 H +ATOM 3204 OH2 TIP3X 239 -21.580 -30.784 -12.171 1.00 0.00 W1 O +ATOM 3205 H1 TIP3X 239 -21.124 -31.520 -11.763 1.00 0.00 W1 H +ATOM 3206 H2 TIP3X 239 -21.173 -30.698 -13.033 1.00 0.00 W1 H +ATOM 3207 OH2 TIP3X 240 -26.941 -16.206 -0.717 1.00 0.00 W1 O +ATOM 3208 H1 TIP3X 240 -27.191 -15.449 -1.246 1.00 0.00 W1 H +ATOM 3209 H2 TIP3X 240 -26.030 -16.375 -0.956 1.00 0.00 W1 H +ATOM 3210 OH2 TIP3X 241 -21.934 -17.511 -10.416 1.00 0.00 W1 O +ATOM 3211 H1 TIP3X 241 -21.273 -18.153 -10.156 1.00 0.00 W1 H +ATOM 3212 H2 TIP3X 241 -21.947 -16.877 -9.700 1.00 0.00 W1 H +ATOM 3213 OH2 TIP3X 242 -24.195 -16.609 -1.507 1.00 0.00 W1 O +ATOM 3214 H1 TIP3X 242 -23.977 -17.501 -1.236 1.00 0.00 W1 H +ATOM 3215 H2 TIP3X 242 -23.587 -16.055 -1.017 1.00 0.00 W1 H +ATOM 3216 OH2 TIP3X 243 -25.248 -28.491 -11.462 1.00 0.00 W1 O +ATOM 3217 H1 TIP3X 243 -24.591 -29.150 -11.685 1.00 0.00 W1 H +ATOM 3218 H2 TIP3X 243 -25.206 -28.422 -10.508 1.00 0.00 W1 H +ATOM 3219 OH2 TIP3X 244 -30.535 -30.152 -2.006 1.00 0.00 W1 O +ATOM 3220 H1 TIP3X 244 -29.787 -30.348 -2.570 1.00 0.00 W1 H +ATOM 3221 H2 TIP3X 244 -30.327 -30.578 -1.175 1.00 0.00 W1 H +ATOM 3222 OH2 TIP3X 245 -19.415 -17.425 -12.405 1.00 0.00 W1 O +ATOM 3223 H1 TIP3X 245 -19.271 -18.365 -12.302 1.00 0.00 W1 H +ATOM 3224 H2 TIP3X 245 -18.592 -17.093 -12.762 1.00 0.00 W1 H +ATOM 3225 OH2 TIP3X 246 -17.748 -30.659 -1.178 1.00 0.00 W1 O +ATOM 3226 H1 TIP3X 246 -18.361 -30.585 -1.908 1.00 0.00 W1 H +ATOM 3227 H2 TIP3X 246 -16.978 -30.164 -1.459 1.00 0.00 W1 H +ATOM 3228 OH2 TIP3X 247 -26.954 -16.446 -10.691 1.00 0.00 W1 O +ATOM 3229 H1 TIP3X 247 -26.961 -16.401 -11.647 1.00 0.00 W1 H +ATOM 3230 H2 TIP3X 247 -26.147 -16.000 -10.435 1.00 0.00 W1 H +ATOM 3231 OH2 TIP3X 248 -16.045 -17.507 -2.742 1.00 0.00 W1 O +ATOM 3232 H1 TIP3X 248 -16.768 -16.956 -2.441 1.00 0.00 W1 H +ATOM 3233 H2 TIP3X 248 -15.257 -17.008 -2.528 1.00 0.00 W1 H +ATOM 3234 OH2 TIP3X 249 -28.419 -28.185 -11.062 1.00 0.00 W1 O +ATOM 3235 H1 TIP3X 249 -29.063 -27.797 -11.654 1.00 0.00 W1 H +ATOM 3236 H2 TIP3X 249 -27.617 -27.688 -11.220 1.00 0.00 W1 H +ATOM 3237 OH2 TIP3X 250 -26.991 -19.586 -13.330 1.00 0.00 W1 O +ATOM 3238 H1 TIP3X 250 -27.030 -20.214 -14.052 1.00 0.00 W1 H +ATOM 3239 H2 TIP3X 250 -27.710 -19.840 -12.752 1.00 0.00 W1 H +ATOM 3240 OH2 TIP3X 251 -29.096 -20.058 4.309 1.00 0.00 W1 O +ATOM 3241 H1 TIP3X 251 -28.914 -20.134 5.246 1.00 0.00 W1 H +ATOM 3242 H2 TIP3X 251 -29.120 -19.116 4.145 1.00 0.00 W1 H +ATOM 3243 OH2 TIP3X 252 -17.994 -22.567 8.047 1.00 0.00 W1 O +ATOM 3244 H1 TIP3X 252 -17.759 -22.303 7.158 1.00 0.00 W1 H +ATOM 3245 H2 TIP3X 252 -17.165 -22.831 8.446 1.00 0.00 W1 H +ATOM 3246 OH2 TIP3X 253 -26.010 -22.844 4.026 1.00 0.00 W1 O +ATOM 3247 H1 TIP3X 253 -25.979 -21.934 4.323 1.00 0.00 W1 H +ATOM 3248 H2 TIP3X 253 -25.502 -23.327 4.678 1.00 0.00 W1 H +ATOM 3249 OH2 TIP3X 254 -18.206 -18.684 6.169 1.00 0.00 W1 O +ATOM 3250 H1 TIP3X 254 -18.481 -18.194 6.944 1.00 0.00 W1 H +ATOM 3251 H2 TIP3X 254 -18.732 -19.484 6.192 1.00 0.00 W1 H +ATOM 3252 OH2 TIP3X 255 -19.690 -20.241 3.212 1.00 0.00 W1 O +ATOM 3253 H1 TIP3X 255 -19.528 -20.470 2.297 1.00 0.00 W1 H +ATOM 3254 H2 TIP3X 255 -20.619 -20.012 3.242 1.00 0.00 W1 H +ATOM 3255 OH2 TIP3X 256 -15.842 -19.709 7.997 1.00 0.00 W1 O +ATOM 3256 H1 TIP3X 256 -16.394 -19.626 7.219 1.00 0.00 W1 H +ATOM 3257 H2 TIP3X 256 -16.453 -19.926 8.702 1.00 0.00 W1 H +ATOM 3258 OH2 TIP3X 257 -29.206 -18.445 10.448 1.00 0.00 W1 O +ATOM 3259 H1 TIP3X 257 -28.800 -18.242 11.291 1.00 0.00 W1 H +ATOM 3260 H2 TIP3X 257 -29.777 -19.191 10.630 1.00 0.00 W1 H +ATOM 3261 OH2 TIP3X 258 -21.831 -16.820 9.674 1.00 0.00 W1 O +ATOM 3262 H1 TIP3X 258 -21.530 -17.721 9.796 1.00 0.00 W1 H +ATOM 3263 H2 TIP3X 258 -21.205 -16.440 9.057 1.00 0.00 W1 H +ATOM 3264 OH2 TIP3X 259 -18.398 -16.863 9.554 1.00 0.00 W1 O +ATOM 3265 H1 TIP3X 259 -18.834 -16.040 9.334 1.00 0.00 W1 H +ATOM 3266 H2 TIP3X 259 -17.469 -16.638 9.603 1.00 0.00 W1 H +ATOM 3267 OH2 TIP3X 260 -25.950 -17.289 8.683 1.00 0.00 W1 O +ATOM 3268 H1 TIP3X 260 -25.595 -16.440 8.420 1.00 0.00 W1 H +ATOM 3269 H2 TIP3X 260 -26.885 -17.229 8.487 1.00 0.00 W1 H +ATOM 3270 OH2 TIP3X 261 -21.109 -25.396 7.585 1.00 0.00 W1 O +ATOM 3271 H1 TIP3X 261 -21.186 -26.206 7.080 1.00 0.00 W1 H +ATOM 3272 H2 TIP3X 261 -20.166 -25.257 7.672 1.00 0.00 W1 H +ATOM 3273 OH2 TIP3X 262 -25.086 -29.299 9.947 1.00 0.00 W1 O +ATOM 3274 H1 TIP3X 262 -24.828 -30.036 10.500 1.00 0.00 W1 H +ATOM 3275 H2 TIP3X 262 -25.762 -29.655 9.371 1.00 0.00 W1 H +ATOM 3276 OH2 TIP3X 263 -16.842 -28.294 6.370 1.00 0.00 W1 O +ATOM 3277 H1 TIP3X 263 -17.150 -27.956 7.211 1.00 0.00 W1 H +ATOM 3278 H2 TIP3X 263 -16.774 -29.240 6.501 1.00 0.00 W1 H +ATOM 3279 OH2 TIP3X 264 -18.244 -27.099 8.324 1.00 0.00 W1 O +ATOM 3280 H1 TIP3X 264 -17.669 -27.327 9.054 1.00 0.00 W1 H +ATOM 3281 H2 TIP3X 264 -19.119 -27.353 8.618 1.00 0.00 W1 H +ATOM 3282 OH2 TIP3X 265 -25.198 -25.974 9.695 1.00 0.00 W1 O +ATOM 3283 H1 TIP3X 265 -24.695 -26.677 10.107 1.00 0.00 W1 H +ATOM 3284 H2 TIP3X 265 -24.541 -25.332 9.428 1.00 0.00 W1 H +ATOM 3285 OH2 TIP3X 266 -17.721 -24.926 6.592 1.00 0.00 W1 O +ATOM 3286 H1 TIP3X 266 -17.680 -25.826 6.916 1.00 0.00 W1 H +ATOM 3287 H2 TIP3X 266 -17.839 -24.393 7.379 1.00 0.00 W1 H +ATOM 3288 OH2 TIP3X 267 -19.037 -28.283 4.461 1.00 0.00 W1 O +ATOM 3289 H1 TIP3X 267 -18.212 -28.098 4.910 1.00 0.00 W1 H +ATOM 3290 H2 TIP3X 267 -18.960 -27.828 3.622 1.00 0.00 W1 H +ATOM 3291 OH2 TIP3X 268 -22.854 -22.311 10.532 1.00 0.00 W1 O +ATOM 3292 H1 TIP3X 268 -21.977 -22.289 10.149 1.00 0.00 W1 H +ATOM 3293 H2 TIP3X 268 -23.119 -21.393 10.578 1.00 0.00 W1 H +ATOM 3294 OH2 TIP3X 269 -23.704 -19.763 10.342 1.00 0.00 W1 O +ATOM 3295 H1 TIP3X 269 -23.728 -19.536 9.413 1.00 0.00 W1 H +ATOM 3296 H2 TIP3X 269 -24.624 -19.817 10.601 1.00 0.00 W1 H +ATOM 3297 OH2 TIP3X 270 -28.841 -27.882 7.180 1.00 0.00 W1 O +ATOM 3298 H1 TIP3X 270 -29.166 -27.002 7.371 1.00 0.00 W1 H +ATOM 3299 H2 TIP3X 270 -28.964 -27.984 6.237 1.00 0.00 W1 H +ATOM 3300 OH2 TIP3X 271 -26.685 -24.324 7.193 1.00 0.00 W1 O +ATOM 3301 H1 TIP3X 271 -27.368 -24.774 6.696 1.00 0.00 W1 H +ATOM 3302 H2 TIP3X 271 -26.199 -25.028 7.624 1.00 0.00 W1 H +ATOM 3303 OH2 TIP3X 272 -20.629 -19.400 9.589 1.00 0.00 W1 O +ATOM 3304 H1 TIP3X 272 -20.871 -19.986 8.872 1.00 0.00 W1 H +ATOM 3305 H2 TIP3X 272 -19.679 -19.489 9.662 1.00 0.00 W1 H +ATOM 3306 OH2 TIP3X 273 -16.331 -15.765 6.370 1.00 0.00 W1 O +ATOM 3307 H1 TIP3X 273 -16.336 -16.233 7.205 1.00 0.00 W1 H +ATOM 3308 H2 TIP3X 273 -17.212 -15.894 6.017 1.00 0.00 W1 H +ATOM 3309 OH2 TIP3X 274 -24.459 -19.429 7.392 1.00 0.00 W1 O +ATOM 3310 H1 TIP3X 274 -25.031 -20.148 7.661 1.00 0.00 W1 H +ATOM 3311 H2 TIP3X 274 -24.920 -18.638 7.674 1.00 0.00 W1 H +ATOM 3312 OH2 TIP3X 275 -22.238 -28.977 11.962 1.00 0.00 W1 O +ATOM 3313 H1 TIP3X 275 -22.980 -28.498 12.329 1.00 0.00 W1 H +ATOM 3314 H2 TIP3X 275 -22.618 -29.789 11.628 1.00 0.00 W1 H +ATOM 3315 OH2 TIP3X 276 -26.886 -28.272 1.764 1.00 0.00 W1 O +ATOM 3316 H1 TIP3X 276 -26.984 -28.934 2.448 1.00 0.00 W1 H +ATOM 3317 H2 TIP3X 276 -27.069 -28.741 0.949 1.00 0.00 W1 H +ATOM 3318 OH2 TIP3X 277 -15.992 -27.350 9.953 1.00 0.00 W1 O +ATOM 3319 H1 TIP3X 277 -15.473 -26.682 9.506 1.00 0.00 W1 H +ATOM 3320 H2 TIP3X 277 -15.550 -27.475 10.793 1.00 0.00 W1 H +ATOM 3321 OH2 TIP3X 278 -29.934 -30.998 4.113 1.00 0.00 W1 O +ATOM 3322 H1 TIP3X 278 -29.209 -30.377 4.182 1.00 0.00 W1 H +ATOM 3323 H2 TIP3X 278 -30.306 -31.031 4.995 1.00 0.00 W1 H +ATOM 3324 OH2 TIP3X 279 -24.668 -24.762 14.100 1.00 0.00 W1 O +ATOM 3325 H1 TIP3X 279 -23.804 -24.364 13.998 1.00 0.00 W1 H +ATOM 3326 H2 TIP3X 279 -24.516 -25.699 13.977 1.00 0.00 W1 H +ATOM 3327 OH2 TIP3X 280 -21.502 -19.852 6.839 1.00 0.00 W1 O +ATOM 3328 H1 TIP3X 280 -21.408 -20.715 6.436 1.00 0.00 W1 H +ATOM 3329 H2 TIP3X 280 -22.435 -19.652 6.763 1.00 0.00 W1 H +ATOM 3330 OH2 TIP3X 281 -22.890 -21.568 4.370 1.00 0.00 W1 O +ATOM 3331 H1 TIP3X 281 -23.455 -22.182 4.840 1.00 0.00 W1 H +ATOM 3332 H2 TIP3X 281 -23.364 -20.737 4.398 1.00 0.00 W1 H +ATOM 3333 OH2 TIP3X 282 -30.352 -21.055 10.827 1.00 0.00 W1 O +ATOM 3334 H1 TIP3X 282 -30.887 -21.657 10.309 1.00 0.00 W1 H +ATOM 3335 H2 TIP3X 282 -30.823 -20.969 11.656 1.00 0.00 W1 H +ATOM 3336 OH2 TIP3X 283 -19.056 -22.034 5.195 1.00 0.00 W1 O +ATOM 3337 H1 TIP3X 283 -19.112 -22.949 4.918 1.00 0.00 W1 H +ATOM 3338 H2 TIP3X 283 -19.229 -21.532 4.399 1.00 0.00 W1 H +ATOM 3339 OH2 TIP3X 284 -18.759 -21.520 12.219 1.00 0.00 W1 O +ATOM 3340 H1 TIP3X 284 -19.662 -21.436 12.527 1.00 0.00 W1 H +ATOM 3341 H2 TIP3X 284 -18.591 -22.462 12.223 1.00 0.00 W1 H +ATOM 3342 OH2 TIP3X 285 -16.393 -23.561 10.025 1.00 0.00 W1 O +ATOM 3343 H1 TIP3X 285 -15.730 -24.241 9.906 1.00 0.00 W1 H +ATOM 3344 H2 TIP3X 285 -17.109 -24.000 10.484 1.00 0.00 W1 H +ATOM 3345 OH2 TIP3X 286 -27.248 -23.874 15.169 1.00 0.00 W1 O +ATOM 3346 H1 TIP3X 286 -27.777 -24.108 14.407 1.00 0.00 W1 H +ATOM 3347 H2 TIP3X 286 -26.353 -23.826 14.835 1.00 0.00 W1 H +ATOM 3348 OH2 TIP3X 287 -26.338 -20.668 10.731 1.00 0.00 W1 O +ATOM 3349 H1 TIP3X 287 -26.383 -21.223 11.509 1.00 0.00 W1 H +ATOM 3350 H2 TIP3X 287 -26.971 -19.969 10.897 1.00 0.00 W1 H +ATOM 3351 OH2 TIP3X 288 -17.666 -19.538 10.480 1.00 0.00 W1 O +ATOM 3352 H1 TIP3X 288 -17.243 -18.770 10.864 1.00 0.00 W1 H +ATOM 3353 H2 TIP3X 288 -17.970 -20.046 11.233 1.00 0.00 W1 H +ATOM 3354 OH2 TIP3X 289 -19.579 -17.562 12.305 1.00 0.00 W1 O +ATOM 3355 H1 TIP3X 289 -20.286 -18.191 12.163 1.00 0.00 W1 H +ATOM 3356 H2 TIP3X 289 -19.250 -17.368 11.428 1.00 0.00 W1 H +ATOM 3357 OH2 TIP3X 290 -19.328 -19.026 14.702 1.00 0.00 W1 O +ATOM 3358 H1 TIP3X 290 -19.961 -19.633 14.318 1.00 0.00 W1 H +ATOM 3359 H2 TIP3X 290 -19.214 -18.346 14.038 1.00 0.00 W1 H +ATOM 3360 OH2 TIP3X 291 -15.717 -17.118 8.768 1.00 0.00 W1 O +ATOM 3361 H1 TIP3X 291 -15.040 -17.276 9.425 1.00 0.00 W1 H +ATOM 3362 H2 TIP3X 291 -15.951 -17.989 8.449 1.00 0.00 W1 H +ATOM 3363 OH2 TIP3X 292 -25.161 -30.647 7.161 1.00 0.00 W1 O +ATOM 3364 H1 TIP3X 292 -25.453 -29.737 7.100 1.00 0.00 W1 H +ATOM 3365 H2 TIP3X 292 -24.329 -30.664 6.688 1.00 0.00 W1 H +ATOM 3366 OH2 TIP3X 293 -23.037 -20.700 0.815 1.00 0.00 W1 O +ATOM 3367 H1 TIP3X 293 -23.732 -21.322 1.030 1.00 0.00 W1 H +ATOM 3368 H2 TIP3X 293 -23.055 -20.064 1.530 1.00 0.00 W1 H +ATOM 3369 OH2 TIP3X 294 -15.657 -21.937 0.252 1.00 0.00 W1 O +ATOM 3370 H1 TIP3X 294 -15.920 -22.686 -0.282 1.00 0.00 W1 H +ATOM 3371 H2 TIP3X 294 -15.911 -21.173 -0.266 1.00 0.00 W1 H +ATOM 3372 OH2 TIP3X 295 -29.709 -18.240 -0.031 1.00 0.00 W1 O +ATOM 3373 H1 TIP3X 295 -29.263 -18.789 0.614 1.00 0.00 W1 H +ATOM 3374 H2 TIP3X 295 -30.605 -18.574 -0.053 1.00 0.00 W1 H +ATOM 3375 OH2 TIP3X 296 -17.615 -16.111 1.227 1.00 0.00 W1 O +ATOM 3376 H1 TIP3X 296 -16.730 -16.439 1.069 1.00 0.00 W1 H +ATOM 3377 H2 TIP3X 296 -17.845 -15.643 0.425 1.00 0.00 W1 H +ATOM 3378 OH2 TIP3X 297 -16.223 -20.449 13.305 1.00 0.00 W1 O +ATOM 3379 H1 TIP3X 297 -16.333 -19.500 13.364 1.00 0.00 W1 H +ATOM 3380 H2 TIP3X 297 -17.116 -20.794 13.294 1.00 0.00 W1 H +ATOM 3381 OH2 TIP3X 298 -29.537 -17.623 2.923 1.00 0.00 W1 O +ATOM 3382 H1 TIP3X 298 -29.605 -16.787 3.384 1.00 0.00 W1 H +ATOM 3383 H2 TIP3X 298 -30.432 -17.962 2.907 1.00 0.00 W1 H +ATOM 3384 OH2 TIP3X 299 -16.957 -19.130 0.568 1.00 0.00 W1 O +ATOM 3385 H1 TIP3X 299 -16.925 -19.210 1.521 1.00 0.00 W1 H +ATOM 3386 H2 TIP3X 299 -17.790 -18.693 0.391 1.00 0.00 W1 H +ATOM 3387 OH2 TIP3X 300 -20.586 -30.836 13.452 1.00 0.00 W1 O +ATOM 3388 H1 TIP3X 300 -20.893 -30.087 12.939 1.00 0.00 W1 H +ATOM 3389 H2 TIP3X 300 -20.532 -31.553 12.820 1.00 0.00 W1 H +ATOM 3390 OH2 TIP3X 301 -26.372 -16.919 11.481 1.00 0.00 W1 O +ATOM 3391 H1 TIP3X 301 -25.524 -16.681 11.854 1.00 0.00 W1 H +ATOM 3392 H2 TIP3X 301 -26.161 -17.299 10.628 1.00 0.00 W1 H +ATOM 3393 OH2 TIP3X 302 -27.906 -28.901 14.831 1.00 0.00 W1 O +ATOM 3394 H1 TIP3X 302 -28.783 -28.811 15.205 1.00 0.00 W1 H +ATOM 3395 H2 TIP3X 302 -27.843 -28.188 14.195 1.00 0.00 W1 H +ATOM 3396 OH2 TIP3X 303 -21.709 -26.954 0.562 1.00 0.00 W1 O +ATOM 3397 H1 TIP3X 303 -21.875 -26.657 -0.333 1.00 0.00 W1 H +ATOM 3398 H2 TIP3X 303 -22.580 -27.077 0.939 1.00 0.00 W1 H +ATOM 3399 OH2 TIP3X 304 -16.311 -19.193 3.610 1.00 0.00 W1 O +ATOM 3400 H1 TIP3X 304 -15.738 -19.930 3.823 1.00 0.00 W1 H +ATOM 3401 H2 TIP3X 304 -16.642 -18.894 4.457 1.00 0.00 W1 H +ATOM 3402 OH2 TIP3X 305 -21.050 -30.157 0.539 1.00 0.00 W1 O +ATOM 3403 H1 TIP3X 305 -20.318 -29.541 0.563 1.00 0.00 W1 H +ATOM 3404 H2 TIP3X 305 -20.809 -30.790 -0.138 1.00 0.00 W1 H +ATOM 3405 OH2 TIP3X 306 -16.518 -30.064 10.804 1.00 0.00 W1 O +ATOM 3406 H1 TIP3X 306 -16.026 -30.693 11.331 1.00 0.00 W1 H +ATOM 3407 H2 TIP3X 306 -15.918 -29.821 10.098 1.00 0.00 W1 H +ATOM 3408 OH2 TIP3X 307 -29.011 -20.843 6.882 1.00 0.00 W1 O +ATOM 3409 H1 TIP3X 307 -29.679 -20.520 7.486 1.00 0.00 W1 H +ATOM 3410 H2 TIP3X 307 -28.219 -20.913 7.414 1.00 0.00 W1 H +ATOM 3411 OH2 TIP3X 308 -24.014 -19.424 13.992 1.00 0.00 W1 O +ATOM 3412 H1 TIP3X 308 -23.790 -19.802 14.843 1.00 0.00 W1 H +ATOM 3413 H2 TIP3X 308 -24.621 -20.053 13.602 1.00 0.00 W1 H +ATOM 3414 OH2 TIP3X 309 -20.535 -28.119 9.405 1.00 0.00 W1 O +ATOM 3415 H1 TIP3X 309 -20.476 -28.301 10.343 1.00 0.00 W1 H +ATOM 3416 H2 TIP3X 309 -21.473 -28.032 9.236 1.00 0.00 W1 H +ATOM 3417 OH2 TIP3X 310 -24.343 -27.463 13.584 1.00 0.00 W1 O +ATOM 3418 H1 TIP3X 310 -25.210 -27.533 13.184 1.00 0.00 W1 H +ATOM 3419 H2 TIP3X 310 -24.398 -28.003 14.372 1.00 0.00 W1 H +ATOM 3420 OH2 TIP3X 311 -16.857 -24.742 15.337 1.00 0.00 W1 O +ATOM 3421 H1 TIP3X 311 -16.063 -25.276 15.320 1.00 0.00 W1 H +ATOM 3422 H2 TIP3X 311 -17.151 -24.777 16.247 1.00 0.00 W1 H +ATOM 3423 OH2 TIP3X 312 -28.672 -30.875 11.255 1.00 0.00 W1 O +ATOM 3424 H1 TIP3X 312 -28.898 -30.422 10.443 1.00 0.00 W1 H +ATOM 3425 H2 TIP3X 312 -27.842 -31.312 11.064 1.00 0.00 W1 H +ATOM 3426 OH2 TIP3X 313 -22.577 -30.418 6.337 1.00 0.00 W1 O +ATOM 3427 H1 TIP3X 313 -22.095 -29.904 5.689 1.00 0.00 W1 H +ATOM 3428 H2 TIP3X 313 -22.233 -30.124 7.181 1.00 0.00 W1 H +ATOM 3429 OH2 TIP3X 314 -28.107 -25.826 1.490 1.00 0.00 W1 O +ATOM 3430 H1 TIP3X 314 -27.685 -25.180 0.924 1.00 0.00 W1 H +ATOM 3431 H2 TIP3X 314 -27.395 -26.401 1.771 1.00 0.00 W1 H +ATOM 3432 OH2 TIP3X 315 -27.583 -25.170 10.801 1.00 0.00 W1 O +ATOM 3433 H1 TIP3X 315 -27.667 -24.378 11.333 1.00 0.00 W1 H +ATOM 3434 H2 TIP3X 315 -26.668 -25.174 10.520 1.00 0.00 W1 H +ATOM 3435 OH2 TIP3X 316 -28.400 -24.451 3.986 1.00 0.00 W1 O +ATOM 3436 H1 TIP3X 316 -28.337 -24.740 3.076 1.00 0.00 W1 H +ATOM 3437 H2 TIP3X 316 -27.625 -23.906 4.119 1.00 0.00 W1 H +ATOM 3438 OH2 TIP3X 317 -19.380 -27.882 1.746 1.00 0.00 W1 O +ATOM 3439 H1 TIP3X 317 -20.087 -27.393 1.326 1.00 0.00 W1 H +ATOM 3440 H2 TIP3X 317 -18.655 -27.838 1.123 1.00 0.00 W1 H +ATOM 3441 OH2 TIP3X 318 -30.829 -26.995 12.834 1.00 0.00 W1 O +ATOM 3442 H1 TIP3X 318 -31.734 -26.701 12.945 1.00 0.00 W1 H +ATOM 3443 H2 TIP3X 318 -30.689 -27.614 13.551 1.00 0.00 W1 H +ATOM 3444 OH2 TIP3X 319 -29.686 -30.158 8.817 1.00 0.00 W1 O +ATOM 3445 H1 TIP3X 319 -29.579 -30.859 8.174 1.00 0.00 W1 H +ATOM 3446 H2 TIP3X 319 -29.550 -29.352 8.318 1.00 0.00 W1 H +ATOM 3447 OH2 TIP3X 320 -18.164 -26.530 13.704 1.00 0.00 W1 O +ATOM 3448 H1 TIP3X 320 -17.853 -25.951 14.400 1.00 0.00 W1 H +ATOM 3449 H2 TIP3X 320 -19.108 -26.594 13.849 1.00 0.00 W1 H +ATOM 3450 OH2 TIP3X 321 -21.121 -26.524 13.651 1.00 0.00 W1 O +ATOM 3451 H1 TIP3X 321 -21.481 -25.956 12.970 1.00 0.00 W1 H +ATOM 3452 H2 TIP3X 321 -21.459 -27.394 13.440 1.00 0.00 W1 H +ATOM 3453 OH2 TIP3X 322 -22.918 -26.055 3.517 1.00 0.00 W1 O +ATOM 3454 H1 TIP3X 322 -22.829 -25.475 2.760 1.00 0.00 W1 H +ATOM 3455 H2 TIP3X 322 -23.688 -26.589 3.320 1.00 0.00 W1 H +ATOM 3456 OH2 TIP3X 323 -24.615 -26.723 1.204 1.00 0.00 W1 O +ATOM 3457 H1 TIP3X 323 -25.053 -26.531 0.375 1.00 0.00 W1 H +ATOM 3458 H2 TIP3X 323 -25.022 -27.534 1.508 1.00 0.00 W1 H +ATOM 3459 OH2 TIP3X 324 -23.905 -29.661 14.993 1.00 0.00 W1 O +ATOM 3460 H1 TIP3X 324 -24.371 -30.048 15.734 1.00 0.00 W1 H +ATOM 3461 H2 TIP3X 324 -22.991 -29.629 15.276 1.00 0.00 W1 H +ATOM 3462 OH2 TIP3X 325 -18.342 -24.317 11.675 1.00 0.00 W1 O +ATOM 3463 H1 TIP3X 325 -18.322 -24.966 12.378 1.00 0.00 W1 H +ATOM 3464 H2 TIP3X 325 -19.176 -24.468 11.231 1.00 0.00 W1 H +ATOM 3465 OH2 TIP3X 326 -30.267 -27.216 0.144 1.00 0.00 W1 O +ATOM 3466 H1 TIP3X 326 -31.023 -27.409 0.698 1.00 0.00 W1 H +ATOM 3467 H2 TIP3X 326 -29.733 -26.618 0.667 1.00 0.00 W1 H +ATOM 3468 OH2 TIP3X 327 -30.348 -15.723 0.631 1.00 0.00 W1 O +ATOM 3469 H1 TIP3X 327 -29.932 -16.470 1.060 1.00 0.00 W1 H +ATOM 3470 H2 TIP3X 327 -30.335 -15.029 1.291 1.00 0.00 W1 H +ATOM 3471 OH2 TIP3X 328 -21.600 -27.563 5.624 1.00 0.00 W1 O +ATOM 3472 H1 TIP3X 328 -21.937 -27.212 4.800 1.00 0.00 W1 H +ATOM 3473 H2 TIP3X 328 -20.703 -27.830 5.423 1.00 0.00 W1 H +ATOM 3474 OH2 TIP3X 329 -26.145 -28.252 7.368 1.00 0.00 W1 O +ATOM 3475 H1 TIP3X 329 -27.087 -28.299 7.209 1.00 0.00 W1 H +ATOM 3476 H2 TIP3X 329 -26.006 -27.378 7.732 1.00 0.00 W1 H +ATOM 3477 OH2 TIP3X 330 -30.783 -27.126 4.162 1.00 0.00 W1 O +ATOM 3478 H1 TIP3X 330 -31.057 -27.251 5.070 1.00 0.00 W1 H +ATOM 3479 H2 TIP3X 330 -30.977 -26.208 3.976 1.00 0.00 W1 H +ATOM 3480 OH2 TIP3X 331 -26.782 -27.799 12.222 1.00 0.00 W1 O +ATOM 3481 H1 TIP3X 331 -26.760 -28.605 11.706 1.00 0.00 W1 H +ATOM 3482 H2 TIP3X 331 -27.176 -27.151 11.638 1.00 0.00 W1 H +ATOM 3483 OH2 TIP3X 332 -26.199 -21.264 8.027 1.00 0.00 W1 O +ATOM 3484 H1 TIP3X 332 -26.271 -22.199 7.839 1.00 0.00 W1 H +ATOM 3485 H2 TIP3X 332 -26.195 -21.210 8.983 1.00 0.00 W1 H +ATOM 3486 OH2 TIP3X 333 -22.010 -24.245 12.589 1.00 0.00 W1 O +ATOM 3487 H1 TIP3X 333 -21.598 -23.413 12.826 1.00 0.00 W1 H +ATOM 3488 H2 TIP3X 333 -22.560 -24.034 11.835 1.00 0.00 W1 H +ATOM 3489 OH2 TIP3X 334 -16.215 -28.878 1.914 1.00 0.00 W1 O +ATOM 3490 H1 TIP3X 334 -15.780 -28.651 2.736 1.00 0.00 W1 H +ATOM 3491 H2 TIP3X 334 -16.735 -29.654 2.123 1.00 0.00 W1 H +ATOM 3492 OH2 TIP3X 335 -25.060 -22.918 1.092 1.00 0.00 W1 O +ATOM 3493 H1 TIP3X 335 -25.349 -23.040 1.996 1.00 0.00 W1 H +ATOM 3494 H2 TIP3X 335 -24.371 -23.572 0.970 1.00 0.00 W1 H +ATOM 3495 OH2 TIP3X 336 -18.357 -24.402 2.160 1.00 0.00 W1 O +ATOM 3496 H1 TIP3X 336 -19.222 -24.601 2.519 1.00 0.00 W1 H +ATOM 3497 H2 TIP3X 336 -17.800 -24.281 2.929 1.00 0.00 W1 H +ATOM 3498 OH2 TIP3X 337 -23.524 -24.148 8.630 1.00 0.00 W1 O +ATOM 3499 H1 TIP3X 337 -23.427 -23.351 9.152 1.00 0.00 W1 H +ATOM 3500 H2 TIP3X 337 -22.649 -24.538 8.622 1.00 0.00 W1 H +ATOM 3501 OH2 TIP3X 338 -23.778 -23.766 5.546 1.00 0.00 W1 O +ATOM 3502 H1 TIP3X 338 -23.157 -24.363 5.128 1.00 0.00 W1 H +ATOM 3503 H2 TIP3X 338 -23.753 -24.004 6.473 1.00 0.00 W1 H +ATOM 3504 OH2 TIP3X 339 -20.884 -22.151 14.482 1.00 0.00 W1 O +ATOM 3505 H1 TIP3X 339 -21.562 -21.867 15.095 1.00 0.00 W1 H +ATOM 3506 H2 TIP3X 339 -20.086 -22.191 15.009 1.00 0.00 W1 H +ATOM 3507 OH2 TIP3X 340 -28.374 -22.735 12.178 1.00 0.00 W1 O +ATOM 3508 H1 TIP3X 340 -27.857 -22.330 12.874 1.00 0.00 W1 H +ATOM 3509 H2 TIP3X 340 -28.757 -21.998 11.703 1.00 0.00 W1 H +ATOM 3510 OH2 TIP3X 341 -29.468 -24.773 13.800 1.00 0.00 W1 O +ATOM 3511 H1 TIP3X 341 -29.672 -25.613 13.387 1.00 0.00 W1 H +ATOM 3512 H2 TIP3X 341 -29.591 -24.127 13.104 1.00 0.00 W1 H +ATOM 3513 OH2 TIP3X 342 -29.575 -23.900 6.623 1.00 0.00 W1 O +ATOM 3514 H1 TIP3X 342 -29.219 -23.028 6.453 1.00 0.00 W1 H +ATOM 3515 H2 TIP3X 342 -29.677 -24.291 5.755 1.00 0.00 W1 H +ATOM 3516 OH2 TIP3X 343 -18.816 -21.635 0.810 1.00 0.00 W1 O +ATOM 3517 H1 TIP3X 343 -18.111 -21.137 0.398 1.00 0.00 W1 H +ATOM 3518 H2 TIP3X 343 -18.367 -22.266 1.373 1.00 0.00 W1 H +ATOM 3519 OH2 TIP3X 344 -16.220 -24.288 4.172 1.00 0.00 W1 O +ATOM 3520 H1 TIP3X 344 -16.507 -24.115 5.069 1.00 0.00 W1 H +ATOM 3521 H2 TIP3X 344 -15.707 -23.516 3.932 1.00 0.00 W1 H +ATOM 3522 OH2 TIP3X 345 -29.722 -25.171 8.894 1.00 0.00 W1 O +ATOM 3523 H1 TIP3X 345 -29.628 -24.493 8.226 1.00 0.00 W1 H +ATOM 3524 H2 TIP3X 345 -29.064 -24.952 9.553 1.00 0.00 W1 H +ATOM 3525 OH2 TIP3X 346 -26.935 -16.664 2.158 1.00 0.00 W1 O +ATOM 3526 H1 TIP3X 346 -27.164 -16.304 1.301 1.00 0.00 W1 H +ATOM 3527 H2 TIP3X 346 -27.348 -17.527 2.174 1.00 0.00 W1 H +ATOM 3528 OH2 TIP3X 347 -28.160 -21.431 0.656 1.00 0.00 W1 O +ATOM 3529 H1 TIP3X 347 -28.976 -21.721 0.248 1.00 0.00 W1 H +ATOM 3530 H2 TIP3X 347 -27.628 -22.225 0.718 1.00 0.00 W1 H +ATOM 3531 OH2 TIP3X 348 -26.742 -20.592 13.731 1.00 0.00 W1 O +ATOM 3532 H1 TIP3X 348 -27.315 -19.990 13.257 1.00 0.00 W1 H +ATOM 3533 H2 TIP3X 348 -27.216 -20.788 14.539 1.00 0.00 W1 H +ATOM 3534 OH2 TIP3X 349 -23.666 -15.849 11.422 1.00 0.00 W1 O +ATOM 3535 H1 TIP3X 349 -23.349 -16.143 12.275 1.00 0.00 W1 H +ATOM 3536 H2 TIP3X 349 -23.233 -16.426 10.793 1.00 0.00 W1 H +ATOM 3537 OH2 TIP3X 350 -18.960 -15.607 5.555 1.00 0.00 W1 O +ATOM 3538 H1 TIP3X 350 -19.373 -16.298 5.037 1.00 0.00 W1 H +ATOM 3539 H2 TIP3X 350 -19.156 -14.800 5.079 1.00 0.00 W1 H +ATOM 3540 OH2 TIP3X 351 -22.382 -18.925 2.807 1.00 0.00 W1 O +ATOM 3541 H1 TIP3X 351 -22.123 -18.139 2.325 1.00 0.00 W1 H +ATOM 3542 H2 TIP3X 351 -22.952 -18.601 3.505 1.00 0.00 W1 H +ATOM 3543 OH2 TIP3X 352 -22.365 -23.770 1.878 1.00 0.00 W1 O +ATOM 3544 H1 TIP3X 352 -21.542 -23.697 1.396 1.00 0.00 W1 H +ATOM 3545 H2 TIP3X 352 -22.358 -23.026 2.480 1.00 0.00 W1 H +ATOM 3546 OH2 TIP3X 353 -18.964 -29.047 11.670 1.00 0.00 W1 O +ATOM 3547 H1 TIP3X 353 -18.159 -29.277 11.206 1.00 0.00 W1 H +ATOM 3548 H2 TIP3X 353 -18.673 -28.494 12.395 1.00 0.00 W1 H +ATOM 3549 OH2 TIP3X 354 -30.999 -21.945 3.076 1.00 0.00 W1 O +ATOM 3550 H1 TIP3X 354 -31.152 -21.853 2.136 1.00 0.00 W1 H +ATOM 3551 H2 TIP3X 354 -30.045 -21.945 3.165 1.00 0.00 W1 H +ATOM 3552 OH2 TIP3X 355 -20.237 -22.357 9.672 1.00 0.00 W1 O +ATOM 3553 H1 TIP3X 355 -19.691 -21.696 10.098 1.00 0.00 W1 H +ATOM 3554 H2 TIP3X 355 -19.778 -22.558 8.856 1.00 0.00 W1 H +ATOM 3555 OH2 TIP3X 356 -21.414 -17.384 0.749 1.00 0.00 W1 O +ATOM 3556 H1 TIP3X 356 -20.590 -17.348 1.234 1.00 0.00 W1 H +ATOM 3557 H2 TIP3X 356 -21.211 -17.896 -0.033 1.00 0.00 W1 H +ATOM 3558 OH2 TIP3X 357 -21.422 -19.596 12.400 1.00 0.00 W1 O +ATOM 3559 H1 TIP3X 357 -22.243 -19.349 12.826 1.00 0.00 W1 H +ATOM 3560 H2 TIP3X 357 -21.651 -19.692 11.476 1.00 0.00 W1 H +ATOM 3561 OH2 TIP3X 358 -24.797 -19.371 4.287 1.00 0.00 W1 O +ATOM 3562 H1 TIP3X 358 -25.504 -19.224 3.659 1.00 0.00 W1 H +ATOM 3563 H2 TIP3X 358 -25.134 -19.027 5.114 1.00 0.00 W1 H +ATOM 3564 OH2 TIP3X 359 -28.232 -18.459 12.998 1.00 0.00 W1 O +ATOM 3565 H1 TIP3X 359 -27.498 -17.848 12.933 1.00 0.00 W1 H +ATOM 3566 H2 TIP3X 359 -28.544 -18.365 13.898 1.00 0.00 W1 H +ATOM 3567 OH2 TIP3X 360 -28.642 -16.755 7.100 1.00 0.00 W1 O +ATOM 3568 H1 TIP3X 360 -29.228 -17.496 6.946 1.00 0.00 W1 H +ATOM 3569 H2 TIP3X 360 -28.199 -16.621 6.261 1.00 0.00 W1 H +ATOM 3570 OH2 TIP3X 361 -20.289 -30.741 8.180 1.00 0.00 W1 O +ATOM 3571 H1 TIP3X 361 -19.956 -30.816 7.286 1.00 0.00 W1 H +ATOM 3572 H2 TIP3X 361 -20.334 -29.799 8.341 1.00 0.00 W1 H +ATOM 3573 OH2 TIP3X 362 -23.051 -28.612 8.415 1.00 0.00 W1 O +ATOM 3574 H1 TIP3X 362 -23.413 -28.123 7.676 1.00 0.00 W1 H +ATOM 3575 H2 TIP3X 362 -23.782 -28.702 9.025 1.00 0.00 W1 H +ATOM 3576 OH2 TIP3X 363 -24.332 -30.628 2.343 1.00 0.00 W1 O +ATOM 3577 H1 TIP3X 363 -23.476 -30.883 2.688 1.00 0.00 W1 H +ATOM 3578 H2 TIP3X 363 -24.850 -31.432 2.368 1.00 0.00 W1 H +ATOM 3579 OH2 TIP3X 364 -21.580 -30.784 3.386 1.00 0.00 W1 O +ATOM 3580 H1 TIP3X 364 -21.124 -31.520 3.795 1.00 0.00 W1 H +ATOM 3581 H2 TIP3X 364 -21.173 -30.698 2.524 1.00 0.00 W1 H +ATOM 3582 OH2 TIP3X 365 -26.941 -16.206 14.841 1.00 0.00 W1 O +ATOM 3583 H1 TIP3X 365 -27.191 -15.449 14.311 1.00 0.00 W1 H +ATOM 3584 H2 TIP3X 365 -26.030 -16.375 14.602 1.00 0.00 W1 H +ATOM 3585 OH2 TIP3X 366 -21.934 -17.511 5.141 1.00 0.00 W1 O +ATOM 3586 H1 TIP3X 366 -21.273 -18.153 5.401 1.00 0.00 W1 H +ATOM 3587 H2 TIP3X 366 -21.947 -16.877 5.858 1.00 0.00 W1 H +ATOM 3588 OH2 TIP3X 367 -24.195 -16.609 14.051 1.00 0.00 W1 O +ATOM 3589 H1 TIP3X 367 -23.977 -17.501 14.321 1.00 0.00 W1 H +ATOM 3590 H2 TIP3X 367 -23.587 -16.055 14.540 1.00 0.00 W1 H +ATOM 3591 OH2 TIP3X 368 -25.248 -28.491 4.095 1.00 0.00 W1 O +ATOM 3592 H1 TIP3X 368 -24.591 -29.150 3.873 1.00 0.00 W1 H +ATOM 3593 H2 TIP3X 368 -25.206 -28.422 5.049 1.00 0.00 W1 H +ATOM 3594 OH2 TIP3X 369 -30.535 -30.152 13.551 1.00 0.00 W1 O +ATOM 3595 H1 TIP3X 369 -29.787 -30.348 12.987 1.00 0.00 W1 H +ATOM 3596 H2 TIP3X 369 -30.327 -30.578 14.383 1.00 0.00 W1 H +ATOM 3597 OH2 TIP3X 370 -19.415 -17.425 3.153 1.00 0.00 W1 O +ATOM 3598 H1 TIP3X 370 -19.271 -18.365 3.256 1.00 0.00 W1 H +ATOM 3599 H2 TIP3X 370 -18.592 -17.093 2.795 1.00 0.00 W1 H +ATOM 3600 OH2 TIP3X 371 -17.748 -30.659 14.380 1.00 0.00 W1 O +ATOM 3601 H1 TIP3X 371 -18.361 -30.585 13.649 1.00 0.00 W1 H +ATOM 3602 H2 TIP3X 371 -16.978 -30.164 14.098 1.00 0.00 W1 H +ATOM 3603 OH2 TIP3X 372 -26.954 -16.446 4.866 1.00 0.00 W1 O +ATOM 3604 H1 TIP3X 372 -26.961 -16.401 3.910 1.00 0.00 W1 H +ATOM 3605 H2 TIP3X 372 -26.147 -16.000 5.122 1.00 0.00 W1 H +ATOM 3606 OH2 TIP3X 373 -16.045 -17.507 12.816 1.00 0.00 W1 O +ATOM 3607 H1 TIP3X 373 -16.768 -16.956 13.117 1.00 0.00 W1 H +ATOM 3608 H2 TIP3X 373 -15.257 -17.008 13.030 1.00 0.00 W1 H +ATOM 3609 OH2 TIP3X 374 -28.419 -28.185 4.496 1.00 0.00 W1 O +ATOM 3610 H1 TIP3X 374 -29.063 -27.797 3.903 1.00 0.00 W1 H +ATOM 3611 H2 TIP3X 374 -27.617 -27.688 4.338 1.00 0.00 W1 H +ATOM 3612 OH2 TIP3X 375 -26.991 -19.586 2.227 1.00 0.00 W1 O +ATOM 3613 H1 TIP3X 375 -27.030 -20.214 1.506 1.00 0.00 W1 H +ATOM 3614 H2 TIP3X 375 -27.710 -19.840 2.805 1.00 0.00 W1 H +ATOM 3615 OH2 TIP3X 376 -29.096 -20.058 19.866 1.00 0.00 W1 O +ATOM 3616 H1 TIP3X 376 -28.914 -20.134 20.803 1.00 0.00 W1 H +ATOM 3617 H2 TIP3X 376 -29.120 -19.116 19.702 1.00 0.00 W1 H +ATOM 3618 OH2 TIP3X 377 -17.994 -22.567 23.605 1.00 0.00 W1 O +ATOM 3619 H1 TIP3X 377 -17.759 -22.303 22.715 1.00 0.00 W1 H +ATOM 3620 H2 TIP3X 377 -17.165 -22.831 24.003 1.00 0.00 W1 H +ATOM 3621 OH2 TIP3X 378 -26.010 -22.844 19.583 1.00 0.00 W1 O +ATOM 3622 H1 TIP3X 378 -25.979 -21.934 19.880 1.00 0.00 W1 H +ATOM 3623 H2 TIP3X 378 -25.502 -23.327 20.235 1.00 0.00 W1 H +ATOM 3624 OH2 TIP3X 379 -18.206 -18.684 21.727 1.00 0.00 W1 O +ATOM 3625 H1 TIP3X 379 -18.481 -18.194 22.502 1.00 0.00 W1 H +ATOM 3626 H2 TIP3X 379 -18.732 -19.484 21.750 1.00 0.00 W1 H +ATOM 3627 OH2 TIP3X 380 -19.690 -20.241 18.770 1.00 0.00 W1 O +ATOM 3628 H1 TIP3X 380 -19.528 -20.470 17.855 1.00 0.00 W1 H +ATOM 3629 H2 TIP3X 380 -20.619 -20.012 18.799 1.00 0.00 W1 H +ATOM 3630 OH2 TIP3X 381 -15.842 -19.709 23.554 1.00 0.00 W1 O +ATOM 3631 H1 TIP3X 381 -16.394 -19.626 22.777 1.00 0.00 W1 H +ATOM 3632 H2 TIP3X 381 -16.453 -19.926 24.259 1.00 0.00 W1 H +ATOM 3633 OH2 TIP3X 382 -29.206 -18.445 26.005 1.00 0.00 W1 O +ATOM 3634 H1 TIP3X 382 -28.800 -18.242 26.848 1.00 0.00 W1 H +ATOM 3635 H2 TIP3X 382 -29.777 -19.191 26.188 1.00 0.00 W1 H +ATOM 3636 OH2 TIP3X 383 -21.831 -16.820 25.231 1.00 0.00 W1 O +ATOM 3637 H1 TIP3X 383 -21.530 -17.721 25.353 1.00 0.00 W1 H +ATOM 3638 H2 TIP3X 383 -21.205 -16.440 24.614 1.00 0.00 W1 H +ATOM 3639 OH2 TIP3X 384 -18.398 -16.863 25.111 1.00 0.00 W1 O +ATOM 3640 H1 TIP3X 384 -18.834 -16.040 24.892 1.00 0.00 W1 H +ATOM 3641 H2 TIP3X 384 -17.469 -16.638 25.161 1.00 0.00 W1 H +ATOM 3642 OH2 TIP3X 385 -25.950 -17.289 24.241 1.00 0.00 W1 O +ATOM 3643 H1 TIP3X 385 -25.595 -16.440 23.977 1.00 0.00 W1 H +ATOM 3644 H2 TIP3X 385 -26.885 -17.229 24.045 1.00 0.00 W1 H +ATOM 3645 OH2 TIP3X 386 -21.109 -25.396 23.142 1.00 0.00 W1 O +ATOM 3646 H1 TIP3X 386 -21.186 -26.206 22.638 1.00 0.00 W1 H +ATOM 3647 H2 TIP3X 386 -20.166 -25.257 23.230 1.00 0.00 W1 H +ATOM 3648 OH2 TIP3X 387 -25.086 -29.299 25.504 1.00 0.00 W1 O +ATOM 3649 H1 TIP3X 387 -24.828 -30.036 26.057 1.00 0.00 W1 H +ATOM 3650 H2 TIP3X 387 -25.762 -29.655 24.929 1.00 0.00 W1 H +ATOM 3651 OH2 TIP3X 388 -16.842 -28.294 21.927 1.00 0.00 W1 O +ATOM 3652 H1 TIP3X 388 -17.150 -27.956 22.768 1.00 0.00 W1 H +ATOM 3653 H2 TIP3X 388 -16.774 -29.240 22.059 1.00 0.00 W1 H +ATOM 3654 OH2 TIP3X 389 -18.244 -27.099 23.881 1.00 0.00 W1 O +ATOM 3655 H1 TIP3X 389 -17.669 -27.327 24.612 1.00 0.00 W1 H +ATOM 3656 H2 TIP3X 389 -19.119 -27.353 24.176 1.00 0.00 W1 H +ATOM 3657 OH2 TIP3X 390 -25.198 -25.974 25.252 1.00 0.00 W1 O +ATOM 3658 H1 TIP3X 390 -24.695 -26.677 25.664 1.00 0.00 W1 H +ATOM 3659 H2 TIP3X 390 -24.541 -25.332 24.986 1.00 0.00 W1 H +ATOM 3660 OH2 TIP3X 391 -17.721 -24.926 22.150 1.00 0.00 W1 O +ATOM 3661 H1 TIP3X 391 -17.680 -25.826 22.474 1.00 0.00 W1 H +ATOM 3662 H2 TIP3X 391 -17.839 -24.393 22.936 1.00 0.00 W1 H +ATOM 3663 OH2 TIP3X 392 -19.037 -28.283 20.018 1.00 0.00 W1 O +ATOM 3664 H1 TIP3X 392 -18.212 -28.098 20.467 1.00 0.00 W1 H +ATOM 3665 H2 TIP3X 392 -18.960 -27.828 19.179 1.00 0.00 W1 H +ATOM 3666 OH2 TIP3X 393 -22.854 -22.311 26.090 1.00 0.00 W1 O +ATOM 3667 H1 TIP3X 393 -21.977 -22.289 25.707 1.00 0.00 W1 H +ATOM 3668 H2 TIP3X 393 -23.119 -21.393 26.136 1.00 0.00 W1 H +ATOM 3669 OH2 TIP3X 394 -23.704 -19.763 25.900 1.00 0.00 W1 O +ATOM 3670 H1 TIP3X 394 -23.728 -19.536 24.970 1.00 0.00 W1 H +ATOM 3671 H2 TIP3X 394 -24.624 -19.817 26.158 1.00 0.00 W1 H +ATOM 3672 OH2 TIP3X 395 -28.841 -27.882 22.738 1.00 0.00 W1 O +ATOM 3673 H1 TIP3X 395 -29.166 -27.002 22.929 1.00 0.00 W1 H +ATOM 3674 H2 TIP3X 395 -28.964 -27.984 21.794 1.00 0.00 W1 H +ATOM 3675 OH2 TIP3X 396 -26.685 -24.324 22.750 1.00 0.00 W1 O +ATOM 3676 H1 TIP3X 396 -27.368 -24.774 22.253 1.00 0.00 W1 H +ATOM 3677 H2 TIP3X 396 -26.199 -25.028 23.182 1.00 0.00 W1 H +ATOM 3678 OH2 TIP3X 397 -20.629 -19.400 25.147 1.00 0.00 W1 O +ATOM 3679 H1 TIP3X 397 -20.871 -19.986 24.430 1.00 0.00 W1 H +ATOM 3680 H2 TIP3X 397 -19.679 -19.489 25.219 1.00 0.00 W1 H +ATOM 3681 OH2 TIP3X 398 -16.331 -15.765 21.927 1.00 0.00 W1 O +ATOM 3682 H1 TIP3X 398 -16.336 -16.233 22.762 1.00 0.00 W1 H +ATOM 3683 H2 TIP3X 398 -17.212 -15.894 21.574 1.00 0.00 W1 H +ATOM 3684 OH2 TIP3X 399 -24.459 -19.429 22.949 1.00 0.00 W1 O +ATOM 3685 H1 TIP3X 399 -25.031 -20.148 23.218 1.00 0.00 W1 H +ATOM 3686 H2 TIP3X 399 -24.920 -18.638 23.232 1.00 0.00 W1 H +ATOM 3687 OH2 TIP3X 400 -22.238 -28.977 27.520 1.00 0.00 W1 O +ATOM 3688 H1 TIP3X 400 -22.980 -28.498 27.887 1.00 0.00 W1 H +ATOM 3689 H2 TIP3X 400 -22.618 -29.789 27.185 1.00 0.00 W1 H +ATOM 3690 OH2 TIP3X 401 -26.886 -28.272 17.321 1.00 0.00 W1 O +ATOM 3691 H1 TIP3X 401 -26.984 -28.934 18.006 1.00 0.00 W1 H +ATOM 3692 H2 TIP3X 401 -27.069 -28.741 16.507 1.00 0.00 W1 H +ATOM 3693 OH2 TIP3X 402 -15.992 -27.350 25.511 1.00 0.00 W1 O +ATOM 3694 H1 TIP3X 402 -15.473 -26.682 25.063 1.00 0.00 W1 H +ATOM 3695 H2 TIP3X 402 -15.550 -27.475 26.351 1.00 0.00 W1 H +ATOM 3696 OH2 TIP3X 403 -29.934 -30.998 19.671 1.00 0.00 W1 O +ATOM 3697 H1 TIP3X 403 -29.209 -30.377 19.740 1.00 0.00 W1 H +ATOM 3698 H2 TIP3X 403 -30.306 -31.031 20.552 1.00 0.00 W1 H +ATOM 3699 OH2 TIP3X 404 -24.668 -24.762 29.657 1.00 0.00 W1 O +ATOM 3700 H1 TIP3X 404 -23.804 -24.364 29.556 1.00 0.00 W1 H +ATOM 3701 H2 TIP3X 404 -24.516 -25.699 29.534 1.00 0.00 W1 H +ATOM 3702 OH2 TIP3X 405 -21.502 -19.852 22.397 1.00 0.00 W1 O +ATOM 3703 H1 TIP3X 405 -21.408 -20.715 21.993 1.00 0.00 W1 H +ATOM 3704 H2 TIP3X 405 -22.435 -19.652 22.321 1.00 0.00 W1 H +ATOM 3705 OH2 TIP3X 406 -22.890 -21.568 19.928 1.00 0.00 W1 O +ATOM 3706 H1 TIP3X 406 -23.455 -22.182 20.397 1.00 0.00 W1 H +ATOM 3707 H2 TIP3X 406 -23.364 -20.737 19.956 1.00 0.00 W1 H +ATOM 3708 OH2 TIP3X 407 -30.352 -21.055 26.385 1.00 0.00 W1 O +ATOM 3709 H1 TIP3X 407 -30.887 -21.657 25.867 1.00 0.00 W1 H +ATOM 3710 H2 TIP3X 407 -30.823 -20.969 27.214 1.00 0.00 W1 H +ATOM 3711 OH2 TIP3X 408 -19.056 -22.034 20.752 1.00 0.00 W1 O +ATOM 3712 H1 TIP3X 408 -19.112 -22.949 20.476 1.00 0.00 W1 H +ATOM 3713 H2 TIP3X 408 -19.229 -21.532 19.956 1.00 0.00 W1 H +ATOM 3714 OH2 TIP3X 409 -18.759 -21.520 27.777 1.00 0.00 W1 O +ATOM 3715 H1 TIP3X 409 -19.662 -21.436 28.084 1.00 0.00 W1 H +ATOM 3716 H2 TIP3X 409 -18.591 -22.462 27.780 1.00 0.00 W1 H +ATOM 3717 OH2 TIP3X 410 -16.393 -23.561 25.582 1.00 0.00 W1 O +ATOM 3718 H1 TIP3X 410 -15.730 -24.241 25.463 1.00 0.00 W1 H +ATOM 3719 H2 TIP3X 410 -17.109 -24.000 26.041 1.00 0.00 W1 H +ATOM 3720 OH2 TIP3X 411 -27.248 -23.874 30.727 1.00 0.00 W1 O +ATOM 3721 H1 TIP3X 411 -27.777 -24.108 29.964 1.00 0.00 W1 H +ATOM 3722 H2 TIP3X 411 -26.353 -23.826 30.392 1.00 0.00 W1 H +ATOM 3723 OH2 TIP3X 412 -26.338 -20.668 26.288 1.00 0.00 W1 O +ATOM 3724 H1 TIP3X 412 -26.383 -21.223 27.067 1.00 0.00 W1 H +ATOM 3725 H2 TIP3X 412 -26.971 -19.969 26.454 1.00 0.00 W1 H +ATOM 3726 OH2 TIP3X 413 -17.666 -19.538 26.038 1.00 0.00 W1 O +ATOM 3727 H1 TIP3X 413 -17.243 -18.770 26.422 1.00 0.00 W1 H +ATOM 3728 H2 TIP3X 413 -17.970 -20.046 26.790 1.00 0.00 W1 H +ATOM 3729 OH2 TIP3X 414 -19.579 -17.562 27.863 1.00 0.00 W1 O +ATOM 3730 H1 TIP3X 414 -20.286 -18.191 27.720 1.00 0.00 W1 H +ATOM 3731 H2 TIP3X 414 -19.250 -17.368 26.985 1.00 0.00 W1 H +ATOM 3732 OH2 TIP3X 415 -19.328 -19.026 30.259 1.00 0.00 W1 O +ATOM 3733 H1 TIP3X 415 -19.961 -19.633 29.875 1.00 0.00 W1 H +ATOM 3734 H2 TIP3X 415 -19.214 -18.346 29.595 1.00 0.00 W1 H +ATOM 3735 OH2 TIP3X 416 -15.717 -17.118 24.326 1.00 0.00 W1 O +ATOM 3736 H1 TIP3X 416 -15.040 -17.276 24.982 1.00 0.00 W1 H +ATOM 3737 H2 TIP3X 416 -15.951 -17.989 24.007 1.00 0.00 W1 H +ATOM 3738 OH2 TIP3X 417 -25.161 -30.647 22.718 1.00 0.00 W1 O +ATOM 3739 H1 TIP3X 417 -25.453 -29.737 22.657 1.00 0.00 W1 H +ATOM 3740 H2 TIP3X 417 -24.329 -30.664 22.245 1.00 0.00 W1 H +ATOM 3741 OH2 TIP3X 418 -23.037 -20.700 16.373 1.00 0.00 W1 O +ATOM 3742 H1 TIP3X 418 -23.732 -21.322 16.587 1.00 0.00 W1 H +ATOM 3743 H2 TIP3X 418 -23.055 -20.064 17.088 1.00 0.00 W1 H +ATOM 3744 OH2 TIP3X 419 -15.657 -21.937 15.809 1.00 0.00 W1 O +ATOM 3745 H1 TIP3X 419 -15.920 -22.686 15.275 1.00 0.00 W1 H +ATOM 3746 H2 TIP3X 419 -15.911 -21.173 15.292 1.00 0.00 W1 H +ATOM 3747 OH2 TIP3X 420 -29.709 -18.240 15.526 1.00 0.00 W1 O +ATOM 3748 H1 TIP3X 420 -29.263 -18.789 16.172 1.00 0.00 W1 H +ATOM 3749 H2 TIP3X 420 -30.605 -18.574 15.505 1.00 0.00 W1 H +ATOM 3750 OH2 TIP3X 421 -17.615 -16.111 16.785 1.00 0.00 W1 O +ATOM 3751 H1 TIP3X 421 -16.730 -16.439 16.626 1.00 0.00 W1 H +ATOM 3752 H2 TIP3X 421 -17.845 -15.643 15.982 1.00 0.00 W1 H +ATOM 3753 OH2 TIP3X 422 -16.223 -20.449 28.862 1.00 0.00 W1 O +ATOM 3754 H1 TIP3X 422 -16.333 -19.500 28.921 1.00 0.00 W1 H +ATOM 3755 H2 TIP3X 422 -17.116 -20.794 28.852 1.00 0.00 W1 H +ATOM 3756 OH2 TIP3X 423 -29.537 -17.623 18.481 1.00 0.00 W1 O +ATOM 3757 H1 TIP3X 423 -29.605 -16.787 18.941 1.00 0.00 W1 H +ATOM 3758 H2 TIP3X 423 -30.432 -17.962 18.464 1.00 0.00 W1 H +ATOM 3759 OH2 TIP3X 424 -16.957 -19.130 16.125 1.00 0.00 W1 O +ATOM 3760 H1 TIP3X 424 -16.925 -19.210 17.079 1.00 0.00 W1 H +ATOM 3761 H2 TIP3X 424 -17.790 -18.693 15.948 1.00 0.00 W1 H +ATOM 3762 OH2 TIP3X 425 -20.586 -30.836 29.009 1.00 0.00 W1 O +ATOM 3763 H1 TIP3X 425 -20.893 -30.087 28.497 1.00 0.00 W1 H +ATOM 3764 H2 TIP3X 425 -20.532 -31.553 28.377 1.00 0.00 W1 H +ATOM 3765 OH2 TIP3X 426 -26.372 -16.919 27.038 1.00 0.00 W1 O +ATOM 3766 H1 TIP3X 426 -25.524 -16.681 27.412 1.00 0.00 W1 H +ATOM 3767 H2 TIP3X 426 -26.161 -17.299 26.185 1.00 0.00 W1 H +ATOM 3768 OH2 TIP3X 427 -27.906 -28.901 30.389 1.00 0.00 W1 O +ATOM 3769 H1 TIP3X 427 -28.783 -28.811 30.763 1.00 0.00 W1 H +ATOM 3770 H2 TIP3X 427 -27.843 -28.188 29.752 1.00 0.00 W1 H +ATOM 3771 OH2 TIP3X 428 -21.709 -26.954 16.119 1.00 0.00 W1 O +ATOM 3772 H1 TIP3X 428 -21.875 -26.657 15.224 1.00 0.00 W1 H +ATOM 3773 H2 TIP3X 428 -22.580 -27.077 16.496 1.00 0.00 W1 H +ATOM 3774 OH2 TIP3X 429 -16.311 -19.193 19.167 1.00 0.00 W1 O +ATOM 3775 H1 TIP3X 429 -15.738 -19.930 19.380 1.00 0.00 W1 H +ATOM 3776 H2 TIP3X 429 -16.642 -18.894 20.014 1.00 0.00 W1 H +ATOM 3777 OH2 TIP3X 430 -21.050 -30.157 16.096 1.00 0.00 W1 O +ATOM 3778 H1 TIP3X 430 -20.318 -29.541 16.121 1.00 0.00 W1 H +ATOM 3779 H2 TIP3X 430 -20.809 -30.790 15.420 1.00 0.00 W1 H +ATOM 3780 OH2 TIP3X 431 -16.518 -30.064 26.361 1.00 0.00 W1 O +ATOM 3781 H1 TIP3X 431 -16.026 -30.693 26.889 1.00 0.00 W1 H +ATOM 3782 H2 TIP3X 431 -15.918 -29.821 25.656 1.00 0.00 W1 H +ATOM 3783 OH2 TIP3X 432 -29.011 -20.843 22.439 1.00 0.00 W1 O +ATOM 3784 H1 TIP3X 432 -29.679 -20.520 23.044 1.00 0.00 W1 H +ATOM 3785 H2 TIP3X 432 -28.219 -20.913 22.971 1.00 0.00 W1 H +ATOM 3786 OH2 TIP3X 433 -24.014 -19.424 29.549 1.00 0.00 W1 O +ATOM 3787 H1 TIP3X 433 -23.790 -19.802 30.400 1.00 0.00 W1 H +ATOM 3788 H2 TIP3X 433 -24.621 -20.053 29.159 1.00 0.00 W1 H +ATOM 3789 OH2 TIP3X 434 -20.535 -28.119 24.962 1.00 0.00 W1 O +ATOM 3790 H1 TIP3X 434 -20.476 -28.301 25.900 1.00 0.00 W1 H +ATOM 3791 H2 TIP3X 434 -21.473 -28.032 24.794 1.00 0.00 W1 H +ATOM 3792 OH2 TIP3X 435 -24.343 -27.463 29.141 1.00 0.00 W1 O +ATOM 3793 H1 TIP3X 435 -25.210 -27.533 28.741 1.00 0.00 W1 H +ATOM 3794 H2 TIP3X 435 -24.398 -28.003 29.929 1.00 0.00 W1 H +ATOM 3795 OH2 TIP3X 436 -16.857 -24.742 30.894 1.00 0.00 W1 O +ATOM 3796 H1 TIP3X 436 -16.063 -25.276 30.878 1.00 0.00 W1 H +ATOM 3797 H2 TIP3X 436 -17.151 -24.777 31.804 1.00 0.00 W1 H +ATOM 3798 OH2 TIP3X 437 -28.672 -30.875 26.813 1.00 0.00 W1 O +ATOM 3799 H1 TIP3X 437 -28.898 -30.422 26.000 1.00 0.00 W1 H +ATOM 3800 H2 TIP3X 437 -27.842 -31.312 26.621 1.00 0.00 W1 H +ATOM 3801 OH2 TIP3X 438 -22.577 -30.418 21.894 1.00 0.00 W1 O +ATOM 3802 H1 TIP3X 438 -22.095 -29.904 21.247 1.00 0.00 W1 H +ATOM 3803 H2 TIP3X 438 -22.233 -30.124 22.738 1.00 0.00 W1 H +ATOM 3804 OH2 TIP3X 439 -28.107 -25.826 17.047 1.00 0.00 W1 O +ATOM 3805 H1 TIP3X 439 -27.685 -25.180 16.481 1.00 0.00 W1 H +ATOM 3806 H2 TIP3X 439 -27.395 -26.401 17.328 1.00 0.00 W1 H +ATOM 3807 OH2 TIP3X 440 -27.583 -25.170 26.358 1.00 0.00 W1 O +ATOM 3808 H1 TIP3X 440 -27.667 -24.378 26.890 1.00 0.00 W1 H +ATOM 3809 H2 TIP3X 440 -26.668 -25.174 26.078 1.00 0.00 W1 H +ATOM 3810 OH2 TIP3X 441 -28.400 -24.451 19.544 1.00 0.00 W1 O +ATOM 3811 H1 TIP3X 441 -28.337 -24.740 18.633 1.00 0.00 W1 H +ATOM 3812 H2 TIP3X 441 -27.625 -23.906 19.677 1.00 0.00 W1 H +ATOM 3813 OH2 TIP3X 442 -19.380 -27.882 17.304 1.00 0.00 W1 O +ATOM 3814 H1 TIP3X 442 -20.087 -27.393 16.884 1.00 0.00 W1 H +ATOM 3815 H2 TIP3X 442 -18.655 -27.838 16.680 1.00 0.00 W1 H +ATOM 3816 OH2 TIP3X 443 -30.829 -26.995 28.392 1.00 0.00 W1 O +ATOM 3817 H1 TIP3X 443 -31.734 -26.701 28.503 1.00 0.00 W1 H +ATOM 3818 H2 TIP3X 443 -30.689 -27.614 29.108 1.00 0.00 W1 H +ATOM 3819 OH2 TIP3X 444 -29.686 -30.158 24.374 1.00 0.00 W1 O +ATOM 3820 H1 TIP3X 444 -29.579 -30.859 23.732 1.00 0.00 W1 H +ATOM 3821 H2 TIP3X 444 -29.550 -29.352 23.875 1.00 0.00 W1 H +ATOM 3822 OH2 TIP3X 445 -18.164 -26.530 29.262 1.00 0.00 W1 O +ATOM 3823 H1 TIP3X 445 -17.853 -25.951 29.958 1.00 0.00 W1 H +ATOM 3824 H2 TIP3X 445 -19.108 -26.594 29.407 1.00 0.00 W1 H +ATOM 3825 OH2 TIP3X 446 -21.121 -26.524 29.209 1.00 0.00 W1 O +ATOM 3826 H1 TIP3X 446 -21.481 -25.956 28.528 1.00 0.00 W1 H +ATOM 3827 H2 TIP3X 446 -21.459 -27.394 28.998 1.00 0.00 W1 H +ATOM 3828 OH2 TIP3X 447 -22.918 -26.055 19.074 1.00 0.00 W1 O +ATOM 3829 H1 TIP3X 447 -22.829 -25.475 18.318 1.00 0.00 W1 H +ATOM 3830 H2 TIP3X 447 -23.688 -26.589 18.878 1.00 0.00 W1 H +ATOM 3831 OH2 TIP3X 448 -24.615 -26.723 16.762 1.00 0.00 W1 O +ATOM 3832 H1 TIP3X 448 -25.053 -26.531 15.932 1.00 0.00 W1 H +ATOM 3833 H2 TIP3X 448 -25.022 -27.534 17.065 1.00 0.00 W1 H +ATOM 3834 OH2 TIP3X 449 -23.905 -29.661 30.551 1.00 0.00 W1 O +ATOM 3835 H1 TIP3X 449 -24.371 -30.048 31.291 1.00 0.00 W1 H +ATOM 3836 H2 TIP3X 449 -22.991 -29.629 30.833 1.00 0.00 W1 H +ATOM 3837 OH2 TIP3X 450 -18.342 -24.317 27.232 1.00 0.00 W1 O +ATOM 3838 H1 TIP3X 450 -18.322 -24.966 27.935 1.00 0.00 W1 H +ATOM 3839 H2 TIP3X 450 -19.176 -24.468 26.788 1.00 0.00 W1 H +ATOM 3840 OH2 TIP3X 451 -30.267 -27.216 15.702 1.00 0.00 W1 O +ATOM 3841 H1 TIP3X 451 -31.023 -27.409 16.256 1.00 0.00 W1 H +ATOM 3842 H2 TIP3X 451 -29.733 -26.618 16.224 1.00 0.00 W1 H +ATOM 3843 OH2 TIP3X 452 -30.348 -15.723 16.189 1.00 0.00 W1 O +ATOM 3844 H1 TIP3X 452 -29.932 -16.470 16.618 1.00 0.00 W1 H +ATOM 3845 H2 TIP3X 452 -30.335 -15.029 16.848 1.00 0.00 W1 H +ATOM 3846 OH2 TIP3X 453 -21.600 -27.563 21.182 1.00 0.00 W1 O +ATOM 3847 H1 TIP3X 453 -21.937 -27.212 20.357 1.00 0.00 W1 H +ATOM 3848 H2 TIP3X 453 -20.703 -27.830 20.980 1.00 0.00 W1 H +ATOM 3849 OH2 TIP3X 454 -26.145 -28.252 22.926 1.00 0.00 W1 O +ATOM 3850 H1 TIP3X 454 -27.087 -28.299 22.767 1.00 0.00 W1 H +ATOM 3851 H2 TIP3X 454 -26.006 -27.378 23.289 1.00 0.00 W1 H +ATOM 3852 OH2 TIP3X 455 -30.783 -27.126 19.719 1.00 0.00 W1 O +ATOM 3853 H1 TIP3X 455 -31.057 -27.251 20.628 1.00 0.00 W1 H +ATOM 3854 H2 TIP3X 455 -30.977 -26.208 19.533 1.00 0.00 W1 H +ATOM 3855 OH2 TIP3X 456 -26.782 -27.799 27.779 1.00 0.00 W1 O +ATOM 3856 H1 TIP3X 456 -26.760 -28.605 27.264 1.00 0.00 W1 H +ATOM 3857 H2 TIP3X 456 -27.176 -27.151 27.195 1.00 0.00 W1 H +ATOM 3858 OH2 TIP3X 457 -26.199 -21.264 23.584 1.00 0.00 W1 O +ATOM 3859 H1 TIP3X 457 -26.271 -22.199 23.397 1.00 0.00 W1 H +ATOM 3860 H2 TIP3X 457 -26.195 -21.210 24.540 1.00 0.00 W1 H +ATOM 3861 OH2 TIP3X 458 -22.010 -24.245 28.147 1.00 0.00 W1 O +ATOM 3862 H1 TIP3X 458 -21.598 -23.413 28.383 1.00 0.00 W1 H +ATOM 3863 H2 TIP3X 458 -22.560 -24.034 27.392 1.00 0.00 W1 H +ATOM 3864 OH2 TIP3X 459 -16.215 -28.878 17.471 1.00 0.00 W1 O +ATOM 3865 H1 TIP3X 459 -15.780 -28.651 18.293 1.00 0.00 W1 H +ATOM 3866 H2 TIP3X 459 -16.735 -29.654 17.681 1.00 0.00 W1 H +ATOM 3867 OH2 TIP3X 460 -25.060 -22.918 16.649 1.00 0.00 W1 O +ATOM 3868 H1 TIP3X 460 -25.349 -23.040 17.554 1.00 0.00 W1 H +ATOM 3869 H2 TIP3X 460 -24.371 -23.572 16.528 1.00 0.00 W1 H +ATOM 3870 OH2 TIP3X 461 -18.357 -24.402 17.717 1.00 0.00 W1 O +ATOM 3871 H1 TIP3X 461 -19.222 -24.601 18.076 1.00 0.00 W1 H +ATOM 3872 H2 TIP3X 461 -17.800 -24.281 18.486 1.00 0.00 W1 H +ATOM 3873 OH2 TIP3X 462 -23.524 -24.148 24.188 1.00 0.00 W1 O +ATOM 3874 H1 TIP3X 462 -23.427 -23.351 24.709 1.00 0.00 W1 H +ATOM 3875 H2 TIP3X 462 -22.649 -24.538 24.179 1.00 0.00 W1 H +ATOM 3876 OH2 TIP3X 463 -23.778 -23.766 21.104 1.00 0.00 W1 O +ATOM 3877 H1 TIP3X 463 -23.157 -24.363 20.686 1.00 0.00 W1 H +ATOM 3878 H2 TIP3X 463 -23.753 -24.004 22.030 1.00 0.00 W1 H +ATOM 3879 OH2 TIP3X 464 -20.884 -22.151 30.039 1.00 0.00 W1 O +ATOM 3880 H1 TIP3X 464 -21.562 -21.867 30.653 1.00 0.00 W1 H +ATOM 3881 H2 TIP3X 464 -20.086 -22.191 30.566 1.00 0.00 W1 H +ATOM 3882 OH2 TIP3X 465 -28.374 -22.735 27.736 1.00 0.00 W1 O +ATOM 3883 H1 TIP3X 465 -27.857 -22.330 28.432 1.00 0.00 W1 H +ATOM 3884 H2 TIP3X 465 -28.757 -21.998 27.260 1.00 0.00 W1 H +ATOM 3885 OH2 TIP3X 466 -29.468 -24.773 29.357 1.00 0.00 W1 O +ATOM 3886 H1 TIP3X 466 -29.672 -25.613 28.945 1.00 0.00 W1 H +ATOM 3887 H2 TIP3X 466 -29.591 -24.127 28.662 1.00 0.00 W1 H +ATOM 3888 OH2 TIP3X 467 -29.575 -23.900 22.181 1.00 0.00 W1 O +ATOM 3889 H1 TIP3X 467 -29.219 -23.028 22.011 1.00 0.00 W1 H +ATOM 3890 H2 TIP3X 467 -29.677 -24.291 21.313 1.00 0.00 W1 H +ATOM 3891 OH2 TIP3X 468 -18.816 -21.635 16.367 1.00 0.00 W1 O +ATOM 3892 H1 TIP3X 468 -18.111 -21.137 15.955 1.00 0.00 W1 H +ATOM 3893 H2 TIP3X 468 -18.367 -22.266 16.931 1.00 0.00 W1 H +ATOM 3894 OH2 TIP3X 469 -16.220 -24.288 19.730 1.00 0.00 W1 O +ATOM 3895 H1 TIP3X 469 -16.507 -24.115 20.626 1.00 0.00 W1 H +ATOM 3896 H2 TIP3X 469 -15.707 -23.516 19.489 1.00 0.00 W1 H +ATOM 3897 OH2 TIP3X 470 -29.722 -25.171 24.452 1.00 0.00 W1 O +ATOM 3898 H1 TIP3X 470 -29.628 -24.493 23.783 1.00 0.00 W1 H +ATOM 3899 H2 TIP3X 470 -29.064 -24.952 25.111 1.00 0.00 W1 H +ATOM 3900 OH2 TIP3X 471 -26.935 -16.664 17.715 1.00 0.00 W1 O +ATOM 3901 H1 TIP3X 471 -27.164 -16.304 16.859 1.00 0.00 W1 H +ATOM 3902 H2 TIP3X 471 -27.348 -17.527 17.731 1.00 0.00 W1 H +ATOM 3903 OH2 TIP3X 472 -28.160 -21.431 16.214 1.00 0.00 W1 O +ATOM 3904 H1 TIP3X 472 -28.976 -21.721 15.805 1.00 0.00 W1 H +ATOM 3905 H2 TIP3X 472 -27.628 -22.225 16.275 1.00 0.00 W1 H +ATOM 3906 OH2 TIP3X 473 -26.742 -20.592 29.288 1.00 0.00 W1 O +ATOM 3907 H1 TIP3X 473 -27.315 -19.990 28.814 1.00 0.00 W1 H +ATOM 3908 H2 TIP3X 473 -27.216 -20.788 30.096 1.00 0.00 W1 H +ATOM 3909 OH2 TIP3X 474 -23.666 -15.849 26.979 1.00 0.00 W1 O +ATOM 3910 H1 TIP3X 474 -23.349 -16.143 27.833 1.00 0.00 W1 H +ATOM 3911 H2 TIP3X 474 -23.233 -16.426 26.350 1.00 0.00 W1 H +ATOM 3912 OH2 TIP3X 475 -18.960 -15.607 21.113 1.00 0.00 W1 O +ATOM 3913 H1 TIP3X 475 -19.373 -16.298 20.594 1.00 0.00 W1 H +ATOM 3914 H2 TIP3X 475 -19.156 -14.800 20.636 1.00 0.00 W1 H +ATOM 3915 OH2 TIP3X 476 -22.382 -18.925 18.365 1.00 0.00 W1 O +ATOM 3916 H1 TIP3X 476 -22.123 -18.139 17.883 1.00 0.00 W1 H +ATOM 3917 H2 TIP3X 476 -22.952 -18.601 19.063 1.00 0.00 W1 H +ATOM 3918 OH2 TIP3X 477 -22.365 -23.770 17.436 1.00 0.00 W1 O +ATOM 3919 H1 TIP3X 477 -21.542 -23.697 16.953 1.00 0.00 W1 H +ATOM 3920 H2 TIP3X 477 -22.358 -23.026 18.038 1.00 0.00 W1 H +ATOM 3921 OH2 TIP3X 478 -18.964 -29.047 27.227 1.00 0.00 W1 O +ATOM 3922 H1 TIP3X 478 -18.159 -29.277 26.763 1.00 0.00 W1 H +ATOM 3923 H2 TIP3X 478 -18.673 -28.494 27.952 1.00 0.00 W1 H +ATOM 3924 OH2 TIP3X 479 -30.999 -21.945 18.633 1.00 0.00 W1 O +ATOM 3925 H1 TIP3X 479 -31.152 -21.853 17.693 1.00 0.00 W1 H +ATOM 3926 H2 TIP3X 479 -30.045 -21.945 18.722 1.00 0.00 W1 H +ATOM 3927 OH2 TIP3X 480 -20.237 -22.357 25.229 1.00 0.00 W1 O +ATOM 3928 H1 TIP3X 480 -19.691 -21.696 25.655 1.00 0.00 W1 H +ATOM 3929 H2 TIP3X 480 -19.778 -22.558 24.414 1.00 0.00 W1 H +ATOM 3930 OH2 TIP3X 481 -21.414 -17.384 16.307 1.00 0.00 W1 O +ATOM 3931 H1 TIP3X 481 -20.590 -17.348 16.791 1.00 0.00 W1 H +ATOM 3932 H2 TIP3X 481 -21.211 -17.896 15.524 1.00 0.00 W1 H +ATOM 3933 OH2 TIP3X 482 -21.422 -19.596 27.958 1.00 0.00 W1 O +ATOM 3934 H1 TIP3X 482 -22.243 -19.349 28.384 1.00 0.00 W1 H +ATOM 3935 H2 TIP3X 482 -21.651 -19.692 27.033 1.00 0.00 W1 H +ATOM 3936 OH2 TIP3X 483 -24.797 -19.371 19.844 1.00 0.00 W1 O +ATOM 3937 H1 TIP3X 483 -25.504 -19.224 19.216 1.00 0.00 W1 H +ATOM 3938 H2 TIP3X 483 -25.134 -19.027 20.671 1.00 0.00 W1 H +ATOM 3939 OH2 TIP3X 484 -28.232 -18.459 28.555 1.00 0.00 W1 O +ATOM 3940 H1 TIP3X 484 -27.498 -17.848 28.491 1.00 0.00 W1 H +ATOM 3941 H2 TIP3X 484 -28.544 -18.365 29.455 1.00 0.00 W1 H +ATOM 3942 OH2 TIP3X 485 -28.642 -16.755 22.657 1.00 0.00 W1 O +ATOM 3943 H1 TIP3X 485 -29.228 -17.496 22.503 1.00 0.00 W1 H +ATOM 3944 H2 TIP3X 485 -28.199 -16.621 21.819 1.00 0.00 W1 H +ATOM 3945 OH2 TIP3X 486 -20.289 -30.741 23.738 1.00 0.00 W1 O +ATOM 3946 H1 TIP3X 486 -19.956 -30.816 22.843 1.00 0.00 W1 H +ATOM 3947 H2 TIP3X 486 -20.334 -29.799 23.899 1.00 0.00 W1 H +ATOM 3948 OH2 TIP3X 487 -23.051 -28.612 23.972 1.00 0.00 W1 O +ATOM 3949 H1 TIP3X 487 -23.413 -28.123 23.233 1.00 0.00 W1 H +ATOM 3950 H2 TIP3X 487 -23.782 -28.702 24.582 1.00 0.00 W1 H +ATOM 3951 OH2 TIP3X 488 -24.332 -30.628 17.900 1.00 0.00 W1 O +ATOM 3952 H1 TIP3X 488 -23.476 -30.883 18.245 1.00 0.00 W1 H +ATOM 3953 H2 TIP3X 488 -24.850 -31.432 17.925 1.00 0.00 W1 H +ATOM 3954 OH2 TIP3X 489 -21.580 -30.784 18.944 1.00 0.00 W1 O +ATOM 3955 H1 TIP3X 489 -21.124 -31.520 19.352 1.00 0.00 W1 H +ATOM 3956 H2 TIP3X 489 -21.173 -30.698 18.082 1.00 0.00 W1 H +ATOM 3957 OH2 TIP3X 490 -26.941 -16.206 30.398 1.00 0.00 W1 O +ATOM 3958 H1 TIP3X 490 -27.191 -15.449 29.869 1.00 0.00 W1 H +ATOM 3959 H2 TIP3X 490 -26.030 -16.375 30.159 1.00 0.00 W1 H +ATOM 3960 OH2 TIP3X 491 -21.934 -17.511 20.699 1.00 0.00 W1 O +ATOM 3961 H1 TIP3X 491 -21.273 -18.153 20.959 1.00 0.00 W1 H +ATOM 3962 H2 TIP3X 491 -21.947 -16.877 21.415 1.00 0.00 W1 H +ATOM 3963 OH2 TIP3X 492 -24.195 -16.609 29.608 1.00 0.00 W1 O +ATOM 3964 H1 TIP3X 492 -23.977 -17.501 29.879 1.00 0.00 W1 H +ATOM 3965 H2 TIP3X 492 -23.587 -16.055 30.098 1.00 0.00 W1 H +ATOM 3966 OH2 TIP3X 493 -25.248 -28.491 19.653 1.00 0.00 W1 O +ATOM 3967 H1 TIP3X 493 -24.591 -29.150 19.430 1.00 0.00 W1 H +ATOM 3968 H2 TIP3X 493 -25.206 -28.422 20.607 1.00 0.00 W1 H +ATOM 3969 OH2 TIP3X 494 -30.535 -30.152 29.109 1.00 0.00 W1 O +ATOM 3970 H1 TIP3X 494 -29.787 -30.348 28.545 1.00 0.00 W1 H +ATOM 3971 H2 TIP3X 494 -30.327 -30.578 29.940 1.00 0.00 W1 H +ATOM 3972 OH2 TIP3X 495 -19.415 -17.425 18.710 1.00 0.00 W1 O +ATOM 3973 H1 TIP3X 495 -19.271 -18.365 18.813 1.00 0.00 W1 H +ATOM 3974 H2 TIP3X 495 -18.592 -17.093 18.353 1.00 0.00 W1 H +ATOM 3975 OH2 TIP3X 496 -17.748 -30.659 29.937 1.00 0.00 W1 O +ATOM 3976 H1 TIP3X 496 -18.361 -30.585 29.207 1.00 0.00 W1 H +ATOM 3977 H2 TIP3X 496 -16.978 -30.164 29.656 1.00 0.00 W1 H +ATOM 3978 OH2 TIP3X 497 -26.954 -16.446 20.424 1.00 0.00 W1 O +ATOM 3979 H1 TIP3X 497 -26.961 -16.401 19.468 1.00 0.00 W1 H +ATOM 3980 H2 TIP3X 497 -26.147 -16.000 20.680 1.00 0.00 W1 H +ATOM 3981 OH2 TIP3X 498 -16.045 -17.507 28.373 1.00 0.00 W1 O +ATOM 3982 H1 TIP3X 498 -16.768 -16.956 28.674 1.00 0.00 W1 H +ATOM 3983 H2 TIP3X 498 -15.257 -17.008 28.587 1.00 0.00 W1 H +ATOM 3984 OH2 TIP3X 499 -28.419 -28.185 20.053 1.00 0.00 W1 O +ATOM 3985 H1 TIP3X 499 -29.063 -27.797 19.461 1.00 0.00 W1 H +ATOM 3986 H2 TIP3X 499 -27.617 -27.688 19.895 1.00 0.00 W1 H +ATOM 3987 OH2 TIP3X 500 -26.991 -19.586 17.785 1.00 0.00 W1 O +ATOM 3988 H1 TIP3X 500 -27.030 -20.214 17.063 1.00 0.00 W1 H +ATOM 3989 H2 TIP3X 500 -27.710 -19.840 18.363 1.00 0.00 W1 H +ATOM 3990 OH2 TIP3X 501 -29.096 -4.501 -26.806 1.00 0.00 W1 O +ATOM 3991 H1 TIP3X 501 -28.914 -4.577 -25.869 1.00 0.00 W1 H +ATOM 3992 H2 TIP3X 501 -29.120 -3.558 -26.970 1.00 0.00 W1 H +ATOM 3993 OH2 TIP3X 502 -17.994 -7.010 -23.068 1.00 0.00 W1 O +ATOM 3994 H1 TIP3X 502 -17.759 -6.745 -23.957 1.00 0.00 W1 H +ATOM 3995 H2 TIP3X 502 -17.165 -7.273 -22.669 1.00 0.00 W1 H +ATOM 3996 OH2 TIP3X 503 -26.010 -7.286 -27.089 1.00 0.00 W1 O +ATOM 3997 H1 TIP3X 503 -25.979 -6.377 -26.792 1.00 0.00 W1 H +ATOM 3998 H2 TIP3X 503 -25.502 -7.769 -26.437 1.00 0.00 W1 H +ATOM 3999 OH2 TIP3X 504 -18.206 -3.127 -24.946 1.00 0.00 W1 O +ATOM 4000 H1 TIP3X 504 -18.481 -2.637 -24.171 1.00 0.00 W1 H +ATOM 4001 H2 TIP3X 504 -18.732 -3.927 -24.922 1.00 0.00 W1 H +ATOM 4002 OH2 TIP3X 505 -19.690 -4.684 -27.903 1.00 0.00 W1 O +ATOM 4003 H1 TIP3X 505 -19.528 -4.912 -28.818 1.00 0.00 W1 H +ATOM 4004 H2 TIP3X 505 -20.619 -4.455 -27.873 1.00 0.00 W1 H +ATOM 4005 OH2 TIP3X 506 -15.842 -4.152 -23.118 1.00 0.00 W1 O +ATOM 4006 H1 TIP3X 506 -16.394 -4.069 -23.896 1.00 0.00 W1 H +ATOM 4007 H2 TIP3X 506 -16.453 -4.368 -22.413 1.00 0.00 W1 H +ATOM 4008 OH2 TIP3X 507 -29.206 -2.887 -20.667 1.00 0.00 W1 O +ATOM 4009 H1 TIP3X 507 -28.800 -2.684 -19.824 1.00 0.00 W1 H +ATOM 4010 H2 TIP3X 507 -29.777 -3.633 -20.484 1.00 0.00 W1 H +ATOM 4011 OH2 TIP3X 508 -21.831 -1.263 -21.441 1.00 0.00 W1 O +ATOM 4012 H1 TIP3X 508 -21.530 -2.163 -21.319 1.00 0.00 W1 H +ATOM 4013 H2 TIP3X 508 -21.205 -0.882 -22.058 1.00 0.00 W1 H +ATOM 4014 OH2 TIP3X 509 -18.398 -1.306 -21.561 1.00 0.00 W1 O +ATOM 4015 H1 TIP3X 509 -18.834 -0.483 -21.781 1.00 0.00 W1 H +ATOM 4016 H2 TIP3X 509 -17.469 -1.080 -21.512 1.00 0.00 W1 H +ATOM 4017 OH2 TIP3X 510 -25.950 -1.731 -22.432 1.00 0.00 W1 O +ATOM 4018 H1 TIP3X 510 -25.595 -0.882 -22.695 1.00 0.00 W1 H +ATOM 4019 H2 TIP3X 510 -26.885 -1.672 -22.628 1.00 0.00 W1 H +ATOM 4020 OH2 TIP3X 511 -21.109 -9.839 -23.530 1.00 0.00 W1 O +ATOM 4021 H1 TIP3X 511 -21.186 -10.648 -24.035 1.00 0.00 W1 H +ATOM 4022 H2 TIP3X 511 -20.166 -9.700 -23.443 1.00 0.00 W1 H +ATOM 4023 OH2 TIP3X 512 -25.086 -13.741 -21.168 1.00 0.00 W1 O +ATOM 4024 H1 TIP3X 512 -24.828 -14.479 -20.615 1.00 0.00 W1 H +ATOM 4025 H2 TIP3X 512 -25.762 -14.098 -21.744 1.00 0.00 W1 H +ATOM 4026 OH2 TIP3X 513 -16.842 -12.737 -24.745 1.00 0.00 W1 O +ATOM 4027 H1 TIP3X 513 -17.150 -12.399 -23.904 1.00 0.00 W1 H +ATOM 4028 H2 TIP3X 513 -16.774 -13.682 -24.614 1.00 0.00 W1 H +ATOM 4029 OH2 TIP3X 514 -18.244 -11.542 -22.791 1.00 0.00 W1 O +ATOM 4030 H1 TIP3X 514 -17.669 -11.770 -22.061 1.00 0.00 W1 H +ATOM 4031 H2 TIP3X 514 -19.119 -11.796 -22.496 1.00 0.00 W1 H +ATOM 4032 OH2 TIP3X 515 -25.198 -10.417 -21.420 1.00 0.00 W1 O +ATOM 4033 H1 TIP3X 515 -24.695 -11.119 -21.008 1.00 0.00 W1 H +ATOM 4034 H2 TIP3X 515 -24.541 -9.775 -21.687 1.00 0.00 W1 H +ATOM 4035 OH2 TIP3X 516 -17.721 -9.369 -24.523 1.00 0.00 W1 O +ATOM 4036 H1 TIP3X 516 -17.680 -10.268 -24.199 1.00 0.00 W1 H +ATOM 4037 H2 TIP3X 516 -17.839 -8.836 -23.736 1.00 0.00 W1 H +ATOM 4038 OH2 TIP3X 517 -19.037 -12.725 -26.654 1.00 0.00 W1 O +ATOM 4039 H1 TIP3X 517 -18.212 -12.541 -26.205 1.00 0.00 W1 H +ATOM 4040 H2 TIP3X 517 -18.960 -12.270 -27.493 1.00 0.00 W1 H +ATOM 4041 OH2 TIP3X 518 -22.854 -6.754 -20.583 1.00 0.00 W1 O +ATOM 4042 H1 TIP3X 518 -21.977 -6.732 -20.966 1.00 0.00 W1 H +ATOM 4043 H2 TIP3X 518 -23.119 -5.835 -20.537 1.00 0.00 W1 H +ATOM 4044 OH2 TIP3X 519 -23.704 -4.206 -20.773 1.00 0.00 W1 O +ATOM 4045 H1 TIP3X 519 -23.728 -3.979 -21.702 1.00 0.00 W1 H +ATOM 4046 H2 TIP3X 519 -24.624 -4.260 -20.514 1.00 0.00 W1 H +ATOM 4047 OH2 TIP3X 520 -28.841 -12.324 -23.935 1.00 0.00 W1 O +ATOM 4048 H1 TIP3X 520 -29.166 -11.445 -23.744 1.00 0.00 W1 H +ATOM 4049 H2 TIP3X 520 -28.964 -12.427 -24.878 1.00 0.00 W1 H +ATOM 4050 OH2 TIP3X 521 -26.685 -8.767 -23.922 1.00 0.00 W1 O +ATOM 4051 H1 TIP3X 521 -27.368 -9.217 -24.419 1.00 0.00 W1 H +ATOM 4052 H2 TIP3X 521 -26.199 -9.470 -23.490 1.00 0.00 W1 H +ATOM 4053 OH2 TIP3X 522 -20.629 -3.842 -21.526 1.00 0.00 W1 O +ATOM 4054 H1 TIP3X 522 -20.871 -4.428 -22.243 1.00 0.00 W1 H +ATOM 4055 H2 TIP3X 522 -19.679 -3.931 -21.453 1.00 0.00 W1 H +ATOM 4056 OH2 TIP3X 523 -16.331 -0.208 -24.745 1.00 0.00 W1 O +ATOM 4057 H1 TIP3X 523 -16.336 -0.676 -23.910 1.00 0.00 W1 H +ATOM 4058 H2 TIP3X 523 -17.212 -0.337 -25.098 1.00 0.00 W1 H +ATOM 4059 OH2 TIP3X 524 -24.459 -3.871 -23.723 1.00 0.00 W1 O +ATOM 4060 H1 TIP3X 524 -25.031 -4.591 -23.454 1.00 0.00 W1 H +ATOM 4061 H2 TIP3X 524 -24.920 -3.081 -23.441 1.00 0.00 W1 H +ATOM 4062 OH2 TIP3X 525 -22.238 -13.420 -19.153 1.00 0.00 W1 O +ATOM 4063 H1 TIP3X 525 -22.980 -12.940 -18.786 1.00 0.00 W1 H +ATOM 4064 H2 TIP3X 525 -22.618 -14.232 -19.487 1.00 0.00 W1 H +ATOM 4065 OH2 TIP3X 526 -26.886 -12.715 -29.351 1.00 0.00 W1 O +ATOM 4066 H1 TIP3X 526 -26.984 -13.377 -28.667 1.00 0.00 W1 H +ATOM 4067 H2 TIP3X 526 -27.069 -13.183 -30.166 1.00 0.00 W1 H +ATOM 4068 OH2 TIP3X 527 -15.992 -11.793 -21.162 1.00 0.00 W1 O +ATOM 4069 H1 TIP3X 527 -15.473 -11.124 -21.609 1.00 0.00 W1 H +ATOM 4070 H2 TIP3X 527 -15.550 -11.917 -20.322 1.00 0.00 W1 H +ATOM 4071 OH2 TIP3X 528 -29.934 -15.440 -27.002 1.00 0.00 W1 O +ATOM 4072 H1 TIP3X 528 -29.209 -14.819 -26.933 1.00 0.00 W1 H +ATOM 4073 H2 TIP3X 528 -30.306 -15.473 -26.120 1.00 0.00 W1 H +ATOM 4074 OH2 TIP3X 529 -24.668 -9.205 -17.015 1.00 0.00 W1 O +ATOM 4075 H1 TIP3X 529 -23.804 -8.806 -17.116 1.00 0.00 W1 H +ATOM 4076 H2 TIP3X 529 -24.516 -10.142 -17.138 1.00 0.00 W1 H +ATOM 4077 OH2 TIP3X 530 -21.502 -4.295 -24.276 1.00 0.00 W1 O +ATOM 4078 H1 TIP3X 530 -21.408 -5.157 -24.679 1.00 0.00 W1 H +ATOM 4079 H2 TIP3X 530 -22.435 -4.095 -24.352 1.00 0.00 W1 H +ATOM 4080 OH2 TIP3X 531 -22.890 -6.011 -26.745 1.00 0.00 W1 O +ATOM 4081 H1 TIP3X 531 -23.455 -6.625 -26.275 1.00 0.00 W1 H +ATOM 4082 H2 TIP3X 531 -23.364 -5.180 -26.716 1.00 0.00 W1 H +ATOM 4083 OH2 TIP3X 532 -30.352 -5.497 -20.288 1.00 0.00 W1 O +ATOM 4084 H1 TIP3X 532 -30.887 -6.099 -20.806 1.00 0.00 W1 H +ATOM 4085 H2 TIP3X 532 -30.823 -5.411 -19.459 1.00 0.00 W1 H +ATOM 4086 OH2 TIP3X 533 -19.056 -6.477 -25.920 1.00 0.00 W1 O +ATOM 4087 H1 TIP3X 533 -19.112 -7.391 -26.197 1.00 0.00 W1 H +ATOM 4088 H2 TIP3X 533 -19.229 -5.974 -26.716 1.00 0.00 W1 H +ATOM 4089 OH2 TIP3X 534 -18.759 -5.963 -18.896 1.00 0.00 W1 O +ATOM 4090 H1 TIP3X 534 -19.662 -5.879 -18.588 1.00 0.00 W1 H +ATOM 4091 H2 TIP3X 534 -18.591 -6.905 -18.892 1.00 0.00 W1 H +ATOM 4092 OH2 TIP3X 535 -16.393 -8.003 -21.090 1.00 0.00 W1 O +ATOM 4093 H1 TIP3X 535 -15.730 -8.684 -21.209 1.00 0.00 W1 H +ATOM 4094 H2 TIP3X 535 -17.109 -8.443 -20.631 1.00 0.00 W1 H +ATOM 4095 OH2 TIP3X 536 -27.248 -8.316 -15.946 1.00 0.00 W1 O +ATOM 4096 H1 TIP3X 536 -27.777 -8.550 -16.708 1.00 0.00 W1 H +ATOM 4097 H2 TIP3X 536 -26.353 -8.268 -16.280 1.00 0.00 W1 H +ATOM 4098 OH2 TIP3X 537 -26.338 -5.110 -20.384 1.00 0.00 W1 O +ATOM 4099 H1 TIP3X 537 -26.383 -5.665 -19.606 1.00 0.00 W1 H +ATOM 4100 H2 TIP3X 537 -26.971 -4.412 -20.218 1.00 0.00 W1 H +ATOM 4101 OH2 TIP3X 538 -17.666 -3.980 -20.635 1.00 0.00 W1 O +ATOM 4102 H1 TIP3X 538 -17.243 -3.212 -20.251 1.00 0.00 W1 H +ATOM 4103 H2 TIP3X 538 -17.970 -4.488 -19.882 1.00 0.00 W1 H +ATOM 4104 OH2 TIP3X 539 -19.579 -2.005 -18.810 1.00 0.00 W1 O +ATOM 4105 H1 TIP3X 539 -20.286 -2.634 -18.952 1.00 0.00 W1 H +ATOM 4106 H2 TIP3X 539 -19.250 -1.810 -19.687 1.00 0.00 W1 H +ATOM 4107 OH2 TIP3X 540 -19.328 -3.469 -16.413 1.00 0.00 W1 O +ATOM 4108 H1 TIP3X 540 -19.961 -4.075 -16.797 1.00 0.00 W1 H +ATOM 4109 H2 TIP3X 540 -19.214 -2.788 -17.077 1.00 0.00 W1 H +ATOM 4110 OH2 TIP3X 541 -15.717 -1.560 -22.347 1.00 0.00 W1 O +ATOM 4111 H1 TIP3X 541 -15.040 -1.719 -21.690 1.00 0.00 W1 H +ATOM 4112 H2 TIP3X 541 -15.951 -2.432 -22.666 1.00 0.00 W1 H +ATOM 4113 OH2 TIP3X 542 -25.161 -15.089 -23.954 1.00 0.00 W1 O +ATOM 4114 H1 TIP3X 542 -25.453 -14.180 -24.015 1.00 0.00 W1 H +ATOM 4115 H2 TIP3X 542 -24.329 -15.107 -24.427 1.00 0.00 W1 H +ATOM 4116 OH2 TIP3X 543 -23.037 -5.143 -30.300 1.00 0.00 W1 O +ATOM 4117 H1 TIP3X 543 -23.732 -5.765 -30.085 1.00 0.00 W1 H +ATOM 4118 H2 TIP3X 543 -23.055 -4.507 -29.585 1.00 0.00 W1 H +ATOM 4119 OH2 TIP3X 544 -15.657 -6.379 -30.863 1.00 0.00 W1 O +ATOM 4120 H1 TIP3X 544 -15.920 -7.129 -31.397 1.00 0.00 W1 H +ATOM 4121 H2 TIP3X 544 -15.911 -5.615 -31.381 1.00 0.00 W1 H +ATOM 4122 OH2 TIP3X 545 -29.709 -2.683 -31.146 1.00 0.00 W1 O +ATOM 4123 H1 TIP3X 545 -29.263 -3.232 -30.501 1.00 0.00 W1 H +ATOM 4124 H2 TIP3X 545 -30.605 -3.017 -31.167 1.00 0.00 W1 H +ATOM 4125 OH2 TIP3X 546 -17.615 -0.554 -29.888 1.00 0.00 W1 O +ATOM 4126 H1 TIP3X 546 -16.730 -0.882 -30.046 1.00 0.00 W1 H +ATOM 4127 H2 TIP3X 546 -17.845 -0.086 -30.690 1.00 0.00 W1 H +ATOM 4128 OH2 TIP3X 547 -16.223 -4.892 -17.810 1.00 0.00 W1 O +ATOM 4129 H1 TIP3X 547 -16.333 -3.943 -17.751 1.00 0.00 W1 H +ATOM 4130 H2 TIP3X 547 -17.116 -5.237 -17.820 1.00 0.00 W1 H +ATOM 4131 OH2 TIP3X 548 -29.537 -2.066 -28.191 1.00 0.00 W1 O +ATOM 4132 H1 TIP3X 548 -29.605 -1.230 -27.731 1.00 0.00 W1 H +ATOM 4133 H2 TIP3X 548 -30.432 -2.404 -28.208 1.00 0.00 W1 H +ATOM 4134 OH2 TIP3X 549 -16.957 -3.573 -30.547 1.00 0.00 W1 O +ATOM 4135 H1 TIP3X 549 -16.925 -3.653 -29.594 1.00 0.00 W1 H +ATOM 4136 H2 TIP3X 549 -17.790 -3.136 -30.724 1.00 0.00 W1 H +ATOM 4137 OH2 TIP3X 550 -20.586 -15.278 -17.663 1.00 0.00 W1 O +ATOM 4138 H1 TIP3X 550 -20.893 -14.530 -18.176 1.00 0.00 W1 H +ATOM 4139 H2 TIP3X 550 -20.532 -15.995 -18.295 1.00 0.00 W1 H +ATOM 4140 OH2 TIP3X 551 -26.372 -1.362 -19.634 1.00 0.00 W1 O +ATOM 4141 H1 TIP3X 551 -25.524 -1.124 -19.260 1.00 0.00 W1 H +ATOM 4142 H2 TIP3X 551 -26.161 -1.742 -20.487 1.00 0.00 W1 H +ATOM 4143 OH2 TIP3X 552 -27.906 -13.343 -16.284 1.00 0.00 W1 O +ATOM 4144 H1 TIP3X 552 -28.783 -13.254 -15.910 1.00 0.00 W1 H +ATOM 4145 H2 TIP3X 552 -27.843 -12.631 -16.920 1.00 0.00 W1 H +ATOM 4146 OH2 TIP3X 553 -21.709 -11.396 -30.553 1.00 0.00 W1 O +ATOM 4147 H1 TIP3X 553 -21.875 -11.099 -31.448 1.00 0.00 W1 H +ATOM 4148 H2 TIP3X 553 -22.580 -11.520 -30.176 1.00 0.00 W1 H +ATOM 4149 OH2 TIP3X 554 -16.311 -3.636 -27.505 1.00 0.00 W1 O +ATOM 4150 H1 TIP3X 554 -15.738 -4.373 -27.292 1.00 0.00 W1 H +ATOM 4151 H2 TIP3X 554 -16.642 -3.337 -26.658 1.00 0.00 W1 H +ATOM 4152 OH2 TIP3X 555 -21.050 -14.600 -30.576 1.00 0.00 W1 O +ATOM 4153 H1 TIP3X 555 -20.318 -13.984 -30.552 1.00 0.00 W1 H +ATOM 4154 H2 TIP3X 555 -20.809 -15.232 -31.253 1.00 0.00 W1 H +ATOM 4155 OH2 TIP3X 556 -16.518 -14.506 -20.311 1.00 0.00 W1 O +ATOM 4156 H1 TIP3X 556 -16.026 -15.136 -19.784 1.00 0.00 W1 H +ATOM 4157 H2 TIP3X 556 -15.918 -14.264 -21.016 1.00 0.00 W1 H +ATOM 4158 OH2 TIP3X 557 -29.011 -5.286 -24.233 1.00 0.00 W1 O +ATOM 4159 H1 TIP3X 557 -29.679 -4.962 -23.629 1.00 0.00 W1 H +ATOM 4160 H2 TIP3X 557 -28.219 -5.355 -23.701 1.00 0.00 W1 H +ATOM 4161 OH2 TIP3X 558 -24.014 -3.867 -17.123 1.00 0.00 W1 O +ATOM 4162 H1 TIP3X 558 -23.790 -4.245 -16.272 1.00 0.00 W1 H +ATOM 4163 H2 TIP3X 558 -24.621 -4.496 -17.513 1.00 0.00 W1 H +ATOM 4164 OH2 TIP3X 559 -20.535 -12.562 -21.710 1.00 0.00 W1 O +ATOM 4165 H1 TIP3X 559 -20.476 -12.744 -20.772 1.00 0.00 W1 H +ATOM 4166 H2 TIP3X 559 -21.473 -12.475 -21.879 1.00 0.00 W1 H +ATOM 4167 OH2 TIP3X 560 -24.343 -11.905 -17.531 1.00 0.00 W1 O +ATOM 4168 H1 TIP3X 560 -25.210 -11.975 -17.931 1.00 0.00 W1 H +ATOM 4169 H2 TIP3X 560 -24.398 -12.446 -16.743 1.00 0.00 W1 H +ATOM 4170 OH2 TIP3X 561 -16.857 -9.185 -15.778 1.00 0.00 W1 O +ATOM 4171 H1 TIP3X 561 -16.063 -9.718 -15.795 1.00 0.00 W1 H +ATOM 4172 H2 TIP3X 561 -17.151 -9.220 -14.868 1.00 0.00 W1 H +ATOM 4173 OH2 TIP3X 562 -28.672 -15.318 -19.860 1.00 0.00 W1 O +ATOM 4174 H1 TIP3X 562 -28.898 -14.865 -20.672 1.00 0.00 W1 H +ATOM 4175 H2 TIP3X 562 -27.842 -15.755 -20.051 1.00 0.00 W1 H +ATOM 4176 OH2 TIP3X 563 -22.577 -14.860 -24.778 1.00 0.00 W1 O +ATOM 4177 H1 TIP3X 563 -22.095 -14.346 -25.426 1.00 0.00 W1 H +ATOM 4178 H2 TIP3X 563 -22.233 -14.567 -23.934 1.00 0.00 W1 H +ATOM 4179 OH2 TIP3X 564 -28.107 -10.269 -29.625 1.00 0.00 W1 O +ATOM 4180 H1 TIP3X 564 -27.685 -9.623 -30.191 1.00 0.00 W1 H +ATOM 4181 H2 TIP3X 564 -27.395 -10.844 -29.344 1.00 0.00 W1 H +ATOM 4182 OH2 TIP3X 565 -27.583 -9.612 -20.314 1.00 0.00 W1 O +ATOM 4183 H1 TIP3X 565 -27.667 -8.821 -19.782 1.00 0.00 W1 H +ATOM 4184 H2 TIP3X 565 -26.668 -9.616 -20.595 1.00 0.00 W1 H +ATOM 4185 OH2 TIP3X 566 -28.400 -8.894 -27.129 1.00 0.00 W1 O +ATOM 4186 H1 TIP3X 566 -28.337 -9.183 -28.039 1.00 0.00 W1 H +ATOM 4187 H2 TIP3X 566 -27.625 -8.349 -26.996 1.00 0.00 W1 H +ATOM 4188 OH2 TIP3X 567 -19.380 -12.324 -29.369 1.00 0.00 W1 O +ATOM 4189 H1 TIP3X 567 -20.087 -11.836 -29.789 1.00 0.00 W1 H +ATOM 4190 H2 TIP3X 567 -18.655 -12.280 -29.992 1.00 0.00 W1 H +ATOM 4191 OH2 TIP3X 568 -30.829 -11.438 -18.281 1.00 0.00 W1 O +ATOM 4192 H1 TIP3X 568 -31.734 -11.144 -18.170 1.00 0.00 W1 H +ATOM 4193 H2 TIP3X 568 -30.689 -12.057 -17.564 1.00 0.00 W1 H +ATOM 4194 OH2 TIP3X 569 -29.686 -14.600 -22.298 1.00 0.00 W1 O +ATOM 4195 H1 TIP3X 569 -29.579 -15.302 -22.941 1.00 0.00 W1 H +ATOM 4196 H2 TIP3X 569 -29.550 -13.795 -22.797 1.00 0.00 W1 H +ATOM 4197 OH2 TIP3X 570 -18.164 -10.972 -17.411 1.00 0.00 W1 O +ATOM 4198 H1 TIP3X 570 -17.853 -10.394 -16.715 1.00 0.00 W1 H +ATOM 4199 H2 TIP3X 570 -19.108 -11.036 -17.265 1.00 0.00 W1 H +ATOM 4200 OH2 TIP3X 571 -21.121 -10.966 -17.464 1.00 0.00 W1 O +ATOM 4201 H1 TIP3X 571 -21.481 -10.398 -18.145 1.00 0.00 W1 H +ATOM 4202 H2 TIP3X 571 -21.459 -11.837 -17.675 1.00 0.00 W1 H +ATOM 4203 OH2 TIP3X 572 -22.918 -10.497 -27.598 1.00 0.00 W1 O +ATOM 4204 H1 TIP3X 572 -22.829 -9.918 -28.355 1.00 0.00 W1 H +ATOM 4205 H2 TIP3X 572 -23.688 -11.032 -27.795 1.00 0.00 W1 H +ATOM 4206 OH2 TIP3X 573 -24.615 -11.166 -29.911 1.00 0.00 W1 O +ATOM 4207 H1 TIP3X 573 -25.053 -10.973 -30.740 1.00 0.00 W1 H +ATOM 4208 H2 TIP3X 573 -25.022 -11.977 -29.607 1.00 0.00 W1 H +ATOM 4209 OH2 TIP3X 574 -23.905 -14.104 -16.122 1.00 0.00 W1 O +ATOM 4210 H1 TIP3X 574 -24.371 -14.491 -15.381 1.00 0.00 W1 H +ATOM 4211 H2 TIP3X 574 -22.991 -14.071 -15.839 1.00 0.00 W1 H +ATOM 4212 OH2 TIP3X 575 -18.342 -8.759 -19.440 1.00 0.00 W1 O +ATOM 4213 H1 TIP3X 575 -18.322 -9.409 -18.737 1.00 0.00 W1 H +ATOM 4214 H2 TIP3X 575 -19.176 -8.911 -19.884 1.00 0.00 W1 H +ATOM 4215 OH2 TIP3X 576 -30.267 -11.659 -30.971 1.00 0.00 W1 O +ATOM 4216 H1 TIP3X 576 -31.023 -11.851 -30.417 1.00 0.00 W1 H +ATOM 4217 H2 TIP3X 576 -29.733 -11.060 -30.448 1.00 0.00 W1 H +ATOM 4218 OH2 TIP3X 577 -30.348 -0.165 -30.484 1.00 0.00 W1 O +ATOM 4219 H1 TIP3X 577 -29.932 -0.913 -30.054 1.00 0.00 W1 H +ATOM 4220 H2 TIP3X 577 -30.335 0.528 -29.824 1.00 0.00 W1 H +ATOM 4221 OH2 TIP3X 578 -21.600 -12.005 -25.491 1.00 0.00 W1 O +ATOM 4222 H1 TIP3X 578 -21.937 -11.655 -26.315 1.00 0.00 W1 H +ATOM 4223 H2 TIP3X 578 -20.703 -12.273 -25.692 1.00 0.00 W1 H +ATOM 4224 OH2 TIP3X 579 -26.145 -12.695 -23.747 1.00 0.00 W1 O +ATOM 4225 H1 TIP3X 579 -27.087 -12.742 -23.905 1.00 0.00 W1 H +ATOM 4226 H2 TIP3X 579 -26.006 -11.820 -23.383 1.00 0.00 W1 H +ATOM 4227 OH2 TIP3X 580 -30.783 -11.569 -26.953 1.00 0.00 W1 O +ATOM 4228 H1 TIP3X 580 -31.057 -11.693 -26.045 1.00 0.00 W1 H +ATOM 4229 H2 TIP3X 580 -30.977 -10.650 -27.139 1.00 0.00 W1 H +ATOM 4230 OH2 TIP3X 581 -26.782 -12.242 -18.893 1.00 0.00 W1 O +ATOM 4231 H1 TIP3X 581 -26.760 -13.048 -19.409 1.00 0.00 W1 H +ATOM 4232 H2 TIP3X 581 -27.176 -11.594 -19.477 1.00 0.00 W1 H +ATOM 4233 OH2 TIP3X 582 -26.199 -5.706 -23.088 1.00 0.00 W1 O +ATOM 4234 H1 TIP3X 582 -26.271 -6.642 -23.276 1.00 0.00 W1 H +ATOM 4235 H2 TIP3X 582 -26.195 -5.653 -22.132 1.00 0.00 W1 H +ATOM 4236 OH2 TIP3X 583 -22.010 -8.687 -18.526 1.00 0.00 W1 O +ATOM 4237 H1 TIP3X 583 -21.598 -7.856 -18.289 1.00 0.00 W1 H +ATOM 4238 H2 TIP3X 583 -22.560 -8.477 -19.280 1.00 0.00 W1 H +ATOM 4239 OH2 TIP3X 584 -16.215 -13.321 -29.201 1.00 0.00 W1 O +ATOM 4240 H1 TIP3X 584 -15.780 -13.094 -28.379 1.00 0.00 W1 H +ATOM 4241 H2 TIP3X 584 -16.735 -14.096 -28.992 1.00 0.00 W1 H +ATOM 4242 OH2 TIP3X 585 -25.060 -7.361 -30.023 1.00 0.00 W1 O +ATOM 4243 H1 TIP3X 585 -25.349 -7.483 -29.119 1.00 0.00 W1 H +ATOM 4244 H2 TIP3X 585 -24.371 -8.014 -30.144 1.00 0.00 W1 H +ATOM 4245 OH2 TIP3X 586 -18.357 -8.845 -28.955 1.00 0.00 W1 O +ATOM 4246 H1 TIP3X 586 -19.222 -9.044 -28.596 1.00 0.00 W1 H +ATOM 4247 H2 TIP3X 586 -17.800 -8.724 -28.186 1.00 0.00 W1 H +ATOM 4248 OH2 TIP3X 587 -23.524 -8.591 -22.485 1.00 0.00 W1 O +ATOM 4249 H1 TIP3X 587 -23.427 -7.794 -21.963 1.00 0.00 W1 H +ATOM 4250 H2 TIP3X 587 -22.649 -8.980 -22.493 1.00 0.00 W1 H +ATOM 4251 OH2 TIP3X 588 -23.778 -8.209 -25.569 1.00 0.00 W1 O +ATOM 4252 H1 TIP3X 588 -23.157 -8.805 -25.987 1.00 0.00 W1 H +ATOM 4253 H2 TIP3X 588 -23.753 -8.446 -24.642 1.00 0.00 W1 H +ATOM 4254 OH2 TIP3X 589 -20.884 -6.593 -16.633 1.00 0.00 W1 O +ATOM 4255 H1 TIP3X 589 -21.562 -6.309 -16.020 1.00 0.00 W1 H +ATOM 4256 H2 TIP3X 589 -20.086 -6.634 -16.106 1.00 0.00 W1 H +ATOM 4257 OH2 TIP3X 590 -28.374 -7.178 -18.937 1.00 0.00 W1 O +ATOM 4258 H1 TIP3X 590 -27.857 -6.772 -18.241 1.00 0.00 W1 H +ATOM 4259 H2 TIP3X 590 -28.757 -6.441 -19.412 1.00 0.00 W1 H +ATOM 4260 OH2 TIP3X 591 -29.468 -9.216 -17.315 1.00 0.00 W1 O +ATOM 4261 H1 TIP3X 591 -29.672 -10.055 -17.728 1.00 0.00 W1 H +ATOM 4262 H2 TIP3X 591 -29.591 -8.570 -18.011 1.00 0.00 W1 H +ATOM 4263 OH2 TIP3X 592 -29.575 -8.342 -24.492 1.00 0.00 W1 O +ATOM 4264 H1 TIP3X 592 -29.219 -7.470 -24.662 1.00 0.00 W1 H +ATOM 4265 H2 TIP3X 592 -29.677 -8.733 -25.360 1.00 0.00 W1 H +ATOM 4266 OH2 TIP3X 593 -18.816 -6.078 -30.305 1.00 0.00 W1 O +ATOM 4267 H1 TIP3X 593 -18.111 -5.579 -30.717 1.00 0.00 W1 H +ATOM 4268 H2 TIP3X 593 -18.367 -6.708 -29.742 1.00 0.00 W1 H +ATOM 4269 OH2 TIP3X 594 -16.220 -8.731 -26.943 1.00 0.00 W1 O +ATOM 4270 H1 TIP3X 594 -16.507 -8.558 -26.046 1.00 0.00 W1 H +ATOM 4271 H2 TIP3X 594 -15.707 -7.959 -27.183 1.00 0.00 W1 H +ATOM 4272 OH2 TIP3X 595 -29.722 -9.614 -22.221 1.00 0.00 W1 O +ATOM 4273 H1 TIP3X 595 -29.628 -8.936 -22.889 1.00 0.00 W1 H +ATOM 4274 H2 TIP3X 595 -29.064 -9.395 -21.561 1.00 0.00 W1 H +ATOM 4275 OH2 TIP3X 596 -26.935 -1.107 -28.957 1.00 0.00 W1 O +ATOM 4276 H1 TIP3X 596 -27.164 -0.747 -29.814 1.00 0.00 W1 H +ATOM 4277 H2 TIP3X 596 -27.348 -1.970 -28.941 1.00 0.00 W1 H +ATOM 4278 OH2 TIP3X 597 -28.160 -5.874 -30.459 1.00 0.00 W1 O +ATOM 4279 H1 TIP3X 597 -28.976 -6.163 -30.867 1.00 0.00 W1 H +ATOM 4280 H2 TIP3X 597 -27.628 -6.667 -30.397 1.00 0.00 W1 H +ATOM 4281 OH2 TIP3X 598 -26.742 -5.034 -17.384 1.00 0.00 W1 O +ATOM 4282 H1 TIP3X 598 -27.315 -4.432 -17.858 1.00 0.00 W1 H +ATOM 4283 H2 TIP3X 598 -27.216 -5.230 -16.576 1.00 0.00 W1 H +ATOM 4284 OH2 TIP3X 599 -23.666 -0.291 -19.693 1.00 0.00 W1 O +ATOM 4285 H1 TIP3X 599 -23.349 -0.585 -18.840 1.00 0.00 W1 H +ATOM 4286 H2 TIP3X 599 -23.233 -0.869 -20.322 1.00 0.00 W1 H +ATOM 4287 OH2 TIP3X 600 -18.960 -0.050 -25.560 1.00 0.00 W1 O +ATOM 4288 H1 TIP3X 600 -19.373 -0.741 -26.078 1.00 0.00 W1 H +ATOM 4289 H2 TIP3X 600 -19.156 0.757 -26.036 1.00 0.00 W1 H +ATOM 4290 OH2 TIP3X 601 -22.382 -3.367 -28.308 1.00 0.00 W1 O +ATOM 4291 H1 TIP3X 601 -22.123 -2.582 -28.790 1.00 0.00 W1 H +ATOM 4292 H2 TIP3X 601 -22.952 -3.044 -27.610 1.00 0.00 W1 H +ATOM 4293 OH2 TIP3X 602 -22.365 -8.213 -29.236 1.00 0.00 W1 O +ATOM 4294 H1 TIP3X 602 -21.542 -8.140 -29.719 1.00 0.00 W1 H +ATOM 4295 H2 TIP3X 602 -22.358 -7.468 -28.635 1.00 0.00 W1 H +ATOM 4296 OH2 TIP3X 603 -18.964 -13.489 -19.445 1.00 0.00 W1 O +ATOM 4297 H1 TIP3X 603 -18.159 -13.720 -19.909 1.00 0.00 W1 H +ATOM 4298 H2 TIP3X 603 -18.673 -12.936 -18.720 1.00 0.00 W1 H +ATOM 4299 OH2 TIP3X 604 -30.999 -6.388 -28.039 1.00 0.00 W1 O +ATOM 4300 H1 TIP3X 604 -31.152 -6.295 -28.979 1.00 0.00 W1 H +ATOM 4301 H2 TIP3X 604 -30.045 -6.388 -27.950 1.00 0.00 W1 H +ATOM 4302 OH2 TIP3X 605 -20.237 -6.800 -21.443 1.00 0.00 W1 O +ATOM 4303 H1 TIP3X 605 -19.691 -6.138 -21.017 1.00 0.00 W1 H +ATOM 4304 H2 TIP3X 605 -19.778 -7.000 -22.259 1.00 0.00 W1 H +ATOM 4305 OH2 TIP3X 606 -21.414 -1.826 -30.366 1.00 0.00 W1 O +ATOM 4306 H1 TIP3X 606 -20.590 -1.791 -29.881 1.00 0.00 W1 H +ATOM 4307 H2 TIP3X 606 -21.211 -2.339 -31.148 1.00 0.00 W1 H +ATOM 4308 OH2 TIP3X 607 -21.422 -4.039 -18.715 1.00 0.00 W1 O +ATOM 4309 H1 TIP3X 607 -22.243 -3.792 -18.288 1.00 0.00 W1 H +ATOM 4310 H2 TIP3X 607 -21.651 -4.134 -19.639 1.00 0.00 W1 H +ATOM 4311 OH2 TIP3X 608 -24.797 -3.814 -26.828 1.00 0.00 W1 O +ATOM 4312 H1 TIP3X 608 -25.504 -3.667 -27.456 1.00 0.00 W1 H +ATOM 4313 H2 TIP3X 608 -25.134 -3.469 -26.001 1.00 0.00 W1 H +ATOM 4314 OH2 TIP3X 609 -28.232 -2.902 -18.117 1.00 0.00 W1 O +ATOM 4315 H1 TIP3X 609 -27.498 -2.291 -18.181 1.00 0.00 W1 H +ATOM 4316 H2 TIP3X 609 -28.544 -2.808 -17.217 1.00 0.00 W1 H +ATOM 4317 OH2 TIP3X 610 -28.642 -1.197 -24.015 1.00 0.00 W1 O +ATOM 4318 H1 TIP3X 610 -29.228 -1.938 -24.169 1.00 0.00 W1 H +ATOM 4319 H2 TIP3X 610 -28.199 -1.064 -24.853 1.00 0.00 W1 H +ATOM 4320 OH2 TIP3X 611 -20.289 -15.184 -22.935 1.00 0.00 W1 O +ATOM 4321 H1 TIP3X 611 -19.956 -15.259 -23.829 1.00 0.00 W1 H +ATOM 4322 H2 TIP3X 611 -20.334 -14.241 -22.774 1.00 0.00 W1 H +ATOM 4323 OH2 TIP3X 612 -23.051 -13.055 -22.700 1.00 0.00 W1 O +ATOM 4324 H1 TIP3X 612 -23.413 -12.566 -23.439 1.00 0.00 W1 H +ATOM 4325 H2 TIP3X 612 -23.782 -13.144 -22.090 1.00 0.00 W1 H +ATOM 4326 OH2 TIP3X 613 -24.332 -15.070 -28.772 1.00 0.00 W1 O +ATOM 4327 H1 TIP3X 613 -23.476 -15.326 -28.427 1.00 0.00 W1 H +ATOM 4328 H2 TIP3X 613 -24.850 -15.874 -28.747 1.00 0.00 W1 H +ATOM 4329 OH2 TIP3X 614 -21.580 -15.227 -27.729 1.00 0.00 W1 O +ATOM 4330 H1 TIP3X 614 -21.124 -15.963 -27.320 1.00 0.00 W1 H +ATOM 4331 H2 TIP3X 614 -21.173 -15.140 -28.590 1.00 0.00 W1 H +ATOM 4332 OH2 TIP3X 615 -26.941 -0.648 -16.274 1.00 0.00 W1 O +ATOM 4333 H1 TIP3X 615 -27.191 0.109 -16.804 1.00 0.00 W1 H +ATOM 4334 H2 TIP3X 615 -26.030 -0.817 -16.513 1.00 0.00 W1 H +ATOM 4335 OH2 TIP3X 616 -21.934 -1.954 -25.974 1.00 0.00 W1 O +ATOM 4336 H1 TIP3X 616 -21.273 -2.596 -25.714 1.00 0.00 W1 H +ATOM 4337 H2 TIP3X 616 -21.947 -1.319 -25.257 1.00 0.00 W1 H +ATOM 4338 OH2 TIP3X 617 -24.195 -1.051 -17.064 1.00 0.00 W1 O +ATOM 4339 H1 TIP3X 617 -23.977 -1.943 -16.794 1.00 0.00 W1 H +ATOM 4340 H2 TIP3X 617 -23.587 -0.497 -16.575 1.00 0.00 W1 H +ATOM 4341 OH2 TIP3X 618 -25.248 -12.933 -27.020 1.00 0.00 W1 O +ATOM 4342 H1 TIP3X 618 -24.591 -13.592 -27.242 1.00 0.00 W1 H +ATOM 4343 H2 TIP3X 618 -25.206 -12.864 -26.066 1.00 0.00 W1 H +ATOM 4344 OH2 TIP3X 619 -30.535 -14.595 -17.564 1.00 0.00 W1 O +ATOM 4345 H1 TIP3X 619 -29.787 -14.790 -18.128 1.00 0.00 W1 H +ATOM 4346 H2 TIP3X 619 -30.327 -15.020 -16.732 1.00 0.00 W1 H +ATOM 4347 OH2 TIP3X 620 -19.415 -1.867 -27.962 1.00 0.00 W1 O +ATOM 4348 H1 TIP3X 620 -19.271 -2.808 -27.859 1.00 0.00 W1 H +ATOM 4349 H2 TIP3X 620 -18.592 -1.535 -28.319 1.00 0.00 W1 H +ATOM 4350 OH2 TIP3X 621 -17.748 -15.101 -16.735 1.00 0.00 W1 O +ATOM 4351 H1 TIP3X 621 -18.361 -15.027 -17.466 1.00 0.00 W1 H +ATOM 4352 H2 TIP3X 621 -16.978 -14.606 -17.017 1.00 0.00 W1 H +ATOM 4353 OH2 TIP3X 622 -26.954 -0.888 -26.249 1.00 0.00 W1 O +ATOM 4354 H1 TIP3X 622 -26.961 -0.843 -27.205 1.00 0.00 W1 H +ATOM 4355 H2 TIP3X 622 -26.147 -0.442 -25.993 1.00 0.00 W1 H +ATOM 4356 OH2 TIP3X 623 -16.045 -1.950 -18.299 1.00 0.00 W1 O +ATOM 4357 H1 TIP3X 623 -16.768 -1.399 -17.998 1.00 0.00 W1 H +ATOM 4358 H2 TIP3X 623 -15.257 -1.450 -18.085 1.00 0.00 W1 H +ATOM 4359 OH2 TIP3X 624 -28.419 -12.628 -26.619 1.00 0.00 W1 O +ATOM 4360 H1 TIP3X 624 -29.063 -12.239 -27.212 1.00 0.00 W1 H +ATOM 4361 H2 TIP3X 624 -27.617 -12.131 -26.777 1.00 0.00 W1 H +ATOM 4362 OH2 TIP3X 625 -26.991 -4.029 -28.888 1.00 0.00 W1 O +ATOM 4363 H1 TIP3X 625 -27.030 -4.657 -29.609 1.00 0.00 W1 H +ATOM 4364 H2 TIP3X 625 -27.710 -4.282 -28.310 1.00 0.00 W1 H +ATOM 4365 OH2 TIP3X 626 -29.096 -4.501 -11.248 1.00 0.00 W1 O +ATOM 4366 H1 TIP3X 626 -28.914 -4.577 -10.312 1.00 0.00 W1 H +ATOM 4367 H2 TIP3X 626 -29.120 -3.558 -11.413 1.00 0.00 W1 H +ATOM 4368 OH2 TIP3X 627 -17.994 -7.010 -7.510 1.00 0.00 W1 O +ATOM 4369 H1 TIP3X 627 -17.759 -6.745 -8.400 1.00 0.00 W1 H +ATOM 4370 H2 TIP3X 627 -17.165 -7.273 -7.111 1.00 0.00 W1 H +ATOM 4371 OH2 TIP3X 628 -26.010 -7.286 -11.532 1.00 0.00 W1 O +ATOM 4372 H1 TIP3X 628 -25.979 -6.377 -11.235 1.00 0.00 W1 H +ATOM 4373 H2 TIP3X 628 -25.502 -7.769 -10.880 1.00 0.00 W1 H +ATOM 4374 OH2 TIP3X 629 -18.206 -3.127 -9.388 1.00 0.00 W1 O +ATOM 4375 H1 TIP3X 629 -18.481 -2.637 -8.613 1.00 0.00 W1 H +ATOM 4376 H2 TIP3X 629 -18.732 -3.927 -9.365 1.00 0.00 W1 H +ATOM 4377 OH2 TIP3X 630 -19.690 -4.684 -12.345 1.00 0.00 W1 O +ATOM 4378 H1 TIP3X 630 -19.528 -4.912 -13.260 1.00 0.00 W1 H +ATOM 4379 H2 TIP3X 630 -20.619 -4.455 -12.315 1.00 0.00 W1 H +ATOM 4380 OH2 TIP3X 631 -15.842 -4.152 -7.561 1.00 0.00 W1 O +ATOM 4381 H1 TIP3X 631 -16.394 -4.069 -8.338 1.00 0.00 W1 H +ATOM 4382 H2 TIP3X 631 -16.453 -4.368 -6.856 1.00 0.00 W1 H +ATOM 4383 OH2 TIP3X 632 -29.206 -2.887 -5.110 1.00 0.00 W1 O +ATOM 4384 H1 TIP3X 632 -28.800 -2.684 -4.267 1.00 0.00 W1 H +ATOM 4385 H2 TIP3X 632 -29.777 -3.633 -4.927 1.00 0.00 W1 H +ATOM 4386 OH2 TIP3X 633 -21.831 -1.263 -5.884 1.00 0.00 W1 O +ATOM 4387 H1 TIP3X 633 -21.530 -2.163 -5.762 1.00 0.00 W1 H +ATOM 4388 H2 TIP3X 633 -21.205 -0.882 -6.501 1.00 0.00 W1 H +ATOM 4389 OH2 TIP3X 634 -18.398 -1.306 -6.004 1.00 0.00 W1 O +ATOM 4390 H1 TIP3X 634 -18.834 -0.483 -6.223 1.00 0.00 W1 H +ATOM 4391 H2 TIP3X 634 -17.469 -1.080 -5.954 1.00 0.00 W1 H +ATOM 4392 OH2 TIP3X 635 -25.950 -1.731 -6.874 1.00 0.00 W1 O +ATOM 4393 H1 TIP3X 635 -25.595 -0.882 -7.138 1.00 0.00 W1 H +ATOM 4394 H2 TIP3X 635 -26.885 -1.672 -7.070 1.00 0.00 W1 H +ATOM 4395 OH2 TIP3X 636 -21.109 -9.839 -7.973 1.00 0.00 W1 O +ATOM 4396 H1 TIP3X 636 -21.186 -10.648 -8.477 1.00 0.00 W1 H +ATOM 4397 H2 TIP3X 636 -20.166 -9.700 -7.885 1.00 0.00 W1 H +ATOM 4398 OH2 TIP3X 637 -25.086 -13.741 -5.611 1.00 0.00 W1 O +ATOM 4399 H1 TIP3X 637 -24.828 -14.479 -5.058 1.00 0.00 W1 H +ATOM 4400 H2 TIP3X 637 -25.762 -14.098 -6.186 1.00 0.00 W1 H +ATOM 4401 OH2 TIP3X 638 -16.842 -12.737 -9.188 1.00 0.00 W1 O +ATOM 4402 H1 TIP3X 638 -17.150 -12.399 -8.347 1.00 0.00 W1 H +ATOM 4403 H2 TIP3X 638 -16.774 -13.682 -9.056 1.00 0.00 W1 H +ATOM 4404 OH2 TIP3X 639 -18.244 -11.542 -7.234 1.00 0.00 W1 O +ATOM 4405 H1 TIP3X 639 -17.669 -11.770 -6.503 1.00 0.00 W1 H +ATOM 4406 H2 TIP3X 639 -19.119 -11.796 -6.939 1.00 0.00 W1 H +ATOM 4407 OH2 TIP3X 640 -25.198 -10.417 -5.863 1.00 0.00 W1 O +ATOM 4408 H1 TIP3X 640 -24.695 -11.119 -5.451 1.00 0.00 W1 H +ATOM 4409 H2 TIP3X 640 -24.541 -9.775 -6.129 1.00 0.00 W1 H +ATOM 4410 OH2 TIP3X 641 -17.721 -9.369 -8.965 1.00 0.00 W1 O +ATOM 4411 H1 TIP3X 641 -17.680 -10.268 -8.641 1.00 0.00 W1 H +ATOM 4412 H2 TIP3X 641 -17.839 -8.836 -8.179 1.00 0.00 W1 H +ATOM 4413 OH2 TIP3X 642 -19.037 -12.725 -11.097 1.00 0.00 W1 O +ATOM 4414 H1 TIP3X 642 -18.212 -12.541 -10.648 1.00 0.00 W1 H +ATOM 4415 H2 TIP3X 642 -18.960 -12.270 -11.936 1.00 0.00 W1 H +ATOM 4416 OH2 TIP3X 643 -22.854 -6.754 -5.025 1.00 0.00 W1 O +ATOM 4417 H1 TIP3X 643 -21.977 -6.732 -5.408 1.00 0.00 W1 H +ATOM 4418 H2 TIP3X 643 -23.119 -5.835 -4.979 1.00 0.00 W1 H +ATOM 4419 OH2 TIP3X 644 -23.704 -4.206 -5.215 1.00 0.00 W1 O +ATOM 4420 H1 TIP3X 644 -23.728 -3.979 -6.145 1.00 0.00 W1 H +ATOM 4421 H2 TIP3X 644 -24.624 -4.260 -4.957 1.00 0.00 W1 H +ATOM 4422 OH2 TIP3X 645 -28.841 -12.324 -8.377 1.00 0.00 W1 O +ATOM 4423 H1 TIP3X 645 -29.166 -11.445 -8.186 1.00 0.00 W1 H +ATOM 4424 H2 TIP3X 645 -28.964 -12.427 -9.321 1.00 0.00 W1 H +ATOM 4425 OH2 TIP3X 646 -26.685 -8.767 -8.365 1.00 0.00 W1 O +ATOM 4426 H1 TIP3X 646 -27.368 -9.217 -8.862 1.00 0.00 W1 H +ATOM 4427 H2 TIP3X 646 -26.199 -9.470 -7.933 1.00 0.00 W1 H +ATOM 4428 OH2 TIP3X 647 -20.629 -3.842 -5.968 1.00 0.00 W1 O +ATOM 4429 H1 TIP3X 647 -20.871 -4.428 -6.685 1.00 0.00 W1 H +ATOM 4430 H2 TIP3X 647 -19.679 -3.931 -5.896 1.00 0.00 W1 H +ATOM 4431 OH2 TIP3X 648 -24.459 -3.871 -8.166 1.00 0.00 W1 O +ATOM 4432 H1 TIP3X 648 -25.031 -4.591 -7.897 1.00 0.00 W1 H +ATOM 4433 H2 TIP3X 648 -24.920 -3.081 -7.883 1.00 0.00 W1 H +ATOM 4434 OH2 TIP3X 649 -22.238 -13.420 -3.595 1.00 0.00 W1 O +ATOM 4435 H1 TIP3X 649 -22.980 -12.940 -3.228 1.00 0.00 W1 H +ATOM 4436 H2 TIP3X 649 -22.618 -14.232 -3.930 1.00 0.00 W1 H +ATOM 4437 OH2 TIP3X 650 -26.886 -12.715 -13.794 1.00 0.00 W1 O +ATOM 4438 H1 TIP3X 650 -26.984 -13.377 -13.109 1.00 0.00 W1 H +ATOM 4439 H2 TIP3X 650 -27.069 -13.183 -14.608 1.00 0.00 W1 H +ATOM 4440 OH2 TIP3X 651 -15.992 -11.793 -5.604 1.00 0.00 W1 O +ATOM 4441 H1 TIP3X 651 -15.473 -11.124 -6.051 1.00 0.00 W1 H +ATOM 4442 H2 TIP3X 651 -15.550 -11.917 -4.764 1.00 0.00 W1 H +ATOM 4443 OH2 TIP3X 652 -29.934 -15.440 -11.444 1.00 0.00 W1 O +ATOM 4444 H1 TIP3X 652 -29.209 -14.819 -11.375 1.00 0.00 W1 H +ATOM 4445 H2 TIP3X 652 -30.306 -15.473 -10.563 1.00 0.00 W1 H +ATOM 4446 OH2 TIP3X 653 -24.668 -9.205 -1.458 1.00 0.00 W1 O +ATOM 4447 H1 TIP3X 653 -23.804 -8.806 -1.559 1.00 0.00 W1 H +ATOM 4448 H2 TIP3X 653 -24.516 -10.142 -1.580 1.00 0.00 W1 H +ATOM 4449 OH2 TIP3X 654 -21.502 -4.295 -8.718 1.00 0.00 W1 O +ATOM 4450 H1 TIP3X 654 -21.408 -5.157 -9.122 1.00 0.00 W1 H +ATOM 4451 H2 TIP3X 654 -22.435 -4.095 -8.794 1.00 0.00 W1 H +ATOM 4452 OH2 TIP3X 655 -22.890 -6.011 -11.187 1.00 0.00 W1 O +ATOM 4453 H1 TIP3X 655 -23.455 -6.625 -10.718 1.00 0.00 W1 H +ATOM 4454 H2 TIP3X 655 -23.364 -5.180 -11.159 1.00 0.00 W1 H +ATOM 4455 OH2 TIP3X 656 -30.352 -5.497 -4.730 1.00 0.00 W1 O +ATOM 4456 H1 TIP3X 656 -30.887 -6.099 -5.248 1.00 0.00 W1 H +ATOM 4457 H2 TIP3X 656 -30.823 -5.411 -3.901 1.00 0.00 W1 H +ATOM 4458 OH2 TIP3X 657 -19.056 -6.477 -10.363 1.00 0.00 W1 O +ATOM 4459 H1 TIP3X 657 -19.112 -7.391 -10.639 1.00 0.00 W1 H +ATOM 4460 H2 TIP3X 657 -19.229 -5.974 -11.159 1.00 0.00 W1 H +ATOM 4461 OH2 TIP3X 658 -18.759 -5.963 -3.338 1.00 0.00 W1 O +ATOM 4462 H1 TIP3X 658 -19.662 -5.879 -3.030 1.00 0.00 W1 H +ATOM 4463 H2 TIP3X 658 -18.591 -6.905 -3.335 1.00 0.00 W1 H +ATOM 4464 OH2 TIP3X 659 -16.393 -8.003 -5.533 1.00 0.00 W1 O +ATOM 4465 H1 TIP3X 659 -15.730 -8.684 -5.652 1.00 0.00 W1 H +ATOM 4466 H2 TIP3X 659 -17.109 -8.443 -5.074 1.00 0.00 W1 H +ATOM 4467 OH2 TIP3X 660 -27.248 -8.316 -0.388 1.00 0.00 W1 O +ATOM 4468 H1 TIP3X 660 -27.777 -8.550 -1.151 1.00 0.00 W1 H +ATOM 4469 H2 TIP3X 660 -26.353 -8.268 -0.723 1.00 0.00 W1 H +ATOM 4470 OH2 TIP3X 661 -26.338 -5.110 -4.827 1.00 0.00 W1 O +ATOM 4471 H1 TIP3X 661 -26.383 -5.665 -4.048 1.00 0.00 W1 H +ATOM 4472 H2 TIP3X 661 -26.971 -4.412 -4.661 1.00 0.00 W1 H +ATOM 4473 OH2 TIP3X 662 -17.666 -3.980 -5.077 1.00 0.00 W1 O +ATOM 4474 H1 TIP3X 662 -17.243 -3.212 -4.693 1.00 0.00 W1 H +ATOM 4475 H2 TIP3X 662 -17.970 -4.488 -4.325 1.00 0.00 W1 H +ATOM 4476 OH2 TIP3X 663 -19.579 -2.005 -3.252 1.00 0.00 W1 O +ATOM 4477 H1 TIP3X 663 -20.286 -2.634 -3.395 1.00 0.00 W1 H +ATOM 4478 H2 TIP3X 663 -19.250 -1.810 -4.130 1.00 0.00 W1 H +ATOM 4479 OH2 TIP3X 664 -25.161 -15.089 -8.397 1.00 0.00 W1 O +ATOM 4480 H1 TIP3X 664 -25.453 -14.180 -8.457 1.00 0.00 W1 H +ATOM 4481 H2 TIP3X 664 -24.329 -15.107 -8.870 1.00 0.00 W1 H +ATOM 4482 OH2 TIP3X 665 -23.037 -5.143 -14.742 1.00 0.00 W1 O +ATOM 4483 H1 TIP3X 665 -23.732 -5.765 -14.528 1.00 0.00 W1 H +ATOM 4484 H2 TIP3X 665 -23.055 -4.507 -14.027 1.00 0.00 W1 H +ATOM 4485 OH2 TIP3X 666 -15.657 -6.379 -15.306 1.00 0.00 W1 O +ATOM 4486 H1 TIP3X 666 -15.920 -7.129 -15.839 1.00 0.00 W1 H +ATOM 4487 H2 TIP3X 666 -15.911 -5.615 -15.823 1.00 0.00 W1 H +ATOM 4488 OH2 TIP3X 667 -29.709 -2.683 -15.589 1.00 0.00 W1 O +ATOM 4489 H1 TIP3X 667 -29.263 -3.232 -14.943 1.00 0.00 W1 H +ATOM 4490 H2 TIP3X 667 -30.605 -3.017 -15.610 1.00 0.00 W1 H +ATOM 4491 OH2 TIP3X 668 -17.615 -0.554 -14.330 1.00 0.00 W1 O +ATOM 4492 H1 TIP3X 668 -16.730 -0.882 -14.489 1.00 0.00 W1 H +ATOM 4493 H2 TIP3X 668 -17.845 -0.086 -15.133 1.00 0.00 W1 H +ATOM 4494 OH2 TIP3X 669 -16.223 -4.892 -2.253 1.00 0.00 W1 O +ATOM 4495 H1 TIP3X 669 -16.333 -3.943 -2.194 1.00 0.00 W1 H +ATOM 4496 H2 TIP3X 669 -17.116 -5.237 -2.263 1.00 0.00 W1 H +ATOM 4497 OH2 TIP3X 670 -29.537 -2.066 -12.634 1.00 0.00 W1 O +ATOM 4498 H1 TIP3X 670 -29.605 -1.230 -12.174 1.00 0.00 W1 H +ATOM 4499 H2 TIP3X 670 -30.432 -2.404 -12.651 1.00 0.00 W1 H +ATOM 4500 OH2 TIP3X 671 -16.957 -3.573 -14.990 1.00 0.00 W1 O +ATOM 4501 H1 TIP3X 671 -16.925 -3.653 -14.036 1.00 0.00 W1 H +ATOM 4502 H2 TIP3X 671 -17.790 -3.136 -15.166 1.00 0.00 W1 H +ATOM 4503 OH2 TIP3X 672 -20.586 -15.278 -2.106 1.00 0.00 W1 O +ATOM 4504 H1 TIP3X 672 -20.893 -14.530 -2.618 1.00 0.00 W1 H +ATOM 4505 H2 TIP3X 672 -20.532 -15.995 -2.738 1.00 0.00 W1 H +ATOM 4506 OH2 TIP3X 673 -26.372 -1.362 -4.077 1.00 0.00 W1 O +ATOM 4507 H1 TIP3X 673 -25.524 -1.124 -3.703 1.00 0.00 W1 H +ATOM 4508 H2 TIP3X 673 -26.161 -1.742 -4.930 1.00 0.00 W1 H +ATOM 4509 OH2 TIP3X 674 -27.906 -13.343 -0.726 1.00 0.00 W1 O +ATOM 4510 H1 TIP3X 674 -28.783 -13.254 -0.352 1.00 0.00 W1 H +ATOM 4511 H2 TIP3X 674 -27.843 -12.631 -1.363 1.00 0.00 W1 H +ATOM 4512 OH2 TIP3X 675 -21.709 -11.396 -14.996 1.00 0.00 W1 O +ATOM 4513 H1 TIP3X 675 -21.875 -11.099 -15.891 1.00 0.00 W1 H +ATOM 4514 H2 TIP3X 675 -22.580 -11.520 -14.619 1.00 0.00 W1 H +ATOM 4515 OH2 TIP3X 676 -16.311 -3.636 -11.948 1.00 0.00 W1 O +ATOM 4516 H1 TIP3X 676 -15.738 -4.373 -11.735 1.00 0.00 W1 H +ATOM 4517 H2 TIP3X 676 -16.642 -3.337 -11.101 1.00 0.00 W1 H +ATOM 4518 OH2 TIP3X 677 -21.050 -14.600 -15.019 1.00 0.00 W1 O +ATOM 4519 H1 TIP3X 677 -20.318 -13.984 -14.994 1.00 0.00 W1 H +ATOM 4520 H2 TIP3X 677 -20.809 -15.232 -15.695 1.00 0.00 W1 H +ATOM 4521 OH2 TIP3X 678 -16.518 -14.506 -4.754 1.00 0.00 W1 O +ATOM 4522 H1 TIP3X 678 -16.026 -15.136 -4.226 1.00 0.00 W1 H +ATOM 4523 H2 TIP3X 678 -15.918 -14.264 -5.459 1.00 0.00 W1 H +ATOM 4524 OH2 TIP3X 679 -29.011 -5.286 -8.676 1.00 0.00 W1 O +ATOM 4525 H1 TIP3X 679 -29.679 -4.962 -8.071 1.00 0.00 W1 H +ATOM 4526 H2 TIP3X 679 -28.219 -5.355 -8.144 1.00 0.00 W1 H +ATOM 4527 OH2 TIP3X 680 -24.014 -3.867 -1.565 1.00 0.00 W1 O +ATOM 4528 H1 TIP3X 680 -23.790 -4.245 -0.715 1.00 0.00 W1 H +ATOM 4529 H2 TIP3X 680 -24.621 -4.496 -1.956 1.00 0.00 W1 H +ATOM 4530 OH2 TIP3X 681 -20.535 -12.562 -6.153 1.00 0.00 W1 O +ATOM 4531 H1 TIP3X 681 -20.476 -12.744 -5.215 1.00 0.00 W1 H +ATOM 4532 H2 TIP3X 681 -21.473 -12.475 -6.321 1.00 0.00 W1 H +ATOM 4533 OH2 TIP3X 682 -24.343 -11.905 -1.974 1.00 0.00 W1 O +ATOM 4534 H1 TIP3X 682 -25.210 -11.975 -2.374 1.00 0.00 W1 H +ATOM 4535 H2 TIP3X 682 -24.398 -12.446 -1.186 1.00 0.00 W1 H +ATOM 4536 OH2 TIP3X 683 -16.857 -9.185 -0.221 1.00 0.00 W1 O +ATOM 4537 H1 TIP3X 683 -16.063 -9.718 -0.237 1.00 0.00 W1 H +ATOM 4538 H2 TIP3X 683 -17.151 -9.220 0.690 1.00 0.00 W1 H +ATOM 4539 OH2 TIP3X 684 -28.672 -15.318 -4.302 1.00 0.00 W1 O +ATOM 4540 H1 TIP3X 684 -28.898 -14.865 -5.115 1.00 0.00 W1 H +ATOM 4541 H2 TIP3X 684 -27.842 -15.755 -4.494 1.00 0.00 W1 H +ATOM 4542 OH2 TIP3X 685 -22.577 -14.860 -9.221 1.00 0.00 W1 O +ATOM 4543 H1 TIP3X 685 -22.095 -14.346 -9.868 1.00 0.00 W1 H +ATOM 4544 H2 TIP3X 685 -22.233 -14.567 -8.377 1.00 0.00 W1 H +ATOM 4545 OH2 TIP3X 686 -28.107 -10.269 -14.068 1.00 0.00 W1 O +ATOM 4546 H1 TIP3X 686 -27.685 -9.623 -14.634 1.00 0.00 W1 H +ATOM 4547 H2 TIP3X 686 -27.395 -10.844 -13.787 1.00 0.00 W1 H +ATOM 4548 OH2 TIP3X 687 -27.583 -9.612 -4.757 1.00 0.00 W1 O +ATOM 4549 H1 TIP3X 687 -27.667 -8.821 -4.225 1.00 0.00 W1 H +ATOM 4550 H2 TIP3X 687 -26.668 -9.616 -5.037 1.00 0.00 W1 H +ATOM 4551 OH2 TIP3X 688 -28.400 -8.894 -11.571 1.00 0.00 W1 O +ATOM 4552 H1 TIP3X 688 -28.337 -9.183 -12.482 1.00 0.00 W1 H +ATOM 4553 H2 TIP3X 688 -27.625 -8.349 -11.438 1.00 0.00 W1 H +ATOM 4554 OH2 TIP3X 689 -19.380 -12.324 -13.811 1.00 0.00 W1 O +ATOM 4555 H1 TIP3X 689 -20.087 -11.836 -14.231 1.00 0.00 W1 H +ATOM 4556 H2 TIP3X 689 -18.655 -12.280 -14.435 1.00 0.00 W1 H +ATOM 4557 OH2 TIP3X 690 -30.829 -11.438 -2.723 1.00 0.00 W1 O +ATOM 4558 H1 TIP3X 690 -31.734 -11.144 -2.612 1.00 0.00 W1 H +ATOM 4559 H2 TIP3X 690 -30.689 -12.057 -2.007 1.00 0.00 W1 H +ATOM 4560 OH2 TIP3X 691 -29.686 -14.600 -6.741 1.00 0.00 W1 O +ATOM 4561 H1 TIP3X 691 -29.579 -15.302 -7.383 1.00 0.00 W1 H +ATOM 4562 H2 TIP3X 691 -29.550 -13.795 -7.240 1.00 0.00 W1 H +ATOM 4563 OH2 TIP3X 692 -18.164 -10.972 -1.853 1.00 0.00 W1 O +ATOM 4564 H1 TIP3X 692 -17.853 -10.394 -1.157 1.00 0.00 W1 H +ATOM 4565 H2 TIP3X 692 -19.108 -11.036 -1.708 1.00 0.00 W1 H +ATOM 4566 OH2 TIP3X 693 -21.121 -10.966 -1.906 1.00 0.00 W1 O +ATOM 4567 H1 TIP3X 693 -21.481 -10.398 -2.587 1.00 0.00 W1 H +ATOM 4568 H2 TIP3X 693 -21.459 -11.837 -2.117 1.00 0.00 W1 H +ATOM 4569 OH2 TIP3X 694 -22.918 -10.497 -12.041 1.00 0.00 W1 O +ATOM 4570 H1 TIP3X 694 -22.829 -9.918 -12.797 1.00 0.00 W1 H +ATOM 4571 H2 TIP3X 694 -23.688 -11.032 -12.237 1.00 0.00 W1 H +ATOM 4572 OH2 TIP3X 695 -24.615 -11.166 -14.353 1.00 0.00 W1 O +ATOM 4573 H1 TIP3X 695 -25.053 -10.973 -15.183 1.00 0.00 W1 H +ATOM 4574 H2 TIP3X 695 -25.022 -11.977 -14.050 1.00 0.00 W1 H +ATOM 4575 OH2 TIP3X 696 -23.905 -14.104 -0.564 1.00 0.00 W1 O +ATOM 4576 H1 TIP3X 696 -24.371 -14.491 0.176 1.00 0.00 W1 H +ATOM 4577 H2 TIP3X 696 -22.991 -14.071 -0.282 1.00 0.00 W1 H +ATOM 4578 OH2 TIP3X 697 -18.342 -8.759 -3.883 1.00 0.00 W1 O +ATOM 4579 H1 TIP3X 697 -18.322 -9.409 -3.180 1.00 0.00 W1 H +ATOM 4580 H2 TIP3X 697 -19.176 -8.911 -4.327 1.00 0.00 W1 H +ATOM 4581 OH2 TIP3X 698 -30.267 -11.659 -15.413 1.00 0.00 W1 O +ATOM 4582 H1 TIP3X 698 -31.023 -11.851 -14.859 1.00 0.00 W1 H +ATOM 4583 H2 TIP3X 698 -29.733 -11.060 -14.891 1.00 0.00 W1 H +ATOM 4584 OH2 TIP3X 699 -30.348 -0.165 -14.926 1.00 0.00 W1 O +ATOM 4585 H1 TIP3X 699 -29.932 -0.913 -14.497 1.00 0.00 W1 H +ATOM 4586 H2 TIP3X 699 -30.335 0.528 -14.267 1.00 0.00 W1 H +ATOM 4587 OH2 TIP3X 700 -21.600 -12.005 -9.933 1.00 0.00 W1 O +ATOM 4588 H1 TIP3X 700 -21.937 -11.655 -10.758 1.00 0.00 W1 H +ATOM 4589 H2 TIP3X 700 -20.703 -12.273 -10.135 1.00 0.00 W1 H +ATOM 4590 OH2 TIP3X 701 -26.145 -12.695 -8.189 1.00 0.00 W1 O +ATOM 4591 H1 TIP3X 701 -27.087 -12.742 -8.348 1.00 0.00 W1 H +ATOM 4592 H2 TIP3X 701 -26.006 -11.820 -7.826 1.00 0.00 W1 H +ATOM 4593 OH2 TIP3X 702 -30.783 -11.569 -11.396 1.00 0.00 W1 O +ATOM 4594 H1 TIP3X 702 -31.057 -11.693 -10.487 1.00 0.00 W1 H +ATOM 4595 H2 TIP3X 702 -30.977 -10.650 -11.582 1.00 0.00 W1 H +ATOM 4596 OH2 TIP3X 703 -26.782 -12.242 -3.335 1.00 0.00 W1 O +ATOM 4597 H1 TIP3X 703 -26.760 -13.048 -3.851 1.00 0.00 W1 H +ATOM 4598 H2 TIP3X 703 -27.176 -11.594 -3.920 1.00 0.00 W1 H +ATOM 4599 OH2 TIP3X 704 -26.199 -5.706 -7.531 1.00 0.00 W1 O +ATOM 4600 H1 TIP3X 704 -26.271 -6.642 -7.718 1.00 0.00 W1 H +ATOM 4601 H2 TIP3X 704 -26.195 -5.653 -6.575 1.00 0.00 W1 H +ATOM 4602 OH2 TIP3X 705 -22.010 -8.687 -2.968 1.00 0.00 W1 O +ATOM 4603 H1 TIP3X 705 -21.598 -7.856 -2.732 1.00 0.00 W1 H +ATOM 4604 H2 TIP3X 705 -22.560 -8.477 -3.723 1.00 0.00 W1 H +ATOM 4605 OH2 TIP3X 706 -16.215 -13.321 -13.644 1.00 0.00 W1 O +ATOM 4606 H1 TIP3X 706 -15.780 -13.094 -12.822 1.00 0.00 W1 H +ATOM 4607 H2 TIP3X 706 -16.735 -14.096 -13.434 1.00 0.00 W1 H +ATOM 4608 OH2 TIP3X 707 -25.060 -7.361 -14.466 1.00 0.00 W1 O +ATOM 4609 H1 TIP3X 707 -25.349 -7.483 -13.561 1.00 0.00 W1 H +ATOM 4610 H2 TIP3X 707 -24.371 -8.014 -14.587 1.00 0.00 W1 H +ATOM 4611 OH2 TIP3X 708 -18.357 -8.845 -13.398 1.00 0.00 W1 O +ATOM 4612 H1 TIP3X 708 -19.222 -9.044 -13.039 1.00 0.00 W1 H +ATOM 4613 H2 TIP3X 708 -17.800 -8.724 -12.629 1.00 0.00 W1 H +ATOM 4614 OH2 TIP3X 709 -23.524 -8.591 -6.927 1.00 0.00 W1 O +ATOM 4615 H1 TIP3X 709 -23.427 -7.794 -6.406 1.00 0.00 W1 H +ATOM 4616 H2 TIP3X 709 -22.649 -8.980 -6.936 1.00 0.00 W1 H +ATOM 4617 OH2 TIP3X 710 -23.778 -8.209 -10.011 1.00 0.00 W1 O +ATOM 4618 H1 TIP3X 710 -23.157 -8.805 -10.429 1.00 0.00 W1 H +ATOM 4619 H2 TIP3X 710 -23.753 -8.446 -9.084 1.00 0.00 W1 H +ATOM 4620 OH2 TIP3X 711 -20.884 -6.593 -1.075 1.00 0.00 W1 O +ATOM 4621 H1 TIP3X 711 -21.562 -6.309 -0.462 1.00 0.00 W1 H +ATOM 4622 H2 TIP3X 711 -20.086 -6.634 -0.549 1.00 0.00 W1 H +ATOM 4623 OH2 TIP3X 712 -28.374 -7.178 -3.379 1.00 0.00 W1 O +ATOM 4624 H1 TIP3X 712 -27.857 -6.772 -2.683 1.00 0.00 W1 H +ATOM 4625 H2 TIP3X 712 -28.757 -6.441 -3.855 1.00 0.00 W1 H +ATOM 4626 OH2 TIP3X 713 -29.468 -9.216 -1.758 1.00 0.00 W1 O +ATOM 4627 H1 TIP3X 713 -29.672 -10.055 -2.170 1.00 0.00 W1 H +ATOM 4628 H2 TIP3X 713 -29.591 -8.570 -2.453 1.00 0.00 W1 H +ATOM 4629 OH2 TIP3X 714 -29.575 -8.342 -8.934 1.00 0.00 W1 O +ATOM 4630 H1 TIP3X 714 -29.219 -7.470 -9.104 1.00 0.00 W1 H +ATOM 4631 H2 TIP3X 714 -29.677 -8.733 -9.802 1.00 0.00 W1 H +ATOM 4632 OH2 TIP3X 715 -18.816 -6.078 -14.748 1.00 0.00 W1 O +ATOM 4633 H1 TIP3X 715 -18.111 -5.579 -15.160 1.00 0.00 W1 H +ATOM 4634 H2 TIP3X 715 -18.367 -6.708 -14.184 1.00 0.00 W1 H +ATOM 4635 OH2 TIP3X 716 -16.220 -8.731 -11.385 1.00 0.00 W1 O +ATOM 4636 H1 TIP3X 716 -16.507 -8.558 -10.489 1.00 0.00 W1 H +ATOM 4637 H2 TIP3X 716 -15.707 -7.959 -11.626 1.00 0.00 W1 H +ATOM 4638 OH2 TIP3X 717 -29.722 -9.614 -6.663 1.00 0.00 W1 O +ATOM 4639 H1 TIP3X 717 -29.628 -8.936 -7.332 1.00 0.00 W1 H +ATOM 4640 H2 TIP3X 717 -29.064 -9.395 -6.004 1.00 0.00 W1 H +ATOM 4641 OH2 TIP3X 718 -26.935 -1.107 -13.399 1.00 0.00 W1 O +ATOM 4642 H1 TIP3X 718 -27.164 -0.747 -14.256 1.00 0.00 W1 H +ATOM 4643 H2 TIP3X 718 -27.348 -1.970 -13.383 1.00 0.00 W1 H +ATOM 4644 OH2 TIP3X 719 -28.160 -5.874 -14.901 1.00 0.00 W1 O +ATOM 4645 H1 TIP3X 719 -28.976 -6.163 -15.310 1.00 0.00 W1 H +ATOM 4646 H2 TIP3X 719 -27.628 -6.667 -14.840 1.00 0.00 W1 H +ATOM 4647 OH2 TIP3X 720 -26.742 -5.034 -1.826 1.00 0.00 W1 O +ATOM 4648 H1 TIP3X 720 -27.315 -4.432 -2.301 1.00 0.00 W1 H +ATOM 4649 H2 TIP3X 720 -27.216 -5.230 -1.018 1.00 0.00 W1 H +ATOM 4650 OH2 TIP3X 721 -23.666 -0.291 -4.136 1.00 0.00 W1 O +ATOM 4651 H1 TIP3X 721 -23.349 -0.585 -3.282 1.00 0.00 W1 H +ATOM 4652 H2 TIP3X 721 -23.233 -0.869 -4.765 1.00 0.00 W1 H +ATOM 4653 OH2 TIP3X 722 -18.960 -0.050 -10.002 1.00 0.00 W1 O +ATOM 4654 H1 TIP3X 722 -19.373 -0.741 -10.521 1.00 0.00 W1 H +ATOM 4655 H2 TIP3X 722 -19.156 0.757 -10.479 1.00 0.00 W1 H +ATOM 4656 OH2 TIP3X 723 -22.382 -3.367 -12.750 1.00 0.00 W1 O +ATOM 4657 H1 TIP3X 723 -22.123 -2.582 -13.232 1.00 0.00 W1 H +ATOM 4658 H2 TIP3X 723 -22.952 -3.044 -12.052 1.00 0.00 W1 H +ATOM 4659 OH2 TIP3X 724 -22.365 -8.213 -13.679 1.00 0.00 W1 O +ATOM 4660 H1 TIP3X 724 -21.542 -8.140 -14.162 1.00 0.00 W1 H +ATOM 4661 H2 TIP3X 724 -22.358 -7.468 -13.077 1.00 0.00 W1 H +ATOM 4662 OH2 TIP3X 725 -18.964 -13.489 -3.888 1.00 0.00 W1 O +ATOM 4663 H1 TIP3X 725 -18.159 -13.720 -4.351 1.00 0.00 W1 H +ATOM 4664 H2 TIP3X 725 -18.673 -12.936 -3.163 1.00 0.00 W1 H +ATOM 4665 OH2 TIP3X 726 -30.999 -6.388 -12.482 1.00 0.00 W1 O +ATOM 4666 H1 TIP3X 726 -31.152 -6.295 -13.422 1.00 0.00 W1 H +ATOM 4667 H2 TIP3X 726 -30.045 -6.388 -12.393 1.00 0.00 W1 H +ATOM 4668 OH2 TIP3X 727 -20.237 -6.800 -5.886 1.00 0.00 W1 O +ATOM 4669 H1 TIP3X 727 -19.691 -6.138 -5.460 1.00 0.00 W1 H +ATOM 4670 H2 TIP3X 727 -19.778 -7.000 -6.701 1.00 0.00 W1 H +ATOM 4671 OH2 TIP3X 728 -21.414 -1.826 -14.808 1.00 0.00 W1 O +ATOM 4672 H1 TIP3X 728 -20.590 -1.791 -14.324 1.00 0.00 W1 H +ATOM 4673 H2 TIP3X 728 -21.211 -2.339 -15.591 1.00 0.00 W1 H +ATOM 4674 OH2 TIP3X 729 -21.422 -4.039 -3.157 1.00 0.00 W1 O +ATOM 4675 H1 TIP3X 729 -22.243 -3.792 -2.731 1.00 0.00 W1 H +ATOM 4676 H2 TIP3X 729 -21.651 -4.134 -4.082 1.00 0.00 W1 H +ATOM 4677 OH2 TIP3X 730 -24.797 -3.814 -11.271 1.00 0.00 W1 O +ATOM 4678 H1 TIP3X 730 -25.504 -3.667 -11.899 1.00 0.00 W1 H +ATOM 4679 H2 TIP3X 730 -25.134 -3.469 -10.444 1.00 0.00 W1 H +ATOM 4680 OH2 TIP3X 731 -28.232 -2.902 -2.559 1.00 0.00 W1 O +ATOM 4681 H1 TIP3X 731 -27.498 -2.291 -2.624 1.00 0.00 W1 H +ATOM 4682 H2 TIP3X 731 -28.544 -2.808 -1.660 1.00 0.00 W1 H +ATOM 4683 OH2 TIP3X 732 -28.642 -1.197 -8.458 1.00 0.00 W1 O +ATOM 4684 H1 TIP3X 732 -29.228 -1.938 -8.611 1.00 0.00 W1 H +ATOM 4685 H2 TIP3X 732 -28.199 -1.064 -9.296 1.00 0.00 W1 H +ATOM 4686 OH2 TIP3X 733 -20.289 -15.184 -7.377 1.00 0.00 W1 O +ATOM 4687 H1 TIP3X 733 -19.956 -15.259 -8.272 1.00 0.00 W1 H +ATOM 4688 H2 TIP3X 733 -20.334 -14.241 -7.216 1.00 0.00 W1 H +ATOM 4689 OH2 TIP3X 734 -23.051 -13.055 -7.143 1.00 0.00 W1 O +ATOM 4690 H1 TIP3X 734 -23.413 -12.566 -7.882 1.00 0.00 W1 H +ATOM 4691 H2 TIP3X 734 -23.782 -13.144 -6.533 1.00 0.00 W1 H +ATOM 4692 OH2 TIP3X 735 -24.332 -15.070 -13.215 1.00 0.00 W1 O +ATOM 4693 H1 TIP3X 735 -23.476 -15.326 -12.869 1.00 0.00 W1 H +ATOM 4694 H2 TIP3X 735 -24.850 -15.874 -13.190 1.00 0.00 W1 H +ATOM 4695 OH2 TIP3X 736 -21.580 -15.227 -12.171 1.00 0.00 W1 O +ATOM 4696 H1 TIP3X 736 -21.124 -15.963 -11.763 1.00 0.00 W1 H +ATOM 4697 H2 TIP3X 736 -21.173 -15.140 -13.033 1.00 0.00 W1 H +ATOM 4698 OH2 TIP3X 737 -26.941 -0.648 -0.717 1.00 0.00 W1 O +ATOM 4699 H1 TIP3X 737 -27.191 0.109 -1.246 1.00 0.00 W1 H +ATOM 4700 H2 TIP3X 737 -26.030 -0.817 -0.956 1.00 0.00 W1 H +ATOM 4701 OH2 TIP3X 738 -21.934 -1.954 -10.416 1.00 0.00 W1 O +ATOM 4702 H1 TIP3X 738 -21.273 -2.596 -10.156 1.00 0.00 W1 H +ATOM 4703 H2 TIP3X 738 -21.947 -1.319 -9.700 1.00 0.00 W1 H +ATOM 4704 OH2 TIP3X 739 -24.195 -1.051 -1.507 1.00 0.00 W1 O +ATOM 4705 H1 TIP3X 739 -23.977 -1.943 -1.236 1.00 0.00 W1 H +ATOM 4706 H2 TIP3X 739 -23.587 -0.497 -1.017 1.00 0.00 W1 H +ATOM 4707 OH2 TIP3X 740 -25.248 -12.933 -11.462 1.00 0.00 W1 O +ATOM 4708 H1 TIP3X 740 -24.591 -13.592 -11.685 1.00 0.00 W1 H +ATOM 4709 H2 TIP3X 740 -25.206 -12.864 -10.508 1.00 0.00 W1 H +ATOM 4710 OH2 TIP3X 741 -30.535 -14.595 -2.006 1.00 0.00 W1 O +ATOM 4711 H1 TIP3X 741 -29.787 -14.790 -2.570 1.00 0.00 W1 H +ATOM 4712 H2 TIP3X 741 -30.327 -15.020 -1.175 1.00 0.00 W1 H +ATOM 4713 OH2 TIP3X 742 -19.415 -1.867 -12.405 1.00 0.00 W1 O +ATOM 4714 H1 TIP3X 742 -19.271 -2.808 -12.302 1.00 0.00 W1 H +ATOM 4715 H2 TIP3X 742 -18.592 -1.535 -12.762 1.00 0.00 W1 H +ATOM 4716 OH2 TIP3X 743 -17.748 -15.101 -1.178 1.00 0.00 W1 O +ATOM 4717 H1 TIP3X 743 -18.361 -15.027 -1.908 1.00 0.00 W1 H +ATOM 4718 H2 TIP3X 743 -16.978 -14.606 -1.459 1.00 0.00 W1 H +ATOM 4719 OH2 TIP3X 744 -26.954 -0.888 -10.691 1.00 0.00 W1 O +ATOM 4720 H1 TIP3X 744 -26.961 -0.843 -11.647 1.00 0.00 W1 H +ATOM 4721 H2 TIP3X 744 -26.147 -0.442 -10.435 1.00 0.00 W1 H +ATOM 4722 OH2 TIP3X 745 -16.045 -1.950 -2.742 1.00 0.00 W1 O +ATOM 4723 H1 TIP3X 745 -16.768 -1.399 -2.441 1.00 0.00 W1 H +ATOM 4724 H2 TIP3X 745 -15.257 -1.450 -2.528 1.00 0.00 W1 H +ATOM 4725 OH2 TIP3X 746 -28.419 -12.628 -11.062 1.00 0.00 W1 O +ATOM 4726 H1 TIP3X 746 -29.063 -12.239 -11.654 1.00 0.00 W1 H +ATOM 4727 H2 TIP3X 746 -27.617 -12.131 -11.220 1.00 0.00 W1 H +ATOM 4728 OH2 TIP3X 747 -26.991 -4.029 -13.330 1.00 0.00 W1 O +ATOM 4729 H1 TIP3X 747 -27.030 -4.657 -14.052 1.00 0.00 W1 H +ATOM 4730 H2 TIP3X 747 -27.710 -4.282 -12.752 1.00 0.00 W1 H +ATOM 4731 OH2 TIP3X 748 -29.096 -4.501 4.309 1.00 0.00 W1 O +ATOM 4732 H1 TIP3X 748 -28.914 -4.577 5.246 1.00 0.00 W1 H +ATOM 4733 H2 TIP3X 748 -29.120 -3.558 4.145 1.00 0.00 W1 H +ATOM 4734 OH2 TIP3X 749 -26.010 -7.286 4.026 1.00 0.00 W1 O +ATOM 4735 H1 TIP3X 749 -25.979 -6.377 4.323 1.00 0.00 W1 H +ATOM 4736 H2 TIP3X 749 -25.502 -7.769 4.678 1.00 0.00 W1 H +ATOM 4737 OH2 TIP3X 750 -29.206 -2.887 10.448 1.00 0.00 W1 O +ATOM 4738 H1 TIP3X 750 -28.800 -2.684 11.291 1.00 0.00 W1 H +ATOM 4739 H2 TIP3X 750 -29.777 -3.633 10.630 1.00 0.00 W1 H +ATOM 4740 OH2 TIP3X 751 -21.831 -1.263 9.674 1.00 0.00 W1 O +ATOM 4741 H1 TIP3X 751 -21.530 -2.163 9.796 1.00 0.00 W1 H +ATOM 4742 H2 TIP3X 751 -21.205 -0.882 9.057 1.00 0.00 W1 H +ATOM 4743 OH2 TIP3X 752 -25.950 -1.731 8.683 1.00 0.00 W1 O +ATOM 4744 H1 TIP3X 752 -25.595 -0.882 8.420 1.00 0.00 W1 H +ATOM 4745 H2 TIP3X 752 -26.885 -1.672 8.487 1.00 0.00 W1 H +ATOM 4746 OH2 TIP3X 753 -21.109 -9.839 7.585 1.00 0.00 W1 O +ATOM 4747 H1 TIP3X 753 -21.186 -10.648 7.080 1.00 0.00 W1 H +ATOM 4748 H2 TIP3X 753 -20.166 -9.700 7.672 1.00 0.00 W1 H +ATOM 4749 OH2 TIP3X 754 -25.086 -13.741 9.947 1.00 0.00 W1 O +ATOM 4750 H1 TIP3X 754 -24.828 -14.479 10.500 1.00 0.00 W1 H +ATOM 4751 H2 TIP3X 754 -25.762 -14.098 9.371 1.00 0.00 W1 H +ATOM 4752 OH2 TIP3X 755 -16.842 -12.737 6.370 1.00 0.00 W1 O +ATOM 4753 H1 TIP3X 755 -17.150 -12.399 7.211 1.00 0.00 W1 H +ATOM 4754 H2 TIP3X 755 -16.774 -13.682 6.501 1.00 0.00 W1 H +ATOM 4755 OH2 TIP3X 756 -18.244 -11.542 8.324 1.00 0.00 W1 O +ATOM 4756 H1 TIP3X 756 -17.669 -11.770 9.054 1.00 0.00 W1 H +ATOM 4757 H2 TIP3X 756 -19.119 -11.796 8.618 1.00 0.00 W1 H +ATOM 4758 OH2 TIP3X 757 -25.198 -10.417 9.695 1.00 0.00 W1 O +ATOM 4759 H1 TIP3X 757 -24.695 -11.119 10.107 1.00 0.00 W1 H +ATOM 4760 H2 TIP3X 757 -24.541 -9.775 9.428 1.00 0.00 W1 H +ATOM 4761 OH2 TIP3X 758 -17.721 -9.369 6.592 1.00 0.00 W1 O +ATOM 4762 H1 TIP3X 758 -17.680 -10.268 6.916 1.00 0.00 W1 H +ATOM 4763 H2 TIP3X 758 -17.839 -8.836 7.379 1.00 0.00 W1 H +ATOM 4764 OH2 TIP3X 759 -19.037 -12.725 4.461 1.00 0.00 W1 O +ATOM 4765 H1 TIP3X 759 -18.212 -12.541 4.910 1.00 0.00 W1 H +ATOM 4766 H2 TIP3X 759 -18.960 -12.270 3.622 1.00 0.00 W1 H +ATOM 4767 OH2 TIP3X 760 -22.854 -6.754 10.532 1.00 0.00 W1 O +ATOM 4768 H1 TIP3X 760 -21.977 -6.732 10.149 1.00 0.00 W1 H +ATOM 4769 H2 TIP3X 760 -23.119 -5.835 10.578 1.00 0.00 W1 H +ATOM 4770 OH2 TIP3X 761 -23.704 -4.206 10.342 1.00 0.00 W1 O +ATOM 4771 H1 TIP3X 761 -23.728 -3.979 9.413 1.00 0.00 W1 H +ATOM 4772 H2 TIP3X 761 -24.624 -4.260 10.601 1.00 0.00 W1 H +ATOM 4773 OH2 TIP3X 762 -28.841 -12.324 7.180 1.00 0.00 W1 O +ATOM 4774 H1 TIP3X 762 -29.166 -11.445 7.371 1.00 0.00 W1 H +ATOM 4775 H2 TIP3X 762 -28.964 -12.427 6.237 1.00 0.00 W1 H +ATOM 4776 OH2 TIP3X 763 -26.685 -8.767 7.193 1.00 0.00 W1 O +ATOM 4777 H1 TIP3X 763 -27.368 -9.217 6.696 1.00 0.00 W1 H +ATOM 4778 H2 TIP3X 763 -26.199 -9.470 7.624 1.00 0.00 W1 H +ATOM 4779 OH2 TIP3X 764 -20.629 -3.842 9.589 1.00 0.00 W1 O +ATOM 4780 H1 TIP3X 764 -20.871 -4.428 8.872 1.00 0.00 W1 H +ATOM 4781 H2 TIP3X 764 -19.679 -3.931 9.662 1.00 0.00 W1 H +ATOM 4782 OH2 TIP3X 765 -24.459 -3.871 7.392 1.00 0.00 W1 O +ATOM 4783 H1 TIP3X 765 -25.031 -4.591 7.661 1.00 0.00 W1 H +ATOM 4784 H2 TIP3X 765 -24.920 -3.081 7.674 1.00 0.00 W1 H +ATOM 4785 OH2 TIP3X 766 -22.238 -13.420 11.962 1.00 0.00 W1 O +ATOM 4786 H1 TIP3X 766 -22.980 -12.940 12.329 1.00 0.00 W1 H +ATOM 4787 H2 TIP3X 766 -22.618 -14.232 11.628 1.00 0.00 W1 H +ATOM 4788 OH2 TIP3X 767 -26.886 -12.715 1.764 1.00 0.00 W1 O +ATOM 4789 H1 TIP3X 767 -26.984 -13.377 2.448 1.00 0.00 W1 H +ATOM 4790 H2 TIP3X 767 -27.069 -13.183 0.949 1.00 0.00 W1 H +ATOM 4791 OH2 TIP3X 768 -15.992 -11.793 9.953 1.00 0.00 W1 O +ATOM 4792 H1 TIP3X 768 -15.473 -11.124 9.506 1.00 0.00 W1 H +ATOM 4793 H2 TIP3X 768 -15.550 -11.917 10.793 1.00 0.00 W1 H +ATOM 4794 OH2 TIP3X 769 -29.934 -15.440 4.113 1.00 0.00 W1 O +ATOM 4795 H1 TIP3X 769 -29.209 -14.819 4.182 1.00 0.00 W1 H +ATOM 4796 H2 TIP3X 769 -30.306 -15.473 4.995 1.00 0.00 W1 H +ATOM 4797 OH2 TIP3X 770 -24.668 -9.205 14.100 1.00 0.00 W1 O +ATOM 4798 H1 TIP3X 770 -23.804 -8.806 13.998 1.00 0.00 W1 H +ATOM 4799 H2 TIP3X 770 -24.516 -10.142 13.977 1.00 0.00 W1 H +ATOM 4800 OH2 TIP3X 771 -21.502 -4.295 6.839 1.00 0.00 W1 O +ATOM 4801 H1 TIP3X 771 -21.408 -5.157 6.436 1.00 0.00 W1 H +ATOM 4802 H2 TIP3X 771 -22.435 -4.095 6.763 1.00 0.00 W1 H +ATOM 4803 OH2 TIP3X 772 -22.890 -6.011 4.370 1.00 0.00 W1 O +ATOM 4804 H1 TIP3X 772 -23.455 -6.625 4.840 1.00 0.00 W1 H +ATOM 4805 H2 TIP3X 772 -23.364 -5.180 4.398 1.00 0.00 W1 H +ATOM 4806 OH2 TIP3X 773 -30.352 -5.497 10.827 1.00 0.00 W1 O +ATOM 4807 H1 TIP3X 773 -30.887 -6.099 10.309 1.00 0.00 W1 H +ATOM 4808 H2 TIP3X 773 -30.823 -5.411 11.656 1.00 0.00 W1 H +ATOM 4809 OH2 TIP3X 774 -19.056 -6.477 5.195 1.00 0.00 W1 O +ATOM 4810 H1 TIP3X 774 -19.112 -7.391 4.918 1.00 0.00 W1 H +ATOM 4811 H2 TIP3X 774 -19.229 -5.974 4.399 1.00 0.00 W1 H +ATOM 4812 OH2 TIP3X 775 -18.759 -5.963 12.219 1.00 0.00 W1 O +ATOM 4813 H1 TIP3X 775 -19.662 -5.879 12.527 1.00 0.00 W1 H +ATOM 4814 H2 TIP3X 775 -18.591 -6.905 12.223 1.00 0.00 W1 H +ATOM 4815 OH2 TIP3X 776 -16.393 -8.003 10.025 1.00 0.00 W1 O +ATOM 4816 H1 TIP3X 776 -15.730 -8.684 9.906 1.00 0.00 W1 H +ATOM 4817 H2 TIP3X 776 -17.109 -8.443 10.484 1.00 0.00 W1 H +ATOM 4818 OH2 TIP3X 777 -27.248 -8.316 15.169 1.00 0.00 W1 O +ATOM 4819 H1 TIP3X 777 -27.777 -8.550 14.407 1.00 0.00 W1 H +ATOM 4820 H2 TIP3X 777 -26.353 -8.268 14.835 1.00 0.00 W1 H +ATOM 4821 OH2 TIP3X 778 -26.338 -5.110 10.731 1.00 0.00 W1 O +ATOM 4822 H1 TIP3X 778 -26.383 -5.665 11.509 1.00 0.00 W1 H +ATOM 4823 H2 TIP3X 778 -26.971 -4.412 10.897 1.00 0.00 W1 H +ATOM 4824 OH2 TIP3X 779 -19.579 -2.005 12.305 1.00 0.00 W1 O +ATOM 4825 H1 TIP3X 779 -20.286 -2.634 12.163 1.00 0.00 W1 H +ATOM 4826 H2 TIP3X 779 -19.250 -1.810 11.428 1.00 0.00 W1 H +ATOM 4827 OH2 TIP3X 780 -19.328 -3.469 14.702 1.00 0.00 W1 O +ATOM 4828 H1 TIP3X 780 -19.961 -4.075 14.318 1.00 0.00 W1 H +ATOM 4829 H2 TIP3X 780 -19.214 -2.788 14.038 1.00 0.00 W1 H +ATOM 4830 OH2 TIP3X 781 -25.161 -15.089 7.161 1.00 0.00 W1 O +ATOM 4831 H1 TIP3X 781 -25.453 -14.180 7.100 1.00 0.00 W1 H +ATOM 4832 H2 TIP3X 781 -24.329 -15.107 6.688 1.00 0.00 W1 H +ATOM 4833 OH2 TIP3X 782 -23.037 -5.143 0.815 1.00 0.00 W1 O +ATOM 4834 H1 TIP3X 782 -23.732 -5.765 1.030 1.00 0.00 W1 H +ATOM 4835 H2 TIP3X 782 -23.055 -4.507 1.530 1.00 0.00 W1 H +ATOM 4836 OH2 TIP3X 783 -15.657 -6.379 0.252 1.00 0.00 W1 O +ATOM 4837 H1 TIP3X 783 -15.920 -7.129 -0.282 1.00 0.00 W1 H +ATOM 4838 H2 TIP3X 783 -15.911 -5.615 -0.266 1.00 0.00 W1 H +ATOM 4839 OH2 TIP3X 784 -29.709 -2.683 -0.031 1.00 0.00 W1 O +ATOM 4840 H1 TIP3X 784 -29.263 -3.232 0.614 1.00 0.00 W1 H +ATOM 4841 H2 TIP3X 784 -30.605 -3.017 -0.053 1.00 0.00 W1 H +ATOM 4842 OH2 TIP3X 785 -16.223 -4.892 13.305 1.00 0.00 W1 O +ATOM 4843 H1 TIP3X 785 -16.333 -3.943 13.364 1.00 0.00 W1 H +ATOM 4844 H2 TIP3X 785 -17.116 -5.237 13.294 1.00 0.00 W1 H +ATOM 4845 OH2 TIP3X 786 -29.537 -2.066 2.923 1.00 0.00 W1 O +ATOM 4846 H1 TIP3X 786 -29.605 -1.230 3.384 1.00 0.00 W1 H +ATOM 4847 H2 TIP3X 786 -30.432 -2.404 2.907 1.00 0.00 W1 H +ATOM 4848 OH2 TIP3X 787 -20.586 -15.278 13.452 1.00 0.00 W1 O +ATOM 4849 H1 TIP3X 787 -20.893 -14.530 12.939 1.00 0.00 W1 H +ATOM 4850 H2 TIP3X 787 -20.532 -15.995 12.820 1.00 0.00 W1 H +ATOM 4851 OH2 TIP3X 788 -26.372 -1.362 11.481 1.00 0.00 W1 O +ATOM 4852 H1 TIP3X 788 -25.524 -1.124 11.854 1.00 0.00 W1 H +ATOM 4853 H2 TIP3X 788 -26.161 -1.742 10.628 1.00 0.00 W1 H +ATOM 4854 OH2 TIP3X 789 -27.906 -13.343 14.831 1.00 0.00 W1 O +ATOM 4855 H1 TIP3X 789 -28.783 -13.254 15.205 1.00 0.00 W1 H +ATOM 4856 H2 TIP3X 789 -27.843 -12.631 14.195 1.00 0.00 W1 H +ATOM 4857 OH2 TIP3X 790 -21.709 -11.396 0.562 1.00 0.00 W1 O +ATOM 4858 H1 TIP3X 790 -21.875 -11.099 -0.333 1.00 0.00 W1 H +ATOM 4859 H2 TIP3X 790 -22.580 -11.520 0.939 1.00 0.00 W1 H +ATOM 4860 OH2 TIP3X 791 -21.050 -14.600 0.539 1.00 0.00 W1 O +ATOM 4861 H1 TIP3X 791 -20.318 -13.984 0.563 1.00 0.00 W1 H +ATOM 4862 H2 TIP3X 791 -20.809 -15.232 -0.138 1.00 0.00 W1 H +ATOM 4863 OH2 TIP3X 792 -16.518 -14.506 10.804 1.00 0.00 W1 O +ATOM 4864 H1 TIP3X 792 -16.026 -15.136 11.331 1.00 0.00 W1 H +ATOM 4865 H2 TIP3X 792 -15.918 -14.264 10.098 1.00 0.00 W1 H +ATOM 4866 OH2 TIP3X 793 -29.011 -5.286 6.882 1.00 0.00 W1 O +ATOM 4867 H1 TIP3X 793 -29.679 -4.962 7.486 1.00 0.00 W1 H +ATOM 4868 H2 TIP3X 793 -28.219 -5.355 7.414 1.00 0.00 W1 H +ATOM 4869 OH2 TIP3X 794 -24.014 -3.867 13.992 1.00 0.00 W1 O +ATOM 4870 H1 TIP3X 794 -23.790 -4.245 14.843 1.00 0.00 W1 H +ATOM 4871 H2 TIP3X 794 -24.621 -4.496 13.602 1.00 0.00 W1 H +ATOM 4872 OH2 TIP3X 795 -20.535 -12.562 9.405 1.00 0.00 W1 O +ATOM 4873 H1 TIP3X 795 -20.476 -12.744 10.343 1.00 0.00 W1 H +ATOM 4874 H2 TIP3X 795 -21.473 -12.475 9.236 1.00 0.00 W1 H +ATOM 4875 OH2 TIP3X 796 -24.343 -11.905 13.584 1.00 0.00 W1 O +ATOM 4876 H1 TIP3X 796 -25.210 -11.975 13.184 1.00 0.00 W1 H +ATOM 4877 H2 TIP3X 796 -24.398 -12.446 14.372 1.00 0.00 W1 H +ATOM 4878 OH2 TIP3X 797 -16.857 -9.185 15.337 1.00 0.00 W1 O +ATOM 4879 H1 TIP3X 797 -16.063 -9.718 15.320 1.00 0.00 W1 H +ATOM 4880 H2 TIP3X 797 -17.151 -9.220 16.247 1.00 0.00 W1 H +ATOM 4881 OH2 TIP3X 798 -28.672 -15.318 11.255 1.00 0.00 W1 O +ATOM 4882 H1 TIP3X 798 -28.898 -14.865 10.443 1.00 0.00 W1 H +ATOM 4883 H2 TIP3X 798 -27.842 -15.755 11.064 1.00 0.00 W1 H +ATOM 4884 OH2 TIP3X 799 -22.577 -14.860 6.337 1.00 0.00 W1 O +ATOM 4885 H1 TIP3X 799 -22.095 -14.346 5.689 1.00 0.00 W1 H +ATOM 4886 H2 TIP3X 799 -22.233 -14.567 7.181 1.00 0.00 W1 H +ATOM 4887 OH2 TIP3X 800 -28.107 -10.269 1.490 1.00 0.00 W1 O +ATOM 4888 H1 TIP3X 800 -27.685 -9.623 0.924 1.00 0.00 W1 H +ATOM 4889 H2 TIP3X 800 -27.395 -10.844 1.771 1.00 0.00 W1 H +ATOM 4890 OH2 TIP3X 801 -27.583 -9.612 10.801 1.00 0.00 W1 O +ATOM 4891 H1 TIP3X 801 -27.667 -8.821 11.333 1.00 0.00 W1 H +ATOM 4892 H2 TIP3X 801 -26.668 -9.616 10.520 1.00 0.00 W1 H +ATOM 4893 OH2 TIP3X 802 -28.400 -8.894 3.986 1.00 0.00 W1 O +ATOM 4894 H1 TIP3X 802 -28.337 -9.183 3.076 1.00 0.00 W1 H +ATOM 4895 H2 TIP3X 802 -27.625 -8.349 4.119 1.00 0.00 W1 H +ATOM 4896 OH2 TIP3X 803 -19.380 -12.324 1.746 1.00 0.00 W1 O +ATOM 4897 H1 TIP3X 803 -20.087 -11.836 1.326 1.00 0.00 W1 H +ATOM 4898 H2 TIP3X 803 -18.655 -12.280 1.123 1.00 0.00 W1 H +ATOM 4899 OH2 TIP3X 804 -30.829 -11.438 12.834 1.00 0.00 W1 O +ATOM 4900 H1 TIP3X 804 -31.734 -11.144 12.945 1.00 0.00 W1 H +ATOM 4901 H2 TIP3X 804 -30.689 -12.057 13.551 1.00 0.00 W1 H +ATOM 4902 OH2 TIP3X 805 -29.686 -14.600 8.817 1.00 0.00 W1 O +ATOM 4903 H1 TIP3X 805 -29.579 -15.302 8.174 1.00 0.00 W1 H +ATOM 4904 H2 TIP3X 805 -29.550 -13.795 8.318 1.00 0.00 W1 H +ATOM 4905 OH2 TIP3X 806 -18.164 -10.972 13.704 1.00 0.00 W1 O +ATOM 4906 H1 TIP3X 806 -17.853 -10.394 14.400 1.00 0.00 W1 H +ATOM 4907 H2 TIP3X 806 -19.108 -11.036 13.849 1.00 0.00 W1 H +ATOM 4908 OH2 TIP3X 807 -21.121 -10.966 13.651 1.00 0.00 W1 O +ATOM 4909 H1 TIP3X 807 -21.481 -10.398 12.970 1.00 0.00 W1 H +ATOM 4910 H2 TIP3X 807 -21.459 -11.837 13.440 1.00 0.00 W1 H +ATOM 4911 OH2 TIP3X 808 -22.918 -10.497 3.517 1.00 0.00 W1 O +ATOM 4912 H1 TIP3X 808 -22.829 -9.918 2.760 1.00 0.00 W1 H +ATOM 4913 H2 TIP3X 808 -23.688 -11.032 3.320 1.00 0.00 W1 H +ATOM 4914 OH2 TIP3X 809 -24.615 -11.166 1.204 1.00 0.00 W1 O +ATOM 4915 H1 TIP3X 809 -25.053 -10.973 0.375 1.00 0.00 W1 H +ATOM 4916 H2 TIP3X 809 -25.022 -11.977 1.508 1.00 0.00 W1 H +ATOM 4917 OH2 TIP3X 810 -23.905 -14.104 14.993 1.00 0.00 W1 O +ATOM 4918 H1 TIP3X 810 -24.371 -14.491 15.734 1.00 0.00 W1 H +ATOM 4919 H2 TIP3X 810 -22.991 -14.071 15.276 1.00 0.00 W1 H +ATOM 4920 OH2 TIP3X 811 -18.342 -8.759 11.675 1.00 0.00 W1 O +ATOM 4921 H1 TIP3X 811 -18.322 -9.409 12.378 1.00 0.00 W1 H +ATOM 4922 H2 TIP3X 811 -19.176 -8.911 11.231 1.00 0.00 W1 H +ATOM 4923 OH2 TIP3X 812 -30.267 -11.659 0.144 1.00 0.00 W1 O +ATOM 4924 H1 TIP3X 812 -31.023 -11.851 0.698 1.00 0.00 W1 H +ATOM 4925 H2 TIP3X 812 -29.733 -11.060 0.667 1.00 0.00 W1 H +ATOM 4926 OH2 TIP3X 813 -30.348 -0.165 0.631 1.00 0.00 W1 O +ATOM 4927 H1 TIP3X 813 -29.932 -0.913 1.060 1.00 0.00 W1 H +ATOM 4928 H2 TIP3X 813 -30.335 0.528 1.291 1.00 0.00 W1 H +ATOM 4929 OH2 TIP3X 814 -21.600 -12.005 5.624 1.00 0.00 W1 O +ATOM 4930 H1 TIP3X 814 -21.937 -11.655 4.800 1.00 0.00 W1 H +ATOM 4931 H2 TIP3X 814 -20.703 -12.273 5.423 1.00 0.00 W1 H +ATOM 4932 OH2 TIP3X 815 -26.145 -12.695 7.368 1.00 0.00 W1 O +ATOM 4933 H1 TIP3X 815 -27.087 -12.742 7.209 1.00 0.00 W1 H +ATOM 4934 H2 TIP3X 815 -26.006 -11.820 7.732 1.00 0.00 W1 H +ATOM 4935 OH2 TIP3X 816 -30.783 -11.569 4.162 1.00 0.00 W1 O +ATOM 4936 H1 TIP3X 816 -31.057 -11.693 5.070 1.00 0.00 W1 H +ATOM 4937 H2 TIP3X 816 -30.977 -10.650 3.976 1.00 0.00 W1 H +ATOM 4938 OH2 TIP3X 817 -26.782 -12.242 12.222 1.00 0.00 W1 O +ATOM 4939 H1 TIP3X 817 -26.760 -13.048 11.706 1.00 0.00 W1 H +ATOM 4940 H2 TIP3X 817 -27.176 -11.594 11.638 1.00 0.00 W1 H +ATOM 4941 OH2 TIP3X 818 -26.199 -5.706 8.027 1.00 0.00 W1 O +ATOM 4942 H1 TIP3X 818 -26.271 -6.642 7.839 1.00 0.00 W1 H +ATOM 4943 H2 TIP3X 818 -26.195 -5.653 8.983 1.00 0.00 W1 H +ATOM 4944 OH2 TIP3X 819 -22.010 -8.687 12.589 1.00 0.00 W1 O +ATOM 4945 H1 TIP3X 819 -21.598 -7.856 12.826 1.00 0.00 W1 H +ATOM 4946 H2 TIP3X 819 -22.560 -8.477 11.835 1.00 0.00 W1 H +ATOM 4947 OH2 TIP3X 820 -16.215 -13.321 1.914 1.00 0.00 W1 O +ATOM 4948 H1 TIP3X 820 -15.780 -13.094 2.736 1.00 0.00 W1 H +ATOM 4949 H2 TIP3X 820 -16.735 -14.096 2.123 1.00 0.00 W1 H +ATOM 4950 OH2 TIP3X 821 -25.060 -7.361 1.092 1.00 0.00 W1 O +ATOM 4951 H1 TIP3X 821 -25.349 -7.483 1.996 1.00 0.00 W1 H +ATOM 4952 H2 TIP3X 821 -24.371 -8.014 0.970 1.00 0.00 W1 H +ATOM 4953 OH2 TIP3X 822 -18.357 -8.845 2.160 1.00 0.00 W1 O +ATOM 4954 H1 TIP3X 822 -19.222 -9.044 2.519 1.00 0.00 W1 H +ATOM 4955 H2 TIP3X 822 -17.800 -8.724 2.929 1.00 0.00 W1 H +ATOM 4956 OH2 TIP3X 823 -23.524 -8.591 8.630 1.00 0.00 W1 O +ATOM 4957 H1 TIP3X 823 -23.427 -7.794 9.152 1.00 0.00 W1 H +ATOM 4958 H2 TIP3X 823 -22.649 -8.980 8.622 1.00 0.00 W1 H +ATOM 4959 OH2 TIP3X 824 -23.778 -8.209 5.546 1.00 0.00 W1 O +ATOM 4960 H1 TIP3X 824 -23.157 -8.805 5.128 1.00 0.00 W1 H +ATOM 4961 H2 TIP3X 824 -23.753 -8.446 6.473 1.00 0.00 W1 H +ATOM 4962 OH2 TIP3X 825 -20.884 -6.593 14.482 1.00 0.00 W1 O +ATOM 4963 H1 TIP3X 825 -21.562 -6.309 15.095 1.00 0.00 W1 H +ATOM 4964 H2 TIP3X 825 -20.086 -6.634 15.009 1.00 0.00 W1 H +ATOM 4965 OH2 TIP3X 826 -28.374 -7.178 12.178 1.00 0.00 W1 O +ATOM 4966 H1 TIP3X 826 -27.857 -6.772 12.874 1.00 0.00 W1 H +ATOM 4967 H2 TIP3X 826 -28.757 -6.441 11.703 1.00 0.00 W1 H +ATOM 4968 OH2 TIP3X 827 -29.468 -9.216 13.800 1.00 0.00 W1 O +ATOM 4969 H1 TIP3X 827 -29.672 -10.055 13.387 1.00 0.00 W1 H +ATOM 4970 H2 TIP3X 827 -29.591 -8.570 13.104 1.00 0.00 W1 H +ATOM 4971 OH2 TIP3X 828 -29.575 -8.342 6.623 1.00 0.00 W1 O +ATOM 4972 H1 TIP3X 828 -29.219 -7.470 6.453 1.00 0.00 W1 H +ATOM 4973 H2 TIP3X 828 -29.677 -8.733 5.755 1.00 0.00 W1 H +ATOM 4974 OH2 TIP3X 829 -29.722 -9.614 8.894 1.00 0.00 W1 O +ATOM 4975 H1 TIP3X 829 -29.628 -8.936 8.226 1.00 0.00 W1 H +ATOM 4976 H2 TIP3X 829 -29.064 -9.395 9.553 1.00 0.00 W1 H +ATOM 4977 OH2 TIP3X 830 -26.935 -1.107 2.158 1.00 0.00 W1 O +ATOM 4978 H1 TIP3X 830 -27.164 -0.747 1.301 1.00 0.00 W1 H +ATOM 4979 H2 TIP3X 830 -27.348 -1.970 2.174 1.00 0.00 W1 H +ATOM 4980 OH2 TIP3X 831 -28.160 -5.874 0.656 1.00 0.00 W1 O +ATOM 4981 H1 TIP3X 831 -28.976 -6.163 0.248 1.00 0.00 W1 H +ATOM 4982 H2 TIP3X 831 -27.628 -6.667 0.718 1.00 0.00 W1 H +ATOM 4983 OH2 TIP3X 832 -26.742 -5.034 13.731 1.00 0.00 W1 O +ATOM 4984 H1 TIP3X 832 -27.315 -4.432 13.257 1.00 0.00 W1 H +ATOM 4985 H2 TIP3X 832 -27.216 -5.230 14.539 1.00 0.00 W1 H +ATOM 4986 OH2 TIP3X 833 -23.666 -0.291 11.422 1.00 0.00 W1 O +ATOM 4987 H1 TIP3X 833 -23.349 -0.585 12.275 1.00 0.00 W1 H +ATOM 4988 H2 TIP3X 833 -23.233 -0.869 10.793 1.00 0.00 W1 H +ATOM 4989 OH2 TIP3X 834 -22.365 -8.213 1.878 1.00 0.00 W1 O +ATOM 4990 H1 TIP3X 834 -21.542 -8.140 1.396 1.00 0.00 W1 H +ATOM 4991 H2 TIP3X 834 -22.358 -7.468 2.480 1.00 0.00 W1 H +ATOM 4992 OH2 TIP3X 835 -18.964 -13.489 11.670 1.00 0.00 W1 O +ATOM 4993 H1 TIP3X 835 -18.159 -13.720 11.206 1.00 0.00 W1 H +ATOM 4994 H2 TIP3X 835 -18.673 -12.936 12.395 1.00 0.00 W1 H +ATOM 4995 OH2 TIP3X 836 -30.999 -6.388 3.076 1.00 0.00 W1 O +ATOM 4996 H1 TIP3X 836 -31.152 -6.295 2.136 1.00 0.00 W1 H +ATOM 4997 H2 TIP3X 836 -30.045 -6.388 3.165 1.00 0.00 W1 H +ATOM 4998 OH2 TIP3X 837 -20.237 -6.800 9.672 1.00 0.00 W1 O +ATOM 4999 H1 TIP3X 837 -19.691 -6.138 10.098 1.00 0.00 W1 H +ATOM 5000 H2 TIP3X 837 -19.778 -7.000 8.856 1.00 0.00 W1 H +ATOM 5001 OH2 TIP3X 838 -21.422 -4.039 12.400 1.00 0.00 W1 O +ATOM 5002 H1 TIP3X 838 -22.243 -3.792 12.826 1.00 0.00 W1 H +ATOM 5003 H2 TIP3X 838 -21.651 -4.134 11.476 1.00 0.00 W1 H +ATOM 5004 OH2 TIP3X 839 -24.797 -3.814 4.287 1.00 0.00 W1 O +ATOM 5005 H1 TIP3X 839 -25.504 -3.667 3.659 1.00 0.00 W1 H +ATOM 5006 H2 TIP3X 839 -25.134 -3.469 5.114 1.00 0.00 W1 H +ATOM 5007 OH2 TIP3X 840 -28.232 -2.902 12.998 1.00 0.00 W1 O +ATOM 5008 H1 TIP3X 840 -27.498 -2.291 12.933 1.00 0.00 W1 H +ATOM 5009 H2 TIP3X 840 -28.544 -2.808 13.898 1.00 0.00 W1 H +ATOM 5010 OH2 TIP3X 841 -28.642 -1.197 7.100 1.00 0.00 W1 O +ATOM 5011 H1 TIP3X 841 -29.228 -1.938 6.946 1.00 0.00 W1 H +ATOM 5012 H2 TIP3X 841 -28.199 -1.064 6.261 1.00 0.00 W1 H +ATOM 5013 OH2 TIP3X 842 -20.289 -15.184 8.180 1.00 0.00 W1 O +ATOM 5014 H1 TIP3X 842 -19.956 -15.259 7.286 1.00 0.00 W1 H +ATOM 5015 H2 TIP3X 842 -20.334 -14.241 8.341 1.00 0.00 W1 H +ATOM 5016 OH2 TIP3X 843 -23.051 -13.055 8.415 1.00 0.00 W1 O +ATOM 5017 H1 TIP3X 843 -23.413 -12.566 7.676 1.00 0.00 W1 H +ATOM 5018 H2 TIP3X 843 -23.782 -13.144 9.025 1.00 0.00 W1 H +ATOM 5019 OH2 TIP3X 844 -24.332 -15.070 2.343 1.00 0.00 W1 O +ATOM 5020 H1 TIP3X 844 -23.476 -15.326 2.688 1.00 0.00 W1 H +ATOM 5021 H2 TIP3X 844 -24.850 -15.874 2.368 1.00 0.00 W1 H +ATOM 5022 OH2 TIP3X 845 -21.580 -15.227 3.386 1.00 0.00 W1 O +ATOM 5023 H1 TIP3X 845 -21.124 -15.963 3.795 1.00 0.00 W1 H +ATOM 5024 H2 TIP3X 845 -21.173 -15.140 2.524 1.00 0.00 W1 H +ATOM 5025 OH2 TIP3X 846 -26.941 -0.648 14.841 1.00 0.00 W1 O +ATOM 5026 H1 TIP3X 846 -27.191 0.109 14.311 1.00 0.00 W1 H +ATOM 5027 H2 TIP3X 846 -26.030 -0.817 14.602 1.00 0.00 W1 H +ATOM 5028 OH2 TIP3X 847 -24.195 -1.051 14.051 1.00 0.00 W1 O +ATOM 5029 H1 TIP3X 847 -23.977 -1.943 14.321 1.00 0.00 W1 H +ATOM 5030 H2 TIP3X 847 -23.587 -0.497 14.540 1.00 0.00 W1 H +ATOM 5031 OH2 TIP3X 848 -25.248 -12.933 4.095 1.00 0.00 W1 O +ATOM 5032 H1 TIP3X 848 -24.591 -13.592 3.873 1.00 0.00 W1 H +ATOM 5033 H2 TIP3X 848 -25.206 -12.864 5.049 1.00 0.00 W1 H +ATOM 5034 OH2 TIP3X 849 -30.535 -14.595 13.551 1.00 0.00 W1 O +ATOM 5035 H1 TIP3X 849 -29.787 -14.790 12.987 1.00 0.00 W1 H +ATOM 5036 H2 TIP3X 849 -30.327 -15.020 14.383 1.00 0.00 W1 H +ATOM 5037 OH2 TIP3X 850 -17.748 -15.101 14.380 1.00 0.00 W1 O +ATOM 5038 H1 TIP3X 850 -18.361 -15.027 13.649 1.00 0.00 W1 H +ATOM 5039 H2 TIP3X 850 -16.978 -14.606 14.098 1.00 0.00 W1 H +ATOM 5040 OH2 TIP3X 851 -26.954 -0.888 4.866 1.00 0.00 W1 O +ATOM 5041 H1 TIP3X 851 -26.961 -0.843 3.910 1.00 0.00 W1 H +ATOM 5042 H2 TIP3X 851 -26.147 -0.442 5.122 1.00 0.00 W1 H +ATOM 5043 OH2 TIP3X 852 -28.419 -12.628 4.496 1.00 0.00 W1 O +ATOM 5044 H1 TIP3X 852 -29.063 -12.239 3.903 1.00 0.00 W1 H +ATOM 5045 H2 TIP3X 852 -27.617 -12.131 4.338 1.00 0.00 W1 H +ATOM 5046 OH2 TIP3X 853 -26.991 -4.029 2.227 1.00 0.00 W1 O +ATOM 5047 H1 TIP3X 853 -27.030 -4.657 1.506 1.00 0.00 W1 H +ATOM 5048 H2 TIP3X 853 -27.710 -4.282 2.805 1.00 0.00 W1 H +ATOM 5049 OH2 TIP3X 854 -29.096 -4.501 19.866 1.00 0.00 W1 O +ATOM 5050 H1 TIP3X 854 -28.914 -4.577 20.803 1.00 0.00 W1 H +ATOM 5051 H2 TIP3X 854 -29.120 -3.558 19.702 1.00 0.00 W1 H +ATOM 5052 OH2 TIP3X 855 -17.994 -7.010 23.605 1.00 0.00 W1 O +ATOM 5053 H1 TIP3X 855 -17.759 -6.745 22.715 1.00 0.00 W1 H +ATOM 5054 H2 TIP3X 855 -17.165 -7.273 24.003 1.00 0.00 W1 H +ATOM 5055 OH2 TIP3X 856 -26.010 -7.286 19.583 1.00 0.00 W1 O +ATOM 5056 H1 TIP3X 856 -25.979 -6.377 19.880 1.00 0.00 W1 H +ATOM 5057 H2 TIP3X 856 -25.502 -7.769 20.235 1.00 0.00 W1 H +ATOM 5058 OH2 TIP3X 857 -18.206 -3.127 21.727 1.00 0.00 W1 O +ATOM 5059 H1 TIP3X 857 -18.481 -2.637 22.502 1.00 0.00 W1 H +ATOM 5060 H2 TIP3X 857 -18.732 -3.927 21.750 1.00 0.00 W1 H +ATOM 5061 OH2 TIP3X 858 -19.690 -4.684 18.770 1.00 0.00 W1 O +ATOM 5062 H1 TIP3X 858 -19.528 -4.912 17.855 1.00 0.00 W1 H +ATOM 5063 H2 TIP3X 858 -20.619 -4.455 18.799 1.00 0.00 W1 H +ATOM 5064 OH2 TIP3X 859 -15.842 -4.152 23.554 1.00 0.00 W1 O +ATOM 5065 H1 TIP3X 859 -16.394 -4.069 22.777 1.00 0.00 W1 H +ATOM 5066 H2 TIP3X 859 -16.453 -4.368 24.259 1.00 0.00 W1 H +ATOM 5067 OH2 TIP3X 860 -29.206 -2.887 26.005 1.00 0.00 W1 O +ATOM 5068 H1 TIP3X 860 -28.800 -2.684 26.848 1.00 0.00 W1 H +ATOM 5069 H2 TIP3X 860 -29.777 -3.633 26.188 1.00 0.00 W1 H +ATOM 5070 OH2 TIP3X 861 -21.831 -1.263 25.231 1.00 0.00 W1 O +ATOM 5071 H1 TIP3X 861 -21.530 -2.163 25.353 1.00 0.00 W1 H +ATOM 5072 H2 TIP3X 861 -21.205 -0.882 24.614 1.00 0.00 W1 H +ATOM 5073 OH2 TIP3X 862 -18.398 -1.306 25.111 1.00 0.00 W1 O +ATOM 5074 H1 TIP3X 862 -18.834 -0.483 24.892 1.00 0.00 W1 H +ATOM 5075 H2 TIP3X 862 -17.469 -1.080 25.161 1.00 0.00 W1 H +ATOM 5076 OH2 TIP3X 863 -25.950 -1.731 24.241 1.00 0.00 W1 O +ATOM 5077 H1 TIP3X 863 -25.595 -0.882 23.977 1.00 0.00 W1 H +ATOM 5078 H2 TIP3X 863 -26.885 -1.672 24.045 1.00 0.00 W1 H +ATOM 5079 OH2 TIP3X 864 -21.109 -9.839 23.142 1.00 0.00 W1 O +ATOM 5080 H1 TIP3X 864 -21.186 -10.648 22.638 1.00 0.00 W1 H +ATOM 5081 H2 TIP3X 864 -20.166 -9.700 23.230 1.00 0.00 W1 H +ATOM 5082 OH2 TIP3X 865 -25.086 -13.741 25.504 1.00 0.00 W1 O +ATOM 5083 H1 TIP3X 865 -24.828 -14.479 26.057 1.00 0.00 W1 H +ATOM 5084 H2 TIP3X 865 -25.762 -14.098 24.929 1.00 0.00 W1 H +ATOM 5085 OH2 TIP3X 866 -16.842 -12.737 21.927 1.00 0.00 W1 O +ATOM 5086 H1 TIP3X 866 -17.150 -12.399 22.768 1.00 0.00 W1 H +ATOM 5087 H2 TIP3X 866 -16.774 -13.682 22.059 1.00 0.00 W1 H +ATOM 5088 OH2 TIP3X 867 -18.244 -11.542 23.881 1.00 0.00 W1 O +ATOM 5089 H1 TIP3X 867 -17.669 -11.770 24.612 1.00 0.00 W1 H +ATOM 5090 H2 TIP3X 867 -19.119 -11.796 24.176 1.00 0.00 W1 H +ATOM 5091 OH2 TIP3X 868 -25.198 -10.417 25.252 1.00 0.00 W1 O +ATOM 5092 H1 TIP3X 868 -24.695 -11.119 25.664 1.00 0.00 W1 H +ATOM 5093 H2 TIP3X 868 -24.541 -9.775 24.986 1.00 0.00 W1 H +ATOM 5094 OH2 TIP3X 869 -17.721 -9.369 22.150 1.00 0.00 W1 O +ATOM 5095 H1 TIP3X 869 -17.680 -10.268 22.474 1.00 0.00 W1 H +ATOM 5096 H2 TIP3X 869 -17.839 -8.836 22.936 1.00 0.00 W1 H +ATOM 5097 OH2 TIP3X 870 -19.037 -12.725 20.018 1.00 0.00 W1 O +ATOM 5098 H1 TIP3X 870 -18.212 -12.541 20.467 1.00 0.00 W1 H +ATOM 5099 H2 TIP3X 870 -18.960 -12.270 19.179 1.00 0.00 W1 H +ATOM 5100 OH2 TIP3X 871 -22.854 -6.754 26.090 1.00 0.00 W1 O +ATOM 5101 H1 TIP3X 871 -21.977 -6.732 25.707 1.00 0.00 W1 H +ATOM 5102 H2 TIP3X 871 -23.119 -5.835 26.136 1.00 0.00 W1 H +ATOM 5103 OH2 TIP3X 872 -23.704 -4.206 25.900 1.00 0.00 W1 O +ATOM 5104 H1 TIP3X 872 -23.728 -3.979 24.970 1.00 0.00 W1 H +ATOM 5105 H2 TIP3X 872 -24.624 -4.260 26.158 1.00 0.00 W1 H +ATOM 5106 OH2 TIP3X 873 -28.841 -12.324 22.738 1.00 0.00 W1 O +ATOM 5107 H1 TIP3X 873 -29.166 -11.445 22.929 1.00 0.00 W1 H +ATOM 5108 H2 TIP3X 873 -28.964 -12.427 21.794 1.00 0.00 W1 H +ATOM 5109 OH2 TIP3X 874 -26.685 -8.767 22.750 1.00 0.00 W1 O +ATOM 5110 H1 TIP3X 874 -27.368 -9.217 22.253 1.00 0.00 W1 H +ATOM 5111 H2 TIP3X 874 -26.199 -9.470 23.182 1.00 0.00 W1 H +ATOM 5112 OH2 TIP3X 875 -20.629 -3.842 25.147 1.00 0.00 W1 O +ATOM 5113 H1 TIP3X 875 -20.871 -4.428 24.430 1.00 0.00 W1 H +ATOM 5114 H2 TIP3X 875 -19.679 -3.931 25.219 1.00 0.00 W1 H +ATOM 5115 OH2 TIP3X 876 -16.331 -0.208 21.927 1.00 0.00 W1 O +ATOM 5116 H1 TIP3X 876 -16.336 -0.676 22.762 1.00 0.00 W1 H +ATOM 5117 H2 TIP3X 876 -17.212 -0.337 21.574 1.00 0.00 W1 H +ATOM 5118 OH2 TIP3X 877 -24.459 -3.871 22.949 1.00 0.00 W1 O +ATOM 5119 H1 TIP3X 877 -25.031 -4.591 23.218 1.00 0.00 W1 H +ATOM 5120 H2 TIP3X 877 -24.920 -3.081 23.232 1.00 0.00 W1 H +ATOM 5121 OH2 TIP3X 878 -22.238 -13.420 27.520 1.00 0.00 W1 O +ATOM 5122 H1 TIP3X 878 -22.980 -12.940 27.887 1.00 0.00 W1 H +ATOM 5123 H2 TIP3X 878 -22.618 -14.232 27.185 1.00 0.00 W1 H +ATOM 5124 OH2 TIP3X 879 -26.886 -12.715 17.321 1.00 0.00 W1 O +ATOM 5125 H1 TIP3X 879 -26.984 -13.377 18.006 1.00 0.00 W1 H +ATOM 5126 H2 TIP3X 879 -27.069 -13.183 16.507 1.00 0.00 W1 H +ATOM 5127 OH2 TIP3X 880 -15.992 -11.793 25.511 1.00 0.00 W1 O +ATOM 5128 H1 TIP3X 880 -15.473 -11.124 25.063 1.00 0.00 W1 H +ATOM 5129 H2 TIP3X 880 -15.550 -11.917 26.351 1.00 0.00 W1 H +ATOM 5130 OH2 TIP3X 881 -29.934 -15.440 19.671 1.00 0.00 W1 O +ATOM 5131 H1 TIP3X 881 -29.209 -14.819 19.740 1.00 0.00 W1 H +ATOM 5132 H2 TIP3X 881 -30.306 -15.473 20.552 1.00 0.00 W1 H +ATOM 5133 OH2 TIP3X 882 -24.668 -9.205 29.657 1.00 0.00 W1 O +ATOM 5134 H1 TIP3X 882 -23.804 -8.806 29.556 1.00 0.00 W1 H +ATOM 5135 H2 TIP3X 882 -24.516 -10.142 29.534 1.00 0.00 W1 H +ATOM 5136 OH2 TIP3X 883 -21.502 -4.295 22.397 1.00 0.00 W1 O +ATOM 5137 H1 TIP3X 883 -21.408 -5.157 21.993 1.00 0.00 W1 H +ATOM 5138 H2 TIP3X 883 -22.435 -4.095 22.321 1.00 0.00 W1 H +ATOM 5139 OH2 TIP3X 884 -22.890 -6.011 19.928 1.00 0.00 W1 O +ATOM 5140 H1 TIP3X 884 -23.455 -6.625 20.397 1.00 0.00 W1 H +ATOM 5141 H2 TIP3X 884 -23.364 -5.180 19.956 1.00 0.00 W1 H +ATOM 5142 OH2 TIP3X 885 -30.352 -5.497 26.385 1.00 0.00 W1 O +ATOM 5143 H1 TIP3X 885 -30.887 -6.099 25.867 1.00 0.00 W1 H +ATOM 5144 H2 TIP3X 885 -30.823 -5.411 27.214 1.00 0.00 W1 H +ATOM 5145 OH2 TIP3X 886 -19.056 -6.477 20.752 1.00 0.00 W1 O +ATOM 5146 H1 TIP3X 886 -19.112 -7.391 20.476 1.00 0.00 W1 H +ATOM 5147 H2 TIP3X 886 -19.229 -5.974 19.956 1.00 0.00 W1 H +ATOM 5148 OH2 TIP3X 887 -18.759 -5.963 27.777 1.00 0.00 W1 O +ATOM 5149 H1 TIP3X 887 -19.662 -5.879 28.084 1.00 0.00 W1 H +ATOM 5150 H2 TIP3X 887 -18.591 -6.905 27.780 1.00 0.00 W1 H +ATOM 5151 OH2 TIP3X 888 -16.393 -8.003 25.582 1.00 0.00 W1 O +ATOM 5152 H1 TIP3X 888 -15.730 -8.684 25.463 1.00 0.00 W1 H +ATOM 5153 H2 TIP3X 888 -17.109 -8.443 26.041 1.00 0.00 W1 H +ATOM 5154 OH2 TIP3X 889 -27.248 -8.316 30.727 1.00 0.00 W1 O +ATOM 5155 H1 TIP3X 889 -27.777 -8.550 29.964 1.00 0.00 W1 H +ATOM 5156 H2 TIP3X 889 -26.353 -8.268 30.392 1.00 0.00 W1 H +ATOM 5157 OH2 TIP3X 890 -26.338 -5.110 26.288 1.00 0.00 W1 O +ATOM 5158 H1 TIP3X 890 -26.383 -5.665 27.067 1.00 0.00 W1 H +ATOM 5159 H2 TIP3X 890 -26.971 -4.412 26.454 1.00 0.00 W1 H +ATOM 5160 OH2 TIP3X 891 -17.666 -3.980 26.038 1.00 0.00 W1 O +ATOM 5161 H1 TIP3X 891 -17.243 -3.212 26.422 1.00 0.00 W1 H +ATOM 5162 H2 TIP3X 891 -17.970 -4.488 26.790 1.00 0.00 W1 H +ATOM 5163 OH2 TIP3X 892 -19.579 -2.005 27.863 1.00 0.00 W1 O +ATOM 5164 H1 TIP3X 892 -20.286 -2.634 27.720 1.00 0.00 W1 H +ATOM 5165 H2 TIP3X 892 -19.250 -1.810 26.985 1.00 0.00 W1 H +ATOM 5166 OH2 TIP3X 893 -19.328 -3.469 30.259 1.00 0.00 W1 O +ATOM 5167 H1 TIP3X 893 -19.961 -4.075 29.875 1.00 0.00 W1 H +ATOM 5168 H2 TIP3X 893 -19.214 -2.788 29.595 1.00 0.00 W1 H +ATOM 5169 OH2 TIP3X 894 -15.717 -1.560 24.326 1.00 0.00 W1 O +ATOM 5170 H1 TIP3X 894 -15.040 -1.719 24.982 1.00 0.00 W1 H +ATOM 5171 H2 TIP3X 894 -15.951 -2.432 24.007 1.00 0.00 W1 H +ATOM 5172 OH2 TIP3X 895 -25.161 -15.089 22.718 1.00 0.00 W1 O +ATOM 5173 H1 TIP3X 895 -25.453 -14.180 22.657 1.00 0.00 W1 H +ATOM 5174 H2 TIP3X 895 -24.329 -15.107 22.245 1.00 0.00 W1 H +ATOM 5175 OH2 TIP3X 896 -23.037 -5.143 16.373 1.00 0.00 W1 O +ATOM 5176 H1 TIP3X 896 -23.732 -5.765 16.587 1.00 0.00 W1 H +ATOM 5177 H2 TIP3X 896 -23.055 -4.507 17.088 1.00 0.00 W1 H +ATOM 5178 OH2 TIP3X 897 -15.657 -6.379 15.809 1.00 0.00 W1 O +ATOM 5179 H1 TIP3X 897 -15.920 -7.129 15.275 1.00 0.00 W1 H +ATOM 5180 H2 TIP3X 897 -15.911 -5.615 15.292 1.00 0.00 W1 H +ATOM 5181 OH2 TIP3X 898 -29.709 -2.683 15.526 1.00 0.00 W1 O +ATOM 5182 H1 TIP3X 898 -29.263 -3.232 16.172 1.00 0.00 W1 H +ATOM 5183 H2 TIP3X 898 -30.605 -3.017 15.505 1.00 0.00 W1 H +ATOM 5184 OH2 TIP3X 899 -17.615 -0.554 16.785 1.00 0.00 W1 O +ATOM 5185 H1 TIP3X 899 -16.730 -0.882 16.626 1.00 0.00 W1 H +ATOM 5186 H2 TIP3X 899 -17.845 -0.086 15.982 1.00 0.00 W1 H +ATOM 5187 OH2 TIP3X 900 -16.223 -4.892 28.862 1.00 0.00 W1 O +ATOM 5188 H1 TIP3X 900 -16.333 -3.943 28.921 1.00 0.00 W1 H +ATOM 5189 H2 TIP3X 900 -17.116 -5.237 28.852 1.00 0.00 W1 H +ATOM 5190 OH2 TIP3X 901 -29.537 -2.066 18.481 1.00 0.00 W1 O +ATOM 5191 H1 TIP3X 901 -29.605 -1.230 18.941 1.00 0.00 W1 H +ATOM 5192 H2 TIP3X 901 -30.432 -2.404 18.464 1.00 0.00 W1 H +ATOM 5193 OH2 TIP3X 902 -16.957 -3.573 16.125 1.00 0.00 W1 O +ATOM 5194 H1 TIP3X 902 -16.925 -3.653 17.079 1.00 0.00 W1 H +ATOM 5195 H2 TIP3X 902 -17.790 -3.136 15.948 1.00 0.00 W1 H +ATOM 5196 OH2 TIP3X 903 -20.586 -15.278 29.009 1.00 0.00 W1 O +ATOM 5197 H1 TIP3X 903 -20.893 -14.530 28.497 1.00 0.00 W1 H +ATOM 5198 H2 TIP3X 903 -20.532 -15.995 28.377 1.00 0.00 W1 H +ATOM 5199 OH2 TIP3X 904 -26.372 -1.362 27.038 1.00 0.00 W1 O +ATOM 5200 H1 TIP3X 904 -25.524 -1.124 27.412 1.00 0.00 W1 H +ATOM 5201 H2 TIP3X 904 -26.161 -1.742 26.185 1.00 0.00 W1 H +ATOM 5202 OH2 TIP3X 905 -27.906 -13.343 30.389 1.00 0.00 W1 O +ATOM 5203 H1 TIP3X 905 -28.783 -13.254 30.763 1.00 0.00 W1 H +ATOM 5204 H2 TIP3X 905 -27.843 -12.631 29.752 1.00 0.00 W1 H +ATOM 5205 OH2 TIP3X 906 -21.709 -11.396 16.119 1.00 0.00 W1 O +ATOM 5206 H1 TIP3X 906 -21.875 -11.099 15.224 1.00 0.00 W1 H +ATOM 5207 H2 TIP3X 906 -22.580 -11.520 16.496 1.00 0.00 W1 H +ATOM 5208 OH2 TIP3X 907 -16.311 -3.636 19.167 1.00 0.00 W1 O +ATOM 5209 H1 TIP3X 907 -15.738 -4.373 19.380 1.00 0.00 W1 H +ATOM 5210 H2 TIP3X 907 -16.642 -3.337 20.014 1.00 0.00 W1 H +ATOM 5211 OH2 TIP3X 908 -21.050 -14.600 16.096 1.00 0.00 W1 O +ATOM 5212 H1 TIP3X 908 -20.318 -13.984 16.121 1.00 0.00 W1 H +ATOM 5213 H2 TIP3X 908 -20.809 -15.232 15.420 1.00 0.00 W1 H +ATOM 5214 OH2 TIP3X 909 -16.518 -14.506 26.361 1.00 0.00 W1 O +ATOM 5215 H1 TIP3X 909 -16.026 -15.136 26.889 1.00 0.00 W1 H +ATOM 5216 H2 TIP3X 909 -15.918 -14.264 25.656 1.00 0.00 W1 H +ATOM 5217 OH2 TIP3X 910 -29.011 -5.286 22.439 1.00 0.00 W1 O +ATOM 5218 H1 TIP3X 910 -29.679 -4.962 23.044 1.00 0.00 W1 H +ATOM 5219 H2 TIP3X 910 -28.219 -5.355 22.971 1.00 0.00 W1 H +ATOM 5220 OH2 TIP3X 911 -24.014 -3.867 29.549 1.00 0.00 W1 O +ATOM 5221 H1 TIP3X 911 -23.790 -4.245 30.400 1.00 0.00 W1 H +ATOM 5222 H2 TIP3X 911 -24.621 -4.496 29.159 1.00 0.00 W1 H +ATOM 5223 OH2 TIP3X 912 -20.535 -12.562 24.962 1.00 0.00 W1 O +ATOM 5224 H1 TIP3X 912 -20.476 -12.744 25.900 1.00 0.00 W1 H +ATOM 5225 H2 TIP3X 912 -21.473 -12.475 24.794 1.00 0.00 W1 H +ATOM 5226 OH2 TIP3X 913 -24.343 -11.905 29.141 1.00 0.00 W1 O +ATOM 5227 H1 TIP3X 913 -25.210 -11.975 28.741 1.00 0.00 W1 H +ATOM 5228 H2 TIP3X 913 -24.398 -12.446 29.929 1.00 0.00 W1 H +ATOM 5229 OH2 TIP3X 914 -16.857 -9.185 30.894 1.00 0.00 W1 O +ATOM 5230 H1 TIP3X 914 -16.063 -9.718 30.878 1.00 0.00 W1 H +ATOM 5231 H2 TIP3X 914 -17.151 -9.220 31.804 1.00 0.00 W1 H +ATOM 5232 OH2 TIP3X 915 -28.672 -15.318 26.813 1.00 0.00 W1 O +ATOM 5233 H1 TIP3X 915 -28.898 -14.865 26.000 1.00 0.00 W1 H +ATOM 5234 H2 TIP3X 915 -27.842 -15.755 26.621 1.00 0.00 W1 H +ATOM 5235 OH2 TIP3X 916 -22.577 -14.860 21.894 1.00 0.00 W1 O +ATOM 5236 H1 TIP3X 916 -22.095 -14.346 21.247 1.00 0.00 W1 H +ATOM 5237 H2 TIP3X 916 -22.233 -14.567 22.738 1.00 0.00 W1 H +ATOM 5238 OH2 TIP3X 917 -28.107 -10.269 17.047 1.00 0.00 W1 O +ATOM 5239 H1 TIP3X 917 -27.685 -9.623 16.481 1.00 0.00 W1 H +ATOM 5240 H2 TIP3X 917 -27.395 -10.844 17.328 1.00 0.00 W1 H +ATOM 5241 OH2 TIP3X 918 -27.583 -9.612 26.358 1.00 0.00 W1 O +ATOM 5242 H1 TIP3X 918 -27.667 -8.821 26.890 1.00 0.00 W1 H +ATOM 5243 H2 TIP3X 918 -26.668 -9.616 26.078 1.00 0.00 W1 H +ATOM 5244 OH2 TIP3X 919 -28.400 -8.894 19.544 1.00 0.00 W1 O +ATOM 5245 H1 TIP3X 919 -28.337 -9.183 18.633 1.00 0.00 W1 H +ATOM 5246 H2 TIP3X 919 -27.625 -8.349 19.677 1.00 0.00 W1 H +ATOM 5247 OH2 TIP3X 920 -19.380 -12.324 17.304 1.00 0.00 W1 O +ATOM 5248 H1 TIP3X 920 -20.087 -11.836 16.884 1.00 0.00 W1 H +ATOM 5249 H2 TIP3X 920 -18.655 -12.280 16.680 1.00 0.00 W1 H +ATOM 5250 OH2 TIP3X 921 -30.829 -11.438 28.392 1.00 0.00 W1 O +ATOM 5251 H1 TIP3X 921 -31.734 -11.144 28.503 1.00 0.00 W1 H +ATOM 5252 H2 TIP3X 921 -30.689 -12.057 29.108 1.00 0.00 W1 H +ATOM 5253 OH2 TIP3X 922 -29.686 -14.600 24.374 1.00 0.00 W1 O +ATOM 5254 H1 TIP3X 922 -29.579 -15.302 23.732 1.00 0.00 W1 H +ATOM 5255 H2 TIP3X 922 -29.550 -13.795 23.875 1.00 0.00 W1 H +ATOM 5256 OH2 TIP3X 923 -18.164 -10.972 29.262 1.00 0.00 W1 O +ATOM 5257 H1 TIP3X 923 -17.853 -10.394 29.958 1.00 0.00 W1 H +ATOM 5258 H2 TIP3X 923 -19.108 -11.036 29.407 1.00 0.00 W1 H +ATOM 5259 OH2 TIP3X 924 -21.121 -10.966 29.209 1.00 0.00 W1 O +ATOM 5260 H1 TIP3X 924 -21.481 -10.398 28.528 1.00 0.00 W1 H +ATOM 5261 H2 TIP3X 924 -21.459 -11.837 28.998 1.00 0.00 W1 H +ATOM 5262 OH2 TIP3X 925 -22.918 -10.497 19.074 1.00 0.00 W1 O +ATOM 5263 H1 TIP3X 925 -22.829 -9.918 18.318 1.00 0.00 W1 H +ATOM 5264 H2 TIP3X 925 -23.688 -11.032 18.878 1.00 0.00 W1 H +ATOM 5265 OH2 TIP3X 926 -24.615 -11.166 16.762 1.00 0.00 W1 O +ATOM 5266 H1 TIP3X 926 -25.053 -10.973 15.932 1.00 0.00 W1 H +ATOM 5267 H2 TIP3X 926 -25.022 -11.977 17.065 1.00 0.00 W1 H +ATOM 5268 OH2 TIP3X 927 -23.905 -14.104 30.551 1.00 0.00 W1 O +ATOM 5269 H1 TIP3X 927 -24.371 -14.491 31.291 1.00 0.00 W1 H +ATOM 5270 H2 TIP3X 927 -22.991 -14.071 30.833 1.00 0.00 W1 H +ATOM 5271 OH2 TIP3X 928 -18.342 -8.759 27.232 1.00 0.00 W1 O +ATOM 5272 H1 TIP3X 928 -18.322 -9.409 27.935 1.00 0.00 W1 H +ATOM 5273 H2 TIP3X 928 -19.176 -8.911 26.788 1.00 0.00 W1 H +ATOM 5274 OH2 TIP3X 929 -30.267 -11.659 15.702 1.00 0.00 W1 O +ATOM 5275 H1 TIP3X 929 -31.023 -11.851 16.256 1.00 0.00 W1 H +ATOM 5276 H2 TIP3X 929 -29.733 -11.060 16.224 1.00 0.00 W1 H +ATOM 5277 OH2 TIP3X 930 -30.348 -0.165 16.189 1.00 0.00 W1 O +ATOM 5278 H1 TIP3X 930 -29.932 -0.913 16.618 1.00 0.00 W1 H +ATOM 5279 H2 TIP3X 930 -30.335 0.528 16.848 1.00 0.00 W1 H +ATOM 5280 OH2 TIP3X 931 -21.600 -12.005 21.182 1.00 0.00 W1 O +ATOM 5281 H1 TIP3X 931 -21.937 -11.655 20.357 1.00 0.00 W1 H +ATOM 5282 H2 TIP3X 931 -20.703 -12.273 20.980 1.00 0.00 W1 H +ATOM 5283 OH2 TIP3X 932 -26.145 -12.695 22.926 1.00 0.00 W1 O +ATOM 5284 H1 TIP3X 932 -27.087 -12.742 22.767 1.00 0.00 W1 H +ATOM 5285 H2 TIP3X 932 -26.006 -11.820 23.289 1.00 0.00 W1 H +ATOM 5286 OH2 TIP3X 933 -30.783 -11.569 19.719 1.00 0.00 W1 O +ATOM 5287 H1 TIP3X 933 -31.057 -11.693 20.628 1.00 0.00 W1 H +ATOM 5288 H2 TIP3X 933 -30.977 -10.650 19.533 1.00 0.00 W1 H +ATOM 5289 OH2 TIP3X 934 -26.782 -12.242 27.779 1.00 0.00 W1 O +ATOM 5290 H1 TIP3X 934 -26.760 -13.048 27.264 1.00 0.00 W1 H +ATOM 5291 H2 TIP3X 934 -27.176 -11.594 27.195 1.00 0.00 W1 H +ATOM 5292 OH2 TIP3X 935 -26.199 -5.706 23.584 1.00 0.00 W1 O +ATOM 5293 H1 TIP3X 935 -26.271 -6.642 23.397 1.00 0.00 W1 H +ATOM 5294 H2 TIP3X 935 -26.195 -5.653 24.540 1.00 0.00 W1 H +ATOM 5295 OH2 TIP3X 936 -22.010 -8.687 28.147 1.00 0.00 W1 O +ATOM 5296 H1 TIP3X 936 -21.598 -7.856 28.383 1.00 0.00 W1 H +ATOM 5297 H2 TIP3X 936 -22.560 -8.477 27.392 1.00 0.00 W1 H +ATOM 5298 OH2 TIP3X 937 -16.215 -13.321 17.471 1.00 0.00 W1 O +ATOM 5299 H1 TIP3X 937 -15.780 -13.094 18.293 1.00 0.00 W1 H +ATOM 5300 H2 TIP3X 937 -16.735 -14.096 17.681 1.00 0.00 W1 H +ATOM 5301 OH2 TIP3X 938 -25.060 -7.361 16.649 1.00 0.00 W1 O +ATOM 5302 H1 TIP3X 938 -25.349 -7.483 17.554 1.00 0.00 W1 H +ATOM 5303 H2 TIP3X 938 -24.371 -8.014 16.528 1.00 0.00 W1 H +ATOM 5304 OH2 TIP3X 939 -18.357 -8.845 17.717 1.00 0.00 W1 O +ATOM 5305 H1 TIP3X 939 -19.222 -9.044 18.076 1.00 0.00 W1 H +ATOM 5306 H2 TIP3X 939 -17.800 -8.724 18.486 1.00 0.00 W1 H +ATOM 5307 OH2 TIP3X 940 -23.524 -8.591 24.188 1.00 0.00 W1 O +ATOM 5308 H1 TIP3X 940 -23.427 -7.794 24.709 1.00 0.00 W1 H +ATOM 5309 H2 TIP3X 940 -22.649 -8.980 24.179 1.00 0.00 W1 H +ATOM 5310 OH2 TIP3X 941 -23.778 -8.209 21.104 1.00 0.00 W1 O +ATOM 5311 H1 TIP3X 941 -23.157 -8.805 20.686 1.00 0.00 W1 H +ATOM 5312 H2 TIP3X 941 -23.753 -8.446 22.030 1.00 0.00 W1 H +ATOM 5313 OH2 TIP3X 942 -20.884 -6.593 30.039 1.00 0.00 W1 O +ATOM 5314 H1 TIP3X 942 -21.562 -6.309 30.653 1.00 0.00 W1 H +ATOM 5315 H2 TIP3X 942 -20.086 -6.634 30.566 1.00 0.00 W1 H +ATOM 5316 OH2 TIP3X 943 -28.374 -7.178 27.736 1.00 0.00 W1 O +ATOM 5317 H1 TIP3X 943 -27.857 -6.772 28.432 1.00 0.00 W1 H +ATOM 5318 H2 TIP3X 943 -28.757 -6.441 27.260 1.00 0.00 W1 H +ATOM 5319 OH2 TIP3X 944 -29.468 -9.216 29.357 1.00 0.00 W1 O +ATOM 5320 H1 TIP3X 944 -29.672 -10.055 28.945 1.00 0.00 W1 H +ATOM 5321 H2 TIP3X 944 -29.591 -8.570 28.662 1.00 0.00 W1 H +ATOM 5322 OH2 TIP3X 945 -29.575 -8.342 22.181 1.00 0.00 W1 O +ATOM 5323 H1 TIP3X 945 -29.219 -7.470 22.011 1.00 0.00 W1 H +ATOM 5324 H2 TIP3X 945 -29.677 -8.733 21.313 1.00 0.00 W1 H +ATOM 5325 OH2 TIP3X 946 -18.816 -6.078 16.367 1.00 0.00 W1 O +ATOM 5326 H1 TIP3X 946 -18.111 -5.579 15.955 1.00 0.00 W1 H +ATOM 5327 H2 TIP3X 946 -18.367 -6.708 16.931 1.00 0.00 W1 H +ATOM 5328 OH2 TIP3X 947 -16.220 -8.731 19.730 1.00 0.00 W1 O +ATOM 5329 H1 TIP3X 947 -16.507 -8.558 20.626 1.00 0.00 W1 H +ATOM 5330 H2 TIP3X 947 -15.707 -7.959 19.489 1.00 0.00 W1 H +ATOM 5331 OH2 TIP3X 948 -29.722 -9.614 24.452 1.00 0.00 W1 O +ATOM 5332 H1 TIP3X 948 -29.628 -8.936 23.783 1.00 0.00 W1 H +ATOM 5333 H2 TIP3X 948 -29.064 -9.395 25.111 1.00 0.00 W1 H +ATOM 5334 OH2 TIP3X 949 -26.935 -1.107 17.715 1.00 0.00 W1 O +ATOM 5335 H1 TIP3X 949 -27.164 -0.747 16.859 1.00 0.00 W1 H +ATOM 5336 H2 TIP3X 949 -27.348 -1.970 17.731 1.00 0.00 W1 H +ATOM 5337 OH2 TIP3X 950 -28.160 -5.874 16.214 1.00 0.00 W1 O +ATOM 5338 H1 TIP3X 950 -28.976 -6.163 15.805 1.00 0.00 W1 H +ATOM 5339 H2 TIP3X 950 -27.628 -6.667 16.275 1.00 0.00 W1 H +ATOM 5340 OH2 TIP3X 951 -26.742 -5.034 29.288 1.00 0.00 W1 O +ATOM 5341 H1 TIP3X 951 -27.315 -4.432 28.814 1.00 0.00 W1 H +ATOM 5342 H2 TIP3X 951 -27.216 -5.230 30.096 1.00 0.00 W1 H +ATOM 5343 OH2 TIP3X 952 -23.666 -0.291 26.979 1.00 0.00 W1 O +ATOM 5344 H1 TIP3X 952 -23.349 -0.585 27.833 1.00 0.00 W1 H +ATOM 5345 H2 TIP3X 952 -23.233 -0.869 26.350 1.00 0.00 W1 H +ATOM 5346 OH2 TIP3X 953 -18.960 -0.050 21.113 1.00 0.00 W1 O +ATOM 5347 H1 TIP3X 953 -19.373 -0.741 20.594 1.00 0.00 W1 H +ATOM 5348 H2 TIP3X 953 -19.156 0.757 20.636 1.00 0.00 W1 H +ATOM 5349 OH2 TIP3X 954 -22.382 -3.367 18.365 1.00 0.00 W1 O +ATOM 5350 H1 TIP3X 954 -22.123 -2.582 17.883 1.00 0.00 W1 H +ATOM 5351 H2 TIP3X 954 -22.952 -3.044 19.063 1.00 0.00 W1 H +ATOM 5352 OH2 TIP3X 955 -22.365 -8.213 17.436 1.00 0.00 W1 O +ATOM 5353 H1 TIP3X 955 -21.542 -8.140 16.953 1.00 0.00 W1 H +ATOM 5354 H2 TIP3X 955 -22.358 -7.468 18.038 1.00 0.00 W1 H +ATOM 5355 OH2 TIP3X 956 -18.964 -13.489 27.227 1.00 0.00 W1 O +ATOM 5356 H1 TIP3X 956 -18.159 -13.720 26.763 1.00 0.00 W1 H +ATOM 5357 H2 TIP3X 956 -18.673 -12.936 27.952 1.00 0.00 W1 H +ATOM 5358 OH2 TIP3X 957 -30.999 -6.388 18.633 1.00 0.00 W1 O +ATOM 5359 H1 TIP3X 957 -31.152 -6.295 17.693 1.00 0.00 W1 H +ATOM 5360 H2 TIP3X 957 -30.045 -6.388 18.722 1.00 0.00 W1 H +ATOM 5361 OH2 TIP3X 958 -20.237 -6.800 25.229 1.00 0.00 W1 O +ATOM 5362 H1 TIP3X 958 -19.691 -6.138 25.655 1.00 0.00 W1 H +ATOM 5363 H2 TIP3X 958 -19.778 -7.000 24.414 1.00 0.00 W1 H +ATOM 5364 OH2 TIP3X 959 -21.414 -1.826 16.307 1.00 0.00 W1 O +ATOM 5365 H1 TIP3X 959 -20.590 -1.791 16.791 1.00 0.00 W1 H +ATOM 5366 H2 TIP3X 959 -21.211 -2.339 15.524 1.00 0.00 W1 H +ATOM 5367 OH2 TIP3X 960 -21.422 -4.039 27.958 1.00 0.00 W1 O +ATOM 5368 H1 TIP3X 960 -22.243 -3.792 28.384 1.00 0.00 W1 H +ATOM 5369 H2 TIP3X 960 -21.651 -4.134 27.033 1.00 0.00 W1 H +ATOM 5370 OH2 TIP3X 961 -24.797 -3.814 19.844 1.00 0.00 W1 O +ATOM 5371 H1 TIP3X 961 -25.504 -3.667 19.216 1.00 0.00 W1 H +ATOM 5372 H2 TIP3X 961 -25.134 -3.469 20.671 1.00 0.00 W1 H +ATOM 5373 OH2 TIP3X 962 -28.232 -2.902 28.555 1.00 0.00 W1 O +ATOM 5374 H1 TIP3X 962 -27.498 -2.291 28.491 1.00 0.00 W1 H +ATOM 5375 H2 TIP3X 962 -28.544 -2.808 29.455 1.00 0.00 W1 H +ATOM 5376 OH2 TIP3X 963 -28.642 -1.197 22.657 1.00 0.00 W1 O +ATOM 5377 H1 TIP3X 963 -29.228 -1.938 22.503 1.00 0.00 W1 H +ATOM 5378 H2 TIP3X 963 -28.199 -1.064 21.819 1.00 0.00 W1 H +ATOM 5379 OH2 TIP3X 964 -20.289 -15.184 23.738 1.00 0.00 W1 O +ATOM 5380 H1 TIP3X 964 -19.956 -15.259 22.843 1.00 0.00 W1 H +ATOM 5381 H2 TIP3X 964 -20.334 -14.241 23.899 1.00 0.00 W1 H +ATOM 5382 OH2 TIP3X 965 -23.051 -13.055 23.972 1.00 0.00 W1 O +ATOM 5383 H1 TIP3X 965 -23.413 -12.566 23.233 1.00 0.00 W1 H +ATOM 5384 H2 TIP3X 965 -23.782 -13.144 24.582 1.00 0.00 W1 H +ATOM 5385 OH2 TIP3X 966 -24.332 -15.070 17.900 1.00 0.00 W1 O +ATOM 5386 H1 TIP3X 966 -23.476 -15.326 18.245 1.00 0.00 W1 H +ATOM 5387 H2 TIP3X 966 -24.850 -15.874 17.925 1.00 0.00 W1 H +ATOM 5388 OH2 TIP3X 967 -21.580 -15.227 18.944 1.00 0.00 W1 O +ATOM 5389 H1 TIP3X 967 -21.124 -15.963 19.352 1.00 0.00 W1 H +ATOM 5390 H2 TIP3X 967 -21.173 -15.140 18.082 1.00 0.00 W1 H +ATOM 5391 OH2 TIP3X 968 -26.941 -0.648 30.398 1.00 0.00 W1 O +ATOM 5392 H1 TIP3X 968 -27.191 0.109 29.869 1.00 0.00 W1 H +ATOM 5393 H2 TIP3X 968 -26.030 -0.817 30.159 1.00 0.00 W1 H +ATOM 5394 OH2 TIP3X 969 -21.934 -1.954 20.699 1.00 0.00 W1 O +ATOM 5395 H1 TIP3X 969 -21.273 -2.596 20.959 1.00 0.00 W1 H +ATOM 5396 H2 TIP3X 969 -21.947 -1.319 21.415 1.00 0.00 W1 H +ATOM 5397 OH2 TIP3X 970 -24.195 -1.051 29.608 1.00 0.00 W1 O +ATOM 5398 H1 TIP3X 970 -23.977 -1.943 29.879 1.00 0.00 W1 H +ATOM 5399 H2 TIP3X 970 -23.587 -0.497 30.098 1.00 0.00 W1 H +ATOM 5400 OH2 TIP3X 971 -25.248 -12.933 19.653 1.00 0.00 W1 O +ATOM 5401 H1 TIP3X 971 -24.591 -13.592 19.430 1.00 0.00 W1 H +ATOM 5402 H2 TIP3X 971 -25.206 -12.864 20.607 1.00 0.00 W1 H +ATOM 5403 OH2 TIP3X 972 -30.535 -14.595 29.109 1.00 0.00 W1 O +ATOM 5404 H1 TIP3X 972 -29.787 -14.790 28.545 1.00 0.00 W1 H +ATOM 5405 H2 TIP3X 972 -30.327 -15.020 29.940 1.00 0.00 W1 H +ATOM 5406 OH2 TIP3X 973 -19.415 -1.867 18.710 1.00 0.00 W1 O +ATOM 5407 H1 TIP3X 973 -19.271 -2.808 18.813 1.00 0.00 W1 H +ATOM 5408 H2 TIP3X 973 -18.592 -1.535 18.353 1.00 0.00 W1 H +ATOM 5409 OH2 TIP3X 974 -17.748 -15.101 29.937 1.00 0.00 W1 O +ATOM 5410 H1 TIP3X 974 -18.361 -15.027 29.207 1.00 0.00 W1 H +ATOM 5411 H2 TIP3X 974 -16.978 -14.606 29.656 1.00 0.00 W1 H +ATOM 5412 OH2 TIP3X 975 -26.954 -0.888 20.424 1.00 0.00 W1 O +ATOM 5413 H1 TIP3X 975 -26.961 -0.843 19.468 1.00 0.00 W1 H +ATOM 5414 H2 TIP3X 975 -26.147 -0.442 20.680 1.00 0.00 W1 H +ATOM 5415 OH2 TIP3X 976 -16.045 -1.950 28.373 1.00 0.00 W1 O +ATOM 5416 H1 TIP3X 976 -16.768 -1.399 28.674 1.00 0.00 W1 H +ATOM 5417 H2 TIP3X 976 -15.257 -1.450 28.587 1.00 0.00 W1 H +ATOM 5418 OH2 TIP3X 977 -28.419 -12.628 20.053 1.00 0.00 W1 O +ATOM 5419 H1 TIP3X 977 -29.063 -12.239 19.461 1.00 0.00 W1 H +ATOM 5420 H2 TIP3X 977 -27.617 -12.131 19.895 1.00 0.00 W1 H +ATOM 5421 OH2 TIP3X 978 -26.991 -4.029 17.785 1.00 0.00 W1 O +ATOM 5422 H1 TIP3X 978 -27.030 -4.657 17.063 1.00 0.00 W1 H +ATOM 5423 H2 TIP3X 978 -27.710 -4.282 18.363 1.00 0.00 W1 H +ATOM 5424 OH2 TIP3X 979 -29.096 11.057 -26.806 1.00 0.00 W1 O +ATOM 5425 H1 TIP3X 979 -28.914 10.981 -25.869 1.00 0.00 W1 H +ATOM 5426 H2 TIP3X 979 -29.120 11.999 -26.970 1.00 0.00 W1 H +ATOM 5427 OH2 TIP3X 980 -17.994 8.548 -23.068 1.00 0.00 W1 O +ATOM 5428 H1 TIP3X 980 -17.759 8.812 -23.957 1.00 0.00 W1 H +ATOM 5429 H2 TIP3X 980 -17.165 8.284 -22.669 1.00 0.00 W1 H +ATOM 5430 OH2 TIP3X 981 -26.010 8.271 -27.089 1.00 0.00 W1 O +ATOM 5431 H1 TIP3X 981 -25.979 9.181 -26.792 1.00 0.00 W1 H +ATOM 5432 H2 TIP3X 981 -25.502 7.788 -26.437 1.00 0.00 W1 H +ATOM 5433 OH2 TIP3X 982 -18.206 12.431 -24.946 1.00 0.00 W1 O +ATOM 5434 H1 TIP3X 982 -18.481 12.921 -24.171 1.00 0.00 W1 H +ATOM 5435 H2 TIP3X 982 -18.732 11.631 -24.922 1.00 0.00 W1 H +ATOM 5436 OH2 TIP3X 983 -19.690 10.874 -27.903 1.00 0.00 W1 O +ATOM 5437 H1 TIP3X 983 -19.528 10.645 -28.818 1.00 0.00 W1 H +ATOM 5438 H2 TIP3X 983 -20.619 11.103 -27.873 1.00 0.00 W1 H +ATOM 5439 OH2 TIP3X 984 -15.842 11.406 -23.118 1.00 0.00 W1 O +ATOM 5440 H1 TIP3X 984 -16.394 11.489 -23.896 1.00 0.00 W1 H +ATOM 5441 H2 TIP3X 984 -16.453 11.189 -22.413 1.00 0.00 W1 H +ATOM 5442 OH2 TIP3X 985 -29.206 12.670 -20.667 1.00 0.00 W1 O +ATOM 5443 H1 TIP3X 985 -28.800 12.873 -19.824 1.00 0.00 W1 H +ATOM 5444 H2 TIP3X 985 -29.777 11.924 -20.484 1.00 0.00 W1 H +ATOM 5445 OH2 TIP3X 986 -21.831 14.295 -21.441 1.00 0.00 W1 O +ATOM 5446 H1 TIP3X 986 -21.530 13.394 -21.319 1.00 0.00 W1 H +ATOM 5447 H2 TIP3X 986 -21.205 14.675 -22.058 1.00 0.00 W1 H +ATOM 5448 OH2 TIP3X 987 -18.398 14.251 -21.561 1.00 0.00 W1 O +ATOM 5449 H1 TIP3X 987 -18.834 15.075 -21.781 1.00 0.00 W1 H +ATOM 5450 H2 TIP3X 987 -17.469 14.477 -21.512 1.00 0.00 W1 H +ATOM 5451 OH2 TIP3X 988 -25.950 13.826 -22.432 1.00 0.00 W1 O +ATOM 5452 H1 TIP3X 988 -25.595 14.675 -22.695 1.00 0.00 W1 H +ATOM 5453 H2 TIP3X 988 -26.885 13.886 -22.628 1.00 0.00 W1 H +ATOM 5454 OH2 TIP3X 989 -21.109 5.719 -23.530 1.00 0.00 W1 O +ATOM 5455 H1 TIP3X 989 -21.186 4.909 -24.035 1.00 0.00 W1 H +ATOM 5456 H2 TIP3X 989 -20.166 5.858 -23.443 1.00 0.00 W1 H +ATOM 5457 OH2 TIP3X 990 -25.086 1.816 -21.168 1.00 0.00 W1 O +ATOM 5458 H1 TIP3X 990 -24.828 1.079 -20.615 1.00 0.00 W1 H +ATOM 5459 H2 TIP3X 990 -25.762 1.460 -21.744 1.00 0.00 W1 H +ATOM 5460 OH2 TIP3X 991 -16.842 2.821 -24.745 1.00 0.00 W1 O +ATOM 5461 H1 TIP3X 991 -17.150 3.159 -23.904 1.00 0.00 W1 H +ATOM 5462 H2 TIP3X 991 -16.774 1.875 -24.614 1.00 0.00 W1 H +ATOM 5463 OH2 TIP3X 992 -18.244 4.016 -22.791 1.00 0.00 W1 O +ATOM 5464 H1 TIP3X 992 -17.669 3.788 -22.061 1.00 0.00 W1 H +ATOM 5465 H2 TIP3X 992 -19.119 3.761 -22.496 1.00 0.00 W1 H +ATOM 5466 OH2 TIP3X 993 -25.198 5.141 -21.420 1.00 0.00 W1 O +ATOM 5467 H1 TIP3X 993 -24.695 4.438 -21.008 1.00 0.00 W1 H +ATOM 5468 H2 TIP3X 993 -24.541 5.783 -21.687 1.00 0.00 W1 H +ATOM 5469 OH2 TIP3X 994 -17.721 6.189 -24.523 1.00 0.00 W1 O +ATOM 5470 H1 TIP3X 994 -17.680 5.289 -24.199 1.00 0.00 W1 H +ATOM 5471 H2 TIP3X 994 -17.839 6.722 -23.736 1.00 0.00 W1 H +ATOM 5472 OH2 TIP3X 995 -19.037 2.832 -26.654 1.00 0.00 W1 O +ATOM 5473 H1 TIP3X 995 -18.212 3.017 -26.205 1.00 0.00 W1 H +ATOM 5474 H2 TIP3X 995 -18.960 3.287 -27.493 1.00 0.00 W1 H +ATOM 5475 OH2 TIP3X 996 -22.854 8.804 -20.583 1.00 0.00 W1 O +ATOM 5476 H1 TIP3X 996 -21.977 8.826 -20.966 1.00 0.00 W1 H +ATOM 5477 H2 TIP3X 996 -23.119 9.722 -20.537 1.00 0.00 W1 H +ATOM 5478 OH2 TIP3X 997 -23.704 11.352 -20.773 1.00 0.00 W1 O +ATOM 5479 H1 TIP3X 997 -23.728 11.579 -21.702 1.00 0.00 W1 H +ATOM 5480 H2 TIP3X 997 -24.624 11.298 -20.514 1.00 0.00 W1 H +ATOM 5481 OH2 TIP3X 998 -28.841 3.233 -23.935 1.00 0.00 W1 O +ATOM 5482 H1 TIP3X 998 -29.166 4.113 -23.744 1.00 0.00 W1 H +ATOM 5483 H2 TIP3X 998 -28.964 3.131 -24.878 1.00 0.00 W1 H +ATOM 5484 OH2 TIP3X 999 -26.685 6.791 -23.922 1.00 0.00 W1 O +ATOM 5485 H1 TIP3X 999 -27.368 6.341 -24.419 1.00 0.00 W1 H +ATOM 5486 H2 TIP3X 999 -26.199 6.087 -23.490 1.00 0.00 W1 H +ATOM 5487 OH2 TIP3X1000 -20.629 11.715 -21.526 1.00 0.00 W1 O +ATOM 5488 H1 TIP3X1000 -20.871 11.129 -22.243 1.00 0.00 W1 H +ATOM 5489 H2 TIP3X1000 -19.679 11.626 -21.453 1.00 0.00 W1 H +ATOM 5490 OH2 TIP3X1001 -16.331 15.350 -24.745 1.00 0.00 W1 O +ATOM 5491 H1 TIP3X1001 -16.336 14.882 -23.910 1.00 0.00 W1 H +ATOM 5492 H2 TIP3X1001 -17.212 15.221 -25.098 1.00 0.00 W1 H +ATOM 5493 OH2 TIP3X1002 -24.459 11.686 -23.723 1.00 0.00 W1 O +ATOM 5494 H1 TIP3X1002 -25.031 10.967 -23.454 1.00 0.00 W1 H +ATOM 5495 H2 TIP3X1002 -24.920 12.476 -23.441 1.00 0.00 W1 H +ATOM 5496 OH2 TIP3X1003 -22.238 2.138 -19.153 1.00 0.00 W1 O +ATOM 5497 H1 TIP3X1003 -22.980 2.617 -18.786 1.00 0.00 W1 H +ATOM 5498 H2 TIP3X1003 -22.618 1.326 -19.487 1.00 0.00 W1 H +ATOM 5499 OH2 TIP3X1004 -26.886 2.843 -29.351 1.00 0.00 W1 O +ATOM 5500 H1 TIP3X1004 -26.984 2.181 -28.667 1.00 0.00 W1 H +ATOM 5501 H2 TIP3X1004 -27.069 2.374 -30.166 1.00 0.00 W1 H +ATOM 5502 OH2 TIP3X1005 -15.992 3.764 -21.162 1.00 0.00 W1 O +ATOM 5503 H1 TIP3X1005 -15.473 4.433 -21.609 1.00 0.00 W1 H +ATOM 5504 H2 TIP3X1005 -15.550 3.640 -20.322 1.00 0.00 W1 H +ATOM 5505 OH2 TIP3X1006 -29.934 0.117 -27.002 1.00 0.00 W1 O +ATOM 5506 H1 TIP3X1006 -29.209 0.738 -26.933 1.00 0.00 W1 H +ATOM 5507 H2 TIP3X1006 -30.306 0.084 -26.120 1.00 0.00 W1 H +ATOM 5508 OH2 TIP3X1007 -24.668 6.353 -17.015 1.00 0.00 W1 O +ATOM 5509 H1 TIP3X1007 -23.804 6.751 -17.116 1.00 0.00 W1 H +ATOM 5510 H2 TIP3X1007 -24.516 5.416 -17.138 1.00 0.00 W1 H +ATOM 5511 OH2 TIP3X1008 -21.502 11.263 -24.276 1.00 0.00 W1 O +ATOM 5512 H1 TIP3X1008 -21.408 10.400 -24.679 1.00 0.00 W1 H +ATOM 5513 H2 TIP3X1008 -22.435 11.463 -24.352 1.00 0.00 W1 H +ATOM 5514 OH2 TIP3X1009 -22.890 9.547 -26.745 1.00 0.00 W1 O +ATOM 5515 H1 TIP3X1009 -23.455 8.933 -26.275 1.00 0.00 W1 H +ATOM 5516 H2 TIP3X1009 -23.364 10.378 -26.716 1.00 0.00 W1 H +ATOM 5517 OH2 TIP3X1010 -30.352 10.060 -20.288 1.00 0.00 W1 O +ATOM 5518 H1 TIP3X1010 -30.887 9.458 -20.806 1.00 0.00 W1 H +ATOM 5519 H2 TIP3X1010 -30.823 10.146 -19.459 1.00 0.00 W1 H +ATOM 5520 OH2 TIP3X1011 -19.056 9.081 -25.920 1.00 0.00 W1 O +ATOM 5521 H1 TIP3X1011 -19.112 8.166 -26.197 1.00 0.00 W1 H +ATOM 5522 H2 TIP3X1011 -19.229 9.583 -26.716 1.00 0.00 W1 H +ATOM 5523 OH2 TIP3X1012 -18.759 9.595 -18.896 1.00 0.00 W1 O +ATOM 5524 H1 TIP3X1012 -19.662 9.678 -18.588 1.00 0.00 W1 H +ATOM 5525 H2 TIP3X1012 -18.591 8.653 -18.892 1.00 0.00 W1 H +ATOM 5526 OH2 TIP3X1013 -16.393 7.554 -21.090 1.00 0.00 W1 O +ATOM 5527 H1 TIP3X1013 -15.730 6.873 -21.209 1.00 0.00 W1 H +ATOM 5528 H2 TIP3X1013 -17.109 7.115 -20.631 1.00 0.00 W1 H +ATOM 5529 OH2 TIP3X1014 -27.248 7.241 -15.946 1.00 0.00 W1 O +ATOM 5530 H1 TIP3X1014 -27.777 7.007 -16.708 1.00 0.00 W1 H +ATOM 5531 H2 TIP3X1014 -26.353 7.289 -16.280 1.00 0.00 W1 H +ATOM 5532 OH2 TIP3X1015 -26.338 10.447 -20.384 1.00 0.00 W1 O +ATOM 5533 H1 TIP3X1015 -26.383 9.892 -19.606 1.00 0.00 W1 H +ATOM 5534 H2 TIP3X1015 -26.971 11.145 -20.218 1.00 0.00 W1 H +ATOM 5535 OH2 TIP3X1016 -17.666 11.577 -20.635 1.00 0.00 W1 O +ATOM 5536 H1 TIP3X1016 -17.243 12.345 -20.251 1.00 0.00 W1 H +ATOM 5537 H2 TIP3X1016 -17.970 11.069 -19.882 1.00 0.00 W1 H +ATOM 5538 OH2 TIP3X1017 -19.579 13.553 -18.810 1.00 0.00 W1 O +ATOM 5539 H1 TIP3X1017 -20.286 12.924 -18.952 1.00 0.00 W1 H +ATOM 5540 H2 TIP3X1017 -19.250 13.747 -19.687 1.00 0.00 W1 H +ATOM 5541 OH2 TIP3X1018 -19.328 12.089 -16.413 1.00 0.00 W1 O +ATOM 5542 H1 TIP3X1018 -19.961 11.482 -16.797 1.00 0.00 W1 H +ATOM 5543 H2 TIP3X1018 -19.214 12.769 -17.077 1.00 0.00 W1 H +ATOM 5544 OH2 TIP3X1019 -15.717 13.997 -22.347 1.00 0.00 W1 O +ATOM 5545 H1 TIP3X1019 -15.040 13.838 -21.690 1.00 0.00 W1 H +ATOM 5546 H2 TIP3X1019 -15.951 13.126 -22.666 1.00 0.00 W1 H +ATOM 5547 OH2 TIP3X1020 -25.161 0.468 -23.954 1.00 0.00 W1 O +ATOM 5548 H1 TIP3X1020 -25.453 1.378 -24.015 1.00 0.00 W1 H +ATOM 5549 H2 TIP3X1020 -24.329 0.451 -24.427 1.00 0.00 W1 H +ATOM 5550 OH2 TIP3X1021 -23.037 10.415 -30.300 1.00 0.00 W1 O +ATOM 5551 H1 TIP3X1021 -23.732 9.793 -30.085 1.00 0.00 W1 H +ATOM 5552 H2 TIP3X1021 -23.055 11.051 -29.585 1.00 0.00 W1 H +ATOM 5553 OH2 TIP3X1022 -15.657 9.178 -30.863 1.00 0.00 W1 O +ATOM 5554 H1 TIP3X1022 -15.920 8.428 -31.397 1.00 0.00 W1 H +ATOM 5555 H2 TIP3X1022 -15.911 9.942 -31.381 1.00 0.00 W1 H +ATOM 5556 OH2 TIP3X1023 -29.709 12.875 -31.146 1.00 0.00 W1 O +ATOM 5557 H1 TIP3X1023 -29.263 12.326 -30.501 1.00 0.00 W1 H +ATOM 5558 H2 TIP3X1023 -30.605 12.541 -31.167 1.00 0.00 W1 H +ATOM 5559 OH2 TIP3X1024 -17.615 15.004 -29.888 1.00 0.00 W1 O +ATOM 5560 H1 TIP3X1024 -16.730 14.676 -30.046 1.00 0.00 W1 H +ATOM 5561 H2 TIP3X1024 -17.845 15.472 -30.690 1.00 0.00 W1 H +ATOM 5562 OH2 TIP3X1025 -16.223 10.666 -17.810 1.00 0.00 W1 O +ATOM 5563 H1 TIP3X1025 -16.333 11.615 -17.751 1.00 0.00 W1 H +ATOM 5564 H2 TIP3X1025 -17.116 10.321 -17.820 1.00 0.00 W1 H +ATOM 5565 OH2 TIP3X1026 -29.537 13.492 -28.191 1.00 0.00 W1 O +ATOM 5566 H1 TIP3X1026 -29.605 14.328 -27.731 1.00 0.00 W1 H +ATOM 5567 H2 TIP3X1026 -30.432 13.153 -28.208 1.00 0.00 W1 H +ATOM 5568 OH2 TIP3X1027 -16.957 11.985 -30.547 1.00 0.00 W1 O +ATOM 5569 H1 TIP3X1027 -16.925 11.905 -29.594 1.00 0.00 W1 H +ATOM 5570 H2 TIP3X1027 -17.790 12.422 -30.724 1.00 0.00 W1 H +ATOM 5571 OH2 TIP3X1028 -20.586 0.279 -17.663 1.00 0.00 W1 O +ATOM 5572 H1 TIP3X1028 -20.893 1.028 -18.176 1.00 0.00 W1 H +ATOM 5573 H2 TIP3X1028 -20.532 -0.438 -18.295 1.00 0.00 W1 H +ATOM 5574 OH2 TIP3X1029 -26.372 14.196 -19.634 1.00 0.00 W1 O +ATOM 5575 H1 TIP3X1029 -25.524 14.434 -19.260 1.00 0.00 W1 H +ATOM 5576 H2 TIP3X1029 -26.161 13.816 -20.487 1.00 0.00 W1 H +ATOM 5577 OH2 TIP3X1030 -27.906 2.214 -16.284 1.00 0.00 W1 O +ATOM 5578 H1 TIP3X1030 -28.783 2.304 -15.910 1.00 0.00 W1 H +ATOM 5579 H2 TIP3X1030 -27.843 2.927 -16.920 1.00 0.00 W1 H +ATOM 5580 OH2 TIP3X1031 -21.709 4.161 -30.553 1.00 0.00 W1 O +ATOM 5581 H1 TIP3X1031 -21.875 4.458 -31.448 1.00 0.00 W1 H +ATOM 5582 H2 TIP3X1031 -22.580 4.038 -30.176 1.00 0.00 W1 H +ATOM 5583 OH2 TIP3X1032 -16.311 11.922 -27.505 1.00 0.00 W1 O +ATOM 5584 H1 TIP3X1032 -15.738 11.185 -27.292 1.00 0.00 W1 H +ATOM 5585 H2 TIP3X1032 -16.642 12.221 -26.658 1.00 0.00 W1 H +ATOM 5586 OH2 TIP3X1033 -21.050 0.958 -30.576 1.00 0.00 W1 O +ATOM 5587 H1 TIP3X1033 -20.318 1.574 -30.552 1.00 0.00 W1 H +ATOM 5588 H2 TIP3X1033 -20.809 0.325 -31.253 1.00 0.00 W1 H +ATOM 5589 OH2 TIP3X1034 -16.518 1.051 -20.311 1.00 0.00 W1 O +ATOM 5590 H1 TIP3X1034 -16.026 0.422 -19.784 1.00 0.00 W1 H +ATOM 5591 H2 TIP3X1034 -15.918 1.294 -21.016 1.00 0.00 W1 H +ATOM 5592 OH2 TIP3X1035 -29.011 10.272 -24.233 1.00 0.00 W1 O +ATOM 5593 H1 TIP3X1035 -29.679 10.595 -23.629 1.00 0.00 W1 H +ATOM 5594 H2 TIP3X1035 -28.219 10.202 -23.701 1.00 0.00 W1 H +ATOM 5595 OH2 TIP3X1036 -24.014 11.691 -17.123 1.00 0.00 W1 O +ATOM 5596 H1 TIP3X1036 -23.790 11.313 -16.272 1.00 0.00 W1 H +ATOM 5597 H2 TIP3X1036 -24.621 11.062 -17.513 1.00 0.00 W1 H +ATOM 5598 OH2 TIP3X1037 -20.535 2.995 -21.710 1.00 0.00 W1 O +ATOM 5599 H1 TIP3X1037 -20.476 2.814 -20.772 1.00 0.00 W1 H +ATOM 5600 H2 TIP3X1037 -21.473 3.083 -21.879 1.00 0.00 W1 H +ATOM 5601 OH2 TIP3X1038 -24.343 3.652 -17.531 1.00 0.00 W1 O +ATOM 5602 H1 TIP3X1038 -25.210 3.582 -17.931 1.00 0.00 W1 H +ATOM 5603 H2 TIP3X1038 -24.398 3.112 -16.743 1.00 0.00 W1 H +ATOM 5604 OH2 TIP3X1039 -28.672 0.239 -19.860 1.00 0.00 W1 O +ATOM 5605 H1 TIP3X1039 -28.898 0.693 -20.672 1.00 0.00 W1 H +ATOM 5606 H2 TIP3X1039 -27.842 -0.197 -20.051 1.00 0.00 W1 H +ATOM 5607 OH2 TIP3X1040 -22.577 0.697 -24.778 1.00 0.00 W1 O +ATOM 5608 H1 TIP3X1040 -22.095 1.211 -25.426 1.00 0.00 W1 H +ATOM 5609 H2 TIP3X1040 -22.233 0.991 -23.934 1.00 0.00 W1 H +ATOM 5610 OH2 TIP3X1041 -28.107 5.289 -29.625 1.00 0.00 W1 O +ATOM 5611 H1 TIP3X1041 -27.685 5.935 -30.191 1.00 0.00 W1 H +ATOM 5612 H2 TIP3X1041 -27.395 4.714 -29.344 1.00 0.00 W1 H +ATOM 5613 OH2 TIP3X1042 -27.583 5.945 -20.314 1.00 0.00 W1 O +ATOM 5614 H1 TIP3X1042 -27.667 6.737 -19.782 1.00 0.00 W1 H +ATOM 5615 H2 TIP3X1042 -26.668 5.941 -20.595 1.00 0.00 W1 H +ATOM 5616 OH2 TIP3X1043 -28.400 6.664 -27.129 1.00 0.00 W1 O +ATOM 5617 H1 TIP3X1043 -28.337 6.375 -28.039 1.00 0.00 W1 H +ATOM 5618 H2 TIP3X1043 -27.625 7.209 -26.996 1.00 0.00 W1 H +ATOM 5619 OH2 TIP3X1044 -19.380 3.233 -29.369 1.00 0.00 W1 O +ATOM 5620 H1 TIP3X1044 -20.087 3.722 -29.789 1.00 0.00 W1 H +ATOM 5621 H2 TIP3X1044 -18.655 3.277 -29.992 1.00 0.00 W1 H +ATOM 5622 OH2 TIP3X1045 -30.829 4.120 -18.281 1.00 0.00 W1 O +ATOM 5623 H1 TIP3X1045 -31.734 4.414 -18.170 1.00 0.00 W1 H +ATOM 5624 H2 TIP3X1045 -30.689 3.501 -17.564 1.00 0.00 W1 H +ATOM 5625 OH2 TIP3X1046 -29.686 0.957 -22.298 1.00 0.00 W1 O +ATOM 5626 H1 TIP3X1046 -29.579 0.256 -22.941 1.00 0.00 W1 H +ATOM 5627 H2 TIP3X1046 -29.550 1.763 -22.797 1.00 0.00 W1 H +ATOM 5628 OH2 TIP3X1047 -18.164 4.585 -17.411 1.00 0.00 W1 O +ATOM 5629 H1 TIP3X1047 -17.853 5.164 -16.715 1.00 0.00 W1 H +ATOM 5630 H2 TIP3X1047 -19.108 4.521 -17.265 1.00 0.00 W1 H +ATOM 5631 OH2 TIP3X1048 -21.121 4.591 -17.464 1.00 0.00 W1 O +ATOM 5632 H1 TIP3X1048 -21.481 5.159 -18.145 1.00 0.00 W1 H +ATOM 5633 H2 TIP3X1048 -21.459 3.721 -17.675 1.00 0.00 W1 H +ATOM 5634 OH2 TIP3X1049 -22.918 5.060 -27.598 1.00 0.00 W1 O +ATOM 5635 H1 TIP3X1049 -22.829 5.640 -28.355 1.00 0.00 W1 H +ATOM 5636 H2 TIP3X1049 -23.688 4.526 -27.795 1.00 0.00 W1 H +ATOM 5637 OH2 TIP3X1050 -24.615 4.392 -29.911 1.00 0.00 W1 O +ATOM 5638 H1 TIP3X1050 -25.053 4.584 -30.740 1.00 0.00 W1 H +ATOM 5639 H2 TIP3X1050 -25.022 3.581 -29.607 1.00 0.00 W1 H +ATOM 5640 OH2 TIP3X1051 -23.905 1.454 -16.122 1.00 0.00 W1 O +ATOM 5641 H1 TIP3X1051 -24.371 1.066 -15.381 1.00 0.00 W1 H +ATOM 5642 H2 TIP3X1051 -22.991 1.486 -15.839 1.00 0.00 W1 H +ATOM 5643 OH2 TIP3X1052 -18.342 6.798 -19.440 1.00 0.00 W1 O +ATOM 5644 H1 TIP3X1052 -18.322 6.149 -18.737 1.00 0.00 W1 H +ATOM 5645 H2 TIP3X1052 -19.176 6.647 -19.884 1.00 0.00 W1 H +ATOM 5646 OH2 TIP3X1053 -30.267 3.899 -30.971 1.00 0.00 W1 O +ATOM 5647 H1 TIP3X1053 -31.023 3.706 -30.417 1.00 0.00 W1 H +ATOM 5648 H2 TIP3X1053 -29.733 4.497 -30.448 1.00 0.00 W1 H +ATOM 5649 OH2 TIP3X1054 -30.348 15.392 -30.484 1.00 0.00 W1 O +ATOM 5650 H1 TIP3X1054 -29.932 14.645 -30.054 1.00 0.00 W1 H +ATOM 5651 H2 TIP3X1054 -30.335 16.086 -29.824 1.00 0.00 W1 H +ATOM 5652 OH2 TIP3X1055 -21.600 3.552 -25.491 1.00 0.00 W1 O +ATOM 5653 H1 TIP3X1055 -21.937 3.903 -26.315 1.00 0.00 W1 H +ATOM 5654 H2 TIP3X1055 -20.703 3.285 -25.692 1.00 0.00 W1 H +ATOM 5655 OH2 TIP3X1056 -26.145 2.863 -23.747 1.00 0.00 W1 O +ATOM 5656 H1 TIP3X1056 -27.087 2.815 -23.905 1.00 0.00 W1 H +ATOM 5657 H2 TIP3X1056 -26.006 3.737 -23.383 1.00 0.00 W1 H +ATOM 5658 OH2 TIP3X1057 -30.783 3.989 -26.953 1.00 0.00 W1 O +ATOM 5659 H1 TIP3X1057 -31.057 3.864 -26.045 1.00 0.00 W1 H +ATOM 5660 H2 TIP3X1057 -30.977 4.907 -27.139 1.00 0.00 W1 H +ATOM 5661 OH2 TIP3X1058 -26.782 3.316 -18.893 1.00 0.00 W1 O +ATOM 5662 H1 TIP3X1058 -26.760 2.510 -19.409 1.00 0.00 W1 H +ATOM 5663 H2 TIP3X1058 -27.176 3.964 -19.477 1.00 0.00 W1 H +ATOM 5664 OH2 TIP3X1059 -26.199 9.851 -23.088 1.00 0.00 W1 O +ATOM 5665 H1 TIP3X1059 -26.271 8.916 -23.276 1.00 0.00 W1 H +ATOM 5666 H2 TIP3X1059 -26.195 9.905 -22.132 1.00 0.00 W1 H +ATOM 5667 OH2 TIP3X1060 -22.010 6.870 -18.526 1.00 0.00 W1 O +ATOM 5668 H1 TIP3X1060 -21.598 7.701 -18.289 1.00 0.00 W1 H +ATOM 5669 H2 TIP3X1060 -22.560 7.081 -19.280 1.00 0.00 W1 H +ATOM 5670 OH2 TIP3X1061 -16.215 2.237 -29.201 1.00 0.00 W1 O +ATOM 5671 H1 TIP3X1061 -15.780 2.464 -28.379 1.00 0.00 W1 H +ATOM 5672 H2 TIP3X1061 -16.735 1.461 -28.992 1.00 0.00 W1 H +ATOM 5673 OH2 TIP3X1062 -25.060 8.197 -30.023 1.00 0.00 W1 O +ATOM 5674 H1 TIP3X1062 -25.349 8.075 -29.119 1.00 0.00 W1 H +ATOM 5675 H2 TIP3X1062 -24.371 7.543 -30.144 1.00 0.00 W1 H +ATOM 5676 OH2 TIP3X1063 -18.357 6.713 -28.955 1.00 0.00 W1 O +ATOM 5677 H1 TIP3X1063 -19.222 6.514 -28.596 1.00 0.00 W1 H +ATOM 5678 H2 TIP3X1063 -17.800 6.834 -28.186 1.00 0.00 W1 H +ATOM 5679 OH2 TIP3X1064 -23.524 6.967 -22.485 1.00 0.00 W1 O +ATOM 5680 H1 TIP3X1064 -23.427 7.764 -21.963 1.00 0.00 W1 H +ATOM 5681 H2 TIP3X1064 -22.649 6.577 -22.493 1.00 0.00 W1 H +ATOM 5682 OH2 TIP3X1065 -23.778 7.348 -25.569 1.00 0.00 W1 O +ATOM 5683 H1 TIP3X1065 -23.157 6.752 -25.987 1.00 0.00 W1 H +ATOM 5684 H2 TIP3X1065 -23.753 7.111 -24.642 1.00 0.00 W1 H +ATOM 5685 OH2 TIP3X1066 -20.884 8.964 -16.633 1.00 0.00 W1 O +ATOM 5686 H1 TIP3X1066 -21.562 9.248 -16.020 1.00 0.00 W1 H +ATOM 5687 H2 TIP3X1066 -20.086 8.923 -16.106 1.00 0.00 W1 H +ATOM 5688 OH2 TIP3X1067 -28.374 8.379 -18.937 1.00 0.00 W1 O +ATOM 5689 H1 TIP3X1067 -27.857 8.785 -18.241 1.00 0.00 W1 H +ATOM 5690 H2 TIP3X1067 -28.757 9.117 -19.412 1.00 0.00 W1 H +ATOM 5691 OH2 TIP3X1068 -29.468 6.342 -17.315 1.00 0.00 W1 O +ATOM 5692 H1 TIP3X1068 -29.672 5.502 -17.728 1.00 0.00 W1 H +ATOM 5693 H2 TIP3X1068 -29.591 6.987 -18.011 1.00 0.00 W1 H +ATOM 5694 OH2 TIP3X1069 -29.575 7.215 -24.492 1.00 0.00 W1 O +ATOM 5695 H1 TIP3X1069 -29.219 8.087 -24.662 1.00 0.00 W1 H +ATOM 5696 H2 TIP3X1069 -29.677 6.824 -25.360 1.00 0.00 W1 H +ATOM 5697 OH2 TIP3X1070 -18.816 9.480 -30.305 1.00 0.00 W1 O +ATOM 5698 H1 TIP3X1070 -18.111 9.978 -30.717 1.00 0.00 W1 H +ATOM 5699 H2 TIP3X1070 -18.367 8.849 -29.742 1.00 0.00 W1 H +ATOM 5700 OH2 TIP3X1071 -16.220 6.827 -26.943 1.00 0.00 W1 O +ATOM 5701 H1 TIP3X1071 -16.507 7.000 -26.046 1.00 0.00 W1 H +ATOM 5702 H2 TIP3X1071 -15.707 7.598 -27.183 1.00 0.00 W1 H +ATOM 5703 OH2 TIP3X1072 -29.722 5.944 -22.221 1.00 0.00 W1 O +ATOM 5704 H1 TIP3X1072 -29.628 6.622 -22.889 1.00 0.00 W1 H +ATOM 5705 H2 TIP3X1072 -29.064 6.163 -21.561 1.00 0.00 W1 H +ATOM 5706 OH2 TIP3X1073 -26.935 14.451 -28.957 1.00 0.00 W1 O +ATOM 5707 H1 TIP3X1073 -27.164 14.811 -29.814 1.00 0.00 W1 H +ATOM 5708 H2 TIP3X1073 -27.348 13.587 -28.941 1.00 0.00 W1 H +ATOM 5709 OH2 TIP3X1074 -28.160 9.684 -30.459 1.00 0.00 W1 O +ATOM 5710 H1 TIP3X1074 -28.976 9.394 -30.867 1.00 0.00 W1 H +ATOM 5711 H2 TIP3X1074 -27.628 8.890 -30.397 1.00 0.00 W1 H +ATOM 5712 OH2 TIP3X1075 -26.742 10.523 -17.384 1.00 0.00 W1 O +ATOM 5713 H1 TIP3X1075 -27.315 11.125 -17.858 1.00 0.00 W1 H +ATOM 5714 H2 TIP3X1075 -27.216 10.327 -16.576 1.00 0.00 W1 H +ATOM 5715 OH2 TIP3X1076 -23.666 15.266 -19.693 1.00 0.00 W1 O +ATOM 5716 H1 TIP3X1076 -23.349 14.972 -18.840 1.00 0.00 W1 H +ATOM 5717 H2 TIP3X1076 -23.233 14.689 -20.322 1.00 0.00 W1 H +ATOM 5718 OH2 TIP3X1077 -18.960 15.508 -25.560 1.00 0.00 W1 O +ATOM 5719 H1 TIP3X1077 -19.373 14.817 -26.078 1.00 0.00 W1 H +ATOM 5720 H2 TIP3X1077 -19.156 16.315 -26.036 1.00 0.00 W1 H +ATOM 5721 OH2 TIP3X1078 -22.382 12.190 -28.308 1.00 0.00 W1 O +ATOM 5722 H1 TIP3X1078 -22.123 12.976 -28.790 1.00 0.00 W1 H +ATOM 5723 H2 TIP3X1078 -22.952 12.514 -27.610 1.00 0.00 W1 H +ATOM 5724 OH2 TIP3X1079 -22.365 7.345 -29.236 1.00 0.00 W1 O +ATOM 5725 H1 TIP3X1079 -21.542 7.418 -29.719 1.00 0.00 W1 H +ATOM 5726 H2 TIP3X1079 -22.358 8.089 -28.635 1.00 0.00 W1 H +ATOM 5727 OH2 TIP3X1080 -18.964 2.068 -19.445 1.00 0.00 W1 O +ATOM 5728 H1 TIP3X1080 -18.159 1.838 -19.909 1.00 0.00 W1 H +ATOM 5729 H2 TIP3X1080 -18.673 2.621 -18.720 1.00 0.00 W1 H +ATOM 5730 OH2 TIP3X1081 -30.999 9.170 -28.039 1.00 0.00 W1 O +ATOM 5731 H1 TIP3X1081 -31.152 9.262 -28.979 1.00 0.00 W1 H +ATOM 5732 H2 TIP3X1081 -30.045 9.170 -27.950 1.00 0.00 W1 H +ATOM 5733 OH2 TIP3X1082 -20.237 8.758 -21.443 1.00 0.00 W1 O +ATOM 5734 H1 TIP3X1082 -19.691 9.419 -21.017 1.00 0.00 W1 H +ATOM 5735 H2 TIP3X1082 -19.778 8.557 -22.259 1.00 0.00 W1 H +ATOM 5736 OH2 TIP3X1083 -21.414 13.731 -30.366 1.00 0.00 W1 O +ATOM 5737 H1 TIP3X1083 -20.590 13.766 -29.881 1.00 0.00 W1 H +ATOM 5738 H2 TIP3X1083 -21.211 13.219 -31.148 1.00 0.00 W1 H +ATOM 5739 OH2 TIP3X1084 -21.422 11.519 -18.715 1.00 0.00 W1 O +ATOM 5740 H1 TIP3X1084 -22.243 11.766 -18.288 1.00 0.00 W1 H +ATOM 5741 H2 TIP3X1084 -21.651 11.423 -19.639 1.00 0.00 W1 H +ATOM 5742 OH2 TIP3X1085 -24.797 11.744 -26.828 1.00 0.00 W1 O +ATOM 5743 H1 TIP3X1085 -25.504 11.891 -27.456 1.00 0.00 W1 H +ATOM 5744 H2 TIP3X1085 -25.134 12.088 -26.001 1.00 0.00 W1 H +ATOM 5745 OH2 TIP3X1086 -28.232 12.656 -18.117 1.00 0.00 W1 O +ATOM 5746 H1 TIP3X1086 -27.498 13.267 -18.181 1.00 0.00 W1 H +ATOM 5747 H2 TIP3X1086 -28.544 12.750 -17.217 1.00 0.00 W1 H +ATOM 5748 OH2 TIP3X1087 -28.642 14.360 -24.015 1.00 0.00 W1 O +ATOM 5749 H1 TIP3X1087 -29.228 13.619 -24.169 1.00 0.00 W1 H +ATOM 5750 H2 TIP3X1087 -28.199 14.494 -24.853 1.00 0.00 W1 H +ATOM 5751 OH2 TIP3X1088 -20.289 0.374 -22.935 1.00 0.00 W1 O +ATOM 5752 H1 TIP3X1088 -19.956 0.298 -23.829 1.00 0.00 W1 H +ATOM 5753 H2 TIP3X1088 -20.334 1.316 -22.774 1.00 0.00 W1 H +ATOM 5754 OH2 TIP3X1089 -23.051 2.502 -22.700 1.00 0.00 W1 O +ATOM 5755 H1 TIP3X1089 -23.413 2.991 -23.439 1.00 0.00 W1 H +ATOM 5756 H2 TIP3X1089 -23.782 2.413 -22.090 1.00 0.00 W1 H +ATOM 5757 OH2 TIP3X1090 -24.332 0.487 -28.772 1.00 0.00 W1 O +ATOM 5758 H1 TIP3X1090 -23.476 0.232 -28.427 1.00 0.00 W1 H +ATOM 5759 H2 TIP3X1090 -24.850 -0.317 -28.747 1.00 0.00 W1 H +ATOM 5760 OH2 TIP3X1091 -21.580 0.331 -27.729 1.00 0.00 W1 O +ATOM 5761 H1 TIP3X1091 -21.124 -0.405 -27.320 1.00 0.00 W1 H +ATOM 5762 H2 TIP3X1091 -21.173 0.417 -28.590 1.00 0.00 W1 H +ATOM 5763 OH2 TIP3X1092 -26.941 14.909 -16.274 1.00 0.00 W1 O +ATOM 5764 H1 TIP3X1092 -27.191 15.666 -16.804 1.00 0.00 W1 H +ATOM 5765 H2 TIP3X1092 -26.030 14.740 -16.513 1.00 0.00 W1 H +ATOM 5766 OH2 TIP3X1093 -21.934 13.604 -25.974 1.00 0.00 W1 O +ATOM 5767 H1 TIP3X1093 -21.273 12.962 -25.714 1.00 0.00 W1 H +ATOM 5768 H2 TIP3X1093 -21.947 14.238 -25.257 1.00 0.00 W1 H +ATOM 5769 OH2 TIP3X1094 -24.195 14.506 -17.064 1.00 0.00 W1 O +ATOM 5770 H1 TIP3X1094 -23.977 13.614 -16.794 1.00 0.00 W1 H +ATOM 5771 H2 TIP3X1094 -23.587 15.060 -16.575 1.00 0.00 W1 H +ATOM 5772 OH2 TIP3X1095 -25.248 2.624 -27.020 1.00 0.00 W1 O +ATOM 5773 H1 TIP3X1095 -24.591 1.965 -27.242 1.00 0.00 W1 H +ATOM 5774 H2 TIP3X1095 -25.206 2.693 -26.066 1.00 0.00 W1 H +ATOM 5775 OH2 TIP3X1096 -30.535 0.963 -17.564 1.00 0.00 W1 O +ATOM 5776 H1 TIP3X1096 -29.787 0.767 -18.128 1.00 0.00 W1 H +ATOM 5777 H2 TIP3X1096 -30.327 0.537 -16.732 1.00 0.00 W1 H +ATOM 5778 OH2 TIP3X1097 -19.415 13.690 -27.962 1.00 0.00 W1 O +ATOM 5779 H1 TIP3X1097 -19.271 12.749 -27.859 1.00 0.00 W1 H +ATOM 5780 H2 TIP3X1097 -18.592 14.022 -28.319 1.00 0.00 W1 H +ATOM 5781 OH2 TIP3X1098 -17.748 0.456 -16.735 1.00 0.00 W1 O +ATOM 5782 H1 TIP3X1098 -18.361 0.530 -17.466 1.00 0.00 W1 H +ATOM 5783 H2 TIP3X1098 -16.978 0.951 -17.017 1.00 0.00 W1 H +ATOM 5784 OH2 TIP3X1099 -26.954 14.669 -26.249 1.00 0.00 W1 O +ATOM 5785 H1 TIP3X1099 -26.961 14.714 -27.205 1.00 0.00 W1 H +ATOM 5786 H2 TIP3X1099 -26.147 15.115 -25.993 1.00 0.00 W1 H +ATOM 5787 OH2 TIP3X1100 -16.045 13.608 -18.299 1.00 0.00 W1 O +ATOM 5788 H1 TIP3X1100 -16.768 14.159 -17.998 1.00 0.00 W1 H +ATOM 5789 H2 TIP3X1100 -15.257 14.107 -18.085 1.00 0.00 W1 H +ATOM 5790 OH2 TIP3X1101 -28.419 2.930 -26.619 1.00 0.00 W1 O +ATOM 5791 H1 TIP3X1101 -29.063 3.318 -27.212 1.00 0.00 W1 H +ATOM 5792 H2 TIP3X1101 -27.617 3.427 -26.777 1.00 0.00 W1 H +ATOM 5793 OH2 TIP3X1102 -26.991 11.529 -28.888 1.00 0.00 W1 O +ATOM 5794 H1 TIP3X1102 -27.030 10.901 -29.609 1.00 0.00 W1 H +ATOM 5795 H2 TIP3X1102 -27.710 11.275 -28.310 1.00 0.00 W1 H +ATOM 5796 OH2 TIP3X1103 -29.096 11.057 -11.248 1.00 0.00 W1 O +ATOM 5797 H1 TIP3X1103 -28.914 10.981 -10.312 1.00 0.00 W1 H +ATOM 5798 H2 TIP3X1103 -29.120 11.999 -11.413 1.00 0.00 W1 H +ATOM 5799 OH2 TIP3X1104 -26.010 8.271 -11.532 1.00 0.00 W1 O +ATOM 5800 H1 TIP3X1104 -25.979 9.181 -11.235 1.00 0.00 W1 H +ATOM 5801 H2 TIP3X1104 -25.502 7.788 -10.880 1.00 0.00 W1 H +ATOM 5802 OH2 TIP3X1105 -18.206 12.431 -9.388 1.00 0.00 W1 O +ATOM 5803 H1 TIP3X1105 -18.481 12.921 -8.613 1.00 0.00 W1 H +ATOM 5804 H2 TIP3X1105 -18.732 11.631 -9.365 1.00 0.00 W1 H +ATOM 5805 OH2 TIP3X1106 -19.690 10.874 -12.345 1.00 0.00 W1 O +ATOM 5806 H1 TIP3X1106 -19.528 10.645 -13.260 1.00 0.00 W1 H +ATOM 5807 H2 TIP3X1106 -20.619 11.103 -12.315 1.00 0.00 W1 H +ATOM 5808 OH2 TIP3X1107 -15.842 11.406 -7.561 1.00 0.00 W1 O +ATOM 5809 H1 TIP3X1107 -16.394 11.489 -8.338 1.00 0.00 W1 H +ATOM 5810 H2 TIP3X1107 -16.453 11.189 -6.856 1.00 0.00 W1 H +ATOM 5811 OH2 TIP3X1108 -29.206 12.670 -5.110 1.00 0.00 W1 O +ATOM 5812 H1 TIP3X1108 -28.800 12.873 -4.267 1.00 0.00 W1 H +ATOM 5813 H2 TIP3X1108 -29.777 11.924 -4.927 1.00 0.00 W1 H +ATOM 5814 OH2 TIP3X1109 -21.831 14.295 -5.884 1.00 0.00 W1 O +ATOM 5815 H1 TIP3X1109 -21.530 13.394 -5.762 1.00 0.00 W1 H +ATOM 5816 H2 TIP3X1109 -21.205 14.675 -6.501 1.00 0.00 W1 H +ATOM 5817 OH2 TIP3X1110 -18.398 14.251 -6.004 1.00 0.00 W1 O +ATOM 5818 H1 TIP3X1110 -18.834 15.075 -6.223 1.00 0.00 W1 H +ATOM 5819 H2 TIP3X1110 -17.469 14.477 -5.954 1.00 0.00 W1 H +ATOM 5820 OH2 TIP3X1111 -25.950 13.826 -6.874 1.00 0.00 W1 O +ATOM 5821 H1 TIP3X1111 -25.595 14.675 -7.138 1.00 0.00 W1 H +ATOM 5822 H2 TIP3X1111 -26.885 13.886 -7.070 1.00 0.00 W1 H +ATOM 5823 OH2 TIP3X1112 -21.109 5.719 -7.973 1.00 0.00 W1 O +ATOM 5824 H1 TIP3X1112 -21.186 4.909 -8.477 1.00 0.00 W1 H +ATOM 5825 H2 TIP3X1112 -20.166 5.858 -7.885 1.00 0.00 W1 H +ATOM 5826 OH2 TIP3X1113 -25.086 1.816 -5.611 1.00 0.00 W1 O +ATOM 5827 H1 TIP3X1113 -24.828 1.079 -5.058 1.00 0.00 W1 H +ATOM 5828 H2 TIP3X1113 -25.762 1.460 -6.186 1.00 0.00 W1 H +ATOM 5829 OH2 TIP3X1114 -25.198 5.141 -5.863 1.00 0.00 W1 O +ATOM 5830 H1 TIP3X1114 -24.695 4.438 -5.451 1.00 0.00 W1 H +ATOM 5831 H2 TIP3X1114 -24.541 5.783 -6.129 1.00 0.00 W1 H +ATOM 5832 OH2 TIP3X1115 -19.037 2.832 -11.097 1.00 0.00 W1 O +ATOM 5833 H1 TIP3X1115 -18.212 3.017 -10.648 1.00 0.00 W1 H +ATOM 5834 H2 TIP3X1115 -18.960 3.287 -11.936 1.00 0.00 W1 H +ATOM 5835 OH2 TIP3X1116 -22.854 8.804 -5.025 1.00 0.00 W1 O +ATOM 5836 H1 TIP3X1116 -21.977 8.826 -5.408 1.00 0.00 W1 H +ATOM 5837 H2 TIP3X1116 -23.119 9.722 -4.979 1.00 0.00 W1 H +ATOM 5838 OH2 TIP3X1117 -23.704 11.352 -5.215 1.00 0.00 W1 O +ATOM 5839 H1 TIP3X1117 -23.728 11.579 -6.145 1.00 0.00 W1 H +ATOM 5840 H2 TIP3X1117 -24.624 11.298 -4.957 1.00 0.00 W1 H +ATOM 5841 OH2 TIP3X1118 -28.841 3.233 -8.377 1.00 0.00 W1 O +ATOM 5842 H1 TIP3X1118 -29.166 4.113 -8.186 1.00 0.00 W1 H +ATOM 5843 H2 TIP3X1118 -28.964 3.131 -9.321 1.00 0.00 W1 H +ATOM 5844 OH2 TIP3X1119 -26.685 6.791 -8.365 1.00 0.00 W1 O +ATOM 5845 H1 TIP3X1119 -27.368 6.341 -8.862 1.00 0.00 W1 H +ATOM 5846 H2 TIP3X1119 -26.199 6.087 -7.933 1.00 0.00 W1 H +ATOM 5847 OH2 TIP3X1120 -20.629 11.715 -5.968 1.00 0.00 W1 O +ATOM 5848 H1 TIP3X1120 -20.871 11.129 -6.685 1.00 0.00 W1 H +ATOM 5849 H2 TIP3X1120 -19.679 11.626 -5.896 1.00 0.00 W1 H +ATOM 5850 OH2 TIP3X1121 -16.331 15.350 -9.188 1.00 0.00 W1 O +ATOM 5851 H1 TIP3X1121 -16.336 14.882 -8.353 1.00 0.00 W1 H +ATOM 5852 H2 TIP3X1121 -17.212 15.221 -9.541 1.00 0.00 W1 H +ATOM 5853 OH2 TIP3X1122 -24.459 11.686 -8.166 1.00 0.00 W1 O +ATOM 5854 H1 TIP3X1122 -25.031 10.967 -7.897 1.00 0.00 W1 H +ATOM 5855 H2 TIP3X1122 -24.920 12.476 -7.883 1.00 0.00 W1 H +ATOM 5856 OH2 TIP3X1123 -22.238 2.138 -3.595 1.00 0.00 W1 O +ATOM 5857 H1 TIP3X1123 -22.980 2.617 -3.228 1.00 0.00 W1 H +ATOM 5858 H2 TIP3X1123 -22.618 1.326 -3.930 1.00 0.00 W1 H +ATOM 5859 OH2 TIP3X1124 -26.886 2.843 -13.794 1.00 0.00 W1 O +ATOM 5860 H1 TIP3X1124 -26.984 2.181 -13.109 1.00 0.00 W1 H +ATOM 5861 H2 TIP3X1124 -27.069 2.374 -14.608 1.00 0.00 W1 H +ATOM 5862 OH2 TIP3X1125 -29.934 0.117 -11.444 1.00 0.00 W1 O +ATOM 5863 H1 TIP3X1125 -29.209 0.738 -11.375 1.00 0.00 W1 H +ATOM 5864 H2 TIP3X1125 -30.306 0.084 -10.563 1.00 0.00 W1 H +ATOM 5865 OH2 TIP3X1126 -24.668 6.353 -1.458 1.00 0.00 W1 O +ATOM 5866 H1 TIP3X1126 -23.804 6.751 -1.559 1.00 0.00 W1 H +ATOM 5867 H2 TIP3X1126 -24.516 5.416 -1.580 1.00 0.00 W1 H +ATOM 5868 OH2 TIP3X1127 -21.502 11.263 -8.718 1.00 0.00 W1 O +ATOM 5869 H1 TIP3X1127 -21.408 10.400 -9.122 1.00 0.00 W1 H +ATOM 5870 H2 TIP3X1127 -22.435 11.463 -8.794 1.00 0.00 W1 H +ATOM 5871 OH2 TIP3X1128 -22.890 9.547 -11.187 1.00 0.00 W1 O +ATOM 5872 H1 TIP3X1128 -23.455 8.933 -10.718 1.00 0.00 W1 H +ATOM 5873 H2 TIP3X1128 -23.364 10.378 -11.159 1.00 0.00 W1 H +ATOM 5874 OH2 TIP3X1129 -30.352 10.060 -4.730 1.00 0.00 W1 O +ATOM 5875 H1 TIP3X1129 -30.887 9.458 -5.248 1.00 0.00 W1 H +ATOM 5876 H2 TIP3X1129 -30.823 10.146 -3.901 1.00 0.00 W1 H +ATOM 5877 OH2 TIP3X1130 -19.056 9.081 -10.363 1.00 0.00 W1 O +ATOM 5878 H1 TIP3X1130 -19.112 8.166 -10.639 1.00 0.00 W1 H +ATOM 5879 H2 TIP3X1130 -19.229 9.583 -11.159 1.00 0.00 W1 H +ATOM 5880 OH2 TIP3X1131 -27.248 7.241 -0.388 1.00 0.00 W1 O +ATOM 5881 H1 TIP3X1131 -27.777 7.007 -1.151 1.00 0.00 W1 H +ATOM 5882 H2 TIP3X1131 -26.353 7.289 -0.723 1.00 0.00 W1 H +ATOM 5883 OH2 TIP3X1132 -26.338 10.447 -4.827 1.00 0.00 W1 O +ATOM 5884 H1 TIP3X1132 -26.383 9.892 -4.048 1.00 0.00 W1 H +ATOM 5885 H2 TIP3X1132 -26.971 11.145 -4.661 1.00 0.00 W1 H +ATOM 5886 OH2 TIP3X1133 -19.579 13.553 -3.252 1.00 0.00 W1 O +ATOM 5887 H1 TIP3X1133 -20.286 12.924 -3.395 1.00 0.00 W1 H +ATOM 5888 H2 TIP3X1133 -19.250 13.747 -4.130 1.00 0.00 W1 H +ATOM 5889 OH2 TIP3X1134 -15.717 13.997 -6.789 1.00 0.00 W1 O +ATOM 5890 H1 TIP3X1134 -15.040 13.838 -6.133 1.00 0.00 W1 H +ATOM 5891 H2 TIP3X1134 -15.951 13.126 -7.108 1.00 0.00 W1 H +ATOM 5892 OH2 TIP3X1135 -25.161 0.468 -8.397 1.00 0.00 W1 O +ATOM 5893 H1 TIP3X1135 -25.453 1.378 -8.457 1.00 0.00 W1 H +ATOM 5894 H2 TIP3X1135 -24.329 0.451 -8.870 1.00 0.00 W1 H +ATOM 5895 OH2 TIP3X1136 -23.037 10.415 -14.742 1.00 0.00 W1 O +ATOM 5896 H1 TIP3X1136 -23.732 9.793 -14.528 1.00 0.00 W1 H +ATOM 5897 H2 TIP3X1136 -23.055 11.051 -14.027 1.00 0.00 W1 H +ATOM 5898 OH2 TIP3X1137 -29.709 12.875 -15.589 1.00 0.00 W1 O +ATOM 5899 H1 TIP3X1137 -29.263 12.326 -14.943 1.00 0.00 W1 H +ATOM 5900 H2 TIP3X1137 -30.605 12.541 -15.610 1.00 0.00 W1 H +ATOM 5901 OH2 TIP3X1138 -17.615 15.004 -14.330 1.00 0.00 W1 O +ATOM 5902 H1 TIP3X1138 -16.730 14.676 -14.489 1.00 0.00 W1 H +ATOM 5903 H2 TIP3X1138 -17.845 15.472 -15.133 1.00 0.00 W1 H +ATOM 5904 OH2 TIP3X1139 -29.537 13.492 -12.634 1.00 0.00 W1 O +ATOM 5905 H1 TIP3X1139 -29.605 14.328 -12.174 1.00 0.00 W1 H +ATOM 5906 H2 TIP3X1139 -30.432 13.153 -12.651 1.00 0.00 W1 H +ATOM 5907 OH2 TIP3X1140 -16.957 11.985 -14.990 1.00 0.00 W1 O +ATOM 5908 H1 TIP3X1140 -16.925 11.905 -14.036 1.00 0.00 W1 H +ATOM 5909 H2 TIP3X1140 -17.790 12.422 -15.166 1.00 0.00 W1 H +ATOM 5910 OH2 TIP3X1141 -20.586 0.279 -2.106 1.00 0.00 W1 O +ATOM 5911 H1 TIP3X1141 -20.893 1.028 -2.618 1.00 0.00 W1 H +ATOM 5912 H2 TIP3X1141 -20.532 -0.438 -2.738 1.00 0.00 W1 H +ATOM 5913 OH2 TIP3X1142 -26.372 14.196 -4.077 1.00 0.00 W1 O +ATOM 5914 H1 TIP3X1142 -25.524 14.434 -3.703 1.00 0.00 W1 H +ATOM 5915 H2 TIP3X1142 -26.161 13.816 -4.930 1.00 0.00 W1 H +ATOM 5916 OH2 TIP3X1143 -27.906 2.214 -0.726 1.00 0.00 W1 O +ATOM 5917 H1 TIP3X1143 -28.783 2.304 -0.352 1.00 0.00 W1 H +ATOM 5918 H2 TIP3X1143 -27.843 2.927 -1.363 1.00 0.00 W1 H +ATOM 5919 OH2 TIP3X1144 -21.709 4.161 -14.996 1.00 0.00 W1 O +ATOM 5920 H1 TIP3X1144 -21.875 4.458 -15.891 1.00 0.00 W1 H +ATOM 5921 H2 TIP3X1144 -22.580 4.038 -14.619 1.00 0.00 W1 H +ATOM 5922 OH2 TIP3X1145 -16.311 11.922 -11.948 1.00 0.00 W1 O +ATOM 5923 H1 TIP3X1145 -15.738 11.185 -11.735 1.00 0.00 W1 H +ATOM 5924 H2 TIP3X1145 -16.642 12.221 -11.101 1.00 0.00 W1 H +ATOM 5925 OH2 TIP3X1146 -21.050 0.958 -15.019 1.00 0.00 W1 O +ATOM 5926 H1 TIP3X1146 -20.318 1.574 -14.994 1.00 0.00 W1 H +ATOM 5927 H2 TIP3X1146 -20.809 0.325 -15.695 1.00 0.00 W1 H +ATOM 5928 OH2 TIP3X1147 -29.011 10.272 -8.676 1.00 0.00 W1 O +ATOM 5929 H1 TIP3X1147 -29.679 10.595 -8.071 1.00 0.00 W1 H +ATOM 5930 H2 TIP3X1147 -28.219 10.202 -8.144 1.00 0.00 W1 H +ATOM 5931 OH2 TIP3X1148 -24.014 11.691 -1.565 1.00 0.00 W1 O +ATOM 5932 H1 TIP3X1148 -23.790 11.313 -0.715 1.00 0.00 W1 H +ATOM 5933 H2 TIP3X1148 -24.621 11.062 -1.956 1.00 0.00 W1 H +ATOM 5934 OH2 TIP3X1149 -24.343 3.652 -1.974 1.00 0.00 W1 O +ATOM 5935 H1 TIP3X1149 -25.210 3.582 -2.374 1.00 0.00 W1 H +ATOM 5936 H2 TIP3X1149 -24.398 3.112 -1.186 1.00 0.00 W1 H +ATOM 5937 OH2 TIP3X1150 -28.672 0.239 -4.302 1.00 0.00 W1 O +ATOM 5938 H1 TIP3X1150 -28.898 0.693 -5.115 1.00 0.00 W1 H +ATOM 5939 H2 TIP3X1150 -27.842 -0.197 -4.494 1.00 0.00 W1 H +ATOM 5940 OH2 TIP3X1151 -22.577 0.697 -9.221 1.00 0.00 W1 O +ATOM 5941 H1 TIP3X1151 -22.095 1.211 -9.868 1.00 0.00 W1 H +ATOM 5942 H2 TIP3X1151 -22.233 0.991 -8.377 1.00 0.00 W1 H +ATOM 5943 OH2 TIP3X1152 -28.107 5.289 -14.068 1.00 0.00 W1 O +ATOM 5944 H1 TIP3X1152 -27.685 5.935 -14.634 1.00 0.00 W1 H +ATOM 5945 H2 TIP3X1152 -27.395 4.714 -13.787 1.00 0.00 W1 H +ATOM 5946 OH2 TIP3X1153 -27.583 5.945 -4.757 1.00 0.00 W1 O +ATOM 5947 H1 TIP3X1153 -27.667 6.737 -4.225 1.00 0.00 W1 H +ATOM 5948 H2 TIP3X1153 -26.668 5.941 -5.037 1.00 0.00 W1 H +ATOM 5949 OH2 TIP3X1154 -28.400 6.664 -11.571 1.00 0.00 W1 O +ATOM 5950 H1 TIP3X1154 -28.337 6.375 -12.482 1.00 0.00 W1 H +ATOM 5951 H2 TIP3X1154 -27.625 7.209 -11.438 1.00 0.00 W1 H +ATOM 5952 OH2 TIP3X1155 -19.380 3.233 -13.811 1.00 0.00 W1 O +ATOM 5953 H1 TIP3X1155 -20.087 3.722 -14.231 1.00 0.00 W1 H +ATOM 5954 H2 TIP3X1155 -18.655 3.277 -14.435 1.00 0.00 W1 H +ATOM 5955 OH2 TIP3X1156 -30.829 4.120 -2.723 1.00 0.00 W1 O +ATOM 5956 H1 TIP3X1156 -31.734 4.414 -2.612 1.00 0.00 W1 H +ATOM 5957 H2 TIP3X1156 -30.689 3.501 -2.007 1.00 0.00 W1 H +ATOM 5958 OH2 TIP3X1157 -29.686 0.957 -6.741 1.00 0.00 W1 O +ATOM 5959 H1 TIP3X1157 -29.579 0.256 -7.383 1.00 0.00 W1 H +ATOM 5960 H2 TIP3X1157 -29.550 1.763 -7.240 1.00 0.00 W1 H +ATOM 5961 OH2 TIP3X1158 -22.918 5.060 -12.041 1.00 0.00 W1 O +ATOM 5962 H1 TIP3X1158 -22.829 5.640 -12.797 1.00 0.00 W1 H +ATOM 5963 H2 TIP3X1158 -23.688 4.526 -12.237 1.00 0.00 W1 H +ATOM 5964 OH2 TIP3X1159 -24.615 4.392 -14.353 1.00 0.00 W1 O +ATOM 5965 H1 TIP3X1159 -25.053 4.584 -15.183 1.00 0.00 W1 H +ATOM 5966 H2 TIP3X1159 -25.022 3.581 -14.050 1.00 0.00 W1 H +ATOM 5967 OH2 TIP3X1160 -23.905 1.454 -0.564 1.00 0.00 W1 O +ATOM 5968 H1 TIP3X1160 -24.371 1.066 0.176 1.00 0.00 W1 H +ATOM 5969 H2 TIP3X1160 -22.991 1.486 -0.282 1.00 0.00 W1 H +ATOM 5970 OH2 TIP3X1161 -30.267 3.899 -15.413 1.00 0.00 W1 O +ATOM 5971 H1 TIP3X1161 -31.023 3.706 -14.859 1.00 0.00 W1 H +ATOM 5972 H2 TIP3X1161 -29.733 4.497 -14.891 1.00 0.00 W1 H +ATOM 5973 OH2 TIP3X1162 -30.348 15.392 -14.926 1.00 0.00 W1 O +ATOM 5974 H1 TIP3X1162 -29.932 14.645 -14.497 1.00 0.00 W1 H +ATOM 5975 H2 TIP3X1162 -30.335 16.086 -14.267 1.00 0.00 W1 H +ATOM 5976 OH2 TIP3X1163 -21.600 3.552 -9.933 1.00 0.00 W1 O +ATOM 5977 H1 TIP3X1163 -21.937 3.903 -10.758 1.00 0.00 W1 H +ATOM 5978 H2 TIP3X1163 -20.703 3.285 -10.135 1.00 0.00 W1 H +ATOM 5979 OH2 TIP3X1164 -26.145 2.863 -8.189 1.00 0.00 W1 O +ATOM 5980 H1 TIP3X1164 -27.087 2.815 -8.348 1.00 0.00 W1 H +ATOM 5981 H2 TIP3X1164 -26.006 3.737 -7.826 1.00 0.00 W1 H +ATOM 5982 OH2 TIP3X1165 -30.783 3.989 -11.396 1.00 0.00 W1 O +ATOM 5983 H1 TIP3X1165 -31.057 3.864 -10.487 1.00 0.00 W1 H +ATOM 5984 H2 TIP3X1165 -30.977 4.907 -11.582 1.00 0.00 W1 H +ATOM 5985 OH2 TIP3X1166 -26.782 3.316 -3.335 1.00 0.00 W1 O +ATOM 5986 H1 TIP3X1166 -26.760 2.510 -3.851 1.00 0.00 W1 H +ATOM 5987 H2 TIP3X1166 -27.176 3.964 -3.920 1.00 0.00 W1 H +ATOM 5988 OH2 TIP3X1167 -26.199 9.851 -7.531 1.00 0.00 W1 O +ATOM 5989 H1 TIP3X1167 -26.271 8.916 -7.718 1.00 0.00 W1 H +ATOM 5990 H2 TIP3X1167 -26.195 9.905 -6.575 1.00 0.00 W1 H +ATOM 5991 OH2 TIP3X1168 -22.010 6.870 -2.968 1.00 0.00 W1 O +ATOM 5992 H1 TIP3X1168 -21.598 7.701 -2.732 1.00 0.00 W1 H +ATOM 5993 H2 TIP3X1168 -22.560 7.081 -3.723 1.00 0.00 W1 H +ATOM 5994 OH2 TIP3X1169 -16.215 2.237 -13.644 1.00 0.00 W1 O +ATOM 5995 H1 TIP3X1169 -15.780 2.464 -12.822 1.00 0.00 W1 H +ATOM 5996 H2 TIP3X1169 -16.735 1.461 -13.434 1.00 0.00 W1 H +ATOM 5997 OH2 TIP3X1170 -25.060 8.197 -14.466 1.00 0.00 W1 O +ATOM 5998 H1 TIP3X1170 -25.349 8.075 -13.561 1.00 0.00 W1 H +ATOM 5999 H2 TIP3X1170 -24.371 7.543 -14.587 1.00 0.00 W1 H +ATOM 6000 OH2 TIP3X1171 -23.524 6.967 -6.927 1.00 0.00 W1 O +ATOM 6001 H1 TIP3X1171 -23.427 7.764 -6.406 1.00 0.00 W1 H +ATOM 6002 H2 TIP3X1171 -22.649 6.577 -6.936 1.00 0.00 W1 H +ATOM 6003 OH2 TIP3X1172 -23.778 7.348 -10.011 1.00 0.00 W1 O +ATOM 6004 H1 TIP3X1172 -23.157 6.752 -10.429 1.00 0.00 W1 H +ATOM 6005 H2 TIP3X1172 -23.753 7.111 -9.084 1.00 0.00 W1 H +ATOM 6006 OH2 TIP3X1173 -20.884 8.964 -1.075 1.00 0.00 W1 O +ATOM 6007 H1 TIP3X1173 -21.562 9.248 -0.462 1.00 0.00 W1 H +ATOM 6008 H2 TIP3X1173 -20.086 8.923 -0.549 1.00 0.00 W1 H +ATOM 6009 OH2 TIP3X1174 -28.374 8.379 -3.379 1.00 0.00 W1 O +ATOM 6010 H1 TIP3X1174 -27.857 8.785 -2.683 1.00 0.00 W1 H +ATOM 6011 H2 TIP3X1174 -28.757 9.117 -3.855 1.00 0.00 W1 H +ATOM 6012 OH2 TIP3X1175 -29.468 6.342 -1.758 1.00 0.00 W1 O +ATOM 6013 H1 TIP3X1175 -29.672 5.502 -2.170 1.00 0.00 W1 H +ATOM 6014 H2 TIP3X1175 -29.591 6.987 -2.453 1.00 0.00 W1 H +ATOM 6015 OH2 TIP3X1176 -29.575 7.215 -8.934 1.00 0.00 W1 O +ATOM 6016 H1 TIP3X1176 -29.219 8.087 -9.104 1.00 0.00 W1 H +ATOM 6017 H2 TIP3X1176 -29.677 6.824 -9.802 1.00 0.00 W1 H +ATOM 6018 OH2 TIP3X1177 -18.816 9.480 -14.748 1.00 0.00 W1 O +ATOM 6019 H1 TIP3X1177 -18.111 9.978 -15.160 1.00 0.00 W1 H +ATOM 6020 H2 TIP3X1177 -18.367 8.849 -14.184 1.00 0.00 W1 H +ATOM 6021 OH2 TIP3X1178 -29.722 5.944 -6.663 1.00 0.00 W1 O +ATOM 6022 H1 TIP3X1178 -29.628 6.622 -7.332 1.00 0.00 W1 H +ATOM 6023 H2 TIP3X1178 -29.064 6.163 -6.004 1.00 0.00 W1 H +ATOM 6024 OH2 TIP3X1179 -26.935 14.451 -13.399 1.00 0.00 W1 O +ATOM 6025 H1 TIP3X1179 -27.164 14.811 -14.256 1.00 0.00 W1 H +ATOM 6026 H2 TIP3X1179 -27.348 13.587 -13.383 1.00 0.00 W1 H +ATOM 6027 OH2 TIP3X1180 -28.160 9.684 -14.901 1.00 0.00 W1 O +ATOM 6028 H1 TIP3X1180 -28.976 9.394 -15.310 1.00 0.00 W1 H +ATOM 6029 H2 TIP3X1180 -27.628 8.890 -14.840 1.00 0.00 W1 H +ATOM 6030 OH2 TIP3X1181 -26.742 10.523 -1.826 1.00 0.00 W1 O +ATOM 6031 H1 TIP3X1181 -27.315 11.125 -2.301 1.00 0.00 W1 H +ATOM 6032 H2 TIP3X1181 -27.216 10.327 -1.018 1.00 0.00 W1 H +ATOM 6033 OH2 TIP3X1182 -23.666 15.266 -4.136 1.00 0.00 W1 O +ATOM 6034 H1 TIP3X1182 -23.349 14.972 -3.282 1.00 0.00 W1 H +ATOM 6035 H2 TIP3X1182 -23.233 14.689 -4.765 1.00 0.00 W1 H +ATOM 6036 OH2 TIP3X1183 -18.960 15.508 -10.002 1.00 0.00 W1 O +ATOM 6037 H1 TIP3X1183 -19.373 14.817 -10.521 1.00 0.00 W1 H +ATOM 6038 H2 TIP3X1183 -19.156 16.315 -10.479 1.00 0.00 W1 H +ATOM 6039 OH2 TIP3X1184 -22.382 12.190 -12.750 1.00 0.00 W1 O +ATOM 6040 H1 TIP3X1184 -22.123 12.976 -13.232 1.00 0.00 W1 H +ATOM 6041 H2 TIP3X1184 -22.952 12.514 -12.052 1.00 0.00 W1 H +ATOM 6042 OH2 TIP3X1185 -22.365 7.345 -13.679 1.00 0.00 W1 O +ATOM 6043 H1 TIP3X1185 -21.542 7.418 -14.162 1.00 0.00 W1 H +ATOM 6044 H2 TIP3X1185 -22.358 8.089 -13.077 1.00 0.00 W1 H +ATOM 6045 OH2 TIP3X1186 -30.999 9.170 -12.482 1.00 0.00 W1 O +ATOM 6046 H1 TIP3X1186 -31.152 9.262 -13.422 1.00 0.00 W1 H +ATOM 6047 H2 TIP3X1186 -30.045 9.170 -12.393 1.00 0.00 W1 H +ATOM 6048 OH2 TIP3X1187 -20.237 8.758 -5.886 1.00 0.00 W1 O +ATOM 6049 H1 TIP3X1187 -19.691 9.419 -5.460 1.00 0.00 W1 H +ATOM 6050 H2 TIP3X1187 -19.778 8.557 -6.701 1.00 0.00 W1 H +ATOM 6051 OH2 TIP3X1188 -21.414 13.731 -14.808 1.00 0.00 W1 O +ATOM 6052 H1 TIP3X1188 -20.590 13.766 -14.324 1.00 0.00 W1 H +ATOM 6053 H2 TIP3X1188 -21.211 13.219 -15.591 1.00 0.00 W1 H +ATOM 6054 OH2 TIP3X1189 -21.422 11.519 -3.157 1.00 0.00 W1 O +ATOM 6055 H1 TIP3X1189 -22.243 11.766 -2.731 1.00 0.00 W1 H +ATOM 6056 H2 TIP3X1189 -21.651 11.423 -4.082 1.00 0.00 W1 H +ATOM 6057 OH2 TIP3X1190 -24.797 11.744 -11.271 1.00 0.00 W1 O +ATOM 6058 H1 TIP3X1190 -25.504 11.891 -11.899 1.00 0.00 W1 H +ATOM 6059 H2 TIP3X1190 -25.134 12.088 -10.444 1.00 0.00 W1 H +ATOM 6060 OH2 TIP3X1191 -28.232 12.656 -2.559 1.00 0.00 W1 O +ATOM 6061 H1 TIP3X1191 -27.498 13.267 -2.624 1.00 0.00 W1 H +ATOM 6062 H2 TIP3X1191 -28.544 12.750 -1.660 1.00 0.00 W1 H +ATOM 6063 OH2 TIP3X1192 -28.642 14.360 -8.458 1.00 0.00 W1 O +ATOM 6064 H1 TIP3X1192 -29.228 13.619 -8.611 1.00 0.00 W1 H +ATOM 6065 H2 TIP3X1192 -28.199 14.494 -9.296 1.00 0.00 W1 H +ATOM 6066 OH2 TIP3X1193 -20.289 0.374 -7.377 1.00 0.00 W1 O +ATOM 6067 H1 TIP3X1193 -19.956 0.298 -8.272 1.00 0.00 W1 H +ATOM 6068 H2 TIP3X1193 -20.334 1.316 -7.216 1.00 0.00 W1 H +ATOM 6069 OH2 TIP3X1194 -23.051 2.502 -7.143 1.00 0.00 W1 O +ATOM 6070 H1 TIP3X1194 -23.413 2.991 -7.882 1.00 0.00 W1 H +ATOM 6071 H2 TIP3X1194 -23.782 2.413 -6.533 1.00 0.00 W1 H +ATOM 6072 OH2 TIP3X1195 -24.332 0.487 -13.215 1.00 0.00 W1 O +ATOM 6073 H1 TIP3X1195 -23.476 0.232 -12.869 1.00 0.00 W1 H +ATOM 6074 H2 TIP3X1195 -24.850 -0.317 -13.190 1.00 0.00 W1 H +ATOM 6075 OH2 TIP3X1196 -21.580 0.331 -12.171 1.00 0.00 W1 O +ATOM 6076 H1 TIP3X1196 -21.124 -0.405 -11.763 1.00 0.00 W1 H +ATOM 6077 H2 TIP3X1196 -21.173 0.417 -13.033 1.00 0.00 W1 H +ATOM 6078 OH2 TIP3X1197 -26.941 14.909 -0.717 1.00 0.00 W1 O +ATOM 6079 H1 TIP3X1197 -27.191 15.666 -1.246 1.00 0.00 W1 H +ATOM 6080 H2 TIP3X1197 -26.030 14.740 -0.956 1.00 0.00 W1 H +ATOM 6081 OH2 TIP3X1198 -21.934 13.604 -10.416 1.00 0.00 W1 O +ATOM 6082 H1 TIP3X1198 -21.273 12.962 -10.156 1.00 0.00 W1 H +ATOM 6083 H2 TIP3X1198 -21.947 14.238 -9.700 1.00 0.00 W1 H +ATOM 6084 OH2 TIP3X1199 -24.195 14.506 -1.507 1.00 0.00 W1 O +ATOM 6085 H1 TIP3X1199 -23.977 13.614 -1.236 1.00 0.00 W1 H +ATOM 6086 H2 TIP3X1199 -23.587 15.060 -1.017 1.00 0.00 W1 H +ATOM 6087 OH2 TIP3X1200 -25.248 2.624 -11.462 1.00 0.00 W1 O +ATOM 6088 H1 TIP3X1200 -24.591 1.965 -11.685 1.00 0.00 W1 H +ATOM 6089 H2 TIP3X1200 -25.206 2.693 -10.508 1.00 0.00 W1 H +ATOM 6090 OH2 TIP3X1201 -30.535 0.963 -2.006 1.00 0.00 W1 O +ATOM 6091 H1 TIP3X1201 -29.787 0.767 -2.570 1.00 0.00 W1 H +ATOM 6092 H2 TIP3X1201 -30.327 0.537 -1.175 1.00 0.00 W1 H +ATOM 6093 OH2 TIP3X1202 -19.415 13.690 -12.405 1.00 0.00 W1 O +ATOM 6094 H1 TIP3X1202 -19.271 12.749 -12.302 1.00 0.00 W1 H +ATOM 6095 H2 TIP3X1202 -18.592 14.022 -12.762 1.00 0.00 W1 H +ATOM 6096 OH2 TIP3X1203 -17.748 0.456 -1.178 1.00 0.00 W1 O +ATOM 6097 H1 TIP3X1203 -18.361 0.530 -1.908 1.00 0.00 W1 H +ATOM 6098 H2 TIP3X1203 -16.978 0.951 -1.459 1.00 0.00 W1 H +ATOM 6099 OH2 TIP3X1204 -26.954 14.669 -10.691 1.00 0.00 W1 O +ATOM 6100 H1 TIP3X1204 -26.961 14.714 -11.647 1.00 0.00 W1 H +ATOM 6101 H2 TIP3X1204 -26.147 15.115 -10.435 1.00 0.00 W1 H +ATOM 6102 OH2 TIP3X1205 -28.419 2.930 -11.062 1.00 0.00 W1 O +ATOM 6103 H1 TIP3X1205 -29.063 3.318 -11.654 1.00 0.00 W1 H +ATOM 6104 H2 TIP3X1205 -27.617 3.427 -11.220 1.00 0.00 W1 H +ATOM 6105 OH2 TIP3X1206 -26.991 11.529 -13.330 1.00 0.00 W1 O +ATOM 6106 H1 TIP3X1206 -27.030 10.901 -14.052 1.00 0.00 W1 H +ATOM 6107 H2 TIP3X1206 -27.710 11.275 -12.752 1.00 0.00 W1 H +ATOM 6108 OH2 TIP3X1207 -29.096 11.057 4.309 1.00 0.00 W1 O +ATOM 6109 H1 TIP3X1207 -28.914 10.981 5.246 1.00 0.00 W1 H +ATOM 6110 H2 TIP3X1207 -29.120 11.999 4.145 1.00 0.00 W1 H +ATOM 6111 OH2 TIP3X1208 -26.010 8.271 4.026 1.00 0.00 W1 O +ATOM 6112 H1 TIP3X1208 -25.979 9.181 4.323 1.00 0.00 W1 H +ATOM 6113 H2 TIP3X1208 -25.502 7.788 4.678 1.00 0.00 W1 H +ATOM 6114 OH2 TIP3X1209 -29.206 12.670 10.448 1.00 0.00 W1 O +ATOM 6115 H1 TIP3X1209 -28.800 12.873 11.291 1.00 0.00 W1 H +ATOM 6116 H2 TIP3X1209 -29.777 11.924 10.630 1.00 0.00 W1 H +ATOM 6117 OH2 TIP3X1210 -25.950 13.826 8.683 1.00 0.00 W1 O +ATOM 6118 H1 TIP3X1210 -25.595 14.675 8.420 1.00 0.00 W1 H +ATOM 6119 H2 TIP3X1210 -26.885 13.886 8.487 1.00 0.00 W1 H +ATOM 6120 OH2 TIP3X1211 -25.086 1.816 9.947 1.00 0.00 W1 O +ATOM 6121 H1 TIP3X1211 -24.828 1.079 10.500 1.00 0.00 W1 H +ATOM 6122 H2 TIP3X1211 -25.762 1.460 9.371 1.00 0.00 W1 H +ATOM 6123 OH2 TIP3X1212 -25.198 5.141 9.695 1.00 0.00 W1 O +ATOM 6124 H1 TIP3X1212 -24.695 4.438 10.107 1.00 0.00 W1 H +ATOM 6125 H2 TIP3X1212 -24.541 5.783 9.428 1.00 0.00 W1 H +ATOM 6126 OH2 TIP3X1213 -22.854 8.804 10.532 1.00 0.00 W1 O +ATOM 6127 H1 TIP3X1213 -21.977 8.826 10.149 1.00 0.00 W1 H +ATOM 6128 H2 TIP3X1213 -23.119 9.722 10.578 1.00 0.00 W1 H +ATOM 6129 OH2 TIP3X1214 -23.704 11.352 10.342 1.00 0.00 W1 O +ATOM 6130 H1 TIP3X1214 -23.728 11.579 9.413 1.00 0.00 W1 H +ATOM 6131 H2 TIP3X1214 -24.624 11.298 10.601 1.00 0.00 W1 H +ATOM 6132 OH2 TIP3X1215 -28.841 3.233 7.180 1.00 0.00 W1 O +ATOM 6133 H1 TIP3X1215 -29.166 4.113 7.371 1.00 0.00 W1 H +ATOM 6134 H2 TIP3X1215 -28.964 3.131 6.237 1.00 0.00 W1 H +ATOM 6135 OH2 TIP3X1216 -24.459 11.686 7.392 1.00 0.00 W1 O +ATOM 6136 H1 TIP3X1216 -25.031 10.967 7.661 1.00 0.00 W1 H +ATOM 6137 H2 TIP3X1216 -24.920 12.476 7.674 1.00 0.00 W1 H +ATOM 6138 OH2 TIP3X1217 -22.238 2.138 11.962 1.00 0.00 W1 O +ATOM 6139 H1 TIP3X1217 -22.980 2.617 12.329 1.00 0.00 W1 H +ATOM 6140 H2 TIP3X1217 -22.618 1.326 11.628 1.00 0.00 W1 H +ATOM 6141 OH2 TIP3X1218 -26.886 2.843 1.764 1.00 0.00 W1 O +ATOM 6142 H1 TIP3X1218 -26.984 2.181 2.448 1.00 0.00 W1 H +ATOM 6143 H2 TIP3X1218 -27.069 2.374 0.949 1.00 0.00 W1 H +ATOM 6144 OH2 TIP3X1219 -29.934 0.117 4.113 1.00 0.00 W1 O +ATOM 6145 H1 TIP3X1219 -29.209 0.738 4.182 1.00 0.00 W1 H +ATOM 6146 H2 TIP3X1219 -30.306 0.084 4.995 1.00 0.00 W1 H +ATOM 6147 OH2 TIP3X1220 -24.668 6.353 14.100 1.00 0.00 W1 O +ATOM 6148 H1 TIP3X1220 -23.804 6.751 13.998 1.00 0.00 W1 H +ATOM 6149 H2 TIP3X1220 -24.516 5.416 13.977 1.00 0.00 W1 H +ATOM 6150 OH2 TIP3X1221 -30.352 10.060 10.827 1.00 0.00 W1 O +ATOM 6151 H1 TIP3X1221 -30.887 9.458 10.309 1.00 0.00 W1 H +ATOM 6152 H2 TIP3X1221 -30.823 10.146 11.656 1.00 0.00 W1 H +ATOM 6153 OH2 TIP3X1222 -18.759 9.595 12.219 1.00 0.00 W1 O +ATOM 6154 H1 TIP3X1222 -19.662 9.678 12.527 1.00 0.00 W1 H +ATOM 6155 H2 TIP3X1222 -18.591 8.653 12.223 1.00 0.00 W1 H +ATOM 6156 OH2 TIP3X1223 -27.248 7.241 15.169 1.00 0.00 W1 O +ATOM 6157 H1 TIP3X1223 -27.777 7.007 14.407 1.00 0.00 W1 H +ATOM 6158 H2 TIP3X1223 -26.353 7.289 14.835 1.00 0.00 W1 H +ATOM 6159 OH2 TIP3X1224 -26.338 10.447 10.731 1.00 0.00 W1 O +ATOM 6160 H1 TIP3X1224 -26.383 9.892 11.509 1.00 0.00 W1 H +ATOM 6161 H2 TIP3X1224 -26.971 11.145 10.897 1.00 0.00 W1 H +ATOM 6162 OH2 TIP3X1225 -19.579 13.553 12.305 1.00 0.00 W1 O +ATOM 6163 H1 TIP3X1225 -20.286 12.924 12.163 1.00 0.00 W1 H +ATOM 6164 H2 TIP3X1225 -19.250 13.747 11.428 1.00 0.00 W1 H +ATOM 6165 OH2 TIP3X1226 -19.328 12.089 14.702 1.00 0.00 W1 O +ATOM 6166 H1 TIP3X1226 -19.961 11.482 14.318 1.00 0.00 W1 H +ATOM 6167 H2 TIP3X1226 -19.214 12.769 14.038 1.00 0.00 W1 H +ATOM 6168 OH2 TIP3X1227 -25.161 0.468 7.161 1.00 0.00 W1 O +ATOM 6169 H1 TIP3X1227 -25.453 1.378 7.100 1.00 0.00 W1 H +ATOM 6170 H2 TIP3X1227 -24.329 0.451 6.688 1.00 0.00 W1 H +ATOM 6171 OH2 TIP3X1228 -23.037 10.415 0.815 1.00 0.00 W1 O +ATOM 6172 H1 TIP3X1228 -23.732 9.793 1.030 1.00 0.00 W1 H +ATOM 6173 H2 TIP3X1228 -23.055 11.051 1.530 1.00 0.00 W1 H +ATOM 6174 OH2 TIP3X1229 -29.709 12.875 -0.031 1.00 0.00 W1 O +ATOM 6175 H1 TIP3X1229 -29.263 12.326 0.614 1.00 0.00 W1 H +ATOM 6176 H2 TIP3X1229 -30.605 12.541 -0.053 1.00 0.00 W1 H +ATOM 6177 OH2 TIP3X1230 -16.223 10.666 13.305 1.00 0.00 W1 O +ATOM 6178 H1 TIP3X1230 -16.333 11.615 13.364 1.00 0.00 W1 H +ATOM 6179 H2 TIP3X1230 -17.116 10.321 13.294 1.00 0.00 W1 H +ATOM 6180 OH2 TIP3X1231 -29.537 13.492 2.923 1.00 0.00 W1 O +ATOM 6181 H1 TIP3X1231 -29.605 14.328 3.384 1.00 0.00 W1 H +ATOM 6182 H2 TIP3X1231 -30.432 13.153 2.907 1.00 0.00 W1 H +ATOM 6183 OH2 TIP3X1232 -20.586 0.279 13.452 1.00 0.00 W1 O +ATOM 6184 H1 TIP3X1232 -20.893 1.028 12.939 1.00 0.00 W1 H +ATOM 6185 H2 TIP3X1232 -20.532 -0.438 12.820 1.00 0.00 W1 H +ATOM 6186 OH2 TIP3X1233 -26.372 14.196 11.481 1.00 0.00 W1 O +ATOM 6187 H1 TIP3X1233 -25.524 14.434 11.854 1.00 0.00 W1 H +ATOM 6188 H2 TIP3X1233 -26.161 13.816 10.628 1.00 0.00 W1 H +ATOM 6189 OH2 TIP3X1234 -27.906 2.214 14.831 1.00 0.00 W1 O +ATOM 6190 H1 TIP3X1234 -28.783 2.304 15.205 1.00 0.00 W1 H +ATOM 6191 H2 TIP3X1234 -27.843 2.927 14.195 1.00 0.00 W1 H +ATOM 6192 OH2 TIP3X1235 -21.050 0.958 0.539 1.00 0.00 W1 O +ATOM 6193 H1 TIP3X1235 -20.318 1.574 0.563 1.00 0.00 W1 H +ATOM 6194 H2 TIP3X1235 -20.809 0.325 -0.138 1.00 0.00 W1 H +ATOM 6195 OH2 TIP3X1236 -29.011 10.272 6.882 1.00 0.00 W1 O +ATOM 6196 H1 TIP3X1236 -29.679 10.595 7.486 1.00 0.00 W1 H +ATOM 6197 H2 TIP3X1236 -28.219 10.202 7.414 1.00 0.00 W1 H +ATOM 6198 OH2 TIP3X1237 -24.014 11.691 13.992 1.00 0.00 W1 O +ATOM 6199 H1 TIP3X1237 -23.790 11.313 14.843 1.00 0.00 W1 H +ATOM 6200 H2 TIP3X1237 -24.621 11.062 13.602 1.00 0.00 W1 H +ATOM 6201 OH2 TIP3X1238 -20.535 2.995 9.405 1.00 0.00 W1 O +ATOM 6202 H1 TIP3X1238 -20.476 2.814 10.343 1.00 0.00 W1 H +ATOM 6203 H2 TIP3X1238 -21.473 3.083 9.236 1.00 0.00 W1 H +ATOM 6204 OH2 TIP3X1239 -24.343 3.652 13.584 1.00 0.00 W1 O +ATOM 6205 H1 TIP3X1239 -25.210 3.582 13.184 1.00 0.00 W1 H +ATOM 6206 H2 TIP3X1239 -24.398 3.112 14.372 1.00 0.00 W1 H +ATOM 6207 OH2 TIP3X1240 -16.857 6.373 15.337 1.00 0.00 W1 O +ATOM 6208 H1 TIP3X1240 -16.063 5.839 15.320 1.00 0.00 W1 H +ATOM 6209 H2 TIP3X1240 -17.151 6.338 16.247 1.00 0.00 W1 H +ATOM 6210 OH2 TIP3X1241 -28.672 0.239 11.255 1.00 0.00 W1 O +ATOM 6211 H1 TIP3X1241 -28.898 0.693 10.443 1.00 0.00 W1 H +ATOM 6212 H2 TIP3X1241 -27.842 -0.197 11.064 1.00 0.00 W1 H +ATOM 6213 OH2 TIP3X1242 -22.577 0.697 6.337 1.00 0.00 W1 O +ATOM 6214 H1 TIP3X1242 -22.095 1.211 5.689 1.00 0.00 W1 H +ATOM 6215 H2 TIP3X1242 -22.233 0.991 7.181 1.00 0.00 W1 H +ATOM 6216 OH2 TIP3X1243 -28.107 5.289 1.490 1.00 0.00 W1 O +ATOM 6217 H1 TIP3X1243 -27.685 5.935 0.924 1.00 0.00 W1 H +ATOM 6218 H2 TIP3X1243 -27.395 4.714 1.771 1.00 0.00 W1 H +ATOM 6219 OH2 TIP3X1244 -27.583 5.945 10.801 1.00 0.00 W1 O +ATOM 6220 H1 TIP3X1244 -27.667 6.737 11.333 1.00 0.00 W1 H +ATOM 6221 H2 TIP3X1244 -26.668 5.941 10.520 1.00 0.00 W1 H +ATOM 6222 OH2 TIP3X1245 -28.400 6.664 3.986 1.00 0.00 W1 O +ATOM 6223 H1 TIP3X1245 -28.337 6.375 3.076 1.00 0.00 W1 H +ATOM 6224 H2 TIP3X1245 -27.625 7.209 4.119 1.00 0.00 W1 H +ATOM 6225 OH2 TIP3X1246 -30.829 4.120 12.834 1.00 0.00 W1 O +ATOM 6226 H1 TIP3X1246 -31.734 4.414 12.945 1.00 0.00 W1 H +ATOM 6227 H2 TIP3X1246 -30.689 3.501 13.551 1.00 0.00 W1 H +ATOM 6228 OH2 TIP3X1247 -29.686 0.957 8.817 1.00 0.00 W1 O +ATOM 6229 H1 TIP3X1247 -29.579 0.256 8.174 1.00 0.00 W1 H +ATOM 6230 H2 TIP3X1247 -29.550 1.763 8.318 1.00 0.00 W1 H +ATOM 6231 OH2 TIP3X1248 -18.164 4.585 13.704 1.00 0.00 W1 O +ATOM 6232 H1 TIP3X1248 -17.853 5.164 14.400 1.00 0.00 W1 H +ATOM 6233 H2 TIP3X1248 -19.108 4.521 13.849 1.00 0.00 W1 H +ATOM 6234 OH2 TIP3X1249 -21.121 4.591 13.651 1.00 0.00 W1 O +ATOM 6235 H1 TIP3X1249 -21.481 5.159 12.970 1.00 0.00 W1 H +ATOM 6236 H2 TIP3X1249 -21.459 3.721 13.440 1.00 0.00 W1 H +ATOM 6237 OH2 TIP3X1250 -24.615 4.392 1.204 1.00 0.00 W1 O +ATOM 6238 H1 TIP3X1250 -25.053 4.584 0.375 1.00 0.00 W1 H +ATOM 6239 H2 TIP3X1250 -25.022 3.581 1.508 1.00 0.00 W1 H +ATOM 6240 OH2 TIP3X1251 -23.905 1.454 14.993 1.00 0.00 W1 O +ATOM 6241 H1 TIP3X1251 -24.371 1.066 15.734 1.00 0.00 W1 H +ATOM 6242 H2 TIP3X1251 -22.991 1.486 15.276 1.00 0.00 W1 H +ATOM 6243 OH2 TIP3X1252 -18.342 6.798 11.675 1.00 0.00 W1 O +ATOM 6244 H1 TIP3X1252 -18.322 6.149 12.378 1.00 0.00 W1 H +ATOM 6245 H2 TIP3X1252 -19.176 6.647 11.231 1.00 0.00 W1 H +ATOM 6246 OH2 TIP3X1253 -30.267 3.899 0.144 1.00 0.00 W1 O +ATOM 6247 H1 TIP3X1253 -31.023 3.706 0.698 1.00 0.00 W1 H +ATOM 6248 H2 TIP3X1253 -29.733 4.497 0.667 1.00 0.00 W1 H +ATOM 6249 OH2 TIP3X1254 -30.348 15.392 0.631 1.00 0.00 W1 O +ATOM 6250 H1 TIP3X1254 -29.932 14.645 1.060 1.00 0.00 W1 H +ATOM 6251 H2 TIP3X1254 -30.335 16.086 1.291 1.00 0.00 W1 H +ATOM 6252 OH2 TIP3X1255 -26.145 2.863 7.368 1.00 0.00 W1 O +ATOM 6253 H1 TIP3X1255 -27.087 2.815 7.209 1.00 0.00 W1 H +ATOM 6254 H2 TIP3X1255 -26.006 3.737 7.732 1.00 0.00 W1 H +ATOM 6255 OH2 TIP3X1256 -30.783 3.989 4.162 1.00 0.00 W1 O +ATOM 6256 H1 TIP3X1256 -31.057 3.864 5.070 1.00 0.00 W1 H +ATOM 6257 H2 TIP3X1256 -30.977 4.907 3.976 1.00 0.00 W1 H +ATOM 6258 OH2 TIP3X1257 -26.782 3.316 12.222 1.00 0.00 W1 O +ATOM 6259 H1 TIP3X1257 -26.760 2.510 11.706 1.00 0.00 W1 H +ATOM 6260 H2 TIP3X1257 -27.176 3.964 11.638 1.00 0.00 W1 H +ATOM 6261 OH2 TIP3X1258 -26.199 9.851 8.027 1.00 0.00 W1 O +ATOM 6262 H1 TIP3X1258 -26.271 8.916 7.839 1.00 0.00 W1 H +ATOM 6263 H2 TIP3X1258 -26.195 9.905 8.983 1.00 0.00 W1 H +ATOM 6264 OH2 TIP3X1259 -22.010 6.870 12.589 1.00 0.00 W1 O +ATOM 6265 H1 TIP3X1259 -21.598 7.701 12.826 1.00 0.00 W1 H +ATOM 6266 H2 TIP3X1259 -22.560 7.081 11.835 1.00 0.00 W1 H +ATOM 6267 OH2 TIP3X1260 -25.060 8.197 1.092 1.00 0.00 W1 O +ATOM 6268 H1 TIP3X1260 -25.349 8.075 1.996 1.00 0.00 W1 H +ATOM 6269 H2 TIP3X1260 -24.371 7.543 0.970 1.00 0.00 W1 H +ATOM 6270 OH2 TIP3X1261 -23.524 6.967 8.630 1.00 0.00 W1 O +ATOM 6271 H1 TIP3X1261 -23.427 7.764 9.152 1.00 0.00 W1 H +ATOM 6272 H2 TIP3X1261 -22.649 6.577 8.622 1.00 0.00 W1 H +ATOM 6273 OH2 TIP3X1262 -20.884 8.964 14.482 1.00 0.00 W1 O +ATOM 6274 H1 TIP3X1262 -21.562 9.248 15.095 1.00 0.00 W1 H +ATOM 6275 H2 TIP3X1262 -20.086 8.923 15.009 1.00 0.00 W1 H +ATOM 6276 OH2 TIP3X1263 -28.374 8.379 12.178 1.00 0.00 W1 O +ATOM 6277 H1 TIP3X1263 -27.857 8.785 12.874 1.00 0.00 W1 H +ATOM 6278 H2 TIP3X1263 -28.757 9.117 11.703 1.00 0.00 W1 H +ATOM 6279 OH2 TIP3X1264 -29.468 6.342 13.800 1.00 0.00 W1 O +ATOM 6280 H1 TIP3X1264 -29.672 5.502 13.387 1.00 0.00 W1 H +ATOM 6281 H2 TIP3X1264 -29.591 6.987 13.104 1.00 0.00 W1 H +ATOM 6282 OH2 TIP3X1265 -29.575 7.215 6.623 1.00 0.00 W1 O +ATOM 6283 H1 TIP3X1265 -29.219 8.087 6.453 1.00 0.00 W1 H +ATOM 6284 H2 TIP3X1265 -29.677 6.824 5.755 1.00 0.00 W1 H +ATOM 6285 OH2 TIP3X1266 -29.722 5.944 8.894 1.00 0.00 W1 O +ATOM 6286 H1 TIP3X1266 -29.628 6.622 8.226 1.00 0.00 W1 H +ATOM 6287 H2 TIP3X1266 -29.064 6.163 9.553 1.00 0.00 W1 H +ATOM 6288 OH2 TIP3X1267 -26.935 14.451 2.158 1.00 0.00 W1 O +ATOM 6289 H1 TIP3X1267 -27.164 14.811 1.301 1.00 0.00 W1 H +ATOM 6290 H2 TIP3X1267 -27.348 13.587 2.174 1.00 0.00 W1 H +ATOM 6291 OH2 TIP3X1268 -28.160 9.684 0.656 1.00 0.00 W1 O +ATOM 6292 H1 TIP3X1268 -28.976 9.394 0.248 1.00 0.00 W1 H +ATOM 6293 H2 TIP3X1268 -27.628 8.890 0.718 1.00 0.00 W1 H +ATOM 6294 OH2 TIP3X1269 -26.742 10.523 13.731 1.00 0.00 W1 O +ATOM 6295 H1 TIP3X1269 -27.315 11.125 13.257 1.00 0.00 W1 H +ATOM 6296 H2 TIP3X1269 -27.216 10.327 14.539 1.00 0.00 W1 H +ATOM 6297 OH2 TIP3X1270 -23.666 15.266 11.422 1.00 0.00 W1 O +ATOM 6298 H1 TIP3X1270 -23.349 14.972 12.275 1.00 0.00 W1 H +ATOM 6299 H2 TIP3X1270 -23.233 14.689 10.793 1.00 0.00 W1 H +ATOM 6300 OH2 TIP3X1271 -22.382 12.190 2.807 1.00 0.00 W1 O +ATOM 6301 H1 TIP3X1271 -22.123 12.976 2.325 1.00 0.00 W1 H +ATOM 6302 H2 TIP3X1271 -22.952 12.514 3.505 1.00 0.00 W1 H +ATOM 6303 OH2 TIP3X1272 -18.964 2.068 11.670 1.00 0.00 W1 O +ATOM 6304 H1 TIP3X1272 -18.159 1.838 11.206 1.00 0.00 W1 H +ATOM 6305 H2 TIP3X1272 -18.673 2.621 12.395 1.00 0.00 W1 H +ATOM 6306 OH2 TIP3X1273 -30.999 9.170 3.076 1.00 0.00 W1 O +ATOM 6307 H1 TIP3X1273 -31.152 9.262 2.136 1.00 0.00 W1 H +ATOM 6308 H2 TIP3X1273 -30.045 9.170 3.165 1.00 0.00 W1 H +ATOM 6309 OH2 TIP3X1274 -21.414 13.731 0.749 1.00 0.00 W1 O +ATOM 6310 H1 TIP3X1274 -20.590 13.766 1.234 1.00 0.00 W1 H +ATOM 6311 H2 TIP3X1274 -21.211 13.219 -0.033 1.00 0.00 W1 H +ATOM 6312 OH2 TIP3X1275 -21.422 11.519 12.400 1.00 0.00 W1 O +ATOM 6313 H1 TIP3X1275 -22.243 11.766 12.826 1.00 0.00 W1 H +ATOM 6314 H2 TIP3X1275 -21.651 11.423 11.476 1.00 0.00 W1 H +ATOM 6315 OH2 TIP3X1276 -24.797 11.744 4.287 1.00 0.00 W1 O +ATOM 6316 H1 TIP3X1276 -25.504 11.891 3.659 1.00 0.00 W1 H +ATOM 6317 H2 TIP3X1276 -25.134 12.088 5.114 1.00 0.00 W1 H +ATOM 6318 OH2 TIP3X1277 -28.232 12.656 12.998 1.00 0.00 W1 O +ATOM 6319 H1 TIP3X1277 -27.498 13.267 12.933 1.00 0.00 W1 H +ATOM 6320 H2 TIP3X1277 -28.544 12.750 13.898 1.00 0.00 W1 H +ATOM 6321 OH2 TIP3X1278 -28.642 14.360 7.100 1.00 0.00 W1 O +ATOM 6322 H1 TIP3X1278 -29.228 13.619 6.946 1.00 0.00 W1 H +ATOM 6323 H2 TIP3X1278 -28.199 14.494 6.261 1.00 0.00 W1 H +ATOM 6324 OH2 TIP3X1279 -23.051 2.502 8.415 1.00 0.00 W1 O +ATOM 6325 H1 TIP3X1279 -23.413 2.991 7.676 1.00 0.00 W1 H +ATOM 6326 H2 TIP3X1279 -23.782 2.413 9.025 1.00 0.00 W1 H +ATOM 6327 OH2 TIP3X1280 -24.332 0.487 2.343 1.00 0.00 W1 O +ATOM 6328 H1 TIP3X1280 -23.476 0.232 2.688 1.00 0.00 W1 H +ATOM 6329 H2 TIP3X1280 -24.850 -0.317 2.368 1.00 0.00 W1 H +ATOM 6330 OH2 TIP3X1281 -26.941 14.909 14.841 1.00 0.00 W1 O +ATOM 6331 H1 TIP3X1281 -27.191 15.666 14.311 1.00 0.00 W1 H +ATOM 6332 H2 TIP3X1281 -26.030 14.740 14.602 1.00 0.00 W1 H +ATOM 6333 OH2 TIP3X1282 -24.195 14.506 14.051 1.00 0.00 W1 O +ATOM 6334 H1 TIP3X1282 -23.977 13.614 14.321 1.00 0.00 W1 H +ATOM 6335 H2 TIP3X1282 -23.587 15.060 14.540 1.00 0.00 W1 H +ATOM 6336 OH2 TIP3X1283 -25.248 2.624 4.095 1.00 0.00 W1 O +ATOM 6337 H1 TIP3X1283 -24.591 1.965 3.873 1.00 0.00 W1 H +ATOM 6338 H2 TIP3X1283 -25.206 2.693 5.049 1.00 0.00 W1 H +ATOM 6339 OH2 TIP3X1284 -30.535 0.963 13.551 1.00 0.00 W1 O +ATOM 6340 H1 TIP3X1284 -29.787 0.767 12.987 1.00 0.00 W1 H +ATOM 6341 H2 TIP3X1284 -30.327 0.537 14.383 1.00 0.00 W1 H +ATOM 6342 OH2 TIP3X1285 -17.748 0.456 14.380 1.00 0.00 W1 O +ATOM 6343 H1 TIP3X1285 -18.361 0.530 13.649 1.00 0.00 W1 H +ATOM 6344 H2 TIP3X1285 -16.978 0.951 14.098 1.00 0.00 W1 H +ATOM 6345 OH2 TIP3X1286 -26.954 14.669 4.866 1.00 0.00 W1 O +ATOM 6346 H1 TIP3X1286 -26.961 14.714 3.910 1.00 0.00 W1 H +ATOM 6347 H2 TIP3X1286 -26.147 15.115 5.122 1.00 0.00 W1 H +ATOM 6348 OH2 TIP3X1287 -28.419 2.930 4.496 1.00 0.00 W1 O +ATOM 6349 H1 TIP3X1287 -29.063 3.318 3.903 1.00 0.00 W1 H +ATOM 6350 H2 TIP3X1287 -27.617 3.427 4.338 1.00 0.00 W1 H +ATOM 6351 OH2 TIP3X1288 -26.991 11.529 2.227 1.00 0.00 W1 O +ATOM 6352 H1 TIP3X1288 -27.030 10.901 1.506 1.00 0.00 W1 H +ATOM 6353 H2 TIP3X1288 -27.710 11.275 2.805 1.00 0.00 W1 H +ATOM 6354 OH2 TIP3X1289 -29.096 11.057 19.866 1.00 0.00 W1 O +ATOM 6355 H1 TIP3X1289 -28.914 10.981 20.803 1.00 0.00 W1 H +ATOM 6356 H2 TIP3X1289 -29.120 11.999 19.702 1.00 0.00 W1 H +ATOM 6357 OH2 TIP3X1290 -17.994 8.548 23.605 1.00 0.00 W1 O +ATOM 6358 H1 TIP3X1290 -17.759 8.812 22.715 1.00 0.00 W1 H +ATOM 6359 H2 TIP3X1290 -17.165 8.284 24.003 1.00 0.00 W1 H +ATOM 6360 OH2 TIP3X1291 -26.010 8.271 19.583 1.00 0.00 W1 O +ATOM 6361 H1 TIP3X1291 -25.979 9.181 19.880 1.00 0.00 W1 H +ATOM 6362 H2 TIP3X1291 -25.502 7.788 20.235 1.00 0.00 W1 H +ATOM 6363 OH2 TIP3X1292 -18.206 12.431 21.727 1.00 0.00 W1 O +ATOM 6364 H1 TIP3X1292 -18.481 12.921 22.502 1.00 0.00 W1 H +ATOM 6365 H2 TIP3X1292 -18.732 11.631 21.750 1.00 0.00 W1 H +ATOM 6366 OH2 TIP3X1293 -19.690 10.874 18.770 1.00 0.00 W1 O +ATOM 6367 H1 TIP3X1293 -19.528 10.645 17.855 1.00 0.00 W1 H +ATOM 6368 H2 TIP3X1293 -20.619 11.103 18.799 1.00 0.00 W1 H +ATOM 6369 OH2 TIP3X1294 -15.842 11.406 23.554 1.00 0.00 W1 O +ATOM 6370 H1 TIP3X1294 -16.394 11.489 22.777 1.00 0.00 W1 H +ATOM 6371 H2 TIP3X1294 -16.453 11.189 24.259 1.00 0.00 W1 H +ATOM 6372 OH2 TIP3X1295 -29.206 12.670 26.005 1.00 0.00 W1 O +ATOM 6373 H1 TIP3X1295 -28.800 12.873 26.848 1.00 0.00 W1 H +ATOM 6374 H2 TIP3X1295 -29.777 11.924 26.188 1.00 0.00 W1 H +ATOM 6375 OH2 TIP3X1296 -21.831 14.295 25.231 1.00 0.00 W1 O +ATOM 6376 H1 TIP3X1296 -21.530 13.394 25.353 1.00 0.00 W1 H +ATOM 6377 H2 TIP3X1296 -21.205 14.675 24.614 1.00 0.00 W1 H +ATOM 6378 OH2 TIP3X1297 -18.398 14.251 25.111 1.00 0.00 W1 O +ATOM 6379 H1 TIP3X1297 -18.834 15.075 24.892 1.00 0.00 W1 H +ATOM 6380 H2 TIP3X1297 -17.469 14.477 25.161 1.00 0.00 W1 H +ATOM 6381 OH2 TIP3X1298 -25.950 13.826 24.241 1.00 0.00 W1 O +ATOM 6382 H1 TIP3X1298 -25.595 14.675 23.977 1.00 0.00 W1 H +ATOM 6383 H2 TIP3X1298 -26.885 13.886 24.045 1.00 0.00 W1 H +ATOM 6384 OH2 TIP3X1299 -21.109 5.719 23.142 1.00 0.00 W1 O +ATOM 6385 H1 TIP3X1299 -21.186 4.909 22.638 1.00 0.00 W1 H +ATOM 6386 H2 TIP3X1299 -20.166 5.858 23.230 1.00 0.00 W1 H +ATOM 6387 OH2 TIP3X1300 -25.086 1.816 25.504 1.00 0.00 W1 O +ATOM 6388 H1 TIP3X1300 -24.828 1.079 26.057 1.00 0.00 W1 H +ATOM 6389 H2 TIP3X1300 -25.762 1.460 24.929 1.00 0.00 W1 H +ATOM 6390 OH2 TIP3X1301 -16.842 2.821 21.927 1.00 0.00 W1 O +ATOM 6391 H1 TIP3X1301 -17.150 3.159 22.768 1.00 0.00 W1 H +ATOM 6392 H2 TIP3X1301 -16.774 1.875 22.059 1.00 0.00 W1 H +ATOM 6393 OH2 TIP3X1302 -18.244 4.016 23.881 1.00 0.00 W1 O +ATOM 6394 H1 TIP3X1302 -17.669 3.788 24.612 1.00 0.00 W1 H +ATOM 6395 H2 TIP3X1302 -19.119 3.761 24.176 1.00 0.00 W1 H +ATOM 6396 OH2 TIP3X1303 -25.198 5.141 25.252 1.00 0.00 W1 O +ATOM 6397 H1 TIP3X1303 -24.695 4.438 25.664 1.00 0.00 W1 H +ATOM 6398 H2 TIP3X1303 -24.541 5.783 24.986 1.00 0.00 W1 H +ATOM 6399 OH2 TIP3X1304 -17.721 6.189 22.150 1.00 0.00 W1 O +ATOM 6400 H1 TIP3X1304 -17.680 5.289 22.474 1.00 0.00 W1 H +ATOM 6401 H2 TIP3X1304 -17.839 6.722 22.936 1.00 0.00 W1 H +ATOM 6402 OH2 TIP3X1305 -19.037 2.832 20.018 1.00 0.00 W1 O +ATOM 6403 H1 TIP3X1305 -18.212 3.017 20.467 1.00 0.00 W1 H +ATOM 6404 H2 TIP3X1305 -18.960 3.287 19.179 1.00 0.00 W1 H +ATOM 6405 OH2 TIP3X1306 -22.854 8.804 26.090 1.00 0.00 W1 O +ATOM 6406 H1 TIP3X1306 -21.977 8.826 25.707 1.00 0.00 W1 H +ATOM 6407 H2 TIP3X1306 -23.119 9.722 26.136 1.00 0.00 W1 H +ATOM 6408 OH2 TIP3X1307 -23.704 11.352 25.900 1.00 0.00 W1 O +ATOM 6409 H1 TIP3X1307 -23.728 11.579 24.970 1.00 0.00 W1 H +ATOM 6410 H2 TIP3X1307 -24.624 11.298 26.158 1.00 0.00 W1 H +ATOM 6411 OH2 TIP3X1308 -28.841 3.233 22.738 1.00 0.00 W1 O +ATOM 6412 H1 TIP3X1308 -29.166 4.113 22.929 1.00 0.00 W1 H +ATOM 6413 H2 TIP3X1308 -28.964 3.131 21.794 1.00 0.00 W1 H +ATOM 6414 OH2 TIP3X1309 -26.685 6.791 22.750 1.00 0.00 W1 O +ATOM 6415 H1 TIP3X1309 -27.368 6.341 22.253 1.00 0.00 W1 H +ATOM 6416 H2 TIP3X1309 -26.199 6.087 23.182 1.00 0.00 W1 H +ATOM 6417 OH2 TIP3X1310 -20.629 11.715 25.147 1.00 0.00 W1 O +ATOM 6418 H1 TIP3X1310 -20.871 11.129 24.430 1.00 0.00 W1 H +ATOM 6419 H2 TIP3X1310 -19.679 11.626 25.219 1.00 0.00 W1 H +ATOM 6420 OH2 TIP3X1311 -16.331 15.350 21.927 1.00 0.00 W1 O +ATOM 6421 H1 TIP3X1311 -16.336 14.882 22.762 1.00 0.00 W1 H +ATOM 6422 H2 TIP3X1311 -17.212 15.221 21.574 1.00 0.00 W1 H +ATOM 6423 OH2 TIP3X1312 -24.459 11.686 22.949 1.00 0.00 W1 O +ATOM 6424 H1 TIP3X1312 -25.031 10.967 23.218 1.00 0.00 W1 H +ATOM 6425 H2 TIP3X1312 -24.920 12.476 23.232 1.00 0.00 W1 H +ATOM 6426 OH2 TIP3X1313 -22.238 2.138 27.520 1.00 0.00 W1 O +ATOM 6427 H1 TIP3X1313 -22.980 2.617 27.887 1.00 0.00 W1 H +ATOM 6428 H2 TIP3X1313 -22.618 1.326 27.185 1.00 0.00 W1 H +ATOM 6429 OH2 TIP3X1314 -26.886 2.843 17.321 1.00 0.00 W1 O +ATOM 6430 H1 TIP3X1314 -26.984 2.181 18.006 1.00 0.00 W1 H +ATOM 6431 H2 TIP3X1314 -27.069 2.374 16.507 1.00 0.00 W1 H +ATOM 6432 OH2 TIP3X1315 -15.992 3.764 25.511 1.00 0.00 W1 O +ATOM 6433 H1 TIP3X1315 -15.473 4.433 25.063 1.00 0.00 W1 H +ATOM 6434 H2 TIP3X1315 -15.550 3.640 26.351 1.00 0.00 W1 H +ATOM 6435 OH2 TIP3X1316 -29.934 0.117 19.671 1.00 0.00 W1 O +ATOM 6436 H1 TIP3X1316 -29.209 0.738 19.740 1.00 0.00 W1 H +ATOM 6437 H2 TIP3X1316 -30.306 0.084 20.552 1.00 0.00 W1 H +ATOM 6438 OH2 TIP3X1317 -24.668 6.353 29.657 1.00 0.00 W1 O +ATOM 6439 H1 TIP3X1317 -23.804 6.751 29.556 1.00 0.00 W1 H +ATOM 6440 H2 TIP3X1317 -24.516 5.416 29.534 1.00 0.00 W1 H +ATOM 6441 OH2 TIP3X1318 -21.502 11.263 22.397 1.00 0.00 W1 O +ATOM 6442 H1 TIP3X1318 -21.408 10.400 21.993 1.00 0.00 W1 H +ATOM 6443 H2 TIP3X1318 -22.435 11.463 22.321 1.00 0.00 W1 H +ATOM 6444 OH2 TIP3X1319 -22.890 9.547 19.928 1.00 0.00 W1 O +ATOM 6445 H1 TIP3X1319 -23.455 8.933 20.397 1.00 0.00 W1 H +ATOM 6446 H2 TIP3X1319 -23.364 10.378 19.956 1.00 0.00 W1 H +ATOM 6447 OH2 TIP3X1320 -30.352 10.060 26.385 1.00 0.00 W1 O +ATOM 6448 H1 TIP3X1320 -30.887 9.458 25.867 1.00 0.00 W1 H +ATOM 6449 H2 TIP3X1320 -30.823 10.146 27.214 1.00 0.00 W1 H +ATOM 6450 OH2 TIP3X1321 -19.056 9.081 20.752 1.00 0.00 W1 O +ATOM 6451 H1 TIP3X1321 -19.112 8.166 20.476 1.00 0.00 W1 H +ATOM 6452 H2 TIP3X1321 -19.229 9.583 19.956 1.00 0.00 W1 H +ATOM 6453 OH2 TIP3X1322 -18.759 9.595 27.777 1.00 0.00 W1 O +ATOM 6454 H1 TIP3X1322 -19.662 9.678 28.084 1.00 0.00 W1 H +ATOM 6455 H2 TIP3X1322 -18.591 8.653 27.780 1.00 0.00 W1 H +ATOM 6456 OH2 TIP3X1323 -16.393 7.554 25.582 1.00 0.00 W1 O +ATOM 6457 H1 TIP3X1323 -15.730 6.873 25.463 1.00 0.00 W1 H +ATOM 6458 H2 TIP3X1323 -17.109 7.115 26.041 1.00 0.00 W1 H +ATOM 6459 OH2 TIP3X1324 -27.248 7.241 30.727 1.00 0.00 W1 O +ATOM 6460 H1 TIP3X1324 -27.777 7.007 29.964 1.00 0.00 W1 H +ATOM 6461 H2 TIP3X1324 -26.353 7.289 30.392 1.00 0.00 W1 H +ATOM 6462 OH2 TIP3X1325 -26.338 10.447 26.288 1.00 0.00 W1 O +ATOM 6463 H1 TIP3X1325 -26.383 9.892 27.067 1.00 0.00 W1 H +ATOM 6464 H2 TIP3X1325 -26.971 11.145 26.454 1.00 0.00 W1 H +ATOM 6465 OH2 TIP3X1326 -17.666 11.577 26.038 1.00 0.00 W1 O +ATOM 6466 H1 TIP3X1326 -17.243 12.345 26.422 1.00 0.00 W1 H +ATOM 6467 H2 TIP3X1326 -17.970 11.069 26.790 1.00 0.00 W1 H +ATOM 6468 OH2 TIP3X1327 -19.579 13.553 27.863 1.00 0.00 W1 O +ATOM 6469 H1 TIP3X1327 -20.286 12.924 27.720 1.00 0.00 W1 H +ATOM 6470 H2 TIP3X1327 -19.250 13.747 26.985 1.00 0.00 W1 H +ATOM 6471 OH2 TIP3X1328 -19.328 12.089 30.259 1.00 0.00 W1 O +ATOM 6472 H1 TIP3X1328 -19.961 11.482 29.875 1.00 0.00 W1 H +ATOM 6473 H2 TIP3X1328 -19.214 12.769 29.595 1.00 0.00 W1 H +ATOM 6474 OH2 TIP3X1329 -15.717 13.997 24.326 1.00 0.00 W1 O +ATOM 6475 H1 TIP3X1329 -15.040 13.838 24.982 1.00 0.00 W1 H +ATOM 6476 H2 TIP3X1329 -15.951 13.126 24.007 1.00 0.00 W1 H +ATOM 6477 OH2 TIP3X1330 -25.161 0.468 22.718 1.00 0.00 W1 O +ATOM 6478 H1 TIP3X1330 -25.453 1.378 22.657 1.00 0.00 W1 H +ATOM 6479 H2 TIP3X1330 -24.329 0.451 22.245 1.00 0.00 W1 H +ATOM 6480 OH2 TIP3X1331 -23.037 10.415 16.373 1.00 0.00 W1 O +ATOM 6481 H1 TIP3X1331 -23.732 9.793 16.587 1.00 0.00 W1 H +ATOM 6482 H2 TIP3X1331 -23.055 11.051 17.088 1.00 0.00 W1 H +ATOM 6483 OH2 TIP3X1332 -15.657 9.178 15.809 1.00 0.00 W1 O +ATOM 6484 H1 TIP3X1332 -15.920 8.428 15.275 1.00 0.00 W1 H +ATOM 6485 H2 TIP3X1332 -15.911 9.942 15.292 1.00 0.00 W1 H +ATOM 6486 OH2 TIP3X1333 -29.709 12.875 15.526 1.00 0.00 W1 O +ATOM 6487 H1 TIP3X1333 -29.263 12.326 16.172 1.00 0.00 W1 H +ATOM 6488 H2 TIP3X1333 -30.605 12.541 15.505 1.00 0.00 W1 H +ATOM 6489 OH2 TIP3X1334 -17.615 15.004 16.785 1.00 0.00 W1 O +ATOM 6490 H1 TIP3X1334 -16.730 14.676 16.626 1.00 0.00 W1 H +ATOM 6491 H2 TIP3X1334 -17.845 15.472 15.982 1.00 0.00 W1 H +ATOM 6492 OH2 TIP3X1335 -16.223 10.666 28.862 1.00 0.00 W1 O +ATOM 6493 H1 TIP3X1335 -16.333 11.615 28.921 1.00 0.00 W1 H +ATOM 6494 H2 TIP3X1335 -17.116 10.321 28.852 1.00 0.00 W1 H +ATOM 6495 OH2 TIP3X1336 -29.537 13.492 18.481 1.00 0.00 W1 O +ATOM 6496 H1 TIP3X1336 -29.605 14.328 18.941 1.00 0.00 W1 H +ATOM 6497 H2 TIP3X1336 -30.432 13.153 18.464 1.00 0.00 W1 H +ATOM 6498 OH2 TIP3X1337 -16.957 11.985 16.125 1.00 0.00 W1 O +ATOM 6499 H1 TIP3X1337 -16.925 11.905 17.079 1.00 0.00 W1 H +ATOM 6500 H2 TIP3X1337 -17.790 12.422 15.948 1.00 0.00 W1 H +ATOM 6501 OH2 TIP3X1338 -20.586 0.279 29.009 1.00 0.00 W1 O +ATOM 6502 H1 TIP3X1338 -20.893 1.028 28.497 1.00 0.00 W1 H +ATOM 6503 H2 TIP3X1338 -20.532 -0.438 28.377 1.00 0.00 W1 H +ATOM 6504 OH2 TIP3X1339 -26.372 14.196 27.038 1.00 0.00 W1 O +ATOM 6505 H1 TIP3X1339 -25.524 14.434 27.412 1.00 0.00 W1 H +ATOM 6506 H2 TIP3X1339 -26.161 13.816 26.185 1.00 0.00 W1 H +ATOM 6507 OH2 TIP3X1340 -27.906 2.214 30.389 1.00 0.00 W1 O +ATOM 6508 H1 TIP3X1340 -28.783 2.304 30.763 1.00 0.00 W1 H +ATOM 6509 H2 TIP3X1340 -27.843 2.927 29.752 1.00 0.00 W1 H +ATOM 6510 OH2 TIP3X1341 -21.709 4.161 16.119 1.00 0.00 W1 O +ATOM 6511 H1 TIP3X1341 -21.875 4.458 15.224 1.00 0.00 W1 H +ATOM 6512 H2 TIP3X1341 -22.580 4.038 16.496 1.00 0.00 W1 H +ATOM 6513 OH2 TIP3X1342 -16.311 11.922 19.167 1.00 0.00 W1 O +ATOM 6514 H1 TIP3X1342 -15.738 11.185 19.380 1.00 0.00 W1 H +ATOM 6515 H2 TIP3X1342 -16.642 12.221 20.014 1.00 0.00 W1 H +ATOM 6516 OH2 TIP3X1343 -21.050 0.958 16.096 1.00 0.00 W1 O +ATOM 6517 H1 TIP3X1343 -20.318 1.574 16.121 1.00 0.00 W1 H +ATOM 6518 H2 TIP3X1343 -20.809 0.325 15.420 1.00 0.00 W1 H +ATOM 6519 OH2 TIP3X1344 -16.518 1.051 26.361 1.00 0.00 W1 O +ATOM 6520 H1 TIP3X1344 -16.026 0.422 26.889 1.00 0.00 W1 H +ATOM 6521 H2 TIP3X1344 -15.918 1.294 25.656 1.00 0.00 W1 H +ATOM 6522 OH2 TIP3X1345 -29.011 10.272 22.439 1.00 0.00 W1 O +ATOM 6523 H1 TIP3X1345 -29.679 10.595 23.044 1.00 0.00 W1 H +ATOM 6524 H2 TIP3X1345 -28.219 10.202 22.971 1.00 0.00 W1 H +ATOM 6525 OH2 TIP3X1346 -24.014 11.691 29.549 1.00 0.00 W1 O +ATOM 6526 H1 TIP3X1346 -23.790 11.313 30.400 1.00 0.00 W1 H +ATOM 6527 H2 TIP3X1346 -24.621 11.062 29.159 1.00 0.00 W1 H +ATOM 6528 OH2 TIP3X1347 -20.535 2.995 24.962 1.00 0.00 W1 O +ATOM 6529 H1 TIP3X1347 -20.476 2.814 25.900 1.00 0.00 W1 H +ATOM 6530 H2 TIP3X1347 -21.473 3.083 24.794 1.00 0.00 W1 H +ATOM 6531 OH2 TIP3X1348 -24.343 3.652 29.141 1.00 0.00 W1 O +ATOM 6532 H1 TIP3X1348 -25.210 3.582 28.741 1.00 0.00 W1 H +ATOM 6533 H2 TIP3X1348 -24.398 3.112 29.929 1.00 0.00 W1 H +ATOM 6534 OH2 TIP3X1349 -16.857 6.373 30.894 1.00 0.00 W1 O +ATOM 6535 H1 TIP3X1349 -16.063 5.839 30.878 1.00 0.00 W1 H +ATOM 6536 H2 TIP3X1349 -17.151 6.338 31.804 1.00 0.00 W1 H +ATOM 6537 OH2 TIP3X1350 -28.672 0.239 26.813 1.00 0.00 W1 O +ATOM 6538 H1 TIP3X1350 -28.898 0.693 26.000 1.00 0.00 W1 H +ATOM 6539 H2 TIP3X1350 -27.842 -0.197 26.621 1.00 0.00 W1 H +ATOM 6540 OH2 TIP3X1351 -22.577 0.697 21.894 1.00 0.00 W1 O +ATOM 6541 H1 TIP3X1351 -22.095 1.211 21.247 1.00 0.00 W1 H +ATOM 6542 H2 TIP3X1351 -22.233 0.991 22.738 1.00 0.00 W1 H +ATOM 6543 OH2 TIP3X1352 -28.107 5.289 17.047 1.00 0.00 W1 O +ATOM 6544 H1 TIP3X1352 -27.685 5.935 16.481 1.00 0.00 W1 H +ATOM 6545 H2 TIP3X1352 -27.395 4.714 17.328 1.00 0.00 W1 H +ATOM 6546 OH2 TIP3X1353 -27.583 5.945 26.358 1.00 0.00 W1 O +ATOM 6547 H1 TIP3X1353 -27.667 6.737 26.890 1.00 0.00 W1 H +ATOM 6548 H2 TIP3X1353 -26.668 5.941 26.078 1.00 0.00 W1 H +ATOM 6549 OH2 TIP3X1354 -28.400 6.664 19.544 1.00 0.00 W1 O +ATOM 6550 H1 TIP3X1354 -28.337 6.375 18.633 1.00 0.00 W1 H +ATOM 6551 H2 TIP3X1354 -27.625 7.209 19.677 1.00 0.00 W1 H +ATOM 6552 OH2 TIP3X1355 -19.380 3.233 17.304 1.00 0.00 W1 O +ATOM 6553 H1 TIP3X1355 -20.087 3.722 16.884 1.00 0.00 W1 H +ATOM 6554 H2 TIP3X1355 -18.655 3.277 16.680 1.00 0.00 W1 H +ATOM 6555 OH2 TIP3X1356 -30.829 4.120 28.392 1.00 0.00 W1 O +ATOM 6556 H1 TIP3X1356 -31.734 4.414 28.503 1.00 0.00 W1 H +ATOM 6557 H2 TIP3X1356 -30.689 3.501 29.108 1.00 0.00 W1 H +ATOM 6558 OH2 TIP3X1357 -29.686 0.957 24.374 1.00 0.00 W1 O +ATOM 6559 H1 TIP3X1357 -29.579 0.256 23.732 1.00 0.00 W1 H +ATOM 6560 H2 TIP3X1357 -29.550 1.763 23.875 1.00 0.00 W1 H +ATOM 6561 OH2 TIP3X1358 -18.164 4.585 29.262 1.00 0.00 W1 O +ATOM 6562 H1 TIP3X1358 -17.853 5.164 29.958 1.00 0.00 W1 H +ATOM 6563 H2 TIP3X1358 -19.108 4.521 29.407 1.00 0.00 W1 H +ATOM 6564 OH2 TIP3X1359 -21.121 4.591 29.209 1.00 0.00 W1 O +ATOM 6565 H1 TIP3X1359 -21.481 5.159 28.528 1.00 0.00 W1 H +ATOM 6566 H2 TIP3X1359 -21.459 3.721 28.998 1.00 0.00 W1 H +ATOM 6567 OH2 TIP3X1360 -22.918 5.060 19.074 1.00 0.00 W1 O +ATOM 6568 H1 TIP3X1360 -22.829 5.640 18.318 1.00 0.00 W1 H +ATOM 6569 H2 TIP3X1360 -23.688 4.526 18.878 1.00 0.00 W1 H +ATOM 6570 OH2 TIP3X1361 -24.615 4.392 16.762 1.00 0.00 W1 O +ATOM 6571 H1 TIP3X1361 -25.053 4.584 15.932 1.00 0.00 W1 H +ATOM 6572 H2 TIP3X1361 -25.022 3.581 17.065 1.00 0.00 W1 H +ATOM 6573 OH2 TIP3X1362 -23.905 1.454 30.551 1.00 0.00 W1 O +ATOM 6574 H1 TIP3X1362 -24.371 1.066 31.291 1.00 0.00 W1 H +ATOM 6575 H2 TIP3X1362 -22.991 1.486 30.833 1.00 0.00 W1 H +ATOM 6576 OH2 TIP3X1363 -18.342 6.798 27.232 1.00 0.00 W1 O +ATOM 6577 H1 TIP3X1363 -18.322 6.149 27.935 1.00 0.00 W1 H +ATOM 6578 H2 TIP3X1363 -19.176 6.647 26.788 1.00 0.00 W1 H +ATOM 6579 OH2 TIP3X1364 -30.267 3.899 15.702 1.00 0.00 W1 O +ATOM 6580 H1 TIP3X1364 -31.023 3.706 16.256 1.00 0.00 W1 H +ATOM 6581 H2 TIP3X1364 -29.733 4.497 16.224 1.00 0.00 W1 H +ATOM 6582 OH2 TIP3X1365 -30.348 15.392 16.189 1.00 0.00 W1 O +ATOM 6583 H1 TIP3X1365 -29.932 14.645 16.618 1.00 0.00 W1 H +ATOM 6584 H2 TIP3X1365 -30.335 16.086 16.848 1.00 0.00 W1 H +ATOM 6585 OH2 TIP3X1366 -21.600 3.552 21.182 1.00 0.00 W1 O +ATOM 6586 H1 TIP3X1366 -21.937 3.903 20.357 1.00 0.00 W1 H +ATOM 6587 H2 TIP3X1366 -20.703 3.285 20.980 1.00 0.00 W1 H +ATOM 6588 OH2 TIP3X1367 -26.145 2.863 22.926 1.00 0.00 W1 O +ATOM 6589 H1 TIP3X1367 -27.087 2.815 22.767 1.00 0.00 W1 H +ATOM 6590 H2 TIP3X1367 -26.006 3.737 23.289 1.00 0.00 W1 H +ATOM 6591 OH2 TIP3X1368 -30.783 3.989 19.719 1.00 0.00 W1 O +ATOM 6592 H1 TIP3X1368 -31.057 3.864 20.628 1.00 0.00 W1 H +ATOM 6593 H2 TIP3X1368 -30.977 4.907 19.533 1.00 0.00 W1 H +ATOM 6594 OH2 TIP3X1369 -26.782 3.316 27.779 1.00 0.00 W1 O +ATOM 6595 H1 TIP3X1369 -26.760 2.510 27.264 1.00 0.00 W1 H +ATOM 6596 H2 TIP3X1369 -27.176 3.964 27.195 1.00 0.00 W1 H +ATOM 6597 OH2 TIP3X1370 -26.199 9.851 23.584 1.00 0.00 W1 O +ATOM 6598 H1 TIP3X1370 -26.271 8.916 23.397 1.00 0.00 W1 H +ATOM 6599 H2 TIP3X1370 -26.195 9.905 24.540 1.00 0.00 W1 H +ATOM 6600 OH2 TIP3X1371 -22.010 6.870 28.147 1.00 0.00 W1 O +ATOM 6601 H1 TIP3X1371 -21.598 7.701 28.383 1.00 0.00 W1 H +ATOM 6602 H2 TIP3X1371 -22.560 7.081 27.392 1.00 0.00 W1 H +ATOM 6603 OH2 TIP3X1372 -16.215 2.237 17.471 1.00 0.00 W1 O +ATOM 6604 H1 TIP3X1372 -15.780 2.464 18.293 1.00 0.00 W1 H +ATOM 6605 H2 TIP3X1372 -16.735 1.461 17.681 1.00 0.00 W1 H +ATOM 6606 OH2 TIP3X1373 -25.060 8.197 16.649 1.00 0.00 W1 O +ATOM 6607 H1 TIP3X1373 -25.349 8.075 17.554 1.00 0.00 W1 H +ATOM 6608 H2 TIP3X1373 -24.371 7.543 16.528 1.00 0.00 W1 H +ATOM 6609 OH2 TIP3X1374 -18.357 6.713 17.717 1.00 0.00 W1 O +ATOM 6610 H1 TIP3X1374 -19.222 6.514 18.076 1.00 0.00 W1 H +ATOM 6611 H2 TIP3X1374 -17.800 6.834 18.486 1.00 0.00 W1 H +ATOM 6612 OH2 TIP3X1375 -23.524 6.967 24.188 1.00 0.00 W1 O +ATOM 6613 H1 TIP3X1375 -23.427 7.764 24.709 1.00 0.00 W1 H +ATOM 6614 H2 TIP3X1375 -22.649 6.577 24.179 1.00 0.00 W1 H +ATOM 6615 OH2 TIP3X1376 -23.778 7.348 21.104 1.00 0.00 W1 O +ATOM 6616 H1 TIP3X1376 -23.157 6.752 20.686 1.00 0.00 W1 H +ATOM 6617 H2 TIP3X1376 -23.753 7.111 22.030 1.00 0.00 W1 H +ATOM 6618 OH2 TIP3X1377 -20.884 8.964 30.039 1.00 0.00 W1 O +ATOM 6619 H1 TIP3X1377 -21.562 9.248 30.653 1.00 0.00 W1 H +ATOM 6620 H2 TIP3X1377 -20.086 8.923 30.566 1.00 0.00 W1 H +ATOM 6621 OH2 TIP3X1378 -28.374 8.379 27.736 1.00 0.00 W1 O +ATOM 6622 H1 TIP3X1378 -27.857 8.785 28.432 1.00 0.00 W1 H +ATOM 6623 H2 TIP3X1378 -28.757 9.117 27.260 1.00 0.00 W1 H +ATOM 6624 OH2 TIP3X1379 -29.468 6.342 29.357 1.00 0.00 W1 O +ATOM 6625 H1 TIP3X1379 -29.672 5.502 28.945 1.00 0.00 W1 H +ATOM 6626 H2 TIP3X1379 -29.591 6.987 28.662 1.00 0.00 W1 H +ATOM 6627 OH2 TIP3X1380 -29.575 7.215 22.181 1.00 0.00 W1 O +ATOM 6628 H1 TIP3X1380 -29.219 8.087 22.011 1.00 0.00 W1 H +ATOM 6629 H2 TIP3X1380 -29.677 6.824 21.313 1.00 0.00 W1 H +ATOM 6630 OH2 TIP3X1381 -18.816 9.480 16.367 1.00 0.00 W1 O +ATOM 6631 H1 TIP3X1381 -18.111 9.978 15.955 1.00 0.00 W1 H +ATOM 6632 H2 TIP3X1381 -18.367 8.849 16.931 1.00 0.00 W1 H +ATOM 6633 OH2 TIP3X1382 -16.220 6.827 19.730 1.00 0.00 W1 O +ATOM 6634 H1 TIP3X1382 -16.507 7.000 20.626 1.00 0.00 W1 H +ATOM 6635 H2 TIP3X1382 -15.707 7.598 19.489 1.00 0.00 W1 H +ATOM 6636 OH2 TIP3X1383 -29.722 5.944 24.452 1.00 0.00 W1 O +ATOM 6637 H1 TIP3X1383 -29.628 6.622 23.783 1.00 0.00 W1 H +ATOM 6638 H2 TIP3X1383 -29.064 6.163 25.111 1.00 0.00 W1 H +ATOM 6639 OH2 TIP3X1384 -26.935 14.451 17.715 1.00 0.00 W1 O +ATOM 6640 H1 TIP3X1384 -27.164 14.811 16.859 1.00 0.00 W1 H +ATOM 6641 H2 TIP3X1384 -27.348 13.587 17.731 1.00 0.00 W1 H +ATOM 6642 OH2 TIP3X1385 -28.160 9.684 16.214 1.00 0.00 W1 O +ATOM 6643 H1 TIP3X1385 -28.976 9.394 15.805 1.00 0.00 W1 H +ATOM 6644 H2 TIP3X1385 -27.628 8.890 16.275 1.00 0.00 W1 H +ATOM 6645 OH2 TIP3X1386 -26.742 10.523 29.288 1.00 0.00 W1 O +ATOM 6646 H1 TIP3X1386 -27.315 11.125 28.814 1.00 0.00 W1 H +ATOM 6647 H2 TIP3X1386 -27.216 10.327 30.096 1.00 0.00 W1 H +ATOM 6648 OH2 TIP3X1387 -23.666 15.266 26.979 1.00 0.00 W1 O +ATOM 6649 H1 TIP3X1387 -23.349 14.972 27.833 1.00 0.00 W1 H +ATOM 6650 H2 TIP3X1387 -23.233 14.689 26.350 1.00 0.00 W1 H +ATOM 6651 OH2 TIP3X1388 -18.960 15.508 21.113 1.00 0.00 W1 O +ATOM 6652 H1 TIP3X1388 -19.373 14.817 20.594 1.00 0.00 W1 H +ATOM 6653 H2 TIP3X1388 -19.156 16.315 20.636 1.00 0.00 W1 H +ATOM 6654 OH2 TIP3X1389 -22.382 12.190 18.365 1.00 0.00 W1 O +ATOM 6655 H1 TIP3X1389 -22.123 12.976 17.883 1.00 0.00 W1 H +ATOM 6656 H2 TIP3X1389 -22.952 12.514 19.063 1.00 0.00 W1 H +ATOM 6657 OH2 TIP3X1390 -22.365 7.345 17.436 1.00 0.00 W1 O +ATOM 6658 H1 TIP3X1390 -21.542 7.418 16.953 1.00 0.00 W1 H +ATOM 6659 H2 TIP3X1390 -22.358 8.089 18.038 1.00 0.00 W1 H +ATOM 6660 OH2 TIP3X1391 -18.964 2.068 27.227 1.00 0.00 W1 O +ATOM 6661 H1 TIP3X1391 -18.159 1.838 26.763 1.00 0.00 W1 H +ATOM 6662 H2 TIP3X1391 -18.673 2.621 27.952 1.00 0.00 W1 H +ATOM 6663 OH2 TIP3X1392 -30.999 9.170 18.633 1.00 0.00 W1 O +ATOM 6664 H1 TIP3X1392 -31.152 9.262 17.693 1.00 0.00 W1 H +ATOM 6665 H2 TIP3X1392 -30.045 9.170 18.722 1.00 0.00 W1 H +ATOM 6666 OH2 TIP3X1393 -20.237 8.758 25.229 1.00 0.00 W1 O +ATOM 6667 H1 TIP3X1393 -19.691 9.419 25.655 1.00 0.00 W1 H +ATOM 6668 H2 TIP3X1393 -19.778 8.557 24.414 1.00 0.00 W1 H +ATOM 6669 OH2 TIP3X1394 -21.414 13.731 16.307 1.00 0.00 W1 O +ATOM 6670 H1 TIP3X1394 -20.590 13.766 16.791 1.00 0.00 W1 H +ATOM 6671 H2 TIP3X1394 -21.211 13.219 15.524 1.00 0.00 W1 H +ATOM 6672 OH2 TIP3X1395 -21.422 11.519 27.958 1.00 0.00 W1 O +ATOM 6673 H1 TIP3X1395 -22.243 11.766 28.384 1.00 0.00 W1 H +ATOM 6674 H2 TIP3X1395 -21.651 11.423 27.033 1.00 0.00 W1 H +ATOM 6675 OH2 TIP3X1396 -24.797 11.744 19.844 1.00 0.00 W1 O +ATOM 6676 H1 TIP3X1396 -25.504 11.891 19.216 1.00 0.00 W1 H +ATOM 6677 H2 TIP3X1396 -25.134 12.088 20.671 1.00 0.00 W1 H +ATOM 6678 OH2 TIP3X1397 -28.232 12.656 28.555 1.00 0.00 W1 O +ATOM 6679 H1 TIP3X1397 -27.498 13.267 28.491 1.00 0.00 W1 H +ATOM 6680 H2 TIP3X1397 -28.544 12.750 29.455 1.00 0.00 W1 H +ATOM 6681 OH2 TIP3X1398 -28.642 14.360 22.657 1.00 0.00 W1 O +ATOM 6682 H1 TIP3X1398 -29.228 13.619 22.503 1.00 0.00 W1 H +ATOM 6683 H2 TIP3X1398 -28.199 14.494 21.819 1.00 0.00 W1 H +ATOM 6684 OH2 TIP3X1399 -20.289 0.374 23.738 1.00 0.00 W1 O +ATOM 6685 H1 TIP3X1399 -19.956 0.298 22.843 1.00 0.00 W1 H +ATOM 6686 H2 TIP3X1399 -20.334 1.316 23.899 1.00 0.00 W1 H +ATOM 6687 OH2 TIP3X1400 -23.051 2.502 23.972 1.00 0.00 W1 O +ATOM 6688 H1 TIP3X1400 -23.413 2.991 23.233 1.00 0.00 W1 H +ATOM 6689 H2 TIP3X1400 -23.782 2.413 24.582 1.00 0.00 W1 H +ATOM 6690 OH2 TIP3X1401 -24.332 0.487 17.900 1.00 0.00 W1 O +ATOM 6691 H1 TIP3X1401 -23.476 0.232 18.245 1.00 0.00 W1 H +ATOM 6692 H2 TIP3X1401 -24.850 -0.317 17.925 1.00 0.00 W1 H +ATOM 6693 OH2 TIP3X1402 -21.580 0.331 18.944 1.00 0.00 W1 O +ATOM 6694 H1 TIP3X1402 -21.124 -0.405 19.352 1.00 0.00 W1 H +ATOM 6695 H2 TIP3X1402 -21.173 0.417 18.082 1.00 0.00 W1 H +ATOM 6696 OH2 TIP3X1403 -26.941 14.909 30.398 1.00 0.00 W1 O +ATOM 6697 H1 TIP3X1403 -27.191 15.666 29.869 1.00 0.00 W1 H +ATOM 6698 H2 TIP3X1403 -26.030 14.740 30.159 1.00 0.00 W1 H +ATOM 6699 OH2 TIP3X1404 -21.934 13.604 20.699 1.00 0.00 W1 O +ATOM 6700 H1 TIP3X1404 -21.273 12.962 20.959 1.00 0.00 W1 H +ATOM 6701 H2 TIP3X1404 -21.947 14.238 21.415 1.00 0.00 W1 H +ATOM 6702 OH2 TIP3X1405 -24.195 14.506 29.608 1.00 0.00 W1 O +ATOM 6703 H1 TIP3X1405 -23.977 13.614 29.879 1.00 0.00 W1 H +ATOM 6704 H2 TIP3X1405 -23.587 15.060 30.098 1.00 0.00 W1 H +ATOM 6705 OH2 TIP3X1406 -25.248 2.624 19.653 1.00 0.00 W1 O +ATOM 6706 H1 TIP3X1406 -24.591 1.965 19.430 1.00 0.00 W1 H +ATOM 6707 H2 TIP3X1406 -25.206 2.693 20.607 1.00 0.00 W1 H +ATOM 6708 OH2 TIP3X1407 -30.535 0.963 29.109 1.00 0.00 W1 O +ATOM 6709 H1 TIP3X1407 -29.787 0.767 28.545 1.00 0.00 W1 H +ATOM 6710 H2 TIP3X1407 -30.327 0.537 29.940 1.00 0.00 W1 H +ATOM 6711 OH2 TIP3X1408 -19.415 13.690 18.710 1.00 0.00 W1 O +ATOM 6712 H1 TIP3X1408 -19.271 12.749 18.813 1.00 0.00 W1 H +ATOM 6713 H2 TIP3X1408 -18.592 14.022 18.353 1.00 0.00 W1 H +ATOM 6714 OH2 TIP3X1409 -17.748 0.456 29.937 1.00 0.00 W1 O +ATOM 6715 H1 TIP3X1409 -18.361 0.530 29.207 1.00 0.00 W1 H +ATOM 6716 H2 TIP3X1409 -16.978 0.951 29.656 1.00 0.00 W1 H +ATOM 6717 OH2 TIP3X1410 -26.954 14.669 20.424 1.00 0.00 W1 O +ATOM 6718 H1 TIP3X1410 -26.961 14.714 19.468 1.00 0.00 W1 H +ATOM 6719 H2 TIP3X1410 -26.147 15.115 20.680 1.00 0.00 W1 H +ATOM 6720 OH2 TIP3X1411 -16.045 13.608 28.373 1.00 0.00 W1 O +ATOM 6721 H1 TIP3X1411 -16.768 14.159 28.674 1.00 0.00 W1 H +ATOM 6722 H2 TIP3X1411 -15.257 14.107 28.587 1.00 0.00 W1 H +ATOM 6723 OH2 TIP3X1412 -28.419 2.930 20.053 1.00 0.00 W1 O +ATOM 6724 H1 TIP3X1412 -29.063 3.318 19.461 1.00 0.00 W1 H +ATOM 6725 H2 TIP3X1412 -27.617 3.427 19.895 1.00 0.00 W1 H +ATOM 6726 OH2 TIP3X1413 -26.991 11.529 17.785 1.00 0.00 W1 O +ATOM 6727 H1 TIP3X1413 -27.030 10.901 17.063 1.00 0.00 W1 H +ATOM 6728 H2 TIP3X1413 -27.710 11.275 18.363 1.00 0.00 W1 H +ATOM 6729 OH2 TIP3X1414 -29.096 26.614 -26.806 1.00 0.00 W1 O +ATOM 6730 H1 TIP3X1414 -28.914 26.538 -25.869 1.00 0.00 W1 H +ATOM 6731 H2 TIP3X1414 -29.120 27.557 -26.970 1.00 0.00 W1 H +ATOM 6732 OH2 TIP3X1415 -17.994 24.105 -23.068 1.00 0.00 W1 O +ATOM 6733 H1 TIP3X1415 -17.759 24.370 -23.957 1.00 0.00 W1 H +ATOM 6734 H2 TIP3X1415 -17.165 23.842 -22.669 1.00 0.00 W1 H +ATOM 6735 OH2 TIP3X1416 -26.010 23.829 -27.089 1.00 0.00 W1 O +ATOM 6736 H1 TIP3X1416 -25.979 24.738 -26.792 1.00 0.00 W1 H +ATOM 6737 H2 TIP3X1416 -25.502 23.346 -26.437 1.00 0.00 W1 H +ATOM 6738 OH2 TIP3X1417 -18.206 27.988 -24.946 1.00 0.00 W1 O +ATOM 6739 H1 TIP3X1417 -18.481 28.478 -24.171 1.00 0.00 W1 H +ATOM 6740 H2 TIP3X1417 -18.732 27.188 -24.922 1.00 0.00 W1 H +ATOM 6741 OH2 TIP3X1418 -19.690 26.431 -27.903 1.00 0.00 W1 O +ATOM 6742 H1 TIP3X1418 -19.528 26.203 -28.818 1.00 0.00 W1 H +ATOM 6743 H2 TIP3X1418 -20.619 26.660 -27.873 1.00 0.00 W1 H +ATOM 6744 OH2 TIP3X1419 -15.842 26.963 -23.118 1.00 0.00 W1 O +ATOM 6745 H1 TIP3X1419 -16.394 27.046 -23.896 1.00 0.00 W1 H +ATOM 6746 H2 TIP3X1419 -16.453 26.747 -22.413 1.00 0.00 W1 H +ATOM 6747 OH2 TIP3X1420 -29.206 28.227 -20.667 1.00 0.00 W1 O +ATOM 6748 H1 TIP3X1420 -28.800 28.431 -19.824 1.00 0.00 W1 H +ATOM 6749 H2 TIP3X1420 -29.777 27.482 -20.484 1.00 0.00 W1 H +ATOM 6750 OH2 TIP3X1421 -21.831 29.852 -21.441 1.00 0.00 W1 O +ATOM 6751 H1 TIP3X1421 -21.530 28.952 -21.319 1.00 0.00 W1 H +ATOM 6752 H2 TIP3X1421 -21.205 30.233 -22.058 1.00 0.00 W1 H +ATOM 6753 OH2 TIP3X1422 -18.398 29.809 -21.561 1.00 0.00 W1 O +ATOM 6754 H1 TIP3X1422 -18.834 30.632 -21.781 1.00 0.00 W1 H +ATOM 6755 H2 TIP3X1422 -17.469 30.035 -21.512 1.00 0.00 W1 H +ATOM 6756 OH2 TIP3X1423 -25.950 29.384 -22.432 1.00 0.00 W1 O +ATOM 6757 H1 TIP3X1423 -25.595 30.233 -22.695 1.00 0.00 W1 H +ATOM 6758 H2 TIP3X1423 -26.885 29.443 -22.628 1.00 0.00 W1 H +ATOM 6759 OH2 TIP3X1424 -21.109 21.276 -23.530 1.00 0.00 W1 O +ATOM 6760 H1 TIP3X1424 -21.186 20.466 -24.035 1.00 0.00 W1 H +ATOM 6761 H2 TIP3X1424 -20.166 21.415 -23.443 1.00 0.00 W1 H +ATOM 6762 OH2 TIP3X1425 -25.086 17.374 -21.168 1.00 0.00 W1 O +ATOM 6763 H1 TIP3X1425 -24.828 16.636 -20.615 1.00 0.00 W1 H +ATOM 6764 H2 TIP3X1425 -25.762 17.017 -21.744 1.00 0.00 W1 H +ATOM 6765 OH2 TIP3X1426 -16.842 18.378 -24.745 1.00 0.00 W1 O +ATOM 6766 H1 TIP3X1426 -17.150 18.716 -23.904 1.00 0.00 W1 H +ATOM 6767 H2 TIP3X1426 -16.774 17.433 -24.614 1.00 0.00 W1 H +ATOM 6768 OH2 TIP3X1427 -18.244 19.573 -22.791 1.00 0.00 W1 O +ATOM 6769 H1 TIP3X1427 -17.669 19.345 -22.061 1.00 0.00 W1 H +ATOM 6770 H2 TIP3X1427 -19.119 19.319 -22.496 1.00 0.00 W1 H +ATOM 6771 OH2 TIP3X1428 -25.198 20.698 -21.420 1.00 0.00 W1 O +ATOM 6772 H1 TIP3X1428 -24.695 19.996 -21.008 1.00 0.00 W1 H +ATOM 6773 H2 TIP3X1428 -24.541 21.340 -21.687 1.00 0.00 W1 H +ATOM 6774 OH2 TIP3X1429 -17.721 21.746 -24.523 1.00 0.00 W1 O +ATOM 6775 H1 TIP3X1429 -17.680 20.847 -24.199 1.00 0.00 W1 H +ATOM 6776 H2 TIP3X1429 -17.839 22.279 -23.736 1.00 0.00 W1 H +ATOM 6777 OH2 TIP3X1430 -19.037 18.390 -26.654 1.00 0.00 W1 O +ATOM 6778 H1 TIP3X1430 -18.212 18.574 -26.205 1.00 0.00 W1 H +ATOM 6779 H2 TIP3X1430 -18.960 18.845 -27.493 1.00 0.00 W1 H +ATOM 6780 OH2 TIP3X1431 -22.854 24.361 -20.583 1.00 0.00 W1 O +ATOM 6781 H1 TIP3X1431 -21.977 24.383 -20.966 1.00 0.00 W1 H +ATOM 6782 H2 TIP3X1431 -23.119 25.280 -20.537 1.00 0.00 W1 H +ATOM 6783 OH2 TIP3X1432 -23.704 26.909 -20.773 1.00 0.00 W1 O +ATOM 6784 H1 TIP3X1432 -23.728 27.136 -21.702 1.00 0.00 W1 H +ATOM 6785 H2 TIP3X1432 -24.624 26.855 -20.514 1.00 0.00 W1 H +ATOM 6786 OH2 TIP3X1433 -28.841 18.791 -23.935 1.00 0.00 W1 O +ATOM 6787 H1 TIP3X1433 -29.166 19.670 -23.744 1.00 0.00 W1 H +ATOM 6788 H2 TIP3X1433 -28.964 18.688 -24.878 1.00 0.00 W1 H +ATOM 6789 OH2 TIP3X1434 -26.685 22.348 -23.922 1.00 0.00 W1 O +ATOM 6790 H1 TIP3X1434 -27.368 21.898 -24.419 1.00 0.00 W1 H +ATOM 6791 H2 TIP3X1434 -26.199 21.645 -23.490 1.00 0.00 W1 H +ATOM 6792 OH2 TIP3X1435 -20.629 27.273 -21.526 1.00 0.00 W1 O +ATOM 6793 H1 TIP3X1435 -20.871 26.686 -22.243 1.00 0.00 W1 H +ATOM 6794 H2 TIP3X1435 -19.679 27.183 -21.453 1.00 0.00 W1 H +ATOM 6795 OH2 TIP3X1436 -16.331 30.907 -24.745 1.00 0.00 W1 O +ATOM 6796 H1 TIP3X1436 -16.336 30.439 -23.910 1.00 0.00 W1 H +ATOM 6797 H2 TIP3X1436 -17.212 30.778 -25.098 1.00 0.00 W1 H +ATOM 6798 OH2 TIP3X1437 -24.459 27.244 -23.723 1.00 0.00 W1 O +ATOM 6799 H1 TIP3X1437 -25.031 26.524 -23.454 1.00 0.00 W1 H +ATOM 6800 H2 TIP3X1437 -24.920 28.034 -23.441 1.00 0.00 W1 H +ATOM 6801 OH2 TIP3X1438 -22.238 17.695 -19.153 1.00 0.00 W1 O +ATOM 6802 H1 TIP3X1438 -22.980 18.175 -18.786 1.00 0.00 W1 H +ATOM 6803 H2 TIP3X1438 -22.618 16.883 -19.487 1.00 0.00 W1 H +ATOM 6804 OH2 TIP3X1439 -26.886 18.400 -29.351 1.00 0.00 W1 O +ATOM 6805 H1 TIP3X1439 -26.984 17.738 -28.667 1.00 0.00 W1 H +ATOM 6806 H2 TIP3X1439 -27.069 17.932 -30.166 1.00 0.00 W1 H +ATOM 6807 OH2 TIP3X1440 -15.992 19.322 -21.162 1.00 0.00 W1 O +ATOM 6808 H1 TIP3X1440 -15.473 19.991 -21.609 1.00 0.00 W1 H +ATOM 6809 H2 TIP3X1440 -15.550 19.198 -20.322 1.00 0.00 W1 H +ATOM 6810 OH2 TIP3X1441 -29.934 15.675 -27.002 1.00 0.00 W1 O +ATOM 6811 H1 TIP3X1441 -29.209 16.296 -26.933 1.00 0.00 W1 H +ATOM 6812 H2 TIP3X1441 -30.306 15.642 -26.120 1.00 0.00 W1 H +ATOM 6813 OH2 TIP3X1442 -24.668 21.910 -17.015 1.00 0.00 W1 O +ATOM 6814 H1 TIP3X1442 -23.804 22.309 -17.116 1.00 0.00 W1 H +ATOM 6815 H2 TIP3X1442 -24.516 20.973 -17.138 1.00 0.00 W1 H +ATOM 6816 OH2 TIP3X1443 -21.502 26.820 -24.276 1.00 0.00 W1 O +ATOM 6817 H1 TIP3X1443 -21.408 25.957 -24.679 1.00 0.00 W1 H +ATOM 6818 H2 TIP3X1443 -22.435 27.020 -24.352 1.00 0.00 W1 H +ATOM 6819 OH2 TIP3X1444 -22.890 25.104 -26.745 1.00 0.00 W1 O +ATOM 6820 H1 TIP3X1444 -23.455 24.490 -26.275 1.00 0.00 W1 H +ATOM 6821 H2 TIP3X1444 -23.364 25.935 -26.716 1.00 0.00 W1 H +ATOM 6822 OH2 TIP3X1445 -30.352 25.617 -20.288 1.00 0.00 W1 O +ATOM 6823 H1 TIP3X1445 -30.887 25.016 -20.806 1.00 0.00 W1 H +ATOM 6824 H2 TIP3X1445 -30.823 25.704 -19.459 1.00 0.00 W1 H +ATOM 6825 OH2 TIP3X1446 -19.056 24.638 -25.920 1.00 0.00 W1 O +ATOM 6826 H1 TIP3X1446 -19.112 23.723 -26.197 1.00 0.00 W1 H +ATOM 6827 H2 TIP3X1446 -19.229 25.141 -26.716 1.00 0.00 W1 H +ATOM 6828 OH2 TIP3X1447 -18.759 25.152 -18.896 1.00 0.00 W1 O +ATOM 6829 H1 TIP3X1447 -19.662 25.236 -18.588 1.00 0.00 W1 H +ATOM 6830 H2 TIP3X1447 -18.591 24.210 -18.892 1.00 0.00 W1 H +ATOM 6831 OH2 TIP3X1448 -16.393 23.112 -21.090 1.00 0.00 W1 O +ATOM 6832 H1 TIP3X1448 -15.730 22.431 -21.209 1.00 0.00 W1 H +ATOM 6833 H2 TIP3X1448 -17.109 22.672 -20.631 1.00 0.00 W1 H +ATOM 6834 OH2 TIP3X1449 -27.248 22.799 -15.946 1.00 0.00 W1 O +ATOM 6835 H1 TIP3X1449 -27.777 22.565 -16.708 1.00 0.00 W1 H +ATOM 6836 H2 TIP3X1449 -26.353 22.846 -16.280 1.00 0.00 W1 H +ATOM 6837 OH2 TIP3X1450 -26.338 26.005 -20.384 1.00 0.00 W1 O +ATOM 6838 H1 TIP3X1450 -26.383 25.450 -19.606 1.00 0.00 W1 H +ATOM 6839 H2 TIP3X1450 -26.971 26.703 -20.218 1.00 0.00 W1 H +ATOM 6840 OH2 TIP3X1451 -17.666 27.135 -20.635 1.00 0.00 W1 O +ATOM 6841 H1 TIP3X1451 -17.243 27.903 -20.251 1.00 0.00 W1 H +ATOM 6842 H2 TIP3X1451 -17.970 26.627 -19.882 1.00 0.00 W1 H +ATOM 6843 OH2 TIP3X1452 -19.579 29.110 -18.810 1.00 0.00 W1 O +ATOM 6844 H1 TIP3X1452 -20.286 28.481 -18.952 1.00 0.00 W1 H +ATOM 6845 H2 TIP3X1452 -19.250 29.305 -19.687 1.00 0.00 W1 H +ATOM 6846 OH2 TIP3X1453 -19.328 27.646 -16.413 1.00 0.00 W1 O +ATOM 6847 H1 TIP3X1453 -19.961 27.040 -16.797 1.00 0.00 W1 H +ATOM 6848 H2 TIP3X1453 -19.214 28.327 -17.077 1.00 0.00 W1 H +ATOM 6849 OH2 TIP3X1454 -15.717 29.555 -22.347 1.00 0.00 W1 O +ATOM 6850 H1 TIP3X1454 -15.040 29.396 -21.690 1.00 0.00 W1 H +ATOM 6851 H2 TIP3X1454 -15.951 28.683 -22.666 1.00 0.00 W1 H +ATOM 6852 OH2 TIP3X1455 -25.161 16.026 -23.954 1.00 0.00 W1 O +ATOM 6853 H1 TIP3X1455 -25.453 16.935 -24.015 1.00 0.00 W1 H +ATOM 6854 H2 TIP3X1455 -24.329 16.008 -24.427 1.00 0.00 W1 H +ATOM 6855 OH2 TIP3X1456 -23.037 25.972 -30.300 1.00 0.00 W1 O +ATOM 6856 H1 TIP3X1456 -23.732 25.350 -30.085 1.00 0.00 W1 H +ATOM 6857 H2 TIP3X1456 -23.055 26.608 -29.585 1.00 0.00 W1 H +ATOM 6858 OH2 TIP3X1457 -15.657 24.736 -30.863 1.00 0.00 W1 O +ATOM 6859 H1 TIP3X1457 -15.920 23.986 -31.397 1.00 0.00 W1 H +ATOM 6860 H2 TIP3X1457 -15.911 25.500 -31.381 1.00 0.00 W1 H +ATOM 6861 OH2 TIP3X1458 -29.709 28.432 -31.146 1.00 0.00 W1 O +ATOM 6862 H1 TIP3X1458 -29.263 27.883 -30.501 1.00 0.00 W1 H +ATOM 6863 H2 TIP3X1458 -30.605 28.098 -31.167 1.00 0.00 W1 H +ATOM 6864 OH2 TIP3X1459 -17.615 30.561 -29.888 1.00 0.00 W1 O +ATOM 6865 H1 TIP3X1459 -16.730 30.233 -30.046 1.00 0.00 W1 H +ATOM 6866 H2 TIP3X1459 -17.845 31.029 -30.690 1.00 0.00 W1 H +ATOM 6867 OH2 TIP3X1460 -16.223 26.223 -17.810 1.00 0.00 W1 O +ATOM 6868 H1 TIP3X1460 -16.333 27.172 -17.751 1.00 0.00 W1 H +ATOM 6869 H2 TIP3X1460 -17.116 25.878 -17.820 1.00 0.00 W1 H +ATOM 6870 OH2 TIP3X1461 -29.537 29.049 -28.191 1.00 0.00 W1 O +ATOM 6871 H1 TIP3X1461 -29.605 29.885 -27.731 1.00 0.00 W1 H +ATOM 6872 H2 TIP3X1461 -30.432 28.711 -28.208 1.00 0.00 W1 H +ATOM 6873 OH2 TIP3X1462 -16.957 27.542 -30.547 1.00 0.00 W1 O +ATOM 6874 H1 TIP3X1462 -16.925 27.462 -29.594 1.00 0.00 W1 H +ATOM 6875 H2 TIP3X1462 -17.790 27.979 -30.724 1.00 0.00 W1 H +ATOM 6876 OH2 TIP3X1463 -20.586 15.837 -17.663 1.00 0.00 W1 O +ATOM 6877 H1 TIP3X1463 -20.893 16.585 -18.176 1.00 0.00 W1 H +ATOM 6878 H2 TIP3X1463 -20.532 15.120 -18.295 1.00 0.00 W1 H +ATOM 6879 OH2 TIP3X1464 -26.372 29.753 -19.634 1.00 0.00 W1 O +ATOM 6880 H1 TIP3X1464 -25.524 29.991 -19.260 1.00 0.00 W1 H +ATOM 6881 H2 TIP3X1464 -26.161 29.373 -20.487 1.00 0.00 W1 H +ATOM 6882 OH2 TIP3X1465 -27.906 17.772 -16.284 1.00 0.00 W1 O +ATOM 6883 H1 TIP3X1465 -28.783 17.861 -15.910 1.00 0.00 W1 H +ATOM 6884 H2 TIP3X1465 -27.843 18.484 -16.920 1.00 0.00 W1 H +ATOM 6885 OH2 TIP3X1466 -21.709 19.719 -30.553 1.00 0.00 W1 O +ATOM 6886 H1 TIP3X1466 -21.875 20.016 -31.448 1.00 0.00 W1 H +ATOM 6887 H2 TIP3X1466 -22.580 19.595 -30.176 1.00 0.00 W1 H +ATOM 6888 OH2 TIP3X1467 -16.311 27.479 -27.505 1.00 0.00 W1 O +ATOM 6889 H1 TIP3X1467 -15.738 26.742 -27.292 1.00 0.00 W1 H +ATOM 6890 H2 TIP3X1467 -16.642 27.778 -26.658 1.00 0.00 W1 H +ATOM 6891 OH2 TIP3X1468 -21.050 16.515 -30.576 1.00 0.00 W1 O +ATOM 6892 H1 TIP3X1468 -20.318 17.131 -30.552 1.00 0.00 W1 H +ATOM 6893 H2 TIP3X1468 -20.809 15.883 -31.253 1.00 0.00 W1 H +ATOM 6894 OH2 TIP3X1469 -16.518 16.609 -20.311 1.00 0.00 W1 O +ATOM 6895 H1 TIP3X1469 -16.026 15.979 -19.784 1.00 0.00 W1 H +ATOM 6896 H2 TIP3X1469 -15.918 16.851 -21.016 1.00 0.00 W1 H +ATOM 6897 OH2 TIP3X1470 -29.011 25.829 -24.233 1.00 0.00 W1 O +ATOM 6898 H1 TIP3X1470 -29.679 26.153 -23.629 1.00 0.00 W1 H +ATOM 6899 H2 TIP3X1470 -28.219 25.760 -23.701 1.00 0.00 W1 H +ATOM 6900 OH2 TIP3X1471 -24.014 27.248 -17.123 1.00 0.00 W1 O +ATOM 6901 H1 TIP3X1471 -23.790 26.870 -16.272 1.00 0.00 W1 H +ATOM 6902 H2 TIP3X1471 -24.621 26.619 -17.513 1.00 0.00 W1 H +ATOM 6903 OH2 TIP3X1472 -20.535 18.553 -21.710 1.00 0.00 W1 O +ATOM 6904 H1 TIP3X1472 -20.476 18.371 -20.772 1.00 0.00 W1 H +ATOM 6905 H2 TIP3X1472 -21.473 18.640 -21.879 1.00 0.00 W1 H +ATOM 6906 OH2 TIP3X1473 -24.343 19.210 -17.531 1.00 0.00 W1 O +ATOM 6907 H1 TIP3X1473 -25.210 19.140 -17.931 1.00 0.00 W1 H +ATOM 6908 H2 TIP3X1473 -24.398 18.669 -16.743 1.00 0.00 W1 H +ATOM 6909 OH2 TIP3X1474 -16.857 21.930 -15.778 1.00 0.00 W1 O +ATOM 6910 H1 TIP3X1474 -16.063 21.397 -15.795 1.00 0.00 W1 H +ATOM 6911 H2 TIP3X1474 -17.151 21.895 -14.868 1.00 0.00 W1 H +ATOM 6912 OH2 TIP3X1475 -28.672 15.797 -19.860 1.00 0.00 W1 O +ATOM 6913 H1 TIP3X1475 -28.898 16.250 -20.672 1.00 0.00 W1 H +ATOM 6914 H2 TIP3X1475 -27.842 15.360 -20.051 1.00 0.00 W1 H +ATOM 6915 OH2 TIP3X1476 -22.577 16.255 -24.778 1.00 0.00 W1 O +ATOM 6916 H1 TIP3X1476 -22.095 16.769 -25.426 1.00 0.00 W1 H +ATOM 6917 H2 TIP3X1476 -22.233 16.548 -23.934 1.00 0.00 W1 H +ATOM 6918 OH2 TIP3X1477 -28.107 20.846 -29.625 1.00 0.00 W1 O +ATOM 6919 H1 TIP3X1477 -27.685 21.492 -30.191 1.00 0.00 W1 H +ATOM 6920 H2 TIP3X1477 -27.395 20.271 -29.344 1.00 0.00 W1 H +ATOM 6921 OH2 TIP3X1478 -27.583 21.503 -20.314 1.00 0.00 W1 O +ATOM 6922 H1 TIP3X1478 -27.667 22.294 -19.782 1.00 0.00 W1 H +ATOM 6923 H2 TIP3X1478 -26.668 21.499 -20.595 1.00 0.00 W1 H +ATOM 6924 OH2 TIP3X1479 -28.400 22.221 -27.129 1.00 0.00 W1 O +ATOM 6925 H1 TIP3X1479 -28.337 21.932 -28.039 1.00 0.00 W1 H +ATOM 6926 H2 TIP3X1479 -27.625 22.766 -26.996 1.00 0.00 W1 H +ATOM 6927 OH2 TIP3X1480 -19.380 18.791 -29.369 1.00 0.00 W1 O +ATOM 6928 H1 TIP3X1480 -20.087 19.279 -29.789 1.00 0.00 W1 H +ATOM 6929 H2 TIP3X1480 -18.655 18.835 -29.992 1.00 0.00 W1 H +ATOM 6930 OH2 TIP3X1481 -30.829 19.677 -18.281 1.00 0.00 W1 O +ATOM 6931 H1 TIP3X1481 -31.734 19.971 -18.170 1.00 0.00 W1 H +ATOM 6932 H2 TIP3X1481 -30.689 19.058 -17.564 1.00 0.00 W1 H +ATOM 6933 OH2 TIP3X1482 -29.686 16.515 -22.298 1.00 0.00 W1 O +ATOM 6934 H1 TIP3X1482 -29.579 15.813 -22.941 1.00 0.00 W1 H +ATOM 6935 H2 TIP3X1482 -29.550 17.320 -22.797 1.00 0.00 W1 H +ATOM 6936 OH2 TIP3X1483 -18.164 20.143 -17.411 1.00 0.00 W1 O +ATOM 6937 H1 TIP3X1483 -17.853 20.721 -16.715 1.00 0.00 W1 H +ATOM 6938 H2 TIP3X1483 -19.108 20.079 -17.265 1.00 0.00 W1 H +ATOM 6939 OH2 TIP3X1484 -21.121 20.148 -17.464 1.00 0.00 W1 O +ATOM 6940 H1 TIP3X1484 -21.481 20.717 -18.145 1.00 0.00 W1 H +ATOM 6941 H2 TIP3X1484 -21.459 19.278 -17.675 1.00 0.00 W1 H +ATOM 6942 OH2 TIP3X1485 -22.918 20.618 -27.598 1.00 0.00 W1 O +ATOM 6943 H1 TIP3X1485 -22.829 21.197 -28.355 1.00 0.00 W1 H +ATOM 6944 H2 TIP3X1485 -23.688 20.083 -27.795 1.00 0.00 W1 H +ATOM 6945 OH2 TIP3X1486 -24.615 19.949 -29.911 1.00 0.00 W1 O +ATOM 6946 H1 TIP3X1486 -25.053 20.142 -30.740 1.00 0.00 W1 H +ATOM 6947 H2 TIP3X1486 -25.022 19.138 -29.607 1.00 0.00 W1 H +ATOM 6948 OH2 TIP3X1487 -23.905 17.011 -16.122 1.00 0.00 W1 O +ATOM 6949 H1 TIP3X1487 -24.371 16.624 -15.381 1.00 0.00 W1 H +ATOM 6950 H2 TIP3X1487 -22.991 17.044 -15.839 1.00 0.00 W1 H +ATOM 6951 OH2 TIP3X1488 -18.342 22.356 -19.440 1.00 0.00 W1 O +ATOM 6952 H1 TIP3X1488 -18.322 21.706 -18.737 1.00 0.00 W1 H +ATOM 6953 H2 TIP3X1488 -19.176 22.204 -19.884 1.00 0.00 W1 H +ATOM 6954 OH2 TIP3X1489 -30.267 19.456 -30.971 1.00 0.00 W1 O +ATOM 6955 H1 TIP3X1489 -31.023 19.264 -30.417 1.00 0.00 W1 H +ATOM 6956 H2 TIP3X1489 -29.733 20.055 -30.448 1.00 0.00 W1 H +ATOM 6957 OH2 TIP3X1490 -30.348 30.950 -30.484 1.00 0.00 W1 O +ATOM 6958 H1 TIP3X1490 -29.932 30.202 -30.054 1.00 0.00 W1 H +ATOM 6959 H2 TIP3X1490 -30.335 31.643 -29.824 1.00 0.00 W1 H +ATOM 6960 OH2 TIP3X1491 -21.600 19.110 -25.491 1.00 0.00 W1 O +ATOM 6961 H1 TIP3X1491 -21.937 19.460 -26.315 1.00 0.00 W1 H +ATOM 6962 H2 TIP3X1491 -20.703 18.842 -25.692 1.00 0.00 W1 H +ATOM 6963 OH2 TIP3X1492 -26.145 18.420 -23.747 1.00 0.00 W1 O +ATOM 6964 H1 TIP3X1492 -27.087 18.373 -23.905 1.00 0.00 W1 H +ATOM 6965 H2 TIP3X1492 -26.006 19.294 -23.383 1.00 0.00 W1 H +ATOM 6966 OH2 TIP3X1493 -30.783 19.546 -26.953 1.00 0.00 W1 O +ATOM 6967 H1 TIP3X1493 -31.057 19.422 -26.045 1.00 0.00 W1 H +ATOM 6968 H2 TIP3X1493 -30.977 20.465 -27.139 1.00 0.00 W1 H +ATOM 6969 OH2 TIP3X1494 -26.782 18.873 -18.893 1.00 0.00 W1 O +ATOM 6970 H1 TIP3X1494 -26.760 18.067 -19.409 1.00 0.00 W1 H +ATOM 6971 H2 TIP3X1494 -27.176 19.521 -19.477 1.00 0.00 W1 H +ATOM 6972 OH2 TIP3X1495 -26.199 25.409 -23.088 1.00 0.00 W1 O +ATOM 6973 H1 TIP3X1495 -26.271 24.473 -23.276 1.00 0.00 W1 H +ATOM 6974 H2 TIP3X1495 -26.195 25.462 -22.132 1.00 0.00 W1 H +ATOM 6975 OH2 TIP3X1496 -22.010 22.428 -18.526 1.00 0.00 W1 O +ATOM 6976 H1 TIP3X1496 -21.598 23.259 -18.289 1.00 0.00 W1 H +ATOM 6977 H2 TIP3X1496 -22.560 22.638 -19.280 1.00 0.00 W1 H +ATOM 6978 OH2 TIP3X1497 -16.215 17.794 -29.201 1.00 0.00 W1 O +ATOM 6979 H1 TIP3X1497 -15.780 18.021 -28.379 1.00 0.00 W1 H +ATOM 6980 H2 TIP3X1497 -16.735 17.019 -28.992 1.00 0.00 W1 H +ATOM 6981 OH2 TIP3X1498 -25.060 23.754 -30.023 1.00 0.00 W1 O +ATOM 6982 H1 TIP3X1498 -25.349 23.632 -29.119 1.00 0.00 W1 H +ATOM 6983 H2 TIP3X1498 -24.371 23.101 -30.144 1.00 0.00 W1 H +ATOM 6984 OH2 TIP3X1499 -18.357 22.270 -28.955 1.00 0.00 W1 O +ATOM 6985 H1 TIP3X1499 -19.222 22.071 -28.596 1.00 0.00 W1 H +ATOM 6986 H2 TIP3X1499 -17.800 22.391 -28.186 1.00 0.00 W1 H +ATOM 6987 OH2 TIP3X1500 -23.524 22.524 -22.485 1.00 0.00 W1 O +ATOM 6988 H1 TIP3X1500 -23.427 23.321 -21.963 1.00 0.00 W1 H +ATOM 6989 H2 TIP3X1500 -22.649 22.135 -22.493 1.00 0.00 W1 H +ATOM 6990 OH2 TIP3X1501 -23.778 22.906 -25.569 1.00 0.00 W1 O +ATOM 6991 H1 TIP3X1501 -23.157 22.310 -25.987 1.00 0.00 W1 H +ATOM 6992 H2 TIP3X1501 -23.753 22.669 -24.642 1.00 0.00 W1 H +ATOM 6993 OH2 TIP3X1502 -20.884 24.522 -16.633 1.00 0.00 W1 O +ATOM 6994 H1 TIP3X1502 -21.562 24.806 -16.020 1.00 0.00 W1 H +ATOM 6995 H2 TIP3X1502 -20.086 24.481 -16.106 1.00 0.00 W1 H +ATOM 6996 OH2 TIP3X1503 -28.374 23.937 -18.937 1.00 0.00 W1 O +ATOM 6997 H1 TIP3X1503 -27.857 24.343 -18.241 1.00 0.00 W1 H +ATOM 6998 H2 TIP3X1503 -28.757 24.674 -19.412 1.00 0.00 W1 H +ATOM 6999 OH2 TIP3X1504 -29.468 21.899 -17.315 1.00 0.00 W1 O +ATOM 7000 H1 TIP3X1504 -29.672 21.060 -17.728 1.00 0.00 W1 H +ATOM 7001 H2 TIP3X1504 -29.591 22.545 -18.011 1.00 0.00 W1 H +ATOM 7002 OH2 TIP3X1505 -29.575 22.772 -24.492 1.00 0.00 W1 O +ATOM 7003 H1 TIP3X1505 -29.219 23.645 -24.662 1.00 0.00 W1 H +ATOM 7004 H2 TIP3X1505 -29.677 22.382 -25.360 1.00 0.00 W1 H +ATOM 7005 OH2 TIP3X1506 -18.816 25.037 -30.305 1.00 0.00 W1 O +ATOM 7006 H1 TIP3X1506 -18.111 25.536 -30.717 1.00 0.00 W1 H +ATOM 7007 H2 TIP3X1506 -18.367 24.407 -29.742 1.00 0.00 W1 H +ATOM 7008 OH2 TIP3X1507 -16.220 22.384 -26.943 1.00 0.00 W1 O +ATOM 7009 H1 TIP3X1507 -16.507 22.557 -26.046 1.00 0.00 W1 H +ATOM 7010 H2 TIP3X1507 -15.707 23.156 -27.183 1.00 0.00 W1 H +ATOM 7011 OH2 TIP3X1508 -29.722 21.501 -22.221 1.00 0.00 W1 O +ATOM 7012 H1 TIP3X1508 -29.628 22.179 -22.889 1.00 0.00 W1 H +ATOM 7013 H2 TIP3X1508 -29.064 21.720 -21.561 1.00 0.00 W1 H +ATOM 7014 OH2 TIP3X1509 -26.935 30.008 -28.957 1.00 0.00 W1 O +ATOM 7015 H1 TIP3X1509 -27.164 30.368 -29.814 1.00 0.00 W1 H +ATOM 7016 H2 TIP3X1509 -27.348 29.145 -28.941 1.00 0.00 W1 H +ATOM 7017 OH2 TIP3X1510 -28.160 25.241 -30.459 1.00 0.00 W1 O +ATOM 7018 H1 TIP3X1510 -28.976 24.952 -30.867 1.00 0.00 W1 H +ATOM 7019 H2 TIP3X1510 -27.628 24.448 -30.397 1.00 0.00 W1 H +ATOM 7020 OH2 TIP3X1511 -26.742 26.081 -17.384 1.00 0.00 W1 O +ATOM 7021 H1 TIP3X1511 -27.315 26.683 -17.858 1.00 0.00 W1 H +ATOM 7022 H2 TIP3X1511 -27.216 25.885 -16.576 1.00 0.00 W1 H +ATOM 7023 OH2 TIP3X1512 -23.666 30.824 -19.693 1.00 0.00 W1 O +ATOM 7024 H1 TIP3X1512 -23.349 30.530 -18.840 1.00 0.00 W1 H +ATOM 7025 H2 TIP3X1512 -23.233 30.246 -20.322 1.00 0.00 W1 H +ATOM 7026 OH2 TIP3X1513 -18.960 31.065 -25.560 1.00 0.00 W1 O +ATOM 7027 H1 TIP3X1513 -19.373 30.374 -26.078 1.00 0.00 W1 H +ATOM 7028 H2 TIP3X1513 -19.156 31.872 -26.036 1.00 0.00 W1 H +ATOM 7029 OH2 TIP3X1514 -22.382 27.748 -28.308 1.00 0.00 W1 O +ATOM 7030 H1 TIP3X1514 -22.123 28.533 -28.790 1.00 0.00 W1 H +ATOM 7031 H2 TIP3X1514 -22.952 28.071 -27.610 1.00 0.00 W1 H +ATOM 7032 OH2 TIP3X1515 -22.365 22.902 -29.236 1.00 0.00 W1 O +ATOM 7033 H1 TIP3X1515 -21.542 22.975 -29.719 1.00 0.00 W1 H +ATOM 7034 H2 TIP3X1515 -22.358 23.646 -28.635 1.00 0.00 W1 H +ATOM 7035 OH2 TIP3X1516 -18.964 17.626 -19.445 1.00 0.00 W1 O +ATOM 7036 H1 TIP3X1516 -18.159 17.395 -19.909 1.00 0.00 W1 H +ATOM 7037 H2 TIP3X1516 -18.673 18.179 -18.720 1.00 0.00 W1 H +ATOM 7038 OH2 TIP3X1517 -30.999 24.727 -28.039 1.00 0.00 W1 O +ATOM 7039 H1 TIP3X1517 -31.152 24.819 -28.979 1.00 0.00 W1 H +ATOM 7040 H2 TIP3X1517 -30.045 24.727 -27.950 1.00 0.00 W1 H +ATOM 7041 OH2 TIP3X1518 -20.237 24.315 -21.443 1.00 0.00 W1 O +ATOM 7042 H1 TIP3X1518 -19.691 24.977 -21.017 1.00 0.00 W1 H +ATOM 7043 H2 TIP3X1518 -19.778 24.115 -22.259 1.00 0.00 W1 H +ATOM 7044 OH2 TIP3X1519 -21.414 29.289 -30.366 1.00 0.00 W1 O +ATOM 7045 H1 TIP3X1519 -20.590 29.324 -29.881 1.00 0.00 W1 H +ATOM 7046 H2 TIP3X1519 -21.211 28.776 -31.148 1.00 0.00 W1 H +ATOM 7047 OH2 TIP3X1520 -21.422 27.076 -18.715 1.00 0.00 W1 O +ATOM 7048 H1 TIP3X1520 -22.243 27.323 -18.288 1.00 0.00 W1 H +ATOM 7049 H2 TIP3X1520 -21.651 26.981 -19.639 1.00 0.00 W1 H +ATOM 7050 OH2 TIP3X1521 -24.797 27.301 -26.828 1.00 0.00 W1 O +ATOM 7051 H1 TIP3X1521 -25.504 27.448 -27.456 1.00 0.00 W1 H +ATOM 7052 H2 TIP3X1521 -25.134 27.646 -26.001 1.00 0.00 W1 H +ATOM 7053 OH2 TIP3X1522 -28.232 28.213 -18.117 1.00 0.00 W1 O +ATOM 7054 H1 TIP3X1522 -27.498 28.824 -18.181 1.00 0.00 W1 H +ATOM 7055 H2 TIP3X1522 -28.544 28.307 -17.217 1.00 0.00 W1 H +ATOM 7056 OH2 TIP3X1523 -28.642 29.918 -24.015 1.00 0.00 W1 O +ATOM 7057 H1 TIP3X1523 -29.228 29.177 -24.169 1.00 0.00 W1 H +ATOM 7058 H2 TIP3X1523 -28.199 30.051 -24.853 1.00 0.00 W1 H +ATOM 7059 OH2 TIP3X1524 -20.289 15.931 -22.935 1.00 0.00 W1 O +ATOM 7060 H1 TIP3X1524 -19.956 15.856 -23.829 1.00 0.00 W1 H +ATOM 7061 H2 TIP3X1524 -20.334 16.874 -22.774 1.00 0.00 W1 H +ATOM 7062 OH2 TIP3X1525 -23.051 18.060 -22.700 1.00 0.00 W1 O +ATOM 7063 H1 TIP3X1525 -23.413 18.549 -23.439 1.00 0.00 W1 H +ATOM 7064 H2 TIP3X1525 -23.782 17.971 -22.090 1.00 0.00 W1 H +ATOM 7065 OH2 TIP3X1526 -24.332 16.045 -28.772 1.00 0.00 W1 O +ATOM 7066 H1 TIP3X1526 -23.476 15.789 -28.427 1.00 0.00 W1 H +ATOM 7067 H2 TIP3X1526 -24.850 15.241 -28.747 1.00 0.00 W1 H +ATOM 7068 OH2 TIP3X1527 -21.580 15.888 -27.729 1.00 0.00 W1 O +ATOM 7069 H1 TIP3X1527 -21.124 15.152 -27.320 1.00 0.00 W1 H +ATOM 7070 H2 TIP3X1527 -21.173 15.975 -28.590 1.00 0.00 W1 H +ATOM 7071 OH2 TIP3X1528 -26.941 30.467 -16.274 1.00 0.00 W1 O +ATOM 7072 H1 TIP3X1528 -27.191 31.224 -16.804 1.00 0.00 W1 H +ATOM 7073 H2 TIP3X1528 -26.030 30.298 -16.513 1.00 0.00 W1 H +ATOM 7074 OH2 TIP3X1529 -21.934 29.161 -25.974 1.00 0.00 W1 O +ATOM 7075 H1 TIP3X1529 -21.273 28.519 -25.714 1.00 0.00 W1 H +ATOM 7076 H2 TIP3X1529 -21.947 29.796 -25.257 1.00 0.00 W1 H +ATOM 7077 OH2 TIP3X1530 -24.195 30.064 -17.064 1.00 0.00 W1 O +ATOM 7078 H1 TIP3X1530 -23.977 29.171 -16.794 1.00 0.00 W1 H +ATOM 7079 H2 TIP3X1530 -23.587 30.618 -16.575 1.00 0.00 W1 H +ATOM 7080 OH2 TIP3X1531 -25.248 18.182 -27.020 1.00 0.00 W1 O +ATOM 7081 H1 TIP3X1531 -24.591 17.523 -27.242 1.00 0.00 W1 H +ATOM 7082 H2 TIP3X1531 -25.206 18.251 -26.066 1.00 0.00 W1 H +ATOM 7083 OH2 TIP3X1532 -30.535 16.520 -17.564 1.00 0.00 W1 O +ATOM 7084 H1 TIP3X1532 -29.787 16.325 -18.128 1.00 0.00 W1 H +ATOM 7085 H2 TIP3X1532 -30.327 16.095 -16.732 1.00 0.00 W1 H +ATOM 7086 OH2 TIP3X1533 -19.415 29.247 -27.962 1.00 0.00 W1 O +ATOM 7087 H1 TIP3X1533 -19.271 28.307 -27.859 1.00 0.00 W1 H +ATOM 7088 H2 TIP3X1533 -18.592 29.580 -28.319 1.00 0.00 W1 H +ATOM 7089 OH2 TIP3X1534 -17.748 16.014 -16.735 1.00 0.00 W1 O +ATOM 7090 H1 TIP3X1534 -18.361 16.088 -17.466 1.00 0.00 W1 H +ATOM 7091 H2 TIP3X1534 -16.978 16.509 -17.017 1.00 0.00 W1 H +ATOM 7092 OH2 TIP3X1535 -26.954 30.227 -26.249 1.00 0.00 W1 O +ATOM 7093 H1 TIP3X1535 -26.961 30.272 -27.205 1.00 0.00 W1 H +ATOM 7094 H2 TIP3X1535 -26.147 30.673 -25.993 1.00 0.00 W1 H +ATOM 7095 OH2 TIP3X1536 -16.045 29.165 -18.299 1.00 0.00 W1 O +ATOM 7096 H1 TIP3X1536 -16.768 29.716 -17.998 1.00 0.00 W1 H +ATOM 7097 H2 TIP3X1536 -15.257 29.664 -18.085 1.00 0.00 W1 H +ATOM 7098 OH2 TIP3X1537 -28.419 18.487 -26.619 1.00 0.00 W1 O +ATOM 7099 H1 TIP3X1537 -29.063 18.876 -27.212 1.00 0.00 W1 H +ATOM 7100 H2 TIP3X1537 -27.617 18.984 -26.777 1.00 0.00 W1 H +ATOM 7101 OH2 TIP3X1538 -26.991 27.086 -28.888 1.00 0.00 W1 O +ATOM 7102 H1 TIP3X1538 -27.030 26.458 -29.609 1.00 0.00 W1 H +ATOM 7103 H2 TIP3X1538 -27.710 26.833 -28.310 1.00 0.00 W1 H +ATOM 7104 OH2 TIP3X1539 -29.096 26.614 -11.248 1.00 0.00 W1 O +ATOM 7105 H1 TIP3X1539 -28.914 26.538 -10.312 1.00 0.00 W1 H +ATOM 7106 H2 TIP3X1539 -29.120 27.557 -11.413 1.00 0.00 W1 H +ATOM 7107 OH2 TIP3X1540 -17.994 24.105 -7.510 1.00 0.00 W1 O +ATOM 7108 H1 TIP3X1540 -17.759 24.370 -8.400 1.00 0.00 W1 H +ATOM 7109 H2 TIP3X1540 -17.165 23.842 -7.111 1.00 0.00 W1 H +ATOM 7110 OH2 TIP3X1541 -26.010 23.829 -11.532 1.00 0.00 W1 O +ATOM 7111 H1 TIP3X1541 -25.979 24.738 -11.235 1.00 0.00 W1 H +ATOM 7112 H2 TIP3X1541 -25.502 23.346 -10.880 1.00 0.00 W1 H +ATOM 7113 OH2 TIP3X1542 -18.206 27.988 -9.388 1.00 0.00 W1 O +ATOM 7114 H1 TIP3X1542 -18.481 28.478 -8.613 1.00 0.00 W1 H +ATOM 7115 H2 TIP3X1542 -18.732 27.188 -9.365 1.00 0.00 W1 H +ATOM 7116 OH2 TIP3X1543 -19.690 26.431 -12.345 1.00 0.00 W1 O +ATOM 7117 H1 TIP3X1543 -19.528 26.203 -13.260 1.00 0.00 W1 H +ATOM 7118 H2 TIP3X1543 -20.619 26.660 -12.315 1.00 0.00 W1 H +ATOM 7119 OH2 TIP3X1544 -15.842 26.963 -7.561 1.00 0.00 W1 O +ATOM 7120 H1 TIP3X1544 -16.394 27.046 -8.338 1.00 0.00 W1 H +ATOM 7121 H2 TIP3X1544 -16.453 26.747 -6.856 1.00 0.00 W1 H +ATOM 7122 OH2 TIP3X1545 -29.206 28.227 -5.110 1.00 0.00 W1 O +ATOM 7123 H1 TIP3X1545 -28.800 28.431 -4.267 1.00 0.00 W1 H +ATOM 7124 H2 TIP3X1545 -29.777 27.482 -4.927 1.00 0.00 W1 H +ATOM 7125 OH2 TIP3X1546 -21.831 29.852 -5.884 1.00 0.00 W1 O +ATOM 7126 H1 TIP3X1546 -21.530 28.952 -5.762 1.00 0.00 W1 H +ATOM 7127 H2 TIP3X1546 -21.205 30.233 -6.501 1.00 0.00 W1 H +ATOM 7128 OH2 TIP3X1547 -18.398 29.809 -6.004 1.00 0.00 W1 O +ATOM 7129 H1 TIP3X1547 -18.834 30.632 -6.223 1.00 0.00 W1 H +ATOM 7130 H2 TIP3X1547 -17.469 30.035 -5.954 1.00 0.00 W1 H +ATOM 7131 OH2 TIP3X1548 -25.950 29.384 -6.874 1.00 0.00 W1 O +ATOM 7132 H1 TIP3X1548 -25.595 30.233 -7.138 1.00 0.00 W1 H +ATOM 7133 H2 TIP3X1548 -26.885 29.443 -7.070 1.00 0.00 W1 H +ATOM 7134 OH2 TIP3X1549 -21.109 21.276 -7.973 1.00 0.00 W1 O +ATOM 7135 H1 TIP3X1549 -21.186 20.466 -8.477 1.00 0.00 W1 H +ATOM 7136 H2 TIP3X1549 -20.166 21.415 -7.885 1.00 0.00 W1 H +ATOM 7137 OH2 TIP3X1550 -25.086 17.374 -5.611 1.00 0.00 W1 O +ATOM 7138 H1 TIP3X1550 -24.828 16.636 -5.058 1.00 0.00 W1 H +ATOM 7139 H2 TIP3X1550 -25.762 17.017 -6.186 1.00 0.00 W1 H +ATOM 7140 OH2 TIP3X1551 -16.842 18.378 -9.188 1.00 0.00 W1 O +ATOM 7141 H1 TIP3X1551 -17.150 18.716 -8.347 1.00 0.00 W1 H +ATOM 7142 H2 TIP3X1551 -16.774 17.433 -9.056 1.00 0.00 W1 H +ATOM 7143 OH2 TIP3X1552 -18.244 19.573 -7.234 1.00 0.00 W1 O +ATOM 7144 H1 TIP3X1552 -17.669 19.345 -6.503 1.00 0.00 W1 H +ATOM 7145 H2 TIP3X1552 -19.119 19.319 -6.939 1.00 0.00 W1 H +ATOM 7146 OH2 TIP3X1553 -25.198 20.698 -5.863 1.00 0.00 W1 O +ATOM 7147 H1 TIP3X1553 -24.695 19.996 -5.451 1.00 0.00 W1 H +ATOM 7148 H2 TIP3X1553 -24.541 21.340 -6.129 1.00 0.00 W1 H +ATOM 7149 OH2 TIP3X1554 -17.721 21.746 -8.965 1.00 0.00 W1 O +ATOM 7150 H1 TIP3X1554 -17.680 20.847 -8.641 1.00 0.00 W1 H +ATOM 7151 H2 TIP3X1554 -17.839 22.279 -8.179 1.00 0.00 W1 H +ATOM 7152 OH2 TIP3X1555 -19.037 18.390 -11.097 1.00 0.00 W1 O +ATOM 7153 H1 TIP3X1555 -18.212 18.574 -10.648 1.00 0.00 W1 H +ATOM 7154 H2 TIP3X1555 -18.960 18.845 -11.936 1.00 0.00 W1 H +ATOM 7155 OH2 TIP3X1556 -22.854 24.361 -5.025 1.00 0.00 W1 O +ATOM 7156 H1 TIP3X1556 -21.977 24.383 -5.408 1.00 0.00 W1 H +ATOM 7157 H2 TIP3X1556 -23.119 25.280 -4.979 1.00 0.00 W1 H +ATOM 7158 OH2 TIP3X1557 -23.704 26.909 -5.215 1.00 0.00 W1 O +ATOM 7159 H1 TIP3X1557 -23.728 27.136 -6.145 1.00 0.00 W1 H +ATOM 7160 H2 TIP3X1557 -24.624 26.855 -4.957 1.00 0.00 W1 H +ATOM 7161 OH2 TIP3X1558 -28.841 18.791 -8.377 1.00 0.00 W1 O +ATOM 7162 H1 TIP3X1558 -29.166 19.670 -8.186 1.00 0.00 W1 H +ATOM 7163 H2 TIP3X1558 -28.964 18.688 -9.321 1.00 0.00 W1 H +ATOM 7164 OH2 TIP3X1559 -26.685 22.348 -8.365 1.00 0.00 W1 O +ATOM 7165 H1 TIP3X1559 -27.368 21.898 -8.862 1.00 0.00 W1 H +ATOM 7166 H2 TIP3X1559 -26.199 21.645 -7.933 1.00 0.00 W1 H +ATOM 7167 OH2 TIP3X1560 -20.629 27.273 -5.968 1.00 0.00 W1 O +ATOM 7168 H1 TIP3X1560 -20.871 26.686 -6.685 1.00 0.00 W1 H +ATOM 7169 H2 TIP3X1560 -19.679 27.183 -5.896 1.00 0.00 W1 H +ATOM 7170 OH2 TIP3X1561 -16.331 30.907 -9.188 1.00 0.00 W1 O +ATOM 7171 H1 TIP3X1561 -16.336 30.439 -8.353 1.00 0.00 W1 H +ATOM 7172 H2 TIP3X1561 -17.212 30.778 -9.541 1.00 0.00 W1 H +ATOM 7173 OH2 TIP3X1562 -24.459 27.244 -8.166 1.00 0.00 W1 O +ATOM 7174 H1 TIP3X1562 -25.031 26.524 -7.897 1.00 0.00 W1 H +ATOM 7175 H2 TIP3X1562 -24.920 28.034 -7.883 1.00 0.00 W1 H +ATOM 7176 OH2 TIP3X1563 -22.238 17.695 -3.595 1.00 0.00 W1 O +ATOM 7177 H1 TIP3X1563 -22.980 18.175 -3.228 1.00 0.00 W1 H +ATOM 7178 H2 TIP3X1563 -22.618 16.883 -3.930 1.00 0.00 W1 H +ATOM 7179 OH2 TIP3X1564 -26.886 18.400 -13.794 1.00 0.00 W1 O +ATOM 7180 H1 TIP3X1564 -26.984 17.738 -13.109 1.00 0.00 W1 H +ATOM 7181 H2 TIP3X1564 -27.069 17.932 -14.608 1.00 0.00 W1 H +ATOM 7182 OH2 TIP3X1565 -15.992 19.322 -5.604 1.00 0.00 W1 O +ATOM 7183 H1 TIP3X1565 -15.473 19.991 -6.051 1.00 0.00 W1 H +ATOM 7184 H2 TIP3X1565 -15.550 19.198 -4.764 1.00 0.00 W1 H +ATOM 7185 OH2 TIP3X1566 -29.934 15.675 -11.444 1.00 0.00 W1 O +ATOM 7186 H1 TIP3X1566 -29.209 16.296 -11.375 1.00 0.00 W1 H +ATOM 7187 H2 TIP3X1566 -30.306 15.642 -10.563 1.00 0.00 W1 H +ATOM 7188 OH2 TIP3X1567 -24.668 21.910 -1.458 1.00 0.00 W1 O +ATOM 7189 H1 TIP3X1567 -23.804 22.309 -1.559 1.00 0.00 W1 H +ATOM 7190 H2 TIP3X1567 -24.516 20.973 -1.580 1.00 0.00 W1 H +ATOM 7191 OH2 TIP3X1568 -21.502 26.820 -8.718 1.00 0.00 W1 O +ATOM 7192 H1 TIP3X1568 -21.408 25.957 -9.122 1.00 0.00 W1 H +ATOM 7193 H2 TIP3X1568 -22.435 27.020 -8.794 1.00 0.00 W1 H +ATOM 7194 OH2 TIP3X1569 -22.890 25.104 -11.187 1.00 0.00 W1 O +ATOM 7195 H1 TIP3X1569 -23.455 24.490 -10.718 1.00 0.00 W1 H +ATOM 7196 H2 TIP3X1569 -23.364 25.935 -11.159 1.00 0.00 W1 H +ATOM 7197 OH2 TIP3X1570 -30.352 25.617 -4.730 1.00 0.00 W1 O +ATOM 7198 H1 TIP3X1570 -30.887 25.016 -5.248 1.00 0.00 W1 H +ATOM 7199 H2 TIP3X1570 -30.823 25.704 -3.901 1.00 0.00 W1 H +ATOM 7200 OH2 TIP3X1571 -19.056 24.638 -10.363 1.00 0.00 W1 O +ATOM 7201 H1 TIP3X1571 -19.112 23.723 -10.639 1.00 0.00 W1 H +ATOM 7202 H2 TIP3X1571 -19.229 25.141 -11.159 1.00 0.00 W1 H +ATOM 7203 OH2 TIP3X1572 -18.759 25.152 -3.338 1.00 0.00 W1 O +ATOM 7204 H1 TIP3X1572 -19.662 25.236 -3.030 1.00 0.00 W1 H +ATOM 7205 H2 TIP3X1572 -18.591 24.210 -3.335 1.00 0.00 W1 H +ATOM 7206 OH2 TIP3X1573 -16.393 23.112 -5.533 1.00 0.00 W1 O +ATOM 7207 H1 TIP3X1573 -15.730 22.431 -5.652 1.00 0.00 W1 H +ATOM 7208 H2 TIP3X1573 -17.109 22.672 -5.074 1.00 0.00 W1 H +ATOM 7209 OH2 TIP3X1574 -27.248 22.799 -0.388 1.00 0.00 W1 O +ATOM 7210 H1 TIP3X1574 -27.777 22.565 -1.151 1.00 0.00 W1 H +ATOM 7211 H2 TIP3X1574 -26.353 22.846 -0.723 1.00 0.00 W1 H +ATOM 7212 OH2 TIP3X1575 -26.338 26.005 -4.827 1.00 0.00 W1 O +ATOM 7213 H1 TIP3X1575 -26.383 25.450 -4.048 1.00 0.00 W1 H +ATOM 7214 H2 TIP3X1575 -26.971 26.703 -4.661 1.00 0.00 W1 H +ATOM 7215 OH2 TIP3X1576 -17.666 27.135 -5.077 1.00 0.00 W1 O +ATOM 7216 H1 TIP3X1576 -17.243 27.903 -4.693 1.00 0.00 W1 H +ATOM 7217 H2 TIP3X1576 -17.970 26.627 -4.325 1.00 0.00 W1 H +ATOM 7218 OH2 TIP3X1577 -19.579 29.110 -3.252 1.00 0.00 W1 O +ATOM 7219 H1 TIP3X1577 -20.286 28.481 -3.395 1.00 0.00 W1 H +ATOM 7220 H2 TIP3X1577 -19.250 29.305 -4.130 1.00 0.00 W1 H +ATOM 7221 OH2 TIP3X1578 -19.328 27.646 -0.856 1.00 0.00 W1 O +ATOM 7222 H1 TIP3X1578 -19.961 27.040 -1.240 1.00 0.00 W1 H +ATOM 7223 H2 TIP3X1578 -19.214 28.327 -1.520 1.00 0.00 W1 H +ATOM 7224 OH2 TIP3X1579 -15.717 29.555 -6.789 1.00 0.00 W1 O +ATOM 7225 H1 TIP3X1579 -15.040 29.396 -6.133 1.00 0.00 W1 H +ATOM 7226 H2 TIP3X1579 -15.951 28.683 -7.108 1.00 0.00 W1 H +ATOM 7227 OH2 TIP3X1580 -25.161 16.026 -8.397 1.00 0.00 W1 O +ATOM 7228 H1 TIP3X1580 -25.453 16.935 -8.457 1.00 0.00 W1 H +ATOM 7229 H2 TIP3X1580 -24.329 16.008 -8.870 1.00 0.00 W1 H +ATOM 7230 OH2 TIP3X1581 -23.037 25.972 -14.742 1.00 0.00 W1 O +ATOM 7231 H1 TIP3X1581 -23.732 25.350 -14.528 1.00 0.00 W1 H +ATOM 7232 H2 TIP3X1581 -23.055 26.608 -14.027 1.00 0.00 W1 H +ATOM 7233 OH2 TIP3X1582 -15.657 24.736 -15.306 1.00 0.00 W1 O +ATOM 7234 H1 TIP3X1582 -15.920 23.986 -15.839 1.00 0.00 W1 H +ATOM 7235 H2 TIP3X1582 -15.911 25.500 -15.823 1.00 0.00 W1 H +ATOM 7236 OH2 TIP3X1583 -29.709 28.432 -15.589 1.00 0.00 W1 O +ATOM 7237 H1 TIP3X1583 -29.263 27.883 -14.943 1.00 0.00 W1 H +ATOM 7238 H2 TIP3X1583 -30.605 28.098 -15.610 1.00 0.00 W1 H +ATOM 7239 OH2 TIP3X1584 -17.615 30.561 -14.330 1.00 0.00 W1 O +ATOM 7240 H1 TIP3X1584 -16.730 30.233 -14.489 1.00 0.00 W1 H +ATOM 7241 H2 TIP3X1584 -17.845 31.029 -15.133 1.00 0.00 W1 H +ATOM 7242 OH2 TIP3X1585 -16.223 26.223 -2.253 1.00 0.00 W1 O +ATOM 7243 H1 TIP3X1585 -16.333 27.172 -2.194 1.00 0.00 W1 H +ATOM 7244 H2 TIP3X1585 -17.116 25.878 -2.263 1.00 0.00 W1 H +ATOM 7245 OH2 TIP3X1586 -29.537 29.049 -12.634 1.00 0.00 W1 O +ATOM 7246 H1 TIP3X1586 -29.605 29.885 -12.174 1.00 0.00 W1 H +ATOM 7247 H2 TIP3X1586 -30.432 28.711 -12.651 1.00 0.00 W1 H +ATOM 7248 OH2 TIP3X1587 -16.957 27.542 -14.990 1.00 0.00 W1 O +ATOM 7249 H1 TIP3X1587 -16.925 27.462 -14.036 1.00 0.00 W1 H +ATOM 7250 H2 TIP3X1587 -17.790 27.979 -15.166 1.00 0.00 W1 H +ATOM 7251 OH2 TIP3X1588 -20.586 15.837 -2.106 1.00 0.00 W1 O +ATOM 7252 H1 TIP3X1588 -20.893 16.585 -2.618 1.00 0.00 W1 H +ATOM 7253 H2 TIP3X1588 -20.532 15.120 -2.738 1.00 0.00 W1 H +ATOM 7254 OH2 TIP3X1589 -26.372 29.753 -4.077 1.00 0.00 W1 O +ATOM 7255 H1 TIP3X1589 -25.524 29.991 -3.703 1.00 0.00 W1 H +ATOM 7256 H2 TIP3X1589 -26.161 29.373 -4.930 1.00 0.00 W1 H +ATOM 7257 OH2 TIP3X1590 -27.906 17.772 -0.726 1.00 0.00 W1 O +ATOM 7258 H1 TIP3X1590 -28.783 17.861 -0.352 1.00 0.00 W1 H +ATOM 7259 H2 TIP3X1590 -27.843 18.484 -1.363 1.00 0.00 W1 H +ATOM 7260 OH2 TIP3X1591 -21.709 19.719 -14.996 1.00 0.00 W1 O +ATOM 7261 H1 TIP3X1591 -21.875 20.016 -15.891 1.00 0.00 W1 H +ATOM 7262 H2 TIP3X1591 -22.580 19.595 -14.619 1.00 0.00 W1 H +ATOM 7263 OH2 TIP3X1592 -16.311 27.479 -11.948 1.00 0.00 W1 O +ATOM 7264 H1 TIP3X1592 -15.738 26.742 -11.735 1.00 0.00 W1 H +ATOM 7265 H2 TIP3X1592 -16.642 27.778 -11.101 1.00 0.00 W1 H +ATOM 7266 OH2 TIP3X1593 -21.050 16.515 -15.019 1.00 0.00 W1 O +ATOM 7267 H1 TIP3X1593 -20.318 17.131 -14.994 1.00 0.00 W1 H +ATOM 7268 H2 TIP3X1593 -20.809 15.883 -15.695 1.00 0.00 W1 H +ATOM 7269 OH2 TIP3X1594 -16.518 16.609 -4.754 1.00 0.00 W1 O +ATOM 7270 H1 TIP3X1594 -16.026 15.979 -4.226 1.00 0.00 W1 H +ATOM 7271 H2 TIP3X1594 -15.918 16.851 -5.459 1.00 0.00 W1 H +ATOM 7272 OH2 TIP3X1595 -29.011 25.829 -8.676 1.00 0.00 W1 O +ATOM 7273 H1 TIP3X1595 -29.679 26.153 -8.071 1.00 0.00 W1 H +ATOM 7274 H2 TIP3X1595 -28.219 25.760 -8.144 1.00 0.00 W1 H +ATOM 7275 OH2 TIP3X1596 -24.014 27.248 -1.565 1.00 0.00 W1 O +ATOM 7276 H1 TIP3X1596 -23.790 26.870 -0.715 1.00 0.00 W1 H +ATOM 7277 H2 TIP3X1596 -24.621 26.619 -1.956 1.00 0.00 W1 H +ATOM 7278 OH2 TIP3X1597 -20.535 18.553 -6.153 1.00 0.00 W1 O +ATOM 7279 H1 TIP3X1597 -20.476 18.371 -5.215 1.00 0.00 W1 H +ATOM 7280 H2 TIP3X1597 -21.473 18.640 -6.321 1.00 0.00 W1 H +ATOM 7281 OH2 TIP3X1598 -24.343 19.210 -1.974 1.00 0.00 W1 O +ATOM 7282 H1 TIP3X1598 -25.210 19.140 -2.374 1.00 0.00 W1 H +ATOM 7283 H2 TIP3X1598 -24.398 18.669 -1.186 1.00 0.00 W1 H +ATOM 7284 OH2 TIP3X1599 -16.857 21.930 -0.221 1.00 0.00 W1 O +ATOM 7285 H1 TIP3X1599 -16.063 21.397 -0.237 1.00 0.00 W1 H +ATOM 7286 H2 TIP3X1599 -17.151 21.895 0.690 1.00 0.00 W1 H +ATOM 7287 OH2 TIP3X1600 -28.672 15.797 -4.302 1.00 0.00 W1 O +ATOM 7288 H1 TIP3X1600 -28.898 16.250 -5.115 1.00 0.00 W1 H +ATOM 7289 H2 TIP3X1600 -27.842 15.360 -4.494 1.00 0.00 W1 H +ATOM 7290 OH2 TIP3X1601 -22.577 16.255 -9.221 1.00 0.00 W1 O +ATOM 7291 H1 TIP3X1601 -22.095 16.769 -9.868 1.00 0.00 W1 H +ATOM 7292 H2 TIP3X1601 -22.233 16.548 -8.377 1.00 0.00 W1 H +ATOM 7293 OH2 TIP3X1602 -28.107 20.846 -14.068 1.00 0.00 W1 O +ATOM 7294 H1 TIP3X1602 -27.685 21.492 -14.634 1.00 0.00 W1 H +ATOM 7295 H2 TIP3X1602 -27.395 20.271 -13.787 1.00 0.00 W1 H +ATOM 7296 OH2 TIP3X1603 -27.583 21.503 -4.757 1.00 0.00 W1 O +ATOM 7297 H1 TIP3X1603 -27.667 22.294 -4.225 1.00 0.00 W1 H +ATOM 7298 H2 TIP3X1603 -26.668 21.499 -5.037 1.00 0.00 W1 H +ATOM 7299 OH2 TIP3X1604 -28.400 22.221 -11.571 1.00 0.00 W1 O +ATOM 7300 H1 TIP3X1604 -28.337 21.932 -12.482 1.00 0.00 W1 H +ATOM 7301 H2 TIP3X1604 -27.625 22.766 -11.438 1.00 0.00 W1 H +ATOM 7302 OH2 TIP3X1605 -19.380 18.791 -13.811 1.00 0.00 W1 O +ATOM 7303 H1 TIP3X1605 -20.087 19.279 -14.231 1.00 0.00 W1 H +ATOM 7304 H2 TIP3X1605 -18.655 18.835 -14.435 1.00 0.00 W1 H +ATOM 7305 OH2 TIP3X1606 -30.829 19.677 -2.723 1.00 0.00 W1 O +ATOM 7306 H1 TIP3X1606 -31.734 19.971 -2.612 1.00 0.00 W1 H +ATOM 7307 H2 TIP3X1606 -30.689 19.058 -2.007 1.00 0.00 W1 H +ATOM 7308 OH2 TIP3X1607 -29.686 16.515 -6.741 1.00 0.00 W1 O +ATOM 7309 H1 TIP3X1607 -29.579 15.813 -7.383 1.00 0.00 W1 H +ATOM 7310 H2 TIP3X1607 -29.550 17.320 -7.240 1.00 0.00 W1 H +ATOM 7311 OH2 TIP3X1608 -18.164 20.143 -1.853 1.00 0.00 W1 O +ATOM 7312 H1 TIP3X1608 -17.853 20.721 -1.157 1.00 0.00 W1 H +ATOM 7313 H2 TIP3X1608 -19.108 20.079 -1.708 1.00 0.00 W1 H +ATOM 7314 OH2 TIP3X1609 -21.121 20.148 -1.906 1.00 0.00 W1 O +ATOM 7315 H1 TIP3X1609 -21.481 20.717 -2.587 1.00 0.00 W1 H +ATOM 7316 H2 TIP3X1609 -21.459 19.278 -2.117 1.00 0.00 W1 H +ATOM 7317 OH2 TIP3X1610 -22.918 20.618 -12.041 1.00 0.00 W1 O +ATOM 7318 H1 TIP3X1610 -22.829 21.197 -12.797 1.00 0.00 W1 H +ATOM 7319 H2 TIP3X1610 -23.688 20.083 -12.237 1.00 0.00 W1 H +ATOM 7320 OH2 TIP3X1611 -24.615 19.949 -14.353 1.00 0.00 W1 O +ATOM 7321 H1 TIP3X1611 -25.053 20.142 -15.183 1.00 0.00 W1 H +ATOM 7322 H2 TIP3X1611 -25.022 19.138 -14.050 1.00 0.00 W1 H +ATOM 7323 OH2 TIP3X1612 -23.905 17.011 -0.564 1.00 0.00 W1 O +ATOM 7324 H1 TIP3X1612 -24.371 16.624 0.176 1.00 0.00 W1 H +ATOM 7325 H2 TIP3X1612 -22.991 17.044 -0.282 1.00 0.00 W1 H +ATOM 7326 OH2 TIP3X1613 -18.342 22.356 -3.883 1.00 0.00 W1 O +ATOM 7327 H1 TIP3X1613 -18.322 21.706 -3.180 1.00 0.00 W1 H +ATOM 7328 H2 TIP3X1613 -19.176 22.204 -4.327 1.00 0.00 W1 H +ATOM 7329 OH2 TIP3X1614 -30.267 19.456 -15.413 1.00 0.00 W1 O +ATOM 7330 H1 TIP3X1614 -31.023 19.264 -14.859 1.00 0.00 W1 H +ATOM 7331 H2 TIP3X1614 -29.733 20.055 -14.891 1.00 0.00 W1 H +ATOM 7332 OH2 TIP3X1615 -30.348 30.950 -14.926 1.00 0.00 W1 O +ATOM 7333 H1 TIP3X1615 -29.932 30.202 -14.497 1.00 0.00 W1 H +ATOM 7334 H2 TIP3X1615 -30.335 31.643 -14.267 1.00 0.00 W1 H +ATOM 7335 OH2 TIP3X1616 -21.600 19.110 -9.933 1.00 0.00 W1 O +ATOM 7336 H1 TIP3X1616 -21.937 19.460 -10.758 1.00 0.00 W1 H +ATOM 7337 H2 TIP3X1616 -20.703 18.842 -10.135 1.00 0.00 W1 H +ATOM 7338 OH2 TIP3X1617 -26.145 18.420 -8.189 1.00 0.00 W1 O +ATOM 7339 H1 TIP3X1617 -27.087 18.373 -8.348 1.00 0.00 W1 H +ATOM 7340 H2 TIP3X1617 -26.006 19.294 -7.826 1.00 0.00 W1 H +ATOM 7341 OH2 TIP3X1618 -30.783 19.546 -11.396 1.00 0.00 W1 O +ATOM 7342 H1 TIP3X1618 -31.057 19.422 -10.487 1.00 0.00 W1 H +ATOM 7343 H2 TIP3X1618 -30.977 20.465 -11.582 1.00 0.00 W1 H +ATOM 7344 OH2 TIP3X1619 -26.782 18.873 -3.335 1.00 0.00 W1 O +ATOM 7345 H1 TIP3X1619 -26.760 18.067 -3.851 1.00 0.00 W1 H +ATOM 7346 H2 TIP3X1619 -27.176 19.521 -3.920 1.00 0.00 W1 H +ATOM 7347 OH2 TIP3X1620 -26.199 25.409 -7.531 1.00 0.00 W1 O +ATOM 7348 H1 TIP3X1620 -26.271 24.473 -7.718 1.00 0.00 W1 H +ATOM 7349 H2 TIP3X1620 -26.195 25.462 -6.575 1.00 0.00 W1 H +ATOM 7350 OH2 TIP3X1621 -22.010 22.428 -2.968 1.00 0.00 W1 O +ATOM 7351 H1 TIP3X1621 -21.598 23.259 -2.732 1.00 0.00 W1 H +ATOM 7352 H2 TIP3X1621 -22.560 22.638 -3.723 1.00 0.00 W1 H +ATOM 7353 OH2 TIP3X1622 -16.215 17.794 -13.644 1.00 0.00 W1 O +ATOM 7354 H1 TIP3X1622 -15.780 18.021 -12.822 1.00 0.00 W1 H +ATOM 7355 H2 TIP3X1622 -16.735 17.019 -13.434 1.00 0.00 W1 H +ATOM 7356 OH2 TIP3X1623 -25.060 23.754 -14.466 1.00 0.00 W1 O +ATOM 7357 H1 TIP3X1623 -25.349 23.632 -13.561 1.00 0.00 W1 H +ATOM 7358 H2 TIP3X1623 -24.371 23.101 -14.587 1.00 0.00 W1 H +ATOM 7359 OH2 TIP3X1624 -18.357 22.270 -13.398 1.00 0.00 W1 O +ATOM 7360 H1 TIP3X1624 -19.222 22.071 -13.039 1.00 0.00 W1 H +ATOM 7361 H2 TIP3X1624 -17.800 22.391 -12.629 1.00 0.00 W1 H +ATOM 7362 OH2 TIP3X1625 -23.524 22.524 -6.927 1.00 0.00 W1 O +ATOM 7363 H1 TIP3X1625 -23.427 23.321 -6.406 1.00 0.00 W1 H +ATOM 7364 H2 TIP3X1625 -22.649 22.135 -6.936 1.00 0.00 W1 H +ATOM 7365 OH2 TIP3X1626 -23.778 22.906 -10.011 1.00 0.00 W1 O +ATOM 7366 H1 TIP3X1626 -23.157 22.310 -10.429 1.00 0.00 W1 H +ATOM 7367 H2 TIP3X1626 -23.753 22.669 -9.084 1.00 0.00 W1 H +ATOM 7368 OH2 TIP3X1627 -20.884 24.522 -1.075 1.00 0.00 W1 O +ATOM 7369 H1 TIP3X1627 -21.562 24.806 -0.462 1.00 0.00 W1 H +ATOM 7370 H2 TIP3X1627 -20.086 24.481 -0.549 1.00 0.00 W1 H +ATOM 7371 OH2 TIP3X1628 -28.374 23.937 -3.379 1.00 0.00 W1 O +ATOM 7372 H1 TIP3X1628 -27.857 24.343 -2.683 1.00 0.00 W1 H +ATOM 7373 H2 TIP3X1628 -28.757 24.674 -3.855 1.00 0.00 W1 H +ATOM 7374 OH2 TIP3X1629 -29.468 21.899 -1.758 1.00 0.00 W1 O +ATOM 7375 H1 TIP3X1629 -29.672 21.060 -2.170 1.00 0.00 W1 H +ATOM 7376 H2 TIP3X1629 -29.591 22.545 -2.453 1.00 0.00 W1 H +ATOM 7377 OH2 TIP3X1630 -29.575 22.772 -8.934 1.00 0.00 W1 O +ATOM 7378 H1 TIP3X1630 -29.219 23.645 -9.104 1.00 0.00 W1 H +ATOM 7379 H2 TIP3X1630 -29.677 22.382 -9.802 1.00 0.00 W1 H +ATOM 7380 OH2 TIP3X1631 -18.816 25.037 -14.748 1.00 0.00 W1 O +ATOM 7381 H1 TIP3X1631 -18.111 25.536 -15.160 1.00 0.00 W1 H +ATOM 7382 H2 TIP3X1631 -18.367 24.407 -14.184 1.00 0.00 W1 H +ATOM 7383 OH2 TIP3X1632 -16.220 22.384 -11.385 1.00 0.00 W1 O +ATOM 7384 H1 TIP3X1632 -16.507 22.557 -10.489 1.00 0.00 W1 H +ATOM 7385 H2 TIP3X1632 -15.707 23.156 -11.626 1.00 0.00 W1 H +ATOM 7386 OH2 TIP3X1633 -29.722 21.501 -6.663 1.00 0.00 W1 O +ATOM 7387 H1 TIP3X1633 -29.628 22.179 -7.332 1.00 0.00 W1 H +ATOM 7388 H2 TIP3X1633 -29.064 21.720 -6.004 1.00 0.00 W1 H +ATOM 7389 OH2 TIP3X1634 -26.935 30.008 -13.399 1.00 0.00 W1 O +ATOM 7390 H1 TIP3X1634 -27.164 30.368 -14.256 1.00 0.00 W1 H +ATOM 7391 H2 TIP3X1634 -27.348 29.145 -13.383 1.00 0.00 W1 H +ATOM 7392 OH2 TIP3X1635 -28.160 25.241 -14.901 1.00 0.00 W1 O +ATOM 7393 H1 TIP3X1635 -28.976 24.952 -15.310 1.00 0.00 W1 H +ATOM 7394 H2 TIP3X1635 -27.628 24.448 -14.840 1.00 0.00 W1 H +ATOM 7395 OH2 TIP3X1636 -26.742 26.081 -1.826 1.00 0.00 W1 O +ATOM 7396 H1 TIP3X1636 -27.315 26.683 -2.301 1.00 0.00 W1 H +ATOM 7397 H2 TIP3X1636 -27.216 25.885 -1.018 1.00 0.00 W1 H +ATOM 7398 OH2 TIP3X1637 -23.666 30.824 -4.136 1.00 0.00 W1 O +ATOM 7399 H1 TIP3X1637 -23.349 30.530 -3.282 1.00 0.00 W1 H +ATOM 7400 H2 TIP3X1637 -23.233 30.246 -4.765 1.00 0.00 W1 H +ATOM 7401 OH2 TIP3X1638 -18.960 31.065 -10.002 1.00 0.00 W1 O +ATOM 7402 H1 TIP3X1638 -19.373 30.374 -10.521 1.00 0.00 W1 H +ATOM 7403 H2 TIP3X1638 -19.156 31.872 -10.479 1.00 0.00 W1 H +ATOM 7404 OH2 TIP3X1639 -22.382 27.748 -12.750 1.00 0.00 W1 O +ATOM 7405 H1 TIP3X1639 -22.123 28.533 -13.232 1.00 0.00 W1 H +ATOM 7406 H2 TIP3X1639 -22.952 28.071 -12.052 1.00 0.00 W1 H +ATOM 7407 OH2 TIP3X1640 -22.365 22.902 -13.679 1.00 0.00 W1 O +ATOM 7408 H1 TIP3X1640 -21.542 22.975 -14.162 1.00 0.00 W1 H +ATOM 7409 H2 TIP3X1640 -22.358 23.646 -13.077 1.00 0.00 W1 H +ATOM 7410 OH2 TIP3X1641 -18.964 17.626 -3.888 1.00 0.00 W1 O +ATOM 7411 H1 TIP3X1641 -18.159 17.395 -4.351 1.00 0.00 W1 H +ATOM 7412 H2 TIP3X1641 -18.673 18.179 -3.163 1.00 0.00 W1 H +ATOM 7413 OH2 TIP3X1642 -30.999 24.727 -12.482 1.00 0.00 W1 O +ATOM 7414 H1 TIP3X1642 -31.152 24.819 -13.422 1.00 0.00 W1 H +ATOM 7415 H2 TIP3X1642 -30.045 24.727 -12.393 1.00 0.00 W1 H +ATOM 7416 OH2 TIP3X1643 -20.237 24.315 -5.886 1.00 0.00 W1 O +ATOM 7417 H1 TIP3X1643 -19.691 24.977 -5.460 1.00 0.00 W1 H +ATOM 7418 H2 TIP3X1643 -19.778 24.115 -6.701 1.00 0.00 W1 H +ATOM 7419 OH2 TIP3X1644 -21.414 29.289 -14.808 1.00 0.00 W1 O +ATOM 7420 H1 TIP3X1644 -20.590 29.324 -14.324 1.00 0.00 W1 H +ATOM 7421 H2 TIP3X1644 -21.211 28.776 -15.591 1.00 0.00 W1 H +ATOM 7422 OH2 TIP3X1645 -21.422 27.076 -3.157 1.00 0.00 W1 O +ATOM 7423 H1 TIP3X1645 -22.243 27.323 -2.731 1.00 0.00 W1 H +ATOM 7424 H2 TIP3X1645 -21.651 26.981 -4.082 1.00 0.00 W1 H +ATOM 7425 OH2 TIP3X1646 -24.797 27.301 -11.271 1.00 0.00 W1 O +ATOM 7426 H1 TIP3X1646 -25.504 27.448 -11.899 1.00 0.00 W1 H +ATOM 7427 H2 TIP3X1646 -25.134 27.646 -10.444 1.00 0.00 W1 H +ATOM 7428 OH2 TIP3X1647 -28.232 28.213 -2.559 1.00 0.00 W1 O +ATOM 7429 H1 TIP3X1647 -27.498 28.824 -2.624 1.00 0.00 W1 H +ATOM 7430 H2 TIP3X1647 -28.544 28.307 -1.660 1.00 0.00 W1 H +ATOM 7431 OH2 TIP3X1648 -28.642 29.918 -8.458 1.00 0.00 W1 O +ATOM 7432 H1 TIP3X1648 -29.228 29.177 -8.611 1.00 0.00 W1 H +ATOM 7433 H2 TIP3X1648 -28.199 30.051 -9.296 1.00 0.00 W1 H +ATOM 7434 OH2 TIP3X1649 -20.289 15.931 -7.377 1.00 0.00 W1 O +ATOM 7435 H1 TIP3X1649 -19.956 15.856 -8.272 1.00 0.00 W1 H +ATOM 7436 H2 TIP3X1649 -20.334 16.874 -7.216 1.00 0.00 W1 H +ATOM 7437 OH2 TIP3X1650 -23.051 18.060 -7.143 1.00 0.00 W1 O +ATOM 7438 H1 TIP3X1650 -23.413 18.549 -7.882 1.00 0.00 W1 H +ATOM 7439 H2 TIP3X1650 -23.782 17.971 -6.533 1.00 0.00 W1 H +ATOM 7440 OH2 TIP3X1651 -24.332 16.045 -13.215 1.00 0.00 W1 O +ATOM 7441 H1 TIP3X1651 -23.476 15.789 -12.869 1.00 0.00 W1 H +ATOM 7442 H2 TIP3X1651 -24.850 15.241 -13.190 1.00 0.00 W1 H +ATOM 7443 OH2 TIP3X1652 -21.580 15.888 -12.171 1.00 0.00 W1 O +ATOM 7444 H1 TIP3X1652 -21.124 15.152 -11.763 1.00 0.00 W1 H +ATOM 7445 H2 TIP3X1652 -21.173 15.975 -13.033 1.00 0.00 W1 H +ATOM 7446 OH2 TIP3X1653 -26.941 30.467 -0.717 1.00 0.00 W1 O +ATOM 7447 H1 TIP3X1653 -27.191 31.224 -1.246 1.00 0.00 W1 H +ATOM 7448 H2 TIP3X1653 -26.030 30.298 -0.956 1.00 0.00 W1 H +ATOM 7449 OH2 TIP3X1654 -21.934 29.161 -10.416 1.00 0.00 W1 O +ATOM 7450 H1 TIP3X1654 -21.273 28.519 -10.156 1.00 0.00 W1 H +ATOM 7451 H2 TIP3X1654 -21.947 29.796 -9.700 1.00 0.00 W1 H +ATOM 7452 OH2 TIP3X1655 -24.195 30.064 -1.507 1.00 0.00 W1 O +ATOM 7453 H1 TIP3X1655 -23.977 29.171 -1.236 1.00 0.00 W1 H +ATOM 7454 H2 TIP3X1655 -23.587 30.618 -1.017 1.00 0.00 W1 H +ATOM 7455 OH2 TIP3X1656 -25.248 18.182 -11.462 1.00 0.00 W1 O +ATOM 7456 H1 TIP3X1656 -24.591 17.523 -11.685 1.00 0.00 W1 H +ATOM 7457 H2 TIP3X1656 -25.206 18.251 -10.508 1.00 0.00 W1 H +ATOM 7458 OH2 TIP3X1657 -30.535 16.520 -2.006 1.00 0.00 W1 O +ATOM 7459 H1 TIP3X1657 -29.787 16.325 -2.570 1.00 0.00 W1 H +ATOM 7460 H2 TIP3X1657 -30.327 16.095 -1.175 1.00 0.00 W1 H +ATOM 7461 OH2 TIP3X1658 -19.415 29.247 -12.405 1.00 0.00 W1 O +ATOM 7462 H1 TIP3X1658 -19.271 28.307 -12.302 1.00 0.00 W1 H +ATOM 7463 H2 TIP3X1658 -18.592 29.580 -12.762 1.00 0.00 W1 H +ATOM 7464 OH2 TIP3X1659 -17.748 16.014 -1.178 1.00 0.00 W1 O +ATOM 7465 H1 TIP3X1659 -18.361 16.088 -1.908 1.00 0.00 W1 H +ATOM 7466 H2 TIP3X1659 -16.978 16.509 -1.459 1.00 0.00 W1 H +ATOM 7467 OH2 TIP3X1660 -26.954 30.227 -10.691 1.00 0.00 W1 O +ATOM 7468 H1 TIP3X1660 -26.961 30.272 -11.647 1.00 0.00 W1 H +ATOM 7469 H2 TIP3X1660 -26.147 30.673 -10.435 1.00 0.00 W1 H +ATOM 7470 OH2 TIP3X1661 -16.045 29.165 -2.742 1.00 0.00 W1 O +ATOM 7471 H1 TIP3X1661 -16.768 29.716 -2.441 1.00 0.00 W1 H +ATOM 7472 H2 TIP3X1661 -15.257 29.664 -2.528 1.00 0.00 W1 H +ATOM 7473 OH2 TIP3X1662 -28.419 18.487 -11.062 1.00 0.00 W1 O +ATOM 7474 H1 TIP3X1662 -29.063 18.876 -11.654 1.00 0.00 W1 H +ATOM 7475 H2 TIP3X1662 -27.617 18.984 -11.220 1.00 0.00 W1 H +ATOM 7476 OH2 TIP3X1663 -26.991 27.086 -13.330 1.00 0.00 W1 O +ATOM 7477 H1 TIP3X1663 -27.030 26.458 -14.052 1.00 0.00 W1 H +ATOM 7478 H2 TIP3X1663 -27.710 26.833 -12.752 1.00 0.00 W1 H +ATOM 7479 OH2 TIP3X1664 -29.096 26.614 4.309 1.00 0.00 W1 O +ATOM 7480 H1 TIP3X1664 -28.914 26.538 5.246 1.00 0.00 W1 H +ATOM 7481 H2 TIP3X1664 -29.120 27.557 4.145 1.00 0.00 W1 H +ATOM 7482 OH2 TIP3X1665 -17.994 24.105 8.047 1.00 0.00 W1 O +ATOM 7483 H1 TIP3X1665 -17.759 24.370 7.158 1.00 0.00 W1 H +ATOM 7484 H2 TIP3X1665 -17.165 23.842 8.446 1.00 0.00 W1 H +ATOM 7485 OH2 TIP3X1666 -26.010 23.829 4.026 1.00 0.00 W1 O +ATOM 7486 H1 TIP3X1666 -25.979 24.738 4.323 1.00 0.00 W1 H +ATOM 7487 H2 TIP3X1666 -25.502 23.346 4.678 1.00 0.00 W1 H +ATOM 7488 OH2 TIP3X1667 -18.206 27.988 6.169 1.00 0.00 W1 O +ATOM 7489 H1 TIP3X1667 -18.481 28.478 6.944 1.00 0.00 W1 H +ATOM 7490 H2 TIP3X1667 -18.732 27.188 6.192 1.00 0.00 W1 H +ATOM 7491 OH2 TIP3X1668 -19.690 26.431 3.212 1.00 0.00 W1 O +ATOM 7492 H1 TIP3X1668 -19.528 26.203 2.297 1.00 0.00 W1 H +ATOM 7493 H2 TIP3X1668 -20.619 26.660 3.242 1.00 0.00 W1 H +ATOM 7494 OH2 TIP3X1669 -15.842 26.963 7.997 1.00 0.00 W1 O +ATOM 7495 H1 TIP3X1669 -16.394 27.046 7.219 1.00 0.00 W1 H +ATOM 7496 H2 TIP3X1669 -16.453 26.747 8.702 1.00 0.00 W1 H +ATOM 7497 OH2 TIP3X1670 -29.206 28.227 10.448 1.00 0.00 W1 O +ATOM 7498 H1 TIP3X1670 -28.800 28.431 11.291 1.00 0.00 W1 H +ATOM 7499 H2 TIP3X1670 -29.777 27.482 10.630 1.00 0.00 W1 H +ATOM 7500 OH2 TIP3X1671 -21.831 29.852 9.674 1.00 0.00 W1 O +ATOM 7501 H1 TIP3X1671 -21.530 28.952 9.796 1.00 0.00 W1 H +ATOM 7502 H2 TIP3X1671 -21.205 30.233 9.057 1.00 0.00 W1 H +ATOM 7503 OH2 TIP3X1672 -18.398 29.809 9.554 1.00 0.00 W1 O +ATOM 7504 H1 TIP3X1672 -18.834 30.632 9.334 1.00 0.00 W1 H +ATOM 7505 H2 TIP3X1672 -17.469 30.035 9.603 1.00 0.00 W1 H +ATOM 7506 OH2 TIP3X1673 -25.950 29.384 8.683 1.00 0.00 W1 O +ATOM 7507 H1 TIP3X1673 -25.595 30.233 8.420 1.00 0.00 W1 H +ATOM 7508 H2 TIP3X1673 -26.885 29.443 8.487 1.00 0.00 W1 H +ATOM 7509 OH2 TIP3X1674 -21.109 21.276 7.585 1.00 0.00 W1 O +ATOM 7510 H1 TIP3X1674 -21.186 20.466 7.080 1.00 0.00 W1 H +ATOM 7511 H2 TIP3X1674 -20.166 21.415 7.672 1.00 0.00 W1 H +ATOM 7512 OH2 TIP3X1675 -25.086 17.374 9.947 1.00 0.00 W1 O +ATOM 7513 H1 TIP3X1675 -24.828 16.636 10.500 1.00 0.00 W1 H +ATOM 7514 H2 TIP3X1675 -25.762 17.017 9.371 1.00 0.00 W1 H +ATOM 7515 OH2 TIP3X1676 -18.244 19.573 8.324 1.00 0.00 W1 O +ATOM 7516 H1 TIP3X1676 -17.669 19.345 9.054 1.00 0.00 W1 H +ATOM 7517 H2 TIP3X1676 -19.119 19.319 8.618 1.00 0.00 W1 H +ATOM 7518 OH2 TIP3X1677 -25.198 20.698 9.695 1.00 0.00 W1 O +ATOM 7519 H1 TIP3X1677 -24.695 19.996 10.107 1.00 0.00 W1 H +ATOM 7520 H2 TIP3X1677 -24.541 21.340 9.428 1.00 0.00 W1 H +ATOM 7521 OH2 TIP3X1678 -17.721 21.746 6.592 1.00 0.00 W1 O +ATOM 7522 H1 TIP3X1678 -17.680 20.847 6.916 1.00 0.00 W1 H +ATOM 7523 H2 TIP3X1678 -17.839 22.279 7.379 1.00 0.00 W1 H +ATOM 7524 OH2 TIP3X1679 -19.037 18.390 4.461 1.00 0.00 W1 O +ATOM 7525 H1 TIP3X1679 -18.212 18.574 4.910 1.00 0.00 W1 H +ATOM 7526 H2 TIP3X1679 -18.960 18.845 3.622 1.00 0.00 W1 H +ATOM 7527 OH2 TIP3X1680 -22.854 24.361 10.532 1.00 0.00 W1 O +ATOM 7528 H1 TIP3X1680 -21.977 24.383 10.149 1.00 0.00 W1 H +ATOM 7529 H2 TIP3X1680 -23.119 25.280 10.578 1.00 0.00 W1 H +ATOM 7530 OH2 TIP3X1681 -23.704 26.909 10.342 1.00 0.00 W1 O +ATOM 7531 H1 TIP3X1681 -23.728 27.136 9.413 1.00 0.00 W1 H +ATOM 7532 H2 TIP3X1681 -24.624 26.855 10.601 1.00 0.00 W1 H +ATOM 7533 OH2 TIP3X1682 -28.841 18.791 7.180 1.00 0.00 W1 O +ATOM 7534 H1 TIP3X1682 -29.166 19.670 7.371 1.00 0.00 W1 H +ATOM 7535 H2 TIP3X1682 -28.964 18.688 6.237 1.00 0.00 W1 H +ATOM 7536 OH2 TIP3X1683 -26.685 22.348 7.193 1.00 0.00 W1 O +ATOM 7537 H1 TIP3X1683 -27.368 21.898 6.696 1.00 0.00 W1 H +ATOM 7538 H2 TIP3X1683 -26.199 21.645 7.624 1.00 0.00 W1 H +ATOM 7539 OH2 TIP3X1684 -20.629 27.273 9.589 1.00 0.00 W1 O +ATOM 7540 H1 TIP3X1684 -20.871 26.686 8.872 1.00 0.00 W1 H +ATOM 7541 H2 TIP3X1684 -19.679 27.183 9.662 1.00 0.00 W1 H +ATOM 7542 OH2 TIP3X1685 -16.331 30.907 6.370 1.00 0.00 W1 O +ATOM 7543 H1 TIP3X1685 -16.336 30.439 7.205 1.00 0.00 W1 H +ATOM 7544 H2 TIP3X1685 -17.212 30.778 6.017 1.00 0.00 W1 H +ATOM 7545 OH2 TIP3X1686 -24.459 27.244 7.392 1.00 0.00 W1 O +ATOM 7546 H1 TIP3X1686 -25.031 26.524 7.661 1.00 0.00 W1 H +ATOM 7547 H2 TIP3X1686 -24.920 28.034 7.674 1.00 0.00 W1 H +ATOM 7548 OH2 TIP3X1687 -22.238 17.695 11.962 1.00 0.00 W1 O +ATOM 7549 H1 TIP3X1687 -22.980 18.175 12.329 1.00 0.00 W1 H +ATOM 7550 H2 TIP3X1687 -22.618 16.883 11.628 1.00 0.00 W1 H +ATOM 7551 OH2 TIP3X1688 -26.886 18.400 1.764 1.00 0.00 W1 O +ATOM 7552 H1 TIP3X1688 -26.984 17.738 2.448 1.00 0.00 W1 H +ATOM 7553 H2 TIP3X1688 -27.069 17.932 0.949 1.00 0.00 W1 H +ATOM 7554 OH2 TIP3X1689 -15.992 19.322 9.953 1.00 0.00 W1 O +ATOM 7555 H1 TIP3X1689 -15.473 19.991 9.506 1.00 0.00 W1 H +ATOM 7556 H2 TIP3X1689 -15.550 19.198 10.793 1.00 0.00 W1 H +ATOM 7557 OH2 TIP3X1690 -29.934 15.675 4.113 1.00 0.00 W1 O +ATOM 7558 H1 TIP3X1690 -29.209 16.296 4.182 1.00 0.00 W1 H +ATOM 7559 H2 TIP3X1690 -30.306 15.642 4.995 1.00 0.00 W1 H +ATOM 7560 OH2 TIP3X1691 -24.668 21.910 14.100 1.00 0.00 W1 O +ATOM 7561 H1 TIP3X1691 -23.804 22.309 13.998 1.00 0.00 W1 H +ATOM 7562 H2 TIP3X1691 -24.516 20.973 13.977 1.00 0.00 W1 H +ATOM 7563 OH2 TIP3X1692 -21.502 26.820 6.839 1.00 0.00 W1 O +ATOM 7564 H1 TIP3X1692 -21.408 25.957 6.436 1.00 0.00 W1 H +ATOM 7565 H2 TIP3X1692 -22.435 27.020 6.763 1.00 0.00 W1 H +ATOM 7566 OH2 TIP3X1693 -22.890 25.104 4.370 1.00 0.00 W1 O +ATOM 7567 H1 TIP3X1693 -23.455 24.490 4.840 1.00 0.00 W1 H +ATOM 7568 H2 TIP3X1693 -23.364 25.935 4.398 1.00 0.00 W1 H +ATOM 7569 OH2 TIP3X1694 -30.352 25.617 10.827 1.00 0.00 W1 O +ATOM 7570 H1 TIP3X1694 -30.887 25.016 10.309 1.00 0.00 W1 H +ATOM 7571 H2 TIP3X1694 -30.823 25.704 11.656 1.00 0.00 W1 H +ATOM 7572 OH2 TIP3X1695 -19.056 24.638 5.195 1.00 0.00 W1 O +ATOM 7573 H1 TIP3X1695 -19.112 23.723 4.918 1.00 0.00 W1 H +ATOM 7574 H2 TIP3X1695 -19.229 25.141 4.399 1.00 0.00 W1 H +ATOM 7575 OH2 TIP3X1696 -18.759 25.152 12.219 1.00 0.00 W1 O +ATOM 7576 H1 TIP3X1696 -19.662 25.236 12.527 1.00 0.00 W1 H +ATOM 7577 H2 TIP3X1696 -18.591 24.210 12.223 1.00 0.00 W1 H +ATOM 7578 OH2 TIP3X1697 -16.393 23.112 10.025 1.00 0.00 W1 O +ATOM 7579 H1 TIP3X1697 -15.730 22.431 9.906 1.00 0.00 W1 H +ATOM 7580 H2 TIP3X1697 -17.109 22.672 10.484 1.00 0.00 W1 H +ATOM 7581 OH2 TIP3X1698 -27.248 22.799 15.169 1.00 0.00 W1 O +ATOM 7582 H1 TIP3X1698 -27.777 22.565 14.407 1.00 0.00 W1 H +ATOM 7583 H2 TIP3X1698 -26.353 22.846 14.835 1.00 0.00 W1 H +ATOM 7584 OH2 TIP3X1699 -26.338 26.005 10.731 1.00 0.00 W1 O +ATOM 7585 H1 TIP3X1699 -26.383 25.450 11.509 1.00 0.00 W1 H +ATOM 7586 H2 TIP3X1699 -26.971 26.703 10.897 1.00 0.00 W1 H +ATOM 7587 OH2 TIP3X1700 -17.666 27.135 10.480 1.00 0.00 W1 O +ATOM 7588 H1 TIP3X1700 -17.243 27.903 10.864 1.00 0.00 W1 H +ATOM 7589 H2 TIP3X1700 -17.970 26.627 11.233 1.00 0.00 W1 H +ATOM 7590 OH2 TIP3X1701 -19.579 29.110 12.305 1.00 0.00 W1 O +ATOM 7591 H1 TIP3X1701 -20.286 28.481 12.163 1.00 0.00 W1 H +ATOM 7592 H2 TIP3X1701 -19.250 29.305 11.428 1.00 0.00 W1 H +ATOM 7593 OH2 TIP3X1702 -19.328 27.646 14.702 1.00 0.00 W1 O +ATOM 7594 H1 TIP3X1702 -19.961 27.040 14.318 1.00 0.00 W1 H +ATOM 7595 H2 TIP3X1702 -19.214 28.327 14.038 1.00 0.00 W1 H +ATOM 7596 OH2 TIP3X1703 -15.717 29.555 8.768 1.00 0.00 W1 O +ATOM 7597 H1 TIP3X1703 -15.040 29.396 9.425 1.00 0.00 W1 H +ATOM 7598 H2 TIP3X1703 -15.951 28.683 8.449 1.00 0.00 W1 H +ATOM 7599 OH2 TIP3X1704 -25.161 16.026 7.161 1.00 0.00 W1 O +ATOM 7600 H1 TIP3X1704 -25.453 16.935 7.100 1.00 0.00 W1 H +ATOM 7601 H2 TIP3X1704 -24.329 16.008 6.688 1.00 0.00 W1 H +ATOM 7602 OH2 TIP3X1705 -23.037 25.972 0.815 1.00 0.00 W1 O +ATOM 7603 H1 TIP3X1705 -23.732 25.350 1.030 1.00 0.00 W1 H +ATOM 7604 H2 TIP3X1705 -23.055 26.608 1.530 1.00 0.00 W1 H +ATOM 7605 OH2 TIP3X1706 -15.657 24.736 0.252 1.00 0.00 W1 O +ATOM 7606 H1 TIP3X1706 -15.920 23.986 -0.282 1.00 0.00 W1 H +ATOM 7607 H2 TIP3X1706 -15.911 25.500 -0.266 1.00 0.00 W1 H +ATOM 7608 OH2 TIP3X1707 -29.709 28.432 -0.031 1.00 0.00 W1 O +ATOM 7609 H1 TIP3X1707 -29.263 27.883 0.614 1.00 0.00 W1 H +ATOM 7610 H2 TIP3X1707 -30.605 28.098 -0.053 1.00 0.00 W1 H +ATOM 7611 OH2 TIP3X1708 -17.615 30.561 1.227 1.00 0.00 W1 O +ATOM 7612 H1 TIP3X1708 -16.730 30.233 1.069 1.00 0.00 W1 H +ATOM 7613 H2 TIP3X1708 -17.845 31.029 0.425 1.00 0.00 W1 H +ATOM 7614 OH2 TIP3X1709 -16.223 26.223 13.305 1.00 0.00 W1 O +ATOM 7615 H1 TIP3X1709 -16.333 27.172 13.364 1.00 0.00 W1 H +ATOM 7616 H2 TIP3X1709 -17.116 25.878 13.294 1.00 0.00 W1 H +ATOM 7617 OH2 TIP3X1710 -29.537 29.049 2.923 1.00 0.00 W1 O +ATOM 7618 H1 TIP3X1710 -29.605 29.885 3.384 1.00 0.00 W1 H +ATOM 7619 H2 TIP3X1710 -30.432 28.711 2.907 1.00 0.00 W1 H +ATOM 7620 OH2 TIP3X1711 -16.957 27.542 0.568 1.00 0.00 W1 O +ATOM 7621 H1 TIP3X1711 -16.925 27.462 1.521 1.00 0.00 W1 H +ATOM 7622 H2 TIP3X1711 -17.790 27.979 0.391 1.00 0.00 W1 H +ATOM 7623 OH2 TIP3X1712 -20.586 15.837 13.452 1.00 0.00 W1 O +ATOM 7624 H1 TIP3X1712 -20.893 16.585 12.939 1.00 0.00 W1 H +ATOM 7625 H2 TIP3X1712 -20.532 15.120 12.820 1.00 0.00 W1 H +ATOM 7626 OH2 TIP3X1713 -26.372 29.753 11.481 1.00 0.00 W1 O +ATOM 7627 H1 TIP3X1713 -25.524 29.991 11.854 1.00 0.00 W1 H +ATOM 7628 H2 TIP3X1713 -26.161 29.373 10.628 1.00 0.00 W1 H +ATOM 7629 OH2 TIP3X1714 -27.906 17.772 14.831 1.00 0.00 W1 O +ATOM 7630 H1 TIP3X1714 -28.783 17.861 15.205 1.00 0.00 W1 H +ATOM 7631 H2 TIP3X1714 -27.843 18.484 14.195 1.00 0.00 W1 H +ATOM 7632 OH2 TIP3X1715 -21.709 19.719 0.562 1.00 0.00 W1 O +ATOM 7633 H1 TIP3X1715 -21.875 20.016 -0.333 1.00 0.00 W1 H +ATOM 7634 H2 TIP3X1715 -22.580 19.595 0.939 1.00 0.00 W1 H +ATOM 7635 OH2 TIP3X1716 -16.311 27.479 3.610 1.00 0.00 W1 O +ATOM 7636 H1 TIP3X1716 -15.738 26.742 3.823 1.00 0.00 W1 H +ATOM 7637 H2 TIP3X1716 -16.642 27.778 4.457 1.00 0.00 W1 H +ATOM 7638 OH2 TIP3X1717 -21.050 16.515 0.539 1.00 0.00 W1 O +ATOM 7639 H1 TIP3X1717 -20.318 17.131 0.563 1.00 0.00 W1 H +ATOM 7640 H2 TIP3X1717 -20.809 15.883 -0.138 1.00 0.00 W1 H +ATOM 7641 OH2 TIP3X1718 -29.011 25.829 6.882 1.00 0.00 W1 O +ATOM 7642 H1 TIP3X1718 -29.679 26.153 7.486 1.00 0.00 W1 H +ATOM 7643 H2 TIP3X1718 -28.219 25.760 7.414 1.00 0.00 W1 H +ATOM 7644 OH2 TIP3X1719 -24.014 27.248 13.992 1.00 0.00 W1 O +ATOM 7645 H1 TIP3X1719 -23.790 26.870 14.843 1.00 0.00 W1 H +ATOM 7646 H2 TIP3X1719 -24.621 26.619 13.602 1.00 0.00 W1 H +ATOM 7647 OH2 TIP3X1720 -20.535 18.553 9.405 1.00 0.00 W1 O +ATOM 7648 H1 TIP3X1720 -20.476 18.371 10.343 1.00 0.00 W1 H +ATOM 7649 H2 TIP3X1720 -21.473 18.640 9.236 1.00 0.00 W1 H +ATOM 7650 OH2 TIP3X1721 -24.343 19.210 13.584 1.00 0.00 W1 O +ATOM 7651 H1 TIP3X1721 -25.210 19.140 13.184 1.00 0.00 W1 H +ATOM 7652 H2 TIP3X1721 -24.398 18.669 14.372 1.00 0.00 W1 H +ATOM 7653 OH2 TIP3X1722 -16.857 21.930 15.337 1.00 0.00 W1 O +ATOM 7654 H1 TIP3X1722 -16.063 21.397 15.320 1.00 0.00 W1 H +ATOM 7655 H2 TIP3X1722 -17.151 21.895 16.247 1.00 0.00 W1 H +ATOM 7656 OH2 TIP3X1723 -28.672 15.797 11.255 1.00 0.00 W1 O +ATOM 7657 H1 TIP3X1723 -28.898 16.250 10.443 1.00 0.00 W1 H +ATOM 7658 H2 TIP3X1723 -27.842 15.360 11.064 1.00 0.00 W1 H +ATOM 7659 OH2 TIP3X1724 -22.577 16.255 6.337 1.00 0.00 W1 O +ATOM 7660 H1 TIP3X1724 -22.095 16.769 5.689 1.00 0.00 W1 H +ATOM 7661 H2 TIP3X1724 -22.233 16.548 7.181 1.00 0.00 W1 H +ATOM 7662 OH2 TIP3X1725 -28.107 20.846 1.490 1.00 0.00 W1 O +ATOM 7663 H1 TIP3X1725 -27.685 21.492 0.924 1.00 0.00 W1 H +ATOM 7664 H2 TIP3X1725 -27.395 20.271 1.771 1.00 0.00 W1 H +ATOM 7665 OH2 TIP3X1726 -27.583 21.503 10.801 1.00 0.00 W1 O +ATOM 7666 H1 TIP3X1726 -27.667 22.294 11.333 1.00 0.00 W1 H +ATOM 7667 H2 TIP3X1726 -26.668 21.499 10.520 1.00 0.00 W1 H +ATOM 7668 OH2 TIP3X1727 -28.400 22.221 3.986 1.00 0.00 W1 O +ATOM 7669 H1 TIP3X1727 -28.337 21.932 3.076 1.00 0.00 W1 H +ATOM 7670 H2 TIP3X1727 -27.625 22.766 4.119 1.00 0.00 W1 H +ATOM 7671 OH2 TIP3X1728 -19.380 18.791 1.746 1.00 0.00 W1 O +ATOM 7672 H1 TIP3X1728 -20.087 19.279 1.326 1.00 0.00 W1 H +ATOM 7673 H2 TIP3X1728 -18.655 18.835 1.123 1.00 0.00 W1 H +ATOM 7674 OH2 TIP3X1729 -30.829 19.677 12.834 1.00 0.00 W1 O +ATOM 7675 H1 TIP3X1729 -31.734 19.971 12.945 1.00 0.00 W1 H +ATOM 7676 H2 TIP3X1729 -30.689 19.058 13.551 1.00 0.00 W1 H +ATOM 7677 OH2 TIP3X1730 -29.686 16.515 8.817 1.00 0.00 W1 O +ATOM 7678 H1 TIP3X1730 -29.579 15.813 8.174 1.00 0.00 W1 H +ATOM 7679 H2 TIP3X1730 -29.550 17.320 8.318 1.00 0.00 W1 H +ATOM 7680 OH2 TIP3X1731 -18.164 20.143 13.704 1.00 0.00 W1 O +ATOM 7681 H1 TIP3X1731 -17.853 20.721 14.400 1.00 0.00 W1 H +ATOM 7682 H2 TIP3X1731 -19.108 20.079 13.849 1.00 0.00 W1 H +ATOM 7683 OH2 TIP3X1732 -21.121 20.148 13.651 1.00 0.00 W1 O +ATOM 7684 H1 TIP3X1732 -21.481 20.717 12.970 1.00 0.00 W1 H +ATOM 7685 H2 TIP3X1732 -21.459 19.278 13.440 1.00 0.00 W1 H +ATOM 7686 OH2 TIP3X1733 -22.918 20.618 3.517 1.00 0.00 W1 O +ATOM 7687 H1 TIP3X1733 -22.829 21.197 2.760 1.00 0.00 W1 H +ATOM 7688 H2 TIP3X1733 -23.688 20.083 3.320 1.00 0.00 W1 H +ATOM 7689 OH2 TIP3X1734 -24.615 19.949 1.204 1.00 0.00 W1 O +ATOM 7690 H1 TIP3X1734 -25.053 20.142 0.375 1.00 0.00 W1 H +ATOM 7691 H2 TIP3X1734 -25.022 19.138 1.508 1.00 0.00 W1 H +ATOM 7692 OH2 TIP3X1735 -23.905 17.011 14.993 1.00 0.00 W1 O +ATOM 7693 H1 TIP3X1735 -24.371 16.624 15.734 1.00 0.00 W1 H +ATOM 7694 H2 TIP3X1735 -22.991 17.044 15.276 1.00 0.00 W1 H +ATOM 7695 OH2 TIP3X1736 -18.342 22.356 11.675 1.00 0.00 W1 O +ATOM 7696 H1 TIP3X1736 -18.322 21.706 12.378 1.00 0.00 W1 H +ATOM 7697 H2 TIP3X1736 -19.176 22.204 11.231 1.00 0.00 W1 H +ATOM 7698 OH2 TIP3X1737 -30.267 19.456 0.144 1.00 0.00 W1 O +ATOM 7699 H1 TIP3X1737 -31.023 19.264 0.698 1.00 0.00 W1 H +ATOM 7700 H2 TIP3X1737 -29.733 20.055 0.667 1.00 0.00 W1 H +ATOM 7701 OH2 TIP3X1738 -30.348 30.950 0.631 1.00 0.00 W1 O +ATOM 7702 H1 TIP3X1738 -29.932 30.202 1.060 1.00 0.00 W1 H +ATOM 7703 H2 TIP3X1738 -30.335 31.643 1.291 1.00 0.00 W1 H +ATOM 7704 OH2 TIP3X1739 -21.600 19.110 5.624 1.00 0.00 W1 O +ATOM 7705 H1 TIP3X1739 -21.937 19.460 4.800 1.00 0.00 W1 H +ATOM 7706 H2 TIP3X1739 -20.703 18.842 5.423 1.00 0.00 W1 H +ATOM 7707 OH2 TIP3X1740 -26.145 18.420 7.368 1.00 0.00 W1 O +ATOM 7708 H1 TIP3X1740 -27.087 18.373 7.209 1.00 0.00 W1 H +ATOM 7709 H2 TIP3X1740 -26.006 19.294 7.732 1.00 0.00 W1 H +ATOM 7710 OH2 TIP3X1741 -30.783 19.546 4.162 1.00 0.00 W1 O +ATOM 7711 H1 TIP3X1741 -31.057 19.422 5.070 1.00 0.00 W1 H +ATOM 7712 H2 TIP3X1741 -30.977 20.465 3.976 1.00 0.00 W1 H +ATOM 7713 OH2 TIP3X1742 -26.782 18.873 12.222 1.00 0.00 W1 O +ATOM 7714 H1 TIP3X1742 -26.760 18.067 11.706 1.00 0.00 W1 H +ATOM 7715 H2 TIP3X1742 -27.176 19.521 11.638 1.00 0.00 W1 H +ATOM 7716 OH2 TIP3X1743 -26.199 25.409 8.027 1.00 0.00 W1 O +ATOM 7717 H1 TIP3X1743 -26.271 24.473 7.839 1.00 0.00 W1 H +ATOM 7718 H2 TIP3X1743 -26.195 25.462 8.983 1.00 0.00 W1 H +ATOM 7719 OH2 TIP3X1744 -22.010 22.428 12.589 1.00 0.00 W1 O +ATOM 7720 H1 TIP3X1744 -21.598 23.259 12.826 1.00 0.00 W1 H +ATOM 7721 H2 TIP3X1744 -22.560 22.638 11.835 1.00 0.00 W1 H +ATOM 7722 OH2 TIP3X1745 -16.215 17.794 1.914 1.00 0.00 W1 O +ATOM 7723 H1 TIP3X1745 -15.780 18.021 2.736 1.00 0.00 W1 H +ATOM 7724 H2 TIP3X1745 -16.735 17.019 2.123 1.00 0.00 W1 H +ATOM 7725 OH2 TIP3X1746 -25.060 23.754 1.092 1.00 0.00 W1 O +ATOM 7726 H1 TIP3X1746 -25.349 23.632 1.996 1.00 0.00 W1 H +ATOM 7727 H2 TIP3X1746 -24.371 23.101 0.970 1.00 0.00 W1 H +ATOM 7728 OH2 TIP3X1747 -18.357 22.270 2.160 1.00 0.00 W1 O +ATOM 7729 H1 TIP3X1747 -19.222 22.071 2.519 1.00 0.00 W1 H +ATOM 7730 H2 TIP3X1747 -17.800 22.391 2.929 1.00 0.00 W1 H +ATOM 7731 OH2 TIP3X1748 -23.524 22.524 8.630 1.00 0.00 W1 O +ATOM 7732 H1 TIP3X1748 -23.427 23.321 9.152 1.00 0.00 W1 H +ATOM 7733 H2 TIP3X1748 -22.649 22.135 8.622 1.00 0.00 W1 H +ATOM 7734 OH2 TIP3X1749 -23.778 22.906 5.546 1.00 0.00 W1 O +ATOM 7735 H1 TIP3X1749 -23.157 22.310 5.128 1.00 0.00 W1 H +ATOM 7736 H2 TIP3X1749 -23.753 22.669 6.473 1.00 0.00 W1 H +ATOM 7737 OH2 TIP3X1750 -20.884 24.522 14.482 1.00 0.00 W1 O +ATOM 7738 H1 TIP3X1750 -21.562 24.806 15.095 1.00 0.00 W1 H +ATOM 7739 H2 TIP3X1750 -20.086 24.481 15.009 1.00 0.00 W1 H +ATOM 7740 OH2 TIP3X1751 -28.374 23.937 12.178 1.00 0.00 W1 O +ATOM 7741 H1 TIP3X1751 -27.857 24.343 12.874 1.00 0.00 W1 H +ATOM 7742 H2 TIP3X1751 -28.757 24.674 11.703 1.00 0.00 W1 H +ATOM 7743 OH2 TIP3X1752 -29.468 21.899 13.800 1.00 0.00 W1 O +ATOM 7744 H1 TIP3X1752 -29.672 21.060 13.387 1.00 0.00 W1 H +ATOM 7745 H2 TIP3X1752 -29.591 22.545 13.104 1.00 0.00 W1 H +ATOM 7746 OH2 TIP3X1753 -29.575 22.772 6.623 1.00 0.00 W1 O +ATOM 7747 H1 TIP3X1753 -29.219 23.645 6.453 1.00 0.00 W1 H +ATOM 7748 H2 TIP3X1753 -29.677 22.382 5.755 1.00 0.00 W1 H +ATOM 7749 OH2 TIP3X1754 -18.816 25.037 0.810 1.00 0.00 W1 O +ATOM 7750 H1 TIP3X1754 -18.111 25.536 0.398 1.00 0.00 W1 H +ATOM 7751 H2 TIP3X1754 -18.367 24.407 1.373 1.00 0.00 W1 H +ATOM 7752 OH2 TIP3X1755 -16.220 22.384 4.172 1.00 0.00 W1 O +ATOM 7753 H1 TIP3X1755 -16.507 22.557 5.069 1.00 0.00 W1 H +ATOM 7754 H2 TIP3X1755 -15.707 23.156 3.932 1.00 0.00 W1 H +ATOM 7755 OH2 TIP3X1756 -29.722 21.501 8.894 1.00 0.00 W1 O +ATOM 7756 H1 TIP3X1756 -29.628 22.179 8.226 1.00 0.00 W1 H +ATOM 7757 H2 TIP3X1756 -29.064 21.720 9.553 1.00 0.00 W1 H +ATOM 7758 OH2 TIP3X1757 -26.935 30.008 2.158 1.00 0.00 W1 O +ATOM 7759 H1 TIP3X1757 -27.164 30.368 1.301 1.00 0.00 W1 H +ATOM 7760 H2 TIP3X1757 -27.348 29.145 2.174 1.00 0.00 W1 H +ATOM 7761 OH2 TIP3X1758 -28.160 25.241 0.656 1.00 0.00 W1 O +ATOM 7762 H1 TIP3X1758 -28.976 24.952 0.248 1.00 0.00 W1 H +ATOM 7763 H2 TIP3X1758 -27.628 24.448 0.718 1.00 0.00 W1 H +ATOM 7764 OH2 TIP3X1759 -26.742 26.081 13.731 1.00 0.00 W1 O +ATOM 7765 H1 TIP3X1759 -27.315 26.683 13.257 1.00 0.00 W1 H +ATOM 7766 H2 TIP3X1759 -27.216 25.885 14.539 1.00 0.00 W1 H +ATOM 7767 OH2 TIP3X1760 -23.666 30.824 11.422 1.00 0.00 W1 O +ATOM 7768 H1 TIP3X1760 -23.349 30.530 12.275 1.00 0.00 W1 H +ATOM 7769 H2 TIP3X1760 -23.233 30.246 10.793 1.00 0.00 W1 H +ATOM 7770 OH2 TIP3X1761 -18.960 31.065 5.555 1.00 0.00 W1 O +ATOM 7771 H1 TIP3X1761 -19.373 30.374 5.037 1.00 0.00 W1 H +ATOM 7772 H2 TIP3X1761 -19.156 31.872 5.079 1.00 0.00 W1 H +ATOM 7773 OH2 TIP3X1762 -22.382 27.748 2.807 1.00 0.00 W1 O +ATOM 7774 H1 TIP3X1762 -22.123 28.533 2.325 1.00 0.00 W1 H +ATOM 7775 H2 TIP3X1762 -22.952 28.071 3.505 1.00 0.00 W1 H +ATOM 7776 OH2 TIP3X1763 -22.365 22.902 1.878 1.00 0.00 W1 O +ATOM 7777 H1 TIP3X1763 -21.542 22.975 1.396 1.00 0.00 W1 H +ATOM 7778 H2 TIP3X1763 -22.358 23.646 2.480 1.00 0.00 W1 H +ATOM 7779 OH2 TIP3X1764 -18.964 17.626 11.670 1.00 0.00 W1 O +ATOM 7780 H1 TIP3X1764 -18.159 17.395 11.206 1.00 0.00 W1 H +ATOM 7781 H2 TIP3X1764 -18.673 18.179 12.395 1.00 0.00 W1 H +ATOM 7782 OH2 TIP3X1765 -30.999 24.727 3.076 1.00 0.00 W1 O +ATOM 7783 H1 TIP3X1765 -31.152 24.819 2.136 1.00 0.00 W1 H +ATOM 7784 H2 TIP3X1765 -30.045 24.727 3.165 1.00 0.00 W1 H +ATOM 7785 OH2 TIP3X1766 -20.237 24.315 9.672 1.00 0.00 W1 O +ATOM 7786 H1 TIP3X1766 -19.691 24.977 10.098 1.00 0.00 W1 H +ATOM 7787 H2 TIP3X1766 -19.778 24.115 8.856 1.00 0.00 W1 H +ATOM 7788 OH2 TIP3X1767 -21.414 29.289 0.749 1.00 0.00 W1 O +ATOM 7789 H1 TIP3X1767 -20.590 29.324 1.234 1.00 0.00 W1 H +ATOM 7790 H2 TIP3X1767 -21.211 28.776 -0.033 1.00 0.00 W1 H +ATOM 7791 OH2 TIP3X1768 -21.422 27.076 12.400 1.00 0.00 W1 O +ATOM 7792 H1 TIP3X1768 -22.243 27.323 12.826 1.00 0.00 W1 H +ATOM 7793 H2 TIP3X1768 -21.651 26.981 11.476 1.00 0.00 W1 H +ATOM 7794 OH2 TIP3X1769 -24.797 27.301 4.287 1.00 0.00 W1 O +ATOM 7795 H1 TIP3X1769 -25.504 27.448 3.659 1.00 0.00 W1 H +ATOM 7796 H2 TIP3X1769 -25.134 27.646 5.114 1.00 0.00 W1 H +ATOM 7797 OH2 TIP3X1770 -28.232 28.213 12.998 1.00 0.00 W1 O +ATOM 7798 H1 TIP3X1770 -27.498 28.824 12.933 1.00 0.00 W1 H +ATOM 7799 H2 TIP3X1770 -28.544 28.307 13.898 1.00 0.00 W1 H +ATOM 7800 OH2 TIP3X1771 -28.642 29.918 7.100 1.00 0.00 W1 O +ATOM 7801 H1 TIP3X1771 -29.228 29.177 6.946 1.00 0.00 W1 H +ATOM 7802 H2 TIP3X1771 -28.199 30.051 6.261 1.00 0.00 W1 H +ATOM 7803 OH2 TIP3X1772 -23.051 18.060 8.415 1.00 0.00 W1 O +ATOM 7804 H1 TIP3X1772 -23.413 18.549 7.676 1.00 0.00 W1 H +ATOM 7805 H2 TIP3X1772 -23.782 17.971 9.025 1.00 0.00 W1 H +ATOM 7806 OH2 TIP3X1773 -24.332 16.045 2.343 1.00 0.00 W1 O +ATOM 7807 H1 TIP3X1773 -23.476 15.789 2.688 1.00 0.00 W1 H +ATOM 7808 H2 TIP3X1773 -24.850 15.241 2.368 1.00 0.00 W1 H +ATOM 7809 OH2 TIP3X1774 -21.580 15.888 3.386 1.00 0.00 W1 O +ATOM 7810 H1 TIP3X1774 -21.124 15.152 3.795 1.00 0.00 W1 H +ATOM 7811 H2 TIP3X1774 -21.173 15.975 2.524 1.00 0.00 W1 H +ATOM 7812 OH2 TIP3X1775 -26.941 30.467 14.841 1.00 0.00 W1 O +ATOM 7813 H1 TIP3X1775 -27.191 31.224 14.311 1.00 0.00 W1 H +ATOM 7814 H2 TIP3X1775 -26.030 30.298 14.602 1.00 0.00 W1 H +ATOM 7815 OH2 TIP3X1776 -21.934 29.161 5.141 1.00 0.00 W1 O +ATOM 7816 H1 TIP3X1776 -21.273 28.519 5.401 1.00 0.00 W1 H +ATOM 7817 H2 TIP3X1776 -21.947 29.796 5.858 1.00 0.00 W1 H +ATOM 7818 OH2 TIP3X1777 -24.195 30.064 14.051 1.00 0.00 W1 O +ATOM 7819 H1 TIP3X1777 -23.977 29.171 14.321 1.00 0.00 W1 H +ATOM 7820 H2 TIP3X1777 -23.587 30.618 14.540 1.00 0.00 W1 H +ATOM 7821 OH2 TIP3X1778 -25.248 18.182 4.095 1.00 0.00 W1 O +ATOM 7822 H1 TIP3X1778 -24.591 17.523 3.873 1.00 0.00 W1 H +ATOM 7823 H2 TIP3X1778 -25.206 18.251 5.049 1.00 0.00 W1 H +ATOM 7824 OH2 TIP3X1779 -30.535 16.520 13.551 1.00 0.00 W1 O +ATOM 7825 H1 TIP3X1779 -29.787 16.325 12.987 1.00 0.00 W1 H +ATOM 7826 H2 TIP3X1779 -30.327 16.095 14.383 1.00 0.00 W1 H +ATOM 7827 OH2 TIP3X1780 -19.415 29.247 3.153 1.00 0.00 W1 O +ATOM 7828 H1 TIP3X1780 -19.271 28.307 3.256 1.00 0.00 W1 H +ATOM 7829 H2 TIP3X1780 -18.592 29.580 2.795 1.00 0.00 W1 H +ATOM 7830 OH2 TIP3X1781 -17.748 16.014 14.380 1.00 0.00 W1 O +ATOM 7831 H1 TIP3X1781 -18.361 16.088 13.649 1.00 0.00 W1 H +ATOM 7832 H2 TIP3X1781 -16.978 16.509 14.098 1.00 0.00 W1 H +ATOM 7833 OH2 TIP3X1782 -26.954 30.227 4.866 1.00 0.00 W1 O +ATOM 7834 H1 TIP3X1782 -26.961 30.272 3.910 1.00 0.00 W1 H +ATOM 7835 H2 TIP3X1782 -26.147 30.673 5.122 1.00 0.00 W1 H +ATOM 7836 OH2 TIP3X1783 -16.045 29.165 12.816 1.00 0.00 W1 O +ATOM 7837 H1 TIP3X1783 -16.768 29.716 13.117 1.00 0.00 W1 H +ATOM 7838 H2 TIP3X1783 -15.257 29.664 13.030 1.00 0.00 W1 H +ATOM 7839 OH2 TIP3X1784 -28.419 18.487 4.496 1.00 0.00 W1 O +ATOM 7840 H1 TIP3X1784 -29.063 18.876 3.903 1.00 0.00 W1 H +ATOM 7841 H2 TIP3X1784 -27.617 18.984 4.338 1.00 0.00 W1 H +ATOM 7842 OH2 TIP3X1785 -26.991 27.086 2.227 1.00 0.00 W1 O +ATOM 7843 H1 TIP3X1785 -27.030 26.458 1.506 1.00 0.00 W1 H +ATOM 7844 H2 TIP3X1785 -27.710 26.833 2.805 1.00 0.00 W1 H +ATOM 7845 OH2 TIP3X1786 -29.096 26.614 19.866 1.00 0.00 W1 O +ATOM 7846 H1 TIP3X1786 -28.914 26.538 20.803 1.00 0.00 W1 H +ATOM 7847 H2 TIP3X1786 -29.120 27.557 19.702 1.00 0.00 W1 H +ATOM 7848 OH2 TIP3X1787 -17.994 24.105 23.605 1.00 0.00 W1 O +ATOM 7849 H1 TIP3X1787 -17.759 24.370 22.715 1.00 0.00 W1 H +ATOM 7850 H2 TIP3X1787 -17.165 23.842 24.003 1.00 0.00 W1 H +ATOM 7851 OH2 TIP3X1788 -26.010 23.829 19.583 1.00 0.00 W1 O +ATOM 7852 H1 TIP3X1788 -25.979 24.738 19.880 1.00 0.00 W1 H +ATOM 7853 H2 TIP3X1788 -25.502 23.346 20.235 1.00 0.00 W1 H +ATOM 7854 OH2 TIP3X1789 -18.206 27.988 21.727 1.00 0.00 W1 O +ATOM 7855 H1 TIP3X1789 -18.481 28.478 22.502 1.00 0.00 W1 H +ATOM 7856 H2 TIP3X1789 -18.732 27.188 21.750 1.00 0.00 W1 H +ATOM 7857 OH2 TIP3X1790 -19.690 26.431 18.770 1.00 0.00 W1 O +ATOM 7858 H1 TIP3X1790 -19.528 26.203 17.855 1.00 0.00 W1 H +ATOM 7859 H2 TIP3X1790 -20.619 26.660 18.799 1.00 0.00 W1 H +ATOM 7860 OH2 TIP3X1791 -15.842 26.963 23.554 1.00 0.00 W1 O +ATOM 7861 H1 TIP3X1791 -16.394 27.046 22.777 1.00 0.00 W1 H +ATOM 7862 H2 TIP3X1791 -16.453 26.747 24.259 1.00 0.00 W1 H +ATOM 7863 OH2 TIP3X1792 -29.206 28.227 26.005 1.00 0.00 W1 O +ATOM 7864 H1 TIP3X1792 -28.800 28.431 26.848 1.00 0.00 W1 H +ATOM 7865 H2 TIP3X1792 -29.777 27.482 26.188 1.00 0.00 W1 H +ATOM 7866 OH2 TIP3X1793 -21.831 29.852 25.231 1.00 0.00 W1 O +ATOM 7867 H1 TIP3X1793 -21.530 28.952 25.353 1.00 0.00 W1 H +ATOM 7868 H2 TIP3X1793 -21.205 30.233 24.614 1.00 0.00 W1 H +ATOM 7869 OH2 TIP3X1794 -18.398 29.809 25.111 1.00 0.00 W1 O +ATOM 7870 H1 TIP3X1794 -18.834 30.632 24.892 1.00 0.00 W1 H +ATOM 7871 H2 TIP3X1794 -17.469 30.035 25.161 1.00 0.00 W1 H +ATOM 7872 OH2 TIP3X1795 -25.950 29.384 24.241 1.00 0.00 W1 O +ATOM 7873 H1 TIP3X1795 -25.595 30.233 23.977 1.00 0.00 W1 H +ATOM 7874 H2 TIP3X1795 -26.885 29.443 24.045 1.00 0.00 W1 H +ATOM 7875 OH2 TIP3X1796 -21.109 21.276 23.142 1.00 0.00 W1 O +ATOM 7876 H1 TIP3X1796 -21.186 20.466 22.638 1.00 0.00 W1 H +ATOM 7877 H2 TIP3X1796 -20.166 21.415 23.230 1.00 0.00 W1 H +ATOM 7878 OH2 TIP3X1797 -25.086 17.374 25.504 1.00 0.00 W1 O +ATOM 7879 H1 TIP3X1797 -24.828 16.636 26.057 1.00 0.00 W1 H +ATOM 7880 H2 TIP3X1797 -25.762 17.017 24.929 1.00 0.00 W1 H +ATOM 7881 OH2 TIP3X1798 -16.842 18.378 21.927 1.00 0.00 W1 O +ATOM 7882 H1 TIP3X1798 -17.150 18.716 22.768 1.00 0.00 W1 H +ATOM 7883 H2 TIP3X1798 -16.774 17.433 22.059 1.00 0.00 W1 H +ATOM 7884 OH2 TIP3X1799 -18.244 19.573 23.881 1.00 0.00 W1 O +ATOM 7885 H1 TIP3X1799 -17.669 19.345 24.612 1.00 0.00 W1 H +ATOM 7886 H2 TIP3X1799 -19.119 19.319 24.176 1.00 0.00 W1 H +ATOM 7887 OH2 TIP3X1800 -25.198 20.698 25.252 1.00 0.00 W1 O +ATOM 7888 H1 TIP3X1800 -24.695 19.996 25.664 1.00 0.00 W1 H +ATOM 7889 H2 TIP3X1800 -24.541 21.340 24.986 1.00 0.00 W1 H +ATOM 7890 OH2 TIP3X1801 -17.721 21.746 22.150 1.00 0.00 W1 O +ATOM 7891 H1 TIP3X1801 -17.680 20.847 22.474 1.00 0.00 W1 H +ATOM 7892 H2 TIP3X1801 -17.839 22.279 22.936 1.00 0.00 W1 H +ATOM 7893 OH2 TIP3X1802 -19.037 18.390 20.018 1.00 0.00 W1 O +ATOM 7894 H1 TIP3X1802 -18.212 18.574 20.467 1.00 0.00 W1 H +ATOM 7895 H2 TIP3X1802 -18.960 18.845 19.179 1.00 0.00 W1 H +ATOM 7896 OH2 TIP3X1803 -22.854 24.361 26.090 1.00 0.00 W1 O +ATOM 7897 H1 TIP3X1803 -21.977 24.383 25.707 1.00 0.00 W1 H +ATOM 7898 H2 TIP3X1803 -23.119 25.280 26.136 1.00 0.00 W1 H +ATOM 7899 OH2 TIP3X1804 -23.704 26.909 25.900 1.00 0.00 W1 O +ATOM 7900 H1 TIP3X1804 -23.728 27.136 24.970 1.00 0.00 W1 H +ATOM 7901 H2 TIP3X1804 -24.624 26.855 26.158 1.00 0.00 W1 H +ATOM 7902 OH2 TIP3X1805 -28.841 18.791 22.738 1.00 0.00 W1 O +ATOM 7903 H1 TIP3X1805 -29.166 19.670 22.929 1.00 0.00 W1 H +ATOM 7904 H2 TIP3X1805 -28.964 18.688 21.794 1.00 0.00 W1 H +ATOM 7905 OH2 TIP3X1806 -26.685 22.348 22.750 1.00 0.00 W1 O +ATOM 7906 H1 TIP3X1806 -27.368 21.898 22.253 1.00 0.00 W1 H +ATOM 7907 H2 TIP3X1806 -26.199 21.645 23.182 1.00 0.00 W1 H +ATOM 7908 OH2 TIP3X1807 -20.629 27.273 25.147 1.00 0.00 W1 O +ATOM 7909 H1 TIP3X1807 -20.871 26.686 24.430 1.00 0.00 W1 H +ATOM 7910 H2 TIP3X1807 -19.679 27.183 25.219 1.00 0.00 W1 H +ATOM 7911 OH2 TIP3X1808 -16.331 30.907 21.927 1.00 0.00 W1 O +ATOM 7912 H1 TIP3X1808 -16.336 30.439 22.762 1.00 0.00 W1 H +ATOM 7913 H2 TIP3X1808 -17.212 30.778 21.574 1.00 0.00 W1 H +ATOM 7914 OH2 TIP3X1809 -24.459 27.244 22.949 1.00 0.00 W1 O +ATOM 7915 H1 TIP3X1809 -25.031 26.524 23.218 1.00 0.00 W1 H +ATOM 7916 H2 TIP3X1809 -24.920 28.034 23.232 1.00 0.00 W1 H +ATOM 7917 OH2 TIP3X1810 -22.238 17.695 27.520 1.00 0.00 W1 O +ATOM 7918 H1 TIP3X1810 -22.980 18.175 27.887 1.00 0.00 W1 H +ATOM 7919 H2 TIP3X1810 -22.618 16.883 27.185 1.00 0.00 W1 H +ATOM 7920 OH2 TIP3X1811 -26.886 18.400 17.321 1.00 0.00 W1 O +ATOM 7921 H1 TIP3X1811 -26.984 17.738 18.006 1.00 0.00 W1 H +ATOM 7922 H2 TIP3X1811 -27.069 17.932 16.507 1.00 0.00 W1 H +ATOM 7923 OH2 TIP3X1812 -15.992 19.322 25.511 1.00 0.00 W1 O +ATOM 7924 H1 TIP3X1812 -15.473 19.991 25.063 1.00 0.00 W1 H +ATOM 7925 H2 TIP3X1812 -15.550 19.198 26.351 1.00 0.00 W1 H +ATOM 7926 OH2 TIP3X1813 -29.934 15.675 19.671 1.00 0.00 W1 O +ATOM 7927 H1 TIP3X1813 -29.209 16.296 19.740 1.00 0.00 W1 H +ATOM 7928 H2 TIP3X1813 -30.306 15.642 20.552 1.00 0.00 W1 H +ATOM 7929 OH2 TIP3X1814 -24.668 21.910 29.657 1.00 0.00 W1 O +ATOM 7930 H1 TIP3X1814 -23.804 22.309 29.556 1.00 0.00 W1 H +ATOM 7931 H2 TIP3X1814 -24.516 20.973 29.534 1.00 0.00 W1 H +ATOM 7932 OH2 TIP3X1815 -21.502 26.820 22.397 1.00 0.00 W1 O +ATOM 7933 H1 TIP3X1815 -21.408 25.957 21.993 1.00 0.00 W1 H +ATOM 7934 H2 TIP3X1815 -22.435 27.020 22.321 1.00 0.00 W1 H +ATOM 7935 OH2 TIP3X1816 -22.890 25.104 19.928 1.00 0.00 W1 O +ATOM 7936 H1 TIP3X1816 -23.455 24.490 20.397 1.00 0.00 W1 H +ATOM 7937 H2 TIP3X1816 -23.364 25.935 19.956 1.00 0.00 W1 H +ATOM 7938 OH2 TIP3X1817 -30.352 25.617 26.385 1.00 0.00 W1 O +ATOM 7939 H1 TIP3X1817 -30.887 25.016 25.867 1.00 0.00 W1 H +ATOM 7940 H2 TIP3X1817 -30.823 25.704 27.214 1.00 0.00 W1 H +ATOM 7941 OH2 TIP3X1818 -19.056 24.638 20.752 1.00 0.00 W1 O +ATOM 7942 H1 TIP3X1818 -19.112 23.723 20.476 1.00 0.00 W1 H +ATOM 7943 H2 TIP3X1818 -19.229 25.141 19.956 1.00 0.00 W1 H +ATOM 7944 OH2 TIP3X1819 -18.759 25.152 27.777 1.00 0.00 W1 O +ATOM 7945 H1 TIP3X1819 -19.662 25.236 28.084 1.00 0.00 W1 H +ATOM 7946 H2 TIP3X1819 -18.591 24.210 27.780 1.00 0.00 W1 H +ATOM 7947 OH2 TIP3X1820 -16.393 23.112 25.582 1.00 0.00 W1 O +ATOM 7948 H1 TIP3X1820 -15.730 22.431 25.463 1.00 0.00 W1 H +ATOM 7949 H2 TIP3X1820 -17.109 22.672 26.041 1.00 0.00 W1 H +ATOM 7950 OH2 TIP3X1821 -27.248 22.799 30.727 1.00 0.00 W1 O +ATOM 7951 H1 TIP3X1821 -27.777 22.565 29.964 1.00 0.00 W1 H +ATOM 7952 H2 TIP3X1821 -26.353 22.846 30.392 1.00 0.00 W1 H +ATOM 7953 OH2 TIP3X1822 -26.338 26.005 26.288 1.00 0.00 W1 O +ATOM 7954 H1 TIP3X1822 -26.383 25.450 27.067 1.00 0.00 W1 H +ATOM 7955 H2 TIP3X1822 -26.971 26.703 26.454 1.00 0.00 W1 H +ATOM 7956 OH2 TIP3X1823 -17.666 27.135 26.038 1.00 0.00 W1 O +ATOM 7957 H1 TIP3X1823 -17.243 27.903 26.422 1.00 0.00 W1 H +ATOM 7958 H2 TIP3X1823 -17.970 26.627 26.790 1.00 0.00 W1 H +ATOM 7959 OH2 TIP3X1824 -19.579 29.110 27.863 1.00 0.00 W1 O +ATOM 7960 H1 TIP3X1824 -20.286 28.481 27.720 1.00 0.00 W1 H +ATOM 7961 H2 TIP3X1824 -19.250 29.305 26.985 1.00 0.00 W1 H +ATOM 7962 OH2 TIP3X1825 -19.328 27.646 30.259 1.00 0.00 W1 O +ATOM 7963 H1 TIP3X1825 -19.961 27.040 29.875 1.00 0.00 W1 H +ATOM 7964 H2 TIP3X1825 -19.214 28.327 29.595 1.00 0.00 W1 H +ATOM 7965 OH2 TIP3X1826 -15.717 29.555 24.326 1.00 0.00 W1 O +ATOM 7966 H1 TIP3X1826 -15.040 29.396 24.982 1.00 0.00 W1 H +ATOM 7967 H2 TIP3X1826 -15.951 28.683 24.007 1.00 0.00 W1 H +ATOM 7968 OH2 TIP3X1827 -25.161 16.026 22.718 1.00 0.00 W1 O +ATOM 7969 H1 TIP3X1827 -25.453 16.935 22.657 1.00 0.00 W1 H +ATOM 7970 H2 TIP3X1827 -24.329 16.008 22.245 1.00 0.00 W1 H +ATOM 7971 OH2 TIP3X1828 -23.037 25.972 16.373 1.00 0.00 W1 O +ATOM 7972 H1 TIP3X1828 -23.732 25.350 16.587 1.00 0.00 W1 H +ATOM 7973 H2 TIP3X1828 -23.055 26.608 17.088 1.00 0.00 W1 H +ATOM 7974 OH2 TIP3X1829 -15.657 24.736 15.809 1.00 0.00 W1 O +ATOM 7975 H1 TIP3X1829 -15.920 23.986 15.275 1.00 0.00 W1 H +ATOM 7976 H2 TIP3X1829 -15.911 25.500 15.292 1.00 0.00 W1 H +ATOM 7977 OH2 TIP3X1830 -29.709 28.432 15.526 1.00 0.00 W1 O +ATOM 7978 H1 TIP3X1830 -29.263 27.883 16.172 1.00 0.00 W1 H +ATOM 7979 H2 TIP3X1830 -30.605 28.098 15.505 1.00 0.00 W1 H +ATOM 7980 OH2 TIP3X1831 -17.615 30.561 16.785 1.00 0.00 W1 O +ATOM 7981 H1 TIP3X1831 -16.730 30.233 16.626 1.00 0.00 W1 H +ATOM 7982 H2 TIP3X1831 -17.845 31.029 15.982 1.00 0.00 W1 H +ATOM 7983 OH2 TIP3X1832 -16.223 26.223 28.862 1.00 0.00 W1 O +ATOM 7984 H1 TIP3X1832 -16.333 27.172 28.921 1.00 0.00 W1 H +ATOM 7985 H2 TIP3X1832 -17.116 25.878 28.852 1.00 0.00 W1 H +ATOM 7986 OH2 TIP3X1833 -29.537 29.049 18.481 1.00 0.00 W1 O +ATOM 7987 H1 TIP3X1833 -29.605 29.885 18.941 1.00 0.00 W1 H +ATOM 7988 H2 TIP3X1833 -30.432 28.711 18.464 1.00 0.00 W1 H +ATOM 7989 OH2 TIP3X1834 -16.957 27.542 16.125 1.00 0.00 W1 O +ATOM 7990 H1 TIP3X1834 -16.925 27.462 17.079 1.00 0.00 W1 H +ATOM 7991 H2 TIP3X1834 -17.790 27.979 15.948 1.00 0.00 W1 H +ATOM 7992 OH2 TIP3X1835 -20.586 15.837 29.009 1.00 0.00 W1 O +ATOM 7993 H1 TIP3X1835 -20.893 16.585 28.497 1.00 0.00 W1 H +ATOM 7994 H2 TIP3X1835 -20.532 15.120 28.377 1.00 0.00 W1 H +ATOM 7995 OH2 TIP3X1836 -26.372 29.753 27.038 1.00 0.00 W1 O +ATOM 7996 H1 TIP3X1836 -25.524 29.991 27.412 1.00 0.00 W1 H +ATOM 7997 H2 TIP3X1836 -26.161 29.373 26.185 1.00 0.00 W1 H +ATOM 7998 OH2 TIP3X1837 -27.906 17.772 30.389 1.00 0.00 W1 O +ATOM 7999 H1 TIP3X1837 -28.783 17.861 30.763 1.00 0.00 W1 H +ATOM 8000 H2 TIP3X1837 -27.843 18.484 29.752 1.00 0.00 W1 H +ATOM 8001 OH2 TIP3X1838 -21.709 19.719 16.119 1.00 0.00 W1 O +ATOM 8002 H1 TIP3X1838 -21.875 20.016 15.224 1.00 0.00 W1 H +ATOM 8003 H2 TIP3X1838 -22.580 19.595 16.496 1.00 0.00 W1 H +ATOM 8004 OH2 TIP3X1839 -16.311 27.479 19.167 1.00 0.00 W1 O +ATOM 8005 H1 TIP3X1839 -15.738 26.742 19.380 1.00 0.00 W1 H +ATOM 8006 H2 TIP3X1839 -16.642 27.778 20.014 1.00 0.00 W1 H +ATOM 8007 OH2 TIP3X1840 -21.050 16.515 16.096 1.00 0.00 W1 O +ATOM 8008 H1 TIP3X1840 -20.318 17.131 16.121 1.00 0.00 W1 H +ATOM 8009 H2 TIP3X1840 -20.809 15.883 15.420 1.00 0.00 W1 H +ATOM 8010 OH2 TIP3X1841 -16.518 16.609 26.361 1.00 0.00 W1 O +ATOM 8011 H1 TIP3X1841 -16.026 15.979 26.889 1.00 0.00 W1 H +ATOM 8012 H2 TIP3X1841 -15.918 16.851 25.656 1.00 0.00 W1 H +ATOM 8013 OH2 TIP3X1842 -29.011 25.829 22.439 1.00 0.00 W1 O +ATOM 8014 H1 TIP3X1842 -29.679 26.153 23.044 1.00 0.00 W1 H +ATOM 8015 H2 TIP3X1842 -28.219 25.760 22.971 1.00 0.00 W1 H +ATOM 8016 OH2 TIP3X1843 -24.014 27.248 29.549 1.00 0.00 W1 O +ATOM 8017 H1 TIP3X1843 -23.790 26.870 30.400 1.00 0.00 W1 H +ATOM 8018 H2 TIP3X1843 -24.621 26.619 29.159 1.00 0.00 W1 H +ATOM 8019 OH2 TIP3X1844 -20.535 18.553 24.962 1.00 0.00 W1 O +ATOM 8020 H1 TIP3X1844 -20.476 18.371 25.900 1.00 0.00 W1 H +ATOM 8021 H2 TIP3X1844 -21.473 18.640 24.794 1.00 0.00 W1 H +ATOM 8022 OH2 TIP3X1845 -24.343 19.210 29.141 1.00 0.00 W1 O +ATOM 8023 H1 TIP3X1845 -25.210 19.140 28.741 1.00 0.00 W1 H +ATOM 8024 H2 TIP3X1845 -24.398 18.669 29.929 1.00 0.00 W1 H +ATOM 8025 OH2 TIP3X1846 -16.857 21.930 30.894 1.00 0.00 W1 O +ATOM 8026 H1 TIP3X1846 -16.063 21.397 30.878 1.00 0.00 W1 H +ATOM 8027 H2 TIP3X1846 -17.151 21.895 31.804 1.00 0.00 W1 H +ATOM 8028 OH2 TIP3X1847 -28.672 15.797 26.813 1.00 0.00 W1 O +ATOM 8029 H1 TIP3X1847 -28.898 16.250 26.000 1.00 0.00 W1 H +ATOM 8030 H2 TIP3X1847 -27.842 15.360 26.621 1.00 0.00 W1 H +ATOM 8031 OH2 TIP3X1848 -22.577 16.255 21.894 1.00 0.00 W1 O +ATOM 8032 H1 TIP3X1848 -22.095 16.769 21.247 1.00 0.00 W1 H +ATOM 8033 H2 TIP3X1848 -22.233 16.548 22.738 1.00 0.00 W1 H +ATOM 8034 OH2 TIP3X1849 -28.107 20.846 17.047 1.00 0.00 W1 O +ATOM 8035 H1 TIP3X1849 -27.685 21.492 16.481 1.00 0.00 W1 H +ATOM 8036 H2 TIP3X1849 -27.395 20.271 17.328 1.00 0.00 W1 H +ATOM 8037 OH2 TIP3X1850 -27.583 21.503 26.358 1.00 0.00 W1 O +ATOM 8038 H1 TIP3X1850 -27.667 22.294 26.890 1.00 0.00 W1 H +ATOM 8039 H2 TIP3X1850 -26.668 21.499 26.078 1.00 0.00 W1 H +ATOM 8040 OH2 TIP3X1851 -28.400 22.221 19.544 1.00 0.00 W1 O +ATOM 8041 H1 TIP3X1851 -28.337 21.932 18.633 1.00 0.00 W1 H +ATOM 8042 H2 TIP3X1851 -27.625 22.766 19.677 1.00 0.00 W1 H +ATOM 8043 OH2 TIP3X1852 -19.380 18.791 17.304 1.00 0.00 W1 O +ATOM 8044 H1 TIP3X1852 -20.087 19.279 16.884 1.00 0.00 W1 H +ATOM 8045 H2 TIP3X1852 -18.655 18.835 16.680 1.00 0.00 W1 H +ATOM 8046 OH2 TIP3X1853 -30.829 19.677 28.392 1.00 0.00 W1 O +ATOM 8047 H1 TIP3X1853 -31.734 19.971 28.503 1.00 0.00 W1 H +ATOM 8048 H2 TIP3X1853 -30.689 19.058 29.108 1.00 0.00 W1 H +ATOM 8049 OH2 TIP3X1854 -29.686 16.515 24.374 1.00 0.00 W1 O +ATOM 8050 H1 TIP3X1854 -29.579 15.813 23.732 1.00 0.00 W1 H +ATOM 8051 H2 TIP3X1854 -29.550 17.320 23.875 1.00 0.00 W1 H +ATOM 8052 OH2 TIP3X1855 -18.164 20.143 29.262 1.00 0.00 W1 O +ATOM 8053 H1 TIP3X1855 -17.853 20.721 29.958 1.00 0.00 W1 H +ATOM 8054 H2 TIP3X1855 -19.108 20.079 29.407 1.00 0.00 W1 H +ATOM 8055 OH2 TIP3X1856 -21.121 20.148 29.209 1.00 0.00 W1 O +ATOM 8056 H1 TIP3X1856 -21.481 20.717 28.528 1.00 0.00 W1 H +ATOM 8057 H2 TIP3X1856 -21.459 19.278 28.998 1.00 0.00 W1 H +ATOM 8058 OH2 TIP3X1857 -22.918 20.618 19.074 1.00 0.00 W1 O +ATOM 8059 H1 TIP3X1857 -22.829 21.197 18.318 1.00 0.00 W1 H +ATOM 8060 H2 TIP3X1857 -23.688 20.083 18.878 1.00 0.00 W1 H +ATOM 8061 OH2 TIP3X1858 -24.615 19.949 16.762 1.00 0.00 W1 O +ATOM 8062 H1 TIP3X1858 -25.053 20.142 15.932 1.00 0.00 W1 H +ATOM 8063 H2 TIP3X1858 -25.022 19.138 17.065 1.00 0.00 W1 H +ATOM 8064 OH2 TIP3X1859 -23.905 17.011 30.551 1.00 0.00 W1 O +ATOM 8065 H1 TIP3X1859 -24.371 16.624 31.291 1.00 0.00 W1 H +ATOM 8066 H2 TIP3X1859 -22.991 17.044 30.833 1.00 0.00 W1 H +ATOM 8067 OH2 TIP3X1860 -18.342 22.356 27.232 1.00 0.00 W1 O +ATOM 8068 H1 TIP3X1860 -18.322 21.706 27.935 1.00 0.00 W1 H +ATOM 8069 H2 TIP3X1860 -19.176 22.204 26.788 1.00 0.00 W1 H +ATOM 8070 OH2 TIP3X1861 -30.267 19.456 15.702 1.00 0.00 W1 O +ATOM 8071 H1 TIP3X1861 -31.023 19.264 16.256 1.00 0.00 W1 H +ATOM 8072 H2 TIP3X1861 -29.733 20.055 16.224 1.00 0.00 W1 H +ATOM 8073 OH2 TIP3X1862 -30.348 30.950 16.189 1.00 0.00 W1 O +ATOM 8074 H1 TIP3X1862 -29.932 30.202 16.618 1.00 0.00 W1 H +ATOM 8075 H2 TIP3X1862 -30.335 31.643 16.848 1.00 0.00 W1 H +ATOM 8076 OH2 TIP3X1863 -21.600 19.110 21.182 1.00 0.00 W1 O +ATOM 8077 H1 TIP3X1863 -21.937 19.460 20.357 1.00 0.00 W1 H +ATOM 8078 H2 TIP3X1863 -20.703 18.842 20.980 1.00 0.00 W1 H +ATOM 8079 OH2 TIP3X1864 -26.145 18.420 22.926 1.00 0.00 W1 O +ATOM 8080 H1 TIP3X1864 -27.087 18.373 22.767 1.00 0.00 W1 H +ATOM 8081 H2 TIP3X1864 -26.006 19.294 23.289 1.00 0.00 W1 H +ATOM 8082 OH2 TIP3X1865 -30.783 19.546 19.719 1.00 0.00 W1 O +ATOM 8083 H1 TIP3X1865 -31.057 19.422 20.628 1.00 0.00 W1 H +ATOM 8084 H2 TIP3X1865 -30.977 20.465 19.533 1.00 0.00 W1 H +ATOM 8085 OH2 TIP3X1866 -26.782 18.873 27.779 1.00 0.00 W1 O +ATOM 8086 H1 TIP3X1866 -26.760 18.067 27.264 1.00 0.00 W1 H +ATOM 8087 H2 TIP3X1866 -27.176 19.521 27.195 1.00 0.00 W1 H +ATOM 8088 OH2 TIP3X1867 -26.199 25.409 23.584 1.00 0.00 W1 O +ATOM 8089 H1 TIP3X1867 -26.271 24.473 23.397 1.00 0.00 W1 H +ATOM 8090 H2 TIP3X1867 -26.195 25.462 24.540 1.00 0.00 W1 H +ATOM 8091 OH2 TIP3X1868 -22.010 22.428 28.147 1.00 0.00 W1 O +ATOM 8092 H1 TIP3X1868 -21.598 23.259 28.383 1.00 0.00 W1 H +ATOM 8093 H2 TIP3X1868 -22.560 22.638 27.392 1.00 0.00 W1 H +ATOM 8094 OH2 TIP3X1869 -16.215 17.794 17.471 1.00 0.00 W1 O +ATOM 8095 H1 TIP3X1869 -15.780 18.021 18.293 1.00 0.00 W1 H +ATOM 8096 H2 TIP3X1869 -16.735 17.019 17.681 1.00 0.00 W1 H +ATOM 8097 OH2 TIP3X1870 -25.060 23.754 16.649 1.00 0.00 W1 O +ATOM 8098 H1 TIP3X1870 -25.349 23.632 17.554 1.00 0.00 W1 H +ATOM 8099 H2 TIP3X1870 -24.371 23.101 16.528 1.00 0.00 W1 H +ATOM 8100 OH2 TIP3X1871 -18.357 22.270 17.717 1.00 0.00 W1 O +ATOM 8101 H1 TIP3X1871 -19.222 22.071 18.076 1.00 0.00 W1 H +ATOM 8102 H2 TIP3X1871 -17.800 22.391 18.486 1.00 0.00 W1 H +ATOM 8103 OH2 TIP3X1872 -23.524 22.524 24.188 1.00 0.00 W1 O +ATOM 8104 H1 TIP3X1872 -23.427 23.321 24.709 1.00 0.00 W1 H +ATOM 8105 H2 TIP3X1872 -22.649 22.135 24.179 1.00 0.00 W1 H +ATOM 8106 OH2 TIP3X1873 -23.778 22.906 21.104 1.00 0.00 W1 O +ATOM 8107 H1 TIP3X1873 -23.157 22.310 20.686 1.00 0.00 W1 H +ATOM 8108 H2 TIP3X1873 -23.753 22.669 22.030 1.00 0.00 W1 H +ATOM 8109 OH2 TIP3X1874 -20.884 24.522 30.039 1.00 0.00 W1 O +ATOM 8110 H1 TIP3X1874 -21.562 24.806 30.653 1.00 0.00 W1 H +ATOM 8111 H2 TIP3X1874 -20.086 24.481 30.566 1.00 0.00 W1 H +ATOM 8112 OH2 TIP3X1875 -28.374 23.937 27.736 1.00 0.00 W1 O +ATOM 8113 H1 TIP3X1875 -27.857 24.343 28.432 1.00 0.00 W1 H +ATOM 8114 H2 TIP3X1875 -28.757 24.674 27.260 1.00 0.00 W1 H +ATOM 8115 OH2 TIP3X1876 -29.468 21.899 29.357 1.00 0.00 W1 O +ATOM 8116 H1 TIP3X1876 -29.672 21.060 28.945 1.00 0.00 W1 H +ATOM 8117 H2 TIP3X1876 -29.591 22.545 28.662 1.00 0.00 W1 H +ATOM 8118 OH2 TIP3X1877 -29.575 22.772 22.181 1.00 0.00 W1 O +ATOM 8119 H1 TIP3X1877 -29.219 23.645 22.011 1.00 0.00 W1 H +ATOM 8120 H2 TIP3X1877 -29.677 22.382 21.313 1.00 0.00 W1 H +ATOM 8121 OH2 TIP3X1878 -18.816 25.037 16.367 1.00 0.00 W1 O +ATOM 8122 H1 TIP3X1878 -18.111 25.536 15.955 1.00 0.00 W1 H +ATOM 8123 H2 TIP3X1878 -18.367 24.407 16.931 1.00 0.00 W1 H +ATOM 8124 OH2 TIP3X1879 -16.220 22.384 19.730 1.00 0.00 W1 O +ATOM 8125 H1 TIP3X1879 -16.507 22.557 20.626 1.00 0.00 W1 H +ATOM 8126 H2 TIP3X1879 -15.707 23.156 19.489 1.00 0.00 W1 H +ATOM 8127 OH2 TIP3X1880 -29.722 21.501 24.452 1.00 0.00 W1 O +ATOM 8128 H1 TIP3X1880 -29.628 22.179 23.783 1.00 0.00 W1 H +ATOM 8129 H2 TIP3X1880 -29.064 21.720 25.111 1.00 0.00 W1 H +ATOM 8130 OH2 TIP3X1881 -26.935 30.008 17.715 1.00 0.00 W1 O +ATOM 8131 H1 TIP3X1881 -27.164 30.368 16.859 1.00 0.00 W1 H +ATOM 8132 H2 TIP3X1881 -27.348 29.145 17.731 1.00 0.00 W1 H +ATOM 8133 OH2 TIP3X1882 -28.160 25.241 16.214 1.00 0.00 W1 O +ATOM 8134 H1 TIP3X1882 -28.976 24.952 15.805 1.00 0.00 W1 H +ATOM 8135 H2 TIP3X1882 -27.628 24.448 16.275 1.00 0.00 W1 H +ATOM 8136 OH2 TIP3X1883 -26.742 26.081 29.288 1.00 0.00 W1 O +ATOM 8137 H1 TIP3X1883 -27.315 26.683 28.814 1.00 0.00 W1 H +ATOM 8138 H2 TIP3X1883 -27.216 25.885 30.096 1.00 0.00 W1 H +ATOM 8139 OH2 TIP3X1884 -23.666 30.824 26.979 1.00 0.00 W1 O +ATOM 8140 H1 TIP3X1884 -23.349 30.530 27.833 1.00 0.00 W1 H +ATOM 8141 H2 TIP3X1884 -23.233 30.246 26.350 1.00 0.00 W1 H +ATOM 8142 OH2 TIP3X1885 -18.960 31.065 21.113 1.00 0.00 W1 O +ATOM 8143 H1 TIP3X1885 -19.373 30.374 20.594 1.00 0.00 W1 H +ATOM 8144 H2 TIP3X1885 -19.156 31.872 20.636 1.00 0.00 W1 H +ATOM 8145 OH2 TIP3X1886 -22.382 27.748 18.365 1.00 0.00 W1 O +ATOM 8146 H1 TIP3X1886 -22.123 28.533 17.883 1.00 0.00 W1 H +ATOM 8147 H2 TIP3X1886 -22.952 28.071 19.063 1.00 0.00 W1 H +ATOM 8148 OH2 TIP3X1887 -22.365 22.902 17.436 1.00 0.00 W1 O +ATOM 8149 H1 TIP3X1887 -21.542 22.975 16.953 1.00 0.00 W1 H +ATOM 8150 H2 TIP3X1887 -22.358 23.646 18.038 1.00 0.00 W1 H +ATOM 8151 OH2 TIP3X1888 -18.964 17.626 27.227 1.00 0.00 W1 O +ATOM 8152 H1 TIP3X1888 -18.159 17.395 26.763 1.00 0.00 W1 H +ATOM 8153 H2 TIP3X1888 -18.673 18.179 27.952 1.00 0.00 W1 H +ATOM 8154 OH2 TIP3X1889 -30.999 24.727 18.633 1.00 0.00 W1 O +ATOM 8155 H1 TIP3X1889 -31.152 24.819 17.693 1.00 0.00 W1 H +ATOM 8156 H2 TIP3X1889 -30.045 24.727 18.722 1.00 0.00 W1 H +ATOM 8157 OH2 TIP3X1890 -20.237 24.315 25.229 1.00 0.00 W1 O +ATOM 8158 H1 TIP3X1890 -19.691 24.977 25.655 1.00 0.00 W1 H +ATOM 8159 H2 TIP3X1890 -19.778 24.115 24.414 1.00 0.00 W1 H +ATOM 8160 OH2 TIP3X1891 -21.414 29.289 16.307 1.00 0.00 W1 O +ATOM 8161 H1 TIP3X1891 -20.590 29.324 16.791 1.00 0.00 W1 H +ATOM 8162 H2 TIP3X1891 -21.211 28.776 15.524 1.00 0.00 W1 H +ATOM 8163 OH2 TIP3X1892 -21.422 27.076 27.958 1.00 0.00 W1 O +ATOM 8164 H1 TIP3X1892 -22.243 27.323 28.384 1.00 0.00 W1 H +ATOM 8165 H2 TIP3X1892 -21.651 26.981 27.033 1.00 0.00 W1 H +ATOM 8166 OH2 TIP3X1893 -24.797 27.301 19.844 1.00 0.00 W1 O +ATOM 8167 H1 TIP3X1893 -25.504 27.448 19.216 1.00 0.00 W1 H +ATOM 8168 H2 TIP3X1893 -25.134 27.646 20.671 1.00 0.00 W1 H +ATOM 8169 OH2 TIP3X1894 -28.232 28.213 28.555 1.00 0.00 W1 O +ATOM 8170 H1 TIP3X1894 -27.498 28.824 28.491 1.00 0.00 W1 H +ATOM 8171 H2 TIP3X1894 -28.544 28.307 29.455 1.00 0.00 W1 H +ATOM 8172 OH2 TIP3X1895 -28.642 29.918 22.657 1.00 0.00 W1 O +ATOM 8173 H1 TIP3X1895 -29.228 29.177 22.503 1.00 0.00 W1 H +ATOM 8174 H2 TIP3X1895 -28.199 30.051 21.819 1.00 0.00 W1 H +ATOM 8175 OH2 TIP3X1896 -20.289 15.931 23.738 1.00 0.00 W1 O +ATOM 8176 H1 TIP3X1896 -19.956 15.856 22.843 1.00 0.00 W1 H +ATOM 8177 H2 TIP3X1896 -20.334 16.874 23.899 1.00 0.00 W1 H +ATOM 8178 OH2 TIP3X1897 -23.051 18.060 23.972 1.00 0.00 W1 O +ATOM 8179 H1 TIP3X1897 -23.413 18.549 23.233 1.00 0.00 W1 H +ATOM 8180 H2 TIP3X1897 -23.782 17.971 24.582 1.00 0.00 W1 H +ATOM 8181 OH2 TIP3X1898 -24.332 16.045 17.900 1.00 0.00 W1 O +ATOM 8182 H1 TIP3X1898 -23.476 15.789 18.245 1.00 0.00 W1 H +ATOM 8183 H2 TIP3X1898 -24.850 15.241 17.925 1.00 0.00 W1 H +ATOM 8184 OH2 TIP3X1899 -21.580 15.888 18.944 1.00 0.00 W1 O +ATOM 8185 H1 TIP3X1899 -21.124 15.152 19.352 1.00 0.00 W1 H +ATOM 8186 H2 TIP3X1899 -21.173 15.975 18.082 1.00 0.00 W1 H +ATOM 8187 OH2 TIP3X1900 -26.941 30.467 30.398 1.00 0.00 W1 O +ATOM 8188 H1 TIP3X1900 -27.191 31.224 29.869 1.00 0.00 W1 H +ATOM 8189 H2 TIP3X1900 -26.030 30.298 30.159 1.00 0.00 W1 H +ATOM 8190 OH2 TIP3X1901 -21.934 29.161 20.699 1.00 0.00 W1 O +ATOM 8191 H1 TIP3X1901 -21.273 28.519 20.959 1.00 0.00 W1 H +ATOM 8192 H2 TIP3X1901 -21.947 29.796 21.415 1.00 0.00 W1 H +ATOM 8193 OH2 TIP3X1902 -24.195 30.064 29.608 1.00 0.00 W1 O +ATOM 8194 H1 TIP3X1902 -23.977 29.171 29.879 1.00 0.00 W1 H +ATOM 8195 H2 TIP3X1902 -23.587 30.618 30.098 1.00 0.00 W1 H +ATOM 8196 OH2 TIP3X1903 -25.248 18.182 19.653 1.00 0.00 W1 O +ATOM 8197 H1 TIP3X1903 -24.591 17.523 19.430 1.00 0.00 W1 H +ATOM 8198 H2 TIP3X1903 -25.206 18.251 20.607 1.00 0.00 W1 H +ATOM 8199 OH2 TIP3X1904 -30.535 16.520 29.109 1.00 0.00 W1 O +ATOM 8200 H1 TIP3X1904 -29.787 16.325 28.545 1.00 0.00 W1 H +ATOM 8201 H2 TIP3X1904 -30.327 16.095 29.940 1.00 0.00 W1 H +ATOM 8202 OH2 TIP3X1905 -19.415 29.247 18.710 1.00 0.00 W1 O +ATOM 8203 H1 TIP3X1905 -19.271 28.307 18.813 1.00 0.00 W1 H +ATOM 8204 H2 TIP3X1905 -18.592 29.580 18.353 1.00 0.00 W1 H +ATOM 8205 OH2 TIP3X1906 -17.748 16.014 29.937 1.00 0.00 W1 O +ATOM 8206 H1 TIP3X1906 -18.361 16.088 29.207 1.00 0.00 W1 H +ATOM 8207 H2 TIP3X1906 -16.978 16.509 29.656 1.00 0.00 W1 H +ATOM 8208 OH2 TIP3X1907 -26.954 30.227 20.424 1.00 0.00 W1 O +ATOM 8209 H1 TIP3X1907 -26.961 30.272 19.468 1.00 0.00 W1 H +ATOM 8210 H2 TIP3X1907 -26.147 30.673 20.680 1.00 0.00 W1 H +ATOM 8211 OH2 TIP3X1908 -16.045 29.165 28.373 1.00 0.00 W1 O +ATOM 8212 H1 TIP3X1908 -16.768 29.716 28.674 1.00 0.00 W1 H +ATOM 8213 H2 TIP3X1908 -15.257 29.664 28.587 1.00 0.00 W1 H +ATOM 8214 OH2 TIP3X1909 -28.419 18.487 20.053 1.00 0.00 W1 O +ATOM 8215 H1 TIP3X1909 -29.063 18.876 19.461 1.00 0.00 W1 H +ATOM 8216 H2 TIP3X1909 -27.617 18.984 19.895 1.00 0.00 W1 H +ATOM 8217 OH2 TIP3X1910 -26.991 27.086 17.785 1.00 0.00 W1 O +ATOM 8218 H1 TIP3X1910 -27.030 26.458 17.063 1.00 0.00 W1 H +ATOM 8219 H2 TIP3X1910 -27.710 26.833 18.363 1.00 0.00 W1 H +ATOM 8220 OH2 TIP3X1911 -13.539 -20.058 -26.806 1.00 0.00 W1 O +ATOM 8221 H1 TIP3X1911 -13.356 -20.134 -25.869 1.00 0.00 W1 H +ATOM 8222 H2 TIP3X1911 -13.563 -19.116 -26.970 1.00 0.00 W1 H +ATOM 8223 OH2 TIP3X1912 -2.436 -22.567 -23.068 1.00 0.00 W1 O +ATOM 8224 H1 TIP3X1912 -2.201 -22.303 -23.957 1.00 0.00 W1 H +ATOM 8225 H2 TIP3X1912 -1.607 -22.831 -22.669 1.00 0.00 W1 H +ATOM 8226 OH2 TIP3X1913 -10.452 -22.844 -27.089 1.00 0.00 W1 O +ATOM 8227 H1 TIP3X1913 -10.422 -21.934 -26.792 1.00 0.00 W1 H +ATOM 8228 H2 TIP3X1913 -9.945 -23.327 -26.437 1.00 0.00 W1 H +ATOM 8229 OH2 TIP3X1914 -2.649 -18.684 -24.946 1.00 0.00 W1 O +ATOM 8230 H1 TIP3X1914 -2.924 -18.194 -24.171 1.00 0.00 W1 H +ATOM 8231 H2 TIP3X1914 -3.174 -19.484 -24.922 1.00 0.00 W1 H +ATOM 8232 OH2 TIP3X1915 -4.132 -20.241 -27.903 1.00 0.00 W1 O +ATOM 8233 H1 TIP3X1915 -3.970 -20.470 -28.818 1.00 0.00 W1 H +ATOM 8234 H2 TIP3X1915 -5.061 -20.012 -27.873 1.00 0.00 W1 H +ATOM 8235 OH2 TIP3X1916 -0.285 -19.709 -23.118 1.00 0.00 W1 O +ATOM 8236 H1 TIP3X1916 -0.837 -19.626 -23.896 1.00 0.00 W1 H +ATOM 8237 H2 TIP3X1916 -0.895 -19.926 -22.413 1.00 0.00 W1 H +ATOM 8238 OH2 TIP3X1917 -13.648 -18.445 -20.667 1.00 0.00 W1 O +ATOM 8239 H1 TIP3X1917 -13.242 -18.242 -19.824 1.00 0.00 W1 H +ATOM 8240 H2 TIP3X1917 -14.219 -19.191 -20.484 1.00 0.00 W1 H +ATOM 8241 OH2 TIP3X1918 -6.273 -16.820 -21.441 1.00 0.00 W1 O +ATOM 8242 H1 TIP3X1918 -5.972 -17.721 -21.319 1.00 0.00 W1 H +ATOM 8243 H2 TIP3X1918 -5.648 -16.440 -22.058 1.00 0.00 W1 H +ATOM 8244 OH2 TIP3X1919 -2.841 -16.863 -21.561 1.00 0.00 W1 O +ATOM 8245 H1 TIP3X1919 -3.276 -16.040 -21.781 1.00 0.00 W1 H +ATOM 8246 H2 TIP3X1919 -1.912 -16.638 -21.512 1.00 0.00 W1 H +ATOM 8247 OH2 TIP3X1920 -10.392 -17.289 -22.432 1.00 0.00 W1 O +ATOM 8248 H1 TIP3X1920 -10.037 -16.440 -22.695 1.00 0.00 W1 H +ATOM 8249 H2 TIP3X1920 -11.327 -17.229 -22.628 1.00 0.00 W1 H +ATOM 8250 OH2 TIP3X1921 -5.551 -25.396 -23.530 1.00 0.00 W1 O +ATOM 8251 H1 TIP3X1921 -5.629 -26.206 -24.035 1.00 0.00 W1 H +ATOM 8252 H2 TIP3X1921 -4.608 -25.257 -23.443 1.00 0.00 W1 H +ATOM 8253 OH2 TIP3X1922 -9.528 -29.299 -21.168 1.00 0.00 W1 O +ATOM 8254 H1 TIP3X1922 -9.270 -30.036 -20.615 1.00 0.00 W1 H +ATOM 8255 H2 TIP3X1922 -10.205 -29.655 -21.744 1.00 0.00 W1 H +ATOM 8256 OH2 TIP3X1923 -1.284 -28.294 -24.745 1.00 0.00 W1 O +ATOM 8257 H1 TIP3X1923 -1.592 -27.956 -23.904 1.00 0.00 W1 H +ATOM 8258 H2 TIP3X1923 -1.217 -29.240 -24.614 1.00 0.00 W1 H +ATOM 8259 OH2 TIP3X1924 -2.687 -27.099 -22.791 1.00 0.00 W1 O +ATOM 8260 H1 TIP3X1924 -2.112 -27.327 -22.061 1.00 0.00 W1 H +ATOM 8261 H2 TIP3X1924 -3.562 -27.353 -22.496 1.00 0.00 W1 H +ATOM 8262 OH2 TIP3X1925 -9.641 -25.974 -21.420 1.00 0.00 W1 O +ATOM 8263 H1 TIP3X1925 -9.137 -26.677 -21.008 1.00 0.00 W1 H +ATOM 8264 H2 TIP3X1925 -8.983 -25.332 -21.687 1.00 0.00 W1 H +ATOM 8265 OH2 TIP3X1926 -2.164 -24.926 -24.523 1.00 0.00 W1 O +ATOM 8266 H1 TIP3X1926 -2.123 -25.826 -24.199 1.00 0.00 W1 H +ATOM 8267 H2 TIP3X1926 -2.282 -24.393 -23.736 1.00 0.00 W1 H +ATOM 8268 OH2 TIP3X1927 -3.479 -28.283 -26.654 1.00 0.00 W1 O +ATOM 8269 H1 TIP3X1927 -2.654 -28.098 -26.205 1.00 0.00 W1 H +ATOM 8270 H2 TIP3X1927 -3.403 -27.828 -27.493 1.00 0.00 W1 H +ATOM 8271 OH2 TIP3X1928 -7.297 -22.311 -20.583 1.00 0.00 W1 O +ATOM 8272 H1 TIP3X1928 -6.420 -22.289 -20.966 1.00 0.00 W1 H +ATOM 8273 H2 TIP3X1928 -7.562 -21.393 -20.537 1.00 0.00 W1 H +ATOM 8274 OH2 TIP3X1929 -8.146 -19.763 -20.773 1.00 0.00 W1 O +ATOM 8275 H1 TIP3X1929 -8.171 -19.536 -21.702 1.00 0.00 W1 H +ATOM 8276 H2 TIP3X1929 -9.066 -19.817 -20.514 1.00 0.00 W1 H +ATOM 8277 OH2 TIP3X1930 -13.283 -27.882 -23.935 1.00 0.00 W1 O +ATOM 8278 H1 TIP3X1930 -13.609 -27.002 -23.744 1.00 0.00 W1 H +ATOM 8279 H2 TIP3X1930 -13.407 -27.984 -24.878 1.00 0.00 W1 H +ATOM 8280 OH2 TIP3X1931 -11.127 -24.324 -23.922 1.00 0.00 W1 O +ATOM 8281 H1 TIP3X1931 -11.810 -24.774 -24.419 1.00 0.00 W1 H +ATOM 8282 H2 TIP3X1931 -10.642 -25.028 -23.490 1.00 0.00 W1 H +ATOM 8283 OH2 TIP3X1932 -5.072 -19.400 -21.526 1.00 0.00 W1 O +ATOM 8284 H1 TIP3X1932 -5.314 -19.986 -22.243 1.00 0.00 W1 H +ATOM 8285 H2 TIP3X1932 -4.122 -19.489 -21.453 1.00 0.00 W1 H +ATOM 8286 OH2 TIP3X1933 -0.774 -15.765 -24.745 1.00 0.00 W1 O +ATOM 8287 H1 TIP3X1933 -0.779 -16.233 -23.910 1.00 0.00 W1 H +ATOM 8288 H2 TIP3X1933 -1.654 -15.894 -25.098 1.00 0.00 W1 H +ATOM 8289 OH2 TIP3X1934 -8.902 -19.429 -23.723 1.00 0.00 W1 O +ATOM 8290 H1 TIP3X1934 -9.473 -20.148 -23.454 1.00 0.00 W1 H +ATOM 8291 H2 TIP3X1934 -9.362 -18.638 -23.441 1.00 0.00 W1 H +ATOM 8292 OH2 TIP3X1935 -6.680 -28.977 -19.153 1.00 0.00 W1 O +ATOM 8293 H1 TIP3X1935 -7.423 -28.498 -18.786 1.00 0.00 W1 H +ATOM 8294 H2 TIP3X1935 -7.061 -29.789 -19.487 1.00 0.00 W1 H +ATOM 8295 OH2 TIP3X1936 -11.328 -28.272 -29.351 1.00 0.00 W1 O +ATOM 8296 H1 TIP3X1936 -11.426 -28.934 -28.667 1.00 0.00 W1 H +ATOM 8297 H2 TIP3X1936 -11.512 -28.741 -30.166 1.00 0.00 W1 H +ATOM 8298 OH2 TIP3X1937 -0.435 -27.350 -21.162 1.00 0.00 W1 O +ATOM 8299 H1 TIP3X1937 0.084 -26.682 -21.609 1.00 0.00 W1 H +ATOM 8300 H2 TIP3X1937 0.007 -27.475 -20.322 1.00 0.00 W1 H +ATOM 8301 OH2 TIP3X1938 -14.377 -30.998 -27.002 1.00 0.00 W1 O +ATOM 8302 H1 TIP3X1938 -13.652 -30.377 -26.933 1.00 0.00 W1 H +ATOM 8303 H2 TIP3X1938 -14.749 -31.031 -26.120 1.00 0.00 W1 H +ATOM 8304 OH2 TIP3X1939 -9.111 -24.762 -17.015 1.00 0.00 W1 O +ATOM 8305 H1 TIP3X1939 -8.247 -24.364 -17.116 1.00 0.00 W1 H +ATOM 8306 H2 TIP3X1939 -8.959 -25.699 -17.138 1.00 0.00 W1 H +ATOM 8307 OH2 TIP3X1940 -5.945 -19.852 -24.276 1.00 0.00 W1 O +ATOM 8308 H1 TIP3X1940 -5.851 -20.715 -24.679 1.00 0.00 W1 H +ATOM 8309 H2 TIP3X1940 -6.878 -19.652 -24.352 1.00 0.00 W1 H +ATOM 8310 OH2 TIP3X1941 -7.333 -21.568 -26.745 1.00 0.00 W1 O +ATOM 8311 H1 TIP3X1941 -7.897 -22.182 -26.275 1.00 0.00 W1 H +ATOM 8312 H2 TIP3X1941 -7.807 -20.737 -26.716 1.00 0.00 W1 H +ATOM 8313 OH2 TIP3X1942 -14.795 -21.055 -20.288 1.00 0.00 W1 O +ATOM 8314 H1 TIP3X1942 -15.330 -21.657 -20.806 1.00 0.00 W1 H +ATOM 8315 H2 TIP3X1942 -15.266 -20.969 -19.459 1.00 0.00 W1 H +ATOM 8316 OH2 TIP3X1943 -3.499 -22.034 -25.920 1.00 0.00 W1 O +ATOM 8317 H1 TIP3X1943 -3.555 -22.949 -26.197 1.00 0.00 W1 H +ATOM 8318 H2 TIP3X1943 -3.671 -21.532 -26.716 1.00 0.00 W1 H +ATOM 8319 OH2 TIP3X1944 -3.202 -21.520 -18.896 1.00 0.00 W1 O +ATOM 8320 H1 TIP3X1944 -4.104 -21.436 -18.588 1.00 0.00 W1 H +ATOM 8321 H2 TIP3X1944 -3.033 -22.462 -18.892 1.00 0.00 W1 H +ATOM 8322 OH2 TIP3X1945 -0.835 -23.561 -21.090 1.00 0.00 W1 O +ATOM 8323 H1 TIP3X1945 -0.173 -24.241 -21.209 1.00 0.00 W1 H +ATOM 8324 H2 TIP3X1945 -1.551 -24.000 -20.631 1.00 0.00 W1 H +ATOM 8325 OH2 TIP3X1946 -11.691 -23.874 -15.946 1.00 0.00 W1 O +ATOM 8326 H1 TIP3X1946 -12.220 -24.108 -16.708 1.00 0.00 W1 H +ATOM 8327 H2 TIP3X1946 -10.795 -23.826 -16.280 1.00 0.00 W1 H +ATOM 8328 OH2 TIP3X1947 -10.780 -20.668 -20.384 1.00 0.00 W1 O +ATOM 8329 H1 TIP3X1947 -10.825 -21.223 -19.606 1.00 0.00 W1 H +ATOM 8330 H2 TIP3X1947 -11.413 -19.969 -20.218 1.00 0.00 W1 H +ATOM 8331 OH2 TIP3X1948 -2.109 -19.538 -20.635 1.00 0.00 W1 O +ATOM 8332 H1 TIP3X1948 -1.685 -18.770 -20.251 1.00 0.00 W1 H +ATOM 8333 H2 TIP3X1948 -2.413 -20.046 -19.882 1.00 0.00 W1 H +ATOM 8334 OH2 TIP3X1949 -4.021 -17.562 -18.810 1.00 0.00 W1 O +ATOM 8335 H1 TIP3X1949 -4.728 -18.191 -18.952 1.00 0.00 W1 H +ATOM 8336 H2 TIP3X1949 -3.692 -17.368 -19.687 1.00 0.00 W1 H +ATOM 8337 OH2 TIP3X1950 -3.770 -19.026 -16.413 1.00 0.00 W1 O +ATOM 8338 H1 TIP3X1950 -4.404 -19.633 -16.797 1.00 0.00 W1 H +ATOM 8339 H2 TIP3X1950 -3.657 -18.346 -17.077 1.00 0.00 W1 H +ATOM 8340 OH2 TIP3X1951 -0.160 -17.118 -22.347 1.00 0.00 W1 O +ATOM 8341 H1 TIP3X1951 0.518 -17.276 -21.690 1.00 0.00 W1 H +ATOM 8342 H2 TIP3X1951 -0.394 -17.989 -22.666 1.00 0.00 W1 H +ATOM 8343 OH2 TIP3X1952 -9.603 -30.647 -23.954 1.00 0.00 W1 O +ATOM 8344 H1 TIP3X1952 -9.895 -29.737 -24.015 1.00 0.00 W1 H +ATOM 8345 H2 TIP3X1952 -8.772 -30.664 -24.427 1.00 0.00 W1 H +ATOM 8346 OH2 TIP3X1953 -7.479 -20.700 -30.300 1.00 0.00 W1 O +ATOM 8347 H1 TIP3X1953 -8.175 -21.322 -30.085 1.00 0.00 W1 H +ATOM 8348 H2 TIP3X1953 -7.497 -20.064 -29.585 1.00 0.00 W1 H +ATOM 8349 OH2 TIP3X1954 -0.099 -21.937 -30.863 1.00 0.00 W1 O +ATOM 8350 H1 TIP3X1954 -0.362 -22.686 -31.397 1.00 0.00 W1 H +ATOM 8351 H2 TIP3X1954 -0.354 -21.173 -31.381 1.00 0.00 W1 H +ATOM 8352 OH2 TIP3X1955 -14.151 -18.240 -31.146 1.00 0.00 W1 O +ATOM 8353 H1 TIP3X1955 -13.706 -18.789 -30.501 1.00 0.00 W1 H +ATOM 8354 H2 TIP3X1955 -15.048 -18.574 -31.167 1.00 0.00 W1 H +ATOM 8355 OH2 TIP3X1956 -2.058 -16.111 -29.888 1.00 0.00 W1 O +ATOM 8356 H1 TIP3X1956 -1.173 -16.439 -30.046 1.00 0.00 W1 H +ATOM 8357 H2 TIP3X1956 -2.288 -15.643 -30.690 1.00 0.00 W1 H +ATOM 8358 OH2 TIP3X1957 -0.665 -20.449 -17.810 1.00 0.00 W1 O +ATOM 8359 H1 TIP3X1957 -0.775 -19.500 -17.751 1.00 0.00 W1 H +ATOM 8360 H2 TIP3X1957 -1.558 -20.794 -17.820 1.00 0.00 W1 H +ATOM 8361 OH2 TIP3X1958 -13.979 -17.623 -28.191 1.00 0.00 W1 O +ATOM 8362 H1 TIP3X1958 -14.047 -16.787 -27.731 1.00 0.00 W1 H +ATOM 8363 H2 TIP3X1958 -14.875 -17.962 -28.208 1.00 0.00 W1 H +ATOM 8364 OH2 TIP3X1959 -1.399 -19.130 -30.547 1.00 0.00 W1 O +ATOM 8365 H1 TIP3X1959 -1.368 -19.210 -29.594 1.00 0.00 W1 H +ATOM 8366 H2 TIP3X1959 -2.232 -18.693 -30.724 1.00 0.00 W1 H +ATOM 8367 OH2 TIP3X1960 -5.029 -30.836 -17.663 1.00 0.00 W1 O +ATOM 8368 H1 TIP3X1960 -5.335 -30.087 -18.176 1.00 0.00 W1 H +ATOM 8369 H2 TIP3X1960 -4.975 -31.553 -18.295 1.00 0.00 W1 H +ATOM 8370 OH2 TIP3X1961 -10.815 -16.919 -19.634 1.00 0.00 W1 O +ATOM 8371 H1 TIP3X1961 -9.967 -16.681 -19.260 1.00 0.00 W1 H +ATOM 8372 H2 TIP3X1961 -10.603 -17.299 -20.487 1.00 0.00 W1 H +ATOM 8373 OH2 TIP3X1962 -12.349 -28.901 -16.284 1.00 0.00 W1 O +ATOM 8374 H1 TIP3X1962 -13.226 -28.811 -15.910 1.00 0.00 W1 H +ATOM 8375 H2 TIP3X1962 -12.286 -28.188 -16.920 1.00 0.00 W1 H +ATOM 8376 OH2 TIP3X1963 -6.151 -26.954 -30.553 1.00 0.00 W1 O +ATOM 8377 H1 TIP3X1963 -6.317 -26.657 -31.448 1.00 0.00 W1 H +ATOM 8378 H2 TIP3X1963 -7.022 -27.077 -30.176 1.00 0.00 W1 H +ATOM 8379 OH2 TIP3X1964 -0.754 -19.193 -27.505 1.00 0.00 W1 O +ATOM 8380 H1 TIP3X1964 -0.181 -19.930 -27.292 1.00 0.00 W1 H +ATOM 8381 H2 TIP3X1964 -1.085 -18.894 -26.658 1.00 0.00 W1 H +ATOM 8382 OH2 TIP3X1965 -5.493 -30.157 -30.576 1.00 0.00 W1 O +ATOM 8383 H1 TIP3X1965 -4.761 -29.541 -30.552 1.00 0.00 W1 H +ATOM 8384 H2 TIP3X1965 -5.252 -30.790 -31.253 1.00 0.00 W1 H +ATOM 8385 OH2 TIP3X1966 -0.961 -30.064 -20.311 1.00 0.00 W1 O +ATOM 8386 H1 TIP3X1966 -0.469 -30.693 -19.784 1.00 0.00 W1 H +ATOM 8387 H2 TIP3X1966 -0.360 -29.821 -21.016 1.00 0.00 W1 H +ATOM 8388 OH2 TIP3X1967 -13.454 -20.843 -24.233 1.00 0.00 W1 O +ATOM 8389 H1 TIP3X1967 -14.122 -20.520 -23.629 1.00 0.00 W1 H +ATOM 8390 H2 TIP3X1967 -12.661 -20.913 -23.701 1.00 0.00 W1 H +ATOM 8391 OH2 TIP3X1968 -8.457 -19.424 -17.123 1.00 0.00 W1 O +ATOM 8392 H1 TIP3X1968 -8.233 -19.802 -16.272 1.00 0.00 W1 H +ATOM 8393 H2 TIP3X1968 -9.063 -20.053 -17.513 1.00 0.00 W1 H +ATOM 8394 OH2 TIP3X1969 -4.977 -28.119 -21.710 1.00 0.00 W1 O +ATOM 8395 H1 TIP3X1969 -4.918 -28.301 -20.772 1.00 0.00 W1 H +ATOM 8396 H2 TIP3X1969 -5.916 -28.032 -21.879 1.00 0.00 W1 H +ATOM 8397 OH2 TIP3X1970 -8.786 -27.463 -17.531 1.00 0.00 W1 O +ATOM 8398 H1 TIP3X1970 -9.653 -27.533 -17.931 1.00 0.00 W1 H +ATOM 8399 H2 TIP3X1970 -8.841 -28.003 -16.743 1.00 0.00 W1 H +ATOM 8400 OH2 TIP3X1971 -1.300 -24.742 -15.778 1.00 0.00 W1 O +ATOM 8401 H1 TIP3X1971 -0.505 -25.276 -15.795 1.00 0.00 W1 H +ATOM 8402 H2 TIP3X1971 -1.594 -24.777 -14.868 1.00 0.00 W1 H +ATOM 8403 OH2 TIP3X1972 -13.115 -30.875 -19.860 1.00 0.00 W1 O +ATOM 8404 H1 TIP3X1972 -13.340 -30.422 -20.672 1.00 0.00 W1 H +ATOM 8405 H2 TIP3X1972 -12.285 -31.312 -20.051 1.00 0.00 W1 H +ATOM 8406 OH2 TIP3X1973 -7.020 -30.418 -24.778 1.00 0.00 W1 O +ATOM 8407 H1 TIP3X1973 -6.538 -29.904 -25.426 1.00 0.00 W1 H +ATOM 8408 H2 TIP3X1973 -6.676 -30.124 -23.934 1.00 0.00 W1 H +ATOM 8409 OH2 TIP3X1974 -12.550 -25.826 -29.625 1.00 0.00 W1 O +ATOM 8410 H1 TIP3X1974 -12.127 -25.180 -30.191 1.00 0.00 W1 H +ATOM 8411 H2 TIP3X1974 -11.838 -26.401 -29.344 1.00 0.00 W1 H +ATOM 8412 OH2 TIP3X1975 -12.025 -25.170 -20.314 1.00 0.00 W1 O +ATOM 8413 H1 TIP3X1975 -12.110 -24.378 -19.782 1.00 0.00 W1 H +ATOM 8414 H2 TIP3X1975 -11.110 -25.174 -20.595 1.00 0.00 W1 H +ATOM 8415 OH2 TIP3X1976 -12.843 -24.451 -27.129 1.00 0.00 W1 O +ATOM 8416 H1 TIP3X1976 -12.780 -24.740 -28.039 1.00 0.00 W1 H +ATOM 8417 H2 TIP3X1976 -12.067 -23.906 -26.996 1.00 0.00 W1 H +ATOM 8418 OH2 TIP3X1977 -3.822 -27.882 -29.369 1.00 0.00 W1 O +ATOM 8419 H1 TIP3X1977 -4.530 -27.393 -29.789 1.00 0.00 W1 H +ATOM 8420 H2 TIP3X1977 -3.097 -27.838 -29.992 1.00 0.00 W1 H +ATOM 8421 OH2 TIP3X1978 -15.272 -26.995 -18.281 1.00 0.00 W1 O +ATOM 8422 H1 TIP3X1978 -16.176 -26.701 -18.170 1.00 0.00 W1 H +ATOM 8423 H2 TIP3X1978 -15.131 -27.614 -17.564 1.00 0.00 W1 H +ATOM 8424 OH2 TIP3X1979 -14.128 -30.158 -22.298 1.00 0.00 W1 O +ATOM 8425 H1 TIP3X1979 -14.021 -30.859 -22.941 1.00 0.00 W1 H +ATOM 8426 H2 TIP3X1979 -13.993 -29.352 -22.797 1.00 0.00 W1 H +ATOM 8427 OH2 TIP3X1980 -2.607 -26.530 -17.411 1.00 0.00 W1 O +ATOM 8428 H1 TIP3X1980 -2.295 -25.951 -16.715 1.00 0.00 W1 H +ATOM 8429 H2 TIP3X1980 -3.551 -26.594 -17.265 1.00 0.00 W1 H +ATOM 8430 OH2 TIP3X1981 -5.564 -26.524 -17.464 1.00 0.00 W1 O +ATOM 8431 H1 TIP3X1981 -5.923 -25.956 -18.145 1.00 0.00 W1 H +ATOM 8432 H2 TIP3X1981 -5.901 -27.394 -17.675 1.00 0.00 W1 H +ATOM 8433 OH2 TIP3X1982 -7.361 -26.055 -27.598 1.00 0.00 W1 O +ATOM 8434 H1 TIP3X1982 -7.272 -25.475 -28.355 1.00 0.00 W1 H +ATOM 8435 H2 TIP3X1982 -8.130 -26.589 -27.795 1.00 0.00 W1 H +ATOM 8436 OH2 TIP3X1983 -9.058 -26.723 -29.911 1.00 0.00 W1 O +ATOM 8437 H1 TIP3X1983 -9.495 -26.531 -30.740 1.00 0.00 W1 H +ATOM 8438 H2 TIP3X1983 -9.465 -27.534 -29.607 1.00 0.00 W1 H +ATOM 8439 OH2 TIP3X1984 -8.347 -29.661 -16.122 1.00 0.00 W1 O +ATOM 8440 H1 TIP3X1984 -8.814 -30.048 -15.381 1.00 0.00 W1 H +ATOM 8441 H2 TIP3X1984 -7.433 -29.629 -15.839 1.00 0.00 W1 H +ATOM 8442 OH2 TIP3X1985 -2.784 -24.317 -19.440 1.00 0.00 W1 O +ATOM 8443 H1 TIP3X1985 -2.765 -24.966 -18.737 1.00 0.00 W1 H +ATOM 8444 H2 TIP3X1985 -3.619 -24.468 -19.884 1.00 0.00 W1 H +ATOM 8445 OH2 TIP3X1986 -14.709 -27.216 -30.971 1.00 0.00 W1 O +ATOM 8446 H1 TIP3X1986 -15.466 -27.409 -30.417 1.00 0.00 W1 H +ATOM 8447 H2 TIP3X1986 -14.175 -26.618 -30.448 1.00 0.00 W1 H +ATOM 8448 OH2 TIP3X1987 -14.791 -15.723 -30.484 1.00 0.00 W1 O +ATOM 8449 H1 TIP3X1987 -14.374 -16.470 -30.054 1.00 0.00 W1 H +ATOM 8450 H2 TIP3X1987 -14.778 -15.029 -29.824 1.00 0.00 W1 H +ATOM 8451 OH2 TIP3X1988 -6.043 -27.563 -25.491 1.00 0.00 W1 O +ATOM 8452 H1 TIP3X1988 -6.380 -27.212 -26.315 1.00 0.00 W1 H +ATOM 8453 H2 TIP3X1988 -5.146 -27.830 -25.692 1.00 0.00 W1 H +ATOM 8454 OH2 TIP3X1989 -10.587 -28.252 -23.747 1.00 0.00 W1 O +ATOM 8455 H1 TIP3X1989 -11.530 -28.299 -23.905 1.00 0.00 W1 H +ATOM 8456 H2 TIP3X1989 -10.448 -27.378 -23.383 1.00 0.00 W1 H +ATOM 8457 OH2 TIP3X1990 -15.225 -27.126 -26.953 1.00 0.00 W1 O +ATOM 8458 H1 TIP3X1990 -15.499 -27.251 -26.045 1.00 0.00 W1 H +ATOM 8459 H2 TIP3X1990 -15.420 -26.208 -27.139 1.00 0.00 W1 H +ATOM 8460 OH2 TIP3X1991 -11.225 -27.799 -18.893 1.00 0.00 W1 O +ATOM 8461 H1 TIP3X1991 -11.203 -28.605 -19.409 1.00 0.00 W1 H +ATOM 8462 H2 TIP3X1991 -11.619 -27.151 -19.477 1.00 0.00 W1 H +ATOM 8463 OH2 TIP3X1992 -10.642 -21.264 -23.088 1.00 0.00 W1 O +ATOM 8464 H1 TIP3X1992 -10.713 -22.199 -23.276 1.00 0.00 W1 H +ATOM 8465 H2 TIP3X1992 -10.637 -21.210 -22.132 1.00 0.00 W1 H +ATOM 8466 OH2 TIP3X1993 -6.453 -24.245 -18.526 1.00 0.00 W1 O +ATOM 8467 H1 TIP3X1993 -6.041 -23.413 -18.289 1.00 0.00 W1 H +ATOM 8468 H2 TIP3X1993 -7.002 -24.034 -19.280 1.00 0.00 W1 H +ATOM 8469 OH2 TIP3X1994 -0.657 -28.878 -29.201 1.00 0.00 W1 O +ATOM 8470 H1 TIP3X1994 -0.223 -28.651 -28.379 1.00 0.00 W1 H +ATOM 8471 H2 TIP3X1994 -1.177 -29.654 -28.992 1.00 0.00 W1 H +ATOM 8472 OH2 TIP3X1995 -9.503 -22.918 -30.023 1.00 0.00 W1 O +ATOM 8473 H1 TIP3X1995 -9.792 -23.040 -29.119 1.00 0.00 W1 H +ATOM 8474 H2 TIP3X1995 -8.814 -23.572 -30.144 1.00 0.00 W1 H +ATOM 8475 OH2 TIP3X1996 -2.799 -24.402 -28.955 1.00 0.00 W1 O +ATOM 8476 H1 TIP3X1996 -3.664 -24.601 -28.596 1.00 0.00 W1 H +ATOM 8477 H2 TIP3X1996 -2.242 -24.281 -28.186 1.00 0.00 W1 H +ATOM 8478 OH2 TIP3X1997 -7.966 -24.148 -22.485 1.00 0.00 W1 O +ATOM 8479 H1 TIP3X1997 -7.869 -23.351 -21.963 1.00 0.00 W1 H +ATOM 8480 H2 TIP3X1997 -7.092 -24.538 -22.493 1.00 0.00 W1 H +ATOM 8481 OH2 TIP3X1998 -8.221 -23.766 -25.569 1.00 0.00 W1 O +ATOM 8482 H1 TIP3X1998 -7.600 -24.363 -25.987 1.00 0.00 W1 H +ATOM 8483 H2 TIP3X1998 -8.196 -24.004 -24.642 1.00 0.00 W1 H +ATOM 8484 OH2 TIP3X1999 -5.326 -22.151 -16.633 1.00 0.00 W1 O +ATOM 8485 H1 TIP3X1999 -6.004 -21.867 -16.020 1.00 0.00 W1 H +ATOM 8486 H2 TIP3X1999 -4.528 -22.191 -16.106 1.00 0.00 W1 H +ATOM 8487 OH2 TIP3X2000 -12.817 -22.735 -18.937 1.00 0.00 W1 O +ATOM 8488 H1 TIP3X2000 -12.300 -22.330 -18.241 1.00 0.00 W1 H +ATOM 8489 H2 TIP3X2000 -13.199 -21.998 -19.412 1.00 0.00 W1 H +ATOM 8490 OH2 TIP3X2001 -13.910 -24.773 -17.315 1.00 0.00 W1 O +ATOM 8491 H1 TIP3X2001 -14.114 -25.613 -17.728 1.00 0.00 W1 H +ATOM 8492 H2 TIP3X2001 -14.034 -24.127 -18.011 1.00 0.00 W1 H +ATOM 8493 OH2 TIP3X2002 -14.018 -23.900 -24.492 1.00 0.00 W1 O +ATOM 8494 H1 TIP3X2002 -13.661 -23.028 -24.662 1.00 0.00 W1 H +ATOM 8495 H2 TIP3X2002 -14.120 -24.291 -25.360 1.00 0.00 W1 H +ATOM 8496 OH2 TIP3X2003 -3.259 -21.635 -30.305 1.00 0.00 W1 O +ATOM 8497 H1 TIP3X2003 -2.553 -21.137 -30.717 1.00 0.00 W1 H +ATOM 8498 H2 TIP3X2003 -2.810 -22.266 -29.742 1.00 0.00 W1 H +ATOM 8499 OH2 TIP3X2004 -0.662 -24.288 -26.943 1.00 0.00 W1 O +ATOM 8500 H1 TIP3X2004 -0.950 -24.115 -26.046 1.00 0.00 W1 H +ATOM 8501 H2 TIP3X2004 -0.149 -23.516 -27.183 1.00 0.00 W1 H +ATOM 8502 OH2 TIP3X2005 -14.165 -25.171 -22.221 1.00 0.00 W1 O +ATOM 8503 H1 TIP3X2005 -14.070 -24.493 -22.889 1.00 0.00 W1 H +ATOM 8504 H2 TIP3X2005 -13.506 -24.952 -21.561 1.00 0.00 W1 H +ATOM 8505 OH2 TIP3X2006 -11.378 -16.664 -28.957 1.00 0.00 W1 O +ATOM 8506 H1 TIP3X2006 -11.607 -16.304 -29.814 1.00 0.00 W1 H +ATOM 8507 H2 TIP3X2006 -11.791 -17.527 -28.941 1.00 0.00 W1 H +ATOM 8508 OH2 TIP3X2007 -12.603 -21.431 -30.459 1.00 0.00 W1 O +ATOM 8509 H1 TIP3X2007 -13.418 -21.721 -30.867 1.00 0.00 W1 H +ATOM 8510 H2 TIP3X2007 -12.071 -22.225 -30.397 1.00 0.00 W1 H +ATOM 8511 OH2 TIP3X2008 -11.185 -20.592 -17.384 1.00 0.00 W1 O +ATOM 8512 H1 TIP3X2008 -11.758 -19.990 -17.858 1.00 0.00 W1 H +ATOM 8513 H2 TIP3X2008 -11.659 -20.788 -16.576 1.00 0.00 W1 H +ATOM 8514 OH2 TIP3X2009 -8.109 -15.849 -19.693 1.00 0.00 W1 O +ATOM 8515 H1 TIP3X2009 -7.791 -16.143 -18.840 1.00 0.00 W1 H +ATOM 8516 H2 TIP3X2009 -7.676 -16.426 -20.322 1.00 0.00 W1 H +ATOM 8517 OH2 TIP3X2010 -3.403 -15.607 -25.560 1.00 0.00 W1 O +ATOM 8518 H1 TIP3X2010 -3.815 -16.298 -26.078 1.00 0.00 W1 H +ATOM 8519 H2 TIP3X2010 -3.598 -14.800 -26.036 1.00 0.00 W1 H +ATOM 8520 OH2 TIP3X2011 -6.825 -18.925 -28.308 1.00 0.00 W1 O +ATOM 8521 H1 TIP3X2011 -6.566 -18.139 -28.790 1.00 0.00 W1 H +ATOM 8522 H2 TIP3X2011 -7.394 -18.601 -27.610 1.00 0.00 W1 H +ATOM 8523 OH2 TIP3X2012 -6.808 -23.770 -29.236 1.00 0.00 W1 O +ATOM 8524 H1 TIP3X2012 -5.984 -23.697 -29.719 1.00 0.00 W1 H +ATOM 8525 H2 TIP3X2012 -6.800 -23.026 -28.635 1.00 0.00 W1 H +ATOM 8526 OH2 TIP3X2013 -3.406 -29.047 -19.445 1.00 0.00 W1 O +ATOM 8527 H1 TIP3X2013 -2.601 -29.277 -19.909 1.00 0.00 W1 H +ATOM 8528 H2 TIP3X2013 -3.116 -28.494 -18.720 1.00 0.00 W1 H +ATOM 8529 OH2 TIP3X2014 -15.441 -21.945 -28.039 1.00 0.00 W1 O +ATOM 8530 H1 TIP3X2014 -15.595 -21.853 -28.979 1.00 0.00 W1 H +ATOM 8531 H2 TIP3X2014 -14.488 -21.945 -27.950 1.00 0.00 W1 H +ATOM 8532 OH2 TIP3X2015 -4.679 -22.357 -21.443 1.00 0.00 W1 O +ATOM 8533 H1 TIP3X2015 -4.134 -21.696 -21.017 1.00 0.00 W1 H +ATOM 8534 H2 TIP3X2015 -4.220 -22.558 -22.259 1.00 0.00 W1 H +ATOM 8535 OH2 TIP3X2016 -5.857 -17.384 -30.366 1.00 0.00 W1 O +ATOM 8536 H1 TIP3X2016 -5.032 -17.348 -29.881 1.00 0.00 W1 H +ATOM 8537 H2 TIP3X2016 -5.654 -17.896 -31.148 1.00 0.00 W1 H +ATOM 8538 OH2 TIP3X2017 -5.865 -19.596 -18.715 1.00 0.00 W1 O +ATOM 8539 H1 TIP3X2017 -6.685 -19.349 -18.288 1.00 0.00 W1 H +ATOM 8540 H2 TIP3X2017 -6.094 -19.692 -19.639 1.00 0.00 W1 H +ATOM 8541 OH2 TIP3X2018 -9.239 -19.371 -26.828 1.00 0.00 W1 O +ATOM 8542 H1 TIP3X2018 -9.947 -19.224 -27.456 1.00 0.00 W1 H +ATOM 8543 H2 TIP3X2018 -9.577 -19.027 -26.001 1.00 0.00 W1 H +ATOM 8544 OH2 TIP3X2019 -12.675 -18.459 -18.117 1.00 0.00 W1 O +ATOM 8545 H1 TIP3X2019 -11.941 -17.848 -18.181 1.00 0.00 W1 H +ATOM 8546 H2 TIP3X2019 -12.987 -18.365 -17.217 1.00 0.00 W1 H +ATOM 8547 OH2 TIP3X2020 -13.085 -16.755 -24.015 1.00 0.00 W1 O +ATOM 8548 H1 TIP3X2020 -13.671 -17.496 -24.169 1.00 0.00 W1 H +ATOM 8549 H2 TIP3X2020 -12.642 -16.621 -24.853 1.00 0.00 W1 H +ATOM 8550 OH2 TIP3X2021 -4.731 -30.741 -22.935 1.00 0.00 W1 O +ATOM 8551 H1 TIP3X2021 -4.399 -30.816 -23.829 1.00 0.00 W1 H +ATOM 8552 H2 TIP3X2021 -4.776 -29.799 -22.774 1.00 0.00 W1 H +ATOM 8553 OH2 TIP3X2022 -7.493 -28.612 -22.700 1.00 0.00 W1 O +ATOM 8554 H1 TIP3X2022 -7.855 -28.123 -23.439 1.00 0.00 W1 H +ATOM 8555 H2 TIP3X2022 -8.225 -28.702 -22.090 1.00 0.00 W1 H +ATOM 8556 OH2 TIP3X2023 -8.774 -30.628 -28.772 1.00 0.00 W1 O +ATOM 8557 H1 TIP3X2023 -7.919 -30.883 -28.427 1.00 0.00 W1 H +ATOM 8558 H2 TIP3X2023 -9.293 -31.432 -28.747 1.00 0.00 W1 H +ATOM 8559 OH2 TIP3X2024 -6.023 -30.784 -27.729 1.00 0.00 W1 O +ATOM 8560 H1 TIP3X2024 -5.567 -31.520 -27.320 1.00 0.00 W1 H +ATOM 8561 H2 TIP3X2024 -5.615 -30.698 -28.590 1.00 0.00 W1 H +ATOM 8562 OH2 TIP3X2025 -11.383 -16.206 -16.274 1.00 0.00 W1 O +ATOM 8563 H1 TIP3X2025 -11.634 -15.449 -16.804 1.00 0.00 W1 H +ATOM 8564 H2 TIP3X2025 -10.472 -16.375 -16.513 1.00 0.00 W1 H +ATOM 8565 OH2 TIP3X2026 -6.377 -17.511 -25.974 1.00 0.00 W1 O +ATOM 8566 H1 TIP3X2026 -5.716 -18.153 -25.714 1.00 0.00 W1 H +ATOM 8567 H2 TIP3X2026 -6.390 -16.877 -25.257 1.00 0.00 W1 H +ATOM 8568 OH2 TIP3X2027 -8.637 -16.609 -17.064 1.00 0.00 W1 O +ATOM 8569 H1 TIP3X2027 -8.420 -17.501 -16.794 1.00 0.00 W1 H +ATOM 8570 H2 TIP3X2027 -8.030 -16.055 -16.575 1.00 0.00 W1 H +ATOM 8571 OH2 TIP3X2028 -9.691 -28.491 -27.020 1.00 0.00 W1 O +ATOM 8572 H1 TIP3X2028 -9.034 -29.150 -27.242 1.00 0.00 W1 H +ATOM 8573 H2 TIP3X2028 -9.648 -28.422 -26.066 1.00 0.00 W1 H +ATOM 8574 OH2 TIP3X2029 -14.978 -30.152 -17.564 1.00 0.00 W1 O +ATOM 8575 H1 TIP3X2029 -14.229 -30.348 -18.128 1.00 0.00 W1 H +ATOM 8576 H2 TIP3X2029 -14.769 -30.578 -16.732 1.00 0.00 W1 H +ATOM 8577 OH2 TIP3X2030 -3.858 -17.425 -27.962 1.00 0.00 W1 O +ATOM 8578 H1 TIP3X2030 -3.713 -18.365 -27.859 1.00 0.00 W1 H +ATOM 8579 H2 TIP3X2030 -3.035 -17.093 -28.319 1.00 0.00 W1 H +ATOM 8580 OH2 TIP3X2031 -2.190 -30.659 -16.735 1.00 0.00 W1 O +ATOM 8581 H1 TIP3X2031 -2.804 -30.585 -17.466 1.00 0.00 W1 H +ATOM 8582 H2 TIP3X2031 -1.421 -30.164 -17.017 1.00 0.00 W1 H +ATOM 8583 OH2 TIP3X2032 -11.397 -16.446 -26.249 1.00 0.00 W1 O +ATOM 8584 H1 TIP3X2032 -11.403 -16.401 -27.205 1.00 0.00 W1 H +ATOM 8585 H2 TIP3X2032 -10.589 -16.000 -25.993 1.00 0.00 W1 H +ATOM 8586 OH2 TIP3X2033 -0.488 -17.507 -18.299 1.00 0.00 W1 O +ATOM 8587 H1 TIP3X2033 -1.210 -16.956 -17.998 1.00 0.00 W1 H +ATOM 8588 H2 TIP3X2033 0.300 -17.008 -18.085 1.00 0.00 W1 H +ATOM 8589 OH2 TIP3X2034 -12.862 -28.185 -26.619 1.00 0.00 W1 O +ATOM 8590 H1 TIP3X2034 -13.505 -27.797 -27.212 1.00 0.00 W1 H +ATOM 8591 H2 TIP3X2034 -12.059 -27.688 -26.777 1.00 0.00 W1 H +ATOM 8592 OH2 TIP3X2035 -11.433 -19.586 -28.888 1.00 0.00 W1 O +ATOM 8593 H1 TIP3X2035 -11.472 -20.214 -29.609 1.00 0.00 W1 H +ATOM 8594 H2 TIP3X2035 -12.153 -19.840 -28.310 1.00 0.00 W1 H +ATOM 8595 OH2 TIP3X2036 -13.539 -20.058 -11.248 1.00 0.00 W1 O +ATOM 8596 H1 TIP3X2036 -13.356 -20.134 -10.312 1.00 0.00 W1 H +ATOM 8597 H2 TIP3X2036 -13.563 -19.116 -11.413 1.00 0.00 W1 H +ATOM 8598 OH2 TIP3X2037 -2.436 -22.567 -7.510 1.00 0.00 W1 O +ATOM 8599 H1 TIP3X2037 -2.201 -22.303 -8.400 1.00 0.00 W1 H +ATOM 8600 H2 TIP3X2037 -1.607 -22.831 -7.111 1.00 0.00 W1 H +ATOM 8601 OH2 TIP3X2038 -10.452 -22.844 -11.532 1.00 0.00 W1 O +ATOM 8602 H1 TIP3X2038 -10.422 -21.934 -11.235 1.00 0.00 W1 H +ATOM 8603 H2 TIP3X2038 -9.945 -23.327 -10.880 1.00 0.00 W1 H +ATOM 8604 OH2 TIP3X2039 -4.132 -20.241 -12.345 1.00 0.00 W1 O +ATOM 8605 H1 TIP3X2039 -3.970 -20.470 -13.260 1.00 0.00 W1 H +ATOM 8606 H2 TIP3X2039 -5.061 -20.012 -12.315 1.00 0.00 W1 H +ATOM 8607 OH2 TIP3X2040 -0.285 -19.709 -7.561 1.00 0.00 W1 O +ATOM 8608 H1 TIP3X2040 -0.837 -19.626 -8.338 1.00 0.00 W1 H +ATOM 8609 H2 TIP3X2040 -0.895 -19.926 -6.856 1.00 0.00 W1 H +ATOM 8610 OH2 TIP3X2041 -13.648 -18.445 -5.110 1.00 0.00 W1 O +ATOM 8611 H1 TIP3X2041 -13.242 -18.242 -4.267 1.00 0.00 W1 H +ATOM 8612 H2 TIP3X2041 -14.219 -19.191 -4.927 1.00 0.00 W1 H +ATOM 8613 OH2 TIP3X2042 -5.551 -25.396 -7.973 1.00 0.00 W1 O +ATOM 8614 H1 TIP3X2042 -5.629 -26.206 -8.477 1.00 0.00 W1 H +ATOM 8615 H2 TIP3X2042 -4.608 -25.257 -7.885 1.00 0.00 W1 H +ATOM 8616 OH2 TIP3X2043 -9.528 -29.299 -5.611 1.00 0.00 W1 O +ATOM 8617 H1 TIP3X2043 -9.270 -30.036 -5.058 1.00 0.00 W1 H +ATOM 8618 H2 TIP3X2043 -10.205 -29.655 -6.186 1.00 0.00 W1 H +ATOM 8619 OH2 TIP3X2044 -1.284 -28.294 -9.188 1.00 0.00 W1 O +ATOM 8620 H1 TIP3X2044 -1.592 -27.956 -8.347 1.00 0.00 W1 H +ATOM 8621 H2 TIP3X2044 -1.217 -29.240 -9.056 1.00 0.00 W1 H +ATOM 8622 OH2 TIP3X2045 -2.687 -27.099 -7.234 1.00 0.00 W1 O +ATOM 8623 H1 TIP3X2045 -2.112 -27.327 -6.503 1.00 0.00 W1 H +ATOM 8624 H2 TIP3X2045 -3.562 -27.353 -6.939 1.00 0.00 W1 H +ATOM 8625 OH2 TIP3X2046 -9.641 -25.974 -5.863 1.00 0.00 W1 O +ATOM 8626 H1 TIP3X2046 -9.137 -26.677 -5.451 1.00 0.00 W1 H +ATOM 8627 H2 TIP3X2046 -8.983 -25.332 -6.129 1.00 0.00 W1 H +ATOM 8628 OH2 TIP3X2047 -2.164 -24.926 -8.965 1.00 0.00 W1 O +ATOM 8629 H1 TIP3X2047 -2.123 -25.826 -8.641 1.00 0.00 W1 H +ATOM 8630 H2 TIP3X2047 -2.282 -24.393 -8.179 1.00 0.00 W1 H +ATOM 8631 OH2 TIP3X2048 -3.479 -28.283 -11.097 1.00 0.00 W1 O +ATOM 8632 H1 TIP3X2048 -2.654 -28.098 -10.648 1.00 0.00 W1 H +ATOM 8633 H2 TIP3X2048 -3.403 -27.828 -11.936 1.00 0.00 W1 H +ATOM 8634 OH2 TIP3X2049 -13.283 -27.882 -8.377 1.00 0.00 W1 O +ATOM 8635 H1 TIP3X2049 -13.609 -27.002 -8.186 1.00 0.00 W1 H +ATOM 8636 H2 TIP3X2049 -13.407 -27.984 -9.321 1.00 0.00 W1 H +ATOM 8637 OH2 TIP3X2050 -11.127 -24.324 -8.365 1.00 0.00 W1 O +ATOM 8638 H1 TIP3X2050 -11.810 -24.774 -8.862 1.00 0.00 W1 H +ATOM 8639 H2 TIP3X2050 -10.642 -25.028 -7.933 1.00 0.00 W1 H +ATOM 8640 OH2 TIP3X2051 -0.774 -15.765 -9.188 1.00 0.00 W1 O +ATOM 8641 H1 TIP3X2051 -0.779 -16.233 -8.353 1.00 0.00 W1 H +ATOM 8642 H2 TIP3X2051 -1.654 -15.894 -9.541 1.00 0.00 W1 H +ATOM 8643 OH2 TIP3X2052 -6.680 -28.977 -3.595 1.00 0.00 W1 O +ATOM 8644 H1 TIP3X2052 -7.423 -28.498 -3.228 1.00 0.00 W1 H +ATOM 8645 H2 TIP3X2052 -7.061 -29.789 -3.930 1.00 0.00 W1 H +ATOM 8646 OH2 TIP3X2053 -11.328 -28.272 -13.794 1.00 0.00 W1 O +ATOM 8647 H1 TIP3X2053 -11.426 -28.934 -13.109 1.00 0.00 W1 H +ATOM 8648 H2 TIP3X2053 -11.512 -28.741 -14.608 1.00 0.00 W1 H +ATOM 8649 OH2 TIP3X2054 -0.435 -27.350 -5.604 1.00 0.00 W1 O +ATOM 8650 H1 TIP3X2054 0.084 -26.682 -6.051 1.00 0.00 W1 H +ATOM 8651 H2 TIP3X2054 0.007 -27.475 -4.764 1.00 0.00 W1 H +ATOM 8652 OH2 TIP3X2055 -14.377 -30.998 -11.444 1.00 0.00 W1 O +ATOM 8653 H1 TIP3X2055 -13.652 -30.377 -11.375 1.00 0.00 W1 H +ATOM 8654 H2 TIP3X2055 -14.749 -31.031 -10.563 1.00 0.00 W1 H +ATOM 8655 OH2 TIP3X2056 -7.333 -21.568 -11.187 1.00 0.00 W1 O +ATOM 8656 H1 TIP3X2056 -7.897 -22.182 -10.718 1.00 0.00 W1 H +ATOM 8657 H2 TIP3X2056 -7.807 -20.737 -11.159 1.00 0.00 W1 H +ATOM 8658 OH2 TIP3X2057 -14.795 -21.055 -4.730 1.00 0.00 W1 O +ATOM 8659 H1 TIP3X2057 -15.330 -21.657 -5.248 1.00 0.00 W1 H +ATOM 8660 H2 TIP3X2057 -15.266 -20.969 -3.901 1.00 0.00 W1 H +ATOM 8661 OH2 TIP3X2058 -3.499 -22.034 -10.363 1.00 0.00 W1 O +ATOM 8662 H1 TIP3X2058 -3.555 -22.949 -10.639 1.00 0.00 W1 H +ATOM 8663 H2 TIP3X2058 -3.671 -21.532 -11.159 1.00 0.00 W1 H +ATOM 8664 OH2 TIP3X2059 -0.835 -23.561 -5.533 1.00 0.00 W1 O +ATOM 8665 H1 TIP3X2059 -0.173 -24.241 -5.652 1.00 0.00 W1 H +ATOM 8666 H2 TIP3X2059 -1.551 -24.000 -5.074 1.00 0.00 W1 H +ATOM 8667 OH2 TIP3X2060 -11.691 -23.874 -0.388 1.00 0.00 W1 O +ATOM 8668 H1 TIP3X2060 -12.220 -24.108 -1.151 1.00 0.00 W1 H +ATOM 8669 H2 TIP3X2060 -10.795 -23.826 -0.723 1.00 0.00 W1 H +ATOM 8670 OH2 TIP3X2061 -2.109 -19.538 -5.077 1.00 0.00 W1 O +ATOM 8671 H1 TIP3X2061 -1.685 -18.770 -4.693 1.00 0.00 W1 H +ATOM 8672 H2 TIP3X2061 -2.413 -20.046 -4.325 1.00 0.00 W1 H +ATOM 8673 OH2 TIP3X2062 -9.603 -30.647 -8.397 1.00 0.00 W1 O +ATOM 8674 H1 TIP3X2062 -9.895 -29.737 -8.457 1.00 0.00 W1 H +ATOM 8675 H2 TIP3X2062 -8.772 -30.664 -8.870 1.00 0.00 W1 H +ATOM 8676 OH2 TIP3X2063 -7.479 -20.700 -14.742 1.00 0.00 W1 O +ATOM 8677 H1 TIP3X2063 -8.175 -21.322 -14.528 1.00 0.00 W1 H +ATOM 8678 H2 TIP3X2063 -7.497 -20.064 -14.027 1.00 0.00 W1 H +ATOM 8679 OH2 TIP3X2064 -0.099 -21.937 -15.306 1.00 0.00 W1 O +ATOM 8680 H1 TIP3X2064 -0.362 -22.686 -15.839 1.00 0.00 W1 H +ATOM 8681 H2 TIP3X2064 -0.354 -21.173 -15.823 1.00 0.00 W1 H +ATOM 8682 OH2 TIP3X2065 -14.151 -18.240 -15.589 1.00 0.00 W1 O +ATOM 8683 H1 TIP3X2065 -13.706 -18.789 -14.943 1.00 0.00 W1 H +ATOM 8684 H2 TIP3X2065 -15.048 -18.574 -15.610 1.00 0.00 W1 H +ATOM 8685 OH2 TIP3X2066 -2.058 -16.111 -14.330 1.00 0.00 W1 O +ATOM 8686 H1 TIP3X2066 -1.173 -16.439 -14.489 1.00 0.00 W1 H +ATOM 8687 H2 TIP3X2066 -2.288 -15.643 -15.133 1.00 0.00 W1 H +ATOM 8688 OH2 TIP3X2067 -0.665 -20.449 -2.253 1.00 0.00 W1 O +ATOM 8689 H1 TIP3X2067 -0.775 -19.500 -2.194 1.00 0.00 W1 H +ATOM 8690 H2 TIP3X2067 -1.558 -20.794 -2.263 1.00 0.00 W1 H +ATOM 8691 OH2 TIP3X2068 -13.979 -17.623 -12.634 1.00 0.00 W1 O +ATOM 8692 H1 TIP3X2068 -14.047 -16.787 -12.174 1.00 0.00 W1 H +ATOM 8693 H2 TIP3X2068 -14.875 -17.962 -12.651 1.00 0.00 W1 H +ATOM 8694 OH2 TIP3X2069 -1.399 -19.130 -14.990 1.00 0.00 W1 O +ATOM 8695 H1 TIP3X2069 -1.368 -19.210 -14.036 1.00 0.00 W1 H +ATOM 8696 H2 TIP3X2069 -2.232 -18.693 -15.166 1.00 0.00 W1 H +ATOM 8697 OH2 TIP3X2070 -5.029 -30.836 -2.106 1.00 0.00 W1 O +ATOM 8698 H1 TIP3X2070 -5.335 -30.087 -2.618 1.00 0.00 W1 H +ATOM 8699 H2 TIP3X2070 -4.975 -31.553 -2.738 1.00 0.00 W1 H +ATOM 8700 OH2 TIP3X2071 -12.349 -28.901 -0.726 1.00 0.00 W1 O +ATOM 8701 H1 TIP3X2071 -13.226 -28.811 -0.352 1.00 0.00 W1 H +ATOM 8702 H2 TIP3X2071 -12.286 -28.188 -1.363 1.00 0.00 W1 H +ATOM 8703 OH2 TIP3X2072 -6.151 -26.954 -14.996 1.00 0.00 W1 O +ATOM 8704 H1 TIP3X2072 -6.317 -26.657 -15.891 1.00 0.00 W1 H +ATOM 8705 H2 TIP3X2072 -7.022 -27.077 -14.619 1.00 0.00 W1 H +ATOM 8706 OH2 TIP3X2073 -0.754 -19.193 -11.948 1.00 0.00 W1 O +ATOM 8707 H1 TIP3X2073 -0.181 -19.930 -11.735 1.00 0.00 W1 H +ATOM 8708 H2 TIP3X2073 -1.085 -18.894 -11.101 1.00 0.00 W1 H +ATOM 8709 OH2 TIP3X2074 -5.493 -30.157 -15.019 1.00 0.00 W1 O +ATOM 8710 H1 TIP3X2074 -4.761 -29.541 -14.994 1.00 0.00 W1 H +ATOM 8711 H2 TIP3X2074 -5.252 -30.790 -15.695 1.00 0.00 W1 H +ATOM 8712 OH2 TIP3X2075 -0.961 -30.064 -4.754 1.00 0.00 W1 O +ATOM 8713 H1 TIP3X2075 -0.469 -30.693 -4.226 1.00 0.00 W1 H +ATOM 8714 H2 TIP3X2075 -0.360 -29.821 -5.459 1.00 0.00 W1 H +ATOM 8715 OH2 TIP3X2076 -4.977 -28.119 -6.153 1.00 0.00 W1 O +ATOM 8716 H1 TIP3X2076 -4.918 -28.301 -5.215 1.00 0.00 W1 H +ATOM 8717 H2 TIP3X2076 -5.916 -28.032 -6.321 1.00 0.00 W1 H +ATOM 8718 OH2 TIP3X2077 -8.786 -27.463 -1.974 1.00 0.00 W1 O +ATOM 8719 H1 TIP3X2077 -9.653 -27.533 -2.374 1.00 0.00 W1 H +ATOM 8720 H2 TIP3X2077 -8.841 -28.003 -1.186 1.00 0.00 W1 H +ATOM 8721 OH2 TIP3X2078 -1.300 -24.742 -0.221 1.00 0.00 W1 O +ATOM 8722 H1 TIP3X2078 -0.505 -25.276 -0.237 1.00 0.00 W1 H +ATOM 8723 H2 TIP3X2078 -1.594 -24.777 0.690 1.00 0.00 W1 H +ATOM 8724 OH2 TIP3X2079 -13.115 -30.875 -4.302 1.00 0.00 W1 O +ATOM 8725 H1 TIP3X2079 -13.340 -30.422 -5.115 1.00 0.00 W1 H +ATOM 8726 H2 TIP3X2079 -12.285 -31.312 -4.494 1.00 0.00 W1 H +ATOM 8727 OH2 TIP3X2080 -7.020 -30.418 -9.221 1.00 0.00 W1 O +ATOM 8728 H1 TIP3X2080 -6.538 -29.904 -9.868 1.00 0.00 W1 H +ATOM 8729 H2 TIP3X2080 -6.676 -30.124 -8.377 1.00 0.00 W1 H +ATOM 8730 OH2 TIP3X2081 -12.550 -25.826 -14.068 1.00 0.00 W1 O +ATOM 8731 H1 TIP3X2081 -12.127 -25.180 -14.634 1.00 0.00 W1 H +ATOM 8732 H2 TIP3X2081 -11.838 -26.401 -13.787 1.00 0.00 W1 H +ATOM 8733 OH2 TIP3X2082 -12.025 -25.170 -4.757 1.00 0.00 W1 O +ATOM 8734 H1 TIP3X2082 -12.110 -24.378 -4.225 1.00 0.00 W1 H +ATOM 8735 H2 TIP3X2082 -11.110 -25.174 -5.037 1.00 0.00 W1 H +ATOM 8736 OH2 TIP3X2083 -12.843 -24.451 -11.571 1.00 0.00 W1 O +ATOM 8737 H1 TIP3X2083 -12.780 -24.740 -12.482 1.00 0.00 W1 H +ATOM 8738 H2 TIP3X2083 -12.067 -23.906 -11.438 1.00 0.00 W1 H +ATOM 8739 OH2 TIP3X2084 -3.822 -27.882 -13.811 1.00 0.00 W1 O +ATOM 8740 H1 TIP3X2084 -4.530 -27.393 -14.231 1.00 0.00 W1 H +ATOM 8741 H2 TIP3X2084 -3.097 -27.838 -14.435 1.00 0.00 W1 H +ATOM 8742 OH2 TIP3X2085 -15.272 -26.995 -2.723 1.00 0.00 W1 O +ATOM 8743 H1 TIP3X2085 -16.176 -26.701 -2.612 1.00 0.00 W1 H +ATOM 8744 H2 TIP3X2085 -15.131 -27.614 -2.007 1.00 0.00 W1 H +ATOM 8745 OH2 TIP3X2086 -14.128 -30.158 -6.741 1.00 0.00 W1 O +ATOM 8746 H1 TIP3X2086 -14.021 -30.859 -7.383 1.00 0.00 W1 H +ATOM 8747 H2 TIP3X2086 -13.993 -29.352 -7.240 1.00 0.00 W1 H +ATOM 8748 OH2 TIP3X2087 -2.607 -26.530 -1.853 1.00 0.00 W1 O +ATOM 8749 H1 TIP3X2087 -2.295 -25.951 -1.157 1.00 0.00 W1 H +ATOM 8750 H2 TIP3X2087 -3.551 -26.594 -1.708 1.00 0.00 W1 H +ATOM 8751 OH2 TIP3X2088 -5.564 -26.524 -1.906 1.00 0.00 W1 O +ATOM 8752 H1 TIP3X2088 -5.923 -25.956 -2.587 1.00 0.00 W1 H +ATOM 8753 H2 TIP3X2088 -5.901 -27.394 -2.117 1.00 0.00 W1 H +ATOM 8754 OH2 TIP3X2089 -7.361 -26.055 -12.041 1.00 0.00 W1 O +ATOM 8755 H1 TIP3X2089 -7.272 -25.475 -12.797 1.00 0.00 W1 H +ATOM 8756 H2 TIP3X2089 -8.130 -26.589 -12.237 1.00 0.00 W1 H +ATOM 8757 OH2 TIP3X2090 -9.058 -26.723 -14.353 1.00 0.00 W1 O +ATOM 8758 H1 TIP3X2090 -9.495 -26.531 -15.183 1.00 0.00 W1 H +ATOM 8759 H2 TIP3X2090 -9.465 -27.534 -14.050 1.00 0.00 W1 H +ATOM 8760 OH2 TIP3X2091 -8.347 -29.661 -0.564 1.00 0.00 W1 O +ATOM 8761 H1 TIP3X2091 -8.814 -30.048 0.176 1.00 0.00 W1 H +ATOM 8762 H2 TIP3X2091 -7.433 -29.629 -0.282 1.00 0.00 W1 H +ATOM 8763 OH2 TIP3X2092 -2.784 -24.317 -3.883 1.00 0.00 W1 O +ATOM 8764 H1 TIP3X2092 -2.765 -24.966 -3.180 1.00 0.00 W1 H +ATOM 8765 H2 TIP3X2092 -3.619 -24.468 -4.327 1.00 0.00 W1 H +ATOM 8766 OH2 TIP3X2093 -14.709 -27.216 -15.413 1.00 0.00 W1 O +ATOM 8767 H1 TIP3X2093 -15.466 -27.409 -14.859 1.00 0.00 W1 H +ATOM 8768 H2 TIP3X2093 -14.175 -26.618 -14.891 1.00 0.00 W1 H +ATOM 8769 OH2 TIP3X2094 -14.791 -15.723 -14.926 1.00 0.00 W1 O +ATOM 8770 H1 TIP3X2094 -14.374 -16.470 -14.497 1.00 0.00 W1 H +ATOM 8771 H2 TIP3X2094 -14.778 -15.029 -14.267 1.00 0.00 W1 H +ATOM 8772 OH2 TIP3X2095 -6.043 -27.563 -9.933 1.00 0.00 W1 O +ATOM 8773 H1 TIP3X2095 -6.380 -27.212 -10.758 1.00 0.00 W1 H +ATOM 8774 H2 TIP3X2095 -5.146 -27.830 -10.135 1.00 0.00 W1 H +ATOM 8775 OH2 TIP3X2096 -10.587 -28.252 -8.189 1.00 0.00 W1 O +ATOM 8776 H1 TIP3X2096 -11.530 -28.299 -8.348 1.00 0.00 W1 H +ATOM 8777 H2 TIP3X2096 -10.448 -27.378 -7.826 1.00 0.00 W1 H +ATOM 8778 OH2 TIP3X2097 -15.225 -27.126 -11.396 1.00 0.00 W1 O +ATOM 8779 H1 TIP3X2097 -15.499 -27.251 -10.487 1.00 0.00 W1 H +ATOM 8780 H2 TIP3X2097 -15.420 -26.208 -11.582 1.00 0.00 W1 H +ATOM 8781 OH2 TIP3X2098 -11.225 -27.799 -3.335 1.00 0.00 W1 O +ATOM 8782 H1 TIP3X2098 -11.203 -28.605 -3.851 1.00 0.00 W1 H +ATOM 8783 H2 TIP3X2098 -11.619 -27.151 -3.920 1.00 0.00 W1 H +ATOM 8784 OH2 TIP3X2099 -6.453 -24.245 -2.968 1.00 0.00 W1 O +ATOM 8785 H1 TIP3X2099 -6.041 -23.413 -2.732 1.00 0.00 W1 H +ATOM 8786 H2 TIP3X2099 -7.002 -24.034 -3.723 1.00 0.00 W1 H +ATOM 8787 OH2 TIP3X2100 -0.657 -28.878 -13.644 1.00 0.00 W1 O +ATOM 8788 H1 TIP3X2100 -0.223 -28.651 -12.822 1.00 0.00 W1 H +ATOM 8789 H2 TIP3X2100 -1.177 -29.654 -13.434 1.00 0.00 W1 H +ATOM 8790 OH2 TIP3X2101 -9.503 -22.918 -14.466 1.00 0.00 W1 O +ATOM 8791 H1 TIP3X2101 -9.792 -23.040 -13.561 1.00 0.00 W1 H +ATOM 8792 H2 TIP3X2101 -8.814 -23.572 -14.587 1.00 0.00 W1 H +ATOM 8793 OH2 TIP3X2102 -2.799 -24.402 -13.398 1.00 0.00 W1 O +ATOM 8794 H1 TIP3X2102 -3.664 -24.601 -13.039 1.00 0.00 W1 H +ATOM 8795 H2 TIP3X2102 -2.242 -24.281 -12.629 1.00 0.00 W1 H +ATOM 8796 OH2 TIP3X2103 -7.966 -24.148 -6.927 1.00 0.00 W1 O +ATOM 8797 H1 TIP3X2103 -7.869 -23.351 -6.406 1.00 0.00 W1 H +ATOM 8798 H2 TIP3X2103 -7.092 -24.538 -6.936 1.00 0.00 W1 H +ATOM 8799 OH2 TIP3X2104 -8.221 -23.766 -10.011 1.00 0.00 W1 O +ATOM 8800 H1 TIP3X2104 -7.600 -24.363 -10.429 1.00 0.00 W1 H +ATOM 8801 H2 TIP3X2104 -8.196 -24.004 -9.084 1.00 0.00 W1 H +ATOM 8802 OH2 TIP3X2105 -13.910 -24.773 -1.758 1.00 0.00 W1 O +ATOM 8803 H1 TIP3X2105 -14.114 -25.613 -2.170 1.00 0.00 W1 H +ATOM 8804 H2 TIP3X2105 -14.034 -24.127 -2.453 1.00 0.00 W1 H +ATOM 8805 OH2 TIP3X2106 -14.018 -23.900 -8.934 1.00 0.00 W1 O +ATOM 8806 H1 TIP3X2106 -13.661 -23.028 -9.104 1.00 0.00 W1 H +ATOM 8807 H2 TIP3X2106 -14.120 -24.291 -9.802 1.00 0.00 W1 H +ATOM 8808 OH2 TIP3X2107 -3.259 -21.635 -14.748 1.00 0.00 W1 O +ATOM 8809 H1 TIP3X2107 -2.553 -21.137 -15.160 1.00 0.00 W1 H +ATOM 8810 H2 TIP3X2107 -2.810 -22.266 -14.184 1.00 0.00 W1 H +ATOM 8811 OH2 TIP3X2108 -0.662 -24.288 -11.385 1.00 0.00 W1 O +ATOM 8812 H1 TIP3X2108 -0.950 -24.115 -10.489 1.00 0.00 W1 H +ATOM 8813 H2 TIP3X2108 -0.149 -23.516 -11.626 1.00 0.00 W1 H +ATOM 8814 OH2 TIP3X2109 -14.165 -25.171 -6.663 1.00 0.00 W1 O +ATOM 8815 H1 TIP3X2109 -14.070 -24.493 -7.332 1.00 0.00 W1 H +ATOM 8816 H2 TIP3X2109 -13.506 -24.952 -6.004 1.00 0.00 W1 H +ATOM 8817 OH2 TIP3X2110 -11.378 -16.664 -13.399 1.00 0.00 W1 O +ATOM 8818 H1 TIP3X2110 -11.607 -16.304 -14.256 1.00 0.00 W1 H +ATOM 8819 H2 TIP3X2110 -11.791 -17.527 -13.383 1.00 0.00 W1 H +ATOM 8820 OH2 TIP3X2111 -12.603 -21.431 -14.901 1.00 0.00 W1 O +ATOM 8821 H1 TIP3X2111 -13.418 -21.721 -15.310 1.00 0.00 W1 H +ATOM 8822 H2 TIP3X2111 -12.071 -22.225 -14.840 1.00 0.00 W1 H +ATOM 8823 OH2 TIP3X2112 -6.808 -23.770 -13.679 1.00 0.00 W1 O +ATOM 8824 H1 TIP3X2112 -5.984 -23.697 -14.162 1.00 0.00 W1 H +ATOM 8825 H2 TIP3X2112 -6.800 -23.026 -13.077 1.00 0.00 W1 H +ATOM 8826 OH2 TIP3X2113 -3.406 -29.047 -3.888 1.00 0.00 W1 O +ATOM 8827 H1 TIP3X2113 -2.601 -29.277 -4.351 1.00 0.00 W1 H +ATOM 8828 H2 TIP3X2113 -3.116 -28.494 -3.163 1.00 0.00 W1 H +ATOM 8829 OH2 TIP3X2114 -15.441 -21.945 -12.482 1.00 0.00 W1 O +ATOM 8830 H1 TIP3X2114 -15.595 -21.853 -13.422 1.00 0.00 W1 H +ATOM 8831 H2 TIP3X2114 -14.488 -21.945 -12.393 1.00 0.00 W1 H +ATOM 8832 OH2 TIP3X2115 -4.679 -22.357 -5.886 1.00 0.00 W1 O +ATOM 8833 H1 TIP3X2115 -4.134 -21.696 -5.460 1.00 0.00 W1 H +ATOM 8834 H2 TIP3X2115 -4.220 -22.558 -6.701 1.00 0.00 W1 H +ATOM 8835 OH2 TIP3X2116 -5.857 -17.384 -14.808 1.00 0.00 W1 O +ATOM 8836 H1 TIP3X2116 -5.032 -17.348 -14.324 1.00 0.00 W1 H +ATOM 8837 H2 TIP3X2116 -5.654 -17.896 -15.591 1.00 0.00 W1 H +ATOM 8838 OH2 TIP3X2117 -9.239 -19.371 -11.271 1.00 0.00 W1 O +ATOM 8839 H1 TIP3X2117 -9.947 -19.224 -11.899 1.00 0.00 W1 H +ATOM 8840 H2 TIP3X2117 -9.577 -19.027 -10.444 1.00 0.00 W1 H +ATOM 8841 OH2 TIP3X2118 -12.675 -18.459 -2.559 1.00 0.00 W1 O +ATOM 8842 H1 TIP3X2118 -11.941 -17.848 -2.624 1.00 0.00 W1 H +ATOM 8843 H2 TIP3X2118 -12.987 -18.365 -1.660 1.00 0.00 W1 H +ATOM 8844 OH2 TIP3X2119 -4.731 -30.741 -7.377 1.00 0.00 W1 O +ATOM 8845 H1 TIP3X2119 -4.399 -30.816 -8.272 1.00 0.00 W1 H +ATOM 8846 H2 TIP3X2119 -4.776 -29.799 -7.216 1.00 0.00 W1 H +ATOM 8847 OH2 TIP3X2120 -7.493 -28.612 -7.143 1.00 0.00 W1 O +ATOM 8848 H1 TIP3X2120 -7.855 -28.123 -7.882 1.00 0.00 W1 H +ATOM 8849 H2 TIP3X2120 -8.225 -28.702 -6.533 1.00 0.00 W1 H +ATOM 8850 OH2 TIP3X2121 -8.774 -30.628 -13.215 1.00 0.00 W1 O +ATOM 8851 H1 TIP3X2121 -7.919 -30.883 -12.869 1.00 0.00 W1 H +ATOM 8852 H2 TIP3X2121 -9.293 -31.432 -13.190 1.00 0.00 W1 H +ATOM 8853 OH2 TIP3X2122 -6.023 -30.784 -12.171 1.00 0.00 W1 O +ATOM 8854 H1 TIP3X2122 -5.567 -31.520 -11.763 1.00 0.00 W1 H +ATOM 8855 H2 TIP3X2122 -5.615 -30.698 -13.033 1.00 0.00 W1 H +ATOM 8856 OH2 TIP3X2123 -9.691 -28.491 -11.462 1.00 0.00 W1 O +ATOM 8857 H1 TIP3X2123 -9.034 -29.150 -11.685 1.00 0.00 W1 H +ATOM 8858 H2 TIP3X2123 -9.648 -28.422 -10.508 1.00 0.00 W1 H +ATOM 8859 OH2 TIP3X2124 -14.978 -30.152 -2.006 1.00 0.00 W1 O +ATOM 8860 H1 TIP3X2124 -14.229 -30.348 -2.570 1.00 0.00 W1 H +ATOM 8861 H2 TIP3X2124 -14.769 -30.578 -1.175 1.00 0.00 W1 H +ATOM 8862 OH2 TIP3X2125 -3.858 -17.425 -12.405 1.00 0.00 W1 O +ATOM 8863 H1 TIP3X2125 -3.713 -18.365 -12.302 1.00 0.00 W1 H +ATOM 8864 H2 TIP3X2125 -3.035 -17.093 -12.762 1.00 0.00 W1 H +ATOM 8865 OH2 TIP3X2126 -2.190 -30.659 -1.178 1.00 0.00 W1 O +ATOM 8866 H1 TIP3X2126 -2.804 -30.585 -1.908 1.00 0.00 W1 H +ATOM 8867 H2 TIP3X2126 -1.421 -30.164 -1.459 1.00 0.00 W1 H +ATOM 8868 OH2 TIP3X2127 -11.397 -16.446 -10.691 1.00 0.00 W1 O +ATOM 8869 H1 TIP3X2127 -11.403 -16.401 -11.647 1.00 0.00 W1 H +ATOM 8870 H2 TIP3X2127 -10.589 -16.000 -10.435 1.00 0.00 W1 H +ATOM 8871 OH2 TIP3X2128 -12.862 -28.185 -11.062 1.00 0.00 W1 O +ATOM 8872 H1 TIP3X2128 -13.505 -27.797 -11.654 1.00 0.00 W1 H +ATOM 8873 H2 TIP3X2128 -12.059 -27.688 -11.220 1.00 0.00 W1 H +ATOM 8874 OH2 TIP3X2129 -11.433 -19.586 -13.330 1.00 0.00 W1 O +ATOM 8875 H1 TIP3X2129 -11.472 -20.214 -14.052 1.00 0.00 W1 H +ATOM 8876 H2 TIP3X2129 -12.153 -19.840 -12.752 1.00 0.00 W1 H +ATOM 8877 OH2 TIP3X2130 -2.436 -22.567 8.047 1.00 0.00 W1 O +ATOM 8878 H1 TIP3X2130 -2.201 -22.303 7.158 1.00 0.00 W1 H +ATOM 8879 H2 TIP3X2130 -1.607 -22.831 8.446 1.00 0.00 W1 H +ATOM 8880 OH2 TIP3X2131 -10.452 -22.844 4.026 1.00 0.00 W1 O +ATOM 8881 H1 TIP3X2131 -10.422 -21.934 4.323 1.00 0.00 W1 H +ATOM 8882 H2 TIP3X2131 -9.945 -23.327 4.678 1.00 0.00 W1 H +ATOM 8883 OH2 TIP3X2132 -2.649 -18.684 6.169 1.00 0.00 W1 O +ATOM 8884 H1 TIP3X2132 -2.924 -18.194 6.944 1.00 0.00 W1 H +ATOM 8885 H2 TIP3X2132 -3.174 -19.484 6.192 1.00 0.00 W1 H +ATOM 8886 OH2 TIP3X2133 -4.132 -20.241 3.212 1.00 0.00 W1 O +ATOM 8887 H1 TIP3X2133 -3.970 -20.470 2.297 1.00 0.00 W1 H +ATOM 8888 H2 TIP3X2133 -5.061 -20.012 3.242 1.00 0.00 W1 H +ATOM 8889 OH2 TIP3X2134 -0.285 -19.709 7.997 1.00 0.00 W1 O +ATOM 8890 H1 TIP3X2134 -0.837 -19.626 7.219 1.00 0.00 W1 H +ATOM 8891 H2 TIP3X2134 -0.895 -19.926 8.702 1.00 0.00 W1 H +ATOM 8892 OH2 TIP3X2135 -13.648 -18.445 10.448 1.00 0.00 W1 O +ATOM 8893 H1 TIP3X2135 -13.242 -18.242 11.291 1.00 0.00 W1 H +ATOM 8894 H2 TIP3X2135 -14.219 -19.191 10.630 1.00 0.00 W1 H +ATOM 8895 OH2 TIP3X2136 -6.273 -16.820 9.674 1.00 0.00 W1 O +ATOM 8896 H1 TIP3X2136 -5.972 -17.721 9.796 1.00 0.00 W1 H +ATOM 8897 H2 TIP3X2136 -5.648 -16.440 9.057 1.00 0.00 W1 H +ATOM 8898 OH2 TIP3X2137 -2.841 -16.863 9.554 1.00 0.00 W1 O +ATOM 8899 H1 TIP3X2137 -3.276 -16.040 9.334 1.00 0.00 W1 H +ATOM 8900 H2 TIP3X2137 -1.912 -16.638 9.603 1.00 0.00 W1 H +ATOM 8901 OH2 TIP3X2138 -10.392 -17.289 8.683 1.00 0.00 W1 O +ATOM 8902 H1 TIP3X2138 -10.037 -16.440 8.420 1.00 0.00 W1 H +ATOM 8903 H2 TIP3X2138 -11.327 -17.229 8.487 1.00 0.00 W1 H +ATOM 8904 OH2 TIP3X2139 -5.551 -25.396 7.585 1.00 0.00 W1 O +ATOM 8905 H1 TIP3X2139 -5.629 -26.206 7.080 1.00 0.00 W1 H +ATOM 8906 H2 TIP3X2139 -4.608 -25.257 7.672 1.00 0.00 W1 H +ATOM 8907 OH2 TIP3X2140 -9.528 -29.299 9.947 1.00 0.00 W1 O +ATOM 8908 H1 TIP3X2140 -9.270 -30.036 10.500 1.00 0.00 W1 H +ATOM 8909 H2 TIP3X2140 -10.205 -29.655 9.371 1.00 0.00 W1 H +ATOM 8910 OH2 TIP3X2141 -1.284 -28.294 6.370 1.00 0.00 W1 O +ATOM 8911 H1 TIP3X2141 -1.592 -27.956 7.211 1.00 0.00 W1 H +ATOM 8912 H2 TIP3X2141 -1.217 -29.240 6.501 1.00 0.00 W1 H +ATOM 8913 OH2 TIP3X2142 -2.687 -27.099 8.324 1.00 0.00 W1 O +ATOM 8914 H1 TIP3X2142 -2.112 -27.327 9.054 1.00 0.00 W1 H +ATOM 8915 H2 TIP3X2142 -3.562 -27.353 8.618 1.00 0.00 W1 H +ATOM 8916 OH2 TIP3X2143 -9.641 -25.974 9.695 1.00 0.00 W1 O +ATOM 8917 H1 TIP3X2143 -9.137 -26.677 10.107 1.00 0.00 W1 H +ATOM 8918 H2 TIP3X2143 -8.983 -25.332 9.428 1.00 0.00 W1 H +ATOM 8919 OH2 TIP3X2144 -2.164 -24.926 6.592 1.00 0.00 W1 O +ATOM 8920 H1 TIP3X2144 -2.123 -25.826 6.916 1.00 0.00 W1 H +ATOM 8921 H2 TIP3X2144 -2.282 -24.393 7.379 1.00 0.00 W1 H +ATOM 8922 OH2 TIP3X2145 -3.479 -28.283 4.461 1.00 0.00 W1 O +ATOM 8923 H1 TIP3X2145 -2.654 -28.098 4.910 1.00 0.00 W1 H +ATOM 8924 H2 TIP3X2145 -3.403 -27.828 3.622 1.00 0.00 W1 H +ATOM 8925 OH2 TIP3X2146 -7.297 -22.311 10.532 1.00 0.00 W1 O +ATOM 8926 H1 TIP3X2146 -6.420 -22.289 10.149 1.00 0.00 W1 H +ATOM 8927 H2 TIP3X2146 -7.562 -21.393 10.578 1.00 0.00 W1 H +ATOM 8928 OH2 TIP3X2147 -8.146 -19.763 10.342 1.00 0.00 W1 O +ATOM 8929 H1 TIP3X2147 -8.171 -19.536 9.413 1.00 0.00 W1 H +ATOM 8930 H2 TIP3X2147 -9.066 -19.817 10.601 1.00 0.00 W1 H +ATOM 8931 OH2 TIP3X2148 -13.283 -27.882 7.180 1.00 0.00 W1 O +ATOM 8932 H1 TIP3X2148 -13.609 -27.002 7.371 1.00 0.00 W1 H +ATOM 8933 H2 TIP3X2148 -13.407 -27.984 6.237 1.00 0.00 W1 H +ATOM 8934 OH2 TIP3X2149 -11.127 -24.324 7.193 1.00 0.00 W1 O +ATOM 8935 H1 TIP3X2149 -11.810 -24.774 6.696 1.00 0.00 W1 H +ATOM 8936 H2 TIP3X2149 -10.642 -25.028 7.624 1.00 0.00 W1 H +ATOM 8937 OH2 TIP3X2150 -5.072 -19.400 9.589 1.00 0.00 W1 O +ATOM 8938 H1 TIP3X2150 -5.314 -19.986 8.872 1.00 0.00 W1 H +ATOM 8939 H2 TIP3X2150 -4.122 -19.489 9.662 1.00 0.00 W1 H +ATOM 8940 OH2 TIP3X2151 -0.774 -15.765 6.370 1.00 0.00 W1 O +ATOM 8941 H1 TIP3X2151 -0.779 -16.233 7.205 1.00 0.00 W1 H +ATOM 8942 H2 TIP3X2151 -1.654 -15.894 6.017 1.00 0.00 W1 H +ATOM 8943 OH2 TIP3X2152 -8.902 -19.429 7.392 1.00 0.00 W1 O +ATOM 8944 H1 TIP3X2152 -9.473 -20.148 7.661 1.00 0.00 W1 H +ATOM 8945 H2 TIP3X2152 -9.362 -18.638 7.674 1.00 0.00 W1 H +ATOM 8946 OH2 TIP3X2153 -6.680 -28.977 11.962 1.00 0.00 W1 O +ATOM 8947 H1 TIP3X2153 -7.423 -28.498 12.329 1.00 0.00 W1 H +ATOM 8948 H2 TIP3X2153 -7.061 -29.789 11.628 1.00 0.00 W1 H +ATOM 8949 OH2 TIP3X2154 -11.328 -28.272 1.764 1.00 0.00 W1 O +ATOM 8950 H1 TIP3X2154 -11.426 -28.934 2.448 1.00 0.00 W1 H +ATOM 8951 H2 TIP3X2154 -11.512 -28.741 0.949 1.00 0.00 W1 H +ATOM 8952 OH2 TIP3X2155 -0.435 -27.350 9.953 1.00 0.00 W1 O +ATOM 8953 H1 TIP3X2155 0.084 -26.682 9.506 1.00 0.00 W1 H +ATOM 8954 H2 TIP3X2155 0.007 -27.475 10.793 1.00 0.00 W1 H +ATOM 8955 OH2 TIP3X2156 -14.377 -30.998 4.113 1.00 0.00 W1 O +ATOM 8956 H1 TIP3X2156 -13.652 -30.377 4.182 1.00 0.00 W1 H +ATOM 8957 H2 TIP3X2156 -14.749 -31.031 4.995 1.00 0.00 W1 H +ATOM 8958 OH2 TIP3X2157 -9.111 -24.762 14.100 1.00 0.00 W1 O +ATOM 8959 H1 TIP3X2157 -8.247 -24.364 13.998 1.00 0.00 W1 H +ATOM 8960 H2 TIP3X2157 -8.959 -25.699 13.977 1.00 0.00 W1 H +ATOM 8961 OH2 TIP3X2158 -5.945 -19.852 6.839 1.00 0.00 W1 O +ATOM 8962 H1 TIP3X2158 -5.851 -20.715 6.436 1.00 0.00 W1 H +ATOM 8963 H2 TIP3X2158 -6.878 -19.652 6.763 1.00 0.00 W1 H +ATOM 8964 OH2 TIP3X2159 -7.333 -21.568 4.370 1.00 0.00 W1 O +ATOM 8965 H1 TIP3X2159 -7.897 -22.182 4.840 1.00 0.00 W1 H +ATOM 8966 H2 TIP3X2159 -7.807 -20.737 4.398 1.00 0.00 W1 H +ATOM 8967 OH2 TIP3X2160 -14.795 -21.055 10.827 1.00 0.00 W1 O +ATOM 8968 H1 TIP3X2160 -15.330 -21.657 10.309 1.00 0.00 W1 H +ATOM 8969 H2 TIP3X2160 -15.266 -20.969 11.656 1.00 0.00 W1 H +ATOM 8970 OH2 TIP3X2161 -3.499 -22.034 5.195 1.00 0.00 W1 O +ATOM 8971 H1 TIP3X2161 -3.555 -22.949 4.918 1.00 0.00 W1 H +ATOM 8972 H2 TIP3X2161 -3.671 -21.532 4.399 1.00 0.00 W1 H +ATOM 8973 OH2 TIP3X2162 -3.202 -21.520 12.219 1.00 0.00 W1 O +ATOM 8974 H1 TIP3X2162 -4.104 -21.436 12.527 1.00 0.00 W1 H +ATOM 8975 H2 TIP3X2162 -3.033 -22.462 12.223 1.00 0.00 W1 H +ATOM 8976 OH2 TIP3X2163 -0.835 -23.561 10.025 1.00 0.00 W1 O +ATOM 8977 H1 TIP3X2163 -0.173 -24.241 9.906 1.00 0.00 W1 H +ATOM 8978 H2 TIP3X2163 -1.551 -24.000 10.484 1.00 0.00 W1 H +ATOM 8979 OH2 TIP3X2164 -11.691 -23.874 15.169 1.00 0.00 W1 O +ATOM 8980 H1 TIP3X2164 -12.220 -24.108 14.407 1.00 0.00 W1 H +ATOM 8981 H2 TIP3X2164 -10.795 -23.826 14.835 1.00 0.00 W1 H +ATOM 8982 OH2 TIP3X2165 -10.780 -20.668 10.731 1.00 0.00 W1 O +ATOM 8983 H1 TIP3X2165 -10.825 -21.223 11.509 1.00 0.00 W1 H +ATOM 8984 H2 TIP3X2165 -11.413 -19.969 10.897 1.00 0.00 W1 H +ATOM 8985 OH2 TIP3X2166 -2.109 -19.538 10.480 1.00 0.00 W1 O +ATOM 8986 H1 TIP3X2166 -1.685 -18.770 10.864 1.00 0.00 W1 H +ATOM 8987 H2 TIP3X2166 -2.413 -20.046 11.233 1.00 0.00 W1 H +ATOM 8988 OH2 TIP3X2167 -4.021 -17.562 12.305 1.00 0.00 W1 O +ATOM 8989 H1 TIP3X2167 -4.728 -18.191 12.163 1.00 0.00 W1 H +ATOM 8990 H2 TIP3X2167 -3.692 -17.368 11.428 1.00 0.00 W1 H +ATOM 8991 OH2 TIP3X2168 -3.770 -19.026 14.702 1.00 0.00 W1 O +ATOM 8992 H1 TIP3X2168 -4.404 -19.633 14.318 1.00 0.00 W1 H +ATOM 8993 H2 TIP3X2168 -3.657 -18.346 14.038 1.00 0.00 W1 H +ATOM 8994 OH2 TIP3X2169 -0.160 -17.118 8.768 1.00 0.00 W1 O +ATOM 8995 H1 TIP3X2169 0.518 -17.276 9.425 1.00 0.00 W1 H +ATOM 8996 H2 TIP3X2169 -0.394 -17.989 8.449 1.00 0.00 W1 H +ATOM 8997 OH2 TIP3X2170 -9.603 -30.647 7.161 1.00 0.00 W1 O +ATOM 8998 H1 TIP3X2170 -9.895 -29.737 7.100 1.00 0.00 W1 H +ATOM 8999 H2 TIP3X2170 -8.772 -30.664 6.688 1.00 0.00 W1 H +ATOM 9000 OH2 TIP3X2171 -0.099 -21.937 0.252 1.00 0.00 W1 O +ATOM 9001 H1 TIP3X2171 -0.362 -22.686 -0.282 1.00 0.00 W1 H +ATOM 9002 H2 TIP3X2171 -0.354 -21.173 -0.266 1.00 0.00 W1 H +ATOM 9003 OH2 TIP3X2172 -14.151 -18.240 -0.031 1.00 0.00 W1 O +ATOM 9004 H1 TIP3X2172 -13.706 -18.789 0.614 1.00 0.00 W1 H +ATOM 9005 H2 TIP3X2172 -15.048 -18.574 -0.053 1.00 0.00 W1 H +ATOM 9006 OH2 TIP3X2173 -0.665 -20.449 13.305 1.00 0.00 W1 O +ATOM 9007 H1 TIP3X2173 -0.775 -19.500 13.364 1.00 0.00 W1 H +ATOM 9008 H2 TIP3X2173 -1.558 -20.794 13.294 1.00 0.00 W1 H +ATOM 9009 OH2 TIP3X2174 -1.399 -19.130 0.568 1.00 0.00 W1 O +ATOM 9010 H1 TIP3X2174 -1.368 -19.210 1.521 1.00 0.00 W1 H +ATOM 9011 H2 TIP3X2174 -2.232 -18.693 0.391 1.00 0.00 W1 H +ATOM 9012 OH2 TIP3X2175 -5.029 -30.836 13.452 1.00 0.00 W1 O +ATOM 9013 H1 TIP3X2175 -5.335 -30.087 12.939 1.00 0.00 W1 H +ATOM 9014 H2 TIP3X2175 -4.975 -31.553 12.820 1.00 0.00 W1 H +ATOM 9015 OH2 TIP3X2176 -10.815 -16.919 11.481 1.00 0.00 W1 O +ATOM 9016 H1 TIP3X2176 -9.967 -16.681 11.854 1.00 0.00 W1 H +ATOM 9017 H2 TIP3X2176 -10.603 -17.299 10.628 1.00 0.00 W1 H +ATOM 9018 OH2 TIP3X2177 -12.349 -28.901 14.831 1.00 0.00 W1 O +ATOM 9019 H1 TIP3X2177 -13.226 -28.811 15.205 1.00 0.00 W1 H +ATOM 9020 H2 TIP3X2177 -12.286 -28.188 14.195 1.00 0.00 W1 H +ATOM 9021 OH2 TIP3X2178 -6.151 -26.954 0.562 1.00 0.00 W1 O +ATOM 9022 H1 TIP3X2178 -6.317 -26.657 -0.333 1.00 0.00 W1 H +ATOM 9023 H2 TIP3X2178 -7.022 -27.077 0.939 1.00 0.00 W1 H +ATOM 9024 OH2 TIP3X2179 -0.754 -19.193 3.610 1.00 0.00 W1 O +ATOM 9025 H1 TIP3X2179 -0.181 -19.930 3.823 1.00 0.00 W1 H +ATOM 9026 H2 TIP3X2179 -1.085 -18.894 4.457 1.00 0.00 W1 H +ATOM 9027 OH2 TIP3X2180 -5.493 -30.157 0.539 1.00 0.00 W1 O +ATOM 9028 H1 TIP3X2180 -4.761 -29.541 0.563 1.00 0.00 W1 H +ATOM 9029 H2 TIP3X2180 -5.252 -30.790 -0.138 1.00 0.00 W1 H +ATOM 9030 OH2 TIP3X2181 -0.961 -30.064 10.804 1.00 0.00 W1 O +ATOM 9031 H1 TIP3X2181 -0.469 -30.693 11.331 1.00 0.00 W1 H +ATOM 9032 H2 TIP3X2181 -0.360 -29.821 10.098 1.00 0.00 W1 H +ATOM 9033 OH2 TIP3X2182 -13.454 -20.843 6.882 1.00 0.00 W1 O +ATOM 9034 H1 TIP3X2182 -14.122 -20.520 7.486 1.00 0.00 W1 H +ATOM 9035 H2 TIP3X2182 -12.661 -20.913 7.414 1.00 0.00 W1 H +ATOM 9036 OH2 TIP3X2183 -8.457 -19.424 13.992 1.00 0.00 W1 O +ATOM 9037 H1 TIP3X2183 -8.233 -19.802 14.843 1.00 0.00 W1 H +ATOM 9038 H2 TIP3X2183 -9.063 -20.053 13.602 1.00 0.00 W1 H +ATOM 9039 OH2 TIP3X2184 -4.977 -28.119 9.405 1.00 0.00 W1 O +ATOM 9040 H1 TIP3X2184 -4.918 -28.301 10.343 1.00 0.00 W1 H +ATOM 9041 H2 TIP3X2184 -5.916 -28.032 9.236 1.00 0.00 W1 H +ATOM 9042 OH2 TIP3X2185 -8.786 -27.463 13.584 1.00 0.00 W1 O +ATOM 9043 H1 TIP3X2185 -9.653 -27.533 13.184 1.00 0.00 W1 H +ATOM 9044 H2 TIP3X2185 -8.841 -28.003 14.372 1.00 0.00 W1 H +ATOM 9045 OH2 TIP3X2186 -1.300 -24.742 15.337 1.00 0.00 W1 O +ATOM 9046 H1 TIP3X2186 -0.505 -25.276 15.320 1.00 0.00 W1 H +ATOM 9047 H2 TIP3X2186 -1.594 -24.777 16.247 1.00 0.00 W1 H +ATOM 9048 OH2 TIP3X2187 -13.115 -30.875 11.255 1.00 0.00 W1 O +ATOM 9049 H1 TIP3X2187 -13.340 -30.422 10.443 1.00 0.00 W1 H +ATOM 9050 H2 TIP3X2187 -12.285 -31.312 11.064 1.00 0.00 W1 H +ATOM 9051 OH2 TIP3X2188 -7.020 -30.418 6.337 1.00 0.00 W1 O +ATOM 9052 H1 TIP3X2188 -6.538 -29.904 5.689 1.00 0.00 W1 H +ATOM 9053 H2 TIP3X2188 -6.676 -30.124 7.181 1.00 0.00 W1 H +ATOM 9054 OH2 TIP3X2189 -12.550 -25.826 1.490 1.00 0.00 W1 O +ATOM 9055 H1 TIP3X2189 -12.127 -25.180 0.924 1.00 0.00 W1 H +ATOM 9056 H2 TIP3X2189 -11.838 -26.401 1.771 1.00 0.00 W1 H +ATOM 9057 OH2 TIP3X2190 -12.025 -25.170 10.801 1.00 0.00 W1 O +ATOM 9058 H1 TIP3X2190 -12.110 -24.378 11.333 1.00 0.00 W1 H +ATOM 9059 H2 TIP3X2190 -11.110 -25.174 10.520 1.00 0.00 W1 H +ATOM 9060 OH2 TIP3X2191 -12.843 -24.451 3.986 1.00 0.00 W1 O +ATOM 9061 H1 TIP3X2191 -12.780 -24.740 3.076 1.00 0.00 W1 H +ATOM 9062 H2 TIP3X2191 -12.067 -23.906 4.119 1.00 0.00 W1 H +ATOM 9063 OH2 TIP3X2192 -3.822 -27.882 1.746 1.00 0.00 W1 O +ATOM 9064 H1 TIP3X2192 -4.530 -27.393 1.326 1.00 0.00 W1 H +ATOM 9065 H2 TIP3X2192 -3.097 -27.838 1.123 1.00 0.00 W1 H +ATOM 9066 OH2 TIP3X2193 -15.272 -26.995 12.834 1.00 0.00 W1 O +ATOM 9067 H1 TIP3X2193 -16.176 -26.701 12.945 1.00 0.00 W1 H +ATOM 9068 H2 TIP3X2193 -15.131 -27.614 13.551 1.00 0.00 W1 H +ATOM 9069 OH2 TIP3X2194 -14.128 -30.158 8.817 1.00 0.00 W1 O +ATOM 9070 H1 TIP3X2194 -14.021 -30.859 8.174 1.00 0.00 W1 H +ATOM 9071 H2 TIP3X2194 -13.993 -29.352 8.318 1.00 0.00 W1 H +ATOM 9072 OH2 TIP3X2195 -2.607 -26.530 13.704 1.00 0.00 W1 O +ATOM 9073 H1 TIP3X2195 -2.295 -25.951 14.400 1.00 0.00 W1 H +ATOM 9074 H2 TIP3X2195 -3.551 -26.594 13.849 1.00 0.00 W1 H +ATOM 9075 OH2 TIP3X2196 -5.564 -26.524 13.651 1.00 0.00 W1 O +ATOM 9076 H1 TIP3X2196 -5.923 -25.956 12.970 1.00 0.00 W1 H +ATOM 9077 H2 TIP3X2196 -5.901 -27.394 13.440 1.00 0.00 W1 H +ATOM 9078 OH2 TIP3X2197 -7.361 -26.055 3.517 1.00 0.00 W1 O +ATOM 9079 H1 TIP3X2197 -7.272 -25.475 2.760 1.00 0.00 W1 H +ATOM 9080 H2 TIP3X2197 -8.130 -26.589 3.320 1.00 0.00 W1 H +ATOM 9081 OH2 TIP3X2198 -9.058 -26.723 1.204 1.00 0.00 W1 O +ATOM 9082 H1 TIP3X2198 -9.495 -26.531 0.375 1.00 0.00 W1 H +ATOM 9083 H2 TIP3X2198 -9.465 -27.534 1.508 1.00 0.00 W1 H +ATOM 9084 OH2 TIP3X2199 -8.347 -29.661 14.993 1.00 0.00 W1 O +ATOM 9085 H1 TIP3X2199 -8.814 -30.048 15.734 1.00 0.00 W1 H +ATOM 9086 H2 TIP3X2199 -7.433 -29.629 15.276 1.00 0.00 W1 H +ATOM 9087 OH2 TIP3X2200 -2.784 -24.317 11.675 1.00 0.00 W1 O +ATOM 9088 H1 TIP3X2200 -2.765 -24.966 12.378 1.00 0.00 W1 H +ATOM 9089 H2 TIP3X2200 -3.619 -24.468 11.231 1.00 0.00 W1 H +ATOM 9090 OH2 TIP3X2201 -14.709 -27.216 0.144 1.00 0.00 W1 O +ATOM 9091 H1 TIP3X2201 -15.466 -27.409 0.698 1.00 0.00 W1 H +ATOM 9092 H2 TIP3X2201 -14.175 -26.618 0.667 1.00 0.00 W1 H +ATOM 9093 OH2 TIP3X2202 -14.791 -15.723 0.631 1.00 0.00 W1 O +ATOM 9094 H1 TIP3X2202 -14.374 -16.470 1.060 1.00 0.00 W1 H +ATOM 9095 H2 TIP3X2202 -14.778 -15.029 1.291 1.00 0.00 W1 H +ATOM 9096 OH2 TIP3X2203 -6.043 -27.563 5.624 1.00 0.00 W1 O +ATOM 9097 H1 TIP3X2203 -6.380 -27.212 4.800 1.00 0.00 W1 H +ATOM 9098 H2 TIP3X2203 -5.146 -27.830 5.423 1.00 0.00 W1 H +ATOM 9099 OH2 TIP3X2204 -10.587 -28.252 7.368 1.00 0.00 W1 O +ATOM 9100 H1 TIP3X2204 -11.530 -28.299 7.209 1.00 0.00 W1 H +ATOM 9101 H2 TIP3X2204 -10.448 -27.378 7.732 1.00 0.00 W1 H +ATOM 9102 OH2 TIP3X2205 -15.225 -27.126 4.162 1.00 0.00 W1 O +ATOM 9103 H1 TIP3X2205 -15.499 -27.251 5.070 1.00 0.00 W1 H +ATOM 9104 H2 TIP3X2205 -15.420 -26.208 3.976 1.00 0.00 W1 H +ATOM 9105 OH2 TIP3X2206 -11.225 -27.799 12.222 1.00 0.00 W1 O +ATOM 9106 H1 TIP3X2206 -11.203 -28.605 11.706 1.00 0.00 W1 H +ATOM 9107 H2 TIP3X2206 -11.619 -27.151 11.638 1.00 0.00 W1 H +ATOM 9108 OH2 TIP3X2207 -10.642 -21.264 8.027 1.00 0.00 W1 O +ATOM 9109 H1 TIP3X2207 -10.713 -22.199 7.839 1.00 0.00 W1 H +ATOM 9110 H2 TIP3X2207 -10.637 -21.210 8.983 1.00 0.00 W1 H +ATOM 9111 OH2 TIP3X2208 -6.453 -24.245 12.589 1.00 0.00 W1 O +ATOM 9112 H1 TIP3X2208 -6.041 -23.413 12.826 1.00 0.00 W1 H +ATOM 9113 H2 TIP3X2208 -7.002 -24.034 11.835 1.00 0.00 W1 H +ATOM 9114 OH2 TIP3X2209 -0.657 -28.878 1.914 1.00 0.00 W1 O +ATOM 9115 H1 TIP3X2209 -0.223 -28.651 2.736 1.00 0.00 W1 H +ATOM 9116 H2 TIP3X2209 -1.177 -29.654 2.123 1.00 0.00 W1 H +ATOM 9117 OH2 TIP3X2210 -9.503 -22.918 1.092 1.00 0.00 W1 O +ATOM 9118 H1 TIP3X2210 -9.792 -23.040 1.996 1.00 0.00 W1 H +ATOM 9119 H2 TIP3X2210 -8.814 -23.572 0.970 1.00 0.00 W1 H +ATOM 9120 OH2 TIP3X2211 -2.799 -24.402 2.160 1.00 0.00 W1 O +ATOM 9121 H1 TIP3X2211 -3.664 -24.601 2.519 1.00 0.00 W1 H +ATOM 9122 H2 TIP3X2211 -2.242 -24.281 2.929 1.00 0.00 W1 H +ATOM 9123 OH2 TIP3X2212 -7.966 -24.148 8.630 1.00 0.00 W1 O +ATOM 9124 H1 TIP3X2212 -7.869 -23.351 9.152 1.00 0.00 W1 H +ATOM 9125 H2 TIP3X2212 -7.092 -24.538 8.622 1.00 0.00 W1 H +ATOM 9126 OH2 TIP3X2213 -8.221 -23.766 5.546 1.00 0.00 W1 O +ATOM 9127 H1 TIP3X2213 -7.600 -24.363 5.128 1.00 0.00 W1 H +ATOM 9128 H2 TIP3X2213 -8.196 -24.004 6.473 1.00 0.00 W1 H +ATOM 9129 OH2 TIP3X2214 -5.326 -22.151 14.482 1.00 0.00 W1 O +ATOM 9130 H1 TIP3X2214 -6.004 -21.867 15.095 1.00 0.00 W1 H +ATOM 9131 H2 TIP3X2214 -4.528 -22.191 15.009 1.00 0.00 W1 H +ATOM 9132 OH2 TIP3X2215 -12.817 -22.735 12.178 1.00 0.00 W1 O +ATOM 9133 H1 TIP3X2215 -12.300 -22.330 12.874 1.00 0.00 W1 H +ATOM 9134 H2 TIP3X2215 -13.199 -21.998 11.703 1.00 0.00 W1 H +ATOM 9135 OH2 TIP3X2216 -13.910 -24.773 13.800 1.00 0.00 W1 O +ATOM 9136 H1 TIP3X2216 -14.114 -25.613 13.387 1.00 0.00 W1 H +ATOM 9137 H2 TIP3X2216 -14.034 -24.127 13.104 1.00 0.00 W1 H +ATOM 9138 OH2 TIP3X2217 -14.018 -23.900 6.623 1.00 0.00 W1 O +ATOM 9139 H1 TIP3X2217 -13.661 -23.028 6.453 1.00 0.00 W1 H +ATOM 9140 H2 TIP3X2217 -14.120 -24.291 5.755 1.00 0.00 W1 H +ATOM 9141 OH2 TIP3X2218 -3.259 -21.635 0.810 1.00 0.00 W1 O +ATOM 9142 H1 TIP3X2218 -2.553 -21.137 0.398 1.00 0.00 W1 H +ATOM 9143 H2 TIP3X2218 -2.810 -22.266 1.373 1.00 0.00 W1 H +ATOM 9144 OH2 TIP3X2219 -0.662 -24.288 4.172 1.00 0.00 W1 O +ATOM 9145 H1 TIP3X2219 -0.950 -24.115 5.069 1.00 0.00 W1 H +ATOM 9146 H2 TIP3X2219 -0.149 -23.516 3.932 1.00 0.00 W1 H +ATOM 9147 OH2 TIP3X2220 -14.165 -25.171 8.894 1.00 0.00 W1 O +ATOM 9148 H1 TIP3X2220 -14.070 -24.493 8.226 1.00 0.00 W1 H +ATOM 9149 H2 TIP3X2220 -13.506 -24.952 9.553 1.00 0.00 W1 H +ATOM 9150 OH2 TIP3X2221 -12.603 -21.431 0.656 1.00 0.00 W1 O +ATOM 9151 H1 TIP3X2221 -13.418 -21.721 0.248 1.00 0.00 W1 H +ATOM 9152 H2 TIP3X2221 -12.071 -22.225 0.718 1.00 0.00 W1 H +ATOM 9153 OH2 TIP3X2222 -11.185 -20.592 13.731 1.00 0.00 W1 O +ATOM 9154 H1 TIP3X2222 -11.758 -19.990 13.257 1.00 0.00 W1 H +ATOM 9155 H2 TIP3X2222 -11.659 -20.788 14.539 1.00 0.00 W1 H +ATOM 9156 OH2 TIP3X2223 -8.109 -15.849 11.422 1.00 0.00 W1 O +ATOM 9157 H1 TIP3X2223 -7.791 -16.143 12.275 1.00 0.00 W1 H +ATOM 9158 H2 TIP3X2223 -7.676 -16.426 10.793 1.00 0.00 W1 H +ATOM 9159 OH2 TIP3X2224 -6.825 -18.925 2.807 1.00 0.00 W1 O +ATOM 9160 H1 TIP3X2224 -6.566 -18.139 2.325 1.00 0.00 W1 H +ATOM 9161 H2 TIP3X2224 -7.394 -18.601 3.505 1.00 0.00 W1 H +ATOM 9162 OH2 TIP3X2225 -6.808 -23.770 1.878 1.00 0.00 W1 O +ATOM 9163 H1 TIP3X2225 -5.984 -23.697 1.396 1.00 0.00 W1 H +ATOM 9164 H2 TIP3X2225 -6.800 -23.026 2.480 1.00 0.00 W1 H +ATOM 9165 OH2 TIP3X2226 -3.406 -29.047 11.670 1.00 0.00 W1 O +ATOM 9166 H1 TIP3X2226 -2.601 -29.277 11.206 1.00 0.00 W1 H +ATOM 9167 H2 TIP3X2226 -3.116 -28.494 12.395 1.00 0.00 W1 H +ATOM 9168 OH2 TIP3X2227 -15.441 -21.945 3.076 1.00 0.00 W1 O +ATOM 9169 H1 TIP3X2227 -15.595 -21.853 2.136 1.00 0.00 W1 H +ATOM 9170 H2 TIP3X2227 -14.488 -21.945 3.165 1.00 0.00 W1 H +ATOM 9171 OH2 TIP3X2228 -4.679 -22.357 9.672 1.00 0.00 W1 O +ATOM 9172 H1 TIP3X2228 -4.134 -21.696 10.098 1.00 0.00 W1 H +ATOM 9173 H2 TIP3X2228 -4.220 -22.558 8.856 1.00 0.00 W1 H +ATOM 9174 OH2 TIP3X2229 -5.865 -19.596 12.400 1.00 0.00 W1 O +ATOM 9175 H1 TIP3X2229 -6.685 -19.349 12.826 1.00 0.00 W1 H +ATOM 9176 H2 TIP3X2229 -6.094 -19.692 11.476 1.00 0.00 W1 H +ATOM 9177 OH2 TIP3X2230 -12.675 -18.459 12.998 1.00 0.00 W1 O +ATOM 9178 H1 TIP3X2230 -11.941 -17.848 12.933 1.00 0.00 W1 H +ATOM 9179 H2 TIP3X2230 -12.987 -18.365 13.898 1.00 0.00 W1 H +ATOM 9180 OH2 TIP3X2231 -13.085 -16.755 7.100 1.00 0.00 W1 O +ATOM 9181 H1 TIP3X2231 -13.671 -17.496 6.946 1.00 0.00 W1 H +ATOM 9182 H2 TIP3X2231 -12.642 -16.621 6.261 1.00 0.00 W1 H +ATOM 9183 OH2 TIP3X2232 -4.731 -30.741 8.180 1.00 0.00 W1 O +ATOM 9184 H1 TIP3X2232 -4.399 -30.816 7.286 1.00 0.00 W1 H +ATOM 9185 H2 TIP3X2232 -4.776 -29.799 8.341 1.00 0.00 W1 H +ATOM 9186 OH2 TIP3X2233 -7.493 -28.612 8.415 1.00 0.00 W1 O +ATOM 9187 H1 TIP3X2233 -7.855 -28.123 7.676 1.00 0.00 W1 H +ATOM 9188 H2 TIP3X2233 -8.225 -28.702 9.025 1.00 0.00 W1 H +ATOM 9189 OH2 TIP3X2234 -8.774 -30.628 2.343 1.00 0.00 W1 O +ATOM 9190 H1 TIP3X2234 -7.919 -30.883 2.688 1.00 0.00 W1 H +ATOM 9191 H2 TIP3X2234 -9.293 -31.432 2.368 1.00 0.00 W1 H +ATOM 9192 OH2 TIP3X2235 -6.023 -30.784 3.386 1.00 0.00 W1 O +ATOM 9193 H1 TIP3X2235 -5.567 -31.520 3.795 1.00 0.00 W1 H +ATOM 9194 H2 TIP3X2235 -5.615 -30.698 2.524 1.00 0.00 W1 H +ATOM 9195 OH2 TIP3X2236 -11.383 -16.206 14.841 1.00 0.00 W1 O +ATOM 9196 H1 TIP3X2236 -11.634 -15.449 14.311 1.00 0.00 W1 H +ATOM 9197 H2 TIP3X2236 -10.472 -16.375 14.602 1.00 0.00 W1 H +ATOM 9198 OH2 TIP3X2237 -8.637 -16.609 14.051 1.00 0.00 W1 O +ATOM 9199 H1 TIP3X2237 -8.420 -17.501 14.321 1.00 0.00 W1 H +ATOM 9200 H2 TIP3X2237 -8.030 -16.055 14.540 1.00 0.00 W1 H +ATOM 9201 OH2 TIP3X2238 -9.691 -28.491 4.095 1.00 0.00 W1 O +ATOM 9202 H1 TIP3X2238 -9.034 -29.150 3.873 1.00 0.00 W1 H +ATOM 9203 H2 TIP3X2238 -9.648 -28.422 5.049 1.00 0.00 W1 H +ATOM 9204 OH2 TIP3X2239 -14.978 -30.152 13.551 1.00 0.00 W1 O +ATOM 9205 H1 TIP3X2239 -14.229 -30.348 12.987 1.00 0.00 W1 H +ATOM 9206 H2 TIP3X2239 -14.769 -30.578 14.383 1.00 0.00 W1 H +ATOM 9207 OH2 TIP3X2240 -2.190 -30.659 14.380 1.00 0.00 W1 O +ATOM 9208 H1 TIP3X2240 -2.804 -30.585 13.649 1.00 0.00 W1 H +ATOM 9209 H2 TIP3X2240 -1.421 -30.164 14.098 1.00 0.00 W1 H +ATOM 9210 OH2 TIP3X2241 -0.488 -17.507 12.816 1.00 0.00 W1 O +ATOM 9211 H1 TIP3X2241 -1.210 -16.956 13.117 1.00 0.00 W1 H +ATOM 9212 H2 TIP3X2241 0.300 -17.008 13.030 1.00 0.00 W1 H +ATOM 9213 OH2 TIP3X2242 -12.862 -28.185 4.496 1.00 0.00 W1 O +ATOM 9214 H1 TIP3X2242 -13.505 -27.797 3.903 1.00 0.00 W1 H +ATOM 9215 H2 TIP3X2242 -12.059 -27.688 4.338 1.00 0.00 W1 H +ATOM 9216 OH2 TIP3X2243 -13.539 -20.058 19.866 1.00 0.00 W1 O +ATOM 9217 H1 TIP3X2243 -13.356 -20.134 20.803 1.00 0.00 W1 H +ATOM 9218 H2 TIP3X2243 -13.563 -19.116 19.702 1.00 0.00 W1 H +ATOM 9219 OH2 TIP3X2244 -2.436 -22.567 23.605 1.00 0.00 W1 O +ATOM 9220 H1 TIP3X2244 -2.201 -22.303 22.715 1.00 0.00 W1 H +ATOM 9221 H2 TIP3X2244 -1.607 -22.831 24.003 1.00 0.00 W1 H +ATOM 9222 OH2 TIP3X2245 -10.452 -22.844 19.583 1.00 0.00 W1 O +ATOM 9223 H1 TIP3X2245 -10.422 -21.934 19.880 1.00 0.00 W1 H +ATOM 9224 H2 TIP3X2245 -9.945 -23.327 20.235 1.00 0.00 W1 H +ATOM 9225 OH2 TIP3X2246 -2.649 -18.684 21.727 1.00 0.00 W1 O +ATOM 9226 H1 TIP3X2246 -2.924 -18.194 22.502 1.00 0.00 W1 H +ATOM 9227 H2 TIP3X2246 -3.174 -19.484 21.750 1.00 0.00 W1 H +ATOM 9228 OH2 TIP3X2247 -4.132 -20.241 18.770 1.00 0.00 W1 O +ATOM 9229 H1 TIP3X2247 -3.970 -20.470 17.855 1.00 0.00 W1 H +ATOM 9230 H2 TIP3X2247 -5.061 -20.012 18.799 1.00 0.00 W1 H +ATOM 9231 OH2 TIP3X2248 -0.285 -19.709 23.554 1.00 0.00 W1 O +ATOM 9232 H1 TIP3X2248 -0.837 -19.626 22.777 1.00 0.00 W1 H +ATOM 9233 H2 TIP3X2248 -0.895 -19.926 24.259 1.00 0.00 W1 H +ATOM 9234 OH2 TIP3X2249 -13.648 -18.445 26.005 1.00 0.00 W1 O +ATOM 9235 H1 TIP3X2249 -13.242 -18.242 26.848 1.00 0.00 W1 H +ATOM 9236 H2 TIP3X2249 -14.219 -19.191 26.188 1.00 0.00 W1 H +ATOM 9237 OH2 TIP3X2250 -6.273 -16.820 25.231 1.00 0.00 W1 O +ATOM 9238 H1 TIP3X2250 -5.972 -17.721 25.353 1.00 0.00 W1 H +ATOM 9239 H2 TIP3X2250 -5.648 -16.440 24.614 1.00 0.00 W1 H +ATOM 9240 OH2 TIP3X2251 -2.841 -16.863 25.111 1.00 0.00 W1 O +ATOM 9241 H1 TIP3X2251 -3.276 -16.040 24.892 1.00 0.00 W1 H +ATOM 9242 H2 TIP3X2251 -1.912 -16.638 25.161 1.00 0.00 W1 H +ATOM 9243 OH2 TIP3X2252 -10.392 -17.289 24.241 1.00 0.00 W1 O +ATOM 9244 H1 TIP3X2252 -10.037 -16.440 23.977 1.00 0.00 W1 H +ATOM 9245 H2 TIP3X2252 -11.327 -17.229 24.045 1.00 0.00 W1 H +ATOM 9246 OH2 TIP3X2253 -5.551 -25.396 23.142 1.00 0.00 W1 O +ATOM 9247 H1 TIP3X2253 -5.629 -26.206 22.638 1.00 0.00 W1 H +ATOM 9248 H2 TIP3X2253 -4.608 -25.257 23.230 1.00 0.00 W1 H +ATOM 9249 OH2 TIP3X2254 -9.528 -29.299 25.504 1.00 0.00 W1 O +ATOM 9250 H1 TIP3X2254 -9.270 -30.036 26.057 1.00 0.00 W1 H +ATOM 9251 H2 TIP3X2254 -10.205 -29.655 24.929 1.00 0.00 W1 H +ATOM 9252 OH2 TIP3X2255 -1.284 -28.294 21.927 1.00 0.00 W1 O +ATOM 9253 H1 TIP3X2255 -1.592 -27.956 22.768 1.00 0.00 W1 H +ATOM 9254 H2 TIP3X2255 -1.217 -29.240 22.059 1.00 0.00 W1 H +ATOM 9255 OH2 TIP3X2256 -2.687 -27.099 23.881 1.00 0.00 W1 O +ATOM 9256 H1 TIP3X2256 -2.112 -27.327 24.612 1.00 0.00 W1 H +ATOM 9257 H2 TIP3X2256 -3.562 -27.353 24.176 1.00 0.00 W1 H +ATOM 9258 OH2 TIP3X2257 -9.641 -25.974 25.252 1.00 0.00 W1 O +ATOM 9259 H1 TIP3X2257 -9.137 -26.677 25.664 1.00 0.00 W1 H +ATOM 9260 H2 TIP3X2257 -8.983 -25.332 24.986 1.00 0.00 W1 H +ATOM 9261 OH2 TIP3X2258 -2.164 -24.926 22.150 1.00 0.00 W1 O +ATOM 9262 H1 TIP3X2258 -2.123 -25.826 22.474 1.00 0.00 W1 H +ATOM 9263 H2 TIP3X2258 -2.282 -24.393 22.936 1.00 0.00 W1 H +ATOM 9264 OH2 TIP3X2259 -3.479 -28.283 20.018 1.00 0.00 W1 O +ATOM 9265 H1 TIP3X2259 -2.654 -28.098 20.467 1.00 0.00 W1 H +ATOM 9266 H2 TIP3X2259 -3.403 -27.828 19.179 1.00 0.00 W1 H +ATOM 9267 OH2 TIP3X2260 -7.297 -22.311 26.090 1.00 0.00 W1 O +ATOM 9268 H1 TIP3X2260 -6.420 -22.289 25.707 1.00 0.00 W1 H +ATOM 9269 H2 TIP3X2260 -7.562 -21.393 26.136 1.00 0.00 W1 H +ATOM 9270 OH2 TIP3X2261 -8.146 -19.763 25.900 1.00 0.00 W1 O +ATOM 9271 H1 TIP3X2261 -8.171 -19.536 24.970 1.00 0.00 W1 H +ATOM 9272 H2 TIP3X2261 -9.066 -19.817 26.158 1.00 0.00 W1 H +ATOM 9273 OH2 TIP3X2262 -13.283 -27.882 22.738 1.00 0.00 W1 O +ATOM 9274 H1 TIP3X2262 -13.609 -27.002 22.929 1.00 0.00 W1 H +ATOM 9275 H2 TIP3X2262 -13.407 -27.984 21.794 1.00 0.00 W1 H +ATOM 9276 OH2 TIP3X2263 -11.127 -24.324 22.750 1.00 0.00 W1 O +ATOM 9277 H1 TIP3X2263 -11.810 -24.774 22.253 1.00 0.00 W1 H +ATOM 9278 H2 TIP3X2263 -10.642 -25.028 23.182 1.00 0.00 W1 H +ATOM 9279 OH2 TIP3X2264 -5.072 -19.400 25.147 1.00 0.00 W1 O +ATOM 9280 H1 TIP3X2264 -5.314 -19.986 24.430 1.00 0.00 W1 H +ATOM 9281 H2 TIP3X2264 -4.122 -19.489 25.219 1.00 0.00 W1 H +ATOM 9282 OH2 TIP3X2265 -0.774 -15.765 21.927 1.00 0.00 W1 O +ATOM 9283 H1 TIP3X2265 -0.779 -16.233 22.762 1.00 0.00 W1 H +ATOM 9284 H2 TIP3X2265 -1.654 -15.894 21.574 1.00 0.00 W1 H +ATOM 9285 OH2 TIP3X2266 -8.902 -19.429 22.949 1.00 0.00 W1 O +ATOM 9286 H1 TIP3X2266 -9.473 -20.148 23.218 1.00 0.00 W1 H +ATOM 9287 H2 TIP3X2266 -9.362 -18.638 23.232 1.00 0.00 W1 H +ATOM 9288 OH2 TIP3X2267 -6.680 -28.977 27.520 1.00 0.00 W1 O +ATOM 9289 H1 TIP3X2267 -7.423 -28.498 27.887 1.00 0.00 W1 H +ATOM 9290 H2 TIP3X2267 -7.061 -29.789 27.185 1.00 0.00 W1 H +ATOM 9291 OH2 TIP3X2268 -11.328 -28.272 17.321 1.00 0.00 W1 O +ATOM 9292 H1 TIP3X2268 -11.426 -28.934 18.006 1.00 0.00 W1 H +ATOM 9293 H2 TIP3X2268 -11.512 -28.741 16.507 1.00 0.00 W1 H +ATOM 9294 OH2 TIP3X2269 -0.435 -27.350 25.511 1.00 0.00 W1 O +ATOM 9295 H1 TIP3X2269 0.084 -26.682 25.063 1.00 0.00 W1 H +ATOM 9296 H2 TIP3X2269 0.007 -27.475 26.351 1.00 0.00 W1 H +ATOM 9297 OH2 TIP3X2270 -14.377 -30.998 19.671 1.00 0.00 W1 O +ATOM 9298 H1 TIP3X2270 -13.652 -30.377 19.740 1.00 0.00 W1 H +ATOM 9299 H2 TIP3X2270 -14.749 -31.031 20.552 1.00 0.00 W1 H +ATOM 9300 OH2 TIP3X2271 -9.111 -24.762 29.657 1.00 0.00 W1 O +ATOM 9301 H1 TIP3X2271 -8.247 -24.364 29.556 1.00 0.00 W1 H +ATOM 9302 H2 TIP3X2271 -8.959 -25.699 29.534 1.00 0.00 W1 H +ATOM 9303 OH2 TIP3X2272 -5.945 -19.852 22.397 1.00 0.00 W1 O +ATOM 9304 H1 TIP3X2272 -5.851 -20.715 21.993 1.00 0.00 W1 H +ATOM 9305 H2 TIP3X2272 -6.878 -19.652 22.321 1.00 0.00 W1 H +ATOM 9306 OH2 TIP3X2273 -7.333 -21.568 19.928 1.00 0.00 W1 O +ATOM 9307 H1 TIP3X2273 -7.897 -22.182 20.397 1.00 0.00 W1 H +ATOM 9308 H2 TIP3X2273 -7.807 -20.737 19.956 1.00 0.00 W1 H +ATOM 9309 OH2 TIP3X2274 -14.795 -21.055 26.385 1.00 0.00 W1 O +ATOM 9310 H1 TIP3X2274 -15.330 -21.657 25.867 1.00 0.00 W1 H +ATOM 9311 H2 TIP3X2274 -15.266 -20.969 27.214 1.00 0.00 W1 H +ATOM 9312 OH2 TIP3X2275 -3.499 -22.034 20.752 1.00 0.00 W1 O +ATOM 9313 H1 TIP3X2275 -3.555 -22.949 20.476 1.00 0.00 W1 H +ATOM 9314 H2 TIP3X2275 -3.671 -21.532 19.956 1.00 0.00 W1 H +ATOM 9315 OH2 TIP3X2276 -3.202 -21.520 27.777 1.00 0.00 W1 O +ATOM 9316 H1 TIP3X2276 -4.104 -21.436 28.084 1.00 0.00 W1 H +ATOM 9317 H2 TIP3X2276 -3.033 -22.462 27.780 1.00 0.00 W1 H +ATOM 9318 OH2 TIP3X2277 -0.835 -23.561 25.582 1.00 0.00 W1 O +ATOM 9319 H1 TIP3X2277 -0.173 -24.241 25.463 1.00 0.00 W1 H +ATOM 9320 H2 TIP3X2277 -1.551 -24.000 26.041 1.00 0.00 W1 H +ATOM 9321 OH2 TIP3X2278 -11.691 -23.874 30.727 1.00 0.00 W1 O +ATOM 9322 H1 TIP3X2278 -12.220 -24.108 29.964 1.00 0.00 W1 H +ATOM 9323 H2 TIP3X2278 -10.795 -23.826 30.392 1.00 0.00 W1 H +ATOM 9324 OH2 TIP3X2279 -10.780 -20.668 26.288 1.00 0.00 W1 O +ATOM 9325 H1 TIP3X2279 -10.825 -21.223 27.067 1.00 0.00 W1 H +ATOM 9326 H2 TIP3X2279 -11.413 -19.969 26.454 1.00 0.00 W1 H +ATOM 9327 OH2 TIP3X2280 -2.109 -19.538 26.038 1.00 0.00 W1 O +ATOM 9328 H1 TIP3X2280 -1.685 -18.770 26.422 1.00 0.00 W1 H +ATOM 9329 H2 TIP3X2280 -2.413 -20.046 26.790 1.00 0.00 W1 H +ATOM 9330 OH2 TIP3X2281 -4.021 -17.562 27.863 1.00 0.00 W1 O +ATOM 9331 H1 TIP3X2281 -4.728 -18.191 27.720 1.00 0.00 W1 H +ATOM 9332 H2 TIP3X2281 -3.692 -17.368 26.985 1.00 0.00 W1 H +ATOM 9333 OH2 TIP3X2282 -3.770 -19.026 30.259 1.00 0.00 W1 O +ATOM 9334 H1 TIP3X2282 -4.404 -19.633 29.875 1.00 0.00 W1 H +ATOM 9335 H2 TIP3X2282 -3.657 -18.346 29.595 1.00 0.00 W1 H +ATOM 9336 OH2 TIP3X2283 -0.160 -17.118 24.326 1.00 0.00 W1 O +ATOM 9337 H1 TIP3X2283 0.518 -17.276 24.982 1.00 0.00 W1 H +ATOM 9338 H2 TIP3X2283 -0.394 -17.989 24.007 1.00 0.00 W1 H +ATOM 9339 OH2 TIP3X2284 -9.603 -30.647 22.718 1.00 0.00 W1 O +ATOM 9340 H1 TIP3X2284 -9.895 -29.737 22.657 1.00 0.00 W1 H +ATOM 9341 H2 TIP3X2284 -8.772 -30.664 22.245 1.00 0.00 W1 H +ATOM 9342 OH2 TIP3X2285 -7.479 -20.700 16.373 1.00 0.00 W1 O +ATOM 9343 H1 TIP3X2285 -8.175 -21.322 16.587 1.00 0.00 W1 H +ATOM 9344 H2 TIP3X2285 -7.497 -20.064 17.088 1.00 0.00 W1 H +ATOM 9345 OH2 TIP3X2286 -0.099 -21.937 15.809 1.00 0.00 W1 O +ATOM 9346 H1 TIP3X2286 -0.362 -22.686 15.275 1.00 0.00 W1 H +ATOM 9347 H2 TIP3X2286 -0.354 -21.173 15.292 1.00 0.00 W1 H +ATOM 9348 OH2 TIP3X2287 -14.151 -18.240 15.526 1.00 0.00 W1 O +ATOM 9349 H1 TIP3X2287 -13.706 -18.789 16.172 1.00 0.00 W1 H +ATOM 9350 H2 TIP3X2287 -15.048 -18.574 15.505 1.00 0.00 W1 H +ATOM 9351 OH2 TIP3X2288 -2.058 -16.111 16.785 1.00 0.00 W1 O +ATOM 9352 H1 TIP3X2288 -1.173 -16.439 16.626 1.00 0.00 W1 H +ATOM 9353 H2 TIP3X2288 -2.288 -15.643 15.982 1.00 0.00 W1 H +ATOM 9354 OH2 TIP3X2289 -0.665 -20.449 28.862 1.00 0.00 W1 O +ATOM 9355 H1 TIP3X2289 -0.775 -19.500 28.921 1.00 0.00 W1 H +ATOM 9356 H2 TIP3X2289 -1.558 -20.794 28.852 1.00 0.00 W1 H +ATOM 9357 OH2 TIP3X2290 -13.979 -17.623 18.481 1.00 0.00 W1 O +ATOM 9358 H1 TIP3X2290 -14.047 -16.787 18.941 1.00 0.00 W1 H +ATOM 9359 H2 TIP3X2290 -14.875 -17.962 18.464 1.00 0.00 W1 H +ATOM 9360 OH2 TIP3X2291 -1.399 -19.130 16.125 1.00 0.00 W1 O +ATOM 9361 H1 TIP3X2291 -1.368 -19.210 17.079 1.00 0.00 W1 H +ATOM 9362 H2 TIP3X2291 -2.232 -18.693 15.948 1.00 0.00 W1 H +ATOM 9363 OH2 TIP3X2292 -5.029 -30.836 29.009 1.00 0.00 W1 O +ATOM 9364 H1 TIP3X2292 -5.335 -30.087 28.497 1.00 0.00 W1 H +ATOM 9365 H2 TIP3X2292 -4.975 -31.553 28.377 1.00 0.00 W1 H +ATOM 9366 OH2 TIP3X2293 -10.815 -16.919 27.038 1.00 0.00 W1 O +ATOM 9367 H1 TIP3X2293 -9.967 -16.681 27.412 1.00 0.00 W1 H +ATOM 9368 H2 TIP3X2293 -10.603 -17.299 26.185 1.00 0.00 W1 H +ATOM 9369 OH2 TIP3X2294 -12.349 -28.901 30.389 1.00 0.00 W1 O +ATOM 9370 H1 TIP3X2294 -13.226 -28.811 30.763 1.00 0.00 W1 H +ATOM 9371 H2 TIP3X2294 -12.286 -28.188 29.752 1.00 0.00 W1 H +ATOM 9372 OH2 TIP3X2295 -6.151 -26.954 16.119 1.00 0.00 W1 O +ATOM 9373 H1 TIP3X2295 -6.317 -26.657 15.224 1.00 0.00 W1 H +ATOM 9374 H2 TIP3X2295 -7.022 -27.077 16.496 1.00 0.00 W1 H +ATOM 9375 OH2 TIP3X2296 -0.754 -19.193 19.167 1.00 0.00 W1 O +ATOM 9376 H1 TIP3X2296 -0.181 -19.930 19.380 1.00 0.00 W1 H +ATOM 9377 H2 TIP3X2296 -1.085 -18.894 20.014 1.00 0.00 W1 H +ATOM 9378 OH2 TIP3X2297 -5.493 -30.157 16.096 1.00 0.00 W1 O +ATOM 9379 H1 TIP3X2297 -4.761 -29.541 16.121 1.00 0.00 W1 H +ATOM 9380 H2 TIP3X2297 -5.252 -30.790 15.420 1.00 0.00 W1 H +ATOM 9381 OH2 TIP3X2298 -0.961 -30.064 26.361 1.00 0.00 W1 O +ATOM 9382 H1 TIP3X2298 -0.469 -30.693 26.889 1.00 0.00 W1 H +ATOM 9383 H2 TIP3X2298 -0.360 -29.821 25.656 1.00 0.00 W1 H +ATOM 9384 OH2 TIP3X2299 -13.454 -20.843 22.439 1.00 0.00 W1 O +ATOM 9385 H1 TIP3X2299 -14.122 -20.520 23.044 1.00 0.00 W1 H +ATOM 9386 H2 TIP3X2299 -12.661 -20.913 22.971 1.00 0.00 W1 H +ATOM 9387 OH2 TIP3X2300 -8.457 -19.424 29.549 1.00 0.00 W1 O +ATOM 9388 H1 TIP3X2300 -8.233 -19.802 30.400 1.00 0.00 W1 H +ATOM 9389 H2 TIP3X2300 -9.063 -20.053 29.159 1.00 0.00 W1 H +ATOM 9390 OH2 TIP3X2301 -4.977 -28.119 24.962 1.00 0.00 W1 O +ATOM 9391 H1 TIP3X2301 -4.918 -28.301 25.900 1.00 0.00 W1 H +ATOM 9392 H2 TIP3X2301 -5.916 -28.032 24.794 1.00 0.00 W1 H +ATOM 9393 OH2 TIP3X2302 -8.786 -27.463 29.141 1.00 0.00 W1 O +ATOM 9394 H1 TIP3X2302 -9.653 -27.533 28.741 1.00 0.00 W1 H +ATOM 9395 H2 TIP3X2302 -8.841 -28.003 29.929 1.00 0.00 W1 H +ATOM 9396 OH2 TIP3X2303 -1.300 -24.742 30.894 1.00 0.00 W1 O +ATOM 9397 H1 TIP3X2303 -0.505 -25.276 30.878 1.00 0.00 W1 H +ATOM 9398 H2 TIP3X2303 -1.594 -24.777 31.804 1.00 0.00 W1 H +ATOM 9399 OH2 TIP3X2304 -13.115 -30.875 26.813 1.00 0.00 W1 O +ATOM 9400 H1 TIP3X2304 -13.340 -30.422 26.000 1.00 0.00 W1 H +ATOM 9401 H2 TIP3X2304 -12.285 -31.312 26.621 1.00 0.00 W1 H +ATOM 9402 OH2 TIP3X2305 -7.020 -30.418 21.894 1.00 0.00 W1 O +ATOM 9403 H1 TIP3X2305 -6.538 -29.904 21.247 1.00 0.00 W1 H +ATOM 9404 H2 TIP3X2305 -6.676 -30.124 22.738 1.00 0.00 W1 H +ATOM 9405 OH2 TIP3X2306 -12.550 -25.826 17.047 1.00 0.00 W1 O +ATOM 9406 H1 TIP3X2306 -12.127 -25.180 16.481 1.00 0.00 W1 H +ATOM 9407 H2 TIP3X2306 -11.838 -26.401 17.328 1.00 0.00 W1 H +ATOM 9408 OH2 TIP3X2307 -12.025 -25.170 26.358 1.00 0.00 W1 O +ATOM 9409 H1 TIP3X2307 -12.110 -24.378 26.890 1.00 0.00 W1 H +ATOM 9410 H2 TIP3X2307 -11.110 -25.174 26.078 1.00 0.00 W1 H +ATOM 9411 OH2 TIP3X2308 -12.843 -24.451 19.544 1.00 0.00 W1 O +ATOM 9412 H1 TIP3X2308 -12.780 -24.740 18.633 1.00 0.00 W1 H +ATOM 9413 H2 TIP3X2308 -12.067 -23.906 19.677 1.00 0.00 W1 H +ATOM 9414 OH2 TIP3X2309 -3.822 -27.882 17.304 1.00 0.00 W1 O +ATOM 9415 H1 TIP3X2309 -4.530 -27.393 16.884 1.00 0.00 W1 H +ATOM 9416 H2 TIP3X2309 -3.097 -27.838 16.680 1.00 0.00 W1 H +ATOM 9417 OH2 TIP3X2310 -15.272 -26.995 28.392 1.00 0.00 W1 O +ATOM 9418 H1 TIP3X2310 -16.176 -26.701 28.503 1.00 0.00 W1 H +ATOM 9419 H2 TIP3X2310 -15.131 -27.614 29.108 1.00 0.00 W1 H +ATOM 9420 OH2 TIP3X2311 -14.128 -30.158 24.374 1.00 0.00 W1 O +ATOM 9421 H1 TIP3X2311 -14.021 -30.859 23.732 1.00 0.00 W1 H +ATOM 9422 H2 TIP3X2311 -13.993 -29.352 23.875 1.00 0.00 W1 H +ATOM 9423 OH2 TIP3X2312 -2.607 -26.530 29.262 1.00 0.00 W1 O +ATOM 9424 H1 TIP3X2312 -2.295 -25.951 29.958 1.00 0.00 W1 H +ATOM 9425 H2 TIP3X2312 -3.551 -26.594 29.407 1.00 0.00 W1 H +ATOM 9426 OH2 TIP3X2313 -5.564 -26.524 29.209 1.00 0.00 W1 O +ATOM 9427 H1 TIP3X2313 -5.923 -25.956 28.528 1.00 0.00 W1 H +ATOM 9428 H2 TIP3X2313 -5.901 -27.394 28.998 1.00 0.00 W1 H +ATOM 9429 OH2 TIP3X2314 -7.361 -26.055 19.074 1.00 0.00 W1 O +ATOM 9430 H1 TIP3X2314 -7.272 -25.475 18.318 1.00 0.00 W1 H +ATOM 9431 H2 TIP3X2314 -8.130 -26.589 18.878 1.00 0.00 W1 H +ATOM 9432 OH2 TIP3X2315 -9.058 -26.723 16.762 1.00 0.00 W1 O +ATOM 9433 H1 TIP3X2315 -9.495 -26.531 15.932 1.00 0.00 W1 H +ATOM 9434 H2 TIP3X2315 -9.465 -27.534 17.065 1.00 0.00 W1 H +ATOM 9435 OH2 TIP3X2316 -8.347 -29.661 30.551 1.00 0.00 W1 O +ATOM 9436 H1 TIP3X2316 -8.814 -30.048 31.291 1.00 0.00 W1 H +ATOM 9437 H2 TIP3X2316 -7.433 -29.629 30.833 1.00 0.00 W1 H +ATOM 9438 OH2 TIP3X2317 -2.784 -24.317 27.232 1.00 0.00 W1 O +ATOM 9439 H1 TIP3X2317 -2.765 -24.966 27.935 1.00 0.00 W1 H +ATOM 9440 H2 TIP3X2317 -3.619 -24.468 26.788 1.00 0.00 W1 H +ATOM 9441 OH2 TIP3X2318 -14.709 -27.216 15.702 1.00 0.00 W1 O +ATOM 9442 H1 TIP3X2318 -15.466 -27.409 16.256 1.00 0.00 W1 H +ATOM 9443 H2 TIP3X2318 -14.175 -26.618 16.224 1.00 0.00 W1 H +ATOM 9444 OH2 TIP3X2319 -14.791 -15.723 16.189 1.00 0.00 W1 O +ATOM 9445 H1 TIP3X2319 -14.374 -16.470 16.618 1.00 0.00 W1 H +ATOM 9446 H2 TIP3X2319 -14.778 -15.029 16.848 1.00 0.00 W1 H +ATOM 9447 OH2 TIP3X2320 -6.043 -27.563 21.182 1.00 0.00 W1 O +ATOM 9448 H1 TIP3X2320 -6.380 -27.212 20.357 1.00 0.00 W1 H +ATOM 9449 H2 TIP3X2320 -5.146 -27.830 20.980 1.00 0.00 W1 H +ATOM 9450 OH2 TIP3X2321 -10.587 -28.252 22.926 1.00 0.00 W1 O +ATOM 9451 H1 TIP3X2321 -11.530 -28.299 22.767 1.00 0.00 W1 H +ATOM 9452 H2 TIP3X2321 -10.448 -27.378 23.289 1.00 0.00 W1 H +ATOM 9453 OH2 TIP3X2322 -15.225 -27.126 19.719 1.00 0.00 W1 O +ATOM 9454 H1 TIP3X2322 -15.499 -27.251 20.628 1.00 0.00 W1 H +ATOM 9455 H2 TIP3X2322 -15.420 -26.208 19.533 1.00 0.00 W1 H +ATOM 9456 OH2 TIP3X2323 -11.225 -27.799 27.779 1.00 0.00 W1 O +ATOM 9457 H1 TIP3X2323 -11.203 -28.605 27.264 1.00 0.00 W1 H +ATOM 9458 H2 TIP3X2323 -11.619 -27.151 27.195 1.00 0.00 W1 H +ATOM 9459 OH2 TIP3X2324 -10.642 -21.264 23.584 1.00 0.00 W1 O +ATOM 9460 H1 TIP3X2324 -10.713 -22.199 23.397 1.00 0.00 W1 H +ATOM 9461 H2 TIP3X2324 -10.637 -21.210 24.540 1.00 0.00 W1 H +ATOM 9462 OH2 TIP3X2325 -6.453 -24.245 28.147 1.00 0.00 W1 O +ATOM 9463 H1 TIP3X2325 -6.041 -23.413 28.383 1.00 0.00 W1 H +ATOM 9464 H2 TIP3X2325 -7.002 -24.034 27.392 1.00 0.00 W1 H +ATOM 9465 OH2 TIP3X2326 -0.657 -28.878 17.471 1.00 0.00 W1 O +ATOM 9466 H1 TIP3X2326 -0.223 -28.651 18.293 1.00 0.00 W1 H +ATOM 9467 H2 TIP3X2326 -1.177 -29.654 17.681 1.00 0.00 W1 H +ATOM 9468 OH2 TIP3X2327 -9.503 -22.918 16.649 1.00 0.00 W1 O +ATOM 9469 H1 TIP3X2327 -9.792 -23.040 17.554 1.00 0.00 W1 H +ATOM 9470 H2 TIP3X2327 -8.814 -23.572 16.528 1.00 0.00 W1 H +ATOM 9471 OH2 TIP3X2328 -2.799 -24.402 17.717 1.00 0.00 W1 O +ATOM 9472 H1 TIP3X2328 -3.664 -24.601 18.076 1.00 0.00 W1 H +ATOM 9473 H2 TIP3X2328 -2.242 -24.281 18.486 1.00 0.00 W1 H +ATOM 9474 OH2 TIP3X2329 -7.966 -24.148 24.188 1.00 0.00 W1 O +ATOM 9475 H1 TIP3X2329 -7.869 -23.351 24.709 1.00 0.00 W1 H +ATOM 9476 H2 TIP3X2329 -7.092 -24.538 24.179 1.00 0.00 W1 H +ATOM 9477 OH2 TIP3X2330 -8.221 -23.766 21.104 1.00 0.00 W1 O +ATOM 9478 H1 TIP3X2330 -7.600 -24.363 20.686 1.00 0.00 W1 H +ATOM 9479 H2 TIP3X2330 -8.196 -24.004 22.030 1.00 0.00 W1 H +ATOM 9480 OH2 TIP3X2331 -5.326 -22.151 30.039 1.00 0.00 W1 O +ATOM 9481 H1 TIP3X2331 -6.004 -21.867 30.653 1.00 0.00 W1 H +ATOM 9482 H2 TIP3X2331 -4.528 -22.191 30.566 1.00 0.00 W1 H +ATOM 9483 OH2 TIP3X2332 -12.817 -22.735 27.736 1.00 0.00 W1 O +ATOM 9484 H1 TIP3X2332 -12.300 -22.330 28.432 1.00 0.00 W1 H +ATOM 9485 H2 TIP3X2332 -13.199 -21.998 27.260 1.00 0.00 W1 H +ATOM 9486 OH2 TIP3X2333 -13.910 -24.773 29.357 1.00 0.00 W1 O +ATOM 9487 H1 TIP3X2333 -14.114 -25.613 28.945 1.00 0.00 W1 H +ATOM 9488 H2 TIP3X2333 -14.034 -24.127 28.662 1.00 0.00 W1 H +ATOM 9489 OH2 TIP3X2334 -14.018 -23.900 22.181 1.00 0.00 W1 O +ATOM 9490 H1 TIP3X2334 -13.661 -23.028 22.011 1.00 0.00 W1 H +ATOM 9491 H2 TIP3X2334 -14.120 -24.291 21.313 1.00 0.00 W1 H +ATOM 9492 OH2 TIP3X2335 -3.259 -21.635 16.367 1.00 0.00 W1 O +ATOM 9493 H1 TIP3X2335 -2.553 -21.137 15.955 1.00 0.00 W1 H +ATOM 9494 H2 TIP3X2335 -2.810 -22.266 16.931 1.00 0.00 W1 H +ATOM 9495 OH2 TIP3X2336 -0.662 -24.288 19.730 1.00 0.00 W1 O +ATOM 9496 H1 TIP3X2336 -0.950 -24.115 20.626 1.00 0.00 W1 H +ATOM 9497 H2 TIP3X2336 -0.149 -23.516 19.489 1.00 0.00 W1 H +ATOM 9498 OH2 TIP3X2337 -14.165 -25.171 24.452 1.00 0.00 W1 O +ATOM 9499 H1 TIP3X2337 -14.070 -24.493 23.783 1.00 0.00 W1 H +ATOM 9500 H2 TIP3X2337 -13.506 -24.952 25.111 1.00 0.00 W1 H +ATOM 9501 OH2 TIP3X2338 -11.378 -16.664 17.715 1.00 0.00 W1 O +ATOM 9502 H1 TIP3X2338 -11.607 -16.304 16.859 1.00 0.00 W1 H +ATOM 9503 H2 TIP3X2338 -11.791 -17.527 17.731 1.00 0.00 W1 H +ATOM 9504 OH2 TIP3X2339 -12.603 -21.431 16.214 1.00 0.00 W1 O +ATOM 9505 H1 TIP3X2339 -13.418 -21.721 15.805 1.00 0.00 W1 H +ATOM 9506 H2 TIP3X2339 -12.071 -22.225 16.275 1.00 0.00 W1 H +ATOM 9507 OH2 TIP3X2340 -11.185 -20.592 29.288 1.00 0.00 W1 O +ATOM 9508 H1 TIP3X2340 -11.758 -19.990 28.814 1.00 0.00 W1 H +ATOM 9509 H2 TIP3X2340 -11.659 -20.788 30.096 1.00 0.00 W1 H +ATOM 9510 OH2 TIP3X2341 -8.109 -15.849 26.979 1.00 0.00 W1 O +ATOM 9511 H1 TIP3X2341 -7.791 -16.143 27.833 1.00 0.00 W1 H +ATOM 9512 H2 TIP3X2341 -7.676 -16.426 26.350 1.00 0.00 W1 H +ATOM 9513 OH2 TIP3X2342 -3.403 -15.607 21.113 1.00 0.00 W1 O +ATOM 9514 H1 TIP3X2342 -3.815 -16.298 20.594 1.00 0.00 W1 H +ATOM 9515 H2 TIP3X2342 -3.598 -14.800 20.636 1.00 0.00 W1 H +ATOM 9516 OH2 TIP3X2343 -6.825 -18.925 18.365 1.00 0.00 W1 O +ATOM 9517 H1 TIP3X2343 -6.566 -18.139 17.883 1.00 0.00 W1 H +ATOM 9518 H2 TIP3X2343 -7.394 -18.601 19.063 1.00 0.00 W1 H +ATOM 9519 OH2 TIP3X2344 -6.808 -23.770 17.436 1.00 0.00 W1 O +ATOM 9520 H1 TIP3X2344 -5.984 -23.697 16.953 1.00 0.00 W1 H +ATOM 9521 H2 TIP3X2344 -6.800 -23.026 18.038 1.00 0.00 W1 H +ATOM 9522 OH2 TIP3X2345 -3.406 -29.047 27.227 1.00 0.00 W1 O +ATOM 9523 H1 TIP3X2345 -2.601 -29.277 26.763 1.00 0.00 W1 H +ATOM 9524 H2 TIP3X2345 -3.116 -28.494 27.952 1.00 0.00 W1 H +ATOM 9525 OH2 TIP3X2346 -15.441 -21.945 18.633 1.00 0.00 W1 O +ATOM 9526 H1 TIP3X2346 -15.595 -21.853 17.693 1.00 0.00 W1 H +ATOM 9527 H2 TIP3X2346 -14.488 -21.945 18.722 1.00 0.00 W1 H +ATOM 9528 OH2 TIP3X2347 -4.679 -22.357 25.229 1.00 0.00 W1 O +ATOM 9529 H1 TIP3X2347 -4.134 -21.696 25.655 1.00 0.00 W1 H +ATOM 9530 H2 TIP3X2347 -4.220 -22.558 24.414 1.00 0.00 W1 H +ATOM 9531 OH2 TIP3X2348 -5.857 -17.384 16.307 1.00 0.00 W1 O +ATOM 9532 H1 TIP3X2348 -5.032 -17.348 16.791 1.00 0.00 W1 H +ATOM 9533 H2 TIP3X2348 -5.654 -17.896 15.524 1.00 0.00 W1 H +ATOM 9534 OH2 TIP3X2349 -5.865 -19.596 27.958 1.00 0.00 W1 O +ATOM 9535 H1 TIP3X2349 -6.685 -19.349 28.384 1.00 0.00 W1 H +ATOM 9536 H2 TIP3X2349 -6.094 -19.692 27.033 1.00 0.00 W1 H +ATOM 9537 OH2 TIP3X2350 -9.239 -19.371 19.844 1.00 0.00 W1 O +ATOM 9538 H1 TIP3X2350 -9.947 -19.224 19.216 1.00 0.00 W1 H +ATOM 9539 H2 TIP3X2350 -9.577 -19.027 20.671 1.00 0.00 W1 H +ATOM 9540 OH2 TIP3X2351 -12.675 -18.459 28.555 1.00 0.00 W1 O +ATOM 9541 H1 TIP3X2351 -11.941 -17.848 28.491 1.00 0.00 W1 H +ATOM 9542 H2 TIP3X2351 -12.987 -18.365 29.455 1.00 0.00 W1 H +ATOM 9543 OH2 TIP3X2352 -13.085 -16.755 22.657 1.00 0.00 W1 O +ATOM 9544 H1 TIP3X2352 -13.671 -17.496 22.503 1.00 0.00 W1 H +ATOM 9545 H2 TIP3X2352 -12.642 -16.621 21.819 1.00 0.00 W1 H +ATOM 9546 OH2 TIP3X2353 -4.731 -30.741 23.738 1.00 0.00 W1 O +ATOM 9547 H1 TIP3X2353 -4.399 -30.816 22.843 1.00 0.00 W1 H +ATOM 9548 H2 TIP3X2353 -4.776 -29.799 23.899 1.00 0.00 W1 H +ATOM 9549 OH2 TIP3X2354 -7.493 -28.612 23.972 1.00 0.00 W1 O +ATOM 9550 H1 TIP3X2354 -7.855 -28.123 23.233 1.00 0.00 W1 H +ATOM 9551 H2 TIP3X2354 -8.225 -28.702 24.582 1.00 0.00 W1 H +ATOM 9552 OH2 TIP3X2355 -8.774 -30.628 17.900 1.00 0.00 W1 O +ATOM 9553 H1 TIP3X2355 -7.919 -30.883 18.245 1.00 0.00 W1 H +ATOM 9554 H2 TIP3X2355 -9.293 -31.432 17.925 1.00 0.00 W1 H +ATOM 9555 OH2 TIP3X2356 -6.023 -30.784 18.944 1.00 0.00 W1 O +ATOM 9556 H1 TIP3X2356 -5.567 -31.520 19.352 1.00 0.00 W1 H +ATOM 9557 H2 TIP3X2356 -5.615 -30.698 18.082 1.00 0.00 W1 H +ATOM 9558 OH2 TIP3X2357 -11.383 -16.206 30.398 1.00 0.00 W1 O +ATOM 9559 H1 TIP3X2357 -11.634 -15.449 29.869 1.00 0.00 W1 H +ATOM 9560 H2 TIP3X2357 -10.472 -16.375 30.159 1.00 0.00 W1 H +ATOM 9561 OH2 TIP3X2358 -6.377 -17.511 20.699 1.00 0.00 W1 O +ATOM 9562 H1 TIP3X2358 -5.716 -18.153 20.959 1.00 0.00 W1 H +ATOM 9563 H2 TIP3X2358 -6.390 -16.877 21.415 1.00 0.00 W1 H +ATOM 9564 OH2 TIP3X2359 -8.637 -16.609 29.608 1.00 0.00 W1 O +ATOM 9565 H1 TIP3X2359 -8.420 -17.501 29.879 1.00 0.00 W1 H +ATOM 9566 H2 TIP3X2359 -8.030 -16.055 30.098 1.00 0.00 W1 H +ATOM 9567 OH2 TIP3X2360 -9.691 -28.491 19.653 1.00 0.00 W1 O +ATOM 9568 H1 TIP3X2360 -9.034 -29.150 19.430 1.00 0.00 W1 H +ATOM 9569 H2 TIP3X2360 -9.648 -28.422 20.607 1.00 0.00 W1 H +ATOM 9570 OH2 TIP3X2361 -14.978 -30.152 29.109 1.00 0.00 W1 O +ATOM 9571 H1 TIP3X2361 -14.229 -30.348 28.545 1.00 0.00 W1 H +ATOM 9572 H2 TIP3X2361 -14.769 -30.578 29.940 1.00 0.00 W1 H +ATOM 9573 OH2 TIP3X2362 -3.858 -17.425 18.710 1.00 0.00 W1 O +ATOM 9574 H1 TIP3X2362 -3.713 -18.365 18.813 1.00 0.00 W1 H +ATOM 9575 H2 TIP3X2362 -3.035 -17.093 18.353 1.00 0.00 W1 H +ATOM 9576 OH2 TIP3X2363 -2.190 -30.659 29.937 1.00 0.00 W1 O +ATOM 9577 H1 TIP3X2363 -2.804 -30.585 29.207 1.00 0.00 W1 H +ATOM 9578 H2 TIP3X2363 -1.421 -30.164 29.656 1.00 0.00 W1 H +ATOM 9579 OH2 TIP3X2364 -11.397 -16.446 20.424 1.00 0.00 W1 O +ATOM 9580 H1 TIP3X2364 -11.403 -16.401 19.468 1.00 0.00 W1 H +ATOM 9581 H2 TIP3X2364 -10.589 -16.000 20.680 1.00 0.00 W1 H +ATOM 9582 OH2 TIP3X2365 -0.488 -17.507 28.373 1.00 0.00 W1 O +ATOM 9583 H1 TIP3X2365 -1.210 -16.956 28.674 1.00 0.00 W1 H +ATOM 9584 H2 TIP3X2365 0.300 -17.008 28.587 1.00 0.00 W1 H +ATOM 9585 OH2 TIP3X2366 -12.862 -28.185 20.053 1.00 0.00 W1 O +ATOM 9586 H1 TIP3X2366 -13.505 -27.797 19.461 1.00 0.00 W1 H +ATOM 9587 H2 TIP3X2366 -12.059 -27.688 19.895 1.00 0.00 W1 H +ATOM 9588 OH2 TIP3X2367 -11.433 -19.586 17.785 1.00 0.00 W1 O +ATOM 9589 H1 TIP3X2367 -11.472 -20.214 17.063 1.00 0.00 W1 H +ATOM 9590 H2 TIP3X2367 -12.153 -19.840 18.363 1.00 0.00 W1 H +ATOM 9591 OH2 TIP3X2368 -13.539 -4.501 -26.806 1.00 0.00 W1 O +ATOM 9592 H1 TIP3X2368 -13.356 -4.577 -25.869 1.00 0.00 W1 H +ATOM 9593 H2 TIP3X2368 -13.563 -3.558 -26.970 1.00 0.00 W1 H +ATOM 9594 OH2 TIP3X2369 -2.436 -7.010 -23.068 1.00 0.00 W1 O +ATOM 9595 H1 TIP3X2369 -2.201 -6.745 -23.957 1.00 0.00 W1 H +ATOM 9596 H2 TIP3X2369 -1.607 -7.273 -22.669 1.00 0.00 W1 H +ATOM 9597 OH2 TIP3X2370 -10.452 -7.286 -27.089 1.00 0.00 W1 O +ATOM 9598 H1 TIP3X2370 -10.422 -6.377 -26.792 1.00 0.00 W1 H +ATOM 9599 H2 TIP3X2370 -9.945 -7.769 -26.437 1.00 0.00 W1 H +ATOM 9600 OH2 TIP3X2371 -2.649 -3.127 -24.946 1.00 0.00 W1 O +ATOM 9601 H1 TIP3X2371 -2.924 -2.637 -24.171 1.00 0.00 W1 H +ATOM 9602 H2 TIP3X2371 -3.174 -3.927 -24.922 1.00 0.00 W1 H +ATOM 9603 OH2 TIP3X2372 -4.132 -4.684 -27.903 1.00 0.00 W1 O +ATOM 9604 H1 TIP3X2372 -3.970 -4.912 -28.818 1.00 0.00 W1 H +ATOM 9605 H2 TIP3X2372 -5.061 -4.455 -27.873 1.00 0.00 W1 H +ATOM 9606 OH2 TIP3X2373 -0.285 -4.152 -23.118 1.00 0.00 W1 O +ATOM 9607 H1 TIP3X2373 -0.837 -4.069 -23.896 1.00 0.00 W1 H +ATOM 9608 H2 TIP3X2373 -0.895 -4.368 -22.413 1.00 0.00 W1 H +ATOM 9609 OH2 TIP3X2374 -13.648 -2.887 -20.667 1.00 0.00 W1 O +ATOM 9610 H1 TIP3X2374 -13.242 -2.684 -19.824 1.00 0.00 W1 H +ATOM 9611 H2 TIP3X2374 -14.219 -3.633 -20.484 1.00 0.00 W1 H +ATOM 9612 OH2 TIP3X2375 -6.273 -1.263 -21.441 1.00 0.00 W1 O +ATOM 9613 H1 TIP3X2375 -5.972 -2.163 -21.319 1.00 0.00 W1 H +ATOM 9614 H2 TIP3X2375 -5.648 -0.882 -22.058 1.00 0.00 W1 H +ATOM 9615 OH2 TIP3X2376 -2.841 -1.306 -21.561 1.00 0.00 W1 O +ATOM 9616 H1 TIP3X2376 -3.276 -0.483 -21.781 1.00 0.00 W1 H +ATOM 9617 H2 TIP3X2376 -1.912 -1.080 -21.512 1.00 0.00 W1 H +ATOM 9618 OH2 TIP3X2377 -10.392 -1.731 -22.432 1.00 0.00 W1 O +ATOM 9619 H1 TIP3X2377 -10.037 -0.882 -22.695 1.00 0.00 W1 H +ATOM 9620 H2 TIP3X2377 -11.327 -1.672 -22.628 1.00 0.00 W1 H +ATOM 9621 OH2 TIP3X2378 -5.551 -9.839 -23.530 1.00 0.00 W1 O +ATOM 9622 H1 TIP3X2378 -5.629 -10.648 -24.035 1.00 0.00 W1 H +ATOM 9623 H2 TIP3X2378 -4.608 -9.700 -23.443 1.00 0.00 W1 H +ATOM 9624 OH2 TIP3X2379 -9.528 -13.741 -21.168 1.00 0.00 W1 O +ATOM 9625 H1 TIP3X2379 -9.270 -14.479 -20.615 1.00 0.00 W1 H +ATOM 9626 H2 TIP3X2379 -10.205 -14.098 -21.744 1.00 0.00 W1 H +ATOM 9627 OH2 TIP3X2380 -1.284 -12.737 -24.745 1.00 0.00 W1 O +ATOM 9628 H1 TIP3X2380 -1.592 -12.399 -23.904 1.00 0.00 W1 H +ATOM 9629 H2 TIP3X2380 -1.217 -13.682 -24.614 1.00 0.00 W1 H +ATOM 9630 OH2 TIP3X2381 -2.687 -11.542 -22.791 1.00 0.00 W1 O +ATOM 9631 H1 TIP3X2381 -2.112 -11.770 -22.061 1.00 0.00 W1 H +ATOM 9632 H2 TIP3X2381 -3.562 -11.796 -22.496 1.00 0.00 W1 H +ATOM 9633 OH2 TIP3X2382 -9.641 -10.417 -21.420 1.00 0.00 W1 O +ATOM 9634 H1 TIP3X2382 -9.137 -11.119 -21.008 1.00 0.00 W1 H +ATOM 9635 H2 TIP3X2382 -8.983 -9.775 -21.687 1.00 0.00 W1 H +ATOM 9636 OH2 TIP3X2383 -2.164 -9.369 -24.523 1.00 0.00 W1 O +ATOM 9637 H1 TIP3X2383 -2.123 -10.268 -24.199 1.00 0.00 W1 H +ATOM 9638 H2 TIP3X2383 -2.282 -8.836 -23.736 1.00 0.00 W1 H +ATOM 9639 OH2 TIP3X2384 -3.479 -12.725 -26.654 1.00 0.00 W1 O +ATOM 9640 H1 TIP3X2384 -2.654 -12.541 -26.205 1.00 0.00 W1 H +ATOM 9641 H2 TIP3X2384 -3.403 -12.270 -27.493 1.00 0.00 W1 H +ATOM 9642 OH2 TIP3X2385 -7.297 -6.754 -20.583 1.00 0.00 W1 O +ATOM 9643 H1 TIP3X2385 -6.420 -6.732 -20.966 1.00 0.00 W1 H +ATOM 9644 H2 TIP3X2385 -7.562 -5.835 -20.537 1.00 0.00 W1 H +ATOM 9645 OH2 TIP3X2386 -8.146 -4.206 -20.773 1.00 0.00 W1 O +ATOM 9646 H1 TIP3X2386 -8.171 -3.979 -21.702 1.00 0.00 W1 H +ATOM 9647 H2 TIP3X2386 -9.066 -4.260 -20.514 1.00 0.00 W1 H +ATOM 9648 OH2 TIP3X2387 -13.283 -12.324 -23.935 1.00 0.00 W1 O +ATOM 9649 H1 TIP3X2387 -13.609 -11.445 -23.744 1.00 0.00 W1 H +ATOM 9650 H2 TIP3X2387 -13.407 -12.427 -24.878 1.00 0.00 W1 H +ATOM 9651 OH2 TIP3X2388 -11.127 -8.767 -23.922 1.00 0.00 W1 O +ATOM 9652 H1 TIP3X2388 -11.810 -9.217 -24.419 1.00 0.00 W1 H +ATOM 9653 H2 TIP3X2388 -10.642 -9.470 -23.490 1.00 0.00 W1 H +ATOM 9654 OH2 TIP3X2389 -5.072 -3.842 -21.526 1.00 0.00 W1 O +ATOM 9655 H1 TIP3X2389 -5.314 -4.428 -22.243 1.00 0.00 W1 H +ATOM 9656 H2 TIP3X2389 -4.122 -3.931 -21.453 1.00 0.00 W1 H +ATOM 9657 OH2 TIP3X2390 -0.774 -0.208 -24.745 1.00 0.00 W1 O +ATOM 9658 H1 TIP3X2390 -0.779 -0.676 -23.910 1.00 0.00 W1 H +ATOM 9659 H2 TIP3X2390 -1.654 -0.337 -25.098 1.00 0.00 W1 H +ATOM 9660 OH2 TIP3X2391 -8.902 -3.871 -23.723 1.00 0.00 W1 O +ATOM 9661 H1 TIP3X2391 -9.473 -4.591 -23.454 1.00 0.00 W1 H +ATOM 9662 H2 TIP3X2391 -9.362 -3.081 -23.441 1.00 0.00 W1 H +ATOM 9663 OH2 TIP3X2392 -6.680 -13.420 -19.153 1.00 0.00 W1 O +ATOM 9664 H1 TIP3X2392 -7.423 -12.940 -18.786 1.00 0.00 W1 H +ATOM 9665 H2 TIP3X2392 -7.061 -14.232 -19.487 1.00 0.00 W1 H +ATOM 9666 OH2 TIP3X2393 -11.328 -12.715 -29.351 1.00 0.00 W1 O +ATOM 9667 H1 TIP3X2393 -11.426 -13.377 -28.667 1.00 0.00 W1 H +ATOM 9668 H2 TIP3X2393 -11.512 -13.183 -30.166 1.00 0.00 W1 H +ATOM 9669 OH2 TIP3X2394 -0.435 -11.793 -21.162 1.00 0.00 W1 O +ATOM 9670 H1 TIP3X2394 0.084 -11.124 -21.609 1.00 0.00 W1 H +ATOM 9671 H2 TIP3X2394 0.007 -11.917 -20.322 1.00 0.00 W1 H +ATOM 9672 OH2 TIP3X2395 -14.377 -15.440 -27.002 1.00 0.00 W1 O +ATOM 9673 H1 TIP3X2395 -13.652 -14.819 -26.933 1.00 0.00 W1 H +ATOM 9674 H2 TIP3X2395 -14.749 -15.473 -26.120 1.00 0.00 W1 H +ATOM 9675 OH2 TIP3X2396 -9.111 -9.205 -17.015 1.00 0.00 W1 O +ATOM 9676 H1 TIP3X2396 -8.247 -8.806 -17.116 1.00 0.00 W1 H +ATOM 9677 H2 TIP3X2396 -8.959 -10.142 -17.138 1.00 0.00 W1 H +ATOM 9678 OH2 TIP3X2397 -5.945 -4.295 -24.276 1.00 0.00 W1 O +ATOM 9679 H1 TIP3X2397 -5.851 -5.157 -24.679 1.00 0.00 W1 H +ATOM 9680 H2 TIP3X2397 -6.878 -4.095 -24.352 1.00 0.00 W1 H +ATOM 9681 OH2 TIP3X2398 -7.333 -6.011 -26.745 1.00 0.00 W1 O +ATOM 9682 H1 TIP3X2398 -7.897 -6.625 -26.275 1.00 0.00 W1 H +ATOM 9683 H2 TIP3X2398 -7.807 -5.180 -26.716 1.00 0.00 W1 H +ATOM 9684 OH2 TIP3X2399 -14.795 -5.497 -20.288 1.00 0.00 W1 O +ATOM 9685 H1 TIP3X2399 -15.330 -6.099 -20.806 1.00 0.00 W1 H +ATOM 9686 H2 TIP3X2399 -15.266 -5.411 -19.459 1.00 0.00 W1 H +ATOM 9687 OH2 TIP3X2400 -3.499 -6.477 -25.920 1.00 0.00 W1 O +ATOM 9688 H1 TIP3X2400 -3.555 -7.391 -26.197 1.00 0.00 W1 H +ATOM 9689 H2 TIP3X2400 -3.671 -5.974 -26.716 1.00 0.00 W1 H +ATOM 9690 OH2 TIP3X2401 -3.202 -5.963 -18.896 1.00 0.00 W1 O +ATOM 9691 H1 TIP3X2401 -4.104 -5.879 -18.588 1.00 0.00 W1 H +ATOM 9692 H2 TIP3X2401 -3.033 -6.905 -18.892 1.00 0.00 W1 H +ATOM 9693 OH2 TIP3X2402 -0.835 -8.003 -21.090 1.00 0.00 W1 O +ATOM 9694 H1 TIP3X2402 -0.173 -8.684 -21.209 1.00 0.00 W1 H +ATOM 9695 H2 TIP3X2402 -1.551 -8.443 -20.631 1.00 0.00 W1 H +ATOM 9696 OH2 TIP3X2403 -11.691 -8.316 -15.946 1.00 0.00 W1 O +ATOM 9697 H1 TIP3X2403 -12.220 -8.550 -16.708 1.00 0.00 W1 H +ATOM 9698 H2 TIP3X2403 -10.795 -8.268 -16.280 1.00 0.00 W1 H +ATOM 9699 OH2 TIP3X2404 -10.780 -5.110 -20.384 1.00 0.00 W1 O +ATOM 9700 H1 TIP3X2404 -10.825 -5.665 -19.606 1.00 0.00 W1 H +ATOM 9701 H2 TIP3X2404 -11.413 -4.412 -20.218 1.00 0.00 W1 H +ATOM 9702 OH2 TIP3X2405 -2.109 -3.980 -20.635 1.00 0.00 W1 O +ATOM 9703 H1 TIP3X2405 -1.685 -3.212 -20.251 1.00 0.00 W1 H +ATOM 9704 H2 TIP3X2405 -2.413 -4.488 -19.882 1.00 0.00 W1 H +ATOM 9705 OH2 TIP3X2406 -4.021 -2.005 -18.810 1.00 0.00 W1 O +ATOM 9706 H1 TIP3X2406 -4.728 -2.634 -18.952 1.00 0.00 W1 H +ATOM 9707 H2 TIP3X2406 -3.692 -1.810 -19.687 1.00 0.00 W1 H +ATOM 9708 OH2 TIP3X2407 -3.770 -3.469 -16.413 1.00 0.00 W1 O +ATOM 9709 H1 TIP3X2407 -4.404 -4.075 -16.797 1.00 0.00 W1 H +ATOM 9710 H2 TIP3X2407 -3.657 -2.788 -17.077 1.00 0.00 W1 H +ATOM 9711 OH2 TIP3X2408 -0.160 -1.560 -22.347 1.00 0.00 W1 O +ATOM 9712 H1 TIP3X2408 0.518 -1.719 -21.690 1.00 0.00 W1 H +ATOM 9713 H2 TIP3X2408 -0.394 -2.432 -22.666 1.00 0.00 W1 H +ATOM 9714 OH2 TIP3X2409 -9.603 -15.089 -23.954 1.00 0.00 W1 O +ATOM 9715 H1 TIP3X2409 -9.895 -14.180 -24.015 1.00 0.00 W1 H +ATOM 9716 H2 TIP3X2409 -8.772 -15.107 -24.427 1.00 0.00 W1 H +ATOM 9717 OH2 TIP3X2410 -7.479 -5.143 -30.300 1.00 0.00 W1 O +ATOM 9718 H1 TIP3X2410 -8.175 -5.765 -30.085 1.00 0.00 W1 H +ATOM 9719 H2 TIP3X2410 -7.497 -4.507 -29.585 1.00 0.00 W1 H +ATOM 9720 OH2 TIP3X2411 -0.099 -6.379 -30.863 1.00 0.00 W1 O +ATOM 9721 H1 TIP3X2411 -0.362 -7.129 -31.397 1.00 0.00 W1 H +ATOM 9722 H2 TIP3X2411 -0.354 -5.615 -31.381 1.00 0.00 W1 H +ATOM 9723 OH2 TIP3X2412 -14.151 -2.683 -31.146 1.00 0.00 W1 O +ATOM 9724 H1 TIP3X2412 -13.706 -3.232 -30.501 1.00 0.00 W1 H +ATOM 9725 H2 TIP3X2412 -15.048 -3.017 -31.167 1.00 0.00 W1 H +ATOM 9726 OH2 TIP3X2413 -2.058 -0.554 -29.888 1.00 0.00 W1 O +ATOM 9727 H1 TIP3X2413 -1.173 -0.882 -30.046 1.00 0.00 W1 H +ATOM 9728 H2 TIP3X2413 -2.288 -0.086 -30.690 1.00 0.00 W1 H +ATOM 9729 OH2 TIP3X2414 -0.665 -4.892 -17.810 1.00 0.00 W1 O +ATOM 9730 H1 TIP3X2414 -0.775 -3.943 -17.751 1.00 0.00 W1 H +ATOM 9731 H2 TIP3X2414 -1.558 -5.237 -17.820 1.00 0.00 W1 H +ATOM 9732 OH2 TIP3X2415 -13.979 -2.066 -28.191 1.00 0.00 W1 O +ATOM 9733 H1 TIP3X2415 -14.047 -1.230 -27.731 1.00 0.00 W1 H +ATOM 9734 H2 TIP3X2415 -14.875 -2.404 -28.208 1.00 0.00 W1 H +ATOM 9735 OH2 TIP3X2416 -1.399 -3.573 -30.547 1.00 0.00 W1 O +ATOM 9736 H1 TIP3X2416 -1.368 -3.653 -29.594 1.00 0.00 W1 H +ATOM 9737 H2 TIP3X2416 -2.232 -3.136 -30.724 1.00 0.00 W1 H +ATOM 9738 OH2 TIP3X2417 -5.029 -15.278 -17.663 1.00 0.00 W1 O +ATOM 9739 H1 TIP3X2417 -5.335 -14.530 -18.176 1.00 0.00 W1 H +ATOM 9740 H2 TIP3X2417 -4.975 -15.995 -18.295 1.00 0.00 W1 H +ATOM 9741 OH2 TIP3X2418 -10.815 -1.362 -19.634 1.00 0.00 W1 O +ATOM 9742 H1 TIP3X2418 -9.967 -1.124 -19.260 1.00 0.00 W1 H +ATOM 9743 H2 TIP3X2418 -10.603 -1.742 -20.487 1.00 0.00 W1 H +ATOM 9744 OH2 TIP3X2419 -12.349 -13.343 -16.284 1.00 0.00 W1 O +ATOM 9745 H1 TIP3X2419 -13.226 -13.254 -15.910 1.00 0.00 W1 H +ATOM 9746 H2 TIP3X2419 -12.286 -12.631 -16.920 1.00 0.00 W1 H +ATOM 9747 OH2 TIP3X2420 -6.151 -11.396 -30.553 1.00 0.00 W1 O +ATOM 9748 H1 TIP3X2420 -6.317 -11.099 -31.448 1.00 0.00 W1 H +ATOM 9749 H2 TIP3X2420 -7.022 -11.520 -30.176 1.00 0.00 W1 H +ATOM 9750 OH2 TIP3X2421 -0.754 -3.636 -27.505 1.00 0.00 W1 O +ATOM 9751 H1 TIP3X2421 -0.181 -4.373 -27.292 1.00 0.00 W1 H +ATOM 9752 H2 TIP3X2421 -1.085 -3.337 -26.658 1.00 0.00 W1 H +ATOM 9753 OH2 TIP3X2422 -5.493 -14.600 -30.576 1.00 0.00 W1 O +ATOM 9754 H1 TIP3X2422 -4.761 -13.984 -30.552 1.00 0.00 W1 H +ATOM 9755 H2 TIP3X2422 -5.252 -15.232 -31.253 1.00 0.00 W1 H +ATOM 9756 OH2 TIP3X2423 -0.961 -14.506 -20.311 1.00 0.00 W1 O +ATOM 9757 H1 TIP3X2423 -0.469 -15.136 -19.784 1.00 0.00 W1 H +ATOM 9758 H2 TIP3X2423 -0.360 -14.264 -21.016 1.00 0.00 W1 H +ATOM 9759 OH2 TIP3X2424 -13.454 -5.286 -24.233 1.00 0.00 W1 O +ATOM 9760 H1 TIP3X2424 -14.122 -4.962 -23.629 1.00 0.00 W1 H +ATOM 9761 H2 TIP3X2424 -12.661 -5.355 -23.701 1.00 0.00 W1 H +ATOM 9762 OH2 TIP3X2425 -8.457 -3.867 -17.123 1.00 0.00 W1 O +ATOM 9763 H1 TIP3X2425 -8.233 -4.245 -16.272 1.00 0.00 W1 H +ATOM 9764 H2 TIP3X2425 -9.063 -4.496 -17.513 1.00 0.00 W1 H +ATOM 9765 OH2 TIP3X2426 -4.977 -12.562 -21.710 1.00 0.00 W1 O +ATOM 9766 H1 TIP3X2426 -4.918 -12.744 -20.772 1.00 0.00 W1 H +ATOM 9767 H2 TIP3X2426 -5.916 -12.475 -21.879 1.00 0.00 W1 H +ATOM 9768 OH2 TIP3X2427 -8.786 -11.905 -17.531 1.00 0.00 W1 O +ATOM 9769 H1 TIP3X2427 -9.653 -11.975 -17.931 1.00 0.00 W1 H +ATOM 9770 H2 TIP3X2427 -8.841 -12.446 -16.743 1.00 0.00 W1 H +ATOM 9771 OH2 TIP3X2428 -1.300 -9.185 -15.778 1.00 0.00 W1 O +ATOM 9772 H1 TIP3X2428 -0.505 -9.718 -15.795 1.00 0.00 W1 H +ATOM 9773 H2 TIP3X2428 -1.594 -9.220 -14.868 1.00 0.00 W1 H +ATOM 9774 OH2 TIP3X2429 -13.115 -15.318 -19.860 1.00 0.00 W1 O +ATOM 9775 H1 TIP3X2429 -13.340 -14.865 -20.672 1.00 0.00 W1 H +ATOM 9776 H2 TIP3X2429 -12.285 -15.755 -20.051 1.00 0.00 W1 H +ATOM 9777 OH2 TIP3X2430 -7.020 -14.860 -24.778 1.00 0.00 W1 O +ATOM 9778 H1 TIP3X2430 -6.538 -14.346 -25.426 1.00 0.00 W1 H +ATOM 9779 H2 TIP3X2430 -6.676 -14.567 -23.934 1.00 0.00 W1 H +ATOM 9780 OH2 TIP3X2431 -12.550 -10.269 -29.625 1.00 0.00 W1 O +ATOM 9781 H1 TIP3X2431 -12.127 -9.623 -30.191 1.00 0.00 W1 H +ATOM 9782 H2 TIP3X2431 -11.838 -10.844 -29.344 1.00 0.00 W1 H +ATOM 9783 OH2 TIP3X2432 -12.025 -9.612 -20.314 1.00 0.00 W1 O +ATOM 9784 H1 TIP3X2432 -12.110 -8.821 -19.782 1.00 0.00 W1 H +ATOM 9785 H2 TIP3X2432 -11.110 -9.616 -20.595 1.00 0.00 W1 H +ATOM 9786 OH2 TIP3X2433 -12.843 -8.894 -27.129 1.00 0.00 W1 O +ATOM 9787 H1 TIP3X2433 -12.780 -9.183 -28.039 1.00 0.00 W1 H +ATOM 9788 H2 TIP3X2433 -12.067 -8.349 -26.996 1.00 0.00 W1 H +ATOM 9789 OH2 TIP3X2434 -3.822 -12.324 -29.369 1.00 0.00 W1 O +ATOM 9790 H1 TIP3X2434 -4.530 -11.836 -29.789 1.00 0.00 W1 H +ATOM 9791 H2 TIP3X2434 -3.097 -12.280 -29.992 1.00 0.00 W1 H +ATOM 9792 OH2 TIP3X2435 -15.272 -11.438 -18.281 1.00 0.00 W1 O +ATOM 9793 H1 TIP3X2435 -16.176 -11.144 -18.170 1.00 0.00 W1 H +ATOM 9794 H2 TIP3X2435 -15.131 -12.057 -17.564 1.00 0.00 W1 H +ATOM 9795 OH2 TIP3X2436 -14.128 -14.600 -22.298 1.00 0.00 W1 O +ATOM 9796 H1 TIP3X2436 -14.021 -15.302 -22.941 1.00 0.00 W1 H +ATOM 9797 H2 TIP3X2436 -13.993 -13.795 -22.797 1.00 0.00 W1 H +ATOM 9798 OH2 TIP3X2437 -2.607 -10.972 -17.411 1.00 0.00 W1 O +ATOM 9799 H1 TIP3X2437 -2.295 -10.394 -16.715 1.00 0.00 W1 H +ATOM 9800 H2 TIP3X2437 -3.551 -11.036 -17.265 1.00 0.00 W1 H +ATOM 9801 OH2 TIP3X2438 -5.564 -10.966 -17.464 1.00 0.00 W1 O +ATOM 9802 H1 TIP3X2438 -5.923 -10.398 -18.145 1.00 0.00 W1 H +ATOM 9803 H2 TIP3X2438 -5.901 -11.837 -17.675 1.00 0.00 W1 H +ATOM 9804 OH2 TIP3X2439 -7.361 -10.497 -27.598 1.00 0.00 W1 O +ATOM 9805 H1 TIP3X2439 -7.272 -9.918 -28.355 1.00 0.00 W1 H +ATOM 9806 H2 TIP3X2439 -8.130 -11.032 -27.795 1.00 0.00 W1 H +ATOM 9807 OH2 TIP3X2440 -9.058 -11.166 -29.911 1.00 0.00 W1 O +ATOM 9808 H1 TIP3X2440 -9.495 -10.973 -30.740 1.00 0.00 W1 H +ATOM 9809 H2 TIP3X2440 -9.465 -11.977 -29.607 1.00 0.00 W1 H +ATOM 9810 OH2 TIP3X2441 -8.347 -14.104 -16.122 1.00 0.00 W1 O +ATOM 9811 H1 TIP3X2441 -8.814 -14.491 -15.381 1.00 0.00 W1 H +ATOM 9812 H2 TIP3X2441 -7.433 -14.071 -15.839 1.00 0.00 W1 H +ATOM 9813 OH2 TIP3X2442 -2.784 -8.759 -19.440 1.00 0.00 W1 O +ATOM 9814 H1 TIP3X2442 -2.765 -9.409 -18.737 1.00 0.00 W1 H +ATOM 9815 H2 TIP3X2442 -3.619 -8.911 -19.884 1.00 0.00 W1 H +ATOM 9816 OH2 TIP3X2443 -14.709 -11.659 -30.971 1.00 0.00 W1 O +ATOM 9817 H1 TIP3X2443 -15.466 -11.851 -30.417 1.00 0.00 W1 H +ATOM 9818 H2 TIP3X2443 -14.175 -11.060 -30.448 1.00 0.00 W1 H +ATOM 9819 OH2 TIP3X2444 -14.791 -0.165 -30.484 1.00 0.00 W1 O +ATOM 9820 H1 TIP3X2444 -14.374 -0.913 -30.054 1.00 0.00 W1 H +ATOM 9821 H2 TIP3X2444 -14.778 0.528 -29.824 1.00 0.00 W1 H +ATOM 9822 OH2 TIP3X2445 -6.043 -12.005 -25.491 1.00 0.00 W1 O +ATOM 9823 H1 TIP3X2445 -6.380 -11.655 -26.315 1.00 0.00 W1 H +ATOM 9824 H2 TIP3X2445 -5.146 -12.273 -25.692 1.00 0.00 W1 H +ATOM 9825 OH2 TIP3X2446 -10.587 -12.695 -23.747 1.00 0.00 W1 O +ATOM 9826 H1 TIP3X2446 -11.530 -12.742 -23.905 1.00 0.00 W1 H +ATOM 9827 H2 TIP3X2446 -10.448 -11.820 -23.383 1.00 0.00 W1 H +ATOM 9828 OH2 TIP3X2447 -15.225 -11.569 -26.953 1.00 0.00 W1 O +ATOM 9829 H1 TIP3X2447 -15.499 -11.693 -26.045 1.00 0.00 W1 H +ATOM 9830 H2 TIP3X2447 -15.420 -10.650 -27.139 1.00 0.00 W1 H +ATOM 9831 OH2 TIP3X2448 -11.225 -12.242 -18.893 1.00 0.00 W1 O +ATOM 9832 H1 TIP3X2448 -11.203 -13.048 -19.409 1.00 0.00 W1 H +ATOM 9833 H2 TIP3X2448 -11.619 -11.594 -19.477 1.00 0.00 W1 H +ATOM 9834 OH2 TIP3X2449 -10.642 -5.706 -23.088 1.00 0.00 W1 O +ATOM 9835 H1 TIP3X2449 -10.713 -6.642 -23.276 1.00 0.00 W1 H +ATOM 9836 H2 TIP3X2449 -10.637 -5.653 -22.132 1.00 0.00 W1 H +ATOM 9837 OH2 TIP3X2450 -6.453 -8.687 -18.526 1.00 0.00 W1 O +ATOM 9838 H1 TIP3X2450 -6.041 -7.856 -18.289 1.00 0.00 W1 H +ATOM 9839 H2 TIP3X2450 -7.002 -8.477 -19.280 1.00 0.00 W1 H +ATOM 9840 OH2 TIP3X2451 -0.657 -13.321 -29.201 1.00 0.00 W1 O +ATOM 9841 H1 TIP3X2451 -0.223 -13.094 -28.379 1.00 0.00 W1 H +ATOM 9842 H2 TIP3X2451 -1.177 -14.096 -28.992 1.00 0.00 W1 H +ATOM 9843 OH2 TIP3X2452 -9.503 -7.361 -30.023 1.00 0.00 W1 O +ATOM 9844 H1 TIP3X2452 -9.792 -7.483 -29.119 1.00 0.00 W1 H +ATOM 9845 H2 TIP3X2452 -8.814 -8.014 -30.144 1.00 0.00 W1 H +ATOM 9846 OH2 TIP3X2453 -2.799 -8.845 -28.955 1.00 0.00 W1 O +ATOM 9847 H1 TIP3X2453 -3.664 -9.044 -28.596 1.00 0.00 W1 H +ATOM 9848 H2 TIP3X2453 -2.242 -8.724 -28.186 1.00 0.00 W1 H +ATOM 9849 OH2 TIP3X2454 -7.966 -8.591 -22.485 1.00 0.00 W1 O +ATOM 9850 H1 TIP3X2454 -7.869 -7.794 -21.963 1.00 0.00 W1 H +ATOM 9851 H2 TIP3X2454 -7.092 -8.980 -22.493 1.00 0.00 W1 H +ATOM 9852 OH2 TIP3X2455 -8.221 -8.209 -25.569 1.00 0.00 W1 O +ATOM 9853 H1 TIP3X2455 -7.600 -8.805 -25.987 1.00 0.00 W1 H +ATOM 9854 H2 TIP3X2455 -8.196 -8.446 -24.642 1.00 0.00 W1 H +ATOM 9855 OH2 TIP3X2456 -5.326 -6.593 -16.633 1.00 0.00 W1 O +ATOM 9856 H1 TIP3X2456 -6.004 -6.309 -16.020 1.00 0.00 W1 H +ATOM 9857 H2 TIP3X2456 -4.528 -6.634 -16.106 1.00 0.00 W1 H +ATOM 9858 OH2 TIP3X2457 -12.817 -7.178 -18.937 1.00 0.00 W1 O +ATOM 9859 H1 TIP3X2457 -12.300 -6.772 -18.241 1.00 0.00 W1 H +ATOM 9860 H2 TIP3X2457 -13.199 -6.441 -19.412 1.00 0.00 W1 H +ATOM 9861 OH2 TIP3X2458 -13.910 -9.216 -17.315 1.00 0.00 W1 O +ATOM 9862 H1 TIP3X2458 -14.114 -10.055 -17.728 1.00 0.00 W1 H +ATOM 9863 H2 TIP3X2458 -14.034 -8.570 -18.011 1.00 0.00 W1 H +ATOM 9864 OH2 TIP3X2459 -14.018 -8.342 -24.492 1.00 0.00 W1 O +ATOM 9865 H1 TIP3X2459 -13.661 -7.470 -24.662 1.00 0.00 W1 H +ATOM 9866 H2 TIP3X2459 -14.120 -8.733 -25.360 1.00 0.00 W1 H +ATOM 9867 OH2 TIP3X2460 -3.259 -6.078 -30.305 1.00 0.00 W1 O +ATOM 9868 H1 TIP3X2460 -2.553 -5.579 -30.717 1.00 0.00 W1 H +ATOM 9869 H2 TIP3X2460 -2.810 -6.708 -29.742 1.00 0.00 W1 H +ATOM 9870 OH2 TIP3X2461 -0.662 -8.731 -26.943 1.00 0.00 W1 O +ATOM 9871 H1 TIP3X2461 -0.950 -8.558 -26.046 1.00 0.00 W1 H +ATOM 9872 H2 TIP3X2461 -0.149 -7.959 -27.183 1.00 0.00 W1 H +ATOM 9873 OH2 TIP3X2462 -14.165 -9.614 -22.221 1.00 0.00 W1 O +ATOM 9874 H1 TIP3X2462 -14.070 -8.936 -22.889 1.00 0.00 W1 H +ATOM 9875 H2 TIP3X2462 -13.506 -9.395 -21.561 1.00 0.00 W1 H +ATOM 9876 OH2 TIP3X2463 -11.378 -1.107 -28.957 1.00 0.00 W1 O +ATOM 9877 H1 TIP3X2463 -11.607 -0.747 -29.814 1.00 0.00 W1 H +ATOM 9878 H2 TIP3X2463 -11.791 -1.970 -28.941 1.00 0.00 W1 H +ATOM 9879 OH2 TIP3X2464 -12.603 -5.874 -30.459 1.00 0.00 W1 O +ATOM 9880 H1 TIP3X2464 -13.418 -6.163 -30.867 1.00 0.00 W1 H +ATOM 9881 H2 TIP3X2464 -12.071 -6.667 -30.397 1.00 0.00 W1 H +ATOM 9882 OH2 TIP3X2465 -11.185 -5.034 -17.384 1.00 0.00 W1 O +ATOM 9883 H1 TIP3X2465 -11.758 -4.432 -17.858 1.00 0.00 W1 H +ATOM 9884 H2 TIP3X2465 -11.659 -5.230 -16.576 1.00 0.00 W1 H +ATOM 9885 OH2 TIP3X2466 -8.109 -0.291 -19.693 1.00 0.00 W1 O +ATOM 9886 H1 TIP3X2466 -7.791 -0.585 -18.840 1.00 0.00 W1 H +ATOM 9887 H2 TIP3X2466 -7.676 -0.869 -20.322 1.00 0.00 W1 H +ATOM 9888 OH2 TIP3X2467 -3.403 -0.050 -25.560 1.00 0.00 W1 O +ATOM 9889 H1 TIP3X2467 -3.815 -0.741 -26.078 1.00 0.00 W1 H +ATOM 9890 H2 TIP3X2467 -3.598 0.757 -26.036 1.00 0.00 W1 H +ATOM 9891 OH2 TIP3X2468 -6.825 -3.367 -28.308 1.00 0.00 W1 O +ATOM 9892 H1 TIP3X2468 -6.566 -2.582 -28.790 1.00 0.00 W1 H +ATOM 9893 H2 TIP3X2468 -7.394 -3.044 -27.610 1.00 0.00 W1 H +ATOM 9894 OH2 TIP3X2469 -6.808 -8.213 -29.236 1.00 0.00 W1 O +ATOM 9895 H1 TIP3X2469 -5.984 -8.140 -29.719 1.00 0.00 W1 H +ATOM 9896 H2 TIP3X2469 -6.800 -7.468 -28.635 1.00 0.00 W1 H +ATOM 9897 OH2 TIP3X2470 -3.406 -13.489 -19.445 1.00 0.00 W1 O +ATOM 9898 H1 TIP3X2470 -2.601 -13.720 -19.909 1.00 0.00 W1 H +ATOM 9899 H2 TIP3X2470 -3.116 -12.936 -18.720 1.00 0.00 W1 H +ATOM 9900 OH2 TIP3X2471 -15.441 -6.388 -28.039 1.00 0.00 W1 O +ATOM 9901 H1 TIP3X2471 -15.595 -6.295 -28.979 1.00 0.00 W1 H +ATOM 9902 H2 TIP3X2471 -14.488 -6.388 -27.950 1.00 0.00 W1 H +ATOM 9903 OH2 TIP3X2472 -4.679 -6.800 -21.443 1.00 0.00 W1 O +ATOM 9904 H1 TIP3X2472 -4.134 -6.138 -21.017 1.00 0.00 W1 H +ATOM 9905 H2 TIP3X2472 -4.220 -7.000 -22.259 1.00 0.00 W1 H +ATOM 9906 OH2 TIP3X2473 -5.857 -1.826 -30.366 1.00 0.00 W1 O +ATOM 9907 H1 TIP3X2473 -5.032 -1.791 -29.881 1.00 0.00 W1 H +ATOM 9908 H2 TIP3X2473 -5.654 -2.339 -31.148 1.00 0.00 W1 H +ATOM 9909 OH2 TIP3X2474 -5.865 -4.039 -18.715 1.00 0.00 W1 O +ATOM 9910 H1 TIP3X2474 -6.685 -3.792 -18.288 1.00 0.00 W1 H +ATOM 9911 H2 TIP3X2474 -6.094 -4.134 -19.639 1.00 0.00 W1 H +ATOM 9912 OH2 TIP3X2475 -9.239 -3.814 -26.828 1.00 0.00 W1 O +ATOM 9913 H1 TIP3X2475 -9.947 -3.667 -27.456 1.00 0.00 W1 H +ATOM 9914 H2 TIP3X2475 -9.577 -3.469 -26.001 1.00 0.00 W1 H +ATOM 9915 OH2 TIP3X2476 -12.675 -2.902 -18.117 1.00 0.00 W1 O +ATOM 9916 H1 TIP3X2476 -11.941 -2.291 -18.181 1.00 0.00 W1 H +ATOM 9917 H2 TIP3X2476 -12.987 -2.808 -17.217 1.00 0.00 W1 H +ATOM 9918 OH2 TIP3X2477 -13.085 -1.197 -24.015 1.00 0.00 W1 O +ATOM 9919 H1 TIP3X2477 -13.671 -1.938 -24.169 1.00 0.00 W1 H +ATOM 9920 H2 TIP3X2477 -12.642 -1.064 -24.853 1.00 0.00 W1 H +ATOM 9921 OH2 TIP3X2478 -4.731 -15.184 -22.935 1.00 0.00 W1 O +ATOM 9922 H1 TIP3X2478 -4.399 -15.259 -23.829 1.00 0.00 W1 H +ATOM 9923 H2 TIP3X2478 -4.776 -14.241 -22.774 1.00 0.00 W1 H +ATOM 9924 OH2 TIP3X2479 -7.493 -13.055 -22.700 1.00 0.00 W1 O +ATOM 9925 H1 TIP3X2479 -7.855 -12.566 -23.439 1.00 0.00 W1 H +ATOM 9926 H2 TIP3X2479 -8.225 -13.144 -22.090 1.00 0.00 W1 H +ATOM 9927 OH2 TIP3X2480 -8.774 -15.070 -28.772 1.00 0.00 W1 O +ATOM 9928 H1 TIP3X2480 -7.919 -15.326 -28.427 1.00 0.00 W1 H +ATOM 9929 H2 TIP3X2480 -9.293 -15.874 -28.747 1.00 0.00 W1 H +ATOM 9930 OH2 TIP3X2481 -6.023 -15.227 -27.729 1.00 0.00 W1 O +ATOM 9931 H1 TIP3X2481 -5.567 -15.963 -27.320 1.00 0.00 W1 H +ATOM 9932 H2 TIP3X2481 -5.615 -15.140 -28.590 1.00 0.00 W1 H +ATOM 9933 OH2 TIP3X2482 -11.383 -0.648 -16.274 1.00 0.00 W1 O +ATOM 9934 H1 TIP3X2482 -11.634 0.109 -16.804 1.00 0.00 W1 H +ATOM 9935 H2 TIP3X2482 -10.472 -0.817 -16.513 1.00 0.00 W1 H +ATOM 9936 OH2 TIP3X2483 -6.377 -1.954 -25.974 1.00 0.00 W1 O +ATOM 9937 H1 TIP3X2483 -5.716 -2.596 -25.714 1.00 0.00 W1 H +ATOM 9938 H2 TIP3X2483 -6.390 -1.319 -25.257 1.00 0.00 W1 H +ATOM 9939 OH2 TIP3X2484 -8.637 -1.051 -17.064 1.00 0.00 W1 O +ATOM 9940 H1 TIP3X2484 -8.420 -1.943 -16.794 1.00 0.00 W1 H +ATOM 9941 H2 TIP3X2484 -8.030 -0.497 -16.575 1.00 0.00 W1 H +ATOM 9942 OH2 TIP3X2485 -9.691 -12.933 -27.020 1.00 0.00 W1 O +ATOM 9943 H1 TIP3X2485 -9.034 -13.592 -27.242 1.00 0.00 W1 H +ATOM 9944 H2 TIP3X2485 -9.648 -12.864 -26.066 1.00 0.00 W1 H +ATOM 9945 OH2 TIP3X2486 -14.978 -14.595 -17.564 1.00 0.00 W1 O +ATOM 9946 H1 TIP3X2486 -14.229 -14.790 -18.128 1.00 0.00 W1 H +ATOM 9947 H2 TIP3X2486 -14.769 -15.020 -16.732 1.00 0.00 W1 H +ATOM 9948 OH2 TIP3X2487 -3.858 -1.867 -27.962 1.00 0.00 W1 O +ATOM 9949 H1 TIP3X2487 -3.713 -2.808 -27.859 1.00 0.00 W1 H +ATOM 9950 H2 TIP3X2487 -3.035 -1.535 -28.319 1.00 0.00 W1 H +ATOM 9951 OH2 TIP3X2488 -2.190 -15.101 -16.735 1.00 0.00 W1 O +ATOM 9952 H1 TIP3X2488 -2.804 -15.027 -17.466 1.00 0.00 W1 H +ATOM 9953 H2 TIP3X2488 -1.421 -14.606 -17.017 1.00 0.00 W1 H +ATOM 9954 OH2 TIP3X2489 -11.397 -0.888 -26.249 1.00 0.00 W1 O +ATOM 9955 H1 TIP3X2489 -11.403 -0.843 -27.205 1.00 0.00 W1 H +ATOM 9956 H2 TIP3X2489 -10.589 -0.442 -25.993 1.00 0.00 W1 H +ATOM 9957 OH2 TIP3X2490 -0.488 -1.950 -18.299 1.00 0.00 W1 O +ATOM 9958 H1 TIP3X2490 -1.210 -1.399 -17.998 1.00 0.00 W1 H +ATOM 9959 H2 TIP3X2490 0.300 -1.450 -18.085 1.00 0.00 W1 H +ATOM 9960 OH2 TIP3X2491 -12.862 -12.628 -26.619 1.00 0.00 W1 O +ATOM 9961 H1 TIP3X2491 -13.505 -12.239 -27.212 1.00 0.00 W1 H +ATOM 9962 H2 TIP3X2491 -12.059 -12.131 -26.777 1.00 0.00 W1 H +ATOM 9963 OH2 TIP3X2492 -11.433 -4.029 -28.888 1.00 0.00 W1 O +ATOM 9964 H1 TIP3X2492 -11.472 -4.657 -29.609 1.00 0.00 W1 H +ATOM 9965 H2 TIP3X2492 -12.153 -4.282 -28.310 1.00 0.00 W1 H +ATOM 9966 OH2 TIP3X2493 -13.539 -4.501 -11.248 1.00 0.00 W1 O +ATOM 9967 H1 TIP3X2493 -13.356 -4.577 -10.312 1.00 0.00 W1 H +ATOM 9968 H2 TIP3X2493 -13.563 -3.558 -11.413 1.00 0.00 W1 H +ATOM 9969 OH2 TIP3X2494 -10.452 -7.286 -11.532 1.00 0.00 W1 O +ATOM 9970 H1 TIP3X2494 -10.422 -6.377 -11.235 1.00 0.00 W1 H +ATOM 9971 H2 TIP3X2494 -9.945 -7.769 -10.880 1.00 0.00 W1 H +ATOM 9972 OH2 TIP3X2495 -1.284 -12.737 -9.188 1.00 0.00 W1 O +ATOM 9973 H1 TIP3X2495 -1.592 -12.399 -8.347 1.00 0.00 W1 H +ATOM 9974 H2 TIP3X2495 -1.217 -13.682 -9.056 1.00 0.00 W1 H +ATOM 9975 OH2 TIP3X2496 -2.687 -11.542 -7.234 1.00 0.00 W1 O +ATOM 9976 H1 TIP3X2496 -2.112 -11.770 -6.503 1.00 0.00 W1 H +ATOM 9977 H2 TIP3X2496 -3.562 -11.796 -6.939 1.00 0.00 W1 H +ATOM 9978 OH2 TIP3X2497 -3.479 -12.725 -11.097 1.00 0.00 W1 O +ATOM 9979 H1 TIP3X2497 -2.654 -12.541 -10.648 1.00 0.00 W1 H +ATOM 9980 H2 TIP3X2497 -3.403 -12.270 -11.936 1.00 0.00 W1 H +ATOM 9981 OH2 TIP3X2498 -11.127 -8.767 -8.365 1.00 0.00 W1 O +ATOM 9982 H1 TIP3X2498 -11.810 -9.217 -8.862 1.00 0.00 W1 H +ATOM 9983 H2 TIP3X2498 -10.642 -9.470 -7.933 1.00 0.00 W1 H +ATOM 9984 OH2 TIP3X2499 -11.328 -12.715 -13.794 1.00 0.00 W1 O +ATOM 9985 H1 TIP3X2499 -11.426 -13.377 -13.109 1.00 0.00 W1 H +ATOM 9986 H2 TIP3X2499 -11.512 -13.183 -14.608 1.00 0.00 W1 H +ATOM 9987 OH2 TIP3X2500 -14.377 -15.440 -11.444 1.00 0.00 W1 O +ATOM 9988 H1 TIP3X2500 -13.652 -14.819 -11.375 1.00 0.00 W1 H +ATOM 9989 H2 TIP3X2500 -14.749 -15.473 -10.563 1.00 0.00 W1 H +ATOM 9990 OH2 TIP3X2501 -14.795 -5.497 -4.730 1.00 0.00 W1 O +ATOM 9991 H1 TIP3X2501 -15.330 -6.099 -5.248 1.00 0.00 W1 H +ATOM 9992 H2 TIP3X2501 -15.266 -5.411 -3.901 1.00 0.00 W1 H +ATOM 9993 OH2 TIP3X2502 -0.099 -6.379 -15.306 1.00 0.00 W1 O +ATOM 9994 H1 TIP3X2502 -0.362 -7.129 -15.839 1.00 0.00 W1 H +ATOM 9995 H2 TIP3X2502 -0.354 -5.615 -15.823 1.00 0.00 W1 H +ATOM 9996 OH2 TIP3X2503 -14.151 -2.683 -15.589 1.00 0.00 W1 O +ATOM 9997 H1 TIP3X2503 -13.706 -3.232 -14.943 1.00 0.00 W1 H +ATOM 9998 H2 TIP3X2503 -15.048 -3.017 -15.610 1.00 0.00 W1 H +ATOM 9999 OH2 TIP3X2504 -2.058 -0.554 -14.330 1.00 0.00 W1 O +ATOM 10000 H1 TIP3X2504 -1.173 -0.882 -14.489 1.00 0.00 W1 H +ATOM 10001 H2 TIP3X2504 -2.288 -0.086 -15.133 1.00 0.00 W1 H +ATOM 10002 OH2 TIP3X2505 -13.979 -2.066 -12.634 1.00 0.00 W1 O +ATOM 10003 H1 TIP3X2505 -14.047 -1.230 -12.174 1.00 0.00 W1 H +ATOM 10004 H2 TIP3X2505 -14.875 -2.404 -12.651 1.00 0.00 W1 H +ATOM 10005 OH2 TIP3X2506 -1.399 -3.573 -14.990 1.00 0.00 W1 O +ATOM 10006 H1 TIP3X2506 -1.368 -3.653 -14.036 1.00 0.00 W1 H +ATOM 10007 H2 TIP3X2506 -2.232 -3.136 -15.166 1.00 0.00 W1 H +ATOM 10008 OH2 TIP3X2507 -6.151 -11.396 -14.996 1.00 0.00 W1 O +ATOM 10009 H1 TIP3X2507 -6.317 -11.099 -15.891 1.00 0.00 W1 H +ATOM 10010 H2 TIP3X2507 -7.022 -11.520 -14.619 1.00 0.00 W1 H +ATOM 10011 OH2 TIP3X2508 -5.493 -14.600 -15.019 1.00 0.00 W1 O +ATOM 10012 H1 TIP3X2508 -4.761 -13.984 -14.994 1.00 0.00 W1 H +ATOM 10013 H2 TIP3X2508 -5.252 -15.232 -15.695 1.00 0.00 W1 H +ATOM 10014 OH2 TIP3X2509 -13.454 -5.286 -8.676 1.00 0.00 W1 O +ATOM 10015 H1 TIP3X2509 -14.122 -4.962 -8.071 1.00 0.00 W1 H +ATOM 10016 H2 TIP3X2509 -12.661 -5.355 -8.144 1.00 0.00 W1 H +ATOM 10017 OH2 TIP3X2510 -12.550 -10.269 -14.068 1.00 0.00 W1 O +ATOM 10018 H1 TIP3X2510 -12.127 -9.623 -14.634 1.00 0.00 W1 H +ATOM 10019 H2 TIP3X2510 -11.838 -10.844 -13.787 1.00 0.00 W1 H +ATOM 10020 OH2 TIP3X2511 -12.025 -9.612 -4.757 1.00 0.00 W1 O +ATOM 10021 H1 TIP3X2511 -12.110 -8.821 -4.225 1.00 0.00 W1 H +ATOM 10022 H2 TIP3X2511 -11.110 -9.616 -5.037 1.00 0.00 W1 H +ATOM 10023 OH2 TIP3X2512 -12.843 -8.894 -11.571 1.00 0.00 W1 O +ATOM 10024 H1 TIP3X2512 -12.780 -9.183 -12.482 1.00 0.00 W1 H +ATOM 10025 H2 TIP3X2512 -12.067 -8.349 -11.438 1.00 0.00 W1 H +ATOM 10026 OH2 TIP3X2513 -3.822 -12.324 -13.811 1.00 0.00 W1 O +ATOM 10027 H1 TIP3X2513 -4.530 -11.836 -14.231 1.00 0.00 W1 H +ATOM 10028 H2 TIP3X2513 -3.097 -12.280 -14.435 1.00 0.00 W1 H +ATOM 10029 OH2 TIP3X2514 -15.272 -11.438 -2.723 1.00 0.00 W1 O +ATOM 10030 H1 TIP3X2514 -16.176 -11.144 -2.612 1.00 0.00 W1 H +ATOM 10031 H2 TIP3X2514 -15.131 -12.057 -2.007 1.00 0.00 W1 H +ATOM 10032 OH2 TIP3X2515 -7.361 -10.497 -12.041 1.00 0.00 W1 O +ATOM 10033 H1 TIP3X2515 -7.272 -9.918 -12.797 1.00 0.00 W1 H +ATOM 10034 H2 TIP3X2515 -8.130 -11.032 -12.237 1.00 0.00 W1 H +ATOM 10035 OH2 TIP3X2516 -9.058 -11.166 -14.353 1.00 0.00 W1 O +ATOM 10036 H1 TIP3X2516 -9.495 -10.973 -15.183 1.00 0.00 W1 H +ATOM 10037 H2 TIP3X2516 -9.465 -11.977 -14.050 1.00 0.00 W1 H +ATOM 10038 OH2 TIP3X2517 -14.709 -11.659 -15.413 1.00 0.00 W1 O +ATOM 10039 H1 TIP3X2517 -15.466 -11.851 -14.859 1.00 0.00 W1 H +ATOM 10040 H2 TIP3X2517 -14.175 -11.060 -14.891 1.00 0.00 W1 H +ATOM 10041 OH2 TIP3X2518 -15.225 -11.569 -11.396 1.00 0.00 W1 O +ATOM 10042 H1 TIP3X2518 -15.499 -11.693 -10.487 1.00 0.00 W1 H +ATOM 10043 H2 TIP3X2518 -15.420 -10.650 -11.582 1.00 0.00 W1 H +ATOM 10044 OH2 TIP3X2519 -11.225 -12.242 -3.335 1.00 0.00 W1 O +ATOM 10045 H1 TIP3X2519 -11.203 -13.048 -3.851 1.00 0.00 W1 H +ATOM 10046 H2 TIP3X2519 -11.619 -11.594 -3.920 1.00 0.00 W1 H +ATOM 10047 OH2 TIP3X2520 -0.657 -13.321 -13.644 1.00 0.00 W1 O +ATOM 10048 H1 TIP3X2520 -0.223 -13.094 -12.822 1.00 0.00 W1 H +ATOM 10049 H2 TIP3X2520 -1.177 -14.096 -13.434 1.00 0.00 W1 H +ATOM 10050 OH2 TIP3X2521 -9.503 -7.361 -14.466 1.00 0.00 W1 O +ATOM 10051 H1 TIP3X2521 -9.792 -7.483 -13.561 1.00 0.00 W1 H +ATOM 10052 H2 TIP3X2521 -8.814 -8.014 -14.587 1.00 0.00 W1 H +ATOM 10053 OH2 TIP3X2522 -14.018 -8.342 -8.934 1.00 0.00 W1 O +ATOM 10054 H1 TIP3X2522 -13.661 -7.470 -9.104 1.00 0.00 W1 H +ATOM 10055 H2 TIP3X2522 -14.120 -8.733 -9.802 1.00 0.00 W1 H +ATOM 10056 OH2 TIP3X2523 -0.662 -8.731 -11.385 1.00 0.00 W1 O +ATOM 10057 H1 TIP3X2523 -0.950 -8.558 -10.489 1.00 0.00 W1 H +ATOM 10058 H2 TIP3X2523 -0.149 -7.959 -11.626 1.00 0.00 W1 H +ATOM 10059 OH2 TIP3X2524 -14.165 -9.614 -6.663 1.00 0.00 W1 O +ATOM 10060 H1 TIP3X2524 -14.070 -8.936 -7.332 1.00 0.00 W1 H +ATOM 10061 H2 TIP3X2524 -13.506 -9.395 -6.004 1.00 0.00 W1 H +ATOM 10062 OH2 TIP3X2525 -12.603 -5.874 -14.901 1.00 0.00 W1 O +ATOM 10063 H1 TIP3X2525 -13.418 -6.163 -15.310 1.00 0.00 W1 H +ATOM 10064 H2 TIP3X2525 -12.071 -6.667 -14.840 1.00 0.00 W1 H +ATOM 10065 OH2 TIP3X2526 -15.441 -6.388 -12.482 1.00 0.00 W1 O +ATOM 10066 H1 TIP3X2526 -15.595 -6.295 -13.422 1.00 0.00 W1 H +ATOM 10067 H2 TIP3X2526 -14.488 -6.388 -12.393 1.00 0.00 W1 H +ATOM 10068 OH2 TIP3X2527 -5.857 -1.826 -14.808 1.00 0.00 W1 O +ATOM 10069 H1 TIP3X2527 -5.032 -1.791 -14.324 1.00 0.00 W1 H +ATOM 10070 H2 TIP3X2527 -5.654 -2.339 -15.591 1.00 0.00 W1 H +ATOM 10071 OH2 TIP3X2528 -14.978 -14.595 -2.006 1.00 0.00 W1 O +ATOM 10072 H1 TIP3X2528 -14.229 -14.790 -2.570 1.00 0.00 W1 H +ATOM 10073 H2 TIP3X2528 -14.769 -15.020 -1.175 1.00 0.00 W1 H +ATOM 10074 OH2 TIP3X2529 -11.433 -4.029 -13.330 1.00 0.00 W1 O +ATOM 10075 H1 TIP3X2529 -11.472 -4.657 -14.052 1.00 0.00 W1 H +ATOM 10076 H2 TIP3X2529 -12.153 -4.282 -12.752 1.00 0.00 W1 H +ATOM 10077 OH2 TIP3X2530 -9.528 -13.741 9.947 1.00 0.00 W1 O +ATOM 10078 H1 TIP3X2530 -9.270 -14.479 10.500 1.00 0.00 W1 H +ATOM 10079 H2 TIP3X2530 -10.205 -14.098 9.371 1.00 0.00 W1 H +ATOM 10080 OH2 TIP3X2531 -9.641 -10.417 9.695 1.00 0.00 W1 O +ATOM 10081 H1 TIP3X2531 -9.137 -11.119 10.107 1.00 0.00 W1 H +ATOM 10082 H2 TIP3X2531 -8.983 -9.775 9.428 1.00 0.00 W1 H +ATOM 10083 OH2 TIP3X2532 -7.297 -6.754 10.532 1.00 0.00 W1 O +ATOM 10084 H1 TIP3X2532 -6.420 -6.732 10.149 1.00 0.00 W1 H +ATOM 10085 H2 TIP3X2532 -7.562 -5.835 10.578 1.00 0.00 W1 H +ATOM 10086 OH2 TIP3X2533 -8.146 -4.206 10.342 1.00 0.00 W1 O +ATOM 10087 H1 TIP3X2533 -8.171 -3.979 9.413 1.00 0.00 W1 H +ATOM 10088 H2 TIP3X2533 -9.066 -4.260 10.601 1.00 0.00 W1 H +ATOM 10089 OH2 TIP3X2534 -6.680 -13.420 11.962 1.00 0.00 W1 O +ATOM 10090 H1 TIP3X2534 -7.423 -12.940 12.329 1.00 0.00 W1 H +ATOM 10091 H2 TIP3X2534 -7.061 -14.232 11.628 1.00 0.00 W1 H +ATOM 10092 OH2 TIP3X2535 -9.111 -9.205 14.100 1.00 0.00 W1 O +ATOM 10093 H1 TIP3X2535 -8.247 -8.806 13.998 1.00 0.00 W1 H +ATOM 10094 H2 TIP3X2535 -8.959 -10.142 13.977 1.00 0.00 W1 H +ATOM 10095 OH2 TIP3X2536 -3.202 -5.963 12.219 1.00 0.00 W1 O +ATOM 10096 H1 TIP3X2536 -4.104 -5.879 12.527 1.00 0.00 W1 H +ATOM 10097 H2 TIP3X2536 -3.033 -6.905 12.223 1.00 0.00 W1 H +ATOM 10098 OH2 TIP3X2537 -11.691 -8.316 15.169 1.00 0.00 W1 O +ATOM 10099 H1 TIP3X2537 -12.220 -8.550 14.407 1.00 0.00 W1 H +ATOM 10100 H2 TIP3X2537 -10.795 -8.268 14.835 1.00 0.00 W1 H +ATOM 10101 OH2 TIP3X2538 -3.770 -3.469 14.702 1.00 0.00 W1 O +ATOM 10102 H1 TIP3X2538 -4.404 -4.075 14.318 1.00 0.00 W1 H +ATOM 10103 H2 TIP3X2538 -3.657 -2.788 14.038 1.00 0.00 W1 H +ATOM 10104 OH2 TIP3X2539 -14.151 -2.683 -0.031 1.00 0.00 W1 O +ATOM 10105 H1 TIP3X2539 -13.706 -3.232 0.614 1.00 0.00 W1 H +ATOM 10106 H2 TIP3X2539 -15.048 -3.017 -0.053 1.00 0.00 W1 H +ATOM 10107 OH2 TIP3X2540 -0.665 -4.892 13.305 1.00 0.00 W1 O +ATOM 10108 H1 TIP3X2540 -0.775 -3.943 13.364 1.00 0.00 W1 H +ATOM 10109 H2 TIP3X2540 -1.558 -5.237 13.294 1.00 0.00 W1 H +ATOM 10110 OH2 TIP3X2541 -5.029 -15.278 13.452 1.00 0.00 W1 O +ATOM 10111 H1 TIP3X2541 -5.335 -14.530 12.939 1.00 0.00 W1 H +ATOM 10112 H2 TIP3X2541 -4.975 -15.995 12.820 1.00 0.00 W1 H +ATOM 10113 OH2 TIP3X2542 -12.349 -13.343 14.831 1.00 0.00 W1 O +ATOM 10114 H1 TIP3X2542 -13.226 -13.254 15.205 1.00 0.00 W1 H +ATOM 10115 H2 TIP3X2542 -12.286 -12.631 14.195 1.00 0.00 W1 H +ATOM 10116 OH2 TIP3X2543 -0.961 -14.506 10.804 1.00 0.00 W1 O +ATOM 10117 H1 TIP3X2543 -0.469 -15.136 11.331 1.00 0.00 W1 H +ATOM 10118 H2 TIP3X2543 -0.360 -14.264 10.098 1.00 0.00 W1 H +ATOM 10119 OH2 TIP3X2544 -8.786 -11.905 13.584 1.00 0.00 W1 O +ATOM 10120 H1 TIP3X2544 -9.653 -11.975 13.184 1.00 0.00 W1 H +ATOM 10121 H2 TIP3X2544 -8.841 -12.446 14.372 1.00 0.00 W1 H +ATOM 10122 OH2 TIP3X2545 -1.300 -9.185 15.337 1.00 0.00 W1 O +ATOM 10123 H1 TIP3X2545 -0.505 -9.718 15.320 1.00 0.00 W1 H +ATOM 10124 H2 TIP3X2545 -1.594 -9.220 16.247 1.00 0.00 W1 H +ATOM 10125 OH2 TIP3X2546 -13.115 -15.318 11.255 1.00 0.00 W1 O +ATOM 10126 H1 TIP3X2546 -13.340 -14.865 10.443 1.00 0.00 W1 H +ATOM 10127 H2 TIP3X2546 -12.285 -15.755 11.064 1.00 0.00 W1 H +ATOM 10128 OH2 TIP3X2547 -12.025 -9.612 10.801 1.00 0.00 W1 O +ATOM 10129 H1 TIP3X2547 -12.110 -8.821 11.333 1.00 0.00 W1 H +ATOM 10130 H2 TIP3X2547 -11.110 -9.616 10.520 1.00 0.00 W1 H +ATOM 10131 OH2 TIP3X2548 -15.272 -11.438 12.834 1.00 0.00 W1 O +ATOM 10132 H1 TIP3X2548 -16.176 -11.144 12.945 1.00 0.00 W1 H +ATOM 10133 H2 TIP3X2548 -15.131 -12.057 13.551 1.00 0.00 W1 H +ATOM 10134 OH2 TIP3X2549 -14.128 -14.600 8.817 1.00 0.00 W1 O +ATOM 10135 H1 TIP3X2549 -14.021 -15.302 8.174 1.00 0.00 W1 H +ATOM 10136 H2 TIP3X2549 -13.993 -13.795 8.318 1.00 0.00 W1 H +ATOM 10137 OH2 TIP3X2550 -2.607 -10.972 13.704 1.00 0.00 W1 O +ATOM 10138 H1 TIP3X2550 -2.295 -10.394 14.400 1.00 0.00 W1 H +ATOM 10139 H2 TIP3X2550 -3.551 -11.036 13.849 1.00 0.00 W1 H +ATOM 10140 OH2 TIP3X2551 -5.564 -10.966 13.651 1.00 0.00 W1 O +ATOM 10141 H1 TIP3X2551 -5.923 -10.398 12.970 1.00 0.00 W1 H +ATOM 10142 H2 TIP3X2551 -5.901 -11.837 13.440 1.00 0.00 W1 H +ATOM 10143 OH2 TIP3X2552 -8.347 -14.104 14.993 1.00 0.00 W1 O +ATOM 10144 H1 TIP3X2552 -8.814 -14.491 15.734 1.00 0.00 W1 H +ATOM 10145 H2 TIP3X2552 -7.433 -14.071 15.276 1.00 0.00 W1 H +ATOM 10146 OH2 TIP3X2553 -2.784 -8.759 11.675 1.00 0.00 W1 O +ATOM 10147 H1 TIP3X2553 -2.765 -9.409 12.378 1.00 0.00 W1 H +ATOM 10148 H2 TIP3X2553 -3.619 -8.911 11.231 1.00 0.00 W1 H +ATOM 10149 OH2 TIP3X2554 -11.225 -12.242 12.222 1.00 0.00 W1 O +ATOM 10150 H1 TIP3X2554 -11.203 -13.048 11.706 1.00 0.00 W1 H +ATOM 10151 H2 TIP3X2554 -11.619 -11.594 11.638 1.00 0.00 W1 H +ATOM 10152 OH2 TIP3X2555 -6.453 -8.687 12.589 1.00 0.00 W1 O +ATOM 10153 H1 TIP3X2555 -6.041 -7.856 12.826 1.00 0.00 W1 H +ATOM 10154 H2 TIP3X2555 -7.002 -8.477 11.835 1.00 0.00 W1 H +ATOM 10155 OH2 TIP3X2556 -5.326 -6.593 14.482 1.00 0.00 W1 O +ATOM 10156 H1 TIP3X2556 -6.004 -6.309 15.095 1.00 0.00 W1 H +ATOM 10157 H2 TIP3X2556 -4.528 -6.634 15.009 1.00 0.00 W1 H +ATOM 10158 OH2 TIP3X2557 -13.910 -9.216 13.800 1.00 0.00 W1 O +ATOM 10159 H1 TIP3X2557 -14.114 -10.055 13.387 1.00 0.00 W1 H +ATOM 10160 H2 TIP3X2557 -14.034 -8.570 13.104 1.00 0.00 W1 H +ATOM 10161 OH2 TIP3X2558 -11.185 -5.034 13.731 1.00 0.00 W1 O +ATOM 10162 H1 TIP3X2558 -11.758 -4.432 13.257 1.00 0.00 W1 H +ATOM 10163 H2 TIP3X2558 -11.659 -5.230 14.539 1.00 0.00 W1 H +ATOM 10164 OH2 TIP3X2559 -3.406 -13.489 11.670 1.00 0.00 W1 O +ATOM 10165 H1 TIP3X2559 -2.601 -13.720 11.206 1.00 0.00 W1 H +ATOM 10166 H2 TIP3X2559 -3.116 -12.936 12.395 1.00 0.00 W1 H +ATOM 10167 OH2 TIP3X2560 -12.675 -2.902 12.998 1.00 0.00 W1 O +ATOM 10168 H1 TIP3X2560 -11.941 -2.291 12.933 1.00 0.00 W1 H +ATOM 10169 H2 TIP3X2560 -12.987 -2.808 13.898 1.00 0.00 W1 H +ATOM 10170 OH2 TIP3X2561 -11.383 -0.648 14.841 1.00 0.00 W1 O +ATOM 10171 H1 TIP3X2561 -11.634 0.109 14.311 1.00 0.00 W1 H +ATOM 10172 H2 TIP3X2561 -10.472 -0.817 14.602 1.00 0.00 W1 H +ATOM 10173 OH2 TIP3X2562 -14.978 -14.595 13.551 1.00 0.00 W1 O +ATOM 10174 H1 TIP3X2562 -14.229 -14.790 12.987 1.00 0.00 W1 H +ATOM 10175 H2 TIP3X2562 -14.769 -15.020 14.383 1.00 0.00 W1 H +ATOM 10176 OH2 TIP3X2563 -2.190 -15.101 14.380 1.00 0.00 W1 O +ATOM 10177 H1 TIP3X2563 -2.804 -15.027 13.649 1.00 0.00 W1 H +ATOM 10178 H2 TIP3X2563 -1.421 -14.606 14.098 1.00 0.00 W1 H +ATOM 10179 OH2 TIP3X2564 -13.539 -4.501 19.866 1.00 0.00 W1 O +ATOM 10180 H1 TIP3X2564 -13.356 -4.577 20.803 1.00 0.00 W1 H +ATOM 10181 H2 TIP3X2564 -13.563 -3.558 19.702 1.00 0.00 W1 H +ATOM 10182 OH2 TIP3X2565 -2.436 -7.010 23.605 1.00 0.00 W1 O +ATOM 10183 H1 TIP3X2565 -2.201 -6.745 22.715 1.00 0.00 W1 H +ATOM 10184 H2 TIP3X2565 -1.607 -7.273 24.003 1.00 0.00 W1 H +ATOM 10185 OH2 TIP3X2566 -10.452 -7.286 19.583 1.00 0.00 W1 O +ATOM 10186 H1 TIP3X2566 -10.422 -6.377 19.880 1.00 0.00 W1 H +ATOM 10187 H2 TIP3X2566 -9.945 -7.769 20.235 1.00 0.00 W1 H +ATOM 10188 OH2 TIP3X2567 -2.649 -3.127 21.727 1.00 0.00 W1 O +ATOM 10189 H1 TIP3X2567 -2.924 -2.637 22.502 1.00 0.00 W1 H +ATOM 10190 H2 TIP3X2567 -3.174 -3.927 21.750 1.00 0.00 W1 H +ATOM 10191 OH2 TIP3X2568 -4.132 -4.684 18.770 1.00 0.00 W1 O +ATOM 10192 H1 TIP3X2568 -3.970 -4.912 17.855 1.00 0.00 W1 H +ATOM 10193 H2 TIP3X2568 -5.061 -4.455 18.799 1.00 0.00 W1 H +ATOM 10194 OH2 TIP3X2569 -0.285 -4.152 23.554 1.00 0.00 W1 O +ATOM 10195 H1 TIP3X2569 -0.837 -4.069 22.777 1.00 0.00 W1 H +ATOM 10196 H2 TIP3X2569 -0.895 -4.368 24.259 1.00 0.00 W1 H +ATOM 10197 OH2 TIP3X2570 -13.648 -2.887 26.005 1.00 0.00 W1 O +ATOM 10198 H1 TIP3X2570 -13.242 -2.684 26.848 1.00 0.00 W1 H +ATOM 10199 H2 TIP3X2570 -14.219 -3.633 26.188 1.00 0.00 W1 H +ATOM 10200 OH2 TIP3X2571 -6.273 -1.263 25.231 1.00 0.00 W1 O +ATOM 10201 H1 TIP3X2571 -5.972 -2.163 25.353 1.00 0.00 W1 H +ATOM 10202 H2 TIP3X2571 -5.648 -0.882 24.614 1.00 0.00 W1 H +ATOM 10203 OH2 TIP3X2572 -2.841 -1.306 25.111 1.00 0.00 W1 O +ATOM 10204 H1 TIP3X2572 -3.276 -0.483 24.892 1.00 0.00 W1 H +ATOM 10205 H2 TIP3X2572 -1.912 -1.080 25.161 1.00 0.00 W1 H +ATOM 10206 OH2 TIP3X2573 -10.392 -1.731 24.241 1.00 0.00 W1 O +ATOM 10207 H1 TIP3X2573 -10.037 -0.882 23.977 1.00 0.00 W1 H +ATOM 10208 H2 TIP3X2573 -11.327 -1.672 24.045 1.00 0.00 W1 H +ATOM 10209 OH2 TIP3X2574 -5.551 -9.839 23.142 1.00 0.00 W1 O +ATOM 10210 H1 TIP3X2574 -5.629 -10.648 22.638 1.00 0.00 W1 H +ATOM 10211 H2 TIP3X2574 -4.608 -9.700 23.230 1.00 0.00 W1 H +ATOM 10212 OH2 TIP3X2575 -9.528 -13.741 25.504 1.00 0.00 W1 O +ATOM 10213 H1 TIP3X2575 -9.270 -14.479 26.057 1.00 0.00 W1 H +ATOM 10214 H2 TIP3X2575 -10.205 -14.098 24.929 1.00 0.00 W1 H +ATOM 10215 OH2 TIP3X2576 -1.284 -12.737 21.927 1.00 0.00 W1 O +ATOM 10216 H1 TIP3X2576 -1.592 -12.399 22.768 1.00 0.00 W1 H +ATOM 10217 H2 TIP3X2576 -1.217 -13.682 22.059 1.00 0.00 W1 H +ATOM 10218 OH2 TIP3X2577 -2.687 -11.542 23.881 1.00 0.00 W1 O +ATOM 10219 H1 TIP3X2577 -2.112 -11.770 24.612 1.00 0.00 W1 H +ATOM 10220 H2 TIP3X2577 -3.562 -11.796 24.176 1.00 0.00 W1 H +ATOM 10221 OH2 TIP3X2578 -9.641 -10.417 25.252 1.00 0.00 W1 O +ATOM 10222 H1 TIP3X2578 -9.137 -11.119 25.664 1.00 0.00 W1 H +ATOM 10223 H2 TIP3X2578 -8.983 -9.775 24.986 1.00 0.00 W1 H +ATOM 10224 OH2 TIP3X2579 -2.164 -9.369 22.150 1.00 0.00 W1 O +ATOM 10225 H1 TIP3X2579 -2.123 -10.268 22.474 1.00 0.00 W1 H +ATOM 10226 H2 TIP3X2579 -2.282 -8.836 22.936 1.00 0.00 W1 H +ATOM 10227 OH2 TIP3X2580 -3.479 -12.725 20.018 1.00 0.00 W1 O +ATOM 10228 H1 TIP3X2580 -2.654 -12.541 20.467 1.00 0.00 W1 H +ATOM 10229 H2 TIP3X2580 -3.403 -12.270 19.179 1.00 0.00 W1 H +ATOM 10230 OH2 TIP3X2581 -7.297 -6.754 26.090 1.00 0.00 W1 O +ATOM 10231 H1 TIP3X2581 -6.420 -6.732 25.707 1.00 0.00 W1 H +ATOM 10232 H2 TIP3X2581 -7.562 -5.835 26.136 1.00 0.00 W1 H +ATOM 10233 OH2 TIP3X2582 -8.146 -4.206 25.900 1.00 0.00 W1 O +ATOM 10234 H1 TIP3X2582 -8.171 -3.979 24.970 1.00 0.00 W1 H +ATOM 10235 H2 TIP3X2582 -9.066 -4.260 26.158 1.00 0.00 W1 H +ATOM 10236 OH2 TIP3X2583 -13.283 -12.324 22.738 1.00 0.00 W1 O +ATOM 10237 H1 TIP3X2583 -13.609 -11.445 22.929 1.00 0.00 W1 H +ATOM 10238 H2 TIP3X2583 -13.407 -12.427 21.794 1.00 0.00 W1 H +ATOM 10239 OH2 TIP3X2584 -11.127 -8.767 22.750 1.00 0.00 W1 O +ATOM 10240 H1 TIP3X2584 -11.810 -9.217 22.253 1.00 0.00 W1 H +ATOM 10241 H2 TIP3X2584 -10.642 -9.470 23.182 1.00 0.00 W1 H +ATOM 10242 OH2 TIP3X2585 -5.072 -3.842 25.147 1.00 0.00 W1 O +ATOM 10243 H1 TIP3X2585 -5.314 -4.428 24.430 1.00 0.00 W1 H +ATOM 10244 H2 TIP3X2585 -4.122 -3.931 25.219 1.00 0.00 W1 H +ATOM 10245 OH2 TIP3X2586 -0.774 -0.208 21.927 1.00 0.00 W1 O +ATOM 10246 H1 TIP3X2586 -0.779 -0.676 22.762 1.00 0.00 W1 H +ATOM 10247 H2 TIP3X2586 -1.654 -0.337 21.574 1.00 0.00 W1 H +ATOM 10248 OH2 TIP3X2587 -8.902 -3.871 22.949 1.00 0.00 W1 O +ATOM 10249 H1 TIP3X2587 -9.473 -4.591 23.218 1.00 0.00 W1 H +ATOM 10250 H2 TIP3X2587 -9.362 -3.081 23.232 1.00 0.00 W1 H +ATOM 10251 OH2 TIP3X2588 -6.680 -13.420 27.520 1.00 0.00 W1 O +ATOM 10252 H1 TIP3X2588 -7.423 -12.940 27.887 1.00 0.00 W1 H +ATOM 10253 H2 TIP3X2588 -7.061 -14.232 27.185 1.00 0.00 W1 H +ATOM 10254 OH2 TIP3X2589 -11.328 -12.715 17.321 1.00 0.00 W1 O +ATOM 10255 H1 TIP3X2589 -11.426 -13.377 18.006 1.00 0.00 W1 H +ATOM 10256 H2 TIP3X2589 -11.512 -13.183 16.507 1.00 0.00 W1 H +ATOM 10257 OH2 TIP3X2590 -0.435 -11.793 25.511 1.00 0.00 W1 O +ATOM 10258 H1 TIP3X2590 0.084 -11.124 25.063 1.00 0.00 W1 H +ATOM 10259 H2 TIP3X2590 0.007 -11.917 26.351 1.00 0.00 W1 H +ATOM 10260 OH2 TIP3X2591 -14.377 -15.440 19.671 1.00 0.00 W1 O +ATOM 10261 H1 TIP3X2591 -13.652 -14.819 19.740 1.00 0.00 W1 H +ATOM 10262 H2 TIP3X2591 -14.749 -15.473 20.552 1.00 0.00 W1 H +ATOM 10263 OH2 TIP3X2592 -9.111 -9.205 29.657 1.00 0.00 W1 O +ATOM 10264 H1 TIP3X2592 -8.247 -8.806 29.556 1.00 0.00 W1 H +ATOM 10265 H2 TIP3X2592 -8.959 -10.142 29.534 1.00 0.00 W1 H +ATOM 10266 OH2 TIP3X2593 -5.945 -4.295 22.397 1.00 0.00 W1 O +ATOM 10267 H1 TIP3X2593 -5.851 -5.157 21.993 1.00 0.00 W1 H +ATOM 10268 H2 TIP3X2593 -6.878 -4.095 22.321 1.00 0.00 W1 H +ATOM 10269 OH2 TIP3X2594 -7.333 -6.011 19.928 1.00 0.00 W1 O +ATOM 10270 H1 TIP3X2594 -7.897 -6.625 20.397 1.00 0.00 W1 H +ATOM 10271 H2 TIP3X2594 -7.807 -5.180 19.956 1.00 0.00 W1 H +ATOM 10272 OH2 TIP3X2595 -14.795 -5.497 26.385 1.00 0.00 W1 O +ATOM 10273 H1 TIP3X2595 -15.330 -6.099 25.867 1.00 0.00 W1 H +ATOM 10274 H2 TIP3X2595 -15.266 -5.411 27.214 1.00 0.00 W1 H +ATOM 10275 OH2 TIP3X2596 -3.499 -6.477 20.752 1.00 0.00 W1 O +ATOM 10276 H1 TIP3X2596 -3.555 -7.391 20.476 1.00 0.00 W1 H +ATOM 10277 H2 TIP3X2596 -3.671 -5.974 19.956 1.00 0.00 W1 H +ATOM 10278 OH2 TIP3X2597 -3.202 -5.963 27.777 1.00 0.00 W1 O +ATOM 10279 H1 TIP3X2597 -4.104 -5.879 28.084 1.00 0.00 W1 H +ATOM 10280 H2 TIP3X2597 -3.033 -6.905 27.780 1.00 0.00 W1 H +ATOM 10281 OH2 TIP3X2598 -0.835 -8.003 25.582 1.00 0.00 W1 O +ATOM 10282 H1 TIP3X2598 -0.173 -8.684 25.463 1.00 0.00 W1 H +ATOM 10283 H2 TIP3X2598 -1.551 -8.443 26.041 1.00 0.00 W1 H +ATOM 10284 OH2 TIP3X2599 -11.691 -8.316 30.727 1.00 0.00 W1 O +ATOM 10285 H1 TIP3X2599 -12.220 -8.550 29.964 1.00 0.00 W1 H +ATOM 10286 H2 TIP3X2599 -10.795 -8.268 30.392 1.00 0.00 W1 H +ATOM 10287 OH2 TIP3X2600 -10.780 -5.110 26.288 1.00 0.00 W1 O +ATOM 10288 H1 TIP3X2600 -10.825 -5.665 27.067 1.00 0.00 W1 H +ATOM 10289 H2 TIP3X2600 -11.413 -4.412 26.454 1.00 0.00 W1 H +ATOM 10290 OH2 TIP3X2601 -2.109 -3.980 26.038 1.00 0.00 W1 O +ATOM 10291 H1 TIP3X2601 -1.685 -3.212 26.422 1.00 0.00 W1 H +ATOM 10292 H2 TIP3X2601 -2.413 -4.488 26.790 1.00 0.00 W1 H +ATOM 10293 OH2 TIP3X2602 -4.021 -2.005 27.863 1.00 0.00 W1 O +ATOM 10294 H1 TIP3X2602 -4.728 -2.634 27.720 1.00 0.00 W1 H +ATOM 10295 H2 TIP3X2602 -3.692 -1.810 26.985 1.00 0.00 W1 H +ATOM 10296 OH2 TIP3X2603 -3.770 -3.469 30.259 1.00 0.00 W1 O +ATOM 10297 H1 TIP3X2603 -4.404 -4.075 29.875 1.00 0.00 W1 H +ATOM 10298 H2 TIP3X2603 -3.657 -2.788 29.595 1.00 0.00 W1 H +ATOM 10299 OH2 TIP3X2604 -0.160 -1.560 24.326 1.00 0.00 W1 O +ATOM 10300 H1 TIP3X2604 0.518 -1.719 24.982 1.00 0.00 W1 H +ATOM 10301 H2 TIP3X2604 -0.394 -2.432 24.007 1.00 0.00 W1 H +ATOM 10302 OH2 TIP3X2605 -9.603 -15.089 22.718 1.00 0.00 W1 O +ATOM 10303 H1 TIP3X2605 -9.895 -14.180 22.657 1.00 0.00 W1 H +ATOM 10304 H2 TIP3X2605 -8.772 -15.107 22.245 1.00 0.00 W1 H +ATOM 10305 OH2 TIP3X2606 -7.479 -5.143 16.373 1.00 0.00 W1 O +ATOM 10306 H1 TIP3X2606 -8.175 -5.765 16.587 1.00 0.00 W1 H +ATOM 10307 H2 TIP3X2606 -7.497 -4.507 17.088 1.00 0.00 W1 H +ATOM 10308 OH2 TIP3X2607 -0.099 -6.379 15.809 1.00 0.00 W1 O +ATOM 10309 H1 TIP3X2607 -0.362 -7.129 15.275 1.00 0.00 W1 H +ATOM 10310 H2 TIP3X2607 -0.354 -5.615 15.292 1.00 0.00 W1 H +ATOM 10311 OH2 TIP3X2608 -14.151 -2.683 15.526 1.00 0.00 W1 O +ATOM 10312 H1 TIP3X2608 -13.706 -3.232 16.172 1.00 0.00 W1 H +ATOM 10313 H2 TIP3X2608 -15.048 -3.017 15.505 1.00 0.00 W1 H +ATOM 10314 OH2 TIP3X2609 -2.058 -0.554 16.785 1.00 0.00 W1 O +ATOM 10315 H1 TIP3X2609 -1.173 -0.882 16.626 1.00 0.00 W1 H +ATOM 10316 H2 TIP3X2609 -2.288 -0.086 15.982 1.00 0.00 W1 H +ATOM 10317 OH2 TIP3X2610 -0.665 -4.892 28.862 1.00 0.00 W1 O +ATOM 10318 H1 TIP3X2610 -0.775 -3.943 28.921 1.00 0.00 W1 H +ATOM 10319 H2 TIP3X2610 -1.558 -5.237 28.852 1.00 0.00 W1 H +ATOM 10320 OH2 TIP3X2611 -13.979 -2.066 18.481 1.00 0.00 W1 O +ATOM 10321 H1 TIP3X2611 -14.047 -1.230 18.941 1.00 0.00 W1 H +ATOM 10322 H2 TIP3X2611 -14.875 -2.404 18.464 1.00 0.00 W1 H +ATOM 10323 OH2 TIP3X2612 -1.399 -3.573 16.125 1.00 0.00 W1 O +ATOM 10324 H1 TIP3X2612 -1.368 -3.653 17.079 1.00 0.00 W1 H +ATOM 10325 H2 TIP3X2612 -2.232 -3.136 15.948 1.00 0.00 W1 H +ATOM 10326 OH2 TIP3X2613 -5.029 -15.278 29.009 1.00 0.00 W1 O +ATOM 10327 H1 TIP3X2613 -5.335 -14.530 28.497 1.00 0.00 W1 H +ATOM 10328 H2 TIP3X2613 -4.975 -15.995 28.377 1.00 0.00 W1 H +ATOM 10329 OH2 TIP3X2614 -10.815 -1.362 27.038 1.00 0.00 W1 O +ATOM 10330 H1 TIP3X2614 -9.967 -1.124 27.412 1.00 0.00 W1 H +ATOM 10331 H2 TIP3X2614 -10.603 -1.742 26.185 1.00 0.00 W1 H +ATOM 10332 OH2 TIP3X2615 -12.349 -13.343 30.389 1.00 0.00 W1 O +ATOM 10333 H1 TIP3X2615 -13.226 -13.254 30.763 1.00 0.00 W1 H +ATOM 10334 H2 TIP3X2615 -12.286 -12.631 29.752 1.00 0.00 W1 H +ATOM 10335 OH2 TIP3X2616 -6.151 -11.396 16.119 1.00 0.00 W1 O +ATOM 10336 H1 TIP3X2616 -6.317 -11.099 15.224 1.00 0.00 W1 H +ATOM 10337 H2 TIP3X2616 -7.022 -11.520 16.496 1.00 0.00 W1 H +ATOM 10338 OH2 TIP3X2617 -0.754 -3.636 19.167 1.00 0.00 W1 O +ATOM 10339 H1 TIP3X2617 -0.181 -4.373 19.380 1.00 0.00 W1 H +ATOM 10340 H2 TIP3X2617 -1.085 -3.337 20.014 1.00 0.00 W1 H +ATOM 10341 OH2 TIP3X2618 -5.493 -14.600 16.096 1.00 0.00 W1 O +ATOM 10342 H1 TIP3X2618 -4.761 -13.984 16.121 1.00 0.00 W1 H +ATOM 10343 H2 TIP3X2618 -5.252 -15.232 15.420 1.00 0.00 W1 H +ATOM 10344 OH2 TIP3X2619 -0.961 -14.506 26.361 1.00 0.00 W1 O +ATOM 10345 H1 TIP3X2619 -0.469 -15.136 26.889 1.00 0.00 W1 H +ATOM 10346 H2 TIP3X2619 -0.360 -14.264 25.656 1.00 0.00 W1 H +ATOM 10347 OH2 TIP3X2620 -13.454 -5.286 22.439 1.00 0.00 W1 O +ATOM 10348 H1 TIP3X2620 -14.122 -4.962 23.044 1.00 0.00 W1 H +ATOM 10349 H2 TIP3X2620 -12.661 -5.355 22.971 1.00 0.00 W1 H +ATOM 10350 OH2 TIP3X2621 -8.457 -3.867 29.549 1.00 0.00 W1 O +ATOM 10351 H1 TIP3X2621 -8.233 -4.245 30.400 1.00 0.00 W1 H +ATOM 10352 H2 TIP3X2621 -9.063 -4.496 29.159 1.00 0.00 W1 H +ATOM 10353 OH2 TIP3X2622 -4.977 -12.562 24.962 1.00 0.00 W1 O +ATOM 10354 H1 TIP3X2622 -4.918 -12.744 25.900 1.00 0.00 W1 H +ATOM 10355 H2 TIP3X2622 -5.916 -12.475 24.794 1.00 0.00 W1 H +ATOM 10356 OH2 TIP3X2623 -8.786 -11.905 29.141 1.00 0.00 W1 O +ATOM 10357 H1 TIP3X2623 -9.653 -11.975 28.741 1.00 0.00 W1 H +ATOM 10358 H2 TIP3X2623 -8.841 -12.446 29.929 1.00 0.00 W1 H +ATOM 10359 OH2 TIP3X2624 -1.300 -9.185 30.894 1.00 0.00 W1 O +ATOM 10360 H1 TIP3X2624 -0.505 -9.718 30.878 1.00 0.00 W1 H +ATOM 10361 H2 TIP3X2624 -1.594 -9.220 31.804 1.00 0.00 W1 H +ATOM 10362 OH2 TIP3X2625 -13.115 -15.318 26.813 1.00 0.00 W1 O +ATOM 10363 H1 TIP3X2625 -13.340 -14.865 26.000 1.00 0.00 W1 H +ATOM 10364 H2 TIP3X2625 -12.285 -15.755 26.621 1.00 0.00 W1 H +ATOM 10365 OH2 TIP3X2626 -7.020 -14.860 21.894 1.00 0.00 W1 O +ATOM 10366 H1 TIP3X2626 -6.538 -14.346 21.247 1.00 0.00 W1 H +ATOM 10367 H2 TIP3X2626 -6.676 -14.567 22.738 1.00 0.00 W1 H +ATOM 10368 OH2 TIP3X2627 -12.550 -10.269 17.047 1.00 0.00 W1 O +ATOM 10369 H1 TIP3X2627 -12.127 -9.623 16.481 1.00 0.00 W1 H +ATOM 10370 H2 TIP3X2627 -11.838 -10.844 17.328 1.00 0.00 W1 H +ATOM 10371 OH2 TIP3X2628 -12.025 -9.612 26.358 1.00 0.00 W1 O +ATOM 10372 H1 TIP3X2628 -12.110 -8.821 26.890 1.00 0.00 W1 H +ATOM 10373 H2 TIP3X2628 -11.110 -9.616 26.078 1.00 0.00 W1 H +ATOM 10374 OH2 TIP3X2629 -12.843 -8.894 19.544 1.00 0.00 W1 O +ATOM 10375 H1 TIP3X2629 -12.780 -9.183 18.633 1.00 0.00 W1 H +ATOM 10376 H2 TIP3X2629 -12.067 -8.349 19.677 1.00 0.00 W1 H +ATOM 10377 OH2 TIP3X2630 -3.822 -12.324 17.304 1.00 0.00 W1 O +ATOM 10378 H1 TIP3X2630 -4.530 -11.836 16.884 1.00 0.00 W1 H +ATOM 10379 H2 TIP3X2630 -3.097 -12.280 16.680 1.00 0.00 W1 H +ATOM 10380 OH2 TIP3X2631 -15.272 -11.438 28.392 1.00 0.00 W1 O +ATOM 10381 H1 TIP3X2631 -16.176 -11.144 28.503 1.00 0.00 W1 H +ATOM 10382 H2 TIP3X2631 -15.131 -12.057 29.108 1.00 0.00 W1 H +ATOM 10383 OH2 TIP3X2632 -14.128 -14.600 24.374 1.00 0.00 W1 O +ATOM 10384 H1 TIP3X2632 -14.021 -15.302 23.732 1.00 0.00 W1 H +ATOM 10385 H2 TIP3X2632 -13.993 -13.795 23.875 1.00 0.00 W1 H +ATOM 10386 OH2 TIP3X2633 -2.607 -10.972 29.262 1.00 0.00 W1 O +ATOM 10387 H1 TIP3X2633 -2.295 -10.394 29.958 1.00 0.00 W1 H +ATOM 10388 H2 TIP3X2633 -3.551 -11.036 29.407 1.00 0.00 W1 H +ATOM 10389 OH2 TIP3X2634 -5.564 -10.966 29.209 1.00 0.00 W1 O +ATOM 10390 H1 TIP3X2634 -5.923 -10.398 28.528 1.00 0.00 W1 H +ATOM 10391 H2 TIP3X2634 -5.901 -11.837 28.998 1.00 0.00 W1 H +ATOM 10392 OH2 TIP3X2635 -7.361 -10.497 19.074 1.00 0.00 W1 O +ATOM 10393 H1 TIP3X2635 -7.272 -9.918 18.318 1.00 0.00 W1 H +ATOM 10394 H2 TIP3X2635 -8.130 -11.032 18.878 1.00 0.00 W1 H +ATOM 10395 OH2 TIP3X2636 -9.058 -11.166 16.762 1.00 0.00 W1 O +ATOM 10396 H1 TIP3X2636 -9.495 -10.973 15.932 1.00 0.00 W1 H +ATOM 10397 H2 TIP3X2636 -9.465 -11.977 17.065 1.00 0.00 W1 H +ATOM 10398 OH2 TIP3X2637 -8.347 -14.104 30.551 1.00 0.00 W1 O +ATOM 10399 H1 TIP3X2637 -8.814 -14.491 31.291 1.00 0.00 W1 H +ATOM 10400 H2 TIP3X2637 -7.433 -14.071 30.833 1.00 0.00 W1 H +ATOM 10401 OH2 TIP3X2638 -2.784 -8.759 27.232 1.00 0.00 W1 O +ATOM 10402 H1 TIP3X2638 -2.765 -9.409 27.935 1.00 0.00 W1 H +ATOM 10403 H2 TIP3X2638 -3.619 -8.911 26.788 1.00 0.00 W1 H +ATOM 10404 OH2 TIP3X2639 -14.709 -11.659 15.702 1.00 0.00 W1 O +ATOM 10405 H1 TIP3X2639 -15.466 -11.851 16.256 1.00 0.00 W1 H +ATOM 10406 H2 TIP3X2639 -14.175 -11.060 16.224 1.00 0.00 W1 H +ATOM 10407 OH2 TIP3X2640 -14.791 -0.165 16.189 1.00 0.00 W1 O +ATOM 10408 H1 TIP3X2640 -14.374 -0.913 16.618 1.00 0.00 W1 H +ATOM 10409 H2 TIP3X2640 -14.778 0.528 16.848 1.00 0.00 W1 H +ATOM 10410 OH2 TIP3X2641 -6.043 -12.005 21.182 1.00 0.00 W1 O +ATOM 10411 H1 TIP3X2641 -6.380 -11.655 20.357 1.00 0.00 W1 H +ATOM 10412 H2 TIP3X2641 -5.146 -12.273 20.980 1.00 0.00 W1 H +ATOM 10413 OH2 TIP3X2642 -10.587 -12.695 22.926 1.00 0.00 W1 O +ATOM 10414 H1 TIP3X2642 -11.530 -12.742 22.767 1.00 0.00 W1 H +ATOM 10415 H2 TIP3X2642 -10.448 -11.820 23.289 1.00 0.00 W1 H +ATOM 10416 OH2 TIP3X2643 -15.225 -11.569 19.719 1.00 0.00 W1 O +ATOM 10417 H1 TIP3X2643 -15.499 -11.693 20.628 1.00 0.00 W1 H +ATOM 10418 H2 TIP3X2643 -15.420 -10.650 19.533 1.00 0.00 W1 H +ATOM 10419 OH2 TIP3X2644 -11.225 -12.242 27.779 1.00 0.00 W1 O +ATOM 10420 H1 TIP3X2644 -11.203 -13.048 27.264 1.00 0.00 W1 H +ATOM 10421 H2 TIP3X2644 -11.619 -11.594 27.195 1.00 0.00 W1 H +ATOM 10422 OH2 TIP3X2645 -10.642 -5.706 23.584 1.00 0.00 W1 O +ATOM 10423 H1 TIP3X2645 -10.713 -6.642 23.397 1.00 0.00 W1 H +ATOM 10424 H2 TIP3X2645 -10.637 -5.653 24.540 1.00 0.00 W1 H +ATOM 10425 OH2 TIP3X2646 -6.453 -8.687 28.147 1.00 0.00 W1 O +ATOM 10426 H1 TIP3X2646 -6.041 -7.856 28.383 1.00 0.00 W1 H +ATOM 10427 H2 TIP3X2646 -7.002 -8.477 27.392 1.00 0.00 W1 H +ATOM 10428 OH2 TIP3X2647 -0.657 -13.321 17.471 1.00 0.00 W1 O +ATOM 10429 H1 TIP3X2647 -0.223 -13.094 18.293 1.00 0.00 W1 H +ATOM 10430 H2 TIP3X2647 -1.177 -14.096 17.681 1.00 0.00 W1 H +ATOM 10431 OH2 TIP3X2648 -9.503 -7.361 16.649 1.00 0.00 W1 O +ATOM 10432 H1 TIP3X2648 -9.792 -7.483 17.554 1.00 0.00 W1 H +ATOM 10433 H2 TIP3X2648 -8.814 -8.014 16.528 1.00 0.00 W1 H +ATOM 10434 OH2 TIP3X2649 -2.799 -8.845 17.717 1.00 0.00 W1 O +ATOM 10435 H1 TIP3X2649 -3.664 -9.044 18.076 1.00 0.00 W1 H +ATOM 10436 H2 TIP3X2649 -2.242 -8.724 18.486 1.00 0.00 W1 H +ATOM 10437 OH2 TIP3X2650 -7.966 -8.591 24.188 1.00 0.00 W1 O +ATOM 10438 H1 TIP3X2650 -7.869 -7.794 24.709 1.00 0.00 W1 H +ATOM 10439 H2 TIP3X2650 -7.092 -8.980 24.179 1.00 0.00 W1 H +ATOM 10440 OH2 TIP3X2651 -8.221 -8.209 21.104 1.00 0.00 W1 O +ATOM 10441 H1 TIP3X2651 -7.600 -8.805 20.686 1.00 0.00 W1 H +ATOM 10442 H2 TIP3X2651 -8.196 -8.446 22.030 1.00 0.00 W1 H +ATOM 10443 OH2 TIP3X2652 -5.326 -6.593 30.039 1.00 0.00 W1 O +ATOM 10444 H1 TIP3X2652 -6.004 -6.309 30.653 1.00 0.00 W1 H +ATOM 10445 H2 TIP3X2652 -4.528 -6.634 30.566 1.00 0.00 W1 H +ATOM 10446 OH2 TIP3X2653 -12.817 -7.178 27.736 1.00 0.00 W1 O +ATOM 10447 H1 TIP3X2653 -12.300 -6.772 28.432 1.00 0.00 W1 H +ATOM 10448 H2 TIP3X2653 -13.199 -6.441 27.260 1.00 0.00 W1 H +ATOM 10449 OH2 TIP3X2654 -13.910 -9.216 29.357 1.00 0.00 W1 O +ATOM 10450 H1 TIP3X2654 -14.114 -10.055 28.945 1.00 0.00 W1 H +ATOM 10451 H2 TIP3X2654 -14.034 -8.570 28.662 1.00 0.00 W1 H +ATOM 10452 OH2 TIP3X2655 -14.018 -8.342 22.181 1.00 0.00 W1 O +ATOM 10453 H1 TIP3X2655 -13.661 -7.470 22.011 1.00 0.00 W1 H +ATOM 10454 H2 TIP3X2655 -14.120 -8.733 21.313 1.00 0.00 W1 H +ATOM 10455 OH2 TIP3X2656 -3.259 -6.078 16.367 1.00 0.00 W1 O +ATOM 10456 H1 TIP3X2656 -2.553 -5.579 15.955 1.00 0.00 W1 H +ATOM 10457 H2 TIP3X2656 -2.810 -6.708 16.931 1.00 0.00 W1 H +ATOM 10458 OH2 TIP3X2657 -0.662 -8.731 19.730 1.00 0.00 W1 O +ATOM 10459 H1 TIP3X2657 -0.950 -8.558 20.626 1.00 0.00 W1 H +ATOM 10460 H2 TIP3X2657 -0.149 -7.959 19.489 1.00 0.00 W1 H +ATOM 10461 OH2 TIP3X2658 -14.165 -9.614 24.452 1.00 0.00 W1 O +ATOM 10462 H1 TIP3X2658 -14.070 -8.936 23.783 1.00 0.00 W1 H +ATOM 10463 H2 TIP3X2658 -13.506 -9.395 25.111 1.00 0.00 W1 H +ATOM 10464 OH2 TIP3X2659 -11.378 -1.107 17.715 1.00 0.00 W1 O +ATOM 10465 H1 TIP3X2659 -11.607 -0.747 16.859 1.00 0.00 W1 H +ATOM 10466 H2 TIP3X2659 -11.791 -1.970 17.731 1.00 0.00 W1 H +ATOM 10467 OH2 TIP3X2660 -12.603 -5.874 16.214 1.00 0.00 W1 O +ATOM 10468 H1 TIP3X2660 -13.418 -6.163 15.805 1.00 0.00 W1 H +ATOM 10469 H2 TIP3X2660 -12.071 -6.667 16.275 1.00 0.00 W1 H +ATOM 10470 OH2 TIP3X2661 -11.185 -5.034 29.288 1.00 0.00 W1 O +ATOM 10471 H1 TIP3X2661 -11.758 -4.432 28.814 1.00 0.00 W1 H +ATOM 10472 H2 TIP3X2661 -11.659 -5.230 30.096 1.00 0.00 W1 H +ATOM 10473 OH2 TIP3X2662 -8.109 -0.291 26.979 1.00 0.00 W1 O +ATOM 10474 H1 TIP3X2662 -7.791 -0.585 27.833 1.00 0.00 W1 H +ATOM 10475 H2 TIP3X2662 -7.676 -0.869 26.350 1.00 0.00 W1 H +ATOM 10476 OH2 TIP3X2663 -3.403 -0.050 21.113 1.00 0.00 W1 O +ATOM 10477 H1 TIP3X2663 -3.815 -0.741 20.594 1.00 0.00 W1 H +ATOM 10478 H2 TIP3X2663 -3.598 0.757 20.636 1.00 0.00 W1 H +ATOM 10479 OH2 TIP3X2664 -6.825 -3.367 18.365 1.00 0.00 W1 O +ATOM 10480 H1 TIP3X2664 -6.566 -2.582 17.883 1.00 0.00 W1 H +ATOM 10481 H2 TIP3X2664 -7.394 -3.044 19.063 1.00 0.00 W1 H +ATOM 10482 OH2 TIP3X2665 -6.808 -8.213 17.436 1.00 0.00 W1 O +ATOM 10483 H1 TIP3X2665 -5.984 -8.140 16.953 1.00 0.00 W1 H +ATOM 10484 H2 TIP3X2665 -6.800 -7.468 18.038 1.00 0.00 W1 H +ATOM 10485 OH2 TIP3X2666 -3.406 -13.489 27.227 1.00 0.00 W1 O +ATOM 10486 H1 TIP3X2666 -2.601 -13.720 26.763 1.00 0.00 W1 H +ATOM 10487 H2 TIP3X2666 -3.116 -12.936 27.952 1.00 0.00 W1 H +ATOM 10488 OH2 TIP3X2667 -15.441 -6.388 18.633 1.00 0.00 W1 O +ATOM 10489 H1 TIP3X2667 -15.595 -6.295 17.693 1.00 0.00 W1 H +ATOM 10490 H2 TIP3X2667 -14.488 -6.388 18.722 1.00 0.00 W1 H +ATOM 10491 OH2 TIP3X2668 -4.679 -6.800 25.229 1.00 0.00 W1 O +ATOM 10492 H1 TIP3X2668 -4.134 -6.138 25.655 1.00 0.00 W1 H +ATOM 10493 H2 TIP3X2668 -4.220 -7.000 24.414 1.00 0.00 W1 H +ATOM 10494 OH2 TIP3X2669 -5.857 -1.826 16.307 1.00 0.00 W1 O +ATOM 10495 H1 TIP3X2669 -5.032 -1.791 16.791 1.00 0.00 W1 H +ATOM 10496 H2 TIP3X2669 -5.654 -2.339 15.524 1.00 0.00 W1 H +ATOM 10497 OH2 TIP3X2670 -5.865 -4.039 27.958 1.00 0.00 W1 O +ATOM 10498 H1 TIP3X2670 -6.685 -3.792 28.384 1.00 0.00 W1 H +ATOM 10499 H2 TIP3X2670 -6.094 -4.134 27.033 1.00 0.00 W1 H +ATOM 10500 OH2 TIP3X2671 -9.239 -3.814 19.844 1.00 0.00 W1 O +ATOM 10501 H1 TIP3X2671 -9.947 -3.667 19.216 1.00 0.00 W1 H +ATOM 10502 H2 TIP3X2671 -9.577 -3.469 20.671 1.00 0.00 W1 H +ATOM 10503 OH2 TIP3X2672 -12.675 -2.902 28.555 1.00 0.00 W1 O +ATOM 10504 H1 TIP3X2672 -11.941 -2.291 28.491 1.00 0.00 W1 H +ATOM 10505 H2 TIP3X2672 -12.987 -2.808 29.455 1.00 0.00 W1 H +ATOM 10506 OH2 TIP3X2673 -13.085 -1.197 22.657 1.00 0.00 W1 O +ATOM 10507 H1 TIP3X2673 -13.671 -1.938 22.503 1.00 0.00 W1 H +ATOM 10508 H2 TIP3X2673 -12.642 -1.064 21.819 1.00 0.00 W1 H +ATOM 10509 OH2 TIP3X2674 -4.731 -15.184 23.738 1.00 0.00 W1 O +ATOM 10510 H1 TIP3X2674 -4.399 -15.259 22.843 1.00 0.00 W1 H +ATOM 10511 H2 TIP3X2674 -4.776 -14.241 23.899 1.00 0.00 W1 H +ATOM 10512 OH2 TIP3X2675 -7.493 -13.055 23.972 1.00 0.00 W1 O +ATOM 10513 H1 TIP3X2675 -7.855 -12.566 23.233 1.00 0.00 W1 H +ATOM 10514 H2 TIP3X2675 -8.225 -13.144 24.582 1.00 0.00 W1 H +ATOM 10515 OH2 TIP3X2676 -8.774 -15.070 17.900 1.00 0.00 W1 O +ATOM 10516 H1 TIP3X2676 -7.919 -15.326 18.245 1.00 0.00 W1 H +ATOM 10517 H2 TIP3X2676 -9.293 -15.874 17.925 1.00 0.00 W1 H +ATOM 10518 OH2 TIP3X2677 -6.023 -15.227 18.944 1.00 0.00 W1 O +ATOM 10519 H1 TIP3X2677 -5.567 -15.963 19.352 1.00 0.00 W1 H +ATOM 10520 H2 TIP3X2677 -5.615 -15.140 18.082 1.00 0.00 W1 H +ATOM 10521 OH2 TIP3X2678 -11.383 -0.648 30.398 1.00 0.00 W1 O +ATOM 10522 H1 TIP3X2678 -11.634 0.109 29.869 1.00 0.00 W1 H +ATOM 10523 H2 TIP3X2678 -10.472 -0.817 30.159 1.00 0.00 W1 H +ATOM 10524 OH2 TIP3X2679 -6.377 -1.954 20.699 1.00 0.00 W1 O +ATOM 10525 H1 TIP3X2679 -5.716 -2.596 20.959 1.00 0.00 W1 H +ATOM 10526 H2 TIP3X2679 -6.390 -1.319 21.415 1.00 0.00 W1 H +ATOM 10527 OH2 TIP3X2680 -8.637 -1.051 29.608 1.00 0.00 W1 O +ATOM 10528 H1 TIP3X2680 -8.420 -1.943 29.879 1.00 0.00 W1 H +ATOM 10529 H2 TIP3X2680 -8.030 -0.497 30.098 1.00 0.00 W1 H +ATOM 10530 OH2 TIP3X2681 -9.691 -12.933 19.653 1.00 0.00 W1 O +ATOM 10531 H1 TIP3X2681 -9.034 -13.592 19.430 1.00 0.00 W1 H +ATOM 10532 H2 TIP3X2681 -9.648 -12.864 20.607 1.00 0.00 W1 H +ATOM 10533 OH2 TIP3X2682 -14.978 -14.595 29.109 1.00 0.00 W1 O +ATOM 10534 H1 TIP3X2682 -14.229 -14.790 28.545 1.00 0.00 W1 H +ATOM 10535 H2 TIP3X2682 -14.769 -15.020 29.940 1.00 0.00 W1 H +ATOM 10536 OH2 TIP3X2683 -3.858 -1.867 18.710 1.00 0.00 W1 O +ATOM 10537 H1 TIP3X2683 -3.713 -2.808 18.813 1.00 0.00 W1 H +ATOM 10538 H2 TIP3X2683 -3.035 -1.535 18.353 1.00 0.00 W1 H +ATOM 10539 OH2 TIP3X2684 -2.190 -15.101 29.937 1.00 0.00 W1 O +ATOM 10540 H1 TIP3X2684 -2.804 -15.027 29.207 1.00 0.00 W1 H +ATOM 10541 H2 TIP3X2684 -1.421 -14.606 29.656 1.00 0.00 W1 H +ATOM 10542 OH2 TIP3X2685 -11.397 -0.888 20.424 1.00 0.00 W1 O +ATOM 10543 H1 TIP3X2685 -11.403 -0.843 19.468 1.00 0.00 W1 H +ATOM 10544 H2 TIP3X2685 -10.589 -0.442 20.680 1.00 0.00 W1 H +ATOM 10545 OH2 TIP3X2686 -0.488 -1.950 28.373 1.00 0.00 W1 O +ATOM 10546 H1 TIP3X2686 -1.210 -1.399 28.674 1.00 0.00 W1 H +ATOM 10547 H2 TIP3X2686 0.300 -1.450 28.587 1.00 0.00 W1 H +ATOM 10548 OH2 TIP3X2687 -12.862 -12.628 20.053 1.00 0.00 W1 O +ATOM 10549 H1 TIP3X2687 -13.505 -12.239 19.461 1.00 0.00 W1 H +ATOM 10550 H2 TIP3X2687 -12.059 -12.131 19.895 1.00 0.00 W1 H +ATOM 10551 OH2 TIP3X2688 -11.433 -4.029 17.785 1.00 0.00 W1 O +ATOM 10552 H1 TIP3X2688 -11.472 -4.657 17.063 1.00 0.00 W1 H +ATOM 10553 H2 TIP3X2688 -12.153 -4.282 18.363 1.00 0.00 W1 H +ATOM 10554 OH2 TIP3X2689 -13.539 11.057 -26.806 1.00 0.00 W1 O +ATOM 10555 H1 TIP3X2689 -13.356 10.981 -25.869 1.00 0.00 W1 H +ATOM 10556 H2 TIP3X2689 -13.563 11.999 -26.970 1.00 0.00 W1 H +ATOM 10557 OH2 TIP3X2690 -2.436 8.548 -23.068 1.00 0.00 W1 O +ATOM 10558 H1 TIP3X2690 -2.201 8.812 -23.957 1.00 0.00 W1 H +ATOM 10559 H2 TIP3X2690 -1.607 8.284 -22.669 1.00 0.00 W1 H +ATOM 10560 OH2 TIP3X2691 -10.452 8.271 -27.089 1.00 0.00 W1 O +ATOM 10561 H1 TIP3X2691 -10.422 9.181 -26.792 1.00 0.00 W1 H +ATOM 10562 H2 TIP3X2691 -9.945 7.788 -26.437 1.00 0.00 W1 H +ATOM 10563 OH2 TIP3X2692 -2.649 12.431 -24.946 1.00 0.00 W1 O +ATOM 10564 H1 TIP3X2692 -2.924 12.921 -24.171 1.00 0.00 W1 H +ATOM 10565 H2 TIP3X2692 -3.174 11.631 -24.922 1.00 0.00 W1 H +ATOM 10566 OH2 TIP3X2693 -4.132 10.874 -27.903 1.00 0.00 W1 O +ATOM 10567 H1 TIP3X2693 -3.970 10.645 -28.818 1.00 0.00 W1 H +ATOM 10568 H2 TIP3X2693 -5.061 11.103 -27.873 1.00 0.00 W1 H +ATOM 10569 OH2 TIP3X2694 -0.285 11.406 -23.118 1.00 0.00 W1 O +ATOM 10570 H1 TIP3X2694 -0.837 11.489 -23.896 1.00 0.00 W1 H +ATOM 10571 H2 TIP3X2694 -0.895 11.189 -22.413 1.00 0.00 W1 H +ATOM 10572 OH2 TIP3X2695 -13.648 12.670 -20.667 1.00 0.00 W1 O +ATOM 10573 H1 TIP3X2695 -13.242 12.873 -19.824 1.00 0.00 W1 H +ATOM 10574 H2 TIP3X2695 -14.219 11.924 -20.484 1.00 0.00 W1 H +ATOM 10575 OH2 TIP3X2696 -6.273 14.295 -21.441 1.00 0.00 W1 O +ATOM 10576 H1 TIP3X2696 -5.972 13.394 -21.319 1.00 0.00 W1 H +ATOM 10577 H2 TIP3X2696 -5.648 14.675 -22.058 1.00 0.00 W1 H +ATOM 10578 OH2 TIP3X2697 -2.841 14.251 -21.561 1.00 0.00 W1 O +ATOM 10579 H1 TIP3X2697 -3.276 15.075 -21.781 1.00 0.00 W1 H +ATOM 10580 H2 TIP3X2697 -1.912 14.477 -21.512 1.00 0.00 W1 H +ATOM 10581 OH2 TIP3X2698 -10.392 13.826 -22.432 1.00 0.00 W1 O +ATOM 10582 H1 TIP3X2698 -10.037 14.675 -22.695 1.00 0.00 W1 H +ATOM 10583 H2 TIP3X2698 -11.327 13.886 -22.628 1.00 0.00 W1 H +ATOM 10584 OH2 TIP3X2699 -5.551 5.719 -23.530 1.00 0.00 W1 O +ATOM 10585 H1 TIP3X2699 -5.629 4.909 -24.035 1.00 0.00 W1 H +ATOM 10586 H2 TIP3X2699 -4.608 5.858 -23.443 1.00 0.00 W1 H +ATOM 10587 OH2 TIP3X2700 -9.528 1.816 -21.168 1.00 0.00 W1 O +ATOM 10588 H1 TIP3X2700 -9.270 1.079 -20.615 1.00 0.00 W1 H +ATOM 10589 H2 TIP3X2700 -10.205 1.460 -21.744 1.00 0.00 W1 H +ATOM 10590 OH2 TIP3X2701 -1.284 2.821 -24.745 1.00 0.00 W1 O +ATOM 10591 H1 TIP3X2701 -1.592 3.159 -23.904 1.00 0.00 W1 H +ATOM 10592 H2 TIP3X2701 -1.217 1.875 -24.614 1.00 0.00 W1 H +ATOM 10593 OH2 TIP3X2702 -2.687 4.016 -22.791 1.00 0.00 W1 O +ATOM 10594 H1 TIP3X2702 -2.112 3.788 -22.061 1.00 0.00 W1 H +ATOM 10595 H2 TIP3X2702 -3.562 3.761 -22.496 1.00 0.00 W1 H +ATOM 10596 OH2 TIP3X2703 -9.641 5.141 -21.420 1.00 0.00 W1 O +ATOM 10597 H1 TIP3X2703 -9.137 4.438 -21.008 1.00 0.00 W1 H +ATOM 10598 H2 TIP3X2703 -8.983 5.783 -21.687 1.00 0.00 W1 H +ATOM 10599 OH2 TIP3X2704 -2.164 6.189 -24.523 1.00 0.00 W1 O +ATOM 10600 H1 TIP3X2704 -2.123 5.289 -24.199 1.00 0.00 W1 H +ATOM 10601 H2 TIP3X2704 -2.282 6.722 -23.736 1.00 0.00 W1 H +ATOM 10602 OH2 TIP3X2705 -3.479 2.832 -26.654 1.00 0.00 W1 O +ATOM 10603 H1 TIP3X2705 -2.654 3.017 -26.205 1.00 0.00 W1 H +ATOM 10604 H2 TIP3X2705 -3.403 3.287 -27.493 1.00 0.00 W1 H +ATOM 10605 OH2 TIP3X2706 -7.297 8.804 -20.583 1.00 0.00 W1 O +ATOM 10606 H1 TIP3X2706 -6.420 8.826 -20.966 1.00 0.00 W1 H +ATOM 10607 H2 TIP3X2706 -7.562 9.722 -20.537 1.00 0.00 W1 H +ATOM 10608 OH2 TIP3X2707 -8.146 11.352 -20.773 1.00 0.00 W1 O +ATOM 10609 H1 TIP3X2707 -8.171 11.579 -21.702 1.00 0.00 W1 H +ATOM 10610 H2 TIP3X2707 -9.066 11.298 -20.514 1.00 0.00 W1 H +ATOM 10611 OH2 TIP3X2708 -13.283 3.233 -23.935 1.00 0.00 W1 O +ATOM 10612 H1 TIP3X2708 -13.609 4.113 -23.744 1.00 0.00 W1 H +ATOM 10613 H2 TIP3X2708 -13.407 3.131 -24.878 1.00 0.00 W1 H +ATOM 10614 OH2 TIP3X2709 -11.127 6.791 -23.922 1.00 0.00 W1 O +ATOM 10615 H1 TIP3X2709 -11.810 6.341 -24.419 1.00 0.00 W1 H +ATOM 10616 H2 TIP3X2709 -10.642 6.087 -23.490 1.00 0.00 W1 H +ATOM 10617 OH2 TIP3X2710 -5.072 11.715 -21.526 1.00 0.00 W1 O +ATOM 10618 H1 TIP3X2710 -5.314 11.129 -22.243 1.00 0.00 W1 H +ATOM 10619 H2 TIP3X2710 -4.122 11.626 -21.453 1.00 0.00 W1 H +ATOM 10620 OH2 TIP3X2711 -0.774 15.350 -24.745 1.00 0.00 W1 O +ATOM 10621 H1 TIP3X2711 -0.779 14.882 -23.910 1.00 0.00 W1 H +ATOM 10622 H2 TIP3X2711 -1.654 15.221 -25.098 1.00 0.00 W1 H +ATOM 10623 OH2 TIP3X2712 -8.902 11.686 -23.723 1.00 0.00 W1 O +ATOM 10624 H1 TIP3X2712 -9.473 10.967 -23.454 1.00 0.00 W1 H +ATOM 10625 H2 TIP3X2712 -9.362 12.476 -23.441 1.00 0.00 W1 H +ATOM 10626 OH2 TIP3X2713 -6.680 2.138 -19.153 1.00 0.00 W1 O +ATOM 10627 H1 TIP3X2713 -7.423 2.617 -18.786 1.00 0.00 W1 H +ATOM 10628 H2 TIP3X2713 -7.061 1.326 -19.487 1.00 0.00 W1 H +ATOM 10629 OH2 TIP3X2714 -11.328 2.843 -29.351 1.00 0.00 W1 O +ATOM 10630 H1 TIP3X2714 -11.426 2.181 -28.667 1.00 0.00 W1 H +ATOM 10631 H2 TIP3X2714 -11.512 2.374 -30.166 1.00 0.00 W1 H +ATOM 10632 OH2 TIP3X2715 -0.435 3.764 -21.162 1.00 0.00 W1 O +ATOM 10633 H1 TIP3X2715 0.084 4.433 -21.609 1.00 0.00 W1 H +ATOM 10634 H2 TIP3X2715 0.007 3.640 -20.322 1.00 0.00 W1 H +ATOM 10635 OH2 TIP3X2716 -14.377 0.117 -27.002 1.00 0.00 W1 O +ATOM 10636 H1 TIP3X2716 -13.652 0.738 -26.933 1.00 0.00 W1 H +ATOM 10637 H2 TIP3X2716 -14.749 0.084 -26.120 1.00 0.00 W1 H +ATOM 10638 OH2 TIP3X2717 -9.111 6.353 -17.015 1.00 0.00 W1 O +ATOM 10639 H1 TIP3X2717 -8.247 6.751 -17.116 1.00 0.00 W1 H +ATOM 10640 H2 TIP3X2717 -8.959 5.416 -17.138 1.00 0.00 W1 H +ATOM 10641 OH2 TIP3X2718 -5.945 11.263 -24.276 1.00 0.00 W1 O +ATOM 10642 H1 TIP3X2718 -5.851 10.400 -24.679 1.00 0.00 W1 H +ATOM 10643 H2 TIP3X2718 -6.878 11.463 -24.352 1.00 0.00 W1 H +ATOM 10644 OH2 TIP3X2719 -7.333 9.547 -26.745 1.00 0.00 W1 O +ATOM 10645 H1 TIP3X2719 -7.897 8.933 -26.275 1.00 0.00 W1 H +ATOM 10646 H2 TIP3X2719 -7.807 10.378 -26.716 1.00 0.00 W1 H +ATOM 10647 OH2 TIP3X2720 -14.795 10.060 -20.288 1.00 0.00 W1 O +ATOM 10648 H1 TIP3X2720 -15.330 9.458 -20.806 1.00 0.00 W1 H +ATOM 10649 H2 TIP3X2720 -15.266 10.146 -19.459 1.00 0.00 W1 H +ATOM 10650 OH2 TIP3X2721 -3.499 9.081 -25.920 1.00 0.00 W1 O +ATOM 10651 H1 TIP3X2721 -3.555 8.166 -26.197 1.00 0.00 W1 H +ATOM 10652 H2 TIP3X2721 -3.671 9.583 -26.716 1.00 0.00 W1 H +ATOM 10653 OH2 TIP3X2722 -3.202 9.595 -18.896 1.00 0.00 W1 O +ATOM 10654 H1 TIP3X2722 -4.104 9.678 -18.588 1.00 0.00 W1 H +ATOM 10655 H2 TIP3X2722 -3.033 8.653 -18.892 1.00 0.00 W1 H +ATOM 10656 OH2 TIP3X2723 -0.835 7.554 -21.090 1.00 0.00 W1 O +ATOM 10657 H1 TIP3X2723 -0.173 6.873 -21.209 1.00 0.00 W1 H +ATOM 10658 H2 TIP3X2723 -1.551 7.115 -20.631 1.00 0.00 W1 H +ATOM 10659 OH2 TIP3X2724 -10.780 10.447 -20.384 1.00 0.00 W1 O +ATOM 10660 H1 TIP3X2724 -10.825 9.892 -19.606 1.00 0.00 W1 H +ATOM 10661 H2 TIP3X2724 -11.413 11.145 -20.218 1.00 0.00 W1 H +ATOM 10662 OH2 TIP3X2725 -2.109 11.577 -20.635 1.00 0.00 W1 O +ATOM 10663 H1 TIP3X2725 -1.685 12.345 -20.251 1.00 0.00 W1 H +ATOM 10664 H2 TIP3X2725 -2.413 11.069 -19.882 1.00 0.00 W1 H +ATOM 10665 OH2 TIP3X2726 -4.021 13.553 -18.810 1.00 0.00 W1 O +ATOM 10666 H1 TIP3X2726 -4.728 12.924 -18.952 1.00 0.00 W1 H +ATOM 10667 H2 TIP3X2726 -3.692 13.747 -19.687 1.00 0.00 W1 H +ATOM 10668 OH2 TIP3X2727 -3.770 12.089 -16.413 1.00 0.00 W1 O +ATOM 10669 H1 TIP3X2727 -4.404 11.482 -16.797 1.00 0.00 W1 H +ATOM 10670 H2 TIP3X2727 -3.657 12.769 -17.077 1.00 0.00 W1 H +ATOM 10671 OH2 TIP3X2728 -0.160 13.997 -22.347 1.00 0.00 W1 O +ATOM 10672 H1 TIP3X2728 0.518 13.838 -21.690 1.00 0.00 W1 H +ATOM 10673 H2 TIP3X2728 -0.394 13.126 -22.666 1.00 0.00 W1 H +ATOM 10674 OH2 TIP3X2729 -9.603 0.468 -23.954 1.00 0.00 W1 O +ATOM 10675 H1 TIP3X2729 -9.895 1.378 -24.015 1.00 0.00 W1 H +ATOM 10676 H2 TIP3X2729 -8.772 0.451 -24.427 1.00 0.00 W1 H +ATOM 10677 OH2 TIP3X2730 -7.479 10.415 -30.300 1.00 0.00 W1 O +ATOM 10678 H1 TIP3X2730 -8.175 9.793 -30.085 1.00 0.00 W1 H +ATOM 10679 H2 TIP3X2730 -7.497 11.051 -29.585 1.00 0.00 W1 H +ATOM 10680 OH2 TIP3X2731 -0.099 9.178 -30.863 1.00 0.00 W1 O +ATOM 10681 H1 TIP3X2731 -0.362 8.428 -31.397 1.00 0.00 W1 H +ATOM 10682 H2 TIP3X2731 -0.354 9.942 -31.381 1.00 0.00 W1 H +ATOM 10683 OH2 TIP3X2732 -14.151 12.875 -31.146 1.00 0.00 W1 O +ATOM 10684 H1 TIP3X2732 -13.706 12.326 -30.501 1.00 0.00 W1 H +ATOM 10685 H2 TIP3X2732 -15.048 12.541 -31.167 1.00 0.00 W1 H +ATOM 10686 OH2 TIP3X2733 -2.058 15.004 -29.888 1.00 0.00 W1 O +ATOM 10687 H1 TIP3X2733 -1.173 14.676 -30.046 1.00 0.00 W1 H +ATOM 10688 H2 TIP3X2733 -2.288 15.472 -30.690 1.00 0.00 W1 H +ATOM 10689 OH2 TIP3X2734 -0.665 10.666 -17.810 1.00 0.00 W1 O +ATOM 10690 H1 TIP3X2734 -0.775 11.615 -17.751 1.00 0.00 W1 H +ATOM 10691 H2 TIP3X2734 -1.558 10.321 -17.820 1.00 0.00 W1 H +ATOM 10692 OH2 TIP3X2735 -13.979 13.492 -28.191 1.00 0.00 W1 O +ATOM 10693 H1 TIP3X2735 -14.047 14.328 -27.731 1.00 0.00 W1 H +ATOM 10694 H2 TIP3X2735 -14.875 13.153 -28.208 1.00 0.00 W1 H +ATOM 10695 OH2 TIP3X2736 -1.399 11.985 -30.547 1.00 0.00 W1 O +ATOM 10696 H1 TIP3X2736 -1.368 11.905 -29.594 1.00 0.00 W1 H +ATOM 10697 H2 TIP3X2736 -2.232 12.422 -30.724 1.00 0.00 W1 H +ATOM 10698 OH2 TIP3X2737 -5.029 0.279 -17.663 1.00 0.00 W1 O +ATOM 10699 H1 TIP3X2737 -5.335 1.028 -18.176 1.00 0.00 W1 H +ATOM 10700 H2 TIP3X2737 -4.975 -0.438 -18.295 1.00 0.00 W1 H +ATOM 10701 OH2 TIP3X2738 -10.815 14.196 -19.634 1.00 0.00 W1 O +ATOM 10702 H1 TIP3X2738 -9.967 14.434 -19.260 1.00 0.00 W1 H +ATOM 10703 H2 TIP3X2738 -10.603 13.816 -20.487 1.00 0.00 W1 H +ATOM 10704 OH2 TIP3X2739 -6.151 4.161 -30.553 1.00 0.00 W1 O +ATOM 10705 H1 TIP3X2739 -6.317 4.458 -31.448 1.00 0.00 W1 H +ATOM 10706 H2 TIP3X2739 -7.022 4.038 -30.176 1.00 0.00 W1 H +ATOM 10707 OH2 TIP3X2740 -0.754 11.922 -27.505 1.00 0.00 W1 O +ATOM 10708 H1 TIP3X2740 -0.181 11.185 -27.292 1.00 0.00 W1 H +ATOM 10709 H2 TIP3X2740 -1.085 12.221 -26.658 1.00 0.00 W1 H +ATOM 10710 OH2 TIP3X2741 -5.493 0.958 -30.576 1.00 0.00 W1 O +ATOM 10711 H1 TIP3X2741 -4.761 1.574 -30.552 1.00 0.00 W1 H +ATOM 10712 H2 TIP3X2741 -5.252 0.325 -31.253 1.00 0.00 W1 H +ATOM 10713 OH2 TIP3X2742 -0.961 1.051 -20.311 1.00 0.00 W1 O +ATOM 10714 H1 TIP3X2742 -0.469 0.422 -19.784 1.00 0.00 W1 H +ATOM 10715 H2 TIP3X2742 -0.360 1.294 -21.016 1.00 0.00 W1 H +ATOM 10716 OH2 TIP3X2743 -13.454 10.272 -24.233 1.00 0.00 W1 O +ATOM 10717 H1 TIP3X2743 -14.122 10.595 -23.629 1.00 0.00 W1 H +ATOM 10718 H2 TIP3X2743 -12.661 10.202 -23.701 1.00 0.00 W1 H +ATOM 10719 OH2 TIP3X2744 -4.977 2.995 -21.710 1.00 0.00 W1 O +ATOM 10720 H1 TIP3X2744 -4.918 2.814 -20.772 1.00 0.00 W1 H +ATOM 10721 H2 TIP3X2744 -5.916 3.083 -21.879 1.00 0.00 W1 H +ATOM 10722 OH2 TIP3X2745 -8.786 3.652 -17.531 1.00 0.00 W1 O +ATOM 10723 H1 TIP3X2745 -9.653 3.582 -17.931 1.00 0.00 W1 H +ATOM 10724 H2 TIP3X2745 -8.841 3.112 -16.743 1.00 0.00 W1 H +ATOM 10725 OH2 TIP3X2746 -13.115 0.239 -19.860 1.00 0.00 W1 O +ATOM 10726 H1 TIP3X2746 -13.340 0.693 -20.672 1.00 0.00 W1 H +ATOM 10727 H2 TIP3X2746 -12.285 -0.197 -20.051 1.00 0.00 W1 H +ATOM 10728 OH2 TIP3X2747 -7.020 0.697 -24.778 1.00 0.00 W1 O +ATOM 10729 H1 TIP3X2747 -6.538 1.211 -25.426 1.00 0.00 W1 H +ATOM 10730 H2 TIP3X2747 -6.676 0.991 -23.934 1.00 0.00 W1 H +ATOM 10731 OH2 TIP3X2748 -12.550 5.289 -29.625 1.00 0.00 W1 O +ATOM 10732 H1 TIP3X2748 -12.127 5.935 -30.191 1.00 0.00 W1 H +ATOM 10733 H2 TIP3X2748 -11.838 4.714 -29.344 1.00 0.00 W1 H +ATOM 10734 OH2 TIP3X2749 -12.025 5.945 -20.314 1.00 0.00 W1 O +ATOM 10735 H1 TIP3X2749 -12.110 6.737 -19.782 1.00 0.00 W1 H +ATOM 10736 H2 TIP3X2749 -11.110 5.941 -20.595 1.00 0.00 W1 H +ATOM 10737 OH2 TIP3X2750 -12.843 6.664 -27.129 1.00 0.00 W1 O +ATOM 10738 H1 TIP3X2750 -12.780 6.375 -28.039 1.00 0.00 W1 H +ATOM 10739 H2 TIP3X2750 -12.067 7.209 -26.996 1.00 0.00 W1 H +ATOM 10740 OH2 TIP3X2751 -3.822 3.233 -29.369 1.00 0.00 W1 O +ATOM 10741 H1 TIP3X2751 -4.530 3.722 -29.789 1.00 0.00 W1 H +ATOM 10742 H2 TIP3X2751 -3.097 3.277 -29.992 1.00 0.00 W1 H +ATOM 10743 OH2 TIP3X2752 -15.272 4.120 -18.281 1.00 0.00 W1 O +ATOM 10744 H1 TIP3X2752 -16.176 4.414 -18.170 1.00 0.00 W1 H +ATOM 10745 H2 TIP3X2752 -15.131 3.501 -17.564 1.00 0.00 W1 H +ATOM 10746 OH2 TIP3X2753 -14.128 0.957 -22.298 1.00 0.00 W1 O +ATOM 10747 H1 TIP3X2753 -14.021 0.256 -22.941 1.00 0.00 W1 H +ATOM 10748 H2 TIP3X2753 -13.993 1.763 -22.797 1.00 0.00 W1 H +ATOM 10749 OH2 TIP3X2754 -5.564 4.591 -17.464 1.00 0.00 W1 O +ATOM 10750 H1 TIP3X2754 -5.923 5.159 -18.145 1.00 0.00 W1 H +ATOM 10751 H2 TIP3X2754 -5.901 3.721 -17.675 1.00 0.00 W1 H +ATOM 10752 OH2 TIP3X2755 -7.361 5.060 -27.598 1.00 0.00 W1 O +ATOM 10753 H1 TIP3X2755 -7.272 5.640 -28.355 1.00 0.00 W1 H +ATOM 10754 H2 TIP3X2755 -8.130 4.526 -27.795 1.00 0.00 W1 H +ATOM 10755 OH2 TIP3X2756 -9.058 4.392 -29.911 1.00 0.00 W1 O +ATOM 10756 H1 TIP3X2756 -9.495 4.584 -30.740 1.00 0.00 W1 H +ATOM 10757 H2 TIP3X2756 -9.465 3.581 -29.607 1.00 0.00 W1 H +ATOM 10758 OH2 TIP3X2757 -2.784 6.798 -19.440 1.00 0.00 W1 O +ATOM 10759 H1 TIP3X2757 -2.765 6.149 -18.737 1.00 0.00 W1 H +ATOM 10760 H2 TIP3X2757 -3.619 6.647 -19.884 1.00 0.00 W1 H +ATOM 10761 OH2 TIP3X2758 -14.709 3.899 -30.971 1.00 0.00 W1 O +ATOM 10762 H1 TIP3X2758 -15.466 3.706 -30.417 1.00 0.00 W1 H +ATOM 10763 H2 TIP3X2758 -14.175 4.497 -30.448 1.00 0.00 W1 H +ATOM 10764 OH2 TIP3X2759 -14.791 15.392 -30.484 1.00 0.00 W1 O +ATOM 10765 H1 TIP3X2759 -14.374 14.645 -30.054 1.00 0.00 W1 H +ATOM 10766 H2 TIP3X2759 -14.778 16.086 -29.824 1.00 0.00 W1 H +ATOM 10767 OH2 TIP3X2760 -6.043 3.552 -25.491 1.00 0.00 W1 O +ATOM 10768 H1 TIP3X2760 -6.380 3.903 -26.315 1.00 0.00 W1 H +ATOM 10769 H2 TIP3X2760 -5.146 3.285 -25.692 1.00 0.00 W1 H +ATOM 10770 OH2 TIP3X2761 -10.587 2.863 -23.747 1.00 0.00 W1 O +ATOM 10771 H1 TIP3X2761 -11.530 2.815 -23.905 1.00 0.00 W1 H +ATOM 10772 H2 TIP3X2761 -10.448 3.737 -23.383 1.00 0.00 W1 H +ATOM 10773 OH2 TIP3X2762 -15.225 3.989 -26.953 1.00 0.00 W1 O +ATOM 10774 H1 TIP3X2762 -15.499 3.864 -26.045 1.00 0.00 W1 H +ATOM 10775 H2 TIP3X2762 -15.420 4.907 -27.139 1.00 0.00 W1 H +ATOM 10776 OH2 TIP3X2763 -11.225 3.316 -18.893 1.00 0.00 W1 O +ATOM 10777 H1 TIP3X2763 -11.203 2.510 -19.409 1.00 0.00 W1 H +ATOM 10778 H2 TIP3X2763 -11.619 3.964 -19.477 1.00 0.00 W1 H +ATOM 10779 OH2 TIP3X2764 -10.642 9.851 -23.088 1.00 0.00 W1 O +ATOM 10780 H1 TIP3X2764 -10.713 8.916 -23.276 1.00 0.00 W1 H +ATOM 10781 H2 TIP3X2764 -10.637 9.905 -22.132 1.00 0.00 W1 H +ATOM 10782 OH2 TIP3X2765 -6.453 6.870 -18.526 1.00 0.00 W1 O +ATOM 10783 H1 TIP3X2765 -6.041 7.701 -18.289 1.00 0.00 W1 H +ATOM 10784 H2 TIP3X2765 -7.002 7.081 -19.280 1.00 0.00 W1 H +ATOM 10785 OH2 TIP3X2766 -0.657 2.237 -29.201 1.00 0.00 W1 O +ATOM 10786 H1 TIP3X2766 -0.223 2.464 -28.379 1.00 0.00 W1 H +ATOM 10787 H2 TIP3X2766 -1.177 1.461 -28.992 1.00 0.00 W1 H +ATOM 10788 OH2 TIP3X2767 -9.503 8.197 -30.023 1.00 0.00 W1 O +ATOM 10789 H1 TIP3X2767 -9.792 8.075 -29.119 1.00 0.00 W1 H +ATOM 10790 H2 TIP3X2767 -8.814 7.543 -30.144 1.00 0.00 W1 H +ATOM 10791 OH2 TIP3X2768 -2.799 6.713 -28.955 1.00 0.00 W1 O +ATOM 10792 H1 TIP3X2768 -3.664 6.514 -28.596 1.00 0.00 W1 H +ATOM 10793 H2 TIP3X2768 -2.242 6.834 -28.186 1.00 0.00 W1 H +ATOM 10794 OH2 TIP3X2769 -7.966 6.967 -22.485 1.00 0.00 W1 O +ATOM 10795 H1 TIP3X2769 -7.869 7.764 -21.963 1.00 0.00 W1 H +ATOM 10796 H2 TIP3X2769 -7.092 6.577 -22.493 1.00 0.00 W1 H +ATOM 10797 OH2 TIP3X2770 -8.221 7.348 -25.569 1.00 0.00 W1 O +ATOM 10798 H1 TIP3X2770 -7.600 6.752 -25.987 1.00 0.00 W1 H +ATOM 10799 H2 TIP3X2770 -8.196 7.111 -24.642 1.00 0.00 W1 H +ATOM 10800 OH2 TIP3X2771 -12.817 8.379 -18.937 1.00 0.00 W1 O +ATOM 10801 H1 TIP3X2771 -12.300 8.785 -18.241 1.00 0.00 W1 H +ATOM 10802 H2 TIP3X2771 -13.199 9.117 -19.412 1.00 0.00 W1 H +ATOM 10803 OH2 TIP3X2772 -13.910 6.342 -17.315 1.00 0.00 W1 O +ATOM 10804 H1 TIP3X2772 -14.114 5.502 -17.728 1.00 0.00 W1 H +ATOM 10805 H2 TIP3X2772 -14.034 6.987 -18.011 1.00 0.00 W1 H +ATOM 10806 OH2 TIP3X2773 -14.018 7.215 -24.492 1.00 0.00 W1 O +ATOM 10807 H1 TIP3X2773 -13.661 8.087 -24.662 1.00 0.00 W1 H +ATOM 10808 H2 TIP3X2773 -14.120 6.824 -25.360 1.00 0.00 W1 H +ATOM 10809 OH2 TIP3X2774 -3.259 9.480 -30.305 1.00 0.00 W1 O +ATOM 10810 H1 TIP3X2774 -2.553 9.978 -30.717 1.00 0.00 W1 H +ATOM 10811 H2 TIP3X2774 -2.810 8.849 -29.742 1.00 0.00 W1 H +ATOM 10812 OH2 TIP3X2775 -0.662 6.827 -26.943 1.00 0.00 W1 O +ATOM 10813 H1 TIP3X2775 -0.950 7.000 -26.046 1.00 0.00 W1 H +ATOM 10814 H2 TIP3X2775 -0.149 7.598 -27.183 1.00 0.00 W1 H +ATOM 10815 OH2 TIP3X2776 -14.165 5.944 -22.221 1.00 0.00 W1 O +ATOM 10816 H1 TIP3X2776 -14.070 6.622 -22.889 1.00 0.00 W1 H +ATOM 10817 H2 TIP3X2776 -13.506 6.163 -21.561 1.00 0.00 W1 H +ATOM 10818 OH2 TIP3X2777 -11.378 14.451 -28.957 1.00 0.00 W1 O +ATOM 10819 H1 TIP3X2777 -11.607 14.811 -29.814 1.00 0.00 W1 H +ATOM 10820 H2 TIP3X2777 -11.791 13.587 -28.941 1.00 0.00 W1 H +ATOM 10821 OH2 TIP3X2778 -12.603 9.684 -30.459 1.00 0.00 W1 O +ATOM 10822 H1 TIP3X2778 -13.418 9.394 -30.867 1.00 0.00 W1 H +ATOM 10823 H2 TIP3X2778 -12.071 8.890 -30.397 1.00 0.00 W1 H +ATOM 10824 OH2 TIP3X2779 -8.109 15.266 -19.693 1.00 0.00 W1 O +ATOM 10825 H1 TIP3X2779 -7.791 14.972 -18.840 1.00 0.00 W1 H +ATOM 10826 H2 TIP3X2779 -7.676 14.689 -20.322 1.00 0.00 W1 H +ATOM 10827 OH2 TIP3X2780 -3.403 15.508 -25.560 1.00 0.00 W1 O +ATOM 10828 H1 TIP3X2780 -3.815 14.817 -26.078 1.00 0.00 W1 H +ATOM 10829 H2 TIP3X2780 -3.598 16.315 -26.036 1.00 0.00 W1 H +ATOM 10830 OH2 TIP3X2781 -6.825 12.190 -28.308 1.00 0.00 W1 O +ATOM 10831 H1 TIP3X2781 -6.566 12.976 -28.790 1.00 0.00 W1 H +ATOM 10832 H2 TIP3X2781 -7.394 12.514 -27.610 1.00 0.00 W1 H +ATOM 10833 OH2 TIP3X2782 -6.808 7.345 -29.236 1.00 0.00 W1 O +ATOM 10834 H1 TIP3X2782 -5.984 7.418 -29.719 1.00 0.00 W1 H +ATOM 10835 H2 TIP3X2782 -6.800 8.089 -28.635 1.00 0.00 W1 H +ATOM 10836 OH2 TIP3X2783 -3.406 2.068 -19.445 1.00 0.00 W1 O +ATOM 10837 H1 TIP3X2783 -2.601 1.838 -19.909 1.00 0.00 W1 H +ATOM 10838 H2 TIP3X2783 -3.116 2.621 -18.720 1.00 0.00 W1 H +ATOM 10839 OH2 TIP3X2784 -15.441 9.170 -28.039 1.00 0.00 W1 O +ATOM 10840 H1 TIP3X2784 -15.595 9.262 -28.979 1.00 0.00 W1 H +ATOM 10841 H2 TIP3X2784 -14.488 9.170 -27.950 1.00 0.00 W1 H +ATOM 10842 OH2 TIP3X2785 -4.679 8.758 -21.443 1.00 0.00 W1 O +ATOM 10843 H1 TIP3X2785 -4.134 9.419 -21.017 1.00 0.00 W1 H +ATOM 10844 H2 TIP3X2785 -4.220 8.557 -22.259 1.00 0.00 W1 H +ATOM 10845 OH2 TIP3X2786 -5.857 13.731 -30.366 1.00 0.00 W1 O +ATOM 10846 H1 TIP3X2786 -5.032 13.766 -29.881 1.00 0.00 W1 H +ATOM 10847 H2 TIP3X2786 -5.654 13.219 -31.148 1.00 0.00 W1 H +ATOM 10848 OH2 TIP3X2787 -5.865 11.519 -18.715 1.00 0.00 W1 O +ATOM 10849 H1 TIP3X2787 -6.685 11.766 -18.288 1.00 0.00 W1 H +ATOM 10850 H2 TIP3X2787 -6.094 11.423 -19.639 1.00 0.00 W1 H +ATOM 10851 OH2 TIP3X2788 -9.239 11.744 -26.828 1.00 0.00 W1 O +ATOM 10852 H1 TIP3X2788 -9.947 11.891 -27.456 1.00 0.00 W1 H +ATOM 10853 H2 TIP3X2788 -9.577 12.088 -26.001 1.00 0.00 W1 H +ATOM 10854 OH2 TIP3X2789 -12.675 12.656 -18.117 1.00 0.00 W1 O +ATOM 10855 H1 TIP3X2789 -11.941 13.267 -18.181 1.00 0.00 W1 H +ATOM 10856 H2 TIP3X2789 -12.987 12.750 -17.217 1.00 0.00 W1 H +ATOM 10857 OH2 TIP3X2790 -13.085 14.360 -24.015 1.00 0.00 W1 O +ATOM 10858 H1 TIP3X2790 -13.671 13.619 -24.169 1.00 0.00 W1 H +ATOM 10859 H2 TIP3X2790 -12.642 14.494 -24.853 1.00 0.00 W1 H +ATOM 10860 OH2 TIP3X2791 -4.731 0.374 -22.935 1.00 0.00 W1 O +ATOM 10861 H1 TIP3X2791 -4.399 0.298 -23.829 1.00 0.00 W1 H +ATOM 10862 H2 TIP3X2791 -4.776 1.316 -22.774 1.00 0.00 W1 H +ATOM 10863 OH2 TIP3X2792 -7.493 2.502 -22.700 1.00 0.00 W1 O +ATOM 10864 H1 TIP3X2792 -7.855 2.991 -23.439 1.00 0.00 W1 H +ATOM 10865 H2 TIP3X2792 -8.225 2.413 -22.090 1.00 0.00 W1 H +ATOM 10866 OH2 TIP3X2793 -8.774 0.487 -28.772 1.00 0.00 W1 O +ATOM 10867 H1 TIP3X2793 -7.919 0.232 -28.427 1.00 0.00 W1 H +ATOM 10868 H2 TIP3X2793 -9.293 -0.317 -28.747 1.00 0.00 W1 H +ATOM 10869 OH2 TIP3X2794 -6.023 0.331 -27.729 1.00 0.00 W1 O +ATOM 10870 H1 TIP3X2794 -5.567 -0.405 -27.320 1.00 0.00 W1 H +ATOM 10871 H2 TIP3X2794 -5.615 0.417 -28.590 1.00 0.00 W1 H +ATOM 10872 OH2 TIP3X2795 -11.383 14.909 -16.274 1.00 0.00 W1 O +ATOM 10873 H1 TIP3X2795 -11.634 15.666 -16.804 1.00 0.00 W1 H +ATOM 10874 H2 TIP3X2795 -10.472 14.740 -16.513 1.00 0.00 W1 H +ATOM 10875 OH2 TIP3X2796 -6.377 13.604 -25.974 1.00 0.00 W1 O +ATOM 10876 H1 TIP3X2796 -5.716 12.962 -25.714 1.00 0.00 W1 H +ATOM 10877 H2 TIP3X2796 -6.390 14.238 -25.257 1.00 0.00 W1 H +ATOM 10878 OH2 TIP3X2797 -8.637 14.506 -17.064 1.00 0.00 W1 O +ATOM 10879 H1 TIP3X2797 -8.420 13.614 -16.794 1.00 0.00 W1 H +ATOM 10880 H2 TIP3X2797 -8.030 15.060 -16.575 1.00 0.00 W1 H +ATOM 10881 OH2 TIP3X2798 -9.691 2.624 -27.020 1.00 0.00 W1 O +ATOM 10882 H1 TIP3X2798 -9.034 1.965 -27.242 1.00 0.00 W1 H +ATOM 10883 H2 TIP3X2798 -9.648 2.693 -26.066 1.00 0.00 W1 H +ATOM 10884 OH2 TIP3X2799 -14.978 0.963 -17.564 1.00 0.00 W1 O +ATOM 10885 H1 TIP3X2799 -14.229 0.767 -18.128 1.00 0.00 W1 H +ATOM 10886 H2 TIP3X2799 -14.769 0.537 -16.732 1.00 0.00 W1 H +ATOM 10887 OH2 TIP3X2800 -3.858 13.690 -27.962 1.00 0.00 W1 O +ATOM 10888 H1 TIP3X2800 -3.713 12.749 -27.859 1.00 0.00 W1 H +ATOM 10889 H2 TIP3X2800 -3.035 14.022 -28.319 1.00 0.00 W1 H +ATOM 10890 OH2 TIP3X2801 -2.190 0.456 -16.735 1.00 0.00 W1 O +ATOM 10891 H1 TIP3X2801 -2.804 0.530 -17.466 1.00 0.00 W1 H +ATOM 10892 H2 TIP3X2801 -1.421 0.951 -17.017 1.00 0.00 W1 H +ATOM 10893 OH2 TIP3X2802 -11.397 14.669 -26.249 1.00 0.00 W1 O +ATOM 10894 H1 TIP3X2802 -11.403 14.714 -27.205 1.00 0.00 W1 H +ATOM 10895 H2 TIP3X2802 -10.589 15.115 -25.993 1.00 0.00 W1 H +ATOM 10896 OH2 TIP3X2803 -0.488 13.608 -18.299 1.00 0.00 W1 O +ATOM 10897 H1 TIP3X2803 -1.210 14.159 -17.998 1.00 0.00 W1 H +ATOM 10898 H2 TIP3X2803 0.300 14.107 -18.085 1.00 0.00 W1 H +ATOM 10899 OH2 TIP3X2804 -12.862 2.930 -26.619 1.00 0.00 W1 O +ATOM 10900 H1 TIP3X2804 -13.505 3.318 -27.212 1.00 0.00 W1 H +ATOM 10901 H2 TIP3X2804 -12.059 3.427 -26.777 1.00 0.00 W1 H +ATOM 10902 OH2 TIP3X2805 -11.433 11.529 -28.888 1.00 0.00 W1 O +ATOM 10903 H1 TIP3X2805 -11.472 10.901 -29.609 1.00 0.00 W1 H +ATOM 10904 H2 TIP3X2805 -12.153 11.275 -28.310 1.00 0.00 W1 H +ATOM 10905 OH2 TIP3X2806 -0.435 3.764 -5.604 1.00 0.00 W1 O +ATOM 10906 H1 TIP3X2806 0.084 4.433 -6.051 1.00 0.00 W1 H +ATOM 10907 H2 TIP3X2806 0.007 3.640 -4.764 1.00 0.00 W1 H +ATOM 10908 OH2 TIP3X2807 -3.202 9.595 -3.338 1.00 0.00 W1 O +ATOM 10909 H1 TIP3X2807 -4.104 9.678 -3.030 1.00 0.00 W1 H +ATOM 10910 H2 TIP3X2807 -3.033 8.653 -3.335 1.00 0.00 W1 H +ATOM 10911 OH2 TIP3X2808 -0.835 7.554 -5.533 1.00 0.00 W1 O +ATOM 10912 H1 TIP3X2808 -0.173 6.873 -5.652 1.00 0.00 W1 H +ATOM 10913 H2 TIP3X2808 -1.551 7.115 -5.074 1.00 0.00 W1 H +ATOM 10914 OH2 TIP3X2809 -3.770 12.089 -0.856 1.00 0.00 W1 O +ATOM 10915 H1 TIP3X2809 -4.404 11.482 -1.240 1.00 0.00 W1 H +ATOM 10916 H2 TIP3X2809 -3.657 12.769 -1.520 1.00 0.00 W1 H +ATOM 10917 OH2 TIP3X2810 -14.151 12.875 -15.589 1.00 0.00 W1 O +ATOM 10918 H1 TIP3X2810 -13.706 12.326 -14.943 1.00 0.00 W1 H +ATOM 10919 H2 TIP3X2810 -15.048 12.541 -15.610 1.00 0.00 W1 H +ATOM 10920 OH2 TIP3X2811 -2.058 15.004 -14.330 1.00 0.00 W1 O +ATOM 10921 H1 TIP3X2811 -1.173 14.676 -14.489 1.00 0.00 W1 H +ATOM 10922 H2 TIP3X2811 -2.288 15.472 -15.133 1.00 0.00 W1 H +ATOM 10923 OH2 TIP3X2812 -0.665 10.666 -2.253 1.00 0.00 W1 O +ATOM 10924 H1 TIP3X2812 -0.775 11.615 -2.194 1.00 0.00 W1 H +ATOM 10925 H2 TIP3X2812 -1.558 10.321 -2.263 1.00 0.00 W1 H +ATOM 10926 OH2 TIP3X2813 -13.979 13.492 -12.634 1.00 0.00 W1 O +ATOM 10927 H1 TIP3X2813 -14.047 14.328 -12.174 1.00 0.00 W1 H +ATOM 10928 H2 TIP3X2813 -14.875 13.153 -12.651 1.00 0.00 W1 H +ATOM 10929 OH2 TIP3X2814 -0.754 11.922 -11.948 1.00 0.00 W1 O +ATOM 10930 H1 TIP3X2814 -0.181 11.185 -11.735 1.00 0.00 W1 H +ATOM 10931 H2 TIP3X2814 -1.085 12.221 -11.101 1.00 0.00 W1 H +ATOM 10932 OH2 TIP3X2815 -1.300 6.373 -0.221 1.00 0.00 W1 O +ATOM 10933 H1 TIP3X2815 -0.505 5.839 -0.237 1.00 0.00 W1 H +ATOM 10934 H2 TIP3X2815 -1.594 6.338 0.690 1.00 0.00 W1 H +ATOM 10935 OH2 TIP3X2816 -12.550 5.289 -14.068 1.00 0.00 W1 O +ATOM 10936 H1 TIP3X2816 -12.127 5.935 -14.634 1.00 0.00 W1 H +ATOM 10937 H2 TIP3X2816 -11.838 4.714 -13.787 1.00 0.00 W1 H +ATOM 10938 OH2 TIP3X2817 -2.607 4.585 -1.853 1.00 0.00 W1 O +ATOM 10939 H1 TIP3X2817 -2.295 5.164 -1.157 1.00 0.00 W1 H +ATOM 10940 H2 TIP3X2817 -3.551 4.521 -1.708 1.00 0.00 W1 H +ATOM 10941 OH2 TIP3X2818 -2.784 6.798 -3.883 1.00 0.00 W1 O +ATOM 10942 H1 TIP3X2818 -2.765 6.149 -3.180 1.00 0.00 W1 H +ATOM 10943 H2 TIP3X2818 -3.619 6.647 -4.327 1.00 0.00 W1 H +ATOM 10944 OH2 TIP3X2819 -14.791 15.392 -14.926 1.00 0.00 W1 O +ATOM 10945 H1 TIP3X2819 -14.374 14.645 -14.497 1.00 0.00 W1 H +ATOM 10946 H2 TIP3X2819 -14.778 16.086 -14.267 1.00 0.00 W1 H +ATOM 10947 OH2 TIP3X2820 -5.326 8.964 -1.075 1.00 0.00 W1 O +ATOM 10948 H1 TIP3X2820 -6.004 9.248 -0.462 1.00 0.00 W1 H +ATOM 10949 H2 TIP3X2820 -4.528 8.923 -0.549 1.00 0.00 W1 H +ATOM 10950 OH2 TIP3X2821 -11.378 14.451 -13.399 1.00 0.00 W1 O +ATOM 10951 H1 TIP3X2821 -11.607 14.811 -14.256 1.00 0.00 W1 H +ATOM 10952 H2 TIP3X2821 -11.791 13.587 -13.383 1.00 0.00 W1 H +ATOM 10953 OH2 TIP3X2822 -3.406 2.068 -3.888 1.00 0.00 W1 O +ATOM 10954 H1 TIP3X2822 -2.601 1.838 -4.351 1.00 0.00 W1 H +ATOM 10955 H2 TIP3X2822 -3.116 2.621 -3.163 1.00 0.00 W1 H +ATOM 10956 OH2 TIP3X2823 -5.857 13.731 -14.808 1.00 0.00 W1 O +ATOM 10957 H1 TIP3X2823 -5.032 13.766 -14.324 1.00 0.00 W1 H +ATOM 10958 H2 TIP3X2823 -5.654 13.219 -15.591 1.00 0.00 W1 H +ATOM 10959 OH2 TIP3X2824 -13.085 14.360 -8.458 1.00 0.00 W1 O +ATOM 10960 H1 TIP3X2824 -13.671 13.619 -8.611 1.00 0.00 W1 H +ATOM 10961 H2 TIP3X2824 -12.642 14.494 -9.296 1.00 0.00 W1 H +ATOM 10962 OH2 TIP3X2825 -6.377 13.604 -10.416 1.00 0.00 W1 O +ATOM 10963 H1 TIP3X2825 -5.716 12.962 -10.156 1.00 0.00 W1 H +ATOM 10964 H2 TIP3X2825 -6.390 14.238 -9.700 1.00 0.00 W1 H +ATOM 10965 OH2 TIP3X2826 -3.858 13.690 -12.405 1.00 0.00 W1 O +ATOM 10966 H1 TIP3X2826 -3.713 12.749 -12.302 1.00 0.00 W1 H +ATOM 10967 H2 TIP3X2826 -3.035 14.022 -12.762 1.00 0.00 W1 H +ATOM 10968 OH2 TIP3X2827 -11.397 14.669 -10.691 1.00 0.00 W1 O +ATOM 10969 H1 TIP3X2827 -11.403 14.714 -11.647 1.00 0.00 W1 H +ATOM 10970 H2 TIP3X2827 -10.589 15.115 -10.435 1.00 0.00 W1 H +ATOM 10971 OH2 TIP3X2828 -2.649 12.431 6.169 1.00 0.00 W1 O +ATOM 10972 H1 TIP3X2828 -2.924 12.921 6.944 1.00 0.00 W1 H +ATOM 10973 H2 TIP3X2828 -3.174 11.631 6.192 1.00 0.00 W1 H +ATOM 10974 OH2 TIP3X2829 -0.285 11.406 7.997 1.00 0.00 W1 O +ATOM 10975 H1 TIP3X2829 -0.837 11.489 7.219 1.00 0.00 W1 H +ATOM 10976 H2 TIP3X2829 -0.895 11.189 8.702 1.00 0.00 W1 H +ATOM 10977 OH2 TIP3X2830 -6.273 14.295 9.674 1.00 0.00 W1 O +ATOM 10978 H1 TIP3X2830 -5.972 13.394 9.796 1.00 0.00 W1 H +ATOM 10979 H2 TIP3X2830 -5.648 14.675 9.057 1.00 0.00 W1 H +ATOM 10980 OH2 TIP3X2831 -2.841 14.251 9.554 1.00 0.00 W1 O +ATOM 10981 H1 TIP3X2831 -3.276 15.075 9.334 1.00 0.00 W1 H +ATOM 10982 H2 TIP3X2831 -1.912 14.477 9.603 1.00 0.00 W1 H +ATOM 10983 OH2 TIP3X2832 -9.528 1.816 9.947 1.00 0.00 W1 O +ATOM 10984 H1 TIP3X2832 -9.270 1.079 10.500 1.00 0.00 W1 H +ATOM 10985 H2 TIP3X2832 -10.205 1.460 9.371 1.00 0.00 W1 H +ATOM 10986 OH2 TIP3X2833 -5.072 11.715 9.589 1.00 0.00 W1 O +ATOM 10987 H1 TIP3X2833 -5.314 11.129 8.872 1.00 0.00 W1 H +ATOM 10988 H2 TIP3X2833 -4.122 11.626 9.662 1.00 0.00 W1 H +ATOM 10989 OH2 TIP3X2834 -0.774 15.350 6.370 1.00 0.00 W1 O +ATOM 10990 H1 TIP3X2834 -0.779 14.882 7.205 1.00 0.00 W1 H +ATOM 10991 H2 TIP3X2834 -1.654 15.221 6.017 1.00 0.00 W1 H +ATOM 10992 OH2 TIP3X2835 -9.111 6.353 14.100 1.00 0.00 W1 O +ATOM 10993 H1 TIP3X2835 -8.247 6.751 13.998 1.00 0.00 W1 H +ATOM 10994 H2 TIP3X2835 -8.959 5.416 13.977 1.00 0.00 W1 H +ATOM 10995 OH2 TIP3X2836 -14.795 10.060 10.827 1.00 0.00 W1 O +ATOM 10996 H1 TIP3X2836 -15.330 9.458 10.309 1.00 0.00 W1 H +ATOM 10997 H2 TIP3X2836 -15.266 10.146 11.656 1.00 0.00 W1 H +ATOM 10998 OH2 TIP3X2837 -3.202 9.595 12.219 1.00 0.00 W1 O +ATOM 10999 H1 TIP3X2837 -4.104 9.678 12.527 1.00 0.00 W1 H +ATOM 11000 H2 TIP3X2837 -3.033 8.653 12.223 1.00 0.00 W1 H +ATOM 11001 OH2 TIP3X2838 -11.691 7.241 15.169 1.00 0.00 W1 O +ATOM 11002 H1 TIP3X2838 -12.220 7.007 14.407 1.00 0.00 W1 H +ATOM 11003 H2 TIP3X2838 -10.795 7.289 14.835 1.00 0.00 W1 H +ATOM 11004 OH2 TIP3X2839 -2.109 11.577 10.480 1.00 0.00 W1 O +ATOM 11005 H1 TIP3X2839 -1.685 12.345 10.864 1.00 0.00 W1 H +ATOM 11006 H2 TIP3X2839 -2.413 11.069 11.233 1.00 0.00 W1 H +ATOM 11007 OH2 TIP3X2840 -4.021 13.553 12.305 1.00 0.00 W1 O +ATOM 11008 H1 TIP3X2840 -4.728 12.924 12.163 1.00 0.00 W1 H +ATOM 11009 H2 TIP3X2840 -3.692 13.747 11.428 1.00 0.00 W1 H +ATOM 11010 OH2 TIP3X2841 -3.770 12.089 14.702 1.00 0.00 W1 O +ATOM 11011 H1 TIP3X2841 -4.404 11.482 14.318 1.00 0.00 W1 H +ATOM 11012 H2 TIP3X2841 -3.657 12.769 14.038 1.00 0.00 W1 H +ATOM 11013 OH2 TIP3X2842 -0.160 13.997 8.768 1.00 0.00 W1 O +ATOM 11014 H1 TIP3X2842 0.518 13.838 9.425 1.00 0.00 W1 H +ATOM 11015 H2 TIP3X2842 -0.394 13.126 8.449 1.00 0.00 W1 H +ATOM 11016 OH2 TIP3X2843 -0.099 9.178 0.252 1.00 0.00 W1 O +ATOM 11017 H1 TIP3X2843 -0.362 8.428 -0.282 1.00 0.00 W1 H +ATOM 11018 H2 TIP3X2843 -0.354 9.942 -0.266 1.00 0.00 W1 H +ATOM 11019 OH2 TIP3X2844 -2.058 15.004 1.227 1.00 0.00 W1 O +ATOM 11020 H1 TIP3X2844 -1.173 14.676 1.069 1.00 0.00 W1 H +ATOM 11021 H2 TIP3X2844 -2.288 15.472 0.425 1.00 0.00 W1 H +ATOM 11022 OH2 TIP3X2845 -1.399 11.985 0.568 1.00 0.00 W1 O +ATOM 11023 H1 TIP3X2845 -1.368 11.905 1.521 1.00 0.00 W1 H +ATOM 11024 H2 TIP3X2845 -2.232 12.422 0.391 1.00 0.00 W1 H +ATOM 11025 OH2 TIP3X2846 -12.349 2.214 14.831 1.00 0.00 W1 O +ATOM 11026 H1 TIP3X2846 -13.226 2.304 15.205 1.00 0.00 W1 H +ATOM 11027 H2 TIP3X2846 -12.286 2.927 14.195 1.00 0.00 W1 H +ATOM 11028 OH2 TIP3X2847 -0.754 11.922 3.610 1.00 0.00 W1 O +ATOM 11029 H1 TIP3X2847 -0.181 11.185 3.823 1.00 0.00 W1 H +ATOM 11030 H2 TIP3X2847 -1.085 12.221 4.457 1.00 0.00 W1 H +ATOM 11031 OH2 TIP3X2848 -8.457 11.691 13.992 1.00 0.00 W1 O +ATOM 11032 H1 TIP3X2848 -8.233 11.313 14.843 1.00 0.00 W1 H +ATOM 11033 H2 TIP3X2848 -9.063 11.062 13.602 1.00 0.00 W1 H +ATOM 11034 OH2 TIP3X2849 -8.786 3.652 13.584 1.00 0.00 W1 O +ATOM 11035 H1 TIP3X2849 -9.653 3.582 13.184 1.00 0.00 W1 H +ATOM 11036 H2 TIP3X2849 -8.841 3.112 14.372 1.00 0.00 W1 H +ATOM 11037 OH2 TIP3X2850 -1.300 6.373 15.337 1.00 0.00 W1 O +ATOM 11038 H1 TIP3X2850 -0.505 5.839 15.320 1.00 0.00 W1 H +ATOM 11039 H2 TIP3X2850 -1.594 6.338 16.247 1.00 0.00 W1 H +ATOM 11040 OH2 TIP3X2851 -12.025 5.945 10.801 1.00 0.00 W1 O +ATOM 11041 H1 TIP3X2851 -12.110 6.737 11.333 1.00 0.00 W1 H +ATOM 11042 H2 TIP3X2851 -11.110 5.941 10.520 1.00 0.00 W1 H +ATOM 11043 OH2 TIP3X2852 -3.822 3.233 1.746 1.00 0.00 W1 O +ATOM 11044 H1 TIP3X2852 -4.530 3.722 1.326 1.00 0.00 W1 H +ATOM 11045 H2 TIP3X2852 -3.097 3.277 1.123 1.00 0.00 W1 H +ATOM 11046 OH2 TIP3X2853 -15.272 4.120 12.834 1.00 0.00 W1 O +ATOM 11047 H1 TIP3X2853 -16.176 4.414 12.945 1.00 0.00 W1 H +ATOM 11048 H2 TIP3X2853 -15.131 3.501 13.551 1.00 0.00 W1 H +ATOM 11049 OH2 TIP3X2854 -2.607 4.585 13.704 1.00 0.00 W1 O +ATOM 11050 H1 TIP3X2854 -2.295 5.164 14.400 1.00 0.00 W1 H +ATOM 11051 H2 TIP3X2854 -3.551 4.521 13.849 1.00 0.00 W1 H +ATOM 11052 OH2 TIP3X2855 -11.225 3.316 12.222 1.00 0.00 W1 O +ATOM 11053 H1 TIP3X2855 -11.203 2.510 11.706 1.00 0.00 W1 H +ATOM 11054 H2 TIP3X2855 -11.619 3.964 11.638 1.00 0.00 W1 H +ATOM 11055 OH2 TIP3X2856 -2.799 6.713 2.160 1.00 0.00 W1 O +ATOM 11056 H1 TIP3X2856 -3.664 6.514 2.519 1.00 0.00 W1 H +ATOM 11057 H2 TIP3X2856 -2.242 6.834 2.929 1.00 0.00 W1 H +ATOM 11058 OH2 TIP3X2857 -5.326 8.964 14.482 1.00 0.00 W1 O +ATOM 11059 H1 TIP3X2857 -6.004 9.248 15.095 1.00 0.00 W1 H +ATOM 11060 H2 TIP3X2857 -4.528 8.923 15.009 1.00 0.00 W1 H +ATOM 11061 OH2 TIP3X2858 -12.817 8.379 12.178 1.00 0.00 W1 O +ATOM 11062 H1 TIP3X2858 -12.300 8.785 12.874 1.00 0.00 W1 H +ATOM 11063 H2 TIP3X2858 -13.199 9.117 11.703 1.00 0.00 W1 H +ATOM 11064 OH2 TIP3X2859 -13.910 6.342 13.800 1.00 0.00 W1 O +ATOM 11065 H1 TIP3X2859 -14.114 5.502 13.387 1.00 0.00 W1 H +ATOM 11066 H2 TIP3X2859 -14.034 6.987 13.104 1.00 0.00 W1 H +ATOM 11067 OH2 TIP3X2860 -3.259 9.480 0.810 1.00 0.00 W1 O +ATOM 11068 H1 TIP3X2860 -2.553 9.978 0.398 1.00 0.00 W1 H +ATOM 11069 H2 TIP3X2860 -2.810 8.849 1.373 1.00 0.00 W1 H +ATOM 11070 OH2 TIP3X2861 -11.185 10.523 13.731 1.00 0.00 W1 O +ATOM 11071 H1 TIP3X2861 -11.758 11.125 13.257 1.00 0.00 W1 H +ATOM 11072 H2 TIP3X2861 -11.659 10.327 14.539 1.00 0.00 W1 H +ATOM 11073 OH2 TIP3X2862 -8.109 15.266 11.422 1.00 0.00 W1 O +ATOM 11074 H1 TIP3X2862 -7.791 14.972 12.275 1.00 0.00 W1 H +ATOM 11075 H2 TIP3X2862 -7.676 14.689 10.793 1.00 0.00 W1 H +ATOM 11076 OH2 TIP3X2863 -3.403 15.508 5.555 1.00 0.00 W1 O +ATOM 11077 H1 TIP3X2863 -3.815 14.817 5.037 1.00 0.00 W1 H +ATOM 11078 H2 TIP3X2863 -3.598 16.315 5.079 1.00 0.00 W1 H +ATOM 11079 OH2 TIP3X2864 -6.825 12.190 2.807 1.00 0.00 W1 O +ATOM 11080 H1 TIP3X2864 -6.566 12.976 2.325 1.00 0.00 W1 H +ATOM 11081 H2 TIP3X2864 -7.394 12.514 3.505 1.00 0.00 W1 H +ATOM 11082 OH2 TIP3X2865 -5.857 13.731 0.749 1.00 0.00 W1 O +ATOM 11083 H1 TIP3X2865 -5.032 13.766 1.234 1.00 0.00 W1 H +ATOM 11084 H2 TIP3X2865 -5.654 13.219 -0.033 1.00 0.00 W1 H +ATOM 11085 OH2 TIP3X2866 -5.865 11.519 12.400 1.00 0.00 W1 O +ATOM 11086 H1 TIP3X2866 -6.685 11.766 12.826 1.00 0.00 W1 H +ATOM 11087 H2 TIP3X2866 -6.094 11.423 11.476 1.00 0.00 W1 H +ATOM 11088 OH2 TIP3X2867 -11.383 14.909 14.841 1.00 0.00 W1 O +ATOM 11089 H1 TIP3X2867 -11.634 15.666 14.311 1.00 0.00 W1 H +ATOM 11090 H2 TIP3X2867 -10.472 14.740 14.602 1.00 0.00 W1 H +ATOM 11091 OH2 TIP3X2868 -8.637 14.506 14.051 1.00 0.00 W1 O +ATOM 11092 H1 TIP3X2868 -8.420 13.614 14.321 1.00 0.00 W1 H +ATOM 11093 H2 TIP3X2868 -8.030 15.060 14.540 1.00 0.00 W1 H +ATOM 11094 OH2 TIP3X2869 -14.978 0.963 13.551 1.00 0.00 W1 O +ATOM 11095 H1 TIP3X2869 -14.229 0.767 12.987 1.00 0.00 W1 H +ATOM 11096 H2 TIP3X2869 -14.769 0.537 14.383 1.00 0.00 W1 H +ATOM 11097 OH2 TIP3X2870 -3.858 13.690 3.153 1.00 0.00 W1 O +ATOM 11098 H1 TIP3X2870 -3.713 12.749 3.256 1.00 0.00 W1 H +ATOM 11099 H2 TIP3X2870 -3.035 14.022 2.795 1.00 0.00 W1 H +ATOM 11100 OH2 TIP3X2871 -0.488 13.608 12.816 1.00 0.00 W1 O +ATOM 11101 H1 TIP3X2871 -1.210 14.159 13.117 1.00 0.00 W1 H +ATOM 11102 H2 TIP3X2871 0.300 14.107 13.030 1.00 0.00 W1 H +ATOM 11103 OH2 TIP3X2872 -13.539 11.057 19.866 1.00 0.00 W1 O +ATOM 11104 H1 TIP3X2872 -13.356 10.981 20.803 1.00 0.00 W1 H +ATOM 11105 H2 TIP3X2872 -13.563 11.999 19.702 1.00 0.00 W1 H +ATOM 11106 OH2 TIP3X2873 -2.436 8.548 23.605 1.00 0.00 W1 O +ATOM 11107 H1 TIP3X2873 -2.201 8.812 22.715 1.00 0.00 W1 H +ATOM 11108 H2 TIP3X2873 -1.607 8.284 24.003 1.00 0.00 W1 H +ATOM 11109 OH2 TIP3X2874 -10.452 8.271 19.583 1.00 0.00 W1 O +ATOM 11110 H1 TIP3X2874 -10.422 9.181 19.880 1.00 0.00 W1 H +ATOM 11111 H2 TIP3X2874 -9.945 7.788 20.235 1.00 0.00 W1 H +ATOM 11112 OH2 TIP3X2875 -2.649 12.431 21.727 1.00 0.00 W1 O +ATOM 11113 H1 TIP3X2875 -2.924 12.921 22.502 1.00 0.00 W1 H +ATOM 11114 H2 TIP3X2875 -3.174 11.631 21.750 1.00 0.00 W1 H +ATOM 11115 OH2 TIP3X2876 -4.132 10.874 18.770 1.00 0.00 W1 O +ATOM 11116 H1 TIP3X2876 -3.970 10.645 17.855 1.00 0.00 W1 H +ATOM 11117 H2 TIP3X2876 -5.061 11.103 18.799 1.00 0.00 W1 H +ATOM 11118 OH2 TIP3X2877 -0.285 11.406 23.554 1.00 0.00 W1 O +ATOM 11119 H1 TIP3X2877 -0.837 11.489 22.777 1.00 0.00 W1 H +ATOM 11120 H2 TIP3X2877 -0.895 11.189 24.259 1.00 0.00 W1 H +ATOM 11121 OH2 TIP3X2878 -13.648 12.670 26.005 1.00 0.00 W1 O +ATOM 11122 H1 TIP3X2878 -13.242 12.873 26.848 1.00 0.00 W1 H +ATOM 11123 H2 TIP3X2878 -14.219 11.924 26.188 1.00 0.00 W1 H +ATOM 11124 OH2 TIP3X2879 -6.273 14.295 25.231 1.00 0.00 W1 O +ATOM 11125 H1 TIP3X2879 -5.972 13.394 25.353 1.00 0.00 W1 H +ATOM 11126 H2 TIP3X2879 -5.648 14.675 24.614 1.00 0.00 W1 H +ATOM 11127 OH2 TIP3X2880 -2.841 14.251 25.111 1.00 0.00 W1 O +ATOM 11128 H1 TIP3X2880 -3.276 15.075 24.892 1.00 0.00 W1 H +ATOM 11129 H2 TIP3X2880 -1.912 14.477 25.161 1.00 0.00 W1 H +ATOM 11130 OH2 TIP3X2881 -10.392 13.826 24.241 1.00 0.00 W1 O +ATOM 11131 H1 TIP3X2881 -10.037 14.675 23.977 1.00 0.00 W1 H +ATOM 11132 H2 TIP3X2881 -11.327 13.886 24.045 1.00 0.00 W1 H +ATOM 11133 OH2 TIP3X2882 -5.551 5.719 23.142 1.00 0.00 W1 O +ATOM 11134 H1 TIP3X2882 -5.629 4.909 22.638 1.00 0.00 W1 H +ATOM 11135 H2 TIP3X2882 -4.608 5.858 23.230 1.00 0.00 W1 H +ATOM 11136 OH2 TIP3X2883 -9.528 1.816 25.504 1.00 0.00 W1 O +ATOM 11137 H1 TIP3X2883 -9.270 1.079 26.057 1.00 0.00 W1 H +ATOM 11138 H2 TIP3X2883 -10.205 1.460 24.929 1.00 0.00 W1 H +ATOM 11139 OH2 TIP3X2884 -1.284 2.821 21.927 1.00 0.00 W1 O +ATOM 11140 H1 TIP3X2884 -1.592 3.159 22.768 1.00 0.00 W1 H +ATOM 11141 H2 TIP3X2884 -1.217 1.875 22.059 1.00 0.00 W1 H +ATOM 11142 OH2 TIP3X2885 -2.687 4.016 23.881 1.00 0.00 W1 O +ATOM 11143 H1 TIP3X2885 -2.112 3.788 24.612 1.00 0.00 W1 H +ATOM 11144 H2 TIP3X2885 -3.562 3.761 24.176 1.00 0.00 W1 H +ATOM 11145 OH2 TIP3X2886 -9.641 5.141 25.252 1.00 0.00 W1 O +ATOM 11146 H1 TIP3X2886 -9.137 4.438 25.664 1.00 0.00 W1 H +ATOM 11147 H2 TIP3X2886 -8.983 5.783 24.986 1.00 0.00 W1 H +ATOM 11148 OH2 TIP3X2887 -2.164 6.189 22.150 1.00 0.00 W1 O +ATOM 11149 H1 TIP3X2887 -2.123 5.289 22.474 1.00 0.00 W1 H +ATOM 11150 H2 TIP3X2887 -2.282 6.722 22.936 1.00 0.00 W1 H +ATOM 11151 OH2 TIP3X2888 -3.479 2.832 20.018 1.00 0.00 W1 O +ATOM 11152 H1 TIP3X2888 -2.654 3.017 20.467 1.00 0.00 W1 H +ATOM 11153 H2 TIP3X2888 -3.403 3.287 19.179 1.00 0.00 W1 H +ATOM 11154 OH2 TIP3X2889 -7.297 8.804 26.090 1.00 0.00 W1 O +ATOM 11155 H1 TIP3X2889 -6.420 8.826 25.707 1.00 0.00 W1 H +ATOM 11156 H2 TIP3X2889 -7.562 9.722 26.136 1.00 0.00 W1 H +ATOM 11157 OH2 TIP3X2890 -8.146 11.352 25.900 1.00 0.00 W1 O +ATOM 11158 H1 TIP3X2890 -8.171 11.579 24.970 1.00 0.00 W1 H +ATOM 11159 H2 TIP3X2890 -9.066 11.298 26.158 1.00 0.00 W1 H +ATOM 11160 OH2 TIP3X2891 -13.283 3.233 22.738 1.00 0.00 W1 O +ATOM 11161 H1 TIP3X2891 -13.609 4.113 22.929 1.00 0.00 W1 H +ATOM 11162 H2 TIP3X2891 -13.407 3.131 21.794 1.00 0.00 W1 H +ATOM 11163 OH2 TIP3X2892 -11.127 6.791 22.750 1.00 0.00 W1 O +ATOM 11164 H1 TIP3X2892 -11.810 6.341 22.253 1.00 0.00 W1 H +ATOM 11165 H2 TIP3X2892 -10.642 6.087 23.182 1.00 0.00 W1 H +ATOM 11166 OH2 TIP3X2893 -5.072 11.715 25.147 1.00 0.00 W1 O +ATOM 11167 H1 TIP3X2893 -5.314 11.129 24.430 1.00 0.00 W1 H +ATOM 11168 H2 TIP3X2893 -4.122 11.626 25.219 1.00 0.00 W1 H +ATOM 11169 OH2 TIP3X2894 -0.774 15.350 21.927 1.00 0.00 W1 O +ATOM 11170 H1 TIP3X2894 -0.779 14.882 22.762 1.00 0.00 W1 H +ATOM 11171 H2 TIP3X2894 -1.654 15.221 21.574 1.00 0.00 W1 H +ATOM 11172 OH2 TIP3X2895 -8.902 11.686 22.949 1.00 0.00 W1 O +ATOM 11173 H1 TIP3X2895 -9.473 10.967 23.218 1.00 0.00 W1 H +ATOM 11174 H2 TIP3X2895 -9.362 12.476 23.232 1.00 0.00 W1 H +ATOM 11175 OH2 TIP3X2896 -6.680 2.138 27.520 1.00 0.00 W1 O +ATOM 11176 H1 TIP3X2896 -7.423 2.617 27.887 1.00 0.00 W1 H +ATOM 11177 H2 TIP3X2896 -7.061 1.326 27.185 1.00 0.00 W1 H +ATOM 11178 OH2 TIP3X2897 -11.328 2.843 17.321 1.00 0.00 W1 O +ATOM 11179 H1 TIP3X2897 -11.426 2.181 18.006 1.00 0.00 W1 H +ATOM 11180 H2 TIP3X2897 -11.512 2.374 16.507 1.00 0.00 W1 H +ATOM 11181 OH2 TIP3X2898 -0.435 3.764 25.511 1.00 0.00 W1 O +ATOM 11182 H1 TIP3X2898 0.084 4.433 25.063 1.00 0.00 W1 H +ATOM 11183 H2 TIP3X2898 0.007 3.640 26.351 1.00 0.00 W1 H +ATOM 11184 OH2 TIP3X2899 -14.377 0.117 19.671 1.00 0.00 W1 O +ATOM 11185 H1 TIP3X2899 -13.652 0.738 19.740 1.00 0.00 W1 H +ATOM 11186 H2 TIP3X2899 -14.749 0.084 20.552 1.00 0.00 W1 H +ATOM 11187 OH2 TIP3X2900 -9.111 6.353 29.657 1.00 0.00 W1 O +ATOM 11188 H1 TIP3X2900 -8.247 6.751 29.556 1.00 0.00 W1 H +ATOM 11189 H2 TIP3X2900 -8.959 5.416 29.534 1.00 0.00 W1 H +ATOM 11190 OH2 TIP3X2901 -5.945 11.263 22.397 1.00 0.00 W1 O +ATOM 11191 H1 TIP3X2901 -5.851 10.400 21.993 1.00 0.00 W1 H +ATOM 11192 H2 TIP3X2901 -6.878 11.463 22.321 1.00 0.00 W1 H +ATOM 11193 OH2 TIP3X2902 -7.333 9.547 19.928 1.00 0.00 W1 O +ATOM 11194 H1 TIP3X2902 -7.897 8.933 20.397 1.00 0.00 W1 H +ATOM 11195 H2 TIP3X2902 -7.807 10.378 19.956 1.00 0.00 W1 H +ATOM 11196 OH2 TIP3X2903 -14.795 10.060 26.385 1.00 0.00 W1 O +ATOM 11197 H1 TIP3X2903 -15.330 9.458 25.867 1.00 0.00 W1 H +ATOM 11198 H2 TIP3X2903 -15.266 10.146 27.214 1.00 0.00 W1 H +ATOM 11199 OH2 TIP3X2904 -3.499 9.081 20.752 1.00 0.00 W1 O +ATOM 11200 H1 TIP3X2904 -3.555 8.166 20.476 1.00 0.00 W1 H +ATOM 11201 H2 TIP3X2904 -3.671 9.583 19.956 1.00 0.00 W1 H +ATOM 11202 OH2 TIP3X2905 -3.202 9.595 27.777 1.00 0.00 W1 O +ATOM 11203 H1 TIP3X2905 -4.104 9.678 28.084 1.00 0.00 W1 H +ATOM 11204 H2 TIP3X2905 -3.033 8.653 27.780 1.00 0.00 W1 H +ATOM 11205 OH2 TIP3X2906 -0.835 7.554 25.582 1.00 0.00 W1 O +ATOM 11206 H1 TIP3X2906 -0.173 6.873 25.463 1.00 0.00 W1 H +ATOM 11207 H2 TIP3X2906 -1.551 7.115 26.041 1.00 0.00 W1 H +ATOM 11208 OH2 TIP3X2907 -11.691 7.241 30.727 1.00 0.00 W1 O +ATOM 11209 H1 TIP3X2907 -12.220 7.007 29.964 1.00 0.00 W1 H +ATOM 11210 H2 TIP3X2907 -10.795 7.289 30.392 1.00 0.00 W1 H +ATOM 11211 OH2 TIP3X2908 -10.780 10.447 26.288 1.00 0.00 W1 O +ATOM 11212 H1 TIP3X2908 -10.825 9.892 27.067 1.00 0.00 W1 H +ATOM 11213 H2 TIP3X2908 -11.413 11.145 26.454 1.00 0.00 W1 H +ATOM 11214 OH2 TIP3X2909 -2.109 11.577 26.038 1.00 0.00 W1 O +ATOM 11215 H1 TIP3X2909 -1.685 12.345 26.422 1.00 0.00 W1 H +ATOM 11216 H2 TIP3X2909 -2.413 11.069 26.790 1.00 0.00 W1 H +ATOM 11217 OH2 TIP3X2910 -4.021 13.553 27.863 1.00 0.00 W1 O +ATOM 11218 H1 TIP3X2910 -4.728 12.924 27.720 1.00 0.00 W1 H +ATOM 11219 H2 TIP3X2910 -3.692 13.747 26.985 1.00 0.00 W1 H +ATOM 11220 OH2 TIP3X2911 -3.770 12.089 30.259 1.00 0.00 W1 O +ATOM 11221 H1 TIP3X2911 -4.404 11.482 29.875 1.00 0.00 W1 H +ATOM 11222 H2 TIP3X2911 -3.657 12.769 29.595 1.00 0.00 W1 H +ATOM 11223 OH2 TIP3X2912 -0.160 13.997 24.326 1.00 0.00 W1 O +ATOM 11224 H1 TIP3X2912 0.518 13.838 24.982 1.00 0.00 W1 H +ATOM 11225 H2 TIP3X2912 -0.394 13.126 24.007 1.00 0.00 W1 H +ATOM 11226 OH2 TIP3X2913 -9.603 0.468 22.718 1.00 0.00 W1 O +ATOM 11227 H1 TIP3X2913 -9.895 1.378 22.657 1.00 0.00 W1 H +ATOM 11228 H2 TIP3X2913 -8.772 0.451 22.245 1.00 0.00 W1 H +ATOM 11229 OH2 TIP3X2914 -7.479 10.415 16.373 1.00 0.00 W1 O +ATOM 11230 H1 TIP3X2914 -8.175 9.793 16.587 1.00 0.00 W1 H +ATOM 11231 H2 TIP3X2914 -7.497 11.051 17.088 1.00 0.00 W1 H +ATOM 11232 OH2 TIP3X2915 -0.099 9.178 15.809 1.00 0.00 W1 O +ATOM 11233 H1 TIP3X2915 -0.362 8.428 15.275 1.00 0.00 W1 H +ATOM 11234 H2 TIP3X2915 -0.354 9.942 15.292 1.00 0.00 W1 H +ATOM 11235 OH2 TIP3X2916 -14.151 12.875 15.526 1.00 0.00 W1 O +ATOM 11236 H1 TIP3X2916 -13.706 12.326 16.172 1.00 0.00 W1 H +ATOM 11237 H2 TIP3X2916 -15.048 12.541 15.505 1.00 0.00 W1 H +ATOM 11238 OH2 TIP3X2917 -2.058 15.004 16.785 1.00 0.00 W1 O +ATOM 11239 H1 TIP3X2917 -1.173 14.676 16.626 1.00 0.00 W1 H +ATOM 11240 H2 TIP3X2917 -2.288 15.472 15.982 1.00 0.00 W1 H +ATOM 11241 OH2 TIP3X2918 -0.665 10.666 28.862 1.00 0.00 W1 O +ATOM 11242 H1 TIP3X2918 -0.775 11.615 28.921 1.00 0.00 W1 H +ATOM 11243 H2 TIP3X2918 -1.558 10.321 28.852 1.00 0.00 W1 H +ATOM 11244 OH2 TIP3X2919 -13.979 13.492 18.481 1.00 0.00 W1 O +ATOM 11245 H1 TIP3X2919 -14.047 14.328 18.941 1.00 0.00 W1 H +ATOM 11246 H2 TIP3X2919 -14.875 13.153 18.464 1.00 0.00 W1 H +ATOM 11247 OH2 TIP3X2920 -1.399 11.985 16.125 1.00 0.00 W1 O +ATOM 11248 H1 TIP3X2920 -1.368 11.905 17.079 1.00 0.00 W1 H +ATOM 11249 H2 TIP3X2920 -2.232 12.422 15.948 1.00 0.00 W1 H +ATOM 11250 OH2 TIP3X2921 -5.029 0.279 29.009 1.00 0.00 W1 O +ATOM 11251 H1 TIP3X2921 -5.335 1.028 28.497 1.00 0.00 W1 H +ATOM 11252 H2 TIP3X2921 -4.975 -0.438 28.377 1.00 0.00 W1 H +ATOM 11253 OH2 TIP3X2922 -10.815 14.196 27.038 1.00 0.00 W1 O +ATOM 11254 H1 TIP3X2922 -9.967 14.434 27.412 1.00 0.00 W1 H +ATOM 11255 H2 TIP3X2922 -10.603 13.816 26.185 1.00 0.00 W1 H +ATOM 11256 OH2 TIP3X2923 -12.349 2.214 30.389 1.00 0.00 W1 O +ATOM 11257 H1 TIP3X2923 -13.226 2.304 30.763 1.00 0.00 W1 H +ATOM 11258 H2 TIP3X2923 -12.286 2.927 29.752 1.00 0.00 W1 H +ATOM 11259 OH2 TIP3X2924 -6.151 4.161 16.119 1.00 0.00 W1 O +ATOM 11260 H1 TIP3X2924 -6.317 4.458 15.224 1.00 0.00 W1 H +ATOM 11261 H2 TIP3X2924 -7.022 4.038 16.496 1.00 0.00 W1 H +ATOM 11262 OH2 TIP3X2925 -0.754 11.922 19.167 1.00 0.00 W1 O +ATOM 11263 H1 TIP3X2925 -0.181 11.185 19.380 1.00 0.00 W1 H +ATOM 11264 H2 TIP3X2925 -1.085 12.221 20.014 1.00 0.00 W1 H +ATOM 11265 OH2 TIP3X2926 -0.961 1.051 26.361 1.00 0.00 W1 O +ATOM 11266 H1 TIP3X2926 -0.469 0.422 26.889 1.00 0.00 W1 H +ATOM 11267 H2 TIP3X2926 -0.360 1.294 25.656 1.00 0.00 W1 H +ATOM 11268 OH2 TIP3X2927 -13.454 10.272 22.439 1.00 0.00 W1 O +ATOM 11269 H1 TIP3X2927 -14.122 10.595 23.044 1.00 0.00 W1 H +ATOM 11270 H2 TIP3X2927 -12.661 10.202 22.971 1.00 0.00 W1 H +ATOM 11271 OH2 TIP3X2928 -8.457 11.691 29.549 1.00 0.00 W1 O +ATOM 11272 H1 TIP3X2928 -8.233 11.313 30.400 1.00 0.00 W1 H +ATOM 11273 H2 TIP3X2928 -9.063 11.062 29.159 1.00 0.00 W1 H +ATOM 11274 OH2 TIP3X2929 -4.977 2.995 24.962 1.00 0.00 W1 O +ATOM 11275 H1 TIP3X2929 -4.918 2.814 25.900 1.00 0.00 W1 H +ATOM 11276 H2 TIP3X2929 -5.916 3.083 24.794 1.00 0.00 W1 H +ATOM 11277 OH2 TIP3X2930 -8.786 3.652 29.141 1.00 0.00 W1 O +ATOM 11278 H1 TIP3X2930 -9.653 3.582 28.741 1.00 0.00 W1 H +ATOM 11279 H2 TIP3X2930 -8.841 3.112 29.929 1.00 0.00 W1 H +ATOM 11280 OH2 TIP3X2931 -1.300 6.373 30.894 1.00 0.00 W1 O +ATOM 11281 H1 TIP3X2931 -0.505 5.839 30.878 1.00 0.00 W1 H +ATOM 11282 H2 TIP3X2931 -1.594 6.338 31.804 1.00 0.00 W1 H +ATOM 11283 OH2 TIP3X2932 -13.115 0.239 26.813 1.00 0.00 W1 O +ATOM 11284 H1 TIP3X2932 -13.340 0.693 26.000 1.00 0.00 W1 H +ATOM 11285 H2 TIP3X2932 -12.285 -0.197 26.621 1.00 0.00 W1 H +ATOM 11286 OH2 TIP3X2933 -7.020 0.697 21.894 1.00 0.00 W1 O +ATOM 11287 H1 TIP3X2933 -6.538 1.211 21.247 1.00 0.00 W1 H +ATOM 11288 H2 TIP3X2933 -6.676 0.991 22.738 1.00 0.00 W1 H +ATOM 11289 OH2 TIP3X2934 -12.550 5.289 17.047 1.00 0.00 W1 O +ATOM 11290 H1 TIP3X2934 -12.127 5.935 16.481 1.00 0.00 W1 H +ATOM 11291 H2 TIP3X2934 -11.838 4.714 17.328 1.00 0.00 W1 H +ATOM 11292 OH2 TIP3X2935 -12.025 5.945 26.358 1.00 0.00 W1 O +ATOM 11293 H1 TIP3X2935 -12.110 6.737 26.890 1.00 0.00 W1 H +ATOM 11294 H2 TIP3X2935 -11.110 5.941 26.078 1.00 0.00 W1 H +ATOM 11295 OH2 TIP3X2936 -12.843 6.664 19.544 1.00 0.00 W1 O +ATOM 11296 H1 TIP3X2936 -12.780 6.375 18.633 1.00 0.00 W1 H +ATOM 11297 H2 TIP3X2936 -12.067 7.209 19.677 1.00 0.00 W1 H +ATOM 11298 OH2 TIP3X2937 -3.822 3.233 17.304 1.00 0.00 W1 O +ATOM 11299 H1 TIP3X2937 -4.530 3.722 16.884 1.00 0.00 W1 H +ATOM 11300 H2 TIP3X2937 -3.097 3.277 16.680 1.00 0.00 W1 H +ATOM 11301 OH2 TIP3X2938 -15.272 4.120 28.392 1.00 0.00 W1 O +ATOM 11302 H1 TIP3X2938 -16.176 4.414 28.503 1.00 0.00 W1 H +ATOM 11303 H2 TIP3X2938 -15.131 3.501 29.108 1.00 0.00 W1 H +ATOM 11304 OH2 TIP3X2939 -14.128 0.957 24.374 1.00 0.00 W1 O +ATOM 11305 H1 TIP3X2939 -14.021 0.256 23.732 1.00 0.00 W1 H +ATOM 11306 H2 TIP3X2939 -13.993 1.763 23.875 1.00 0.00 W1 H +ATOM 11307 OH2 TIP3X2940 -2.607 4.585 29.262 1.00 0.00 W1 O +ATOM 11308 H1 TIP3X2940 -2.295 5.164 29.958 1.00 0.00 W1 H +ATOM 11309 H2 TIP3X2940 -3.551 4.521 29.407 1.00 0.00 W1 H +ATOM 11310 OH2 TIP3X2941 -5.564 4.591 29.209 1.00 0.00 W1 O +ATOM 11311 H1 TIP3X2941 -5.923 5.159 28.528 1.00 0.00 W1 H +ATOM 11312 H2 TIP3X2941 -5.901 3.721 28.998 1.00 0.00 W1 H +ATOM 11313 OH2 TIP3X2942 -7.361 5.060 19.074 1.00 0.00 W1 O +ATOM 11314 H1 TIP3X2942 -7.272 5.640 18.318 1.00 0.00 W1 H +ATOM 11315 H2 TIP3X2942 -8.130 4.526 18.878 1.00 0.00 W1 H +ATOM 11316 OH2 TIP3X2943 -9.058 4.392 16.762 1.00 0.00 W1 O +ATOM 11317 H1 TIP3X2943 -9.495 4.584 15.932 1.00 0.00 W1 H +ATOM 11318 H2 TIP3X2943 -9.465 3.581 17.065 1.00 0.00 W1 H +ATOM 11319 OH2 TIP3X2944 -8.347 1.454 30.551 1.00 0.00 W1 O +ATOM 11320 H1 TIP3X2944 -8.814 1.066 31.291 1.00 0.00 W1 H +ATOM 11321 H2 TIP3X2944 -7.433 1.486 30.833 1.00 0.00 W1 H +ATOM 11322 OH2 TIP3X2945 -2.784 6.798 27.232 1.00 0.00 W1 O +ATOM 11323 H1 TIP3X2945 -2.765 6.149 27.935 1.00 0.00 W1 H +ATOM 11324 H2 TIP3X2945 -3.619 6.647 26.788 1.00 0.00 W1 H +ATOM 11325 OH2 TIP3X2946 -14.709 3.899 15.702 1.00 0.00 W1 O +ATOM 11326 H1 TIP3X2946 -15.466 3.706 16.256 1.00 0.00 W1 H +ATOM 11327 H2 TIP3X2946 -14.175 4.497 16.224 1.00 0.00 W1 H +ATOM 11328 OH2 TIP3X2947 -14.791 15.392 16.189 1.00 0.00 W1 O +ATOM 11329 H1 TIP3X2947 -14.374 14.645 16.618 1.00 0.00 W1 H +ATOM 11330 H2 TIP3X2947 -14.778 16.086 16.848 1.00 0.00 W1 H +ATOM 11331 OH2 TIP3X2948 -6.043 3.552 21.182 1.00 0.00 W1 O +ATOM 11332 H1 TIP3X2948 -6.380 3.903 20.357 1.00 0.00 W1 H +ATOM 11333 H2 TIP3X2948 -5.146 3.285 20.980 1.00 0.00 W1 H +ATOM 11334 OH2 TIP3X2949 -10.587 2.863 22.926 1.00 0.00 W1 O +ATOM 11335 H1 TIP3X2949 -11.530 2.815 22.767 1.00 0.00 W1 H +ATOM 11336 H2 TIP3X2949 -10.448 3.737 23.289 1.00 0.00 W1 H +ATOM 11337 OH2 TIP3X2950 -15.225 3.989 19.719 1.00 0.00 W1 O +ATOM 11338 H1 TIP3X2950 -15.499 3.864 20.628 1.00 0.00 W1 H +ATOM 11339 H2 TIP3X2950 -15.420 4.907 19.533 1.00 0.00 W1 H +ATOM 11340 OH2 TIP3X2951 -11.225 3.316 27.779 1.00 0.00 W1 O +ATOM 11341 H1 TIP3X2951 -11.203 2.510 27.264 1.00 0.00 W1 H +ATOM 11342 H2 TIP3X2951 -11.619 3.964 27.195 1.00 0.00 W1 H +ATOM 11343 OH2 TIP3X2952 -10.642 9.851 23.584 1.00 0.00 W1 O +ATOM 11344 H1 TIP3X2952 -10.713 8.916 23.397 1.00 0.00 W1 H +ATOM 11345 H2 TIP3X2952 -10.637 9.905 24.540 1.00 0.00 W1 H +ATOM 11346 OH2 TIP3X2953 -6.453 6.870 28.147 1.00 0.00 W1 O +ATOM 11347 H1 TIP3X2953 -6.041 7.701 28.383 1.00 0.00 W1 H +ATOM 11348 H2 TIP3X2953 -7.002 7.081 27.392 1.00 0.00 W1 H +ATOM 11349 OH2 TIP3X2954 -0.657 2.237 17.471 1.00 0.00 W1 O +ATOM 11350 H1 TIP3X2954 -0.223 2.464 18.293 1.00 0.00 W1 H +ATOM 11351 H2 TIP3X2954 -1.177 1.461 17.681 1.00 0.00 W1 H +ATOM 11352 OH2 TIP3X2955 -9.503 8.197 16.649 1.00 0.00 W1 O +ATOM 11353 H1 TIP3X2955 -9.792 8.075 17.554 1.00 0.00 W1 H +ATOM 11354 H2 TIP3X2955 -8.814 7.543 16.528 1.00 0.00 W1 H +ATOM 11355 OH2 TIP3X2956 -2.799 6.713 17.717 1.00 0.00 W1 O +ATOM 11356 H1 TIP3X2956 -3.664 6.514 18.076 1.00 0.00 W1 H +ATOM 11357 H2 TIP3X2956 -2.242 6.834 18.486 1.00 0.00 W1 H +ATOM 11358 OH2 TIP3X2957 -7.966 6.967 24.188 1.00 0.00 W1 O +ATOM 11359 H1 TIP3X2957 -7.869 7.764 24.709 1.00 0.00 W1 H +ATOM 11360 H2 TIP3X2957 -7.092 6.577 24.179 1.00 0.00 W1 H +ATOM 11361 OH2 TIP3X2958 -8.221 7.348 21.104 1.00 0.00 W1 O +ATOM 11362 H1 TIP3X2958 -7.600 6.752 20.686 1.00 0.00 W1 H +ATOM 11363 H2 TIP3X2958 -8.196 7.111 22.030 1.00 0.00 W1 H +ATOM 11364 OH2 TIP3X2959 -5.326 8.964 30.039 1.00 0.00 W1 O +ATOM 11365 H1 TIP3X2959 -6.004 9.248 30.653 1.00 0.00 W1 H +ATOM 11366 H2 TIP3X2959 -4.528 8.923 30.566 1.00 0.00 W1 H +ATOM 11367 OH2 TIP3X2960 -12.817 8.379 27.736 1.00 0.00 W1 O +ATOM 11368 H1 TIP3X2960 -12.300 8.785 28.432 1.00 0.00 W1 H +ATOM 11369 H2 TIP3X2960 -13.199 9.117 27.260 1.00 0.00 W1 H +ATOM 11370 OH2 TIP3X2961 -13.910 6.342 29.357 1.00 0.00 W1 O +ATOM 11371 H1 TIP3X2961 -14.114 5.502 28.945 1.00 0.00 W1 H +ATOM 11372 H2 TIP3X2961 -14.034 6.987 28.662 1.00 0.00 W1 H +ATOM 11373 OH2 TIP3X2962 -14.018 7.215 22.181 1.00 0.00 W1 O +ATOM 11374 H1 TIP3X2962 -13.661 8.087 22.011 1.00 0.00 W1 H +ATOM 11375 H2 TIP3X2962 -14.120 6.824 21.313 1.00 0.00 W1 H +ATOM 11376 OH2 TIP3X2963 -3.259 9.480 16.367 1.00 0.00 W1 O +ATOM 11377 H1 TIP3X2963 -2.553 9.978 15.955 1.00 0.00 W1 H +ATOM 11378 H2 TIP3X2963 -2.810 8.849 16.931 1.00 0.00 W1 H +ATOM 11379 OH2 TIP3X2964 -0.662 6.827 19.730 1.00 0.00 W1 O +ATOM 11380 H1 TIP3X2964 -0.950 7.000 20.626 1.00 0.00 W1 H +ATOM 11381 H2 TIP3X2964 -0.149 7.598 19.489 1.00 0.00 W1 H +ATOM 11382 OH2 TIP3X2965 -14.165 5.944 24.452 1.00 0.00 W1 O +ATOM 11383 H1 TIP3X2965 -14.070 6.622 23.783 1.00 0.00 W1 H +ATOM 11384 H2 TIP3X2965 -13.506 6.163 25.111 1.00 0.00 W1 H +ATOM 11385 OH2 TIP3X2966 -11.378 14.451 17.715 1.00 0.00 W1 O +ATOM 11386 H1 TIP3X2966 -11.607 14.811 16.859 1.00 0.00 W1 H +ATOM 11387 H2 TIP3X2966 -11.791 13.587 17.731 1.00 0.00 W1 H +ATOM 11388 OH2 TIP3X2967 -12.603 9.684 16.214 1.00 0.00 W1 O +ATOM 11389 H1 TIP3X2967 -13.418 9.394 15.805 1.00 0.00 W1 H +ATOM 11390 H2 TIP3X2967 -12.071 8.890 16.275 1.00 0.00 W1 H +ATOM 11391 OH2 TIP3X2968 -11.185 10.523 29.288 1.00 0.00 W1 O +ATOM 11392 H1 TIP3X2968 -11.758 11.125 28.814 1.00 0.00 W1 H +ATOM 11393 H2 TIP3X2968 -11.659 10.327 30.096 1.00 0.00 W1 H +ATOM 11394 OH2 TIP3X2969 -8.109 15.266 26.979 1.00 0.00 W1 O +ATOM 11395 H1 TIP3X2969 -7.791 14.972 27.833 1.00 0.00 W1 H +ATOM 11396 H2 TIP3X2969 -7.676 14.689 26.350 1.00 0.00 W1 H +ATOM 11397 OH2 TIP3X2970 -3.403 15.508 21.113 1.00 0.00 W1 O +ATOM 11398 H1 TIP3X2970 -3.815 14.817 20.594 1.00 0.00 W1 H +ATOM 11399 H2 TIP3X2970 -3.598 16.315 20.636 1.00 0.00 W1 H +ATOM 11400 OH2 TIP3X2971 -6.825 12.190 18.365 1.00 0.00 W1 O +ATOM 11401 H1 TIP3X2971 -6.566 12.976 17.883 1.00 0.00 W1 H +ATOM 11402 H2 TIP3X2971 -7.394 12.514 19.063 1.00 0.00 W1 H +ATOM 11403 OH2 TIP3X2972 -6.808 7.345 17.436 1.00 0.00 W1 O +ATOM 11404 H1 TIP3X2972 -5.984 7.418 16.953 1.00 0.00 W1 H +ATOM 11405 H2 TIP3X2972 -6.800 8.089 18.038 1.00 0.00 W1 H +ATOM 11406 OH2 TIP3X2973 -3.406 2.068 27.227 1.00 0.00 W1 O +ATOM 11407 H1 TIP3X2973 -2.601 1.838 26.763 1.00 0.00 W1 H +ATOM 11408 H2 TIP3X2973 -3.116 2.621 27.952 1.00 0.00 W1 H +ATOM 11409 OH2 TIP3X2974 -15.441 9.170 18.633 1.00 0.00 W1 O +ATOM 11410 H1 TIP3X2974 -15.595 9.262 17.693 1.00 0.00 W1 H +ATOM 11411 H2 TIP3X2974 -14.488 9.170 18.722 1.00 0.00 W1 H +ATOM 11412 OH2 TIP3X2975 -4.679 8.758 25.229 1.00 0.00 W1 O +ATOM 11413 H1 TIP3X2975 -4.134 9.419 25.655 1.00 0.00 W1 H +ATOM 11414 H2 TIP3X2975 -4.220 8.557 24.414 1.00 0.00 W1 H +ATOM 11415 OH2 TIP3X2976 -5.857 13.731 16.307 1.00 0.00 W1 O +ATOM 11416 H1 TIP3X2976 -5.032 13.766 16.791 1.00 0.00 W1 H +ATOM 11417 H2 TIP3X2976 -5.654 13.219 15.524 1.00 0.00 W1 H +ATOM 11418 OH2 TIP3X2977 -5.865 11.519 27.958 1.00 0.00 W1 O +ATOM 11419 H1 TIP3X2977 -6.685 11.766 28.384 1.00 0.00 W1 H +ATOM 11420 H2 TIP3X2977 -6.094 11.423 27.033 1.00 0.00 W1 H +ATOM 11421 OH2 TIP3X2978 -9.239 11.744 19.844 1.00 0.00 W1 O +ATOM 11422 H1 TIP3X2978 -9.947 11.891 19.216 1.00 0.00 W1 H +ATOM 11423 H2 TIP3X2978 -9.577 12.088 20.671 1.00 0.00 W1 H +ATOM 11424 OH2 TIP3X2979 -12.675 12.656 28.555 1.00 0.00 W1 O +ATOM 11425 H1 TIP3X2979 -11.941 13.267 28.491 1.00 0.00 W1 H +ATOM 11426 H2 TIP3X2979 -12.987 12.750 29.455 1.00 0.00 W1 H +ATOM 11427 OH2 TIP3X2980 -13.085 14.360 22.657 1.00 0.00 W1 O +ATOM 11428 H1 TIP3X2980 -13.671 13.619 22.503 1.00 0.00 W1 H +ATOM 11429 H2 TIP3X2980 -12.642 14.494 21.819 1.00 0.00 W1 H +ATOM 11430 OH2 TIP3X2981 -4.731 0.374 23.738 1.00 0.00 W1 O +ATOM 11431 H1 TIP3X2981 -4.399 0.298 22.843 1.00 0.00 W1 H +ATOM 11432 H2 TIP3X2981 -4.776 1.316 23.899 1.00 0.00 W1 H +ATOM 11433 OH2 TIP3X2982 -7.493 2.502 23.972 1.00 0.00 W1 O +ATOM 11434 H1 TIP3X2982 -7.855 2.991 23.233 1.00 0.00 W1 H +ATOM 11435 H2 TIP3X2982 -8.225 2.413 24.582 1.00 0.00 W1 H +ATOM 11436 OH2 TIP3X2983 -8.774 0.487 17.900 1.00 0.00 W1 O +ATOM 11437 H1 TIP3X2983 -7.919 0.232 18.245 1.00 0.00 W1 H +ATOM 11438 H2 TIP3X2983 -9.293 -0.317 17.925 1.00 0.00 W1 H +ATOM 11439 OH2 TIP3X2984 -6.023 0.331 18.944 1.00 0.00 W1 O +ATOM 11440 H1 TIP3X2984 -5.567 -0.405 19.352 1.00 0.00 W1 H +ATOM 11441 H2 TIP3X2984 -5.615 0.417 18.082 1.00 0.00 W1 H +ATOM 11442 OH2 TIP3X2985 -11.383 14.909 30.398 1.00 0.00 W1 O +ATOM 11443 H1 TIP3X2985 -11.634 15.666 29.869 1.00 0.00 W1 H +ATOM 11444 H2 TIP3X2985 -10.472 14.740 30.159 1.00 0.00 W1 H +ATOM 11445 OH2 TIP3X2986 -6.377 13.604 20.699 1.00 0.00 W1 O +ATOM 11446 H1 TIP3X2986 -5.716 12.962 20.959 1.00 0.00 W1 H +ATOM 11447 H2 TIP3X2986 -6.390 14.238 21.415 1.00 0.00 W1 H +ATOM 11448 OH2 TIP3X2987 -8.637 14.506 29.608 1.00 0.00 W1 O +ATOM 11449 H1 TIP3X2987 -8.420 13.614 29.879 1.00 0.00 W1 H +ATOM 11450 H2 TIP3X2987 -8.030 15.060 30.098 1.00 0.00 W1 H +ATOM 11451 OH2 TIP3X2988 -9.691 2.624 19.653 1.00 0.00 W1 O +ATOM 11452 H1 TIP3X2988 -9.034 1.965 19.430 1.00 0.00 W1 H +ATOM 11453 H2 TIP3X2988 -9.648 2.693 20.607 1.00 0.00 W1 H +ATOM 11454 OH2 TIP3X2989 -14.978 0.963 29.109 1.00 0.00 W1 O +ATOM 11455 H1 TIP3X2989 -14.229 0.767 28.545 1.00 0.00 W1 H +ATOM 11456 H2 TIP3X2989 -14.769 0.537 29.940 1.00 0.00 W1 H +ATOM 11457 OH2 TIP3X2990 -3.858 13.690 18.710 1.00 0.00 W1 O +ATOM 11458 H1 TIP3X2990 -3.713 12.749 18.813 1.00 0.00 W1 H +ATOM 11459 H2 TIP3X2990 -3.035 14.022 18.353 1.00 0.00 W1 H +ATOM 11460 OH2 TIP3X2991 -2.190 0.456 29.937 1.00 0.00 W1 O +ATOM 11461 H1 TIP3X2991 -2.804 0.530 29.207 1.00 0.00 W1 H +ATOM 11462 H2 TIP3X2991 -1.421 0.951 29.656 1.00 0.00 W1 H +ATOM 11463 OH2 TIP3X2992 -11.397 14.669 20.424 1.00 0.00 W1 O +ATOM 11464 H1 TIP3X2992 -11.403 14.714 19.468 1.00 0.00 W1 H +ATOM 11465 H2 TIP3X2992 -10.589 15.115 20.680 1.00 0.00 W1 H +ATOM 11466 OH2 TIP3X2993 -0.488 13.608 28.373 1.00 0.00 W1 O +ATOM 11467 H1 TIP3X2993 -1.210 14.159 28.674 1.00 0.00 W1 H +ATOM 11468 H2 TIP3X2993 0.300 14.107 28.587 1.00 0.00 W1 H +ATOM 11469 OH2 TIP3X2994 -12.862 2.930 20.053 1.00 0.00 W1 O +ATOM 11470 H1 TIP3X2994 -13.505 3.318 19.461 1.00 0.00 W1 H +ATOM 11471 H2 TIP3X2994 -12.059 3.427 19.895 1.00 0.00 W1 H +ATOM 11472 OH2 TIP3X2995 -11.433 11.529 17.785 1.00 0.00 W1 O +ATOM 11473 H1 TIP3X2995 -11.472 10.901 17.063 1.00 0.00 W1 H +ATOM 11474 H2 TIP3X2995 -12.153 11.275 18.363 1.00 0.00 W1 H +ATOM 11475 OH2 TIP3X2996 -13.539 26.614 -26.806 1.00 0.00 W1 O +ATOM 11476 H1 TIP3X2996 -13.356 26.538 -25.869 1.00 0.00 W1 H +ATOM 11477 H2 TIP3X2996 -13.563 27.557 -26.970 1.00 0.00 W1 H +ATOM 11478 OH2 TIP3X2997 -2.436 24.105 -23.068 1.00 0.00 W1 O +ATOM 11479 H1 TIP3X2997 -2.201 24.370 -23.957 1.00 0.00 W1 H +ATOM 11480 H2 TIP3X2997 -1.607 23.842 -22.669 1.00 0.00 W1 H +ATOM 11481 OH2 TIP3X2998 -10.452 23.829 -27.089 1.00 0.00 W1 O +ATOM 11482 H1 TIP3X2998 -10.422 24.738 -26.792 1.00 0.00 W1 H +ATOM 11483 H2 TIP3X2998 -9.945 23.346 -26.437 1.00 0.00 W1 H +ATOM 11484 OH2 TIP3X2999 -2.649 27.988 -24.946 1.00 0.00 W1 O +ATOM 11485 H1 TIP3X2999 -2.924 28.478 -24.171 1.00 0.00 W1 H +ATOM 11486 H2 TIP3X2999 -3.174 27.188 -24.922 1.00 0.00 W1 H +ATOM 11487 OH2 TIP3X3000 -4.132 26.431 -27.903 1.00 0.00 W1 O +ATOM 11488 H1 TIP3X3000 -3.970 26.203 -28.818 1.00 0.00 W1 H +ATOM 11489 H2 TIP3X3000 -5.061 26.660 -27.873 1.00 0.00 W1 H +ATOM 11490 OH2 TIP3X3001 -0.285 26.963 -23.118 1.00 0.00 W1 O +ATOM 11491 H1 TIP3X3001 -0.837 27.046 -23.896 1.00 0.00 W1 H +ATOM 11492 H2 TIP3X3001 -0.895 26.747 -22.413 1.00 0.00 W1 H +ATOM 11493 OH2 TIP3X3002 -13.648 28.227 -20.667 1.00 0.00 W1 O +ATOM 11494 H1 TIP3X3002 -13.242 28.431 -19.824 1.00 0.00 W1 H +ATOM 11495 H2 TIP3X3002 -14.219 27.482 -20.484 1.00 0.00 W1 H +ATOM 11496 OH2 TIP3X3003 -6.273 29.852 -21.441 1.00 0.00 W1 O +ATOM 11497 H1 TIP3X3003 -5.972 28.952 -21.319 1.00 0.00 W1 H +ATOM 11498 H2 TIP3X3003 -5.648 30.233 -22.058 1.00 0.00 W1 H +ATOM 11499 OH2 TIP3X3004 -2.841 29.809 -21.561 1.00 0.00 W1 O +ATOM 11500 H1 TIP3X3004 -3.276 30.632 -21.781 1.00 0.00 W1 H +ATOM 11501 H2 TIP3X3004 -1.912 30.035 -21.512 1.00 0.00 W1 H +ATOM 11502 OH2 TIP3X3005 -10.392 29.384 -22.432 1.00 0.00 W1 O +ATOM 11503 H1 TIP3X3005 -10.037 30.233 -22.695 1.00 0.00 W1 H +ATOM 11504 H2 TIP3X3005 -11.327 29.443 -22.628 1.00 0.00 W1 H +ATOM 11505 OH2 TIP3X3006 -5.551 21.276 -23.530 1.00 0.00 W1 O +ATOM 11506 H1 TIP3X3006 -5.629 20.466 -24.035 1.00 0.00 W1 H +ATOM 11507 H2 TIP3X3006 -4.608 21.415 -23.443 1.00 0.00 W1 H +ATOM 11508 OH2 TIP3X3007 -9.528 17.374 -21.168 1.00 0.00 W1 O +ATOM 11509 H1 TIP3X3007 -9.270 16.636 -20.615 1.00 0.00 W1 H +ATOM 11510 H2 TIP3X3007 -10.205 17.017 -21.744 1.00 0.00 W1 H +ATOM 11511 OH2 TIP3X3008 -1.284 18.378 -24.745 1.00 0.00 W1 O +ATOM 11512 H1 TIP3X3008 -1.592 18.716 -23.904 1.00 0.00 W1 H +ATOM 11513 H2 TIP3X3008 -1.217 17.433 -24.614 1.00 0.00 W1 H +ATOM 11514 OH2 TIP3X3009 -2.687 19.573 -22.791 1.00 0.00 W1 O +ATOM 11515 H1 TIP3X3009 -2.112 19.345 -22.061 1.00 0.00 W1 H +ATOM 11516 H2 TIP3X3009 -3.562 19.319 -22.496 1.00 0.00 W1 H +ATOM 11517 OH2 TIP3X3010 -9.641 20.698 -21.420 1.00 0.00 W1 O +ATOM 11518 H1 TIP3X3010 -9.137 19.996 -21.008 1.00 0.00 W1 H +ATOM 11519 H2 TIP3X3010 -8.983 21.340 -21.687 1.00 0.00 W1 H +ATOM 11520 OH2 TIP3X3011 -2.164 21.746 -24.523 1.00 0.00 W1 O +ATOM 11521 H1 TIP3X3011 -2.123 20.847 -24.199 1.00 0.00 W1 H +ATOM 11522 H2 TIP3X3011 -2.282 22.279 -23.736 1.00 0.00 W1 H +ATOM 11523 OH2 TIP3X3012 -3.479 18.390 -26.654 1.00 0.00 W1 O +ATOM 11524 H1 TIP3X3012 -2.654 18.574 -26.205 1.00 0.00 W1 H +ATOM 11525 H2 TIP3X3012 -3.403 18.845 -27.493 1.00 0.00 W1 H +ATOM 11526 OH2 TIP3X3013 -7.297 24.361 -20.583 1.00 0.00 W1 O +ATOM 11527 H1 TIP3X3013 -6.420 24.383 -20.966 1.00 0.00 W1 H +ATOM 11528 H2 TIP3X3013 -7.562 25.280 -20.537 1.00 0.00 W1 H +ATOM 11529 OH2 TIP3X3014 -8.146 26.909 -20.773 1.00 0.00 W1 O +ATOM 11530 H1 TIP3X3014 -8.171 27.136 -21.702 1.00 0.00 W1 H +ATOM 11531 H2 TIP3X3014 -9.066 26.855 -20.514 1.00 0.00 W1 H +ATOM 11532 OH2 TIP3X3015 -13.283 18.791 -23.935 1.00 0.00 W1 O +ATOM 11533 H1 TIP3X3015 -13.609 19.670 -23.744 1.00 0.00 W1 H +ATOM 11534 H2 TIP3X3015 -13.407 18.688 -24.878 1.00 0.00 W1 H +ATOM 11535 OH2 TIP3X3016 -11.127 22.348 -23.922 1.00 0.00 W1 O +ATOM 11536 H1 TIP3X3016 -11.810 21.898 -24.419 1.00 0.00 W1 H +ATOM 11537 H2 TIP3X3016 -10.642 21.645 -23.490 1.00 0.00 W1 H +ATOM 11538 OH2 TIP3X3017 -5.072 27.273 -21.526 1.00 0.00 W1 O +ATOM 11539 H1 TIP3X3017 -5.314 26.686 -22.243 1.00 0.00 W1 H +ATOM 11540 H2 TIP3X3017 -4.122 27.183 -21.453 1.00 0.00 W1 H +ATOM 11541 OH2 TIP3X3018 -0.774 30.907 -24.745 1.00 0.00 W1 O +ATOM 11542 H1 TIP3X3018 -0.779 30.439 -23.910 1.00 0.00 W1 H +ATOM 11543 H2 TIP3X3018 -1.654 30.778 -25.098 1.00 0.00 W1 H +ATOM 11544 OH2 TIP3X3019 -8.902 27.244 -23.723 1.00 0.00 W1 O +ATOM 11545 H1 TIP3X3019 -9.473 26.524 -23.454 1.00 0.00 W1 H +ATOM 11546 H2 TIP3X3019 -9.362 28.034 -23.441 1.00 0.00 W1 H +ATOM 11547 OH2 TIP3X3020 -6.680 17.695 -19.153 1.00 0.00 W1 O +ATOM 11548 H1 TIP3X3020 -7.423 18.175 -18.786 1.00 0.00 W1 H +ATOM 11549 H2 TIP3X3020 -7.061 16.883 -19.487 1.00 0.00 W1 H +ATOM 11550 OH2 TIP3X3021 -11.328 18.400 -29.351 1.00 0.00 W1 O +ATOM 11551 H1 TIP3X3021 -11.426 17.738 -28.667 1.00 0.00 W1 H +ATOM 11552 H2 TIP3X3021 -11.512 17.932 -30.166 1.00 0.00 W1 H +ATOM 11553 OH2 TIP3X3022 -0.435 19.322 -21.162 1.00 0.00 W1 O +ATOM 11554 H1 TIP3X3022 0.084 19.991 -21.609 1.00 0.00 W1 H +ATOM 11555 H2 TIP3X3022 0.007 19.198 -20.322 1.00 0.00 W1 H +ATOM 11556 OH2 TIP3X3023 -14.377 15.675 -27.002 1.00 0.00 W1 O +ATOM 11557 H1 TIP3X3023 -13.652 16.296 -26.933 1.00 0.00 W1 H +ATOM 11558 H2 TIP3X3023 -14.749 15.642 -26.120 1.00 0.00 W1 H +ATOM 11559 OH2 TIP3X3024 -9.111 21.910 -17.015 1.00 0.00 W1 O +ATOM 11560 H1 TIP3X3024 -8.247 22.309 -17.116 1.00 0.00 W1 H +ATOM 11561 H2 TIP3X3024 -8.959 20.973 -17.138 1.00 0.00 W1 H +ATOM 11562 OH2 TIP3X3025 -5.945 26.820 -24.276 1.00 0.00 W1 O +ATOM 11563 H1 TIP3X3025 -5.851 25.957 -24.679 1.00 0.00 W1 H +ATOM 11564 H2 TIP3X3025 -6.878 27.020 -24.352 1.00 0.00 W1 H +ATOM 11565 OH2 TIP3X3026 -7.333 25.104 -26.745 1.00 0.00 W1 O +ATOM 11566 H1 TIP3X3026 -7.897 24.490 -26.275 1.00 0.00 W1 H +ATOM 11567 H2 TIP3X3026 -7.807 25.935 -26.716 1.00 0.00 W1 H +ATOM 11568 OH2 TIP3X3027 -14.795 25.617 -20.288 1.00 0.00 W1 O +ATOM 11569 H1 TIP3X3027 -15.330 25.016 -20.806 1.00 0.00 W1 H +ATOM 11570 H2 TIP3X3027 -15.266 25.704 -19.459 1.00 0.00 W1 H +ATOM 11571 OH2 TIP3X3028 -3.499 24.638 -25.920 1.00 0.00 W1 O +ATOM 11572 H1 TIP3X3028 -3.555 23.723 -26.197 1.00 0.00 W1 H +ATOM 11573 H2 TIP3X3028 -3.671 25.141 -26.716 1.00 0.00 W1 H +ATOM 11574 OH2 TIP3X3029 -3.202 25.152 -18.896 1.00 0.00 W1 O +ATOM 11575 H1 TIP3X3029 -4.104 25.236 -18.588 1.00 0.00 W1 H +ATOM 11576 H2 TIP3X3029 -3.033 24.210 -18.892 1.00 0.00 W1 H +ATOM 11577 OH2 TIP3X3030 -0.835 23.112 -21.090 1.00 0.00 W1 O +ATOM 11578 H1 TIP3X3030 -0.173 22.431 -21.209 1.00 0.00 W1 H +ATOM 11579 H2 TIP3X3030 -1.551 22.672 -20.631 1.00 0.00 W1 H +ATOM 11580 OH2 TIP3X3031 -11.691 22.799 -15.946 1.00 0.00 W1 O +ATOM 11581 H1 TIP3X3031 -12.220 22.565 -16.708 1.00 0.00 W1 H +ATOM 11582 H2 TIP3X3031 -10.795 22.846 -16.280 1.00 0.00 W1 H +ATOM 11583 OH2 TIP3X3032 -10.780 26.005 -20.384 1.00 0.00 W1 O +ATOM 11584 H1 TIP3X3032 -10.825 25.450 -19.606 1.00 0.00 W1 H +ATOM 11585 H2 TIP3X3032 -11.413 26.703 -20.218 1.00 0.00 W1 H +ATOM 11586 OH2 TIP3X3033 -2.109 27.135 -20.635 1.00 0.00 W1 O +ATOM 11587 H1 TIP3X3033 -1.685 27.903 -20.251 1.00 0.00 W1 H +ATOM 11588 H2 TIP3X3033 -2.413 26.627 -19.882 1.00 0.00 W1 H +ATOM 11589 OH2 TIP3X3034 -4.021 29.110 -18.810 1.00 0.00 W1 O +ATOM 11590 H1 TIP3X3034 -4.728 28.481 -18.952 1.00 0.00 W1 H +ATOM 11591 H2 TIP3X3034 -3.692 29.305 -19.687 1.00 0.00 W1 H +ATOM 11592 OH2 TIP3X3035 -3.770 27.646 -16.413 1.00 0.00 W1 O +ATOM 11593 H1 TIP3X3035 -4.404 27.040 -16.797 1.00 0.00 W1 H +ATOM 11594 H2 TIP3X3035 -3.657 28.327 -17.077 1.00 0.00 W1 H +ATOM 11595 OH2 TIP3X3036 -0.160 29.555 -22.347 1.00 0.00 W1 O +ATOM 11596 H1 TIP3X3036 0.518 29.396 -21.690 1.00 0.00 W1 H +ATOM 11597 H2 TIP3X3036 -0.394 28.683 -22.666 1.00 0.00 W1 H +ATOM 11598 OH2 TIP3X3037 -9.603 16.026 -23.954 1.00 0.00 W1 O +ATOM 11599 H1 TIP3X3037 -9.895 16.935 -24.015 1.00 0.00 W1 H +ATOM 11600 H2 TIP3X3037 -8.772 16.008 -24.427 1.00 0.00 W1 H +ATOM 11601 OH2 TIP3X3038 -7.479 25.972 -30.300 1.00 0.00 W1 O +ATOM 11602 H1 TIP3X3038 -8.175 25.350 -30.085 1.00 0.00 W1 H +ATOM 11603 H2 TIP3X3038 -7.497 26.608 -29.585 1.00 0.00 W1 H +ATOM 11604 OH2 TIP3X3039 -0.099 24.736 -30.863 1.00 0.00 W1 O +ATOM 11605 H1 TIP3X3039 -0.362 23.986 -31.397 1.00 0.00 W1 H +ATOM 11606 H2 TIP3X3039 -0.354 25.500 -31.381 1.00 0.00 W1 H +ATOM 11607 OH2 TIP3X3040 -14.151 28.432 -31.146 1.00 0.00 W1 O +ATOM 11608 H1 TIP3X3040 -13.706 27.883 -30.501 1.00 0.00 W1 H +ATOM 11609 H2 TIP3X3040 -15.048 28.098 -31.167 1.00 0.00 W1 H +ATOM 11610 OH2 TIP3X3041 -2.058 30.561 -29.888 1.00 0.00 W1 O +ATOM 11611 H1 TIP3X3041 -1.173 30.233 -30.046 1.00 0.00 W1 H +ATOM 11612 H2 TIP3X3041 -2.288 31.029 -30.690 1.00 0.00 W1 H +ATOM 11613 OH2 TIP3X3042 -0.665 26.223 -17.810 1.00 0.00 W1 O +ATOM 11614 H1 TIP3X3042 -0.775 27.172 -17.751 1.00 0.00 W1 H +ATOM 11615 H2 TIP3X3042 -1.558 25.878 -17.820 1.00 0.00 W1 H +ATOM 11616 OH2 TIP3X3043 -13.979 29.049 -28.191 1.00 0.00 W1 O +ATOM 11617 H1 TIP3X3043 -14.047 29.885 -27.731 1.00 0.00 W1 H +ATOM 11618 H2 TIP3X3043 -14.875 28.711 -28.208 1.00 0.00 W1 H +ATOM 11619 OH2 TIP3X3044 -1.399 27.542 -30.547 1.00 0.00 W1 O +ATOM 11620 H1 TIP3X3044 -1.368 27.462 -29.594 1.00 0.00 W1 H +ATOM 11621 H2 TIP3X3044 -2.232 27.979 -30.724 1.00 0.00 W1 H +ATOM 11622 OH2 TIP3X3045 -5.029 15.837 -17.663 1.00 0.00 W1 O +ATOM 11623 H1 TIP3X3045 -5.335 16.585 -18.176 1.00 0.00 W1 H +ATOM 11624 H2 TIP3X3045 -4.975 15.120 -18.295 1.00 0.00 W1 H +ATOM 11625 OH2 TIP3X3046 -10.815 29.753 -19.634 1.00 0.00 W1 O +ATOM 11626 H1 TIP3X3046 -9.967 29.991 -19.260 1.00 0.00 W1 H +ATOM 11627 H2 TIP3X3046 -10.603 29.373 -20.487 1.00 0.00 W1 H +ATOM 11628 OH2 TIP3X3047 -12.349 17.772 -16.284 1.00 0.00 W1 O +ATOM 11629 H1 TIP3X3047 -13.226 17.861 -15.910 1.00 0.00 W1 H +ATOM 11630 H2 TIP3X3047 -12.286 18.484 -16.920 1.00 0.00 W1 H +ATOM 11631 OH2 TIP3X3048 -6.151 19.719 -30.553 1.00 0.00 W1 O +ATOM 11632 H1 TIP3X3048 -6.317 20.016 -31.448 1.00 0.00 W1 H +ATOM 11633 H2 TIP3X3048 -7.022 19.595 -30.176 1.00 0.00 W1 H +ATOM 11634 OH2 TIP3X3049 -0.754 27.479 -27.505 1.00 0.00 W1 O +ATOM 11635 H1 TIP3X3049 -0.181 26.742 -27.292 1.00 0.00 W1 H +ATOM 11636 H2 TIP3X3049 -1.085 27.778 -26.658 1.00 0.00 W1 H +ATOM 11637 OH2 TIP3X3050 -5.493 16.515 -30.576 1.00 0.00 W1 O +ATOM 11638 H1 TIP3X3050 -4.761 17.131 -30.552 1.00 0.00 W1 H +ATOM 11639 H2 TIP3X3050 -5.252 15.883 -31.253 1.00 0.00 W1 H +ATOM 11640 OH2 TIP3X3051 -0.961 16.609 -20.311 1.00 0.00 W1 O +ATOM 11641 H1 TIP3X3051 -0.469 15.979 -19.784 1.00 0.00 W1 H +ATOM 11642 H2 TIP3X3051 -0.360 16.851 -21.016 1.00 0.00 W1 H +ATOM 11643 OH2 TIP3X3052 -13.454 25.829 -24.233 1.00 0.00 W1 O +ATOM 11644 H1 TIP3X3052 -14.122 26.153 -23.629 1.00 0.00 W1 H +ATOM 11645 H2 TIP3X3052 -12.661 25.760 -23.701 1.00 0.00 W1 H +ATOM 11646 OH2 TIP3X3053 -8.457 27.248 -17.123 1.00 0.00 W1 O +ATOM 11647 H1 TIP3X3053 -8.233 26.870 -16.272 1.00 0.00 W1 H +ATOM 11648 H2 TIP3X3053 -9.063 26.619 -17.513 1.00 0.00 W1 H +ATOM 11649 OH2 TIP3X3054 -4.977 18.553 -21.710 1.00 0.00 W1 O +ATOM 11650 H1 TIP3X3054 -4.918 18.371 -20.772 1.00 0.00 W1 H +ATOM 11651 H2 TIP3X3054 -5.916 18.640 -21.879 1.00 0.00 W1 H +ATOM 11652 OH2 TIP3X3055 -8.786 19.210 -17.531 1.00 0.00 W1 O +ATOM 11653 H1 TIP3X3055 -9.653 19.140 -17.931 1.00 0.00 W1 H +ATOM 11654 H2 TIP3X3055 -8.841 18.669 -16.743 1.00 0.00 W1 H +ATOM 11655 OH2 TIP3X3056 -1.300 21.930 -15.778 1.00 0.00 W1 O +ATOM 11656 H1 TIP3X3056 -0.505 21.397 -15.795 1.00 0.00 W1 H +ATOM 11657 H2 TIP3X3056 -1.594 21.895 -14.868 1.00 0.00 W1 H +ATOM 11658 OH2 TIP3X3057 -13.115 15.797 -19.860 1.00 0.00 W1 O +ATOM 11659 H1 TIP3X3057 -13.340 16.250 -20.672 1.00 0.00 W1 H +ATOM 11660 H2 TIP3X3057 -12.285 15.360 -20.051 1.00 0.00 W1 H +ATOM 11661 OH2 TIP3X3058 -7.020 16.255 -24.778 1.00 0.00 W1 O +ATOM 11662 H1 TIP3X3058 -6.538 16.769 -25.426 1.00 0.00 W1 H +ATOM 11663 H2 TIP3X3058 -6.676 16.548 -23.934 1.00 0.00 W1 H +ATOM 11664 OH2 TIP3X3059 -12.550 20.846 -29.625 1.00 0.00 W1 O +ATOM 11665 H1 TIP3X3059 -12.127 21.492 -30.191 1.00 0.00 W1 H +ATOM 11666 H2 TIP3X3059 -11.838 20.271 -29.344 1.00 0.00 W1 H +ATOM 11667 OH2 TIP3X3060 -12.025 21.503 -20.314 1.00 0.00 W1 O +ATOM 11668 H1 TIP3X3060 -12.110 22.294 -19.782 1.00 0.00 W1 H +ATOM 11669 H2 TIP3X3060 -11.110 21.499 -20.595 1.00 0.00 W1 H +ATOM 11670 OH2 TIP3X3061 -12.843 22.221 -27.129 1.00 0.00 W1 O +ATOM 11671 H1 TIP3X3061 -12.780 21.932 -28.039 1.00 0.00 W1 H +ATOM 11672 H2 TIP3X3061 -12.067 22.766 -26.996 1.00 0.00 W1 H +ATOM 11673 OH2 TIP3X3062 -3.822 18.791 -29.369 1.00 0.00 W1 O +ATOM 11674 H1 TIP3X3062 -4.530 19.279 -29.789 1.00 0.00 W1 H +ATOM 11675 H2 TIP3X3062 -3.097 18.835 -29.992 1.00 0.00 W1 H +ATOM 11676 OH2 TIP3X3063 -15.272 19.677 -18.281 1.00 0.00 W1 O +ATOM 11677 H1 TIP3X3063 -16.176 19.971 -18.170 1.00 0.00 W1 H +ATOM 11678 H2 TIP3X3063 -15.131 19.058 -17.564 1.00 0.00 W1 H +ATOM 11679 OH2 TIP3X3064 -14.128 16.515 -22.298 1.00 0.00 W1 O +ATOM 11680 H1 TIP3X3064 -14.021 15.813 -22.941 1.00 0.00 W1 H +ATOM 11681 H2 TIP3X3064 -13.993 17.320 -22.797 1.00 0.00 W1 H +ATOM 11682 OH2 TIP3X3065 -2.607 20.143 -17.411 1.00 0.00 W1 O +ATOM 11683 H1 TIP3X3065 -2.295 20.721 -16.715 1.00 0.00 W1 H +ATOM 11684 H2 TIP3X3065 -3.551 20.079 -17.265 1.00 0.00 W1 H +ATOM 11685 OH2 TIP3X3066 -5.564 20.148 -17.464 1.00 0.00 W1 O +ATOM 11686 H1 TIP3X3066 -5.923 20.717 -18.145 1.00 0.00 W1 H +ATOM 11687 H2 TIP3X3066 -5.901 19.278 -17.675 1.00 0.00 W1 H +ATOM 11688 OH2 TIP3X3067 -7.361 20.618 -27.598 1.00 0.00 W1 O +ATOM 11689 H1 TIP3X3067 -7.272 21.197 -28.355 1.00 0.00 W1 H +ATOM 11690 H2 TIP3X3067 -8.130 20.083 -27.795 1.00 0.00 W1 H +ATOM 11691 OH2 TIP3X3068 -9.058 19.949 -29.911 1.00 0.00 W1 O +ATOM 11692 H1 TIP3X3068 -9.495 20.142 -30.740 1.00 0.00 W1 H +ATOM 11693 H2 TIP3X3068 -9.465 19.138 -29.607 1.00 0.00 W1 H +ATOM 11694 OH2 TIP3X3069 -8.347 17.011 -16.122 1.00 0.00 W1 O +ATOM 11695 H1 TIP3X3069 -8.814 16.624 -15.381 1.00 0.00 W1 H +ATOM 11696 H2 TIP3X3069 -7.433 17.044 -15.839 1.00 0.00 W1 H +ATOM 11697 OH2 TIP3X3070 -2.784 22.356 -19.440 1.00 0.00 W1 O +ATOM 11698 H1 TIP3X3070 -2.765 21.706 -18.737 1.00 0.00 W1 H +ATOM 11699 H2 TIP3X3070 -3.619 22.204 -19.884 1.00 0.00 W1 H +ATOM 11700 OH2 TIP3X3071 -14.709 19.456 -30.971 1.00 0.00 W1 O +ATOM 11701 H1 TIP3X3071 -15.466 19.264 -30.417 1.00 0.00 W1 H +ATOM 11702 H2 TIP3X3071 -14.175 20.055 -30.448 1.00 0.00 W1 H +ATOM 11703 OH2 TIP3X3072 -14.791 30.950 -30.484 1.00 0.00 W1 O +ATOM 11704 H1 TIP3X3072 -14.374 30.202 -30.054 1.00 0.00 W1 H +ATOM 11705 H2 TIP3X3072 -14.778 31.643 -29.824 1.00 0.00 W1 H +ATOM 11706 OH2 TIP3X3073 -6.043 19.110 -25.491 1.00 0.00 W1 O +ATOM 11707 H1 TIP3X3073 -6.380 19.460 -26.315 1.00 0.00 W1 H +ATOM 11708 H2 TIP3X3073 -5.146 18.842 -25.692 1.00 0.00 W1 H +ATOM 11709 OH2 TIP3X3074 -10.587 18.420 -23.747 1.00 0.00 W1 O +ATOM 11710 H1 TIP3X3074 -11.530 18.373 -23.905 1.00 0.00 W1 H +ATOM 11711 H2 TIP3X3074 -10.448 19.294 -23.383 1.00 0.00 W1 H +ATOM 11712 OH2 TIP3X3075 -15.225 19.546 -26.953 1.00 0.00 W1 O +ATOM 11713 H1 TIP3X3075 -15.499 19.422 -26.045 1.00 0.00 W1 H +ATOM 11714 H2 TIP3X3075 -15.420 20.465 -27.139 1.00 0.00 W1 H +ATOM 11715 OH2 TIP3X3076 -11.225 18.873 -18.893 1.00 0.00 W1 O +ATOM 11716 H1 TIP3X3076 -11.203 18.067 -19.409 1.00 0.00 W1 H +ATOM 11717 H2 TIP3X3076 -11.619 19.521 -19.477 1.00 0.00 W1 H +ATOM 11718 OH2 TIP3X3077 -10.642 25.409 -23.088 1.00 0.00 W1 O +ATOM 11719 H1 TIP3X3077 -10.713 24.473 -23.276 1.00 0.00 W1 H +ATOM 11720 H2 TIP3X3077 -10.637 25.462 -22.132 1.00 0.00 W1 H +ATOM 11721 OH2 TIP3X3078 -6.453 22.428 -18.526 1.00 0.00 W1 O +ATOM 11722 H1 TIP3X3078 -6.041 23.259 -18.289 1.00 0.00 W1 H +ATOM 11723 H2 TIP3X3078 -7.002 22.638 -19.280 1.00 0.00 W1 H +ATOM 11724 OH2 TIP3X3079 -0.657 17.794 -29.201 1.00 0.00 W1 O +ATOM 11725 H1 TIP3X3079 -0.223 18.021 -28.379 1.00 0.00 W1 H +ATOM 11726 H2 TIP3X3079 -1.177 17.019 -28.992 1.00 0.00 W1 H +ATOM 11727 OH2 TIP3X3080 -9.503 23.754 -30.023 1.00 0.00 W1 O +ATOM 11728 H1 TIP3X3080 -9.792 23.632 -29.119 1.00 0.00 W1 H +ATOM 11729 H2 TIP3X3080 -8.814 23.101 -30.144 1.00 0.00 W1 H +ATOM 11730 OH2 TIP3X3081 -2.799 22.270 -28.955 1.00 0.00 W1 O +ATOM 11731 H1 TIP3X3081 -3.664 22.071 -28.596 1.00 0.00 W1 H +ATOM 11732 H2 TIP3X3081 -2.242 22.391 -28.186 1.00 0.00 W1 H +ATOM 11733 OH2 TIP3X3082 -7.966 22.524 -22.485 1.00 0.00 W1 O +ATOM 11734 H1 TIP3X3082 -7.869 23.321 -21.963 1.00 0.00 W1 H +ATOM 11735 H2 TIP3X3082 -7.092 22.135 -22.493 1.00 0.00 W1 H +ATOM 11736 OH2 TIP3X3083 -8.221 22.906 -25.569 1.00 0.00 W1 O +ATOM 11737 H1 TIP3X3083 -7.600 22.310 -25.987 1.00 0.00 W1 H +ATOM 11738 H2 TIP3X3083 -8.196 22.669 -24.642 1.00 0.00 W1 H +ATOM 11739 OH2 TIP3X3084 -5.326 24.522 -16.633 1.00 0.00 W1 O +ATOM 11740 H1 TIP3X3084 -6.004 24.806 -16.020 1.00 0.00 W1 H +ATOM 11741 H2 TIP3X3084 -4.528 24.481 -16.106 1.00 0.00 W1 H +ATOM 11742 OH2 TIP3X3085 -12.817 23.937 -18.937 1.00 0.00 W1 O +ATOM 11743 H1 TIP3X3085 -12.300 24.343 -18.241 1.00 0.00 W1 H +ATOM 11744 H2 TIP3X3085 -13.199 24.674 -19.412 1.00 0.00 W1 H +ATOM 11745 OH2 TIP3X3086 -13.910 21.899 -17.315 1.00 0.00 W1 O +ATOM 11746 H1 TIP3X3086 -14.114 21.060 -17.728 1.00 0.00 W1 H +ATOM 11747 H2 TIP3X3086 -14.034 22.545 -18.011 1.00 0.00 W1 H +ATOM 11748 OH2 TIP3X3087 -14.018 22.772 -24.492 1.00 0.00 W1 O +ATOM 11749 H1 TIP3X3087 -13.661 23.645 -24.662 1.00 0.00 W1 H +ATOM 11750 H2 TIP3X3087 -14.120 22.382 -25.360 1.00 0.00 W1 H +ATOM 11751 OH2 TIP3X3088 -3.259 25.037 -30.305 1.00 0.00 W1 O +ATOM 11752 H1 TIP3X3088 -2.553 25.536 -30.717 1.00 0.00 W1 H +ATOM 11753 H2 TIP3X3088 -2.810 24.407 -29.742 1.00 0.00 W1 H +ATOM 11754 OH2 TIP3X3089 -0.662 22.384 -26.943 1.00 0.00 W1 O +ATOM 11755 H1 TIP3X3089 -0.950 22.557 -26.046 1.00 0.00 W1 H +ATOM 11756 H2 TIP3X3089 -0.149 23.156 -27.183 1.00 0.00 W1 H +ATOM 11757 OH2 TIP3X3090 -14.165 21.501 -22.221 1.00 0.00 W1 O +ATOM 11758 H1 TIP3X3090 -14.070 22.179 -22.889 1.00 0.00 W1 H +ATOM 11759 H2 TIP3X3090 -13.506 21.720 -21.561 1.00 0.00 W1 H +ATOM 11760 OH2 TIP3X3091 -11.378 30.008 -28.957 1.00 0.00 W1 O +ATOM 11761 H1 TIP3X3091 -11.607 30.368 -29.814 1.00 0.00 W1 H +ATOM 11762 H2 TIP3X3091 -11.791 29.145 -28.941 1.00 0.00 W1 H +ATOM 11763 OH2 TIP3X3092 -12.603 25.241 -30.459 1.00 0.00 W1 O +ATOM 11764 H1 TIP3X3092 -13.418 24.952 -30.867 1.00 0.00 W1 H +ATOM 11765 H2 TIP3X3092 -12.071 24.448 -30.397 1.00 0.00 W1 H +ATOM 11766 OH2 TIP3X3093 -11.185 26.081 -17.384 1.00 0.00 W1 O +ATOM 11767 H1 TIP3X3093 -11.758 26.683 -17.858 1.00 0.00 W1 H +ATOM 11768 H2 TIP3X3093 -11.659 25.885 -16.576 1.00 0.00 W1 H +ATOM 11769 OH2 TIP3X3094 -8.109 30.824 -19.693 1.00 0.00 W1 O +ATOM 11770 H1 TIP3X3094 -7.791 30.530 -18.840 1.00 0.00 W1 H +ATOM 11771 H2 TIP3X3094 -7.676 30.246 -20.322 1.00 0.00 W1 H +ATOM 11772 OH2 TIP3X3095 -3.403 31.065 -25.560 1.00 0.00 W1 O +ATOM 11773 H1 TIP3X3095 -3.815 30.374 -26.078 1.00 0.00 W1 H +ATOM 11774 H2 TIP3X3095 -3.598 31.872 -26.036 1.00 0.00 W1 H +ATOM 11775 OH2 TIP3X3096 -6.825 27.748 -28.308 1.00 0.00 W1 O +ATOM 11776 H1 TIP3X3096 -6.566 28.533 -28.790 1.00 0.00 W1 H +ATOM 11777 H2 TIP3X3096 -7.394 28.071 -27.610 1.00 0.00 W1 H +ATOM 11778 OH2 TIP3X3097 -6.808 22.902 -29.236 1.00 0.00 W1 O +ATOM 11779 H1 TIP3X3097 -5.984 22.975 -29.719 1.00 0.00 W1 H +ATOM 11780 H2 TIP3X3097 -6.800 23.646 -28.635 1.00 0.00 W1 H +ATOM 11781 OH2 TIP3X3098 -3.406 17.626 -19.445 1.00 0.00 W1 O +ATOM 11782 H1 TIP3X3098 -2.601 17.395 -19.909 1.00 0.00 W1 H +ATOM 11783 H2 TIP3X3098 -3.116 18.179 -18.720 1.00 0.00 W1 H +ATOM 11784 OH2 TIP3X3099 -15.441 24.727 -28.039 1.00 0.00 W1 O +ATOM 11785 H1 TIP3X3099 -15.595 24.819 -28.979 1.00 0.00 W1 H +ATOM 11786 H2 TIP3X3099 -14.488 24.727 -27.950 1.00 0.00 W1 H +ATOM 11787 OH2 TIP3X3100 -4.679 24.315 -21.443 1.00 0.00 W1 O +ATOM 11788 H1 TIP3X3100 -4.134 24.977 -21.017 1.00 0.00 W1 H +ATOM 11789 H2 TIP3X3100 -4.220 24.115 -22.259 1.00 0.00 W1 H +ATOM 11790 OH2 TIP3X3101 -5.857 29.289 -30.366 1.00 0.00 W1 O +ATOM 11791 H1 TIP3X3101 -5.032 29.324 -29.881 1.00 0.00 W1 H +ATOM 11792 H2 TIP3X3101 -5.654 28.776 -31.148 1.00 0.00 W1 H +ATOM 11793 OH2 TIP3X3102 -5.865 27.076 -18.715 1.00 0.00 W1 O +ATOM 11794 H1 TIP3X3102 -6.685 27.323 -18.288 1.00 0.00 W1 H +ATOM 11795 H2 TIP3X3102 -6.094 26.981 -19.639 1.00 0.00 W1 H +ATOM 11796 OH2 TIP3X3103 -9.239 27.301 -26.828 1.00 0.00 W1 O +ATOM 11797 H1 TIP3X3103 -9.947 27.448 -27.456 1.00 0.00 W1 H +ATOM 11798 H2 TIP3X3103 -9.577 27.646 -26.001 1.00 0.00 W1 H +ATOM 11799 OH2 TIP3X3104 -12.675 28.213 -18.117 1.00 0.00 W1 O +ATOM 11800 H1 TIP3X3104 -11.941 28.824 -18.181 1.00 0.00 W1 H +ATOM 11801 H2 TIP3X3104 -12.987 28.307 -17.217 1.00 0.00 W1 H +ATOM 11802 OH2 TIP3X3105 -13.085 29.918 -24.015 1.00 0.00 W1 O +ATOM 11803 H1 TIP3X3105 -13.671 29.177 -24.169 1.00 0.00 W1 H +ATOM 11804 H2 TIP3X3105 -12.642 30.051 -24.853 1.00 0.00 W1 H +ATOM 11805 OH2 TIP3X3106 -4.731 15.931 -22.935 1.00 0.00 W1 O +ATOM 11806 H1 TIP3X3106 -4.399 15.856 -23.829 1.00 0.00 W1 H +ATOM 11807 H2 TIP3X3106 -4.776 16.874 -22.774 1.00 0.00 W1 H +ATOM 11808 OH2 TIP3X3107 -7.493 18.060 -22.700 1.00 0.00 W1 O +ATOM 11809 H1 TIP3X3107 -7.855 18.549 -23.439 1.00 0.00 W1 H +ATOM 11810 H2 TIP3X3107 -8.225 17.971 -22.090 1.00 0.00 W1 H +ATOM 11811 OH2 TIP3X3108 -8.774 16.045 -28.772 1.00 0.00 W1 O +ATOM 11812 H1 TIP3X3108 -7.919 15.789 -28.427 1.00 0.00 W1 H +ATOM 11813 H2 TIP3X3108 -9.293 15.241 -28.747 1.00 0.00 W1 H +ATOM 11814 OH2 TIP3X3109 -6.023 15.888 -27.729 1.00 0.00 W1 O +ATOM 11815 H1 TIP3X3109 -5.567 15.152 -27.320 1.00 0.00 W1 H +ATOM 11816 H2 TIP3X3109 -5.615 15.975 -28.590 1.00 0.00 W1 H +ATOM 11817 OH2 TIP3X3110 -11.383 30.467 -16.274 1.00 0.00 W1 O +ATOM 11818 H1 TIP3X3110 -11.634 31.224 -16.804 1.00 0.00 W1 H +ATOM 11819 H2 TIP3X3110 -10.472 30.298 -16.513 1.00 0.00 W1 H +ATOM 11820 OH2 TIP3X3111 -6.377 29.161 -25.974 1.00 0.00 W1 O +ATOM 11821 H1 TIP3X3111 -5.716 28.519 -25.714 1.00 0.00 W1 H +ATOM 11822 H2 TIP3X3111 -6.390 29.796 -25.257 1.00 0.00 W1 H +ATOM 11823 OH2 TIP3X3112 -8.637 30.064 -17.064 1.00 0.00 W1 O +ATOM 11824 H1 TIP3X3112 -8.420 29.171 -16.794 1.00 0.00 W1 H +ATOM 11825 H2 TIP3X3112 -8.030 30.618 -16.575 1.00 0.00 W1 H +ATOM 11826 OH2 TIP3X3113 -9.691 18.182 -27.020 1.00 0.00 W1 O +ATOM 11827 H1 TIP3X3113 -9.034 17.523 -27.242 1.00 0.00 W1 H +ATOM 11828 H2 TIP3X3113 -9.648 18.251 -26.066 1.00 0.00 W1 H +ATOM 11829 OH2 TIP3X3114 -14.978 16.520 -17.564 1.00 0.00 W1 O +ATOM 11830 H1 TIP3X3114 -14.229 16.325 -18.128 1.00 0.00 W1 H +ATOM 11831 H2 TIP3X3114 -14.769 16.095 -16.732 1.00 0.00 W1 H +ATOM 11832 OH2 TIP3X3115 -3.858 29.247 -27.962 1.00 0.00 W1 O +ATOM 11833 H1 TIP3X3115 -3.713 28.307 -27.859 1.00 0.00 W1 H +ATOM 11834 H2 TIP3X3115 -3.035 29.580 -28.319 1.00 0.00 W1 H +ATOM 11835 OH2 TIP3X3116 -2.190 16.014 -16.735 1.00 0.00 W1 O +ATOM 11836 H1 TIP3X3116 -2.804 16.088 -17.466 1.00 0.00 W1 H +ATOM 11837 H2 TIP3X3116 -1.421 16.509 -17.017 1.00 0.00 W1 H +ATOM 11838 OH2 TIP3X3117 -11.397 30.227 -26.249 1.00 0.00 W1 O +ATOM 11839 H1 TIP3X3117 -11.403 30.272 -27.205 1.00 0.00 W1 H +ATOM 11840 H2 TIP3X3117 -10.589 30.673 -25.993 1.00 0.00 W1 H +ATOM 11841 OH2 TIP3X3118 -0.488 29.165 -18.299 1.00 0.00 W1 O +ATOM 11842 H1 TIP3X3118 -1.210 29.716 -17.998 1.00 0.00 W1 H +ATOM 11843 H2 TIP3X3118 0.300 29.664 -18.085 1.00 0.00 W1 H +ATOM 11844 OH2 TIP3X3119 -12.862 18.487 -26.619 1.00 0.00 W1 O +ATOM 11845 H1 TIP3X3119 -13.505 18.876 -27.212 1.00 0.00 W1 H +ATOM 11846 H2 TIP3X3119 -12.059 18.984 -26.777 1.00 0.00 W1 H +ATOM 11847 OH2 TIP3X3120 -11.433 27.086 -28.888 1.00 0.00 W1 O +ATOM 11848 H1 TIP3X3120 -11.472 26.458 -29.609 1.00 0.00 W1 H +ATOM 11849 H2 TIP3X3120 -12.153 26.833 -28.310 1.00 0.00 W1 H +ATOM 11850 OH2 TIP3X3121 -13.539 26.614 -11.248 1.00 0.00 W1 O +ATOM 11851 H1 TIP3X3121 -13.356 26.538 -10.312 1.00 0.00 W1 H +ATOM 11852 H2 TIP3X3121 -13.563 27.557 -11.413 1.00 0.00 W1 H +ATOM 11853 OH2 TIP3X3122 -2.436 24.105 -7.510 1.00 0.00 W1 O +ATOM 11854 H1 TIP3X3122 -2.201 24.370 -8.400 1.00 0.00 W1 H +ATOM 11855 H2 TIP3X3122 -1.607 23.842 -7.111 1.00 0.00 W1 H +ATOM 11856 OH2 TIP3X3123 -10.452 23.829 -11.532 1.00 0.00 W1 O +ATOM 11857 H1 TIP3X3123 -10.422 24.738 -11.235 1.00 0.00 W1 H +ATOM 11858 H2 TIP3X3123 -9.945 23.346 -10.880 1.00 0.00 W1 H +ATOM 11859 OH2 TIP3X3124 -2.649 27.988 -9.388 1.00 0.00 W1 O +ATOM 11860 H1 TIP3X3124 -2.924 28.478 -8.613 1.00 0.00 W1 H +ATOM 11861 H2 TIP3X3124 -3.174 27.188 -9.365 1.00 0.00 W1 H +ATOM 11862 OH2 TIP3X3125 -4.132 26.431 -12.345 1.00 0.00 W1 O +ATOM 11863 H1 TIP3X3125 -3.970 26.203 -13.260 1.00 0.00 W1 H +ATOM 11864 H2 TIP3X3125 -5.061 26.660 -12.315 1.00 0.00 W1 H +ATOM 11865 OH2 TIP3X3126 -0.285 26.963 -7.561 1.00 0.00 W1 O +ATOM 11866 H1 TIP3X3126 -0.837 27.046 -8.338 1.00 0.00 W1 H +ATOM 11867 H2 TIP3X3126 -0.895 26.747 -6.856 1.00 0.00 W1 H +ATOM 11868 OH2 TIP3X3127 -13.648 28.227 -5.110 1.00 0.00 W1 O +ATOM 11869 H1 TIP3X3127 -13.242 28.431 -4.267 1.00 0.00 W1 H +ATOM 11870 H2 TIP3X3127 -14.219 27.482 -4.927 1.00 0.00 W1 H +ATOM 11871 OH2 TIP3X3128 -6.273 29.852 -5.884 1.00 0.00 W1 O +ATOM 11872 H1 TIP3X3128 -5.972 28.952 -5.762 1.00 0.00 W1 H +ATOM 11873 H2 TIP3X3128 -5.648 30.233 -6.501 1.00 0.00 W1 H +ATOM 11874 OH2 TIP3X3129 -2.841 29.809 -6.004 1.00 0.00 W1 O +ATOM 11875 H1 TIP3X3129 -3.276 30.632 -6.223 1.00 0.00 W1 H +ATOM 11876 H2 TIP3X3129 -1.912 30.035 -5.954 1.00 0.00 W1 H +ATOM 11877 OH2 TIP3X3130 -10.392 29.384 -6.874 1.00 0.00 W1 O +ATOM 11878 H1 TIP3X3130 -10.037 30.233 -7.138 1.00 0.00 W1 H +ATOM 11879 H2 TIP3X3130 -11.327 29.443 -7.070 1.00 0.00 W1 H +ATOM 11880 OH2 TIP3X3131 -5.551 21.276 -7.973 1.00 0.00 W1 O +ATOM 11881 H1 TIP3X3131 -5.629 20.466 -8.477 1.00 0.00 W1 H +ATOM 11882 H2 TIP3X3131 -4.608 21.415 -7.885 1.00 0.00 W1 H +ATOM 11883 OH2 TIP3X3132 -9.528 17.374 -5.611 1.00 0.00 W1 O +ATOM 11884 H1 TIP3X3132 -9.270 16.636 -5.058 1.00 0.00 W1 H +ATOM 11885 H2 TIP3X3132 -10.205 17.017 -6.186 1.00 0.00 W1 H +ATOM 11886 OH2 TIP3X3133 -1.284 18.378 -9.188 1.00 0.00 W1 O +ATOM 11887 H1 TIP3X3133 -1.592 18.716 -8.347 1.00 0.00 W1 H +ATOM 11888 H2 TIP3X3133 -1.217 17.433 -9.056 1.00 0.00 W1 H +ATOM 11889 OH2 TIP3X3134 -2.687 19.573 -7.234 1.00 0.00 W1 O +ATOM 11890 H1 TIP3X3134 -2.112 19.345 -6.503 1.00 0.00 W1 H +ATOM 11891 H2 TIP3X3134 -3.562 19.319 -6.939 1.00 0.00 W1 H +ATOM 11892 OH2 TIP3X3135 -9.641 20.698 -5.863 1.00 0.00 W1 O +ATOM 11893 H1 TIP3X3135 -9.137 19.996 -5.451 1.00 0.00 W1 H +ATOM 11894 H2 TIP3X3135 -8.983 21.340 -6.129 1.00 0.00 W1 H +ATOM 11895 OH2 TIP3X3136 -2.164 21.746 -8.965 1.00 0.00 W1 O +ATOM 11896 H1 TIP3X3136 -2.123 20.847 -8.641 1.00 0.00 W1 H +ATOM 11897 H2 TIP3X3136 -2.282 22.279 -8.179 1.00 0.00 W1 H +ATOM 11898 OH2 TIP3X3137 -3.479 18.390 -11.097 1.00 0.00 W1 O +ATOM 11899 H1 TIP3X3137 -2.654 18.574 -10.648 1.00 0.00 W1 H +ATOM 11900 H2 TIP3X3137 -3.403 18.845 -11.936 1.00 0.00 W1 H +ATOM 11901 OH2 TIP3X3138 -7.297 24.361 -5.025 1.00 0.00 W1 O +ATOM 11902 H1 TIP3X3138 -6.420 24.383 -5.408 1.00 0.00 W1 H +ATOM 11903 H2 TIP3X3138 -7.562 25.280 -4.979 1.00 0.00 W1 H +ATOM 11904 OH2 TIP3X3139 -8.146 26.909 -5.215 1.00 0.00 W1 O +ATOM 11905 H1 TIP3X3139 -8.171 27.136 -6.145 1.00 0.00 W1 H +ATOM 11906 H2 TIP3X3139 -9.066 26.855 -4.957 1.00 0.00 W1 H +ATOM 11907 OH2 TIP3X3140 -13.283 18.791 -8.377 1.00 0.00 W1 O +ATOM 11908 H1 TIP3X3140 -13.609 19.670 -8.186 1.00 0.00 W1 H +ATOM 11909 H2 TIP3X3140 -13.407 18.688 -9.321 1.00 0.00 W1 H +ATOM 11910 OH2 TIP3X3141 -11.127 22.348 -8.365 1.00 0.00 W1 O +ATOM 11911 H1 TIP3X3141 -11.810 21.898 -8.862 1.00 0.00 W1 H +ATOM 11912 H2 TIP3X3141 -10.642 21.645 -7.933 1.00 0.00 W1 H +ATOM 11913 OH2 TIP3X3142 -5.072 27.273 -5.968 1.00 0.00 W1 O +ATOM 11914 H1 TIP3X3142 -5.314 26.686 -6.685 1.00 0.00 W1 H +ATOM 11915 H2 TIP3X3142 -4.122 27.183 -5.896 1.00 0.00 W1 H +ATOM 11916 OH2 TIP3X3143 -0.774 30.907 -9.188 1.00 0.00 W1 O +ATOM 11917 H1 TIP3X3143 -0.779 30.439 -8.353 1.00 0.00 W1 H +ATOM 11918 H2 TIP3X3143 -1.654 30.778 -9.541 1.00 0.00 W1 H +ATOM 11919 OH2 TIP3X3144 -8.902 27.244 -8.166 1.00 0.00 W1 O +ATOM 11920 H1 TIP3X3144 -9.473 26.524 -7.897 1.00 0.00 W1 H +ATOM 11921 H2 TIP3X3144 -9.362 28.034 -7.883 1.00 0.00 W1 H +ATOM 11922 OH2 TIP3X3145 -6.680 17.695 -3.595 1.00 0.00 W1 O +ATOM 11923 H1 TIP3X3145 -7.423 18.175 -3.228 1.00 0.00 W1 H +ATOM 11924 H2 TIP3X3145 -7.061 16.883 -3.930 1.00 0.00 W1 H +ATOM 11925 OH2 TIP3X3146 -11.328 18.400 -13.794 1.00 0.00 W1 O +ATOM 11926 H1 TIP3X3146 -11.426 17.738 -13.109 1.00 0.00 W1 H +ATOM 11927 H2 TIP3X3146 -11.512 17.932 -14.608 1.00 0.00 W1 H +ATOM 11928 OH2 TIP3X3147 -0.435 19.322 -5.604 1.00 0.00 W1 O +ATOM 11929 H1 TIP3X3147 0.084 19.991 -6.051 1.00 0.00 W1 H +ATOM 11930 H2 TIP3X3147 0.007 19.198 -4.764 1.00 0.00 W1 H +ATOM 11931 OH2 TIP3X3148 -14.377 15.675 -11.444 1.00 0.00 W1 O +ATOM 11932 H1 TIP3X3148 -13.652 16.296 -11.375 1.00 0.00 W1 H +ATOM 11933 H2 TIP3X3148 -14.749 15.642 -10.563 1.00 0.00 W1 H +ATOM 11934 OH2 TIP3X3149 -9.111 21.910 -1.458 1.00 0.00 W1 O +ATOM 11935 H1 TIP3X3149 -8.247 22.309 -1.559 1.00 0.00 W1 H +ATOM 11936 H2 TIP3X3149 -8.959 20.973 -1.580 1.00 0.00 W1 H +ATOM 11937 OH2 TIP3X3150 -5.945 26.820 -8.718 1.00 0.00 W1 O +ATOM 11938 H1 TIP3X3150 -5.851 25.957 -9.122 1.00 0.00 W1 H +ATOM 11939 H2 TIP3X3150 -6.878 27.020 -8.794 1.00 0.00 W1 H +ATOM 11940 OH2 TIP3X3151 -7.333 25.104 -11.187 1.00 0.00 W1 O +ATOM 11941 H1 TIP3X3151 -7.897 24.490 -10.718 1.00 0.00 W1 H +ATOM 11942 H2 TIP3X3151 -7.807 25.935 -11.159 1.00 0.00 W1 H +ATOM 11943 OH2 TIP3X3152 -14.795 25.617 -4.730 1.00 0.00 W1 O +ATOM 11944 H1 TIP3X3152 -15.330 25.016 -5.248 1.00 0.00 W1 H +ATOM 11945 H2 TIP3X3152 -15.266 25.704 -3.901 1.00 0.00 W1 H +ATOM 11946 OH2 TIP3X3153 -3.499 24.638 -10.363 1.00 0.00 W1 O +ATOM 11947 H1 TIP3X3153 -3.555 23.723 -10.639 1.00 0.00 W1 H +ATOM 11948 H2 TIP3X3153 -3.671 25.141 -11.159 1.00 0.00 W1 H +ATOM 11949 OH2 TIP3X3154 -3.202 25.152 -3.338 1.00 0.00 W1 O +ATOM 11950 H1 TIP3X3154 -4.104 25.236 -3.030 1.00 0.00 W1 H +ATOM 11951 H2 TIP3X3154 -3.033 24.210 -3.335 1.00 0.00 W1 H +ATOM 11952 OH2 TIP3X3155 -0.835 23.112 -5.533 1.00 0.00 W1 O +ATOM 11953 H1 TIP3X3155 -0.173 22.431 -5.652 1.00 0.00 W1 H +ATOM 11954 H2 TIP3X3155 -1.551 22.672 -5.074 1.00 0.00 W1 H +ATOM 11955 OH2 TIP3X3156 -11.691 22.799 -0.388 1.00 0.00 W1 O +ATOM 11956 H1 TIP3X3156 -12.220 22.565 -1.151 1.00 0.00 W1 H +ATOM 11957 H2 TIP3X3156 -10.795 22.846 -0.723 1.00 0.00 W1 H +ATOM 11958 OH2 TIP3X3157 -10.780 26.005 -4.827 1.00 0.00 W1 O +ATOM 11959 H1 TIP3X3157 -10.825 25.450 -4.048 1.00 0.00 W1 H +ATOM 11960 H2 TIP3X3157 -11.413 26.703 -4.661 1.00 0.00 W1 H +ATOM 11961 OH2 TIP3X3158 -2.109 27.135 -5.077 1.00 0.00 W1 O +ATOM 11962 H1 TIP3X3158 -1.685 27.903 -4.693 1.00 0.00 W1 H +ATOM 11963 H2 TIP3X3158 -2.413 26.627 -4.325 1.00 0.00 W1 H +ATOM 11964 OH2 TIP3X3159 -4.021 29.110 -3.252 1.00 0.00 W1 O +ATOM 11965 H1 TIP3X3159 -4.728 28.481 -3.395 1.00 0.00 W1 H +ATOM 11966 H2 TIP3X3159 -3.692 29.305 -4.130 1.00 0.00 W1 H +ATOM 11967 OH2 TIP3X3160 -3.770 27.646 -0.856 1.00 0.00 W1 O +ATOM 11968 H1 TIP3X3160 -4.404 27.040 -1.240 1.00 0.00 W1 H +ATOM 11969 H2 TIP3X3160 -3.657 28.327 -1.520 1.00 0.00 W1 H +ATOM 11970 OH2 TIP3X3161 -0.160 29.555 -6.789 1.00 0.00 W1 O +ATOM 11971 H1 TIP3X3161 0.518 29.396 -6.133 1.00 0.00 W1 H +ATOM 11972 H2 TIP3X3161 -0.394 28.683 -7.108 1.00 0.00 W1 H +ATOM 11973 OH2 TIP3X3162 -7.479 25.972 -14.742 1.00 0.00 W1 O +ATOM 11974 H1 TIP3X3162 -8.175 25.350 -14.528 1.00 0.00 W1 H +ATOM 11975 H2 TIP3X3162 -7.497 26.608 -14.027 1.00 0.00 W1 H +ATOM 11976 OH2 TIP3X3163 -0.099 24.736 -15.306 1.00 0.00 W1 O +ATOM 11977 H1 TIP3X3163 -0.362 23.986 -15.839 1.00 0.00 W1 H +ATOM 11978 H2 TIP3X3163 -0.354 25.500 -15.823 1.00 0.00 W1 H +ATOM 11979 OH2 TIP3X3164 -14.151 28.432 -15.589 1.00 0.00 W1 O +ATOM 11980 H1 TIP3X3164 -13.706 27.883 -14.943 1.00 0.00 W1 H +ATOM 11981 H2 TIP3X3164 -15.048 28.098 -15.610 1.00 0.00 W1 H +ATOM 11982 OH2 TIP3X3165 -2.058 30.561 -14.330 1.00 0.00 W1 O +ATOM 11983 H1 TIP3X3165 -1.173 30.233 -14.489 1.00 0.00 W1 H +ATOM 11984 H2 TIP3X3165 -2.288 31.029 -15.133 1.00 0.00 W1 H +ATOM 11985 OH2 TIP3X3166 -0.665 26.223 -2.253 1.00 0.00 W1 O +ATOM 11986 H1 TIP3X3166 -0.775 27.172 -2.194 1.00 0.00 W1 H +ATOM 11987 H2 TIP3X3166 -1.558 25.878 -2.263 1.00 0.00 W1 H +ATOM 11988 OH2 TIP3X3167 -13.979 29.049 -12.634 1.00 0.00 W1 O +ATOM 11989 H1 TIP3X3167 -14.047 29.885 -12.174 1.00 0.00 W1 H +ATOM 11990 H2 TIP3X3167 -14.875 28.711 -12.651 1.00 0.00 W1 H +ATOM 11991 OH2 TIP3X3168 -1.399 27.542 -14.990 1.00 0.00 W1 O +ATOM 11992 H1 TIP3X3168 -1.368 27.462 -14.036 1.00 0.00 W1 H +ATOM 11993 H2 TIP3X3168 -2.232 27.979 -15.166 1.00 0.00 W1 H +ATOM 11994 OH2 TIP3X3169 -5.029 15.837 -2.106 1.00 0.00 W1 O +ATOM 11995 H1 TIP3X3169 -5.335 16.585 -2.618 1.00 0.00 W1 H +ATOM 11996 H2 TIP3X3169 -4.975 15.120 -2.738 1.00 0.00 W1 H +ATOM 11997 OH2 TIP3X3170 -10.815 29.753 -4.077 1.00 0.00 W1 O +ATOM 11998 H1 TIP3X3170 -9.967 29.991 -3.703 1.00 0.00 W1 H +ATOM 11999 H2 TIP3X3170 -10.603 29.373 -4.930 1.00 0.00 W1 H +ATOM 12000 OH2 TIP3X3171 -12.349 17.772 -0.726 1.00 0.00 W1 O +ATOM 12001 H1 TIP3X3171 -13.226 17.861 -0.352 1.00 0.00 W1 H +ATOM 12002 H2 TIP3X3171 -12.286 18.484 -1.363 1.00 0.00 W1 H +ATOM 12003 OH2 TIP3X3172 -6.151 19.719 -14.996 1.00 0.00 W1 O +ATOM 12004 H1 TIP3X3172 -6.317 20.016 -15.891 1.00 0.00 W1 H +ATOM 12005 H2 TIP3X3172 -7.022 19.595 -14.619 1.00 0.00 W1 H +ATOM 12006 OH2 TIP3X3173 -0.754 27.479 -11.948 1.00 0.00 W1 O +ATOM 12007 H1 TIP3X3173 -0.181 26.742 -11.735 1.00 0.00 W1 H +ATOM 12008 H2 TIP3X3173 -1.085 27.778 -11.101 1.00 0.00 W1 H +ATOM 12009 OH2 TIP3X3174 -5.493 16.515 -15.019 1.00 0.00 W1 O +ATOM 12010 H1 TIP3X3174 -4.761 17.131 -14.994 1.00 0.00 W1 H +ATOM 12011 H2 TIP3X3174 -5.252 15.883 -15.695 1.00 0.00 W1 H +ATOM 12012 OH2 TIP3X3175 -13.454 25.829 -8.676 1.00 0.00 W1 O +ATOM 12013 H1 TIP3X3175 -14.122 26.153 -8.071 1.00 0.00 W1 H +ATOM 12014 H2 TIP3X3175 -12.661 25.760 -8.144 1.00 0.00 W1 H +ATOM 12015 OH2 TIP3X3176 -8.457 27.248 -1.565 1.00 0.00 W1 O +ATOM 12016 H1 TIP3X3176 -8.233 26.870 -0.715 1.00 0.00 W1 H +ATOM 12017 H2 TIP3X3176 -9.063 26.619 -1.956 1.00 0.00 W1 H +ATOM 12018 OH2 TIP3X3177 -4.977 18.553 -6.153 1.00 0.00 W1 O +ATOM 12019 H1 TIP3X3177 -4.918 18.371 -5.215 1.00 0.00 W1 H +ATOM 12020 H2 TIP3X3177 -5.916 18.640 -6.321 1.00 0.00 W1 H +ATOM 12021 OH2 TIP3X3178 -8.786 19.210 -1.974 1.00 0.00 W1 O +ATOM 12022 H1 TIP3X3178 -9.653 19.140 -2.374 1.00 0.00 W1 H +ATOM 12023 H2 TIP3X3178 -8.841 18.669 -1.186 1.00 0.00 W1 H +ATOM 12024 OH2 TIP3X3179 -1.300 21.930 -0.221 1.00 0.00 W1 O +ATOM 12025 H1 TIP3X3179 -0.505 21.397 -0.237 1.00 0.00 W1 H +ATOM 12026 H2 TIP3X3179 -1.594 21.895 0.690 1.00 0.00 W1 H +ATOM 12027 OH2 TIP3X3180 -13.115 15.797 -4.302 1.00 0.00 W1 O +ATOM 12028 H1 TIP3X3180 -13.340 16.250 -5.115 1.00 0.00 W1 H +ATOM 12029 H2 TIP3X3180 -12.285 15.360 -4.494 1.00 0.00 W1 H +ATOM 12030 OH2 TIP3X3181 -7.020 16.255 -9.221 1.00 0.00 W1 O +ATOM 12031 H1 TIP3X3181 -6.538 16.769 -9.868 1.00 0.00 W1 H +ATOM 12032 H2 TIP3X3181 -6.676 16.548 -8.377 1.00 0.00 W1 H +ATOM 12033 OH2 TIP3X3182 -12.550 20.846 -14.068 1.00 0.00 W1 O +ATOM 12034 H1 TIP3X3182 -12.127 21.492 -14.634 1.00 0.00 W1 H +ATOM 12035 H2 TIP3X3182 -11.838 20.271 -13.787 1.00 0.00 W1 H +ATOM 12036 OH2 TIP3X3183 -12.025 21.503 -4.757 1.00 0.00 W1 O +ATOM 12037 H1 TIP3X3183 -12.110 22.294 -4.225 1.00 0.00 W1 H +ATOM 12038 H2 TIP3X3183 -11.110 21.499 -5.037 1.00 0.00 W1 H +ATOM 12039 OH2 TIP3X3184 -12.843 22.221 -11.571 1.00 0.00 W1 O +ATOM 12040 H1 TIP3X3184 -12.780 21.932 -12.482 1.00 0.00 W1 H +ATOM 12041 H2 TIP3X3184 -12.067 22.766 -11.438 1.00 0.00 W1 H +ATOM 12042 OH2 TIP3X3185 -3.822 18.791 -13.811 1.00 0.00 W1 O +ATOM 12043 H1 TIP3X3185 -4.530 19.279 -14.231 1.00 0.00 W1 H +ATOM 12044 H2 TIP3X3185 -3.097 18.835 -14.435 1.00 0.00 W1 H +ATOM 12045 OH2 TIP3X3186 -15.272 19.677 -2.723 1.00 0.00 W1 O +ATOM 12046 H1 TIP3X3186 -16.176 19.971 -2.612 1.00 0.00 W1 H +ATOM 12047 H2 TIP3X3186 -15.131 19.058 -2.007 1.00 0.00 W1 H +ATOM 12048 OH2 TIP3X3187 -14.128 16.515 -6.741 1.00 0.00 W1 O +ATOM 12049 H1 TIP3X3187 -14.021 15.813 -7.383 1.00 0.00 W1 H +ATOM 12050 H2 TIP3X3187 -13.993 17.320 -7.240 1.00 0.00 W1 H +ATOM 12051 OH2 TIP3X3188 -2.607 20.143 -1.853 1.00 0.00 W1 O +ATOM 12052 H1 TIP3X3188 -2.295 20.721 -1.157 1.00 0.00 W1 H +ATOM 12053 H2 TIP3X3188 -3.551 20.079 -1.708 1.00 0.00 W1 H +ATOM 12054 OH2 TIP3X3189 -5.564 20.148 -1.906 1.00 0.00 W1 O +ATOM 12055 H1 TIP3X3189 -5.923 20.717 -2.587 1.00 0.00 W1 H +ATOM 12056 H2 TIP3X3189 -5.901 19.278 -2.117 1.00 0.00 W1 H +ATOM 12057 OH2 TIP3X3190 -7.361 20.618 -12.041 1.00 0.00 W1 O +ATOM 12058 H1 TIP3X3190 -7.272 21.197 -12.797 1.00 0.00 W1 H +ATOM 12059 H2 TIP3X3190 -8.130 20.083 -12.237 1.00 0.00 W1 H +ATOM 12060 OH2 TIP3X3191 -9.058 19.949 -14.353 1.00 0.00 W1 O +ATOM 12061 H1 TIP3X3191 -9.495 20.142 -15.183 1.00 0.00 W1 H +ATOM 12062 H2 TIP3X3191 -9.465 19.138 -14.050 1.00 0.00 W1 H +ATOM 12063 OH2 TIP3X3192 -8.347 17.011 -0.564 1.00 0.00 W1 O +ATOM 12064 H1 TIP3X3192 -8.814 16.624 0.176 1.00 0.00 W1 H +ATOM 12065 H2 TIP3X3192 -7.433 17.044 -0.282 1.00 0.00 W1 H +ATOM 12066 OH2 TIP3X3193 -2.784 22.356 -3.883 1.00 0.00 W1 O +ATOM 12067 H1 TIP3X3193 -2.765 21.706 -3.180 1.00 0.00 W1 H +ATOM 12068 H2 TIP3X3193 -3.619 22.204 -4.327 1.00 0.00 W1 H +ATOM 12069 OH2 TIP3X3194 -14.709 19.456 -15.413 1.00 0.00 W1 O +ATOM 12070 H1 TIP3X3194 -15.466 19.264 -14.859 1.00 0.00 W1 H +ATOM 12071 H2 TIP3X3194 -14.175 20.055 -14.891 1.00 0.00 W1 H +ATOM 12072 OH2 TIP3X3195 -14.791 30.950 -14.926 1.00 0.00 W1 O +ATOM 12073 H1 TIP3X3195 -14.374 30.202 -14.497 1.00 0.00 W1 H +ATOM 12074 H2 TIP3X3195 -14.778 31.643 -14.267 1.00 0.00 W1 H +ATOM 12075 OH2 TIP3X3196 -6.043 19.110 -9.933 1.00 0.00 W1 O +ATOM 12076 H1 TIP3X3196 -6.380 19.460 -10.758 1.00 0.00 W1 H +ATOM 12077 H2 TIP3X3196 -5.146 18.842 -10.135 1.00 0.00 W1 H +ATOM 12078 OH2 TIP3X3197 -10.587 18.420 -8.189 1.00 0.00 W1 O +ATOM 12079 H1 TIP3X3197 -11.530 18.373 -8.348 1.00 0.00 W1 H +ATOM 12080 H2 TIP3X3197 -10.448 19.294 -7.826 1.00 0.00 W1 H +ATOM 12081 OH2 TIP3X3198 -15.225 19.546 -11.396 1.00 0.00 W1 O +ATOM 12082 H1 TIP3X3198 -15.499 19.422 -10.487 1.00 0.00 W1 H +ATOM 12083 H2 TIP3X3198 -15.420 20.465 -11.582 1.00 0.00 W1 H +ATOM 12084 OH2 TIP3X3199 -11.225 18.873 -3.335 1.00 0.00 W1 O +ATOM 12085 H1 TIP3X3199 -11.203 18.067 -3.851 1.00 0.00 W1 H +ATOM 12086 H2 TIP3X3199 -11.619 19.521 -3.920 1.00 0.00 W1 H +ATOM 12087 OH2 TIP3X3200 -10.642 25.409 -7.531 1.00 0.00 W1 O +ATOM 12088 H1 TIP3X3200 -10.713 24.473 -7.718 1.00 0.00 W1 H +ATOM 12089 H2 TIP3X3200 -10.637 25.462 -6.575 1.00 0.00 W1 H +ATOM 12090 OH2 TIP3X3201 -6.453 22.428 -2.968 1.00 0.00 W1 O +ATOM 12091 H1 TIP3X3201 -6.041 23.259 -2.732 1.00 0.00 W1 H +ATOM 12092 H2 TIP3X3201 -7.002 22.638 -3.723 1.00 0.00 W1 H +ATOM 12093 OH2 TIP3X3202 -0.657 17.794 -13.644 1.00 0.00 W1 O +ATOM 12094 H1 TIP3X3202 -0.223 18.021 -12.822 1.00 0.00 W1 H +ATOM 12095 H2 TIP3X3202 -1.177 17.019 -13.434 1.00 0.00 W1 H +ATOM 12096 OH2 TIP3X3203 -9.503 23.754 -14.466 1.00 0.00 W1 O +ATOM 12097 H1 TIP3X3203 -9.792 23.632 -13.561 1.00 0.00 W1 H +ATOM 12098 H2 TIP3X3203 -8.814 23.101 -14.587 1.00 0.00 W1 H +ATOM 12099 OH2 TIP3X3204 -2.799 22.270 -13.398 1.00 0.00 W1 O +ATOM 12100 H1 TIP3X3204 -3.664 22.071 -13.039 1.00 0.00 W1 H +ATOM 12101 H2 TIP3X3204 -2.242 22.391 -12.629 1.00 0.00 W1 H +ATOM 12102 OH2 TIP3X3205 -7.966 22.524 -6.927 1.00 0.00 W1 O +ATOM 12103 H1 TIP3X3205 -7.869 23.321 -6.406 1.00 0.00 W1 H +ATOM 12104 H2 TIP3X3205 -7.092 22.135 -6.936 1.00 0.00 W1 H +ATOM 12105 OH2 TIP3X3206 -8.221 22.906 -10.011 1.00 0.00 W1 O +ATOM 12106 H1 TIP3X3206 -7.600 22.310 -10.429 1.00 0.00 W1 H +ATOM 12107 H2 TIP3X3206 -8.196 22.669 -9.084 1.00 0.00 W1 H +ATOM 12108 OH2 TIP3X3207 -5.326 24.522 -1.075 1.00 0.00 W1 O +ATOM 12109 H1 TIP3X3207 -6.004 24.806 -0.462 1.00 0.00 W1 H +ATOM 12110 H2 TIP3X3207 -4.528 24.481 -0.549 1.00 0.00 W1 H +ATOM 12111 OH2 TIP3X3208 -12.817 23.937 -3.379 1.00 0.00 W1 O +ATOM 12112 H1 TIP3X3208 -12.300 24.343 -2.683 1.00 0.00 W1 H +ATOM 12113 H2 TIP3X3208 -13.199 24.674 -3.855 1.00 0.00 W1 H +ATOM 12114 OH2 TIP3X3209 -13.910 21.899 -1.758 1.00 0.00 W1 O +ATOM 12115 H1 TIP3X3209 -14.114 21.060 -2.170 1.00 0.00 W1 H +ATOM 12116 H2 TIP3X3209 -14.034 22.545 -2.453 1.00 0.00 W1 H +ATOM 12117 OH2 TIP3X3210 -14.018 22.772 -8.934 1.00 0.00 W1 O +ATOM 12118 H1 TIP3X3210 -13.661 23.645 -9.104 1.00 0.00 W1 H +ATOM 12119 H2 TIP3X3210 -14.120 22.382 -9.802 1.00 0.00 W1 H +ATOM 12120 OH2 TIP3X3211 -3.259 25.037 -14.748 1.00 0.00 W1 O +ATOM 12121 H1 TIP3X3211 -2.553 25.536 -15.160 1.00 0.00 W1 H +ATOM 12122 H2 TIP3X3211 -2.810 24.407 -14.184 1.00 0.00 W1 H +ATOM 12123 OH2 TIP3X3212 -0.662 22.384 -11.385 1.00 0.00 W1 O +ATOM 12124 H1 TIP3X3212 -0.950 22.557 -10.489 1.00 0.00 W1 H +ATOM 12125 H2 TIP3X3212 -0.149 23.156 -11.626 1.00 0.00 W1 H +ATOM 12126 OH2 TIP3X3213 -14.165 21.501 -6.663 1.00 0.00 W1 O +ATOM 12127 H1 TIP3X3213 -14.070 22.179 -7.332 1.00 0.00 W1 H +ATOM 12128 H2 TIP3X3213 -13.506 21.720 -6.004 1.00 0.00 W1 H +ATOM 12129 OH2 TIP3X3214 -11.378 30.008 -13.399 1.00 0.00 W1 O +ATOM 12130 H1 TIP3X3214 -11.607 30.368 -14.256 1.00 0.00 W1 H +ATOM 12131 H2 TIP3X3214 -11.791 29.145 -13.383 1.00 0.00 W1 H +ATOM 12132 OH2 TIP3X3215 -12.603 25.241 -14.901 1.00 0.00 W1 O +ATOM 12133 H1 TIP3X3215 -13.418 24.952 -15.310 1.00 0.00 W1 H +ATOM 12134 H2 TIP3X3215 -12.071 24.448 -14.840 1.00 0.00 W1 H +ATOM 12135 OH2 TIP3X3216 -11.185 26.081 -1.826 1.00 0.00 W1 O +ATOM 12136 H1 TIP3X3216 -11.758 26.683 -2.301 1.00 0.00 W1 H +ATOM 12137 H2 TIP3X3216 -11.659 25.885 -1.018 1.00 0.00 W1 H +ATOM 12138 OH2 TIP3X3217 -8.109 30.824 -4.136 1.00 0.00 W1 O +ATOM 12139 H1 TIP3X3217 -7.791 30.530 -3.282 1.00 0.00 W1 H +ATOM 12140 H2 TIP3X3217 -7.676 30.246 -4.765 1.00 0.00 W1 H +ATOM 12141 OH2 TIP3X3218 -3.403 31.065 -10.002 1.00 0.00 W1 O +ATOM 12142 H1 TIP3X3218 -3.815 30.374 -10.521 1.00 0.00 W1 H +ATOM 12143 H2 TIP3X3218 -3.598 31.872 -10.479 1.00 0.00 W1 H +ATOM 12144 OH2 TIP3X3219 -6.825 27.748 -12.750 1.00 0.00 W1 O +ATOM 12145 H1 TIP3X3219 -6.566 28.533 -13.232 1.00 0.00 W1 H +ATOM 12146 H2 TIP3X3219 -7.394 28.071 -12.052 1.00 0.00 W1 H +ATOM 12147 OH2 TIP3X3220 -6.808 22.902 -13.679 1.00 0.00 W1 O +ATOM 12148 H1 TIP3X3220 -5.984 22.975 -14.162 1.00 0.00 W1 H +ATOM 12149 H2 TIP3X3220 -6.800 23.646 -13.077 1.00 0.00 W1 H +ATOM 12150 OH2 TIP3X3221 -3.406 17.626 -3.888 1.00 0.00 W1 O +ATOM 12151 H1 TIP3X3221 -2.601 17.395 -4.351 1.00 0.00 W1 H +ATOM 12152 H2 TIP3X3221 -3.116 18.179 -3.163 1.00 0.00 W1 H +ATOM 12153 OH2 TIP3X3222 -15.441 24.727 -12.482 1.00 0.00 W1 O +ATOM 12154 H1 TIP3X3222 -15.595 24.819 -13.422 1.00 0.00 W1 H +ATOM 12155 H2 TIP3X3222 -14.488 24.727 -12.393 1.00 0.00 W1 H +ATOM 12156 OH2 TIP3X3223 -4.679 24.315 -5.886 1.00 0.00 W1 O +ATOM 12157 H1 TIP3X3223 -4.134 24.977 -5.460 1.00 0.00 W1 H +ATOM 12158 H2 TIP3X3223 -4.220 24.115 -6.701 1.00 0.00 W1 H +ATOM 12159 OH2 TIP3X3224 -5.857 29.289 -14.808 1.00 0.00 W1 O +ATOM 12160 H1 TIP3X3224 -5.032 29.324 -14.324 1.00 0.00 W1 H +ATOM 12161 H2 TIP3X3224 -5.654 28.776 -15.591 1.00 0.00 W1 H +ATOM 12162 OH2 TIP3X3225 -5.865 27.076 -3.157 1.00 0.00 W1 O +ATOM 12163 H1 TIP3X3225 -6.685 27.323 -2.731 1.00 0.00 W1 H +ATOM 12164 H2 TIP3X3225 -6.094 26.981 -4.082 1.00 0.00 W1 H +ATOM 12165 OH2 TIP3X3226 -9.239 27.301 -11.271 1.00 0.00 W1 O +ATOM 12166 H1 TIP3X3226 -9.947 27.448 -11.899 1.00 0.00 W1 H +ATOM 12167 H2 TIP3X3226 -9.577 27.646 -10.444 1.00 0.00 W1 H +ATOM 12168 OH2 TIP3X3227 -12.675 28.213 -2.559 1.00 0.00 W1 O +ATOM 12169 H1 TIP3X3227 -11.941 28.824 -2.624 1.00 0.00 W1 H +ATOM 12170 H2 TIP3X3227 -12.987 28.307 -1.660 1.00 0.00 W1 H +ATOM 12171 OH2 TIP3X3228 -13.085 29.918 -8.458 1.00 0.00 W1 O +ATOM 12172 H1 TIP3X3228 -13.671 29.177 -8.611 1.00 0.00 W1 H +ATOM 12173 H2 TIP3X3228 -12.642 30.051 -9.296 1.00 0.00 W1 H +ATOM 12174 OH2 TIP3X3229 -7.493 18.060 -7.143 1.00 0.00 W1 O +ATOM 12175 H1 TIP3X3229 -7.855 18.549 -7.882 1.00 0.00 W1 H +ATOM 12176 H2 TIP3X3229 -8.225 17.971 -6.533 1.00 0.00 W1 H +ATOM 12177 OH2 TIP3X3230 -8.774 16.045 -13.215 1.00 0.00 W1 O +ATOM 12178 H1 TIP3X3230 -7.919 15.789 -12.869 1.00 0.00 W1 H +ATOM 12179 H2 TIP3X3230 -9.293 15.241 -13.190 1.00 0.00 W1 H +ATOM 12180 OH2 TIP3X3231 -6.023 15.888 -12.171 1.00 0.00 W1 O +ATOM 12181 H1 TIP3X3231 -5.567 15.152 -11.763 1.00 0.00 W1 H +ATOM 12182 H2 TIP3X3231 -5.615 15.975 -13.033 1.00 0.00 W1 H +ATOM 12183 OH2 TIP3X3232 -11.383 30.467 -0.717 1.00 0.00 W1 O +ATOM 12184 H1 TIP3X3232 -11.634 31.224 -1.246 1.00 0.00 W1 H +ATOM 12185 H2 TIP3X3232 -10.472 30.298 -0.956 1.00 0.00 W1 H +ATOM 12186 OH2 TIP3X3233 -6.377 29.161 -10.416 1.00 0.00 W1 O +ATOM 12187 H1 TIP3X3233 -5.716 28.519 -10.156 1.00 0.00 W1 H +ATOM 12188 H2 TIP3X3233 -6.390 29.796 -9.700 1.00 0.00 W1 H +ATOM 12189 OH2 TIP3X3234 -8.637 30.064 -1.507 1.00 0.00 W1 O +ATOM 12190 H1 TIP3X3234 -8.420 29.171 -1.236 1.00 0.00 W1 H +ATOM 12191 H2 TIP3X3234 -8.030 30.618 -1.017 1.00 0.00 W1 H +ATOM 12192 OH2 TIP3X3235 -9.691 18.182 -11.462 1.00 0.00 W1 O +ATOM 12193 H1 TIP3X3235 -9.034 17.523 -11.685 1.00 0.00 W1 H +ATOM 12194 H2 TIP3X3235 -9.648 18.251 -10.508 1.00 0.00 W1 H +ATOM 12195 OH2 TIP3X3236 -14.978 16.520 -2.006 1.00 0.00 W1 O +ATOM 12196 H1 TIP3X3236 -14.229 16.325 -2.570 1.00 0.00 W1 H +ATOM 12197 H2 TIP3X3236 -14.769 16.095 -1.175 1.00 0.00 W1 H +ATOM 12198 OH2 TIP3X3237 -3.858 29.247 -12.405 1.00 0.00 W1 O +ATOM 12199 H1 TIP3X3237 -3.713 28.307 -12.302 1.00 0.00 W1 H +ATOM 12200 H2 TIP3X3237 -3.035 29.580 -12.762 1.00 0.00 W1 H +ATOM 12201 OH2 TIP3X3238 -2.190 16.014 -1.178 1.00 0.00 W1 O +ATOM 12202 H1 TIP3X3238 -2.804 16.088 -1.908 1.00 0.00 W1 H +ATOM 12203 H2 TIP3X3238 -1.421 16.509 -1.459 1.00 0.00 W1 H +ATOM 12204 OH2 TIP3X3239 -11.397 30.227 -10.691 1.00 0.00 W1 O +ATOM 12205 H1 TIP3X3239 -11.403 30.272 -11.647 1.00 0.00 W1 H +ATOM 12206 H2 TIP3X3239 -10.589 30.673 -10.435 1.00 0.00 W1 H +ATOM 12207 OH2 TIP3X3240 -0.488 29.165 -2.742 1.00 0.00 W1 O +ATOM 12208 H1 TIP3X3240 -1.210 29.716 -2.441 1.00 0.00 W1 H +ATOM 12209 H2 TIP3X3240 0.300 29.664 -2.528 1.00 0.00 W1 H +ATOM 12210 OH2 TIP3X3241 -12.862 18.487 -11.062 1.00 0.00 W1 O +ATOM 12211 H1 TIP3X3241 -13.505 18.876 -11.654 1.00 0.00 W1 H +ATOM 12212 H2 TIP3X3241 -12.059 18.984 -11.220 1.00 0.00 W1 H +ATOM 12213 OH2 TIP3X3242 -11.433 27.086 -13.330 1.00 0.00 W1 O +ATOM 12214 H1 TIP3X3242 -11.472 26.458 -14.052 1.00 0.00 W1 H +ATOM 12215 H2 TIP3X3242 -12.153 26.833 -12.752 1.00 0.00 W1 H +ATOM 12216 OH2 TIP3X3243 -13.539 26.614 4.309 1.00 0.00 W1 O +ATOM 12217 H1 TIP3X3243 -13.356 26.538 5.246 1.00 0.00 W1 H +ATOM 12218 H2 TIP3X3243 -13.563 27.557 4.145 1.00 0.00 W1 H +ATOM 12219 OH2 TIP3X3244 -2.436 24.105 8.047 1.00 0.00 W1 O +ATOM 12220 H1 TIP3X3244 -2.201 24.370 7.158 1.00 0.00 W1 H +ATOM 12221 H2 TIP3X3244 -1.607 23.842 8.446 1.00 0.00 W1 H +ATOM 12222 OH2 TIP3X3245 -10.452 23.829 4.026 1.00 0.00 W1 O +ATOM 12223 H1 TIP3X3245 -10.422 24.738 4.323 1.00 0.00 W1 H +ATOM 12224 H2 TIP3X3245 -9.945 23.346 4.678 1.00 0.00 W1 H +ATOM 12225 OH2 TIP3X3246 -2.649 27.988 6.169 1.00 0.00 W1 O +ATOM 12226 H1 TIP3X3246 -2.924 28.478 6.944 1.00 0.00 W1 H +ATOM 12227 H2 TIP3X3246 -3.174 27.188 6.192 1.00 0.00 W1 H +ATOM 12228 OH2 TIP3X3247 -4.132 26.431 3.212 1.00 0.00 W1 O +ATOM 12229 H1 TIP3X3247 -3.970 26.203 2.297 1.00 0.00 W1 H +ATOM 12230 H2 TIP3X3247 -5.061 26.660 3.242 1.00 0.00 W1 H +ATOM 12231 OH2 TIP3X3248 -0.285 26.963 7.997 1.00 0.00 W1 O +ATOM 12232 H1 TIP3X3248 -0.837 27.046 7.219 1.00 0.00 W1 H +ATOM 12233 H2 TIP3X3248 -0.895 26.747 8.702 1.00 0.00 W1 H +ATOM 12234 OH2 TIP3X3249 -13.648 28.227 10.448 1.00 0.00 W1 O +ATOM 12235 H1 TIP3X3249 -13.242 28.431 11.291 1.00 0.00 W1 H +ATOM 12236 H2 TIP3X3249 -14.219 27.482 10.630 1.00 0.00 W1 H +ATOM 12237 OH2 TIP3X3250 -6.273 29.852 9.674 1.00 0.00 W1 O +ATOM 12238 H1 TIP3X3250 -5.972 28.952 9.796 1.00 0.00 W1 H +ATOM 12239 H2 TIP3X3250 -5.648 30.233 9.057 1.00 0.00 W1 H +ATOM 12240 OH2 TIP3X3251 -2.841 29.809 9.554 1.00 0.00 W1 O +ATOM 12241 H1 TIP3X3251 -3.276 30.632 9.334 1.00 0.00 W1 H +ATOM 12242 H2 TIP3X3251 -1.912 30.035 9.603 1.00 0.00 W1 H +ATOM 12243 OH2 TIP3X3252 -10.392 29.384 8.683 1.00 0.00 W1 O +ATOM 12244 H1 TIP3X3252 -10.037 30.233 8.420 1.00 0.00 W1 H +ATOM 12245 H2 TIP3X3252 -11.327 29.443 8.487 1.00 0.00 W1 H +ATOM 12246 OH2 TIP3X3253 -5.551 21.276 7.585 1.00 0.00 W1 O +ATOM 12247 H1 TIP3X3253 -5.629 20.466 7.080 1.00 0.00 W1 H +ATOM 12248 H2 TIP3X3253 -4.608 21.415 7.672 1.00 0.00 W1 H +ATOM 12249 OH2 TIP3X3254 -9.528 17.374 9.947 1.00 0.00 W1 O +ATOM 12250 H1 TIP3X3254 -9.270 16.636 10.500 1.00 0.00 W1 H +ATOM 12251 H2 TIP3X3254 -10.205 17.017 9.371 1.00 0.00 W1 H +ATOM 12252 OH2 TIP3X3255 -1.284 18.378 6.370 1.00 0.00 W1 O +ATOM 12253 H1 TIP3X3255 -1.592 18.716 7.211 1.00 0.00 W1 H +ATOM 12254 H2 TIP3X3255 -1.217 17.433 6.501 1.00 0.00 W1 H +ATOM 12255 OH2 TIP3X3256 -2.687 19.573 8.324 1.00 0.00 W1 O +ATOM 12256 H1 TIP3X3256 -2.112 19.345 9.054 1.00 0.00 W1 H +ATOM 12257 H2 TIP3X3256 -3.562 19.319 8.618 1.00 0.00 W1 H +ATOM 12258 OH2 TIP3X3257 -9.641 20.698 9.695 1.00 0.00 W1 O +ATOM 12259 H1 TIP3X3257 -9.137 19.996 10.107 1.00 0.00 W1 H +ATOM 12260 H2 TIP3X3257 -8.983 21.340 9.428 1.00 0.00 W1 H +ATOM 12261 OH2 TIP3X3258 -2.164 21.746 6.592 1.00 0.00 W1 O +ATOM 12262 H1 TIP3X3258 -2.123 20.847 6.916 1.00 0.00 W1 H +ATOM 12263 H2 TIP3X3258 -2.282 22.279 7.379 1.00 0.00 W1 H +ATOM 12264 OH2 TIP3X3259 -3.479 18.390 4.461 1.00 0.00 W1 O +ATOM 12265 H1 TIP3X3259 -2.654 18.574 4.910 1.00 0.00 W1 H +ATOM 12266 H2 TIP3X3259 -3.403 18.845 3.622 1.00 0.00 W1 H +ATOM 12267 OH2 TIP3X3260 -7.297 24.361 10.532 1.00 0.00 W1 O +ATOM 12268 H1 TIP3X3260 -6.420 24.383 10.149 1.00 0.00 W1 H +ATOM 12269 H2 TIP3X3260 -7.562 25.280 10.578 1.00 0.00 W1 H +ATOM 12270 OH2 TIP3X3261 -8.146 26.909 10.342 1.00 0.00 W1 O +ATOM 12271 H1 TIP3X3261 -8.171 27.136 9.413 1.00 0.00 W1 H +ATOM 12272 H2 TIP3X3261 -9.066 26.855 10.601 1.00 0.00 W1 H +ATOM 12273 OH2 TIP3X3262 -13.283 18.791 7.180 1.00 0.00 W1 O +ATOM 12274 H1 TIP3X3262 -13.609 19.670 7.371 1.00 0.00 W1 H +ATOM 12275 H2 TIP3X3262 -13.407 18.688 6.237 1.00 0.00 W1 H +ATOM 12276 OH2 TIP3X3263 -11.127 22.348 7.193 1.00 0.00 W1 O +ATOM 12277 H1 TIP3X3263 -11.810 21.898 6.696 1.00 0.00 W1 H +ATOM 12278 H2 TIP3X3263 -10.642 21.645 7.624 1.00 0.00 W1 H +ATOM 12279 OH2 TIP3X3264 -5.072 27.273 9.589 1.00 0.00 W1 O +ATOM 12280 H1 TIP3X3264 -5.314 26.686 8.872 1.00 0.00 W1 H +ATOM 12281 H2 TIP3X3264 -4.122 27.183 9.662 1.00 0.00 W1 H +ATOM 12282 OH2 TIP3X3265 -0.774 30.907 6.370 1.00 0.00 W1 O +ATOM 12283 H1 TIP3X3265 -0.779 30.439 7.205 1.00 0.00 W1 H +ATOM 12284 H2 TIP3X3265 -1.654 30.778 6.017 1.00 0.00 W1 H +ATOM 12285 OH2 TIP3X3266 -8.902 27.244 7.392 1.00 0.00 W1 O +ATOM 12286 H1 TIP3X3266 -9.473 26.524 7.661 1.00 0.00 W1 H +ATOM 12287 H2 TIP3X3266 -9.362 28.034 7.674 1.00 0.00 W1 H +ATOM 12288 OH2 TIP3X3267 -6.680 17.695 11.962 1.00 0.00 W1 O +ATOM 12289 H1 TIP3X3267 -7.423 18.175 12.329 1.00 0.00 W1 H +ATOM 12290 H2 TIP3X3267 -7.061 16.883 11.628 1.00 0.00 W1 H +ATOM 12291 OH2 TIP3X3268 -0.435 19.322 9.953 1.00 0.00 W1 O +ATOM 12292 H1 TIP3X3268 0.084 19.991 9.506 1.00 0.00 W1 H +ATOM 12293 H2 TIP3X3268 0.007 19.198 10.793 1.00 0.00 W1 H +ATOM 12294 OH2 TIP3X3269 -9.111 21.910 14.100 1.00 0.00 W1 O +ATOM 12295 H1 TIP3X3269 -8.247 22.309 13.998 1.00 0.00 W1 H +ATOM 12296 H2 TIP3X3269 -8.959 20.973 13.977 1.00 0.00 W1 H +ATOM 12297 OH2 TIP3X3270 -5.945 26.820 6.839 1.00 0.00 W1 O +ATOM 12298 H1 TIP3X3270 -5.851 25.957 6.436 1.00 0.00 W1 H +ATOM 12299 H2 TIP3X3270 -6.878 27.020 6.763 1.00 0.00 W1 H +ATOM 12300 OH2 TIP3X3271 -7.333 25.104 4.370 1.00 0.00 W1 O +ATOM 12301 H1 TIP3X3271 -7.897 24.490 4.840 1.00 0.00 W1 H +ATOM 12302 H2 TIP3X3271 -7.807 25.935 4.398 1.00 0.00 W1 H +ATOM 12303 OH2 TIP3X3272 -14.795 25.617 10.827 1.00 0.00 W1 O +ATOM 12304 H1 TIP3X3272 -15.330 25.016 10.309 1.00 0.00 W1 H +ATOM 12305 H2 TIP3X3272 -15.266 25.704 11.656 1.00 0.00 W1 H +ATOM 12306 OH2 TIP3X3273 -3.499 24.638 5.195 1.00 0.00 W1 O +ATOM 12307 H1 TIP3X3273 -3.555 23.723 4.918 1.00 0.00 W1 H +ATOM 12308 H2 TIP3X3273 -3.671 25.141 4.399 1.00 0.00 W1 H +ATOM 12309 OH2 TIP3X3274 -3.202 25.152 12.219 1.00 0.00 W1 O +ATOM 12310 H1 TIP3X3274 -4.104 25.236 12.527 1.00 0.00 W1 H +ATOM 12311 H2 TIP3X3274 -3.033 24.210 12.223 1.00 0.00 W1 H +ATOM 12312 OH2 TIP3X3275 -0.835 23.112 10.025 1.00 0.00 W1 O +ATOM 12313 H1 TIP3X3275 -0.173 22.431 9.906 1.00 0.00 W1 H +ATOM 12314 H2 TIP3X3275 -1.551 22.672 10.484 1.00 0.00 W1 H +ATOM 12315 OH2 TIP3X3276 -11.691 22.799 15.169 1.00 0.00 W1 O +ATOM 12316 H1 TIP3X3276 -12.220 22.565 14.407 1.00 0.00 W1 H +ATOM 12317 H2 TIP3X3276 -10.795 22.846 14.835 1.00 0.00 W1 H +ATOM 12318 OH2 TIP3X3277 -10.780 26.005 10.731 1.00 0.00 W1 O +ATOM 12319 H1 TIP3X3277 -10.825 25.450 11.509 1.00 0.00 W1 H +ATOM 12320 H2 TIP3X3277 -11.413 26.703 10.897 1.00 0.00 W1 H +ATOM 12321 OH2 TIP3X3278 -2.109 27.135 10.480 1.00 0.00 W1 O +ATOM 12322 H1 TIP3X3278 -1.685 27.903 10.864 1.00 0.00 W1 H +ATOM 12323 H2 TIP3X3278 -2.413 26.627 11.233 1.00 0.00 W1 H +ATOM 12324 OH2 TIP3X3279 -4.021 29.110 12.305 1.00 0.00 W1 O +ATOM 12325 H1 TIP3X3279 -4.728 28.481 12.163 1.00 0.00 W1 H +ATOM 12326 H2 TIP3X3279 -3.692 29.305 11.428 1.00 0.00 W1 H +ATOM 12327 OH2 TIP3X3280 -3.770 27.646 14.702 1.00 0.00 W1 O +ATOM 12328 H1 TIP3X3280 -4.404 27.040 14.318 1.00 0.00 W1 H +ATOM 12329 H2 TIP3X3280 -3.657 28.327 14.038 1.00 0.00 W1 H +ATOM 12330 OH2 TIP3X3281 -0.160 29.555 8.768 1.00 0.00 W1 O +ATOM 12331 H1 TIP3X3281 0.518 29.396 9.425 1.00 0.00 W1 H +ATOM 12332 H2 TIP3X3281 -0.394 28.683 8.449 1.00 0.00 W1 H +ATOM 12333 OH2 TIP3X3282 -9.603 16.026 7.161 1.00 0.00 W1 O +ATOM 12334 H1 TIP3X3282 -9.895 16.935 7.100 1.00 0.00 W1 H +ATOM 12335 H2 TIP3X3282 -8.772 16.008 6.688 1.00 0.00 W1 H +ATOM 12336 OH2 TIP3X3283 -7.479 25.972 0.815 1.00 0.00 W1 O +ATOM 12337 H1 TIP3X3283 -8.175 25.350 1.030 1.00 0.00 W1 H +ATOM 12338 H2 TIP3X3283 -7.497 26.608 1.530 1.00 0.00 W1 H +ATOM 12339 OH2 TIP3X3284 -0.099 24.736 0.252 1.00 0.00 W1 O +ATOM 12340 H1 TIP3X3284 -0.362 23.986 -0.282 1.00 0.00 W1 H +ATOM 12341 H2 TIP3X3284 -0.354 25.500 -0.266 1.00 0.00 W1 H +ATOM 12342 OH2 TIP3X3285 -14.151 28.432 -0.031 1.00 0.00 W1 O +ATOM 12343 H1 TIP3X3285 -13.706 27.883 0.614 1.00 0.00 W1 H +ATOM 12344 H2 TIP3X3285 -15.048 28.098 -0.053 1.00 0.00 W1 H +ATOM 12345 OH2 TIP3X3286 -2.058 30.561 1.227 1.00 0.00 W1 O +ATOM 12346 H1 TIP3X3286 -1.173 30.233 1.069 1.00 0.00 W1 H +ATOM 12347 H2 TIP3X3286 -2.288 31.029 0.425 1.00 0.00 W1 H +ATOM 12348 OH2 TIP3X3287 -0.665 26.223 13.305 1.00 0.00 W1 O +ATOM 12349 H1 TIP3X3287 -0.775 27.172 13.364 1.00 0.00 W1 H +ATOM 12350 H2 TIP3X3287 -1.558 25.878 13.294 1.00 0.00 W1 H +ATOM 12351 OH2 TIP3X3288 -13.979 29.049 2.923 1.00 0.00 W1 O +ATOM 12352 H1 TIP3X3288 -14.047 29.885 3.384 1.00 0.00 W1 H +ATOM 12353 H2 TIP3X3288 -14.875 28.711 2.907 1.00 0.00 W1 H +ATOM 12354 OH2 TIP3X3289 -1.399 27.542 0.568 1.00 0.00 W1 O +ATOM 12355 H1 TIP3X3289 -1.368 27.462 1.521 1.00 0.00 W1 H +ATOM 12356 H2 TIP3X3289 -2.232 27.979 0.391 1.00 0.00 W1 H +ATOM 12357 OH2 TIP3X3290 -5.029 15.837 13.452 1.00 0.00 W1 O +ATOM 12358 H1 TIP3X3290 -5.335 16.585 12.939 1.00 0.00 W1 H +ATOM 12359 H2 TIP3X3290 -4.975 15.120 12.820 1.00 0.00 W1 H +ATOM 12360 OH2 TIP3X3291 -10.815 29.753 11.481 1.00 0.00 W1 O +ATOM 12361 H1 TIP3X3291 -9.967 29.991 11.854 1.00 0.00 W1 H +ATOM 12362 H2 TIP3X3291 -10.603 29.373 10.628 1.00 0.00 W1 H +ATOM 12363 OH2 TIP3X3292 -12.349 17.772 14.831 1.00 0.00 W1 O +ATOM 12364 H1 TIP3X3292 -13.226 17.861 15.205 1.00 0.00 W1 H +ATOM 12365 H2 TIP3X3292 -12.286 18.484 14.195 1.00 0.00 W1 H +ATOM 12366 OH2 TIP3X3293 -6.151 19.719 0.562 1.00 0.00 W1 O +ATOM 12367 H1 TIP3X3293 -6.317 20.016 -0.333 1.00 0.00 W1 H +ATOM 12368 H2 TIP3X3293 -7.022 19.595 0.939 1.00 0.00 W1 H +ATOM 12369 OH2 TIP3X3294 -0.754 27.479 3.610 1.00 0.00 W1 O +ATOM 12370 H1 TIP3X3294 -0.181 26.742 3.823 1.00 0.00 W1 H +ATOM 12371 H2 TIP3X3294 -1.085 27.778 4.457 1.00 0.00 W1 H +ATOM 12372 OH2 TIP3X3295 -5.493 16.515 0.539 1.00 0.00 W1 O +ATOM 12373 H1 TIP3X3295 -4.761 17.131 0.563 1.00 0.00 W1 H +ATOM 12374 H2 TIP3X3295 -5.252 15.883 -0.138 1.00 0.00 W1 H +ATOM 12375 OH2 TIP3X3296 -0.961 16.609 10.804 1.00 0.00 W1 O +ATOM 12376 H1 TIP3X3296 -0.469 15.979 11.331 1.00 0.00 W1 H +ATOM 12377 H2 TIP3X3296 -0.360 16.851 10.098 1.00 0.00 W1 H +ATOM 12378 OH2 TIP3X3297 -13.454 25.829 6.882 1.00 0.00 W1 O +ATOM 12379 H1 TIP3X3297 -14.122 26.153 7.486 1.00 0.00 W1 H +ATOM 12380 H2 TIP3X3297 -12.661 25.760 7.414 1.00 0.00 W1 H +ATOM 12381 OH2 TIP3X3298 -8.457 27.248 13.992 1.00 0.00 W1 O +ATOM 12382 H1 TIP3X3298 -8.233 26.870 14.843 1.00 0.00 W1 H +ATOM 12383 H2 TIP3X3298 -9.063 26.619 13.602 1.00 0.00 W1 H +ATOM 12384 OH2 TIP3X3299 -4.977 18.553 9.405 1.00 0.00 W1 O +ATOM 12385 H1 TIP3X3299 -4.918 18.371 10.343 1.00 0.00 W1 H +ATOM 12386 H2 TIP3X3299 -5.916 18.640 9.236 1.00 0.00 W1 H +ATOM 12387 OH2 TIP3X3300 -8.786 19.210 13.584 1.00 0.00 W1 O +ATOM 12388 H1 TIP3X3300 -9.653 19.140 13.184 1.00 0.00 W1 H +ATOM 12389 H2 TIP3X3300 -8.841 18.669 14.372 1.00 0.00 W1 H +ATOM 12390 OH2 TIP3X3301 -1.300 21.930 15.337 1.00 0.00 W1 O +ATOM 12391 H1 TIP3X3301 -0.505 21.397 15.320 1.00 0.00 W1 H +ATOM 12392 H2 TIP3X3301 -1.594 21.895 16.247 1.00 0.00 W1 H +ATOM 12393 OH2 TIP3X3302 -7.020 16.255 6.337 1.00 0.00 W1 O +ATOM 12394 H1 TIP3X3302 -6.538 16.769 5.689 1.00 0.00 W1 H +ATOM 12395 H2 TIP3X3302 -6.676 16.548 7.181 1.00 0.00 W1 H +ATOM 12396 OH2 TIP3X3303 -12.550 20.846 1.490 1.00 0.00 W1 O +ATOM 12397 H1 TIP3X3303 -12.127 21.492 0.924 1.00 0.00 W1 H +ATOM 12398 H2 TIP3X3303 -11.838 20.271 1.771 1.00 0.00 W1 H +ATOM 12399 OH2 TIP3X3304 -12.025 21.503 10.801 1.00 0.00 W1 O +ATOM 12400 H1 TIP3X3304 -12.110 22.294 11.333 1.00 0.00 W1 H +ATOM 12401 H2 TIP3X3304 -11.110 21.499 10.520 1.00 0.00 W1 H +ATOM 12402 OH2 TIP3X3305 -12.843 22.221 3.986 1.00 0.00 W1 O +ATOM 12403 H1 TIP3X3305 -12.780 21.932 3.076 1.00 0.00 W1 H +ATOM 12404 H2 TIP3X3305 -12.067 22.766 4.119 1.00 0.00 W1 H +ATOM 12405 OH2 TIP3X3306 -3.822 18.791 1.746 1.00 0.00 W1 O +ATOM 12406 H1 TIP3X3306 -4.530 19.279 1.326 1.00 0.00 W1 H +ATOM 12407 H2 TIP3X3306 -3.097 18.835 1.123 1.00 0.00 W1 H +ATOM 12408 OH2 TIP3X3307 -15.272 19.677 12.834 1.00 0.00 W1 O +ATOM 12409 H1 TIP3X3307 -16.176 19.971 12.945 1.00 0.00 W1 H +ATOM 12410 H2 TIP3X3307 -15.131 19.058 13.551 1.00 0.00 W1 H +ATOM 12411 OH2 TIP3X3308 -2.607 20.143 13.704 1.00 0.00 W1 O +ATOM 12412 H1 TIP3X3308 -2.295 20.721 14.400 1.00 0.00 W1 H +ATOM 12413 H2 TIP3X3308 -3.551 20.079 13.849 1.00 0.00 W1 H +ATOM 12414 OH2 TIP3X3309 -5.564 20.148 13.651 1.00 0.00 W1 O +ATOM 12415 H1 TIP3X3309 -5.923 20.717 12.970 1.00 0.00 W1 H +ATOM 12416 H2 TIP3X3309 -5.901 19.278 13.440 1.00 0.00 W1 H +ATOM 12417 OH2 TIP3X3310 -7.361 20.618 3.517 1.00 0.00 W1 O +ATOM 12418 H1 TIP3X3310 -7.272 21.197 2.760 1.00 0.00 W1 H +ATOM 12419 H2 TIP3X3310 -8.130 20.083 3.320 1.00 0.00 W1 H +ATOM 12420 OH2 TIP3X3311 -9.058 19.949 1.204 1.00 0.00 W1 O +ATOM 12421 H1 TIP3X3311 -9.495 20.142 0.375 1.00 0.00 W1 H +ATOM 12422 H2 TIP3X3311 -9.465 19.138 1.508 1.00 0.00 W1 H +ATOM 12423 OH2 TIP3X3312 -8.347 17.011 14.993 1.00 0.00 W1 O +ATOM 12424 H1 TIP3X3312 -8.814 16.624 15.734 1.00 0.00 W1 H +ATOM 12425 H2 TIP3X3312 -7.433 17.044 15.276 1.00 0.00 W1 H +ATOM 12426 OH2 TIP3X3313 -2.784 22.356 11.675 1.00 0.00 W1 O +ATOM 12427 H1 TIP3X3313 -2.765 21.706 12.378 1.00 0.00 W1 H +ATOM 12428 H2 TIP3X3313 -3.619 22.204 11.231 1.00 0.00 W1 H +ATOM 12429 OH2 TIP3X3314 -14.709 19.456 0.144 1.00 0.00 W1 O +ATOM 12430 H1 TIP3X3314 -15.466 19.264 0.698 1.00 0.00 W1 H +ATOM 12431 H2 TIP3X3314 -14.175 20.055 0.667 1.00 0.00 W1 H +ATOM 12432 OH2 TIP3X3315 -14.791 30.950 0.631 1.00 0.00 W1 O +ATOM 12433 H1 TIP3X3315 -14.374 30.202 1.060 1.00 0.00 W1 H +ATOM 12434 H2 TIP3X3315 -14.778 31.643 1.291 1.00 0.00 W1 H +ATOM 12435 OH2 TIP3X3316 -6.043 19.110 5.624 1.00 0.00 W1 O +ATOM 12436 H1 TIP3X3316 -6.380 19.460 4.800 1.00 0.00 W1 H +ATOM 12437 H2 TIP3X3316 -5.146 18.842 5.423 1.00 0.00 W1 H +ATOM 12438 OH2 TIP3X3317 -10.587 18.420 7.368 1.00 0.00 W1 O +ATOM 12439 H1 TIP3X3317 -11.530 18.373 7.209 1.00 0.00 W1 H +ATOM 12440 H2 TIP3X3317 -10.448 19.294 7.732 1.00 0.00 W1 H +ATOM 12441 OH2 TIP3X3318 -15.225 19.546 4.162 1.00 0.00 W1 O +ATOM 12442 H1 TIP3X3318 -15.499 19.422 5.070 1.00 0.00 W1 H +ATOM 12443 H2 TIP3X3318 -15.420 20.465 3.976 1.00 0.00 W1 H +ATOM 12444 OH2 TIP3X3319 -11.225 18.873 12.222 1.00 0.00 W1 O +ATOM 12445 H1 TIP3X3319 -11.203 18.067 11.706 1.00 0.00 W1 H +ATOM 12446 H2 TIP3X3319 -11.619 19.521 11.638 1.00 0.00 W1 H +ATOM 12447 OH2 TIP3X3320 -10.642 25.409 8.027 1.00 0.00 W1 O +ATOM 12448 H1 TIP3X3320 -10.713 24.473 7.839 1.00 0.00 W1 H +ATOM 12449 H2 TIP3X3320 -10.637 25.462 8.983 1.00 0.00 W1 H +ATOM 12450 OH2 TIP3X3321 -6.453 22.428 12.589 1.00 0.00 W1 O +ATOM 12451 H1 TIP3X3321 -6.041 23.259 12.826 1.00 0.00 W1 H +ATOM 12452 H2 TIP3X3321 -7.002 22.638 11.835 1.00 0.00 W1 H +ATOM 12453 OH2 TIP3X3322 -0.657 17.794 1.914 1.00 0.00 W1 O +ATOM 12454 H1 TIP3X3322 -0.223 18.021 2.736 1.00 0.00 W1 H +ATOM 12455 H2 TIP3X3322 -1.177 17.019 2.123 1.00 0.00 W1 H +ATOM 12456 OH2 TIP3X3323 -9.503 23.754 1.092 1.00 0.00 W1 O +ATOM 12457 H1 TIP3X3323 -9.792 23.632 1.996 1.00 0.00 W1 H +ATOM 12458 H2 TIP3X3323 -8.814 23.101 0.970 1.00 0.00 W1 H +ATOM 12459 OH2 TIP3X3324 -2.799 22.270 2.160 1.00 0.00 W1 O +ATOM 12460 H1 TIP3X3324 -3.664 22.071 2.519 1.00 0.00 W1 H +ATOM 12461 H2 TIP3X3324 -2.242 22.391 2.929 1.00 0.00 W1 H +ATOM 12462 OH2 TIP3X3325 -7.966 22.524 8.630 1.00 0.00 W1 O +ATOM 12463 H1 TIP3X3325 -7.869 23.321 9.152 1.00 0.00 W1 H +ATOM 12464 H2 TIP3X3325 -7.092 22.135 8.622 1.00 0.00 W1 H +ATOM 12465 OH2 TIP3X3326 -8.221 22.906 5.546 1.00 0.00 W1 O +ATOM 12466 H1 TIP3X3326 -7.600 22.310 5.128 1.00 0.00 W1 H +ATOM 12467 H2 TIP3X3326 -8.196 22.669 6.473 1.00 0.00 W1 H +ATOM 12468 OH2 TIP3X3327 -5.326 24.522 14.482 1.00 0.00 W1 O +ATOM 12469 H1 TIP3X3327 -6.004 24.806 15.095 1.00 0.00 W1 H +ATOM 12470 H2 TIP3X3327 -4.528 24.481 15.009 1.00 0.00 W1 H +ATOM 12471 OH2 TIP3X3328 -12.817 23.937 12.178 1.00 0.00 W1 O +ATOM 12472 H1 TIP3X3328 -12.300 24.343 12.874 1.00 0.00 W1 H +ATOM 12473 H2 TIP3X3328 -13.199 24.674 11.703 1.00 0.00 W1 H +ATOM 12474 OH2 TIP3X3329 -13.910 21.899 13.800 1.00 0.00 W1 O +ATOM 12475 H1 TIP3X3329 -14.114 21.060 13.387 1.00 0.00 W1 H +ATOM 12476 H2 TIP3X3329 -14.034 22.545 13.104 1.00 0.00 W1 H +ATOM 12477 OH2 TIP3X3330 -14.018 22.772 6.623 1.00 0.00 W1 O +ATOM 12478 H1 TIP3X3330 -13.661 23.645 6.453 1.00 0.00 W1 H +ATOM 12479 H2 TIP3X3330 -14.120 22.382 5.755 1.00 0.00 W1 H +ATOM 12480 OH2 TIP3X3331 -3.259 25.037 0.810 1.00 0.00 W1 O +ATOM 12481 H1 TIP3X3331 -2.553 25.536 0.398 1.00 0.00 W1 H +ATOM 12482 H2 TIP3X3331 -2.810 24.407 1.373 1.00 0.00 W1 H +ATOM 12483 OH2 TIP3X3332 -0.662 22.384 4.172 1.00 0.00 W1 O +ATOM 12484 H1 TIP3X3332 -0.950 22.557 5.069 1.00 0.00 W1 H +ATOM 12485 H2 TIP3X3332 -0.149 23.156 3.932 1.00 0.00 W1 H +ATOM 12486 OH2 TIP3X3333 -14.165 21.501 8.894 1.00 0.00 W1 O +ATOM 12487 H1 TIP3X3333 -14.070 22.179 8.226 1.00 0.00 W1 H +ATOM 12488 H2 TIP3X3333 -13.506 21.720 9.553 1.00 0.00 W1 H +ATOM 12489 OH2 TIP3X3334 -11.378 30.008 2.158 1.00 0.00 W1 O +ATOM 12490 H1 TIP3X3334 -11.607 30.368 1.301 1.00 0.00 W1 H +ATOM 12491 H2 TIP3X3334 -11.791 29.145 2.174 1.00 0.00 W1 H +ATOM 12492 OH2 TIP3X3335 -12.603 25.241 0.656 1.00 0.00 W1 O +ATOM 12493 H1 TIP3X3335 -13.418 24.952 0.248 1.00 0.00 W1 H +ATOM 12494 H2 TIP3X3335 -12.071 24.448 0.718 1.00 0.00 W1 H +ATOM 12495 OH2 TIP3X3336 -11.185 26.081 13.731 1.00 0.00 W1 O +ATOM 12496 H1 TIP3X3336 -11.758 26.683 13.257 1.00 0.00 W1 H +ATOM 12497 H2 TIP3X3336 -11.659 25.885 14.539 1.00 0.00 W1 H +ATOM 12498 OH2 TIP3X3337 -8.109 30.824 11.422 1.00 0.00 W1 O +ATOM 12499 H1 TIP3X3337 -7.791 30.530 12.275 1.00 0.00 W1 H +ATOM 12500 H2 TIP3X3337 -7.676 30.246 10.793 1.00 0.00 W1 H +ATOM 12501 OH2 TIP3X3338 -3.403 31.065 5.555 1.00 0.00 W1 O +ATOM 12502 H1 TIP3X3338 -3.815 30.374 5.037 1.00 0.00 W1 H +ATOM 12503 H2 TIP3X3338 -3.598 31.872 5.079 1.00 0.00 W1 H +ATOM 12504 OH2 TIP3X3339 -6.825 27.748 2.807 1.00 0.00 W1 O +ATOM 12505 H1 TIP3X3339 -6.566 28.533 2.325 1.00 0.00 W1 H +ATOM 12506 H2 TIP3X3339 -7.394 28.071 3.505 1.00 0.00 W1 H +ATOM 12507 OH2 TIP3X3340 -6.808 22.902 1.878 1.00 0.00 W1 O +ATOM 12508 H1 TIP3X3340 -5.984 22.975 1.396 1.00 0.00 W1 H +ATOM 12509 H2 TIP3X3340 -6.800 23.646 2.480 1.00 0.00 W1 H +ATOM 12510 OH2 TIP3X3341 -3.406 17.626 11.670 1.00 0.00 W1 O +ATOM 12511 H1 TIP3X3341 -2.601 17.395 11.206 1.00 0.00 W1 H +ATOM 12512 H2 TIP3X3341 -3.116 18.179 12.395 1.00 0.00 W1 H +ATOM 12513 OH2 TIP3X3342 -15.441 24.727 3.076 1.00 0.00 W1 O +ATOM 12514 H1 TIP3X3342 -15.595 24.819 2.136 1.00 0.00 W1 H +ATOM 12515 H2 TIP3X3342 -14.488 24.727 3.165 1.00 0.00 W1 H +ATOM 12516 OH2 TIP3X3343 -4.679 24.315 9.672 1.00 0.00 W1 O +ATOM 12517 H1 TIP3X3343 -4.134 24.977 10.098 1.00 0.00 W1 H +ATOM 12518 H2 TIP3X3343 -4.220 24.115 8.856 1.00 0.00 W1 H +ATOM 12519 OH2 TIP3X3344 -5.857 29.289 0.749 1.00 0.00 W1 O +ATOM 12520 H1 TIP3X3344 -5.032 29.324 1.234 1.00 0.00 W1 H +ATOM 12521 H2 TIP3X3344 -5.654 28.776 -0.033 1.00 0.00 W1 H +ATOM 12522 OH2 TIP3X3345 -5.865 27.076 12.400 1.00 0.00 W1 O +ATOM 12523 H1 TIP3X3345 -6.685 27.323 12.826 1.00 0.00 W1 H +ATOM 12524 H2 TIP3X3345 -6.094 26.981 11.476 1.00 0.00 W1 H +ATOM 12525 OH2 TIP3X3346 -9.239 27.301 4.287 1.00 0.00 W1 O +ATOM 12526 H1 TIP3X3346 -9.947 27.448 3.659 1.00 0.00 W1 H +ATOM 12527 H2 TIP3X3346 -9.577 27.646 5.114 1.00 0.00 W1 H +ATOM 12528 OH2 TIP3X3347 -12.675 28.213 12.998 1.00 0.00 W1 O +ATOM 12529 H1 TIP3X3347 -11.941 28.824 12.933 1.00 0.00 W1 H +ATOM 12530 H2 TIP3X3347 -12.987 28.307 13.898 1.00 0.00 W1 H +ATOM 12531 OH2 TIP3X3348 -13.085 29.918 7.100 1.00 0.00 W1 O +ATOM 12532 H1 TIP3X3348 -13.671 29.177 6.946 1.00 0.00 W1 H +ATOM 12533 H2 TIP3X3348 -12.642 30.051 6.261 1.00 0.00 W1 H +ATOM 12534 OH2 TIP3X3349 -4.731 15.931 8.180 1.00 0.00 W1 O +ATOM 12535 H1 TIP3X3349 -4.399 15.856 7.286 1.00 0.00 W1 H +ATOM 12536 H2 TIP3X3349 -4.776 16.874 8.341 1.00 0.00 W1 H +ATOM 12537 OH2 TIP3X3350 -7.493 18.060 8.415 1.00 0.00 W1 O +ATOM 12538 H1 TIP3X3350 -7.855 18.549 7.676 1.00 0.00 W1 H +ATOM 12539 H2 TIP3X3350 -8.225 17.971 9.025 1.00 0.00 W1 H +ATOM 12540 OH2 TIP3X3351 -6.023 15.888 3.386 1.00 0.00 W1 O +ATOM 12541 H1 TIP3X3351 -5.567 15.152 3.795 1.00 0.00 W1 H +ATOM 12542 H2 TIP3X3351 -5.615 15.975 2.524 1.00 0.00 W1 H +ATOM 12543 OH2 TIP3X3352 -11.383 30.467 14.841 1.00 0.00 W1 O +ATOM 12544 H1 TIP3X3352 -11.634 31.224 14.311 1.00 0.00 W1 H +ATOM 12545 H2 TIP3X3352 -10.472 30.298 14.602 1.00 0.00 W1 H +ATOM 12546 OH2 TIP3X3353 -6.377 29.161 5.141 1.00 0.00 W1 O +ATOM 12547 H1 TIP3X3353 -5.716 28.519 5.401 1.00 0.00 W1 H +ATOM 12548 H2 TIP3X3353 -6.390 29.796 5.858 1.00 0.00 W1 H +ATOM 12549 OH2 TIP3X3354 -8.637 30.064 14.051 1.00 0.00 W1 O +ATOM 12550 H1 TIP3X3354 -8.420 29.171 14.321 1.00 0.00 W1 H +ATOM 12551 H2 TIP3X3354 -8.030 30.618 14.540 1.00 0.00 W1 H +ATOM 12552 OH2 TIP3X3355 -14.978 16.520 13.551 1.00 0.00 W1 O +ATOM 12553 H1 TIP3X3355 -14.229 16.325 12.987 1.00 0.00 W1 H +ATOM 12554 H2 TIP3X3355 -14.769 16.095 14.383 1.00 0.00 W1 H +ATOM 12555 OH2 TIP3X3356 -3.858 29.247 3.153 1.00 0.00 W1 O +ATOM 12556 H1 TIP3X3356 -3.713 28.307 3.256 1.00 0.00 W1 H +ATOM 12557 H2 TIP3X3356 -3.035 29.580 2.795 1.00 0.00 W1 H +ATOM 12558 OH2 TIP3X3357 -2.190 16.014 14.380 1.00 0.00 W1 O +ATOM 12559 H1 TIP3X3357 -2.804 16.088 13.649 1.00 0.00 W1 H +ATOM 12560 H2 TIP3X3357 -1.421 16.509 14.098 1.00 0.00 W1 H +ATOM 12561 OH2 TIP3X3358 -11.397 30.227 4.866 1.00 0.00 W1 O +ATOM 12562 H1 TIP3X3358 -11.403 30.272 3.910 1.00 0.00 W1 H +ATOM 12563 H2 TIP3X3358 -10.589 30.673 5.122 1.00 0.00 W1 H +ATOM 12564 OH2 TIP3X3359 -0.488 29.165 12.816 1.00 0.00 W1 O +ATOM 12565 H1 TIP3X3359 -1.210 29.716 13.117 1.00 0.00 W1 H +ATOM 12566 H2 TIP3X3359 0.300 29.664 13.030 1.00 0.00 W1 H +ATOM 12567 OH2 TIP3X3360 -12.862 18.487 4.496 1.00 0.00 W1 O +ATOM 12568 H1 TIP3X3360 -13.505 18.876 3.903 1.00 0.00 W1 H +ATOM 12569 H2 TIP3X3360 -12.059 18.984 4.338 1.00 0.00 W1 H +ATOM 12570 OH2 TIP3X3361 -11.433 27.086 2.227 1.00 0.00 W1 O +ATOM 12571 H1 TIP3X3361 -11.472 26.458 1.506 1.00 0.00 W1 H +ATOM 12572 H2 TIP3X3361 -12.153 26.833 2.805 1.00 0.00 W1 H +ATOM 12573 OH2 TIP3X3362 -13.539 26.614 19.866 1.00 0.00 W1 O +ATOM 12574 H1 TIP3X3362 -13.356 26.538 20.803 1.00 0.00 W1 H +ATOM 12575 H2 TIP3X3362 -13.563 27.557 19.702 1.00 0.00 W1 H +ATOM 12576 OH2 TIP3X3363 -2.436 24.105 23.605 1.00 0.00 W1 O +ATOM 12577 H1 TIP3X3363 -2.201 24.370 22.715 1.00 0.00 W1 H +ATOM 12578 H2 TIP3X3363 -1.607 23.842 24.003 1.00 0.00 W1 H +ATOM 12579 OH2 TIP3X3364 -10.452 23.829 19.583 1.00 0.00 W1 O +ATOM 12580 H1 TIP3X3364 -10.422 24.738 19.880 1.00 0.00 W1 H +ATOM 12581 H2 TIP3X3364 -9.945 23.346 20.235 1.00 0.00 W1 H +ATOM 12582 OH2 TIP3X3365 -2.649 27.988 21.727 1.00 0.00 W1 O +ATOM 12583 H1 TIP3X3365 -2.924 28.478 22.502 1.00 0.00 W1 H +ATOM 12584 H2 TIP3X3365 -3.174 27.188 21.750 1.00 0.00 W1 H +ATOM 12585 OH2 TIP3X3366 -4.132 26.431 18.770 1.00 0.00 W1 O +ATOM 12586 H1 TIP3X3366 -3.970 26.203 17.855 1.00 0.00 W1 H +ATOM 12587 H2 TIP3X3366 -5.061 26.660 18.799 1.00 0.00 W1 H +ATOM 12588 OH2 TIP3X3367 -0.285 26.963 23.554 1.00 0.00 W1 O +ATOM 12589 H1 TIP3X3367 -0.837 27.046 22.777 1.00 0.00 W1 H +ATOM 12590 H2 TIP3X3367 -0.895 26.747 24.259 1.00 0.00 W1 H +ATOM 12591 OH2 TIP3X3368 -13.648 28.227 26.005 1.00 0.00 W1 O +ATOM 12592 H1 TIP3X3368 -13.242 28.431 26.848 1.00 0.00 W1 H +ATOM 12593 H2 TIP3X3368 -14.219 27.482 26.188 1.00 0.00 W1 H +ATOM 12594 OH2 TIP3X3369 -6.273 29.852 25.231 1.00 0.00 W1 O +ATOM 12595 H1 TIP3X3369 -5.972 28.952 25.353 1.00 0.00 W1 H +ATOM 12596 H2 TIP3X3369 -5.648 30.233 24.614 1.00 0.00 W1 H +ATOM 12597 OH2 TIP3X3370 -2.841 29.809 25.111 1.00 0.00 W1 O +ATOM 12598 H1 TIP3X3370 -3.276 30.632 24.892 1.00 0.00 W1 H +ATOM 12599 H2 TIP3X3370 -1.912 30.035 25.161 1.00 0.00 W1 H +ATOM 12600 OH2 TIP3X3371 -10.392 29.384 24.241 1.00 0.00 W1 O +ATOM 12601 H1 TIP3X3371 -10.037 30.233 23.977 1.00 0.00 W1 H +ATOM 12602 H2 TIP3X3371 -11.327 29.443 24.045 1.00 0.00 W1 H +ATOM 12603 OH2 TIP3X3372 -5.551 21.276 23.142 1.00 0.00 W1 O +ATOM 12604 H1 TIP3X3372 -5.629 20.466 22.638 1.00 0.00 W1 H +ATOM 12605 H2 TIP3X3372 -4.608 21.415 23.230 1.00 0.00 W1 H +ATOM 12606 OH2 TIP3X3373 -9.528 17.374 25.504 1.00 0.00 W1 O +ATOM 12607 H1 TIP3X3373 -9.270 16.636 26.057 1.00 0.00 W1 H +ATOM 12608 H2 TIP3X3373 -10.205 17.017 24.929 1.00 0.00 W1 H +ATOM 12609 OH2 TIP3X3374 -1.284 18.378 21.927 1.00 0.00 W1 O +ATOM 12610 H1 TIP3X3374 -1.592 18.716 22.768 1.00 0.00 W1 H +ATOM 12611 H2 TIP3X3374 -1.217 17.433 22.059 1.00 0.00 W1 H +ATOM 12612 OH2 TIP3X3375 -2.687 19.573 23.881 1.00 0.00 W1 O +ATOM 12613 H1 TIP3X3375 -2.112 19.345 24.612 1.00 0.00 W1 H +ATOM 12614 H2 TIP3X3375 -3.562 19.319 24.176 1.00 0.00 W1 H +ATOM 12615 OH2 TIP3X3376 -9.641 20.698 25.252 1.00 0.00 W1 O +ATOM 12616 H1 TIP3X3376 -9.137 19.996 25.664 1.00 0.00 W1 H +ATOM 12617 H2 TIP3X3376 -8.983 21.340 24.986 1.00 0.00 W1 H +ATOM 12618 OH2 TIP3X3377 -2.164 21.746 22.150 1.00 0.00 W1 O +ATOM 12619 H1 TIP3X3377 -2.123 20.847 22.474 1.00 0.00 W1 H +ATOM 12620 H2 TIP3X3377 -2.282 22.279 22.936 1.00 0.00 W1 H +ATOM 12621 OH2 TIP3X3378 -3.479 18.390 20.018 1.00 0.00 W1 O +ATOM 12622 H1 TIP3X3378 -2.654 18.574 20.467 1.00 0.00 W1 H +ATOM 12623 H2 TIP3X3378 -3.403 18.845 19.179 1.00 0.00 W1 H +ATOM 12624 OH2 TIP3X3379 -7.297 24.361 26.090 1.00 0.00 W1 O +ATOM 12625 H1 TIP3X3379 -6.420 24.383 25.707 1.00 0.00 W1 H +ATOM 12626 H2 TIP3X3379 -7.562 25.280 26.136 1.00 0.00 W1 H +ATOM 12627 OH2 TIP3X3380 -8.146 26.909 25.900 1.00 0.00 W1 O +ATOM 12628 H1 TIP3X3380 -8.171 27.136 24.970 1.00 0.00 W1 H +ATOM 12629 H2 TIP3X3380 -9.066 26.855 26.158 1.00 0.00 W1 H +ATOM 12630 OH2 TIP3X3381 -13.283 18.791 22.738 1.00 0.00 W1 O +ATOM 12631 H1 TIP3X3381 -13.609 19.670 22.929 1.00 0.00 W1 H +ATOM 12632 H2 TIP3X3381 -13.407 18.688 21.794 1.00 0.00 W1 H +ATOM 12633 OH2 TIP3X3382 -11.127 22.348 22.750 1.00 0.00 W1 O +ATOM 12634 H1 TIP3X3382 -11.810 21.898 22.253 1.00 0.00 W1 H +ATOM 12635 H2 TIP3X3382 -10.642 21.645 23.182 1.00 0.00 W1 H +ATOM 12636 OH2 TIP3X3383 -5.072 27.273 25.147 1.00 0.00 W1 O +ATOM 12637 H1 TIP3X3383 -5.314 26.686 24.430 1.00 0.00 W1 H +ATOM 12638 H2 TIP3X3383 -4.122 27.183 25.219 1.00 0.00 W1 H +ATOM 12639 OH2 TIP3X3384 -0.774 30.907 21.927 1.00 0.00 W1 O +ATOM 12640 H1 TIP3X3384 -0.779 30.439 22.762 1.00 0.00 W1 H +ATOM 12641 H2 TIP3X3384 -1.654 30.778 21.574 1.00 0.00 W1 H +ATOM 12642 OH2 TIP3X3385 -8.902 27.244 22.949 1.00 0.00 W1 O +ATOM 12643 H1 TIP3X3385 -9.473 26.524 23.218 1.00 0.00 W1 H +ATOM 12644 H2 TIP3X3385 -9.362 28.034 23.232 1.00 0.00 W1 H +ATOM 12645 OH2 TIP3X3386 -6.680 17.695 27.520 1.00 0.00 W1 O +ATOM 12646 H1 TIP3X3386 -7.423 18.175 27.887 1.00 0.00 W1 H +ATOM 12647 H2 TIP3X3386 -7.061 16.883 27.185 1.00 0.00 W1 H +ATOM 12648 OH2 TIP3X3387 -11.328 18.400 17.321 1.00 0.00 W1 O +ATOM 12649 H1 TIP3X3387 -11.426 17.738 18.006 1.00 0.00 W1 H +ATOM 12650 H2 TIP3X3387 -11.512 17.932 16.507 1.00 0.00 W1 H +ATOM 12651 OH2 TIP3X3388 -0.435 19.322 25.511 1.00 0.00 W1 O +ATOM 12652 H1 TIP3X3388 0.084 19.991 25.063 1.00 0.00 W1 H +ATOM 12653 H2 TIP3X3388 0.007 19.198 26.351 1.00 0.00 W1 H +ATOM 12654 OH2 TIP3X3389 -14.377 15.675 19.671 1.00 0.00 W1 O +ATOM 12655 H1 TIP3X3389 -13.652 16.296 19.740 1.00 0.00 W1 H +ATOM 12656 H2 TIP3X3389 -14.749 15.642 20.552 1.00 0.00 W1 H +ATOM 12657 OH2 TIP3X3390 -9.111 21.910 29.657 1.00 0.00 W1 O +ATOM 12658 H1 TIP3X3390 -8.247 22.309 29.556 1.00 0.00 W1 H +ATOM 12659 H2 TIP3X3390 -8.959 20.973 29.534 1.00 0.00 W1 H +ATOM 12660 OH2 TIP3X3391 -5.945 26.820 22.397 1.00 0.00 W1 O +ATOM 12661 H1 TIP3X3391 -5.851 25.957 21.993 1.00 0.00 W1 H +ATOM 12662 H2 TIP3X3391 -6.878 27.020 22.321 1.00 0.00 W1 H +ATOM 12663 OH2 TIP3X3392 -7.333 25.104 19.928 1.00 0.00 W1 O +ATOM 12664 H1 TIP3X3392 -7.897 24.490 20.397 1.00 0.00 W1 H +ATOM 12665 H2 TIP3X3392 -7.807 25.935 19.956 1.00 0.00 W1 H +ATOM 12666 OH2 TIP3X3393 -14.795 25.617 26.385 1.00 0.00 W1 O +ATOM 12667 H1 TIP3X3393 -15.330 25.016 25.867 1.00 0.00 W1 H +ATOM 12668 H2 TIP3X3393 -15.266 25.704 27.214 1.00 0.00 W1 H +ATOM 12669 OH2 TIP3X3394 -3.499 24.638 20.752 1.00 0.00 W1 O +ATOM 12670 H1 TIP3X3394 -3.555 23.723 20.476 1.00 0.00 W1 H +ATOM 12671 H2 TIP3X3394 -3.671 25.141 19.956 1.00 0.00 W1 H +ATOM 12672 OH2 TIP3X3395 -3.202 25.152 27.777 1.00 0.00 W1 O +ATOM 12673 H1 TIP3X3395 -4.104 25.236 28.084 1.00 0.00 W1 H +ATOM 12674 H2 TIP3X3395 -3.033 24.210 27.780 1.00 0.00 W1 H +ATOM 12675 OH2 TIP3X3396 -0.835 23.112 25.582 1.00 0.00 W1 O +ATOM 12676 H1 TIP3X3396 -0.173 22.431 25.463 1.00 0.00 W1 H +ATOM 12677 H2 TIP3X3396 -1.551 22.672 26.041 1.00 0.00 W1 H +ATOM 12678 OH2 TIP3X3397 -11.691 22.799 30.727 1.00 0.00 W1 O +ATOM 12679 H1 TIP3X3397 -12.220 22.565 29.964 1.00 0.00 W1 H +ATOM 12680 H2 TIP3X3397 -10.795 22.846 30.392 1.00 0.00 W1 H +ATOM 12681 OH2 TIP3X3398 -10.780 26.005 26.288 1.00 0.00 W1 O +ATOM 12682 H1 TIP3X3398 -10.825 25.450 27.067 1.00 0.00 W1 H +ATOM 12683 H2 TIP3X3398 -11.413 26.703 26.454 1.00 0.00 W1 H +ATOM 12684 OH2 TIP3X3399 -2.109 27.135 26.038 1.00 0.00 W1 O +ATOM 12685 H1 TIP3X3399 -1.685 27.903 26.422 1.00 0.00 W1 H +ATOM 12686 H2 TIP3X3399 -2.413 26.627 26.790 1.00 0.00 W1 H +ATOM 12687 OH2 TIP3X3400 -4.021 29.110 27.863 1.00 0.00 W1 O +ATOM 12688 H1 TIP3X3400 -4.728 28.481 27.720 1.00 0.00 W1 H +ATOM 12689 H2 TIP3X3400 -3.692 29.305 26.985 1.00 0.00 W1 H +ATOM 12690 OH2 TIP3X3401 -3.770 27.646 30.259 1.00 0.00 W1 O +ATOM 12691 H1 TIP3X3401 -4.404 27.040 29.875 1.00 0.00 W1 H +ATOM 12692 H2 TIP3X3401 -3.657 28.327 29.595 1.00 0.00 W1 H +ATOM 12693 OH2 TIP3X3402 -0.160 29.555 24.326 1.00 0.00 W1 O +ATOM 12694 H1 TIP3X3402 0.518 29.396 24.982 1.00 0.00 W1 H +ATOM 12695 H2 TIP3X3402 -0.394 28.683 24.007 1.00 0.00 W1 H +ATOM 12696 OH2 TIP3X3403 -9.603 16.026 22.718 1.00 0.00 W1 O +ATOM 12697 H1 TIP3X3403 -9.895 16.935 22.657 1.00 0.00 W1 H +ATOM 12698 H2 TIP3X3403 -8.772 16.008 22.245 1.00 0.00 W1 H +ATOM 12699 OH2 TIP3X3404 -7.479 25.972 16.373 1.00 0.00 W1 O +ATOM 12700 H1 TIP3X3404 -8.175 25.350 16.587 1.00 0.00 W1 H +ATOM 12701 H2 TIP3X3404 -7.497 26.608 17.088 1.00 0.00 W1 H +ATOM 12702 OH2 TIP3X3405 -0.099 24.736 15.809 1.00 0.00 W1 O +ATOM 12703 H1 TIP3X3405 -0.362 23.986 15.275 1.00 0.00 W1 H +ATOM 12704 H2 TIP3X3405 -0.354 25.500 15.292 1.00 0.00 W1 H +ATOM 12705 OH2 TIP3X3406 -14.151 28.432 15.526 1.00 0.00 W1 O +ATOM 12706 H1 TIP3X3406 -13.706 27.883 16.172 1.00 0.00 W1 H +ATOM 12707 H2 TIP3X3406 -15.048 28.098 15.505 1.00 0.00 W1 H +ATOM 12708 OH2 TIP3X3407 -2.058 30.561 16.785 1.00 0.00 W1 O +ATOM 12709 H1 TIP3X3407 -1.173 30.233 16.626 1.00 0.00 W1 H +ATOM 12710 H2 TIP3X3407 -2.288 31.029 15.982 1.00 0.00 W1 H +ATOM 12711 OH2 TIP3X3408 -0.665 26.223 28.862 1.00 0.00 W1 O +ATOM 12712 H1 TIP3X3408 -0.775 27.172 28.921 1.00 0.00 W1 H +ATOM 12713 H2 TIP3X3408 -1.558 25.878 28.852 1.00 0.00 W1 H +ATOM 12714 OH2 TIP3X3409 -13.979 29.049 18.481 1.00 0.00 W1 O +ATOM 12715 H1 TIP3X3409 -14.047 29.885 18.941 1.00 0.00 W1 H +ATOM 12716 H2 TIP3X3409 -14.875 28.711 18.464 1.00 0.00 W1 H +ATOM 12717 OH2 TIP3X3410 -1.399 27.542 16.125 1.00 0.00 W1 O +ATOM 12718 H1 TIP3X3410 -1.368 27.462 17.079 1.00 0.00 W1 H +ATOM 12719 H2 TIP3X3410 -2.232 27.979 15.948 1.00 0.00 W1 H +ATOM 12720 OH2 TIP3X3411 -5.029 15.837 29.009 1.00 0.00 W1 O +ATOM 12721 H1 TIP3X3411 -5.335 16.585 28.497 1.00 0.00 W1 H +ATOM 12722 H2 TIP3X3411 -4.975 15.120 28.377 1.00 0.00 W1 H +ATOM 12723 OH2 TIP3X3412 -10.815 29.753 27.038 1.00 0.00 W1 O +ATOM 12724 H1 TIP3X3412 -9.967 29.991 27.412 1.00 0.00 W1 H +ATOM 12725 H2 TIP3X3412 -10.603 29.373 26.185 1.00 0.00 W1 H +ATOM 12726 OH2 TIP3X3413 -12.349 17.772 30.389 1.00 0.00 W1 O +ATOM 12727 H1 TIP3X3413 -13.226 17.861 30.763 1.00 0.00 W1 H +ATOM 12728 H2 TIP3X3413 -12.286 18.484 29.752 1.00 0.00 W1 H +ATOM 12729 OH2 TIP3X3414 -6.151 19.719 16.119 1.00 0.00 W1 O +ATOM 12730 H1 TIP3X3414 -6.317 20.016 15.224 1.00 0.00 W1 H +ATOM 12731 H2 TIP3X3414 -7.022 19.595 16.496 1.00 0.00 W1 H +ATOM 12732 OH2 TIP3X3415 -0.754 27.479 19.167 1.00 0.00 W1 O +ATOM 12733 H1 TIP3X3415 -0.181 26.742 19.380 1.00 0.00 W1 H +ATOM 12734 H2 TIP3X3415 -1.085 27.778 20.014 1.00 0.00 W1 H +ATOM 12735 OH2 TIP3X3416 -5.493 16.515 16.096 1.00 0.00 W1 O +ATOM 12736 H1 TIP3X3416 -4.761 17.131 16.121 1.00 0.00 W1 H +ATOM 12737 H2 TIP3X3416 -5.252 15.883 15.420 1.00 0.00 W1 H +ATOM 12738 OH2 TIP3X3417 -0.961 16.609 26.361 1.00 0.00 W1 O +ATOM 12739 H1 TIP3X3417 -0.469 15.979 26.889 1.00 0.00 W1 H +ATOM 12740 H2 TIP3X3417 -0.360 16.851 25.656 1.00 0.00 W1 H +ATOM 12741 OH2 TIP3X3418 -13.454 25.829 22.439 1.00 0.00 W1 O +ATOM 12742 H1 TIP3X3418 -14.122 26.153 23.044 1.00 0.00 W1 H +ATOM 12743 H2 TIP3X3418 -12.661 25.760 22.971 1.00 0.00 W1 H +ATOM 12744 OH2 TIP3X3419 -8.457 27.248 29.549 1.00 0.00 W1 O +ATOM 12745 H1 TIP3X3419 -8.233 26.870 30.400 1.00 0.00 W1 H +ATOM 12746 H2 TIP3X3419 -9.063 26.619 29.159 1.00 0.00 W1 H +ATOM 12747 OH2 TIP3X3420 -4.977 18.553 24.962 1.00 0.00 W1 O +ATOM 12748 H1 TIP3X3420 -4.918 18.371 25.900 1.00 0.00 W1 H +ATOM 12749 H2 TIP3X3420 -5.916 18.640 24.794 1.00 0.00 W1 H +ATOM 12750 OH2 TIP3X3421 -8.786 19.210 29.141 1.00 0.00 W1 O +ATOM 12751 H1 TIP3X3421 -9.653 19.140 28.741 1.00 0.00 W1 H +ATOM 12752 H2 TIP3X3421 -8.841 18.669 29.929 1.00 0.00 W1 H +ATOM 12753 OH2 TIP3X3422 -1.300 21.930 30.894 1.00 0.00 W1 O +ATOM 12754 H1 TIP3X3422 -0.505 21.397 30.878 1.00 0.00 W1 H +ATOM 12755 H2 TIP3X3422 -1.594 21.895 31.804 1.00 0.00 W1 H +ATOM 12756 OH2 TIP3X3423 -13.115 15.797 26.813 1.00 0.00 W1 O +ATOM 12757 H1 TIP3X3423 -13.340 16.250 26.000 1.00 0.00 W1 H +ATOM 12758 H2 TIP3X3423 -12.285 15.360 26.621 1.00 0.00 W1 H +ATOM 12759 OH2 TIP3X3424 -7.020 16.255 21.894 1.00 0.00 W1 O +ATOM 12760 H1 TIP3X3424 -6.538 16.769 21.247 1.00 0.00 W1 H +ATOM 12761 H2 TIP3X3424 -6.676 16.548 22.738 1.00 0.00 W1 H +ATOM 12762 OH2 TIP3X3425 -12.550 20.846 17.047 1.00 0.00 W1 O +ATOM 12763 H1 TIP3X3425 -12.127 21.492 16.481 1.00 0.00 W1 H +ATOM 12764 H2 TIP3X3425 -11.838 20.271 17.328 1.00 0.00 W1 H +ATOM 12765 OH2 TIP3X3426 -12.025 21.503 26.358 1.00 0.00 W1 O +ATOM 12766 H1 TIP3X3426 -12.110 22.294 26.890 1.00 0.00 W1 H +ATOM 12767 H2 TIP3X3426 -11.110 21.499 26.078 1.00 0.00 W1 H +ATOM 12768 OH2 TIP3X3427 -12.843 22.221 19.544 1.00 0.00 W1 O +ATOM 12769 H1 TIP3X3427 -12.780 21.932 18.633 1.00 0.00 W1 H +ATOM 12770 H2 TIP3X3427 -12.067 22.766 19.677 1.00 0.00 W1 H +ATOM 12771 OH2 TIP3X3428 -3.822 18.791 17.304 1.00 0.00 W1 O +ATOM 12772 H1 TIP3X3428 -4.530 19.279 16.884 1.00 0.00 W1 H +ATOM 12773 H2 TIP3X3428 -3.097 18.835 16.680 1.00 0.00 W1 H +ATOM 12774 OH2 TIP3X3429 -15.272 19.677 28.392 1.00 0.00 W1 O +ATOM 12775 H1 TIP3X3429 -16.176 19.971 28.503 1.00 0.00 W1 H +ATOM 12776 H2 TIP3X3429 -15.131 19.058 29.108 1.00 0.00 W1 H +ATOM 12777 OH2 TIP3X3430 -14.128 16.515 24.374 1.00 0.00 W1 O +ATOM 12778 H1 TIP3X3430 -14.021 15.813 23.732 1.00 0.00 W1 H +ATOM 12779 H2 TIP3X3430 -13.993 17.320 23.875 1.00 0.00 W1 H +ATOM 12780 OH2 TIP3X3431 -2.607 20.143 29.262 1.00 0.00 W1 O +ATOM 12781 H1 TIP3X3431 -2.295 20.721 29.958 1.00 0.00 W1 H +ATOM 12782 H2 TIP3X3431 -3.551 20.079 29.407 1.00 0.00 W1 H +ATOM 12783 OH2 TIP3X3432 -5.564 20.148 29.209 1.00 0.00 W1 O +ATOM 12784 H1 TIP3X3432 -5.923 20.717 28.528 1.00 0.00 W1 H +ATOM 12785 H2 TIP3X3432 -5.901 19.278 28.998 1.00 0.00 W1 H +ATOM 12786 OH2 TIP3X3433 -7.361 20.618 19.074 1.00 0.00 W1 O +ATOM 12787 H1 TIP3X3433 -7.272 21.197 18.318 1.00 0.00 W1 H +ATOM 12788 H2 TIP3X3433 -8.130 20.083 18.878 1.00 0.00 W1 H +ATOM 12789 OH2 TIP3X3434 -9.058 19.949 16.762 1.00 0.00 W1 O +ATOM 12790 H1 TIP3X3434 -9.495 20.142 15.932 1.00 0.00 W1 H +ATOM 12791 H2 TIP3X3434 -9.465 19.138 17.065 1.00 0.00 W1 H +ATOM 12792 OH2 TIP3X3435 -8.347 17.011 30.551 1.00 0.00 W1 O +ATOM 12793 H1 TIP3X3435 -8.814 16.624 31.291 1.00 0.00 W1 H +ATOM 12794 H2 TIP3X3435 -7.433 17.044 30.833 1.00 0.00 W1 H +ATOM 12795 OH2 TIP3X3436 -2.784 22.356 27.232 1.00 0.00 W1 O +ATOM 12796 H1 TIP3X3436 -2.765 21.706 27.935 1.00 0.00 W1 H +ATOM 12797 H2 TIP3X3436 -3.619 22.204 26.788 1.00 0.00 W1 H +ATOM 12798 OH2 TIP3X3437 -14.709 19.456 15.702 1.00 0.00 W1 O +ATOM 12799 H1 TIP3X3437 -15.466 19.264 16.256 1.00 0.00 W1 H +ATOM 12800 H2 TIP3X3437 -14.175 20.055 16.224 1.00 0.00 W1 H +ATOM 12801 OH2 TIP3X3438 -14.791 30.950 16.189 1.00 0.00 W1 O +ATOM 12802 H1 TIP3X3438 -14.374 30.202 16.618 1.00 0.00 W1 H +ATOM 12803 H2 TIP3X3438 -14.778 31.643 16.848 1.00 0.00 W1 H +ATOM 12804 OH2 TIP3X3439 -6.043 19.110 21.182 1.00 0.00 W1 O +ATOM 12805 H1 TIP3X3439 -6.380 19.460 20.357 1.00 0.00 W1 H +ATOM 12806 H2 TIP3X3439 -5.146 18.842 20.980 1.00 0.00 W1 H +ATOM 12807 OH2 TIP3X3440 -10.587 18.420 22.926 1.00 0.00 W1 O +ATOM 12808 H1 TIP3X3440 -11.530 18.373 22.767 1.00 0.00 W1 H +ATOM 12809 H2 TIP3X3440 -10.448 19.294 23.289 1.00 0.00 W1 H +ATOM 12810 OH2 TIP3X3441 -15.225 19.546 19.719 1.00 0.00 W1 O +ATOM 12811 H1 TIP3X3441 -15.499 19.422 20.628 1.00 0.00 W1 H +ATOM 12812 H2 TIP3X3441 -15.420 20.465 19.533 1.00 0.00 W1 H +ATOM 12813 OH2 TIP3X3442 -11.225 18.873 27.779 1.00 0.00 W1 O +ATOM 12814 H1 TIP3X3442 -11.203 18.067 27.264 1.00 0.00 W1 H +ATOM 12815 H2 TIP3X3442 -11.619 19.521 27.195 1.00 0.00 W1 H +ATOM 12816 OH2 TIP3X3443 -10.642 25.409 23.584 1.00 0.00 W1 O +ATOM 12817 H1 TIP3X3443 -10.713 24.473 23.397 1.00 0.00 W1 H +ATOM 12818 H2 TIP3X3443 -10.637 25.462 24.540 1.00 0.00 W1 H +ATOM 12819 OH2 TIP3X3444 -6.453 22.428 28.147 1.00 0.00 W1 O +ATOM 12820 H1 TIP3X3444 -6.041 23.259 28.383 1.00 0.00 W1 H +ATOM 12821 H2 TIP3X3444 -7.002 22.638 27.392 1.00 0.00 W1 H +ATOM 12822 OH2 TIP3X3445 -0.657 17.794 17.471 1.00 0.00 W1 O +ATOM 12823 H1 TIP3X3445 -0.223 18.021 18.293 1.00 0.00 W1 H +ATOM 12824 H2 TIP3X3445 -1.177 17.019 17.681 1.00 0.00 W1 H +ATOM 12825 OH2 TIP3X3446 -9.503 23.754 16.649 1.00 0.00 W1 O +ATOM 12826 H1 TIP3X3446 -9.792 23.632 17.554 1.00 0.00 W1 H +ATOM 12827 H2 TIP3X3446 -8.814 23.101 16.528 1.00 0.00 W1 H +ATOM 12828 OH2 TIP3X3447 -2.799 22.270 17.717 1.00 0.00 W1 O +ATOM 12829 H1 TIP3X3447 -3.664 22.071 18.076 1.00 0.00 W1 H +ATOM 12830 H2 TIP3X3447 -2.242 22.391 18.486 1.00 0.00 W1 H +ATOM 12831 OH2 TIP3X3448 -7.966 22.524 24.188 1.00 0.00 W1 O +ATOM 12832 H1 TIP3X3448 -7.869 23.321 24.709 1.00 0.00 W1 H +ATOM 12833 H2 TIP3X3448 -7.092 22.135 24.179 1.00 0.00 W1 H +ATOM 12834 OH2 TIP3X3449 -8.221 22.906 21.104 1.00 0.00 W1 O +ATOM 12835 H1 TIP3X3449 -7.600 22.310 20.686 1.00 0.00 W1 H +ATOM 12836 H2 TIP3X3449 -8.196 22.669 22.030 1.00 0.00 W1 H +ATOM 12837 OH2 TIP3X3450 -5.326 24.522 30.039 1.00 0.00 W1 O +ATOM 12838 H1 TIP3X3450 -6.004 24.806 30.653 1.00 0.00 W1 H +ATOM 12839 H2 TIP3X3450 -4.528 24.481 30.566 1.00 0.00 W1 H +ATOM 12840 OH2 TIP3X3451 -12.817 23.937 27.736 1.00 0.00 W1 O +ATOM 12841 H1 TIP3X3451 -12.300 24.343 28.432 1.00 0.00 W1 H +ATOM 12842 H2 TIP3X3451 -13.199 24.674 27.260 1.00 0.00 W1 H +ATOM 12843 OH2 TIP3X3452 -13.910 21.899 29.357 1.00 0.00 W1 O +ATOM 12844 H1 TIP3X3452 -14.114 21.060 28.945 1.00 0.00 W1 H +ATOM 12845 H2 TIP3X3452 -14.034 22.545 28.662 1.00 0.00 W1 H +ATOM 12846 OH2 TIP3X3453 -14.018 22.772 22.181 1.00 0.00 W1 O +ATOM 12847 H1 TIP3X3453 -13.661 23.645 22.011 1.00 0.00 W1 H +ATOM 12848 H2 TIP3X3453 -14.120 22.382 21.313 1.00 0.00 W1 H +ATOM 12849 OH2 TIP3X3454 -3.259 25.037 16.367 1.00 0.00 W1 O +ATOM 12850 H1 TIP3X3454 -2.553 25.536 15.955 1.00 0.00 W1 H +ATOM 12851 H2 TIP3X3454 -2.810 24.407 16.931 1.00 0.00 W1 H +ATOM 12852 OH2 TIP3X3455 -0.662 22.384 19.730 1.00 0.00 W1 O +ATOM 12853 H1 TIP3X3455 -0.950 22.557 20.626 1.00 0.00 W1 H +ATOM 12854 H2 TIP3X3455 -0.149 23.156 19.489 1.00 0.00 W1 H +ATOM 12855 OH2 TIP3X3456 -14.165 21.501 24.452 1.00 0.00 W1 O +ATOM 12856 H1 TIP3X3456 -14.070 22.179 23.783 1.00 0.00 W1 H +ATOM 12857 H2 TIP3X3456 -13.506 21.720 25.111 1.00 0.00 W1 H +ATOM 12858 OH2 TIP3X3457 -11.378 30.008 17.715 1.00 0.00 W1 O +ATOM 12859 H1 TIP3X3457 -11.607 30.368 16.859 1.00 0.00 W1 H +ATOM 12860 H2 TIP3X3457 -11.791 29.145 17.731 1.00 0.00 W1 H +ATOM 12861 OH2 TIP3X3458 -12.603 25.241 16.214 1.00 0.00 W1 O +ATOM 12862 H1 TIP3X3458 -13.418 24.952 15.805 1.00 0.00 W1 H +ATOM 12863 H2 TIP3X3458 -12.071 24.448 16.275 1.00 0.00 W1 H +ATOM 12864 OH2 TIP3X3459 -11.185 26.081 29.288 1.00 0.00 W1 O +ATOM 12865 H1 TIP3X3459 -11.758 26.683 28.814 1.00 0.00 W1 H +ATOM 12866 H2 TIP3X3459 -11.659 25.885 30.096 1.00 0.00 W1 H +ATOM 12867 OH2 TIP3X3460 -8.109 30.824 26.979 1.00 0.00 W1 O +ATOM 12868 H1 TIP3X3460 -7.791 30.530 27.833 1.00 0.00 W1 H +ATOM 12869 H2 TIP3X3460 -7.676 30.246 26.350 1.00 0.00 W1 H +ATOM 12870 OH2 TIP3X3461 -3.403 31.065 21.113 1.00 0.00 W1 O +ATOM 12871 H1 TIP3X3461 -3.815 30.374 20.594 1.00 0.00 W1 H +ATOM 12872 H2 TIP3X3461 -3.598 31.872 20.636 1.00 0.00 W1 H +ATOM 12873 OH2 TIP3X3462 -6.825 27.748 18.365 1.00 0.00 W1 O +ATOM 12874 H1 TIP3X3462 -6.566 28.533 17.883 1.00 0.00 W1 H +ATOM 12875 H2 TIP3X3462 -7.394 28.071 19.063 1.00 0.00 W1 H +ATOM 12876 OH2 TIP3X3463 -6.808 22.902 17.436 1.00 0.00 W1 O +ATOM 12877 H1 TIP3X3463 -5.984 22.975 16.953 1.00 0.00 W1 H +ATOM 12878 H2 TIP3X3463 -6.800 23.646 18.038 1.00 0.00 W1 H +ATOM 12879 OH2 TIP3X3464 -3.406 17.626 27.227 1.00 0.00 W1 O +ATOM 12880 H1 TIP3X3464 -2.601 17.395 26.763 1.00 0.00 W1 H +ATOM 12881 H2 TIP3X3464 -3.116 18.179 27.952 1.00 0.00 W1 H +ATOM 12882 OH2 TIP3X3465 -15.441 24.727 18.633 1.00 0.00 W1 O +ATOM 12883 H1 TIP3X3465 -15.595 24.819 17.693 1.00 0.00 W1 H +ATOM 12884 H2 TIP3X3465 -14.488 24.727 18.722 1.00 0.00 W1 H +ATOM 12885 OH2 TIP3X3466 -4.679 24.315 25.229 1.00 0.00 W1 O +ATOM 12886 H1 TIP3X3466 -4.134 24.977 25.655 1.00 0.00 W1 H +ATOM 12887 H2 TIP3X3466 -4.220 24.115 24.414 1.00 0.00 W1 H +ATOM 12888 OH2 TIP3X3467 -5.857 29.289 16.307 1.00 0.00 W1 O +ATOM 12889 H1 TIP3X3467 -5.032 29.324 16.791 1.00 0.00 W1 H +ATOM 12890 H2 TIP3X3467 -5.654 28.776 15.524 1.00 0.00 W1 H +ATOM 12891 OH2 TIP3X3468 -5.865 27.076 27.958 1.00 0.00 W1 O +ATOM 12892 H1 TIP3X3468 -6.685 27.323 28.384 1.00 0.00 W1 H +ATOM 12893 H2 TIP3X3468 -6.094 26.981 27.033 1.00 0.00 W1 H +ATOM 12894 OH2 TIP3X3469 -9.239 27.301 19.844 1.00 0.00 W1 O +ATOM 12895 H1 TIP3X3469 -9.947 27.448 19.216 1.00 0.00 W1 H +ATOM 12896 H2 TIP3X3469 -9.577 27.646 20.671 1.00 0.00 W1 H +ATOM 12897 OH2 TIP3X3470 -12.675 28.213 28.555 1.00 0.00 W1 O +ATOM 12898 H1 TIP3X3470 -11.941 28.824 28.491 1.00 0.00 W1 H +ATOM 12899 H2 TIP3X3470 -12.987 28.307 29.455 1.00 0.00 W1 H +ATOM 12900 OH2 TIP3X3471 -13.085 29.918 22.657 1.00 0.00 W1 O +ATOM 12901 H1 TIP3X3471 -13.671 29.177 22.503 1.00 0.00 W1 H +ATOM 12902 H2 TIP3X3471 -12.642 30.051 21.819 1.00 0.00 W1 H +ATOM 12903 OH2 TIP3X3472 -4.731 15.931 23.738 1.00 0.00 W1 O +ATOM 12904 H1 TIP3X3472 -4.399 15.856 22.843 1.00 0.00 W1 H +ATOM 12905 H2 TIP3X3472 -4.776 16.874 23.899 1.00 0.00 W1 H +ATOM 12906 OH2 TIP3X3473 -7.493 18.060 23.972 1.00 0.00 W1 O +ATOM 12907 H1 TIP3X3473 -7.855 18.549 23.233 1.00 0.00 W1 H +ATOM 12908 H2 TIP3X3473 -8.225 17.971 24.582 1.00 0.00 W1 H +ATOM 12909 OH2 TIP3X3474 -8.774 16.045 17.900 1.00 0.00 W1 O +ATOM 12910 H1 TIP3X3474 -7.919 15.789 18.245 1.00 0.00 W1 H +ATOM 12911 H2 TIP3X3474 -9.293 15.241 17.925 1.00 0.00 W1 H +ATOM 12912 OH2 TIP3X3475 -6.023 15.888 18.944 1.00 0.00 W1 O +ATOM 12913 H1 TIP3X3475 -5.567 15.152 19.352 1.00 0.00 W1 H +ATOM 12914 H2 TIP3X3475 -5.615 15.975 18.082 1.00 0.00 W1 H +ATOM 12915 OH2 TIP3X3476 -11.383 30.467 30.398 1.00 0.00 W1 O +ATOM 12916 H1 TIP3X3476 -11.634 31.224 29.869 1.00 0.00 W1 H +ATOM 12917 H2 TIP3X3476 -10.472 30.298 30.159 1.00 0.00 W1 H +ATOM 12918 OH2 TIP3X3477 -6.377 29.161 20.699 1.00 0.00 W1 O +ATOM 12919 H1 TIP3X3477 -5.716 28.519 20.959 1.00 0.00 W1 H +ATOM 12920 H2 TIP3X3477 -6.390 29.796 21.415 1.00 0.00 W1 H +ATOM 12921 OH2 TIP3X3478 -8.637 30.064 29.608 1.00 0.00 W1 O +ATOM 12922 H1 TIP3X3478 -8.420 29.171 29.879 1.00 0.00 W1 H +ATOM 12923 H2 TIP3X3478 -8.030 30.618 30.098 1.00 0.00 W1 H +ATOM 12924 OH2 TIP3X3479 -9.691 18.182 19.653 1.00 0.00 W1 O +ATOM 12925 H1 TIP3X3479 -9.034 17.523 19.430 1.00 0.00 W1 H +ATOM 12926 H2 TIP3X3479 -9.648 18.251 20.607 1.00 0.00 W1 H +ATOM 12927 OH2 TIP3X3480 -14.978 16.520 29.109 1.00 0.00 W1 O +ATOM 12928 H1 TIP3X3480 -14.229 16.325 28.545 1.00 0.00 W1 H +ATOM 12929 H2 TIP3X3480 -14.769 16.095 29.940 1.00 0.00 W1 H +ATOM 12930 OH2 TIP3X3481 -3.858 29.247 18.710 1.00 0.00 W1 O +ATOM 12931 H1 TIP3X3481 -3.713 28.307 18.813 1.00 0.00 W1 H +ATOM 12932 H2 TIP3X3481 -3.035 29.580 18.353 1.00 0.00 W1 H +ATOM 12933 OH2 TIP3X3482 -2.190 16.014 29.937 1.00 0.00 W1 O +ATOM 12934 H1 TIP3X3482 -2.804 16.088 29.207 1.00 0.00 W1 H +ATOM 12935 H2 TIP3X3482 -1.421 16.509 29.656 1.00 0.00 W1 H +ATOM 12936 OH2 TIP3X3483 -11.397 30.227 20.424 1.00 0.00 W1 O +ATOM 12937 H1 TIP3X3483 -11.403 30.272 19.468 1.00 0.00 W1 H +ATOM 12938 H2 TIP3X3483 -10.589 30.673 20.680 1.00 0.00 W1 H +ATOM 12939 OH2 TIP3X3484 -0.488 29.165 28.373 1.00 0.00 W1 O +ATOM 12940 H1 TIP3X3484 -1.210 29.716 28.674 1.00 0.00 W1 H +ATOM 12941 H2 TIP3X3484 0.300 29.664 28.587 1.00 0.00 W1 H +ATOM 12942 OH2 TIP3X3485 -12.862 18.487 20.053 1.00 0.00 W1 O +ATOM 12943 H1 TIP3X3485 -13.505 18.876 19.461 1.00 0.00 W1 H +ATOM 12944 H2 TIP3X3485 -12.059 18.984 19.895 1.00 0.00 W1 H +ATOM 12945 OH2 TIP3X3486 -11.433 27.086 17.785 1.00 0.00 W1 O +ATOM 12946 H1 TIP3X3486 -11.472 26.458 17.063 1.00 0.00 W1 H +ATOM 12947 H2 TIP3X3486 -12.153 26.833 18.363 1.00 0.00 W1 H +ATOM 12948 OH2 TIP3X3487 2.019 -20.058 -26.806 1.00 0.00 W1 O +ATOM 12949 H1 TIP3X3487 2.201 -20.134 -25.869 1.00 0.00 W1 H +ATOM 12950 H2 TIP3X3487 1.995 -19.116 -26.970 1.00 0.00 W1 H +ATOM 12951 OH2 TIP3X3488 13.121 -22.567 -23.068 1.00 0.00 W1 O +ATOM 12952 H1 TIP3X3488 13.356 -22.303 -23.957 1.00 0.00 W1 H +ATOM 12953 H2 TIP3X3488 13.950 -22.831 -22.669 1.00 0.00 W1 H +ATOM 12954 OH2 TIP3X3489 5.105 -22.844 -27.089 1.00 0.00 W1 O +ATOM 12955 H1 TIP3X3489 5.136 -21.934 -26.792 1.00 0.00 W1 H +ATOM 12956 H2 TIP3X3489 5.613 -23.327 -26.437 1.00 0.00 W1 H +ATOM 12957 OH2 TIP3X3490 12.908 -18.684 -24.946 1.00 0.00 W1 O +ATOM 12958 H1 TIP3X3490 12.634 -18.194 -24.171 1.00 0.00 W1 H +ATOM 12959 H2 TIP3X3490 12.383 -19.484 -24.922 1.00 0.00 W1 H +ATOM 12960 OH2 TIP3X3491 11.425 -20.241 -27.903 1.00 0.00 W1 O +ATOM 12961 H1 TIP3X3491 11.587 -20.470 -28.818 1.00 0.00 W1 H +ATOM 12962 H2 TIP3X3491 10.496 -20.012 -27.873 1.00 0.00 W1 H +ATOM 12963 OH2 TIP3X3492 15.273 -19.709 -23.118 1.00 0.00 W1 O +ATOM 12964 H1 TIP3X3492 14.721 -19.626 -23.896 1.00 0.00 W1 H +ATOM 12965 H2 TIP3X3492 14.662 -19.926 -22.413 1.00 0.00 W1 H +ATOM 12966 OH2 TIP3X3493 1.909 -18.445 -20.667 1.00 0.00 W1 O +ATOM 12967 H1 TIP3X3493 2.315 -18.242 -19.824 1.00 0.00 W1 H +ATOM 12968 H2 TIP3X3493 1.338 -19.191 -20.484 1.00 0.00 W1 H +ATOM 12969 OH2 TIP3X3494 9.284 -16.820 -21.441 1.00 0.00 W1 O +ATOM 12970 H1 TIP3X3494 9.585 -17.721 -21.319 1.00 0.00 W1 H +ATOM 12971 H2 TIP3X3494 9.909 -16.440 -22.058 1.00 0.00 W1 H +ATOM 12972 OH2 TIP3X3495 12.717 -16.863 -21.561 1.00 0.00 W1 O +ATOM 12973 H1 TIP3X3495 12.281 -16.040 -21.781 1.00 0.00 W1 H +ATOM 12974 H2 TIP3X3495 13.646 -16.638 -21.512 1.00 0.00 W1 H +ATOM 12975 OH2 TIP3X3496 5.165 -17.289 -22.432 1.00 0.00 W1 O +ATOM 12976 H1 TIP3X3496 5.520 -16.440 -22.695 1.00 0.00 W1 H +ATOM 12977 H2 TIP3X3496 4.230 -17.229 -22.628 1.00 0.00 W1 H +ATOM 12978 OH2 TIP3X3497 10.006 -25.396 -23.530 1.00 0.00 W1 O +ATOM 12979 H1 TIP3X3497 9.929 -26.206 -24.035 1.00 0.00 W1 H +ATOM 12980 H2 TIP3X3497 10.949 -25.257 -23.443 1.00 0.00 W1 H +ATOM 12981 OH2 TIP3X3498 6.029 -29.299 -21.168 1.00 0.00 W1 O +ATOM 12982 H1 TIP3X3498 6.287 -30.036 -20.615 1.00 0.00 W1 H +ATOM 12983 H2 TIP3X3498 5.353 -29.655 -21.744 1.00 0.00 W1 H +ATOM 12984 OH2 TIP3X3499 14.273 -28.294 -24.745 1.00 0.00 W1 O +ATOM 12985 H1 TIP3X3499 13.965 -27.956 -23.904 1.00 0.00 W1 H +ATOM 12986 H2 TIP3X3499 14.341 -29.240 -24.614 1.00 0.00 W1 H +ATOM 12987 OH2 TIP3X3500 12.870 -27.099 -22.791 1.00 0.00 W1 O +ATOM 12988 H1 TIP3X3500 13.446 -27.327 -22.061 1.00 0.00 W1 H +ATOM 12989 H2 TIP3X3500 11.996 -27.353 -22.496 1.00 0.00 W1 H +ATOM 12990 OH2 TIP3X3501 5.917 -25.974 -21.420 1.00 0.00 W1 O +ATOM 12991 H1 TIP3X3501 6.420 -26.677 -21.008 1.00 0.00 W1 H +ATOM 12992 H2 TIP3X3501 6.574 -25.332 -21.687 1.00 0.00 W1 H +ATOM 12993 OH2 TIP3X3502 13.394 -24.926 -24.523 1.00 0.00 W1 O +ATOM 12994 H1 TIP3X3502 13.435 -25.826 -24.199 1.00 0.00 W1 H +ATOM 12995 H2 TIP3X3502 13.276 -24.393 -23.736 1.00 0.00 W1 H +ATOM 12996 OH2 TIP3X3503 12.078 -28.283 -26.654 1.00 0.00 W1 O +ATOM 12997 H1 TIP3X3503 12.903 -28.098 -26.205 1.00 0.00 W1 H +ATOM 12998 H2 TIP3X3503 12.155 -27.828 -27.493 1.00 0.00 W1 H +ATOM 12999 OH2 TIP3X3504 8.261 -22.311 -20.583 1.00 0.00 W1 O +ATOM 13000 H1 TIP3X3504 9.138 -22.289 -20.966 1.00 0.00 W1 H +ATOM 13001 H2 TIP3X3504 7.995 -21.393 -20.537 1.00 0.00 W1 H +ATOM 13002 OH2 TIP3X3505 7.411 -19.763 -20.773 1.00 0.00 W1 O +ATOM 13003 H1 TIP3X3505 7.387 -19.536 -21.702 1.00 0.00 W1 H +ATOM 13004 H2 TIP3X3505 6.491 -19.817 -20.514 1.00 0.00 W1 H +ATOM 13005 OH2 TIP3X3506 2.274 -27.882 -23.935 1.00 0.00 W1 O +ATOM 13006 H1 TIP3X3506 1.949 -27.002 -23.744 1.00 0.00 W1 H +ATOM 13007 H2 TIP3X3506 2.151 -27.984 -24.878 1.00 0.00 W1 H +ATOM 13008 OH2 TIP3X3507 4.430 -24.324 -23.922 1.00 0.00 W1 O +ATOM 13009 H1 TIP3X3507 3.747 -24.774 -24.419 1.00 0.00 W1 H +ATOM 13010 H2 TIP3X3507 4.916 -25.028 -23.490 1.00 0.00 W1 H +ATOM 13011 OH2 TIP3X3508 10.486 -19.400 -21.526 1.00 0.00 W1 O +ATOM 13012 H1 TIP3X3508 10.244 -19.986 -22.243 1.00 0.00 W1 H +ATOM 13013 H2 TIP3X3508 11.436 -19.489 -21.453 1.00 0.00 W1 H +ATOM 13014 OH2 TIP3X3509 14.784 -15.765 -24.745 1.00 0.00 W1 O +ATOM 13015 H1 TIP3X3509 14.778 -16.233 -23.910 1.00 0.00 W1 H +ATOM 13016 H2 TIP3X3509 13.903 -15.894 -25.098 1.00 0.00 W1 H +ATOM 13017 OH2 TIP3X3510 6.656 -19.429 -23.723 1.00 0.00 W1 O +ATOM 13018 H1 TIP3X3510 6.084 -20.148 -23.454 1.00 0.00 W1 H +ATOM 13019 H2 TIP3X3510 6.195 -18.638 -23.441 1.00 0.00 W1 H +ATOM 13020 OH2 TIP3X3511 8.877 -28.977 -19.153 1.00 0.00 W1 O +ATOM 13021 H1 TIP3X3511 8.135 -28.498 -18.786 1.00 0.00 W1 H +ATOM 13022 H2 TIP3X3511 8.497 -29.789 -19.487 1.00 0.00 W1 H +ATOM 13023 OH2 TIP3X3512 4.229 -28.272 -29.351 1.00 0.00 W1 O +ATOM 13024 H1 TIP3X3512 4.131 -28.934 -28.667 1.00 0.00 W1 H +ATOM 13025 H2 TIP3X3512 4.046 -28.741 -30.166 1.00 0.00 W1 H +ATOM 13026 OH2 TIP3X3513 15.123 -27.350 -21.162 1.00 0.00 W1 O +ATOM 13027 H1 TIP3X3513 15.642 -26.682 -21.609 1.00 0.00 W1 H +ATOM 13028 H2 TIP3X3513 15.565 -27.475 -20.322 1.00 0.00 W1 H +ATOM 13029 OH2 TIP3X3514 1.181 -30.998 -27.002 1.00 0.00 W1 O +ATOM 13030 H1 TIP3X3514 1.906 -30.377 -26.933 1.00 0.00 W1 H +ATOM 13031 H2 TIP3X3514 0.808 -31.031 -26.120 1.00 0.00 W1 H +ATOM 13032 OH2 TIP3X3515 6.447 -24.762 -17.015 1.00 0.00 W1 O +ATOM 13033 H1 TIP3X3515 7.311 -24.364 -17.116 1.00 0.00 W1 H +ATOM 13034 H2 TIP3X3515 6.599 -25.699 -17.138 1.00 0.00 W1 H +ATOM 13035 OH2 TIP3X3516 9.613 -19.852 -24.276 1.00 0.00 W1 O +ATOM 13036 H1 TIP3X3516 9.707 -20.715 -24.679 1.00 0.00 W1 H +ATOM 13037 H2 TIP3X3516 8.680 -19.652 -24.352 1.00 0.00 W1 H +ATOM 13038 OH2 TIP3X3517 8.225 -21.568 -26.745 1.00 0.00 W1 O +ATOM 13039 H1 TIP3X3517 7.660 -22.182 -26.275 1.00 0.00 W1 H +ATOM 13040 H2 TIP3X3517 7.751 -20.737 -26.716 1.00 0.00 W1 H +ATOM 13041 OH2 TIP3X3518 0.762 -21.055 -20.288 1.00 0.00 W1 O +ATOM 13042 H1 TIP3X3518 0.228 -21.657 -20.806 1.00 0.00 W1 H +ATOM 13043 H2 TIP3X3518 0.292 -20.969 -19.459 1.00 0.00 W1 H +ATOM 13044 OH2 TIP3X3519 12.059 -22.034 -25.920 1.00 0.00 W1 O +ATOM 13045 H1 TIP3X3519 12.003 -22.949 -26.197 1.00 0.00 W1 H +ATOM 13046 H2 TIP3X3519 11.886 -21.532 -26.716 1.00 0.00 W1 H +ATOM 13047 OH2 TIP3X3520 12.356 -21.520 -18.896 1.00 0.00 W1 O +ATOM 13048 H1 TIP3X3520 11.453 -21.436 -18.588 1.00 0.00 W1 H +ATOM 13049 H2 TIP3X3520 12.524 -22.462 -18.892 1.00 0.00 W1 H +ATOM 13050 OH2 TIP3X3521 14.722 -23.561 -21.090 1.00 0.00 W1 O +ATOM 13051 H1 TIP3X3521 15.385 -24.241 -21.209 1.00 0.00 W1 H +ATOM 13052 H2 TIP3X3521 14.006 -24.000 -20.631 1.00 0.00 W1 H +ATOM 13053 OH2 TIP3X3522 3.867 -23.874 -15.946 1.00 0.00 W1 O +ATOM 13054 H1 TIP3X3522 3.338 -24.108 -16.708 1.00 0.00 W1 H +ATOM 13055 H2 TIP3X3522 4.762 -23.826 -16.280 1.00 0.00 W1 H +ATOM 13056 OH2 TIP3X3523 4.777 -20.668 -20.384 1.00 0.00 W1 O +ATOM 13057 H1 TIP3X3523 4.732 -21.223 -19.606 1.00 0.00 W1 H +ATOM 13058 H2 TIP3X3523 4.144 -19.969 -20.218 1.00 0.00 W1 H +ATOM 13059 OH2 TIP3X3524 13.449 -19.538 -20.635 1.00 0.00 W1 O +ATOM 13060 H1 TIP3X3524 13.872 -18.770 -20.251 1.00 0.00 W1 H +ATOM 13061 H2 TIP3X3524 13.145 -20.046 -19.882 1.00 0.00 W1 H +ATOM 13062 OH2 TIP3X3525 11.536 -17.562 -18.810 1.00 0.00 W1 O +ATOM 13063 H1 TIP3X3525 10.829 -18.191 -18.952 1.00 0.00 W1 H +ATOM 13064 H2 TIP3X3525 11.865 -17.368 -19.687 1.00 0.00 W1 H +ATOM 13065 OH2 TIP3X3526 11.787 -19.026 -16.413 1.00 0.00 W1 O +ATOM 13066 H1 TIP3X3526 11.154 -19.633 -16.797 1.00 0.00 W1 H +ATOM 13067 H2 TIP3X3526 11.901 -18.346 -17.077 1.00 0.00 W1 H +ATOM 13068 OH2 TIP3X3527 15.398 -17.118 -22.347 1.00 0.00 W1 O +ATOM 13069 H1 TIP3X3527 16.075 -17.276 -21.690 1.00 0.00 W1 H +ATOM 13070 H2 TIP3X3527 15.163 -17.989 -22.666 1.00 0.00 W1 H +ATOM 13071 OH2 TIP3X3528 5.954 -30.647 -23.954 1.00 0.00 W1 O +ATOM 13072 H1 TIP3X3528 5.662 -29.737 -24.015 1.00 0.00 W1 H +ATOM 13073 H2 TIP3X3528 6.786 -30.664 -24.427 1.00 0.00 W1 H +ATOM 13074 OH2 TIP3X3529 8.078 -20.700 -30.300 1.00 0.00 W1 O +ATOM 13075 H1 TIP3X3529 7.383 -21.322 -30.085 1.00 0.00 W1 H +ATOM 13076 H2 TIP3X3529 8.060 -20.064 -29.585 1.00 0.00 W1 H +ATOM 13077 OH2 TIP3X3530 15.458 -21.937 -30.863 1.00 0.00 W1 O +ATOM 13078 H1 TIP3X3530 15.195 -22.686 -31.397 1.00 0.00 W1 H +ATOM 13079 H2 TIP3X3530 15.204 -21.173 -31.381 1.00 0.00 W1 H +ATOM 13080 OH2 TIP3X3531 1.406 -18.240 -31.146 1.00 0.00 W1 O +ATOM 13081 H1 TIP3X3531 1.852 -18.789 -30.501 1.00 0.00 W1 H +ATOM 13082 H2 TIP3X3531 0.510 -18.574 -31.167 1.00 0.00 W1 H +ATOM 13083 OH2 TIP3X3532 13.500 -16.111 -29.888 1.00 0.00 W1 O +ATOM 13084 H1 TIP3X3532 14.385 -16.439 -30.046 1.00 0.00 W1 H +ATOM 13085 H2 TIP3X3532 13.270 -15.643 -30.690 1.00 0.00 W1 H +ATOM 13086 OH2 TIP3X3533 14.892 -20.449 -17.810 1.00 0.00 W1 O +ATOM 13087 H1 TIP3X3533 14.782 -19.500 -17.751 1.00 0.00 W1 H +ATOM 13088 H2 TIP3X3533 13.999 -20.794 -17.820 1.00 0.00 W1 H +ATOM 13089 OH2 TIP3X3534 1.578 -17.623 -28.191 1.00 0.00 W1 O +ATOM 13090 H1 TIP3X3534 1.510 -16.787 -27.731 1.00 0.00 W1 H +ATOM 13091 H2 TIP3X3534 0.683 -17.962 -28.208 1.00 0.00 W1 H +ATOM 13092 OH2 TIP3X3535 14.158 -19.130 -30.547 1.00 0.00 W1 O +ATOM 13093 H1 TIP3X3535 14.190 -19.210 -29.594 1.00 0.00 W1 H +ATOM 13094 H2 TIP3X3535 13.325 -18.693 -30.724 1.00 0.00 W1 H +ATOM 13095 OH2 TIP3X3536 10.529 -30.836 -17.663 1.00 0.00 W1 O +ATOM 13096 H1 TIP3X3536 10.222 -30.087 -18.176 1.00 0.00 W1 H +ATOM 13097 H2 TIP3X3536 10.583 -31.553 -18.295 1.00 0.00 W1 H +ATOM 13098 OH2 TIP3X3537 4.743 -16.919 -19.634 1.00 0.00 W1 O +ATOM 13099 H1 TIP3X3537 5.591 -16.681 -19.260 1.00 0.00 W1 H +ATOM 13100 H2 TIP3X3537 4.954 -17.299 -20.487 1.00 0.00 W1 H +ATOM 13101 OH2 TIP3X3538 3.209 -28.901 -16.284 1.00 0.00 W1 O +ATOM 13102 H1 TIP3X3538 2.332 -28.811 -15.910 1.00 0.00 W1 H +ATOM 13103 H2 TIP3X3538 3.272 -28.188 -16.920 1.00 0.00 W1 H +ATOM 13104 OH2 TIP3X3539 9.406 -26.954 -30.553 1.00 0.00 W1 O +ATOM 13105 H1 TIP3X3539 9.240 -26.657 -31.448 1.00 0.00 W1 H +ATOM 13106 H2 TIP3X3539 8.535 -27.077 -30.176 1.00 0.00 W1 H +ATOM 13107 OH2 TIP3X3540 14.804 -19.193 -27.505 1.00 0.00 W1 O +ATOM 13108 H1 TIP3X3540 15.377 -19.930 -27.292 1.00 0.00 W1 H +ATOM 13109 H2 TIP3X3540 14.473 -18.894 -26.658 1.00 0.00 W1 H +ATOM 13110 OH2 TIP3X3541 10.065 -30.157 -30.576 1.00 0.00 W1 O +ATOM 13111 H1 TIP3X3541 10.797 -29.541 -30.552 1.00 0.00 W1 H +ATOM 13112 H2 TIP3X3541 10.306 -30.790 -31.253 1.00 0.00 W1 H +ATOM 13113 OH2 TIP3X3542 14.597 -30.064 -20.311 1.00 0.00 W1 O +ATOM 13114 H1 TIP3X3542 15.089 -30.693 -19.784 1.00 0.00 W1 H +ATOM 13115 H2 TIP3X3542 15.197 -29.821 -21.016 1.00 0.00 W1 H +ATOM 13116 OH2 TIP3X3543 2.104 -20.843 -24.233 1.00 0.00 W1 O +ATOM 13117 H1 TIP3X3543 1.436 -20.520 -23.629 1.00 0.00 W1 H +ATOM 13118 H2 TIP3X3543 2.896 -20.913 -23.701 1.00 0.00 W1 H +ATOM 13119 OH2 TIP3X3544 7.101 -19.424 -17.123 1.00 0.00 W1 O +ATOM 13120 H1 TIP3X3544 7.324 -19.802 -16.272 1.00 0.00 W1 H +ATOM 13121 H2 TIP3X3544 6.494 -20.053 -17.513 1.00 0.00 W1 H +ATOM 13122 OH2 TIP3X3545 10.580 -28.119 -21.710 1.00 0.00 W1 O +ATOM 13123 H1 TIP3X3545 10.639 -28.301 -20.772 1.00 0.00 W1 H +ATOM 13124 H2 TIP3X3545 9.642 -28.032 -21.879 1.00 0.00 W1 H +ATOM 13125 OH2 TIP3X3546 6.772 -27.463 -17.531 1.00 0.00 W1 O +ATOM 13126 H1 TIP3X3546 5.905 -27.533 -17.931 1.00 0.00 W1 H +ATOM 13127 H2 TIP3X3546 6.717 -28.003 -16.743 1.00 0.00 W1 H +ATOM 13128 OH2 TIP3X3547 14.258 -24.742 -15.778 1.00 0.00 W1 O +ATOM 13129 H1 TIP3X3547 15.052 -25.276 -15.795 1.00 0.00 W1 H +ATOM 13130 H2 TIP3X3547 13.964 -24.777 -14.868 1.00 0.00 W1 H +ATOM 13131 OH2 TIP3X3548 2.443 -30.875 -19.860 1.00 0.00 W1 O +ATOM 13132 H1 TIP3X3548 2.217 -30.422 -20.672 1.00 0.00 W1 H +ATOM 13133 H2 TIP3X3548 3.273 -31.312 -20.051 1.00 0.00 W1 H +ATOM 13134 OH2 TIP3X3549 8.538 -30.418 -24.778 1.00 0.00 W1 O +ATOM 13135 H1 TIP3X3549 9.020 -29.904 -25.426 1.00 0.00 W1 H +ATOM 13136 H2 TIP3X3549 8.882 -30.124 -23.934 1.00 0.00 W1 H +ATOM 13137 OH2 TIP3X3550 3.008 -25.826 -29.625 1.00 0.00 W1 O +ATOM 13138 H1 TIP3X3550 3.430 -25.180 -30.191 1.00 0.00 W1 H +ATOM 13139 H2 TIP3X3550 3.720 -26.401 -29.344 1.00 0.00 W1 H +ATOM 13140 OH2 TIP3X3551 3.532 -25.170 -20.314 1.00 0.00 W1 O +ATOM 13141 H1 TIP3X3551 3.448 -24.378 -19.782 1.00 0.00 W1 H +ATOM 13142 H2 TIP3X3551 4.447 -25.174 -20.595 1.00 0.00 W1 H +ATOM 13143 OH2 TIP3X3552 2.715 -24.451 -27.129 1.00 0.00 W1 O +ATOM 13144 H1 TIP3X3552 2.778 -24.740 -28.039 1.00 0.00 W1 H +ATOM 13145 H2 TIP3X3552 3.490 -23.906 -26.996 1.00 0.00 W1 H +ATOM 13146 OH2 TIP3X3553 11.735 -27.882 -29.369 1.00 0.00 W1 O +ATOM 13147 H1 TIP3X3553 11.028 -27.393 -29.789 1.00 0.00 W1 H +ATOM 13148 H2 TIP3X3553 12.460 -27.838 -29.992 1.00 0.00 W1 H +ATOM 13149 OH2 TIP3X3554 0.286 -26.995 -18.281 1.00 0.00 W1 O +ATOM 13150 H1 TIP3X3554 -0.619 -26.701 -18.170 1.00 0.00 W1 H +ATOM 13151 H2 TIP3X3554 0.426 -27.614 -17.564 1.00 0.00 W1 H +ATOM 13152 OH2 TIP3X3555 1.429 -30.158 -22.298 1.00 0.00 W1 O +ATOM 13153 H1 TIP3X3555 1.536 -30.859 -22.941 1.00 0.00 W1 H +ATOM 13154 H2 TIP3X3555 1.564 -29.352 -22.797 1.00 0.00 W1 H +ATOM 13155 OH2 TIP3X3556 12.951 -26.530 -17.411 1.00 0.00 W1 O +ATOM 13156 H1 TIP3X3556 13.262 -25.951 -16.715 1.00 0.00 W1 H +ATOM 13157 H2 TIP3X3556 12.007 -26.594 -17.265 1.00 0.00 W1 H +ATOM 13158 OH2 TIP3X3557 9.994 -26.524 -17.464 1.00 0.00 W1 O +ATOM 13159 H1 TIP3X3557 9.634 -25.956 -18.145 1.00 0.00 W1 H +ATOM 13160 H2 TIP3X3557 9.656 -27.394 -17.675 1.00 0.00 W1 H +ATOM 13161 OH2 TIP3X3558 8.197 -26.055 -27.598 1.00 0.00 W1 O +ATOM 13162 H1 TIP3X3558 8.286 -25.475 -28.355 1.00 0.00 W1 H +ATOM 13163 H2 TIP3X3558 7.427 -26.589 -27.795 1.00 0.00 W1 H +ATOM 13164 OH2 TIP3X3559 6.500 -26.723 -29.911 1.00 0.00 W1 O +ATOM 13165 H1 TIP3X3559 6.062 -26.531 -30.740 1.00 0.00 W1 H +ATOM 13166 H2 TIP3X3559 6.093 -27.534 -29.607 1.00 0.00 W1 H +ATOM 13167 OH2 TIP3X3560 7.210 -29.661 -16.122 1.00 0.00 W1 O +ATOM 13168 H1 TIP3X3560 6.744 -30.048 -15.381 1.00 0.00 W1 H +ATOM 13169 H2 TIP3X3560 8.124 -29.629 -15.839 1.00 0.00 W1 H +ATOM 13170 OH2 TIP3X3561 12.773 -24.317 -19.440 1.00 0.00 W1 O +ATOM 13171 H1 TIP3X3561 12.793 -24.966 -18.737 1.00 0.00 W1 H +ATOM 13172 H2 TIP3X3561 11.939 -24.468 -19.884 1.00 0.00 W1 H +ATOM 13173 OH2 TIP3X3562 0.848 -27.216 -30.971 1.00 0.00 W1 O +ATOM 13174 H1 TIP3X3562 0.092 -27.409 -30.417 1.00 0.00 W1 H +ATOM 13175 H2 TIP3X3562 1.382 -26.618 -30.448 1.00 0.00 W1 H +ATOM 13176 OH2 TIP3X3563 0.767 -15.723 -30.484 1.00 0.00 W1 O +ATOM 13177 H1 TIP3X3563 1.183 -16.470 -30.054 1.00 0.00 W1 H +ATOM 13178 H2 TIP3X3563 0.780 -15.029 -29.824 1.00 0.00 W1 H +ATOM 13179 OH2 TIP3X3564 9.515 -27.563 -25.491 1.00 0.00 W1 O +ATOM 13180 H1 TIP3X3564 9.178 -27.212 -26.315 1.00 0.00 W1 H +ATOM 13181 H2 TIP3X3564 10.411 -27.830 -25.692 1.00 0.00 W1 H +ATOM 13182 OH2 TIP3X3565 4.970 -28.252 -23.747 1.00 0.00 W1 O +ATOM 13183 H1 TIP3X3565 4.028 -28.299 -23.905 1.00 0.00 W1 H +ATOM 13184 H2 TIP3X3565 5.109 -27.378 -23.383 1.00 0.00 W1 H +ATOM 13185 OH2 TIP3X3566 0.332 -27.126 -26.953 1.00 0.00 W1 O +ATOM 13186 H1 TIP3X3566 0.058 -27.251 -26.045 1.00 0.00 W1 H +ATOM 13187 H2 TIP3X3566 0.138 -26.208 -27.139 1.00 0.00 W1 H +ATOM 13188 OH2 TIP3X3567 4.333 -27.799 -18.893 1.00 0.00 W1 O +ATOM 13189 H1 TIP3X3567 4.355 -28.605 -19.409 1.00 0.00 W1 H +ATOM 13190 H2 TIP3X3567 3.939 -27.151 -19.477 1.00 0.00 W1 H +ATOM 13191 OH2 TIP3X3568 4.916 -21.264 -23.088 1.00 0.00 W1 O +ATOM 13192 H1 TIP3X3568 4.844 -22.199 -23.276 1.00 0.00 W1 H +ATOM 13193 H2 TIP3X3568 4.920 -21.210 -22.132 1.00 0.00 W1 H +ATOM 13194 OH2 TIP3X3569 9.105 -24.245 -18.526 1.00 0.00 W1 O +ATOM 13195 H1 TIP3X3569 9.517 -23.413 -18.289 1.00 0.00 W1 H +ATOM 13196 H2 TIP3X3569 8.555 -24.034 -19.280 1.00 0.00 W1 H +ATOM 13197 OH2 TIP3X3570 14.900 -28.878 -29.201 1.00 0.00 W1 O +ATOM 13198 H1 TIP3X3570 15.335 -28.651 -28.379 1.00 0.00 W1 H +ATOM 13199 H2 TIP3X3570 14.380 -29.654 -28.992 1.00 0.00 W1 H +ATOM 13200 OH2 TIP3X3571 6.055 -22.918 -30.023 1.00 0.00 W1 O +ATOM 13201 H1 TIP3X3571 5.766 -23.040 -29.119 1.00 0.00 W1 H +ATOM 13202 H2 TIP3X3571 6.744 -23.572 -30.144 1.00 0.00 W1 H +ATOM 13203 OH2 TIP3X3572 12.758 -24.402 -28.955 1.00 0.00 W1 O +ATOM 13204 H1 TIP3X3572 11.893 -24.601 -28.596 1.00 0.00 W1 H +ATOM 13205 H2 TIP3X3572 13.315 -24.281 -28.186 1.00 0.00 W1 H +ATOM 13206 OH2 TIP3X3573 7.591 -24.148 -22.485 1.00 0.00 W1 O +ATOM 13207 H1 TIP3X3573 7.688 -23.351 -21.963 1.00 0.00 W1 H +ATOM 13208 H2 TIP3X3573 8.466 -24.538 -22.493 1.00 0.00 W1 H +ATOM 13209 OH2 TIP3X3574 7.336 -23.766 -25.569 1.00 0.00 W1 O +ATOM 13210 H1 TIP3X3574 7.958 -24.363 -25.987 1.00 0.00 W1 H +ATOM 13211 H2 TIP3X3574 7.362 -24.004 -24.642 1.00 0.00 W1 H +ATOM 13212 OH2 TIP3X3575 10.231 -22.151 -16.633 1.00 0.00 W1 O +ATOM 13213 H1 TIP3X3575 9.553 -21.867 -16.020 1.00 0.00 W1 H +ATOM 13214 H2 TIP3X3575 11.029 -22.191 -16.106 1.00 0.00 W1 H +ATOM 13215 OH2 TIP3X3576 2.741 -22.735 -18.937 1.00 0.00 W1 O +ATOM 13216 H1 TIP3X3576 3.258 -22.330 -18.241 1.00 0.00 W1 H +ATOM 13217 H2 TIP3X3576 2.358 -21.998 -19.412 1.00 0.00 W1 H +ATOM 13218 OH2 TIP3X3577 1.647 -24.773 -17.315 1.00 0.00 W1 O +ATOM 13219 H1 TIP3X3577 1.443 -25.613 -17.728 1.00 0.00 W1 H +ATOM 13220 H2 TIP3X3577 1.524 -24.127 -18.011 1.00 0.00 W1 H +ATOM 13221 OH2 TIP3X3578 1.540 -23.900 -24.492 1.00 0.00 W1 O +ATOM 13222 H1 TIP3X3578 1.896 -23.028 -24.662 1.00 0.00 W1 H +ATOM 13223 H2 TIP3X3578 1.438 -24.291 -25.360 1.00 0.00 W1 H +ATOM 13224 OH2 TIP3X3579 12.299 -21.635 -30.305 1.00 0.00 W1 O +ATOM 13225 H1 TIP3X3579 13.004 -21.137 -30.717 1.00 0.00 W1 H +ATOM 13226 H2 TIP3X3579 12.748 -22.266 -29.742 1.00 0.00 W1 H +ATOM 13227 OH2 TIP3X3580 14.895 -24.288 -26.943 1.00 0.00 W1 O +ATOM 13228 H1 TIP3X3580 14.608 -24.115 -26.046 1.00 0.00 W1 H +ATOM 13229 H2 TIP3X3580 15.408 -23.516 -27.183 1.00 0.00 W1 H +ATOM 13230 OH2 TIP3X3581 1.393 -25.171 -22.221 1.00 0.00 W1 O +ATOM 13231 H1 TIP3X3581 1.487 -24.493 -22.889 1.00 0.00 W1 H +ATOM 13232 H2 TIP3X3581 2.051 -24.952 -21.561 1.00 0.00 W1 H +ATOM 13233 OH2 TIP3X3582 4.180 -16.664 -28.957 1.00 0.00 W1 O +ATOM 13234 H1 TIP3X3582 3.951 -16.304 -29.814 1.00 0.00 W1 H +ATOM 13235 H2 TIP3X3582 3.767 -17.527 -28.941 1.00 0.00 W1 H +ATOM 13236 OH2 TIP3X3583 2.955 -21.431 -30.459 1.00 0.00 W1 O +ATOM 13237 H1 TIP3X3583 2.139 -21.721 -30.867 1.00 0.00 W1 H +ATOM 13238 H2 TIP3X3583 3.487 -22.225 -30.397 1.00 0.00 W1 H +ATOM 13239 OH2 TIP3X3584 4.373 -20.592 -17.384 1.00 0.00 W1 O +ATOM 13240 H1 TIP3X3584 3.800 -19.990 -17.858 1.00 0.00 W1 H +ATOM 13241 H2 TIP3X3584 3.899 -20.788 -16.576 1.00 0.00 W1 H +ATOM 13242 OH2 TIP3X3585 7.449 -15.849 -19.693 1.00 0.00 W1 O +ATOM 13243 H1 TIP3X3585 7.766 -16.143 -18.840 1.00 0.00 W1 H +ATOM 13244 H2 TIP3X3585 7.882 -16.426 -20.322 1.00 0.00 W1 H +ATOM 13245 OH2 TIP3X3586 12.155 -15.607 -25.560 1.00 0.00 W1 O +ATOM 13246 H1 TIP3X3586 11.742 -16.298 -26.078 1.00 0.00 W1 H +ATOM 13247 H2 TIP3X3586 11.959 -14.800 -26.036 1.00 0.00 W1 H +ATOM 13248 OH2 TIP3X3587 8.733 -18.925 -28.308 1.00 0.00 W1 O +ATOM 13249 H1 TIP3X3587 8.992 -18.139 -28.790 1.00 0.00 W1 H +ATOM 13250 H2 TIP3X3587 8.163 -18.601 -27.610 1.00 0.00 W1 H +ATOM 13251 OH2 TIP3X3588 8.750 -23.770 -29.236 1.00 0.00 W1 O +ATOM 13252 H1 TIP3X3588 9.573 -23.697 -29.719 1.00 0.00 W1 H +ATOM 13253 H2 TIP3X3588 8.757 -23.026 -28.635 1.00 0.00 W1 H +ATOM 13254 OH2 TIP3X3589 12.151 -29.047 -19.445 1.00 0.00 W1 O +ATOM 13255 H1 TIP3X3589 12.956 -29.277 -19.909 1.00 0.00 W1 H +ATOM 13256 H2 TIP3X3589 12.442 -28.494 -18.720 1.00 0.00 W1 H +ATOM 13257 OH2 TIP3X3590 0.116 -21.945 -28.039 1.00 0.00 W1 O +ATOM 13258 H1 TIP3X3590 -0.037 -21.853 -28.979 1.00 0.00 W1 H +ATOM 13259 H2 TIP3X3590 1.070 -21.945 -27.950 1.00 0.00 W1 H +ATOM 13260 OH2 TIP3X3591 10.878 -22.357 -21.443 1.00 0.00 W1 O +ATOM 13261 H1 TIP3X3591 11.424 -21.696 -21.017 1.00 0.00 W1 H +ATOM 13262 H2 TIP3X3591 11.337 -22.558 -22.259 1.00 0.00 W1 H +ATOM 13263 OH2 TIP3X3592 9.700 -17.384 -30.366 1.00 0.00 W1 O +ATOM 13264 H1 TIP3X3592 10.525 -17.348 -29.881 1.00 0.00 W1 H +ATOM 13265 H2 TIP3X3592 9.904 -17.896 -31.148 1.00 0.00 W1 H +ATOM 13266 OH2 TIP3X3593 9.693 -19.596 -18.715 1.00 0.00 W1 O +ATOM 13267 H1 TIP3X3593 8.872 -19.349 -18.288 1.00 0.00 W1 H +ATOM 13268 H2 TIP3X3593 9.463 -19.692 -19.639 1.00 0.00 W1 H +ATOM 13269 OH2 TIP3X3594 6.318 -19.371 -26.828 1.00 0.00 W1 O +ATOM 13270 H1 TIP3X3594 5.611 -19.224 -27.456 1.00 0.00 W1 H +ATOM 13271 H2 TIP3X3594 5.981 -19.027 -26.001 1.00 0.00 W1 H +ATOM 13272 OH2 TIP3X3595 2.883 -18.459 -18.117 1.00 0.00 W1 O +ATOM 13273 H1 TIP3X3595 3.617 -17.848 -18.181 1.00 0.00 W1 H +ATOM 13274 H2 TIP3X3595 2.571 -18.365 -17.217 1.00 0.00 W1 H +ATOM 13275 OH2 TIP3X3596 2.473 -16.755 -24.015 1.00 0.00 W1 O +ATOM 13276 H1 TIP3X3596 1.887 -17.496 -24.169 1.00 0.00 W1 H +ATOM 13277 H2 TIP3X3596 2.916 -16.621 -24.853 1.00 0.00 W1 H +ATOM 13278 OH2 TIP3X3597 10.826 -30.741 -22.935 1.00 0.00 W1 O +ATOM 13279 H1 TIP3X3597 11.158 -30.816 -23.829 1.00 0.00 W1 H +ATOM 13280 H2 TIP3X3597 10.781 -29.799 -22.774 1.00 0.00 W1 H +ATOM 13281 OH2 TIP3X3598 8.064 -28.612 -22.700 1.00 0.00 W1 O +ATOM 13282 H1 TIP3X3598 7.702 -28.123 -23.439 1.00 0.00 W1 H +ATOM 13283 H2 TIP3X3598 7.332 -28.702 -22.090 1.00 0.00 W1 H +ATOM 13284 OH2 TIP3X3599 6.783 -30.628 -28.772 1.00 0.00 W1 O +ATOM 13285 H1 TIP3X3599 7.639 -30.883 -28.427 1.00 0.00 W1 H +ATOM 13286 H2 TIP3X3599 6.265 -31.432 -28.747 1.00 0.00 W1 H +ATOM 13287 OH2 TIP3X3600 9.535 -30.784 -27.729 1.00 0.00 W1 O +ATOM 13288 H1 TIP3X3600 9.990 -31.520 -27.320 1.00 0.00 W1 H +ATOM 13289 H2 TIP3X3600 9.942 -30.698 -28.590 1.00 0.00 W1 H +ATOM 13290 OH2 TIP3X3601 4.174 -16.206 -16.274 1.00 0.00 W1 O +ATOM 13291 H1 TIP3X3601 3.924 -15.449 -16.804 1.00 0.00 W1 H +ATOM 13292 H2 TIP3X3601 5.085 -16.375 -16.513 1.00 0.00 W1 H +ATOM 13293 OH2 TIP3X3602 9.181 -17.511 -25.974 1.00 0.00 W1 O +ATOM 13294 H1 TIP3X3602 9.842 -18.153 -25.714 1.00 0.00 W1 H +ATOM 13295 H2 TIP3X3602 9.168 -16.877 -25.257 1.00 0.00 W1 H +ATOM 13296 OH2 TIP3X3603 6.920 -16.609 -17.064 1.00 0.00 W1 O +ATOM 13297 H1 TIP3X3603 7.138 -17.501 -16.794 1.00 0.00 W1 H +ATOM 13298 H2 TIP3X3603 7.528 -16.055 -16.575 1.00 0.00 W1 H +ATOM 13299 OH2 TIP3X3604 5.867 -28.491 -27.020 1.00 0.00 W1 O +ATOM 13300 H1 TIP3X3604 6.524 -29.150 -27.242 1.00 0.00 W1 H +ATOM 13301 H2 TIP3X3604 5.909 -28.422 -26.066 1.00 0.00 W1 H +ATOM 13302 OH2 TIP3X3605 0.580 -30.152 -17.564 1.00 0.00 W1 O +ATOM 13303 H1 TIP3X3605 1.328 -30.348 -18.128 1.00 0.00 W1 H +ATOM 13304 H2 TIP3X3605 0.788 -30.578 -16.732 1.00 0.00 W1 H +ATOM 13305 OH2 TIP3X3606 11.699 -17.425 -27.962 1.00 0.00 W1 O +ATOM 13306 H1 TIP3X3606 11.844 -18.365 -27.859 1.00 0.00 W1 H +ATOM 13307 H2 TIP3X3606 12.523 -17.093 -28.319 1.00 0.00 W1 H +ATOM 13308 OH2 TIP3X3607 13.367 -30.659 -16.735 1.00 0.00 W1 O +ATOM 13309 H1 TIP3X3607 12.753 -30.585 -17.466 1.00 0.00 W1 H +ATOM 13310 H2 TIP3X3607 14.137 -30.164 -17.017 1.00 0.00 W1 H +ATOM 13311 OH2 TIP3X3608 4.161 -16.446 -26.249 1.00 0.00 W1 O +ATOM 13312 H1 TIP3X3608 4.154 -16.401 -27.205 1.00 0.00 W1 H +ATOM 13313 H2 TIP3X3608 4.968 -16.000 -25.993 1.00 0.00 W1 H +ATOM 13314 OH2 TIP3X3609 15.070 -17.507 -18.299 1.00 0.00 W1 O +ATOM 13315 H1 TIP3X3609 14.347 -16.956 -17.998 1.00 0.00 W1 H +ATOM 13316 H2 TIP3X3609 15.858 -17.008 -18.085 1.00 0.00 W1 H +ATOM 13317 OH2 TIP3X3610 2.695 -28.185 -26.619 1.00 0.00 W1 O +ATOM 13318 H1 TIP3X3610 2.052 -27.797 -27.212 1.00 0.00 W1 H +ATOM 13319 H2 TIP3X3610 3.498 -27.688 -26.777 1.00 0.00 W1 H +ATOM 13320 OH2 TIP3X3611 4.124 -19.586 -28.888 1.00 0.00 W1 O +ATOM 13321 H1 TIP3X3611 4.085 -20.214 -29.609 1.00 0.00 W1 H +ATOM 13322 H2 TIP3X3611 3.405 -19.840 -28.310 1.00 0.00 W1 H +ATOM 13323 OH2 TIP3X3612 2.019 -20.058 -11.248 1.00 0.00 W1 O +ATOM 13324 H1 TIP3X3612 2.201 -20.134 -10.312 1.00 0.00 W1 H +ATOM 13325 H2 TIP3X3612 1.995 -19.116 -11.413 1.00 0.00 W1 H +ATOM 13326 OH2 TIP3X3613 13.121 -22.567 -7.510 1.00 0.00 W1 O +ATOM 13327 H1 TIP3X3613 13.356 -22.303 -8.400 1.00 0.00 W1 H +ATOM 13328 H2 TIP3X3613 13.950 -22.831 -7.111 1.00 0.00 W1 H +ATOM 13329 OH2 TIP3X3614 5.105 -22.844 -11.532 1.00 0.00 W1 O +ATOM 13330 H1 TIP3X3614 5.136 -21.934 -11.235 1.00 0.00 W1 H +ATOM 13331 H2 TIP3X3614 5.613 -23.327 -10.880 1.00 0.00 W1 H +ATOM 13332 OH2 TIP3X3615 12.908 -18.684 -9.388 1.00 0.00 W1 O +ATOM 13333 H1 TIP3X3615 12.634 -18.194 -8.613 1.00 0.00 W1 H +ATOM 13334 H2 TIP3X3615 12.383 -19.484 -9.365 1.00 0.00 W1 H +ATOM 13335 OH2 TIP3X3616 11.425 -20.241 -12.345 1.00 0.00 W1 O +ATOM 13336 H1 TIP3X3616 11.587 -20.470 -13.260 1.00 0.00 W1 H +ATOM 13337 H2 TIP3X3616 10.496 -20.012 -12.315 1.00 0.00 W1 H +ATOM 13338 OH2 TIP3X3617 15.273 -19.709 -7.561 1.00 0.00 W1 O +ATOM 13339 H1 TIP3X3617 14.721 -19.626 -8.338 1.00 0.00 W1 H +ATOM 13340 H2 TIP3X3617 14.662 -19.926 -6.856 1.00 0.00 W1 H +ATOM 13341 OH2 TIP3X3618 1.909 -18.445 -5.110 1.00 0.00 W1 O +ATOM 13342 H1 TIP3X3618 2.315 -18.242 -4.267 1.00 0.00 W1 H +ATOM 13343 H2 TIP3X3618 1.338 -19.191 -4.927 1.00 0.00 W1 H +ATOM 13344 OH2 TIP3X3619 9.284 -16.820 -5.884 1.00 0.00 W1 O +ATOM 13345 H1 TIP3X3619 9.585 -17.721 -5.762 1.00 0.00 W1 H +ATOM 13346 H2 TIP3X3619 9.909 -16.440 -6.501 1.00 0.00 W1 H +ATOM 13347 OH2 TIP3X3620 12.717 -16.863 -6.004 1.00 0.00 W1 O +ATOM 13348 H1 TIP3X3620 12.281 -16.040 -6.223 1.00 0.00 W1 H +ATOM 13349 H2 TIP3X3620 13.646 -16.638 -5.954 1.00 0.00 W1 H +ATOM 13350 OH2 TIP3X3621 5.165 -17.289 -6.874 1.00 0.00 W1 O +ATOM 13351 H1 TIP3X3621 5.520 -16.440 -7.138 1.00 0.00 W1 H +ATOM 13352 H2 TIP3X3621 4.230 -17.229 -7.070 1.00 0.00 W1 H +ATOM 13353 OH2 TIP3X3622 10.006 -25.396 -7.973 1.00 0.00 W1 O +ATOM 13354 H1 TIP3X3622 9.929 -26.206 -8.477 1.00 0.00 W1 H +ATOM 13355 H2 TIP3X3622 10.949 -25.257 -7.885 1.00 0.00 W1 H +ATOM 13356 OH2 TIP3X3623 6.029 -29.299 -5.611 1.00 0.00 W1 O +ATOM 13357 H1 TIP3X3623 6.287 -30.036 -5.058 1.00 0.00 W1 H +ATOM 13358 H2 TIP3X3623 5.353 -29.655 -6.186 1.00 0.00 W1 H +ATOM 13359 OH2 TIP3X3624 14.273 -28.294 -9.188 1.00 0.00 W1 O +ATOM 13360 H1 TIP3X3624 13.965 -27.956 -8.347 1.00 0.00 W1 H +ATOM 13361 H2 TIP3X3624 14.341 -29.240 -9.056 1.00 0.00 W1 H +ATOM 13362 OH2 TIP3X3625 12.870 -27.099 -7.234 1.00 0.00 W1 O +ATOM 13363 H1 TIP3X3625 13.446 -27.327 -6.503 1.00 0.00 W1 H +ATOM 13364 H2 TIP3X3625 11.996 -27.353 -6.939 1.00 0.00 W1 H +ATOM 13365 OH2 TIP3X3626 5.917 -25.974 -5.863 1.00 0.00 W1 O +ATOM 13366 H1 TIP3X3626 6.420 -26.677 -5.451 1.00 0.00 W1 H +ATOM 13367 H2 TIP3X3626 6.574 -25.332 -6.129 1.00 0.00 W1 H +ATOM 13368 OH2 TIP3X3627 13.394 -24.926 -8.965 1.00 0.00 W1 O +ATOM 13369 H1 TIP3X3627 13.435 -25.826 -8.641 1.00 0.00 W1 H +ATOM 13370 H2 TIP3X3627 13.276 -24.393 -8.179 1.00 0.00 W1 H +ATOM 13371 OH2 TIP3X3628 12.078 -28.283 -11.097 1.00 0.00 W1 O +ATOM 13372 H1 TIP3X3628 12.903 -28.098 -10.648 1.00 0.00 W1 H +ATOM 13373 H2 TIP3X3628 12.155 -27.828 -11.936 1.00 0.00 W1 H +ATOM 13374 OH2 TIP3X3629 8.261 -22.311 -5.025 1.00 0.00 W1 O +ATOM 13375 H1 TIP3X3629 9.138 -22.289 -5.408 1.00 0.00 W1 H +ATOM 13376 H2 TIP3X3629 7.995 -21.393 -4.979 1.00 0.00 W1 H +ATOM 13377 OH2 TIP3X3630 7.411 -19.763 -5.215 1.00 0.00 W1 O +ATOM 13378 H1 TIP3X3630 7.387 -19.536 -6.145 1.00 0.00 W1 H +ATOM 13379 H2 TIP3X3630 6.491 -19.817 -4.957 1.00 0.00 W1 H +ATOM 13380 OH2 TIP3X3631 2.274 -27.882 -8.377 1.00 0.00 W1 O +ATOM 13381 H1 TIP3X3631 1.949 -27.002 -8.186 1.00 0.00 W1 H +ATOM 13382 H2 TIP3X3631 2.151 -27.984 -9.321 1.00 0.00 W1 H +ATOM 13383 OH2 TIP3X3632 4.430 -24.324 -8.365 1.00 0.00 W1 O +ATOM 13384 H1 TIP3X3632 3.747 -24.774 -8.862 1.00 0.00 W1 H +ATOM 13385 H2 TIP3X3632 4.916 -25.028 -7.933 1.00 0.00 W1 H +ATOM 13386 OH2 TIP3X3633 10.486 -19.400 -5.968 1.00 0.00 W1 O +ATOM 13387 H1 TIP3X3633 10.244 -19.986 -6.685 1.00 0.00 W1 H +ATOM 13388 H2 TIP3X3633 11.436 -19.489 -5.896 1.00 0.00 W1 H +ATOM 13389 OH2 TIP3X3634 14.784 -15.765 -9.188 1.00 0.00 W1 O +ATOM 13390 H1 TIP3X3634 14.778 -16.233 -8.353 1.00 0.00 W1 H +ATOM 13391 H2 TIP3X3634 13.903 -15.894 -9.541 1.00 0.00 W1 H +ATOM 13392 OH2 TIP3X3635 6.656 -19.429 -8.166 1.00 0.00 W1 O +ATOM 13393 H1 TIP3X3635 6.084 -20.148 -7.897 1.00 0.00 W1 H +ATOM 13394 H2 TIP3X3635 6.195 -18.638 -7.883 1.00 0.00 W1 H +ATOM 13395 OH2 TIP3X3636 8.877 -28.977 -3.595 1.00 0.00 W1 O +ATOM 13396 H1 TIP3X3636 8.135 -28.498 -3.228 1.00 0.00 W1 H +ATOM 13397 H2 TIP3X3636 8.497 -29.789 -3.930 1.00 0.00 W1 H +ATOM 13398 OH2 TIP3X3637 4.229 -28.272 -13.794 1.00 0.00 W1 O +ATOM 13399 H1 TIP3X3637 4.131 -28.934 -13.109 1.00 0.00 W1 H +ATOM 13400 H2 TIP3X3637 4.046 -28.741 -14.608 1.00 0.00 W1 H +ATOM 13401 OH2 TIP3X3638 15.123 -27.350 -5.604 1.00 0.00 W1 O +ATOM 13402 H1 TIP3X3638 15.642 -26.682 -6.051 1.00 0.00 W1 H +ATOM 13403 H2 TIP3X3638 15.565 -27.475 -4.764 1.00 0.00 W1 H +ATOM 13404 OH2 TIP3X3639 1.181 -30.998 -11.444 1.00 0.00 W1 O +ATOM 13405 H1 TIP3X3639 1.906 -30.377 -11.375 1.00 0.00 W1 H +ATOM 13406 H2 TIP3X3639 0.808 -31.031 -10.563 1.00 0.00 W1 H +ATOM 13407 OH2 TIP3X3640 6.447 -24.762 -1.458 1.00 0.00 W1 O +ATOM 13408 H1 TIP3X3640 7.311 -24.364 -1.559 1.00 0.00 W1 H +ATOM 13409 H2 TIP3X3640 6.599 -25.699 -1.580 1.00 0.00 W1 H +ATOM 13410 OH2 TIP3X3641 9.613 -19.852 -8.718 1.00 0.00 W1 O +ATOM 13411 H1 TIP3X3641 9.707 -20.715 -9.122 1.00 0.00 W1 H +ATOM 13412 H2 TIP3X3641 8.680 -19.652 -8.794 1.00 0.00 W1 H +ATOM 13413 OH2 TIP3X3642 8.225 -21.568 -11.187 1.00 0.00 W1 O +ATOM 13414 H1 TIP3X3642 7.660 -22.182 -10.718 1.00 0.00 W1 H +ATOM 13415 H2 TIP3X3642 7.751 -20.737 -11.159 1.00 0.00 W1 H +ATOM 13416 OH2 TIP3X3643 0.762 -21.055 -4.730 1.00 0.00 W1 O +ATOM 13417 H1 TIP3X3643 0.228 -21.657 -5.248 1.00 0.00 W1 H +ATOM 13418 H2 TIP3X3643 0.292 -20.969 -3.901 1.00 0.00 W1 H +ATOM 13419 OH2 TIP3X3644 12.059 -22.034 -10.363 1.00 0.00 W1 O +ATOM 13420 H1 TIP3X3644 12.003 -22.949 -10.639 1.00 0.00 W1 H +ATOM 13421 H2 TIP3X3644 11.886 -21.532 -11.159 1.00 0.00 W1 H +ATOM 13422 OH2 TIP3X3645 12.356 -21.520 -3.338 1.00 0.00 W1 O +ATOM 13423 H1 TIP3X3645 11.453 -21.436 -3.030 1.00 0.00 W1 H +ATOM 13424 H2 TIP3X3645 12.524 -22.462 -3.335 1.00 0.00 W1 H +ATOM 13425 OH2 TIP3X3646 14.722 -23.561 -5.533 1.00 0.00 W1 O +ATOM 13426 H1 TIP3X3646 15.385 -24.241 -5.652 1.00 0.00 W1 H +ATOM 13427 H2 TIP3X3646 14.006 -24.000 -5.074 1.00 0.00 W1 H +ATOM 13428 OH2 TIP3X3647 3.867 -23.874 -0.388 1.00 0.00 W1 O +ATOM 13429 H1 TIP3X3647 3.338 -24.108 -1.151 1.00 0.00 W1 H +ATOM 13430 H2 TIP3X3647 4.762 -23.826 -0.723 1.00 0.00 W1 H +ATOM 13431 OH2 TIP3X3648 4.777 -20.668 -4.827 1.00 0.00 W1 O +ATOM 13432 H1 TIP3X3648 4.732 -21.223 -4.048 1.00 0.00 W1 H +ATOM 13433 H2 TIP3X3648 4.144 -19.969 -4.661 1.00 0.00 W1 H +ATOM 13434 OH2 TIP3X3649 13.449 -19.538 -5.077 1.00 0.00 W1 O +ATOM 13435 H1 TIP3X3649 13.872 -18.770 -4.693 1.00 0.00 W1 H +ATOM 13436 H2 TIP3X3649 13.145 -20.046 -4.325 1.00 0.00 W1 H +ATOM 13437 OH2 TIP3X3650 11.536 -17.562 -3.252 1.00 0.00 W1 O +ATOM 13438 H1 TIP3X3650 10.829 -18.191 -3.395 1.00 0.00 W1 H +ATOM 13439 H2 TIP3X3650 11.865 -17.368 -4.130 1.00 0.00 W1 H +ATOM 13440 OH2 TIP3X3651 11.787 -19.026 -0.856 1.00 0.00 W1 O +ATOM 13441 H1 TIP3X3651 11.154 -19.633 -1.240 1.00 0.00 W1 H +ATOM 13442 H2 TIP3X3651 11.901 -18.346 -1.520 1.00 0.00 W1 H +ATOM 13443 OH2 TIP3X3652 15.398 -17.118 -6.789 1.00 0.00 W1 O +ATOM 13444 H1 TIP3X3652 16.075 -17.276 -6.133 1.00 0.00 W1 H +ATOM 13445 H2 TIP3X3652 15.163 -17.989 -7.108 1.00 0.00 W1 H +ATOM 13446 OH2 TIP3X3653 5.954 -30.647 -8.397 1.00 0.00 W1 O +ATOM 13447 H1 TIP3X3653 5.662 -29.737 -8.457 1.00 0.00 W1 H +ATOM 13448 H2 TIP3X3653 6.786 -30.664 -8.870 1.00 0.00 W1 H +ATOM 13449 OH2 TIP3X3654 8.078 -20.700 -14.742 1.00 0.00 W1 O +ATOM 13450 H1 TIP3X3654 7.383 -21.322 -14.528 1.00 0.00 W1 H +ATOM 13451 H2 TIP3X3654 8.060 -20.064 -14.027 1.00 0.00 W1 H +ATOM 13452 OH2 TIP3X3655 15.458 -21.937 -15.306 1.00 0.00 W1 O +ATOM 13453 H1 TIP3X3655 15.195 -22.686 -15.839 1.00 0.00 W1 H +ATOM 13454 H2 TIP3X3655 15.204 -21.173 -15.823 1.00 0.00 W1 H +ATOM 13455 OH2 TIP3X3656 1.406 -18.240 -15.589 1.00 0.00 W1 O +ATOM 13456 H1 TIP3X3656 1.852 -18.789 -14.943 1.00 0.00 W1 H +ATOM 13457 H2 TIP3X3656 0.510 -18.574 -15.610 1.00 0.00 W1 H +ATOM 13458 OH2 TIP3X3657 13.500 -16.111 -14.330 1.00 0.00 W1 O +ATOM 13459 H1 TIP3X3657 14.385 -16.439 -14.489 1.00 0.00 W1 H +ATOM 13460 H2 TIP3X3657 13.270 -15.643 -15.133 1.00 0.00 W1 H +ATOM 13461 OH2 TIP3X3658 14.892 -20.449 -2.253 1.00 0.00 W1 O +ATOM 13462 H1 TIP3X3658 14.782 -19.500 -2.194 1.00 0.00 W1 H +ATOM 13463 H2 TIP3X3658 13.999 -20.794 -2.263 1.00 0.00 W1 H +ATOM 13464 OH2 TIP3X3659 1.578 -17.623 -12.634 1.00 0.00 W1 O +ATOM 13465 H1 TIP3X3659 1.510 -16.787 -12.174 1.00 0.00 W1 H +ATOM 13466 H2 TIP3X3659 0.683 -17.962 -12.651 1.00 0.00 W1 H +ATOM 13467 OH2 TIP3X3660 14.158 -19.130 -14.990 1.00 0.00 W1 O +ATOM 13468 H1 TIP3X3660 14.190 -19.210 -14.036 1.00 0.00 W1 H +ATOM 13469 H2 TIP3X3660 13.325 -18.693 -15.166 1.00 0.00 W1 H +ATOM 13470 OH2 TIP3X3661 10.529 -30.836 -2.106 1.00 0.00 W1 O +ATOM 13471 H1 TIP3X3661 10.222 -30.087 -2.618 1.00 0.00 W1 H +ATOM 13472 H2 TIP3X3661 10.583 -31.553 -2.738 1.00 0.00 W1 H +ATOM 13473 OH2 TIP3X3662 4.743 -16.919 -4.077 1.00 0.00 W1 O +ATOM 13474 H1 TIP3X3662 5.591 -16.681 -3.703 1.00 0.00 W1 H +ATOM 13475 H2 TIP3X3662 4.954 -17.299 -4.930 1.00 0.00 W1 H +ATOM 13476 OH2 TIP3X3663 3.209 -28.901 -0.726 1.00 0.00 W1 O +ATOM 13477 H1 TIP3X3663 2.332 -28.811 -0.352 1.00 0.00 W1 H +ATOM 13478 H2 TIP3X3663 3.272 -28.188 -1.363 1.00 0.00 W1 H +ATOM 13479 OH2 TIP3X3664 9.406 -26.954 -14.996 1.00 0.00 W1 O +ATOM 13480 H1 TIP3X3664 9.240 -26.657 -15.891 1.00 0.00 W1 H +ATOM 13481 H2 TIP3X3664 8.535 -27.077 -14.619 1.00 0.00 W1 H +ATOM 13482 OH2 TIP3X3665 14.804 -19.193 -11.948 1.00 0.00 W1 O +ATOM 13483 H1 TIP3X3665 15.377 -19.930 -11.735 1.00 0.00 W1 H +ATOM 13484 H2 TIP3X3665 14.473 -18.894 -11.101 1.00 0.00 W1 H +ATOM 13485 OH2 TIP3X3666 10.065 -30.157 -15.019 1.00 0.00 W1 O +ATOM 13486 H1 TIP3X3666 10.797 -29.541 -14.994 1.00 0.00 W1 H +ATOM 13487 H2 TIP3X3666 10.306 -30.790 -15.695 1.00 0.00 W1 H +ATOM 13488 OH2 TIP3X3667 14.597 -30.064 -4.754 1.00 0.00 W1 O +ATOM 13489 H1 TIP3X3667 15.089 -30.693 -4.226 1.00 0.00 W1 H +ATOM 13490 H2 TIP3X3667 15.197 -29.821 -5.459 1.00 0.00 W1 H +ATOM 13491 OH2 TIP3X3668 2.104 -20.843 -8.676 1.00 0.00 W1 O +ATOM 13492 H1 TIP3X3668 1.436 -20.520 -8.071 1.00 0.00 W1 H +ATOM 13493 H2 TIP3X3668 2.896 -20.913 -8.144 1.00 0.00 W1 H +ATOM 13494 OH2 TIP3X3669 7.101 -19.424 -1.565 1.00 0.00 W1 O +ATOM 13495 H1 TIP3X3669 7.324 -19.802 -0.715 1.00 0.00 W1 H +ATOM 13496 H2 TIP3X3669 6.494 -20.053 -1.956 1.00 0.00 W1 H +ATOM 13497 OH2 TIP3X3670 10.580 -28.119 -6.153 1.00 0.00 W1 O +ATOM 13498 H1 TIP3X3670 10.639 -28.301 -5.215 1.00 0.00 W1 H +ATOM 13499 H2 TIP3X3670 9.642 -28.032 -6.321 1.00 0.00 W1 H +ATOM 13500 OH2 TIP3X3671 6.772 -27.463 -1.974 1.00 0.00 W1 O +ATOM 13501 H1 TIP3X3671 5.905 -27.533 -2.374 1.00 0.00 W1 H +ATOM 13502 H2 TIP3X3671 6.717 -28.003 -1.186 1.00 0.00 W1 H +ATOM 13503 OH2 TIP3X3672 14.258 -24.742 -0.221 1.00 0.00 W1 O +ATOM 13504 H1 TIP3X3672 15.052 -25.276 -0.237 1.00 0.00 W1 H +ATOM 13505 H2 TIP3X3672 13.964 -24.777 0.690 1.00 0.00 W1 H +ATOM 13506 OH2 TIP3X3673 2.443 -30.875 -4.302 1.00 0.00 W1 O +ATOM 13507 H1 TIP3X3673 2.217 -30.422 -5.115 1.00 0.00 W1 H +ATOM 13508 H2 TIP3X3673 3.273 -31.312 -4.494 1.00 0.00 W1 H +ATOM 13509 OH2 TIP3X3674 8.538 -30.418 -9.221 1.00 0.00 W1 O +ATOM 13510 H1 TIP3X3674 9.020 -29.904 -9.868 1.00 0.00 W1 H +ATOM 13511 H2 TIP3X3674 8.882 -30.124 -8.377 1.00 0.00 W1 H +ATOM 13512 OH2 TIP3X3675 3.008 -25.826 -14.068 1.00 0.00 W1 O +ATOM 13513 H1 TIP3X3675 3.430 -25.180 -14.634 1.00 0.00 W1 H +ATOM 13514 H2 TIP3X3675 3.720 -26.401 -13.787 1.00 0.00 W1 H +ATOM 13515 OH2 TIP3X3676 3.532 -25.170 -4.757 1.00 0.00 W1 O +ATOM 13516 H1 TIP3X3676 3.448 -24.378 -4.225 1.00 0.00 W1 H +ATOM 13517 H2 TIP3X3676 4.447 -25.174 -5.037 1.00 0.00 W1 H +ATOM 13518 OH2 TIP3X3677 2.715 -24.451 -11.571 1.00 0.00 W1 O +ATOM 13519 H1 TIP3X3677 2.778 -24.740 -12.482 1.00 0.00 W1 H +ATOM 13520 H2 TIP3X3677 3.490 -23.906 -11.438 1.00 0.00 W1 H +ATOM 13521 OH2 TIP3X3678 11.735 -27.882 -13.811 1.00 0.00 W1 O +ATOM 13522 H1 TIP3X3678 11.028 -27.393 -14.231 1.00 0.00 W1 H +ATOM 13523 H2 TIP3X3678 12.460 -27.838 -14.435 1.00 0.00 W1 H +ATOM 13524 OH2 TIP3X3679 0.286 -26.995 -2.723 1.00 0.00 W1 O +ATOM 13525 H1 TIP3X3679 -0.619 -26.701 -2.612 1.00 0.00 W1 H +ATOM 13526 H2 TIP3X3679 0.426 -27.614 -2.007 1.00 0.00 W1 H +ATOM 13527 OH2 TIP3X3680 1.429 -30.158 -6.741 1.00 0.00 W1 O +ATOM 13528 H1 TIP3X3680 1.536 -30.859 -7.383 1.00 0.00 W1 H +ATOM 13529 H2 TIP3X3680 1.564 -29.352 -7.240 1.00 0.00 W1 H +ATOM 13530 OH2 TIP3X3681 12.951 -26.530 -1.853 1.00 0.00 W1 O +ATOM 13531 H1 TIP3X3681 13.262 -25.951 -1.157 1.00 0.00 W1 H +ATOM 13532 H2 TIP3X3681 12.007 -26.594 -1.708 1.00 0.00 W1 H +ATOM 13533 OH2 TIP3X3682 9.994 -26.524 -1.906 1.00 0.00 W1 O +ATOM 13534 H1 TIP3X3682 9.634 -25.956 -2.587 1.00 0.00 W1 H +ATOM 13535 H2 TIP3X3682 9.656 -27.394 -2.117 1.00 0.00 W1 H +ATOM 13536 OH2 TIP3X3683 8.197 -26.055 -12.041 1.00 0.00 W1 O +ATOM 13537 H1 TIP3X3683 8.286 -25.475 -12.797 1.00 0.00 W1 H +ATOM 13538 H2 TIP3X3683 7.427 -26.589 -12.237 1.00 0.00 W1 H +ATOM 13539 OH2 TIP3X3684 6.500 -26.723 -14.353 1.00 0.00 W1 O +ATOM 13540 H1 TIP3X3684 6.062 -26.531 -15.183 1.00 0.00 W1 H +ATOM 13541 H2 TIP3X3684 6.093 -27.534 -14.050 1.00 0.00 W1 H +ATOM 13542 OH2 TIP3X3685 7.210 -29.661 -0.564 1.00 0.00 W1 O +ATOM 13543 H1 TIP3X3685 6.744 -30.048 0.176 1.00 0.00 W1 H +ATOM 13544 H2 TIP3X3685 8.124 -29.629 -0.282 1.00 0.00 W1 H +ATOM 13545 OH2 TIP3X3686 12.773 -24.317 -3.883 1.00 0.00 W1 O +ATOM 13546 H1 TIP3X3686 12.793 -24.966 -3.180 1.00 0.00 W1 H +ATOM 13547 H2 TIP3X3686 11.939 -24.468 -4.327 1.00 0.00 W1 H +ATOM 13548 OH2 TIP3X3687 0.848 -27.216 -15.413 1.00 0.00 W1 O +ATOM 13549 H1 TIP3X3687 0.092 -27.409 -14.859 1.00 0.00 W1 H +ATOM 13550 H2 TIP3X3687 1.382 -26.618 -14.891 1.00 0.00 W1 H +ATOM 13551 OH2 TIP3X3688 0.767 -15.723 -14.926 1.00 0.00 W1 O +ATOM 13552 H1 TIP3X3688 1.183 -16.470 -14.497 1.00 0.00 W1 H +ATOM 13553 H2 TIP3X3688 0.780 -15.029 -14.267 1.00 0.00 W1 H +ATOM 13554 OH2 TIP3X3689 9.515 -27.563 -9.933 1.00 0.00 W1 O +ATOM 13555 H1 TIP3X3689 9.178 -27.212 -10.758 1.00 0.00 W1 H +ATOM 13556 H2 TIP3X3689 10.411 -27.830 -10.135 1.00 0.00 W1 H +ATOM 13557 OH2 TIP3X3690 4.970 -28.252 -8.189 1.00 0.00 W1 O +ATOM 13558 H1 TIP3X3690 4.028 -28.299 -8.348 1.00 0.00 W1 H +ATOM 13559 H2 TIP3X3690 5.109 -27.378 -7.826 1.00 0.00 W1 H +ATOM 13560 OH2 TIP3X3691 0.332 -27.126 -11.396 1.00 0.00 W1 O +ATOM 13561 H1 TIP3X3691 0.058 -27.251 -10.487 1.00 0.00 W1 H +ATOM 13562 H2 TIP3X3691 0.138 -26.208 -11.582 1.00 0.00 W1 H +ATOM 13563 OH2 TIP3X3692 4.333 -27.799 -3.335 1.00 0.00 W1 O +ATOM 13564 H1 TIP3X3692 4.355 -28.605 -3.851 1.00 0.00 W1 H +ATOM 13565 H2 TIP3X3692 3.939 -27.151 -3.920 1.00 0.00 W1 H +ATOM 13566 OH2 TIP3X3693 4.916 -21.264 -7.531 1.00 0.00 W1 O +ATOM 13567 H1 TIP3X3693 4.844 -22.199 -7.718 1.00 0.00 W1 H +ATOM 13568 H2 TIP3X3693 4.920 -21.210 -6.575 1.00 0.00 W1 H +ATOM 13569 OH2 TIP3X3694 9.105 -24.245 -2.968 1.00 0.00 W1 O +ATOM 13570 H1 TIP3X3694 9.517 -23.413 -2.732 1.00 0.00 W1 H +ATOM 13571 H2 TIP3X3694 8.555 -24.034 -3.723 1.00 0.00 W1 H +ATOM 13572 OH2 TIP3X3695 14.900 -28.878 -13.644 1.00 0.00 W1 O +ATOM 13573 H1 TIP3X3695 15.335 -28.651 -12.822 1.00 0.00 W1 H +ATOM 13574 H2 TIP3X3695 14.380 -29.654 -13.434 1.00 0.00 W1 H +ATOM 13575 OH2 TIP3X3696 6.055 -22.918 -14.466 1.00 0.00 W1 O +ATOM 13576 H1 TIP3X3696 5.766 -23.040 -13.561 1.00 0.00 W1 H +ATOM 13577 H2 TIP3X3696 6.744 -23.572 -14.587 1.00 0.00 W1 H +ATOM 13578 OH2 TIP3X3697 12.758 -24.402 -13.398 1.00 0.00 W1 O +ATOM 13579 H1 TIP3X3697 11.893 -24.601 -13.039 1.00 0.00 W1 H +ATOM 13580 H2 TIP3X3697 13.315 -24.281 -12.629 1.00 0.00 W1 H +ATOM 13581 OH2 TIP3X3698 7.591 -24.148 -6.927 1.00 0.00 W1 O +ATOM 13582 H1 TIP3X3698 7.688 -23.351 -6.406 1.00 0.00 W1 H +ATOM 13583 H2 TIP3X3698 8.466 -24.538 -6.936 1.00 0.00 W1 H +ATOM 13584 OH2 TIP3X3699 7.336 -23.766 -10.011 1.00 0.00 W1 O +ATOM 13585 H1 TIP3X3699 7.958 -24.363 -10.429 1.00 0.00 W1 H +ATOM 13586 H2 TIP3X3699 7.362 -24.004 -9.084 1.00 0.00 W1 H +ATOM 13587 OH2 TIP3X3700 10.231 -22.151 -1.075 1.00 0.00 W1 O +ATOM 13588 H1 TIP3X3700 9.553 -21.867 -0.462 1.00 0.00 W1 H +ATOM 13589 H2 TIP3X3700 11.029 -22.191 -0.549 1.00 0.00 W1 H +ATOM 13590 OH2 TIP3X3701 2.741 -22.735 -3.379 1.00 0.00 W1 O +ATOM 13591 H1 TIP3X3701 3.258 -22.330 -2.683 1.00 0.00 W1 H +ATOM 13592 H2 TIP3X3701 2.358 -21.998 -3.855 1.00 0.00 W1 H +ATOM 13593 OH2 TIP3X3702 1.647 -24.773 -1.758 1.00 0.00 W1 O +ATOM 13594 H1 TIP3X3702 1.443 -25.613 -2.170 1.00 0.00 W1 H +ATOM 13595 H2 TIP3X3702 1.524 -24.127 -2.453 1.00 0.00 W1 H +ATOM 13596 OH2 TIP3X3703 1.540 -23.900 -8.934 1.00 0.00 W1 O +ATOM 13597 H1 TIP3X3703 1.896 -23.028 -9.104 1.00 0.00 W1 H +ATOM 13598 H2 TIP3X3703 1.438 -24.291 -9.802 1.00 0.00 W1 H +ATOM 13599 OH2 TIP3X3704 12.299 -21.635 -14.748 1.00 0.00 W1 O +ATOM 13600 H1 TIP3X3704 13.004 -21.137 -15.160 1.00 0.00 W1 H +ATOM 13601 H2 TIP3X3704 12.748 -22.266 -14.184 1.00 0.00 W1 H +ATOM 13602 OH2 TIP3X3705 14.895 -24.288 -11.385 1.00 0.00 W1 O +ATOM 13603 H1 TIP3X3705 14.608 -24.115 -10.489 1.00 0.00 W1 H +ATOM 13604 H2 TIP3X3705 15.408 -23.516 -11.626 1.00 0.00 W1 H +ATOM 13605 OH2 TIP3X3706 1.393 -25.171 -6.663 1.00 0.00 W1 O +ATOM 13606 H1 TIP3X3706 1.487 -24.493 -7.332 1.00 0.00 W1 H +ATOM 13607 H2 TIP3X3706 2.051 -24.952 -6.004 1.00 0.00 W1 H +ATOM 13608 OH2 TIP3X3707 4.180 -16.664 -13.399 1.00 0.00 W1 O +ATOM 13609 H1 TIP3X3707 3.951 -16.304 -14.256 1.00 0.00 W1 H +ATOM 13610 H2 TIP3X3707 3.767 -17.527 -13.383 1.00 0.00 W1 H +ATOM 13611 OH2 TIP3X3708 2.955 -21.431 -14.901 1.00 0.00 W1 O +ATOM 13612 H1 TIP3X3708 2.139 -21.721 -15.310 1.00 0.00 W1 H +ATOM 13613 H2 TIP3X3708 3.487 -22.225 -14.840 1.00 0.00 W1 H +ATOM 13614 OH2 TIP3X3709 4.373 -20.592 -1.826 1.00 0.00 W1 O +ATOM 13615 H1 TIP3X3709 3.800 -19.990 -2.301 1.00 0.00 W1 H +ATOM 13616 H2 TIP3X3709 3.899 -20.788 -1.018 1.00 0.00 W1 H +ATOM 13617 OH2 TIP3X3710 7.449 -15.849 -4.136 1.00 0.00 W1 O +ATOM 13618 H1 TIP3X3710 7.766 -16.143 -3.282 1.00 0.00 W1 H +ATOM 13619 H2 TIP3X3710 7.882 -16.426 -4.765 1.00 0.00 W1 H +ATOM 13620 OH2 TIP3X3711 12.155 -15.607 -10.002 1.00 0.00 W1 O +ATOM 13621 H1 TIP3X3711 11.742 -16.298 -10.521 1.00 0.00 W1 H +ATOM 13622 H2 TIP3X3711 11.959 -14.800 -10.479 1.00 0.00 W1 H +ATOM 13623 OH2 TIP3X3712 8.733 -18.925 -12.750 1.00 0.00 W1 O +ATOM 13624 H1 TIP3X3712 8.992 -18.139 -13.232 1.00 0.00 W1 H +ATOM 13625 H2 TIP3X3712 8.163 -18.601 -12.052 1.00 0.00 W1 H +ATOM 13626 OH2 TIP3X3713 8.750 -23.770 -13.679 1.00 0.00 W1 O +ATOM 13627 H1 TIP3X3713 9.573 -23.697 -14.162 1.00 0.00 W1 H +ATOM 13628 H2 TIP3X3713 8.757 -23.026 -13.077 1.00 0.00 W1 H +ATOM 13629 OH2 TIP3X3714 12.151 -29.047 -3.888 1.00 0.00 W1 O +ATOM 13630 H1 TIP3X3714 12.956 -29.277 -4.351 1.00 0.00 W1 H +ATOM 13631 H2 TIP3X3714 12.442 -28.494 -3.163 1.00 0.00 W1 H +ATOM 13632 OH2 TIP3X3715 0.116 -21.945 -12.482 1.00 0.00 W1 O +ATOM 13633 H1 TIP3X3715 -0.037 -21.853 -13.422 1.00 0.00 W1 H +ATOM 13634 H2 TIP3X3715 1.070 -21.945 -12.393 1.00 0.00 W1 H +ATOM 13635 OH2 TIP3X3716 10.878 -22.357 -5.886 1.00 0.00 W1 O +ATOM 13636 H1 TIP3X3716 11.424 -21.696 -5.460 1.00 0.00 W1 H +ATOM 13637 H2 TIP3X3716 11.337 -22.558 -6.701 1.00 0.00 W1 H +ATOM 13638 OH2 TIP3X3717 9.700 -17.384 -14.808 1.00 0.00 W1 O +ATOM 13639 H1 TIP3X3717 10.525 -17.348 -14.324 1.00 0.00 W1 H +ATOM 13640 H2 TIP3X3717 9.904 -17.896 -15.591 1.00 0.00 W1 H +ATOM 13641 OH2 TIP3X3718 9.693 -19.596 -3.157 1.00 0.00 W1 O +ATOM 13642 H1 TIP3X3718 8.872 -19.349 -2.731 1.00 0.00 W1 H +ATOM 13643 H2 TIP3X3718 9.463 -19.692 -4.082 1.00 0.00 W1 H +ATOM 13644 OH2 TIP3X3719 6.318 -19.371 -11.271 1.00 0.00 W1 O +ATOM 13645 H1 TIP3X3719 5.611 -19.224 -11.899 1.00 0.00 W1 H +ATOM 13646 H2 TIP3X3719 5.981 -19.027 -10.444 1.00 0.00 W1 H +ATOM 13647 OH2 TIP3X3720 2.883 -18.459 -2.559 1.00 0.00 W1 O +ATOM 13648 H1 TIP3X3720 3.617 -17.848 -2.624 1.00 0.00 W1 H +ATOM 13649 H2 TIP3X3720 2.571 -18.365 -1.660 1.00 0.00 W1 H +ATOM 13650 OH2 TIP3X3721 2.473 -16.755 -8.458 1.00 0.00 W1 O +ATOM 13651 H1 TIP3X3721 1.887 -17.496 -8.611 1.00 0.00 W1 H +ATOM 13652 H2 TIP3X3721 2.916 -16.621 -9.296 1.00 0.00 W1 H +ATOM 13653 OH2 TIP3X3722 10.826 -30.741 -7.377 1.00 0.00 W1 O +ATOM 13654 H1 TIP3X3722 11.158 -30.816 -8.272 1.00 0.00 W1 H +ATOM 13655 H2 TIP3X3722 10.781 -29.799 -7.216 1.00 0.00 W1 H +ATOM 13656 OH2 TIP3X3723 8.064 -28.612 -7.143 1.00 0.00 W1 O +ATOM 13657 H1 TIP3X3723 7.702 -28.123 -7.882 1.00 0.00 W1 H +ATOM 13658 H2 TIP3X3723 7.332 -28.702 -6.533 1.00 0.00 W1 H +ATOM 13659 OH2 TIP3X3724 6.783 -30.628 -13.215 1.00 0.00 W1 O +ATOM 13660 H1 TIP3X3724 7.639 -30.883 -12.869 1.00 0.00 W1 H +ATOM 13661 H2 TIP3X3724 6.265 -31.432 -13.190 1.00 0.00 W1 H +ATOM 13662 OH2 TIP3X3725 9.535 -30.784 -12.171 1.00 0.00 W1 O +ATOM 13663 H1 TIP3X3725 9.990 -31.520 -11.763 1.00 0.00 W1 H +ATOM 13664 H2 TIP3X3725 9.942 -30.698 -13.033 1.00 0.00 W1 H +ATOM 13665 OH2 TIP3X3726 9.181 -17.511 -10.416 1.00 0.00 W1 O +ATOM 13666 H1 TIP3X3726 9.842 -18.153 -10.156 1.00 0.00 W1 H +ATOM 13667 H2 TIP3X3726 9.168 -16.877 -9.700 1.00 0.00 W1 H +ATOM 13668 OH2 TIP3X3727 6.920 -16.609 -1.507 1.00 0.00 W1 O +ATOM 13669 H1 TIP3X3727 7.138 -17.501 -1.236 1.00 0.00 W1 H +ATOM 13670 H2 TIP3X3727 7.528 -16.055 -1.017 1.00 0.00 W1 H +ATOM 13671 OH2 TIP3X3728 5.867 -28.491 -11.462 1.00 0.00 W1 O +ATOM 13672 H1 TIP3X3728 6.524 -29.150 -11.685 1.00 0.00 W1 H +ATOM 13673 H2 TIP3X3728 5.909 -28.422 -10.508 1.00 0.00 W1 H +ATOM 13674 OH2 TIP3X3729 0.580 -30.152 -2.006 1.00 0.00 W1 O +ATOM 13675 H1 TIP3X3729 1.328 -30.348 -2.570 1.00 0.00 W1 H +ATOM 13676 H2 TIP3X3729 0.788 -30.578 -1.175 1.00 0.00 W1 H +ATOM 13677 OH2 TIP3X3730 11.699 -17.425 -12.405 1.00 0.00 W1 O +ATOM 13678 H1 TIP3X3730 11.844 -18.365 -12.302 1.00 0.00 W1 H +ATOM 13679 H2 TIP3X3730 12.523 -17.093 -12.762 1.00 0.00 W1 H +ATOM 13680 OH2 TIP3X3731 13.367 -30.659 -1.178 1.00 0.00 W1 O +ATOM 13681 H1 TIP3X3731 12.753 -30.585 -1.908 1.00 0.00 W1 H +ATOM 13682 H2 TIP3X3731 14.137 -30.164 -1.459 1.00 0.00 W1 H +ATOM 13683 OH2 TIP3X3732 4.161 -16.446 -10.691 1.00 0.00 W1 O +ATOM 13684 H1 TIP3X3732 4.154 -16.401 -11.647 1.00 0.00 W1 H +ATOM 13685 H2 TIP3X3732 4.968 -16.000 -10.435 1.00 0.00 W1 H +ATOM 13686 OH2 TIP3X3733 15.070 -17.507 -2.742 1.00 0.00 W1 O +ATOM 13687 H1 TIP3X3733 14.347 -16.956 -2.441 1.00 0.00 W1 H +ATOM 13688 H2 TIP3X3733 15.858 -17.008 -2.528 1.00 0.00 W1 H +ATOM 13689 OH2 TIP3X3734 2.695 -28.185 -11.062 1.00 0.00 W1 O +ATOM 13690 H1 TIP3X3734 2.052 -27.797 -11.654 1.00 0.00 W1 H +ATOM 13691 H2 TIP3X3734 3.498 -27.688 -11.220 1.00 0.00 W1 H +ATOM 13692 OH2 TIP3X3735 4.124 -19.586 -13.330 1.00 0.00 W1 O +ATOM 13693 H1 TIP3X3735 4.085 -20.214 -14.052 1.00 0.00 W1 H +ATOM 13694 H2 TIP3X3735 3.405 -19.840 -12.752 1.00 0.00 W1 H +ATOM 13695 OH2 TIP3X3736 2.019 -20.058 4.309 1.00 0.00 W1 O +ATOM 13696 H1 TIP3X3736 2.201 -20.134 5.246 1.00 0.00 W1 H +ATOM 13697 H2 TIP3X3736 1.995 -19.116 4.145 1.00 0.00 W1 H +ATOM 13698 OH2 TIP3X3737 13.121 -22.567 8.047 1.00 0.00 W1 O +ATOM 13699 H1 TIP3X3737 13.356 -22.303 7.158 1.00 0.00 W1 H +ATOM 13700 H2 TIP3X3737 13.950 -22.831 8.446 1.00 0.00 W1 H +ATOM 13701 OH2 TIP3X3738 5.105 -22.844 4.026 1.00 0.00 W1 O +ATOM 13702 H1 TIP3X3738 5.136 -21.934 4.323 1.00 0.00 W1 H +ATOM 13703 H2 TIP3X3738 5.613 -23.327 4.678 1.00 0.00 W1 H +ATOM 13704 OH2 TIP3X3739 12.908 -18.684 6.169 1.00 0.00 W1 O +ATOM 13705 H1 TIP3X3739 12.634 -18.194 6.944 1.00 0.00 W1 H +ATOM 13706 H2 TIP3X3739 12.383 -19.484 6.192 1.00 0.00 W1 H +ATOM 13707 OH2 TIP3X3740 11.425 -20.241 3.212 1.00 0.00 W1 O +ATOM 13708 H1 TIP3X3740 11.587 -20.470 2.297 1.00 0.00 W1 H +ATOM 13709 H2 TIP3X3740 10.496 -20.012 3.242 1.00 0.00 W1 H +ATOM 13710 OH2 TIP3X3741 15.273 -19.709 7.997 1.00 0.00 W1 O +ATOM 13711 H1 TIP3X3741 14.721 -19.626 7.219 1.00 0.00 W1 H +ATOM 13712 H2 TIP3X3741 14.662 -19.926 8.702 1.00 0.00 W1 H +ATOM 13713 OH2 TIP3X3742 1.909 -18.445 10.448 1.00 0.00 W1 O +ATOM 13714 H1 TIP3X3742 2.315 -18.242 11.291 1.00 0.00 W1 H +ATOM 13715 H2 TIP3X3742 1.338 -19.191 10.630 1.00 0.00 W1 H +ATOM 13716 OH2 TIP3X3743 9.284 -16.820 9.674 1.00 0.00 W1 O +ATOM 13717 H1 TIP3X3743 9.585 -17.721 9.796 1.00 0.00 W1 H +ATOM 13718 H2 TIP3X3743 9.909 -16.440 9.057 1.00 0.00 W1 H +ATOM 13719 OH2 TIP3X3744 12.717 -16.863 9.554 1.00 0.00 W1 O +ATOM 13720 H1 TIP3X3744 12.281 -16.040 9.334 1.00 0.00 W1 H +ATOM 13721 H2 TIP3X3744 13.646 -16.638 9.603 1.00 0.00 W1 H +ATOM 13722 OH2 TIP3X3745 5.165 -17.289 8.683 1.00 0.00 W1 O +ATOM 13723 H1 TIP3X3745 5.520 -16.440 8.420 1.00 0.00 W1 H +ATOM 13724 H2 TIP3X3745 4.230 -17.229 8.487 1.00 0.00 W1 H +ATOM 13725 OH2 TIP3X3746 10.006 -25.396 7.585 1.00 0.00 W1 O +ATOM 13726 H1 TIP3X3746 9.929 -26.206 7.080 1.00 0.00 W1 H +ATOM 13727 H2 TIP3X3746 10.949 -25.257 7.672 1.00 0.00 W1 H +ATOM 13728 OH2 TIP3X3747 6.029 -29.299 9.947 1.00 0.00 W1 O +ATOM 13729 H1 TIP3X3747 6.287 -30.036 10.500 1.00 0.00 W1 H +ATOM 13730 H2 TIP3X3747 5.353 -29.655 9.371 1.00 0.00 W1 H +ATOM 13731 OH2 TIP3X3748 14.273 -28.294 6.370 1.00 0.00 W1 O +ATOM 13732 H1 TIP3X3748 13.965 -27.956 7.211 1.00 0.00 W1 H +ATOM 13733 H2 TIP3X3748 14.341 -29.240 6.501 1.00 0.00 W1 H +ATOM 13734 OH2 TIP3X3749 12.870 -27.099 8.324 1.00 0.00 W1 O +ATOM 13735 H1 TIP3X3749 13.446 -27.327 9.054 1.00 0.00 W1 H +ATOM 13736 H2 TIP3X3749 11.996 -27.353 8.618 1.00 0.00 W1 H +ATOM 13737 OH2 TIP3X3750 5.917 -25.974 9.695 1.00 0.00 W1 O +ATOM 13738 H1 TIP3X3750 6.420 -26.677 10.107 1.00 0.00 W1 H +ATOM 13739 H2 TIP3X3750 6.574 -25.332 9.428 1.00 0.00 W1 H +ATOM 13740 OH2 TIP3X3751 13.394 -24.926 6.592 1.00 0.00 W1 O +ATOM 13741 H1 TIP3X3751 13.435 -25.826 6.916 1.00 0.00 W1 H +ATOM 13742 H2 TIP3X3751 13.276 -24.393 7.379 1.00 0.00 W1 H +ATOM 13743 OH2 TIP3X3752 12.078 -28.283 4.461 1.00 0.00 W1 O +ATOM 13744 H1 TIP3X3752 12.903 -28.098 4.910 1.00 0.00 W1 H +ATOM 13745 H2 TIP3X3752 12.155 -27.828 3.622 1.00 0.00 W1 H +ATOM 13746 OH2 TIP3X3753 8.261 -22.311 10.532 1.00 0.00 W1 O +ATOM 13747 H1 TIP3X3753 9.138 -22.289 10.149 1.00 0.00 W1 H +ATOM 13748 H2 TIP3X3753 7.995 -21.393 10.578 1.00 0.00 W1 H +ATOM 13749 OH2 TIP3X3754 7.411 -19.763 10.342 1.00 0.00 W1 O +ATOM 13750 H1 TIP3X3754 7.387 -19.536 9.413 1.00 0.00 W1 H +ATOM 13751 H2 TIP3X3754 6.491 -19.817 10.601 1.00 0.00 W1 H +ATOM 13752 OH2 TIP3X3755 2.274 -27.882 7.180 1.00 0.00 W1 O +ATOM 13753 H1 TIP3X3755 1.949 -27.002 7.371 1.00 0.00 W1 H +ATOM 13754 H2 TIP3X3755 2.151 -27.984 6.237 1.00 0.00 W1 H +ATOM 13755 OH2 TIP3X3756 4.430 -24.324 7.193 1.00 0.00 W1 O +ATOM 13756 H1 TIP3X3756 3.747 -24.774 6.696 1.00 0.00 W1 H +ATOM 13757 H2 TIP3X3756 4.916 -25.028 7.624 1.00 0.00 W1 H +ATOM 13758 OH2 TIP3X3757 10.486 -19.400 9.589 1.00 0.00 W1 O +ATOM 13759 H1 TIP3X3757 10.244 -19.986 8.872 1.00 0.00 W1 H +ATOM 13760 H2 TIP3X3757 11.436 -19.489 9.662 1.00 0.00 W1 H +ATOM 13761 OH2 TIP3X3758 14.784 -15.765 6.370 1.00 0.00 W1 O +ATOM 13762 H1 TIP3X3758 14.778 -16.233 7.205 1.00 0.00 W1 H +ATOM 13763 H2 TIP3X3758 13.903 -15.894 6.017 1.00 0.00 W1 H +ATOM 13764 OH2 TIP3X3759 6.656 -19.429 7.392 1.00 0.00 W1 O +ATOM 13765 H1 TIP3X3759 6.084 -20.148 7.661 1.00 0.00 W1 H +ATOM 13766 H2 TIP3X3759 6.195 -18.638 7.674 1.00 0.00 W1 H +ATOM 13767 OH2 TIP3X3760 8.877 -28.977 11.962 1.00 0.00 W1 O +ATOM 13768 H1 TIP3X3760 8.135 -28.498 12.329 1.00 0.00 W1 H +ATOM 13769 H2 TIP3X3760 8.497 -29.789 11.628 1.00 0.00 W1 H +ATOM 13770 OH2 TIP3X3761 4.229 -28.272 1.764 1.00 0.00 W1 O +ATOM 13771 H1 TIP3X3761 4.131 -28.934 2.448 1.00 0.00 W1 H +ATOM 13772 H2 TIP3X3761 4.046 -28.741 0.949 1.00 0.00 W1 H +ATOM 13773 OH2 TIP3X3762 15.123 -27.350 9.953 1.00 0.00 W1 O +ATOM 13774 H1 TIP3X3762 15.642 -26.682 9.506 1.00 0.00 W1 H +ATOM 13775 H2 TIP3X3762 15.565 -27.475 10.793 1.00 0.00 W1 H +ATOM 13776 OH2 TIP3X3763 1.181 -30.998 4.113 1.00 0.00 W1 O +ATOM 13777 H1 TIP3X3763 1.906 -30.377 4.182 1.00 0.00 W1 H +ATOM 13778 H2 TIP3X3763 0.808 -31.031 4.995 1.00 0.00 W1 H +ATOM 13779 OH2 TIP3X3764 6.447 -24.762 14.100 1.00 0.00 W1 O +ATOM 13780 H1 TIP3X3764 7.311 -24.364 13.998 1.00 0.00 W1 H +ATOM 13781 H2 TIP3X3764 6.599 -25.699 13.977 1.00 0.00 W1 H +ATOM 13782 OH2 TIP3X3765 9.613 -19.852 6.839 1.00 0.00 W1 O +ATOM 13783 H1 TIP3X3765 9.707 -20.715 6.436 1.00 0.00 W1 H +ATOM 13784 H2 TIP3X3765 8.680 -19.652 6.763 1.00 0.00 W1 H +ATOM 13785 OH2 TIP3X3766 8.225 -21.568 4.370 1.00 0.00 W1 O +ATOM 13786 H1 TIP3X3766 7.660 -22.182 4.840 1.00 0.00 W1 H +ATOM 13787 H2 TIP3X3766 7.751 -20.737 4.398 1.00 0.00 W1 H +ATOM 13788 OH2 TIP3X3767 0.762 -21.055 10.827 1.00 0.00 W1 O +ATOM 13789 H1 TIP3X3767 0.228 -21.657 10.309 1.00 0.00 W1 H +ATOM 13790 H2 TIP3X3767 0.292 -20.969 11.656 1.00 0.00 W1 H +ATOM 13791 OH2 TIP3X3768 12.059 -22.034 5.195 1.00 0.00 W1 O +ATOM 13792 H1 TIP3X3768 12.003 -22.949 4.918 1.00 0.00 W1 H +ATOM 13793 H2 TIP3X3768 11.886 -21.532 4.399 1.00 0.00 W1 H +ATOM 13794 OH2 TIP3X3769 12.356 -21.520 12.219 1.00 0.00 W1 O +ATOM 13795 H1 TIP3X3769 11.453 -21.436 12.527 1.00 0.00 W1 H +ATOM 13796 H2 TIP3X3769 12.524 -22.462 12.223 1.00 0.00 W1 H +ATOM 13797 OH2 TIP3X3770 14.722 -23.561 10.025 1.00 0.00 W1 O +ATOM 13798 H1 TIP3X3770 15.385 -24.241 9.906 1.00 0.00 W1 H +ATOM 13799 H2 TIP3X3770 14.006 -24.000 10.484 1.00 0.00 W1 H +ATOM 13800 OH2 TIP3X3771 3.867 -23.874 15.169 1.00 0.00 W1 O +ATOM 13801 H1 TIP3X3771 3.338 -24.108 14.407 1.00 0.00 W1 H +ATOM 13802 H2 TIP3X3771 4.762 -23.826 14.835 1.00 0.00 W1 H +ATOM 13803 OH2 TIP3X3772 4.777 -20.668 10.731 1.00 0.00 W1 O +ATOM 13804 H1 TIP3X3772 4.732 -21.223 11.509 1.00 0.00 W1 H +ATOM 13805 H2 TIP3X3772 4.144 -19.969 10.897 1.00 0.00 W1 H +ATOM 13806 OH2 TIP3X3773 13.449 -19.538 10.480 1.00 0.00 W1 O +ATOM 13807 H1 TIP3X3773 13.872 -18.770 10.864 1.00 0.00 W1 H +ATOM 13808 H2 TIP3X3773 13.145 -20.046 11.233 1.00 0.00 W1 H +ATOM 13809 OH2 TIP3X3774 11.536 -17.562 12.305 1.00 0.00 W1 O +ATOM 13810 H1 TIP3X3774 10.829 -18.191 12.163 1.00 0.00 W1 H +ATOM 13811 H2 TIP3X3774 11.865 -17.368 11.428 1.00 0.00 W1 H +ATOM 13812 OH2 TIP3X3775 11.787 -19.026 14.702 1.00 0.00 W1 O +ATOM 13813 H1 TIP3X3775 11.154 -19.633 14.318 1.00 0.00 W1 H +ATOM 13814 H2 TIP3X3775 11.901 -18.346 14.038 1.00 0.00 W1 H +ATOM 13815 OH2 TIP3X3776 15.398 -17.118 8.768 1.00 0.00 W1 O +ATOM 13816 H1 TIP3X3776 16.075 -17.276 9.425 1.00 0.00 W1 H +ATOM 13817 H2 TIP3X3776 15.163 -17.989 8.449 1.00 0.00 W1 H +ATOM 13818 OH2 TIP3X3777 5.954 -30.647 7.161 1.00 0.00 W1 O +ATOM 13819 H1 TIP3X3777 5.662 -29.737 7.100 1.00 0.00 W1 H +ATOM 13820 H2 TIP3X3777 6.786 -30.664 6.688 1.00 0.00 W1 H +ATOM 13821 OH2 TIP3X3778 8.078 -20.700 0.815 1.00 0.00 W1 O +ATOM 13822 H1 TIP3X3778 7.383 -21.322 1.030 1.00 0.00 W1 H +ATOM 13823 H2 TIP3X3778 8.060 -20.064 1.530 1.00 0.00 W1 H +ATOM 13824 OH2 TIP3X3779 15.458 -21.937 0.252 1.00 0.00 W1 O +ATOM 13825 H1 TIP3X3779 15.195 -22.686 -0.282 1.00 0.00 W1 H +ATOM 13826 H2 TIP3X3779 15.204 -21.173 -0.266 1.00 0.00 W1 H +ATOM 13827 OH2 TIP3X3780 13.500 -16.111 1.227 1.00 0.00 W1 O +ATOM 13828 H1 TIP3X3780 14.385 -16.439 1.069 1.00 0.00 W1 H +ATOM 13829 H2 TIP3X3780 13.270 -15.643 0.425 1.00 0.00 W1 H +ATOM 13830 OH2 TIP3X3781 14.892 -20.449 13.305 1.00 0.00 W1 O +ATOM 13831 H1 TIP3X3781 14.782 -19.500 13.364 1.00 0.00 W1 H +ATOM 13832 H2 TIP3X3781 13.999 -20.794 13.294 1.00 0.00 W1 H +ATOM 13833 OH2 TIP3X3782 14.158 -19.130 0.568 1.00 0.00 W1 O +ATOM 13834 H1 TIP3X3782 14.190 -19.210 1.521 1.00 0.00 W1 H +ATOM 13835 H2 TIP3X3782 13.325 -18.693 0.391 1.00 0.00 W1 H +ATOM 13836 OH2 TIP3X3783 10.529 -30.836 13.452 1.00 0.00 W1 O +ATOM 13837 H1 TIP3X3783 10.222 -30.087 12.939 1.00 0.00 W1 H +ATOM 13838 H2 TIP3X3783 10.583 -31.553 12.820 1.00 0.00 W1 H +ATOM 13839 OH2 TIP3X3784 4.743 -16.919 11.481 1.00 0.00 W1 O +ATOM 13840 H1 TIP3X3784 5.591 -16.681 11.854 1.00 0.00 W1 H +ATOM 13841 H2 TIP3X3784 4.954 -17.299 10.628 1.00 0.00 W1 H +ATOM 13842 OH2 TIP3X3785 3.209 -28.901 14.831 1.00 0.00 W1 O +ATOM 13843 H1 TIP3X3785 2.332 -28.811 15.205 1.00 0.00 W1 H +ATOM 13844 H2 TIP3X3785 3.272 -28.188 14.195 1.00 0.00 W1 H +ATOM 13845 OH2 TIP3X3786 9.406 -26.954 0.562 1.00 0.00 W1 O +ATOM 13846 H1 TIP3X3786 9.240 -26.657 -0.333 1.00 0.00 W1 H +ATOM 13847 H2 TIP3X3786 8.535 -27.077 0.939 1.00 0.00 W1 H +ATOM 13848 OH2 TIP3X3787 14.804 -19.193 3.610 1.00 0.00 W1 O +ATOM 13849 H1 TIP3X3787 15.377 -19.930 3.823 1.00 0.00 W1 H +ATOM 13850 H2 TIP3X3787 14.473 -18.894 4.457 1.00 0.00 W1 H +ATOM 13851 OH2 TIP3X3788 10.065 -30.157 0.539 1.00 0.00 W1 O +ATOM 13852 H1 TIP3X3788 10.797 -29.541 0.563 1.00 0.00 W1 H +ATOM 13853 H2 TIP3X3788 10.306 -30.790 -0.138 1.00 0.00 W1 H +ATOM 13854 OH2 TIP3X3789 14.597 -30.064 10.804 1.00 0.00 W1 O +ATOM 13855 H1 TIP3X3789 15.089 -30.693 11.331 1.00 0.00 W1 H +ATOM 13856 H2 TIP3X3789 15.197 -29.821 10.098 1.00 0.00 W1 H +ATOM 13857 OH2 TIP3X3790 2.104 -20.843 6.882 1.00 0.00 W1 O +ATOM 13858 H1 TIP3X3790 1.436 -20.520 7.486 1.00 0.00 W1 H +ATOM 13859 H2 TIP3X3790 2.896 -20.913 7.414 1.00 0.00 W1 H +ATOM 13860 OH2 TIP3X3791 7.101 -19.424 13.992 1.00 0.00 W1 O +ATOM 13861 H1 TIP3X3791 7.324 -19.802 14.843 1.00 0.00 W1 H +ATOM 13862 H2 TIP3X3791 6.494 -20.053 13.602 1.00 0.00 W1 H +ATOM 13863 OH2 TIP3X3792 10.580 -28.119 9.405 1.00 0.00 W1 O +ATOM 13864 H1 TIP3X3792 10.639 -28.301 10.343 1.00 0.00 W1 H +ATOM 13865 H2 TIP3X3792 9.642 -28.032 9.236 1.00 0.00 W1 H +ATOM 13866 OH2 TIP3X3793 6.772 -27.463 13.584 1.00 0.00 W1 O +ATOM 13867 H1 TIP3X3793 5.905 -27.533 13.184 1.00 0.00 W1 H +ATOM 13868 H2 TIP3X3793 6.717 -28.003 14.372 1.00 0.00 W1 H +ATOM 13869 OH2 TIP3X3794 14.258 -24.742 15.337 1.00 0.00 W1 O +ATOM 13870 H1 TIP3X3794 15.052 -25.276 15.320 1.00 0.00 W1 H +ATOM 13871 H2 TIP3X3794 13.964 -24.777 16.247 1.00 0.00 W1 H +ATOM 13872 OH2 TIP3X3795 2.443 -30.875 11.255 1.00 0.00 W1 O +ATOM 13873 H1 TIP3X3795 2.217 -30.422 10.443 1.00 0.00 W1 H +ATOM 13874 H2 TIP3X3795 3.273 -31.312 11.064 1.00 0.00 W1 H +ATOM 13875 OH2 TIP3X3796 8.538 -30.418 6.337 1.00 0.00 W1 O +ATOM 13876 H1 TIP3X3796 9.020 -29.904 5.689 1.00 0.00 W1 H +ATOM 13877 H2 TIP3X3796 8.882 -30.124 7.181 1.00 0.00 W1 H +ATOM 13878 OH2 TIP3X3797 3.008 -25.826 1.490 1.00 0.00 W1 O +ATOM 13879 H1 TIP3X3797 3.430 -25.180 0.924 1.00 0.00 W1 H +ATOM 13880 H2 TIP3X3797 3.720 -26.401 1.771 1.00 0.00 W1 H +ATOM 13881 OH2 TIP3X3798 3.532 -25.170 10.801 1.00 0.00 W1 O +ATOM 13882 H1 TIP3X3798 3.448 -24.378 11.333 1.00 0.00 W1 H +ATOM 13883 H2 TIP3X3798 4.447 -25.174 10.520 1.00 0.00 W1 H +ATOM 13884 OH2 TIP3X3799 2.715 -24.451 3.986 1.00 0.00 W1 O +ATOM 13885 H1 TIP3X3799 2.778 -24.740 3.076 1.00 0.00 W1 H +ATOM 13886 H2 TIP3X3799 3.490 -23.906 4.119 1.00 0.00 W1 H +ATOM 13887 OH2 TIP3X3800 11.735 -27.882 1.746 1.00 0.00 W1 O +ATOM 13888 H1 TIP3X3800 11.028 -27.393 1.326 1.00 0.00 W1 H +ATOM 13889 H2 TIP3X3800 12.460 -27.838 1.123 1.00 0.00 W1 H +ATOM 13890 OH2 TIP3X3801 0.286 -26.995 12.834 1.00 0.00 W1 O +ATOM 13891 H1 TIP3X3801 -0.619 -26.701 12.945 1.00 0.00 W1 H +ATOM 13892 H2 TIP3X3801 0.426 -27.614 13.551 1.00 0.00 W1 H +ATOM 13893 OH2 TIP3X3802 1.429 -30.158 8.817 1.00 0.00 W1 O +ATOM 13894 H1 TIP3X3802 1.536 -30.859 8.174 1.00 0.00 W1 H +ATOM 13895 H2 TIP3X3802 1.564 -29.352 8.318 1.00 0.00 W1 H +ATOM 13896 OH2 TIP3X3803 12.951 -26.530 13.704 1.00 0.00 W1 O +ATOM 13897 H1 TIP3X3803 13.262 -25.951 14.400 1.00 0.00 W1 H +ATOM 13898 H2 TIP3X3803 12.007 -26.594 13.849 1.00 0.00 W1 H +ATOM 13899 OH2 TIP3X3804 9.994 -26.524 13.651 1.00 0.00 W1 O +ATOM 13900 H1 TIP3X3804 9.634 -25.956 12.970 1.00 0.00 W1 H +ATOM 13901 H2 TIP3X3804 9.656 -27.394 13.440 1.00 0.00 W1 H +ATOM 13902 OH2 TIP3X3805 8.197 -26.055 3.517 1.00 0.00 W1 O +ATOM 13903 H1 TIP3X3805 8.286 -25.475 2.760 1.00 0.00 W1 H +ATOM 13904 H2 TIP3X3805 7.427 -26.589 3.320 1.00 0.00 W1 H +ATOM 13905 OH2 TIP3X3806 6.500 -26.723 1.204 1.00 0.00 W1 O +ATOM 13906 H1 TIP3X3806 6.062 -26.531 0.375 1.00 0.00 W1 H +ATOM 13907 H2 TIP3X3806 6.093 -27.534 1.508 1.00 0.00 W1 H +ATOM 13908 OH2 TIP3X3807 7.210 -29.661 14.993 1.00 0.00 W1 O +ATOM 13909 H1 TIP3X3807 6.744 -30.048 15.734 1.00 0.00 W1 H +ATOM 13910 H2 TIP3X3807 8.124 -29.629 15.276 1.00 0.00 W1 H +ATOM 13911 OH2 TIP3X3808 12.773 -24.317 11.675 1.00 0.00 W1 O +ATOM 13912 H1 TIP3X3808 12.793 -24.966 12.378 1.00 0.00 W1 H +ATOM 13913 H2 TIP3X3808 11.939 -24.468 11.231 1.00 0.00 W1 H +ATOM 13914 OH2 TIP3X3809 0.848 -27.216 0.144 1.00 0.00 W1 O +ATOM 13915 H1 TIP3X3809 0.092 -27.409 0.698 1.00 0.00 W1 H +ATOM 13916 H2 TIP3X3809 1.382 -26.618 0.667 1.00 0.00 W1 H +ATOM 13917 OH2 TIP3X3810 9.515 -27.563 5.624 1.00 0.00 W1 O +ATOM 13918 H1 TIP3X3810 9.178 -27.212 4.800 1.00 0.00 W1 H +ATOM 13919 H2 TIP3X3810 10.411 -27.830 5.423 1.00 0.00 W1 H +ATOM 13920 OH2 TIP3X3811 4.970 -28.252 7.368 1.00 0.00 W1 O +ATOM 13921 H1 TIP3X3811 4.028 -28.299 7.209 1.00 0.00 W1 H +ATOM 13922 H2 TIP3X3811 5.109 -27.378 7.732 1.00 0.00 W1 H +ATOM 13923 OH2 TIP3X3812 0.332 -27.126 4.162 1.00 0.00 W1 O +ATOM 13924 H1 TIP3X3812 0.058 -27.251 5.070 1.00 0.00 W1 H +ATOM 13925 H2 TIP3X3812 0.138 -26.208 3.976 1.00 0.00 W1 H +ATOM 13926 OH2 TIP3X3813 4.333 -27.799 12.222 1.00 0.00 W1 O +ATOM 13927 H1 TIP3X3813 4.355 -28.605 11.706 1.00 0.00 W1 H +ATOM 13928 H2 TIP3X3813 3.939 -27.151 11.638 1.00 0.00 W1 H +ATOM 13929 OH2 TIP3X3814 4.916 -21.264 8.027 1.00 0.00 W1 O +ATOM 13930 H1 TIP3X3814 4.844 -22.199 7.839 1.00 0.00 W1 H +ATOM 13931 H2 TIP3X3814 4.920 -21.210 8.983 1.00 0.00 W1 H +ATOM 13932 OH2 TIP3X3815 9.105 -24.245 12.589 1.00 0.00 W1 O +ATOM 13933 H1 TIP3X3815 9.517 -23.413 12.826 1.00 0.00 W1 H +ATOM 13934 H2 TIP3X3815 8.555 -24.034 11.835 1.00 0.00 W1 H +ATOM 13935 OH2 TIP3X3816 14.900 -28.878 1.914 1.00 0.00 W1 O +ATOM 13936 H1 TIP3X3816 15.335 -28.651 2.736 1.00 0.00 W1 H +ATOM 13937 H2 TIP3X3816 14.380 -29.654 2.123 1.00 0.00 W1 H +ATOM 13938 OH2 TIP3X3817 6.055 -22.918 1.092 1.00 0.00 W1 O +ATOM 13939 H1 TIP3X3817 5.766 -23.040 1.996 1.00 0.00 W1 H +ATOM 13940 H2 TIP3X3817 6.744 -23.572 0.970 1.00 0.00 W1 H +ATOM 13941 OH2 TIP3X3818 12.758 -24.402 2.160 1.00 0.00 W1 O +ATOM 13942 H1 TIP3X3818 11.893 -24.601 2.519 1.00 0.00 W1 H +ATOM 13943 H2 TIP3X3818 13.315 -24.281 2.929 1.00 0.00 W1 H +ATOM 13944 OH2 TIP3X3819 7.591 -24.148 8.630 1.00 0.00 W1 O +ATOM 13945 H1 TIP3X3819 7.688 -23.351 9.152 1.00 0.00 W1 H +ATOM 13946 H2 TIP3X3819 8.466 -24.538 8.622 1.00 0.00 W1 H +ATOM 13947 OH2 TIP3X3820 7.336 -23.766 5.546 1.00 0.00 W1 O +ATOM 13948 H1 TIP3X3820 7.958 -24.363 5.128 1.00 0.00 W1 H +ATOM 13949 H2 TIP3X3820 7.362 -24.004 6.473 1.00 0.00 W1 H +ATOM 13950 OH2 TIP3X3821 10.231 -22.151 14.482 1.00 0.00 W1 O +ATOM 13951 H1 TIP3X3821 9.553 -21.867 15.095 1.00 0.00 W1 H +ATOM 13952 H2 TIP3X3821 11.029 -22.191 15.009 1.00 0.00 W1 H +ATOM 13953 OH2 TIP3X3822 2.741 -22.735 12.178 1.00 0.00 W1 O +ATOM 13954 H1 TIP3X3822 3.258 -22.330 12.874 1.00 0.00 W1 H +ATOM 13955 H2 TIP3X3822 2.358 -21.998 11.703 1.00 0.00 W1 H +ATOM 13956 OH2 TIP3X3823 1.647 -24.773 13.800 1.00 0.00 W1 O +ATOM 13957 H1 TIP3X3823 1.443 -25.613 13.387 1.00 0.00 W1 H +ATOM 13958 H2 TIP3X3823 1.524 -24.127 13.104 1.00 0.00 W1 H +ATOM 13959 OH2 TIP3X3824 1.540 -23.900 6.623 1.00 0.00 W1 O +ATOM 13960 H1 TIP3X3824 1.896 -23.028 6.453 1.00 0.00 W1 H +ATOM 13961 H2 TIP3X3824 1.438 -24.291 5.755 1.00 0.00 W1 H +ATOM 13962 OH2 TIP3X3825 12.299 -21.635 0.810 1.00 0.00 W1 O +ATOM 13963 H1 TIP3X3825 13.004 -21.137 0.398 1.00 0.00 W1 H +ATOM 13964 H2 TIP3X3825 12.748 -22.266 1.373 1.00 0.00 W1 H +ATOM 13965 OH2 TIP3X3826 14.895 -24.288 4.172 1.00 0.00 W1 O +ATOM 13966 H1 TIP3X3826 14.608 -24.115 5.069 1.00 0.00 W1 H +ATOM 13967 H2 TIP3X3826 15.408 -23.516 3.932 1.00 0.00 W1 H +ATOM 13968 OH2 TIP3X3827 1.393 -25.171 8.894 1.00 0.00 W1 O +ATOM 13969 H1 TIP3X3827 1.487 -24.493 8.226 1.00 0.00 W1 H +ATOM 13970 H2 TIP3X3827 2.051 -24.952 9.553 1.00 0.00 W1 H +ATOM 13971 OH2 TIP3X3828 2.955 -21.431 0.656 1.00 0.00 W1 O +ATOM 13972 H1 TIP3X3828 2.139 -21.721 0.248 1.00 0.00 W1 H +ATOM 13973 H2 TIP3X3828 3.487 -22.225 0.718 1.00 0.00 W1 H +ATOM 13974 OH2 TIP3X3829 4.373 -20.592 13.731 1.00 0.00 W1 O +ATOM 13975 H1 TIP3X3829 3.800 -19.990 13.257 1.00 0.00 W1 H +ATOM 13976 H2 TIP3X3829 3.899 -20.788 14.539 1.00 0.00 W1 H +ATOM 13977 OH2 TIP3X3830 7.449 -15.849 11.422 1.00 0.00 W1 O +ATOM 13978 H1 TIP3X3830 7.766 -16.143 12.275 1.00 0.00 W1 H +ATOM 13979 H2 TIP3X3830 7.882 -16.426 10.793 1.00 0.00 W1 H +ATOM 13980 OH2 TIP3X3831 12.155 -15.607 5.555 1.00 0.00 W1 O +ATOM 13981 H1 TIP3X3831 11.742 -16.298 5.037 1.00 0.00 W1 H +ATOM 13982 H2 TIP3X3831 11.959 -14.800 5.079 1.00 0.00 W1 H +ATOM 13983 OH2 TIP3X3832 8.733 -18.925 2.807 1.00 0.00 W1 O +ATOM 13984 H1 TIP3X3832 8.992 -18.139 2.325 1.00 0.00 W1 H +ATOM 13985 H2 TIP3X3832 8.163 -18.601 3.505 1.00 0.00 W1 H +ATOM 13986 OH2 TIP3X3833 8.750 -23.770 1.878 1.00 0.00 W1 O +ATOM 13987 H1 TIP3X3833 9.573 -23.697 1.396 1.00 0.00 W1 H +ATOM 13988 H2 TIP3X3833 8.757 -23.026 2.480 1.00 0.00 W1 H +ATOM 13989 OH2 TIP3X3834 12.151 -29.047 11.670 1.00 0.00 W1 O +ATOM 13990 H1 TIP3X3834 12.956 -29.277 11.206 1.00 0.00 W1 H +ATOM 13991 H2 TIP3X3834 12.442 -28.494 12.395 1.00 0.00 W1 H +ATOM 13992 OH2 TIP3X3835 0.116 -21.945 3.076 1.00 0.00 W1 O +ATOM 13993 H1 TIP3X3835 -0.037 -21.853 2.136 1.00 0.00 W1 H +ATOM 13994 H2 TIP3X3835 1.070 -21.945 3.165 1.00 0.00 W1 H +ATOM 13995 OH2 TIP3X3836 10.878 -22.357 9.672 1.00 0.00 W1 O +ATOM 13996 H1 TIP3X3836 11.424 -21.696 10.098 1.00 0.00 W1 H +ATOM 13997 H2 TIP3X3836 11.337 -22.558 8.856 1.00 0.00 W1 H +ATOM 13998 OH2 TIP3X3837 9.700 -17.384 0.749 1.00 0.00 W1 O +ATOM 13999 H1 TIP3X3837 10.525 -17.348 1.234 1.00 0.00 W1 H +ATOM 14000 H2 TIP3X3837 9.904 -17.896 -0.033 1.00 0.00 W1 H +ATOM 14001 OH2 TIP3X3838 9.693 -19.596 12.400 1.00 0.00 W1 O +ATOM 14002 H1 TIP3X3838 8.872 -19.349 12.826 1.00 0.00 W1 H +ATOM 14003 H2 TIP3X3838 9.463 -19.692 11.476 1.00 0.00 W1 H +ATOM 14004 OH2 TIP3X3839 6.318 -19.371 4.287 1.00 0.00 W1 O +ATOM 14005 H1 TIP3X3839 5.611 -19.224 3.659 1.00 0.00 W1 H +ATOM 14006 H2 TIP3X3839 5.981 -19.027 5.114 1.00 0.00 W1 H +ATOM 14007 OH2 TIP3X3840 2.883 -18.459 12.998 1.00 0.00 W1 O +ATOM 14008 H1 TIP3X3840 3.617 -17.848 12.933 1.00 0.00 W1 H +ATOM 14009 H2 TIP3X3840 2.571 -18.365 13.898 1.00 0.00 W1 H +ATOM 14010 OH2 TIP3X3841 2.473 -16.755 7.100 1.00 0.00 W1 O +ATOM 14011 H1 TIP3X3841 1.887 -17.496 6.946 1.00 0.00 W1 H +ATOM 14012 H2 TIP3X3841 2.916 -16.621 6.261 1.00 0.00 W1 H +ATOM 14013 OH2 TIP3X3842 10.826 -30.741 8.180 1.00 0.00 W1 O +ATOM 14014 H1 TIP3X3842 11.158 -30.816 7.286 1.00 0.00 W1 H +ATOM 14015 H2 TIP3X3842 10.781 -29.799 8.341 1.00 0.00 W1 H +ATOM 14016 OH2 TIP3X3843 8.064 -28.612 8.415 1.00 0.00 W1 O +ATOM 14017 H1 TIP3X3843 7.702 -28.123 7.676 1.00 0.00 W1 H +ATOM 14018 H2 TIP3X3843 7.332 -28.702 9.025 1.00 0.00 W1 H +ATOM 14019 OH2 TIP3X3844 6.783 -30.628 2.343 1.00 0.00 W1 O +ATOM 14020 H1 TIP3X3844 7.639 -30.883 2.688 1.00 0.00 W1 H +ATOM 14021 H2 TIP3X3844 6.265 -31.432 2.368 1.00 0.00 W1 H +ATOM 14022 OH2 TIP3X3845 9.535 -30.784 3.386 1.00 0.00 W1 O +ATOM 14023 H1 TIP3X3845 9.990 -31.520 3.795 1.00 0.00 W1 H +ATOM 14024 H2 TIP3X3845 9.942 -30.698 2.524 1.00 0.00 W1 H +ATOM 14025 OH2 TIP3X3846 4.174 -16.206 14.841 1.00 0.00 W1 O +ATOM 14026 H1 TIP3X3846 3.924 -15.449 14.311 1.00 0.00 W1 H +ATOM 14027 H2 TIP3X3846 5.085 -16.375 14.602 1.00 0.00 W1 H +ATOM 14028 OH2 TIP3X3847 9.181 -17.511 5.141 1.00 0.00 W1 O +ATOM 14029 H1 TIP3X3847 9.842 -18.153 5.401 1.00 0.00 W1 H +ATOM 14030 H2 TIP3X3847 9.168 -16.877 5.858 1.00 0.00 W1 H +ATOM 14031 OH2 TIP3X3848 6.920 -16.609 14.051 1.00 0.00 W1 O +ATOM 14032 H1 TIP3X3848 7.138 -17.501 14.321 1.00 0.00 W1 H +ATOM 14033 H2 TIP3X3848 7.528 -16.055 14.540 1.00 0.00 W1 H +ATOM 14034 OH2 TIP3X3849 5.867 -28.491 4.095 1.00 0.00 W1 O +ATOM 14035 H1 TIP3X3849 6.524 -29.150 3.873 1.00 0.00 W1 H +ATOM 14036 H2 TIP3X3849 5.909 -28.422 5.049 1.00 0.00 W1 H +ATOM 14037 OH2 TIP3X3850 0.580 -30.152 13.551 1.00 0.00 W1 O +ATOM 14038 H1 TIP3X3850 1.328 -30.348 12.987 1.00 0.00 W1 H +ATOM 14039 H2 TIP3X3850 0.788 -30.578 14.383 1.00 0.00 W1 H +ATOM 14040 OH2 TIP3X3851 11.699 -17.425 3.153 1.00 0.00 W1 O +ATOM 14041 H1 TIP3X3851 11.844 -18.365 3.256 1.00 0.00 W1 H +ATOM 14042 H2 TIP3X3851 12.523 -17.093 2.795 1.00 0.00 W1 H +ATOM 14043 OH2 TIP3X3852 13.367 -30.659 14.380 1.00 0.00 W1 O +ATOM 14044 H1 TIP3X3852 12.753 -30.585 13.649 1.00 0.00 W1 H +ATOM 14045 H2 TIP3X3852 14.137 -30.164 14.098 1.00 0.00 W1 H +ATOM 14046 OH2 TIP3X3853 4.161 -16.446 4.866 1.00 0.00 W1 O +ATOM 14047 H1 TIP3X3853 4.154 -16.401 3.910 1.00 0.00 W1 H +ATOM 14048 H2 TIP3X3853 4.968 -16.000 5.122 1.00 0.00 W1 H +ATOM 14049 OH2 TIP3X3854 15.070 -17.507 12.816 1.00 0.00 W1 O +ATOM 14050 H1 TIP3X3854 14.347 -16.956 13.117 1.00 0.00 W1 H +ATOM 14051 H2 TIP3X3854 15.858 -17.008 13.030 1.00 0.00 W1 H +ATOM 14052 OH2 TIP3X3855 2.695 -28.185 4.496 1.00 0.00 W1 O +ATOM 14053 H1 TIP3X3855 2.052 -27.797 3.903 1.00 0.00 W1 H +ATOM 14054 H2 TIP3X3855 3.498 -27.688 4.338 1.00 0.00 W1 H +ATOM 14055 OH2 TIP3X3856 4.124 -19.586 2.227 1.00 0.00 W1 O +ATOM 14056 H1 TIP3X3856 4.085 -20.214 1.506 1.00 0.00 W1 H +ATOM 14057 H2 TIP3X3856 3.405 -19.840 2.805 1.00 0.00 W1 H +ATOM 14058 OH2 TIP3X3857 2.019 -20.058 19.866 1.00 0.00 W1 O +ATOM 14059 H1 TIP3X3857 2.201 -20.134 20.803 1.00 0.00 W1 H +ATOM 14060 H2 TIP3X3857 1.995 -19.116 19.702 1.00 0.00 W1 H +ATOM 14061 OH2 TIP3X3858 13.121 -22.567 23.605 1.00 0.00 W1 O +ATOM 14062 H1 TIP3X3858 13.356 -22.303 22.715 1.00 0.00 W1 H +ATOM 14063 H2 TIP3X3858 13.950 -22.831 24.003 1.00 0.00 W1 H +ATOM 14064 OH2 TIP3X3859 5.105 -22.844 19.583 1.00 0.00 W1 O +ATOM 14065 H1 TIP3X3859 5.136 -21.934 19.880 1.00 0.00 W1 H +ATOM 14066 H2 TIP3X3859 5.613 -23.327 20.235 1.00 0.00 W1 H +ATOM 14067 OH2 TIP3X3860 12.908 -18.684 21.727 1.00 0.00 W1 O +ATOM 14068 H1 TIP3X3860 12.634 -18.194 22.502 1.00 0.00 W1 H +ATOM 14069 H2 TIP3X3860 12.383 -19.484 21.750 1.00 0.00 W1 H +ATOM 14070 OH2 TIP3X3861 11.425 -20.241 18.770 1.00 0.00 W1 O +ATOM 14071 H1 TIP3X3861 11.587 -20.470 17.855 1.00 0.00 W1 H +ATOM 14072 H2 TIP3X3861 10.496 -20.012 18.799 1.00 0.00 W1 H +ATOM 14073 OH2 TIP3X3862 15.273 -19.709 23.554 1.00 0.00 W1 O +ATOM 14074 H1 TIP3X3862 14.721 -19.626 22.777 1.00 0.00 W1 H +ATOM 14075 H2 TIP3X3862 14.662 -19.926 24.259 1.00 0.00 W1 H +ATOM 14076 OH2 TIP3X3863 1.909 -18.445 26.005 1.00 0.00 W1 O +ATOM 14077 H1 TIP3X3863 2.315 -18.242 26.848 1.00 0.00 W1 H +ATOM 14078 H2 TIP3X3863 1.338 -19.191 26.188 1.00 0.00 W1 H +ATOM 14079 OH2 TIP3X3864 9.284 -16.820 25.231 1.00 0.00 W1 O +ATOM 14080 H1 TIP3X3864 9.585 -17.721 25.353 1.00 0.00 W1 H +ATOM 14081 H2 TIP3X3864 9.909 -16.440 24.614 1.00 0.00 W1 H +ATOM 14082 OH2 TIP3X3865 12.717 -16.863 25.111 1.00 0.00 W1 O +ATOM 14083 H1 TIP3X3865 12.281 -16.040 24.892 1.00 0.00 W1 H +ATOM 14084 H2 TIP3X3865 13.646 -16.638 25.161 1.00 0.00 W1 H +ATOM 14085 OH2 TIP3X3866 5.165 -17.289 24.241 1.00 0.00 W1 O +ATOM 14086 H1 TIP3X3866 5.520 -16.440 23.977 1.00 0.00 W1 H +ATOM 14087 H2 TIP3X3866 4.230 -17.229 24.045 1.00 0.00 W1 H +ATOM 14088 OH2 TIP3X3867 10.006 -25.396 23.142 1.00 0.00 W1 O +ATOM 14089 H1 TIP3X3867 9.929 -26.206 22.638 1.00 0.00 W1 H +ATOM 14090 H2 TIP3X3867 10.949 -25.257 23.230 1.00 0.00 W1 H +ATOM 14091 OH2 TIP3X3868 6.029 -29.299 25.504 1.00 0.00 W1 O +ATOM 14092 H1 TIP3X3868 6.287 -30.036 26.057 1.00 0.00 W1 H +ATOM 14093 H2 TIP3X3868 5.353 -29.655 24.929 1.00 0.00 W1 H +ATOM 14094 OH2 TIP3X3869 14.273 -28.294 21.927 1.00 0.00 W1 O +ATOM 14095 H1 TIP3X3869 13.965 -27.956 22.768 1.00 0.00 W1 H +ATOM 14096 H2 TIP3X3869 14.341 -29.240 22.059 1.00 0.00 W1 H +ATOM 14097 OH2 TIP3X3870 12.870 -27.099 23.881 1.00 0.00 W1 O +ATOM 14098 H1 TIP3X3870 13.446 -27.327 24.612 1.00 0.00 W1 H +ATOM 14099 H2 TIP3X3870 11.996 -27.353 24.176 1.00 0.00 W1 H +ATOM 14100 OH2 TIP3X3871 5.917 -25.974 25.252 1.00 0.00 W1 O +ATOM 14101 H1 TIP3X3871 6.420 -26.677 25.664 1.00 0.00 W1 H +ATOM 14102 H2 TIP3X3871 6.574 -25.332 24.986 1.00 0.00 W1 H +ATOM 14103 OH2 TIP3X3872 13.394 -24.926 22.150 1.00 0.00 W1 O +ATOM 14104 H1 TIP3X3872 13.435 -25.826 22.474 1.00 0.00 W1 H +ATOM 14105 H2 TIP3X3872 13.276 -24.393 22.936 1.00 0.00 W1 H +ATOM 14106 OH2 TIP3X3873 12.078 -28.283 20.018 1.00 0.00 W1 O +ATOM 14107 H1 TIP3X3873 12.903 -28.098 20.467 1.00 0.00 W1 H +ATOM 14108 H2 TIP3X3873 12.155 -27.828 19.179 1.00 0.00 W1 H +ATOM 14109 OH2 TIP3X3874 8.261 -22.311 26.090 1.00 0.00 W1 O +ATOM 14110 H1 TIP3X3874 9.138 -22.289 25.707 1.00 0.00 W1 H +ATOM 14111 H2 TIP3X3874 7.995 -21.393 26.136 1.00 0.00 W1 H +ATOM 14112 OH2 TIP3X3875 7.411 -19.763 25.900 1.00 0.00 W1 O +ATOM 14113 H1 TIP3X3875 7.387 -19.536 24.970 1.00 0.00 W1 H +ATOM 14114 H2 TIP3X3875 6.491 -19.817 26.158 1.00 0.00 W1 H +ATOM 14115 OH2 TIP3X3876 2.274 -27.882 22.738 1.00 0.00 W1 O +ATOM 14116 H1 TIP3X3876 1.949 -27.002 22.929 1.00 0.00 W1 H +ATOM 14117 H2 TIP3X3876 2.151 -27.984 21.794 1.00 0.00 W1 H +ATOM 14118 OH2 TIP3X3877 4.430 -24.324 22.750 1.00 0.00 W1 O +ATOM 14119 H1 TIP3X3877 3.747 -24.774 22.253 1.00 0.00 W1 H +ATOM 14120 H2 TIP3X3877 4.916 -25.028 23.182 1.00 0.00 W1 H +ATOM 14121 OH2 TIP3X3878 10.486 -19.400 25.147 1.00 0.00 W1 O +ATOM 14122 H1 TIP3X3878 10.244 -19.986 24.430 1.00 0.00 W1 H +ATOM 14123 H2 TIP3X3878 11.436 -19.489 25.219 1.00 0.00 W1 H +ATOM 14124 OH2 TIP3X3879 14.784 -15.765 21.927 1.00 0.00 W1 O +ATOM 14125 H1 TIP3X3879 14.778 -16.233 22.762 1.00 0.00 W1 H +ATOM 14126 H2 TIP3X3879 13.903 -15.894 21.574 1.00 0.00 W1 H +ATOM 14127 OH2 TIP3X3880 6.656 -19.429 22.949 1.00 0.00 W1 O +ATOM 14128 H1 TIP3X3880 6.084 -20.148 23.218 1.00 0.00 W1 H +ATOM 14129 H2 TIP3X3880 6.195 -18.638 23.232 1.00 0.00 W1 H +ATOM 14130 OH2 TIP3X3881 8.877 -28.977 27.520 1.00 0.00 W1 O +ATOM 14131 H1 TIP3X3881 8.135 -28.498 27.887 1.00 0.00 W1 H +ATOM 14132 H2 TIP3X3881 8.497 -29.789 27.185 1.00 0.00 W1 H +ATOM 14133 OH2 TIP3X3882 4.229 -28.272 17.321 1.00 0.00 W1 O +ATOM 14134 H1 TIP3X3882 4.131 -28.934 18.006 1.00 0.00 W1 H +ATOM 14135 H2 TIP3X3882 4.046 -28.741 16.507 1.00 0.00 W1 H +ATOM 14136 OH2 TIP3X3883 15.123 -27.350 25.511 1.00 0.00 W1 O +ATOM 14137 H1 TIP3X3883 15.642 -26.682 25.063 1.00 0.00 W1 H +ATOM 14138 H2 TIP3X3883 15.565 -27.475 26.351 1.00 0.00 W1 H +ATOM 14139 OH2 TIP3X3884 1.181 -30.998 19.671 1.00 0.00 W1 O +ATOM 14140 H1 TIP3X3884 1.906 -30.377 19.740 1.00 0.00 W1 H +ATOM 14141 H2 TIP3X3884 0.808 -31.031 20.552 1.00 0.00 W1 H +ATOM 14142 OH2 TIP3X3885 6.447 -24.762 29.657 1.00 0.00 W1 O +ATOM 14143 H1 TIP3X3885 7.311 -24.364 29.556 1.00 0.00 W1 H +ATOM 14144 H2 TIP3X3885 6.599 -25.699 29.534 1.00 0.00 W1 H +ATOM 14145 OH2 TIP3X3886 9.613 -19.852 22.397 1.00 0.00 W1 O +ATOM 14146 H1 TIP3X3886 9.707 -20.715 21.993 1.00 0.00 W1 H +ATOM 14147 H2 TIP3X3886 8.680 -19.652 22.321 1.00 0.00 W1 H +ATOM 14148 OH2 TIP3X3887 8.225 -21.568 19.928 1.00 0.00 W1 O +ATOM 14149 H1 TIP3X3887 7.660 -22.182 20.397 1.00 0.00 W1 H +ATOM 14150 H2 TIP3X3887 7.751 -20.737 19.956 1.00 0.00 W1 H +ATOM 14151 OH2 TIP3X3888 0.762 -21.055 26.385 1.00 0.00 W1 O +ATOM 14152 H1 TIP3X3888 0.228 -21.657 25.867 1.00 0.00 W1 H +ATOM 14153 H2 TIP3X3888 0.292 -20.969 27.214 1.00 0.00 W1 H +ATOM 14154 OH2 TIP3X3889 12.059 -22.034 20.752 1.00 0.00 W1 O +ATOM 14155 H1 TIP3X3889 12.003 -22.949 20.476 1.00 0.00 W1 H +ATOM 14156 H2 TIP3X3889 11.886 -21.532 19.956 1.00 0.00 W1 H +ATOM 14157 OH2 TIP3X3890 12.356 -21.520 27.777 1.00 0.00 W1 O +ATOM 14158 H1 TIP3X3890 11.453 -21.436 28.084 1.00 0.00 W1 H +ATOM 14159 H2 TIP3X3890 12.524 -22.462 27.780 1.00 0.00 W1 H +ATOM 14160 OH2 TIP3X3891 14.722 -23.561 25.582 1.00 0.00 W1 O +ATOM 14161 H1 TIP3X3891 15.385 -24.241 25.463 1.00 0.00 W1 H +ATOM 14162 H2 TIP3X3891 14.006 -24.000 26.041 1.00 0.00 W1 H +ATOM 14163 OH2 TIP3X3892 3.867 -23.874 30.727 1.00 0.00 W1 O +ATOM 14164 H1 TIP3X3892 3.338 -24.108 29.964 1.00 0.00 W1 H +ATOM 14165 H2 TIP3X3892 4.762 -23.826 30.392 1.00 0.00 W1 H +ATOM 14166 OH2 TIP3X3893 4.777 -20.668 26.288 1.00 0.00 W1 O +ATOM 14167 H1 TIP3X3893 4.732 -21.223 27.067 1.00 0.00 W1 H +ATOM 14168 H2 TIP3X3893 4.144 -19.969 26.454 1.00 0.00 W1 H +ATOM 14169 OH2 TIP3X3894 13.449 -19.538 26.038 1.00 0.00 W1 O +ATOM 14170 H1 TIP3X3894 13.872 -18.770 26.422 1.00 0.00 W1 H +ATOM 14171 H2 TIP3X3894 13.145 -20.046 26.790 1.00 0.00 W1 H +ATOM 14172 OH2 TIP3X3895 11.536 -17.562 27.863 1.00 0.00 W1 O +ATOM 14173 H1 TIP3X3895 10.829 -18.191 27.720 1.00 0.00 W1 H +ATOM 14174 H2 TIP3X3895 11.865 -17.368 26.985 1.00 0.00 W1 H +ATOM 14175 OH2 TIP3X3896 11.787 -19.026 30.259 1.00 0.00 W1 O +ATOM 14176 H1 TIP3X3896 11.154 -19.633 29.875 1.00 0.00 W1 H +ATOM 14177 H2 TIP3X3896 11.901 -18.346 29.595 1.00 0.00 W1 H +ATOM 14178 OH2 TIP3X3897 15.398 -17.118 24.326 1.00 0.00 W1 O +ATOM 14179 H1 TIP3X3897 16.075 -17.276 24.982 1.00 0.00 W1 H +ATOM 14180 H2 TIP3X3897 15.163 -17.989 24.007 1.00 0.00 W1 H +ATOM 14181 OH2 TIP3X3898 5.954 -30.647 22.718 1.00 0.00 W1 O +ATOM 14182 H1 TIP3X3898 5.662 -29.737 22.657 1.00 0.00 W1 H +ATOM 14183 H2 TIP3X3898 6.786 -30.664 22.245 1.00 0.00 W1 H +ATOM 14184 OH2 TIP3X3899 8.078 -20.700 16.373 1.00 0.00 W1 O +ATOM 14185 H1 TIP3X3899 7.383 -21.322 16.587 1.00 0.00 W1 H +ATOM 14186 H2 TIP3X3899 8.060 -20.064 17.088 1.00 0.00 W1 H +ATOM 14187 OH2 TIP3X3900 15.458 -21.937 15.809 1.00 0.00 W1 O +ATOM 14188 H1 TIP3X3900 15.195 -22.686 15.275 1.00 0.00 W1 H +ATOM 14189 H2 TIP3X3900 15.204 -21.173 15.292 1.00 0.00 W1 H +ATOM 14190 OH2 TIP3X3901 1.406 -18.240 15.526 1.00 0.00 W1 O +ATOM 14191 H1 TIP3X3901 1.852 -18.789 16.172 1.00 0.00 W1 H +ATOM 14192 H2 TIP3X3901 0.510 -18.574 15.505 1.00 0.00 W1 H +ATOM 14193 OH2 TIP3X3902 13.500 -16.111 16.785 1.00 0.00 W1 O +ATOM 14194 H1 TIP3X3902 14.385 -16.439 16.626 1.00 0.00 W1 H +ATOM 14195 H2 TIP3X3902 13.270 -15.643 15.982 1.00 0.00 W1 H +ATOM 14196 OH2 TIP3X3903 14.892 -20.449 28.862 1.00 0.00 W1 O +ATOM 14197 H1 TIP3X3903 14.782 -19.500 28.921 1.00 0.00 W1 H +ATOM 14198 H2 TIP3X3903 13.999 -20.794 28.852 1.00 0.00 W1 H +ATOM 14199 OH2 TIP3X3904 1.578 -17.623 18.481 1.00 0.00 W1 O +ATOM 14200 H1 TIP3X3904 1.510 -16.787 18.941 1.00 0.00 W1 H +ATOM 14201 H2 TIP3X3904 0.683 -17.962 18.464 1.00 0.00 W1 H +ATOM 14202 OH2 TIP3X3905 14.158 -19.130 16.125 1.00 0.00 W1 O +ATOM 14203 H1 TIP3X3905 14.190 -19.210 17.079 1.00 0.00 W1 H +ATOM 14204 H2 TIP3X3905 13.325 -18.693 15.948 1.00 0.00 W1 H +ATOM 14205 OH2 TIP3X3906 10.529 -30.836 29.009 1.00 0.00 W1 O +ATOM 14206 H1 TIP3X3906 10.222 -30.087 28.497 1.00 0.00 W1 H +ATOM 14207 H2 TIP3X3906 10.583 -31.553 28.377 1.00 0.00 W1 H +ATOM 14208 OH2 TIP3X3907 4.743 -16.919 27.038 1.00 0.00 W1 O +ATOM 14209 H1 TIP3X3907 5.591 -16.681 27.412 1.00 0.00 W1 H +ATOM 14210 H2 TIP3X3907 4.954 -17.299 26.185 1.00 0.00 W1 H +ATOM 14211 OH2 TIP3X3908 3.209 -28.901 30.389 1.00 0.00 W1 O +ATOM 14212 H1 TIP3X3908 2.332 -28.811 30.763 1.00 0.00 W1 H +ATOM 14213 H2 TIP3X3908 3.272 -28.188 29.752 1.00 0.00 W1 H +ATOM 14214 OH2 TIP3X3909 9.406 -26.954 16.119 1.00 0.00 W1 O +ATOM 14215 H1 TIP3X3909 9.240 -26.657 15.224 1.00 0.00 W1 H +ATOM 14216 H2 TIP3X3909 8.535 -27.077 16.496 1.00 0.00 W1 H +ATOM 14217 OH2 TIP3X3910 14.804 -19.193 19.167 1.00 0.00 W1 O +ATOM 14218 H1 TIP3X3910 15.377 -19.930 19.380 1.00 0.00 W1 H +ATOM 14219 H2 TIP3X3910 14.473 -18.894 20.014 1.00 0.00 W1 H +ATOM 14220 OH2 TIP3X3911 10.065 -30.157 16.096 1.00 0.00 W1 O +ATOM 14221 H1 TIP3X3911 10.797 -29.541 16.121 1.00 0.00 W1 H +ATOM 14222 H2 TIP3X3911 10.306 -30.790 15.420 1.00 0.00 W1 H +ATOM 14223 OH2 TIP3X3912 14.597 -30.064 26.361 1.00 0.00 W1 O +ATOM 14224 H1 TIP3X3912 15.089 -30.693 26.889 1.00 0.00 W1 H +ATOM 14225 H2 TIP3X3912 15.197 -29.821 25.656 1.00 0.00 W1 H +ATOM 14226 OH2 TIP3X3913 2.104 -20.843 22.439 1.00 0.00 W1 O +ATOM 14227 H1 TIP3X3913 1.436 -20.520 23.044 1.00 0.00 W1 H +ATOM 14228 H2 TIP3X3913 2.896 -20.913 22.971 1.00 0.00 W1 H +ATOM 14229 OH2 TIP3X3914 7.101 -19.424 29.549 1.00 0.00 W1 O +ATOM 14230 H1 TIP3X3914 7.324 -19.802 30.400 1.00 0.00 W1 H +ATOM 14231 H2 TIP3X3914 6.494 -20.053 29.159 1.00 0.00 W1 H +ATOM 14232 OH2 TIP3X3915 10.580 -28.119 24.962 1.00 0.00 W1 O +ATOM 14233 H1 TIP3X3915 10.639 -28.301 25.900 1.00 0.00 W1 H +ATOM 14234 H2 TIP3X3915 9.642 -28.032 24.794 1.00 0.00 W1 H +ATOM 14235 OH2 TIP3X3916 6.772 -27.463 29.141 1.00 0.00 W1 O +ATOM 14236 H1 TIP3X3916 5.905 -27.533 28.741 1.00 0.00 W1 H +ATOM 14237 H2 TIP3X3916 6.717 -28.003 29.929 1.00 0.00 W1 H +ATOM 14238 OH2 TIP3X3917 14.258 -24.742 30.894 1.00 0.00 W1 O +ATOM 14239 H1 TIP3X3917 15.052 -25.276 30.878 1.00 0.00 W1 H +ATOM 14240 H2 TIP3X3917 13.964 -24.777 31.804 1.00 0.00 W1 H +ATOM 14241 OH2 TIP3X3918 2.443 -30.875 26.813 1.00 0.00 W1 O +ATOM 14242 H1 TIP3X3918 2.217 -30.422 26.000 1.00 0.00 W1 H +ATOM 14243 H2 TIP3X3918 3.273 -31.312 26.621 1.00 0.00 W1 H +ATOM 14244 OH2 TIP3X3919 8.538 -30.418 21.894 1.00 0.00 W1 O +ATOM 14245 H1 TIP3X3919 9.020 -29.904 21.247 1.00 0.00 W1 H +ATOM 14246 H2 TIP3X3919 8.882 -30.124 22.738 1.00 0.00 W1 H +ATOM 14247 OH2 TIP3X3920 3.008 -25.826 17.047 1.00 0.00 W1 O +ATOM 14248 H1 TIP3X3920 3.430 -25.180 16.481 1.00 0.00 W1 H +ATOM 14249 H2 TIP3X3920 3.720 -26.401 17.328 1.00 0.00 W1 H +ATOM 14250 OH2 TIP3X3921 3.532 -25.170 26.358 1.00 0.00 W1 O +ATOM 14251 H1 TIP3X3921 3.448 -24.378 26.890 1.00 0.00 W1 H +ATOM 14252 H2 TIP3X3921 4.447 -25.174 26.078 1.00 0.00 W1 H +ATOM 14253 OH2 TIP3X3922 2.715 -24.451 19.544 1.00 0.00 W1 O +ATOM 14254 H1 TIP3X3922 2.778 -24.740 18.633 1.00 0.00 W1 H +ATOM 14255 H2 TIP3X3922 3.490 -23.906 19.677 1.00 0.00 W1 H +ATOM 14256 OH2 TIP3X3923 11.735 -27.882 17.304 1.00 0.00 W1 O +ATOM 14257 H1 TIP3X3923 11.028 -27.393 16.884 1.00 0.00 W1 H +ATOM 14258 H2 TIP3X3923 12.460 -27.838 16.680 1.00 0.00 W1 H +ATOM 14259 OH2 TIP3X3924 0.286 -26.995 28.392 1.00 0.00 W1 O +ATOM 14260 H1 TIP3X3924 -0.619 -26.701 28.503 1.00 0.00 W1 H +ATOM 14261 H2 TIP3X3924 0.426 -27.614 29.108 1.00 0.00 W1 H +ATOM 14262 OH2 TIP3X3925 1.429 -30.158 24.374 1.00 0.00 W1 O +ATOM 14263 H1 TIP3X3925 1.536 -30.859 23.732 1.00 0.00 W1 H +ATOM 14264 H2 TIP3X3925 1.564 -29.352 23.875 1.00 0.00 W1 H +ATOM 14265 OH2 TIP3X3926 12.951 -26.530 29.262 1.00 0.00 W1 O +ATOM 14266 H1 TIP3X3926 13.262 -25.951 29.958 1.00 0.00 W1 H +ATOM 14267 H2 TIP3X3926 12.007 -26.594 29.407 1.00 0.00 W1 H +ATOM 14268 OH2 TIP3X3927 9.994 -26.524 29.209 1.00 0.00 W1 O +ATOM 14269 H1 TIP3X3927 9.634 -25.956 28.528 1.00 0.00 W1 H +ATOM 14270 H2 TIP3X3927 9.656 -27.394 28.998 1.00 0.00 W1 H +ATOM 14271 OH2 TIP3X3928 8.197 -26.055 19.074 1.00 0.00 W1 O +ATOM 14272 H1 TIP3X3928 8.286 -25.475 18.318 1.00 0.00 W1 H +ATOM 14273 H2 TIP3X3928 7.427 -26.589 18.878 1.00 0.00 W1 H +ATOM 14274 OH2 TIP3X3929 6.500 -26.723 16.762 1.00 0.00 W1 O +ATOM 14275 H1 TIP3X3929 6.062 -26.531 15.932 1.00 0.00 W1 H +ATOM 14276 H2 TIP3X3929 6.093 -27.534 17.065 1.00 0.00 W1 H +ATOM 14277 OH2 TIP3X3930 7.210 -29.661 30.551 1.00 0.00 W1 O +ATOM 14278 H1 TIP3X3930 6.744 -30.048 31.291 1.00 0.00 W1 H +ATOM 14279 H2 TIP3X3930 8.124 -29.629 30.833 1.00 0.00 W1 H +ATOM 14280 OH2 TIP3X3931 12.773 -24.317 27.232 1.00 0.00 W1 O +ATOM 14281 H1 TIP3X3931 12.793 -24.966 27.935 1.00 0.00 W1 H +ATOM 14282 H2 TIP3X3931 11.939 -24.468 26.788 1.00 0.00 W1 H +ATOM 14283 OH2 TIP3X3932 0.848 -27.216 15.702 1.00 0.00 W1 O +ATOM 14284 H1 TIP3X3932 0.092 -27.409 16.256 1.00 0.00 W1 H +ATOM 14285 H2 TIP3X3932 1.382 -26.618 16.224 1.00 0.00 W1 H +ATOM 14286 OH2 TIP3X3933 0.767 -15.723 16.189 1.00 0.00 W1 O +ATOM 14287 H1 TIP3X3933 1.183 -16.470 16.618 1.00 0.00 W1 H +ATOM 14288 H2 TIP3X3933 0.780 -15.029 16.848 1.00 0.00 W1 H +ATOM 14289 OH2 TIP3X3934 9.515 -27.563 21.182 1.00 0.00 W1 O +ATOM 14290 H1 TIP3X3934 9.178 -27.212 20.357 1.00 0.00 W1 H +ATOM 14291 H2 TIP3X3934 10.411 -27.830 20.980 1.00 0.00 W1 H +ATOM 14292 OH2 TIP3X3935 4.970 -28.252 22.926 1.00 0.00 W1 O +ATOM 14293 H1 TIP3X3935 4.028 -28.299 22.767 1.00 0.00 W1 H +ATOM 14294 H2 TIP3X3935 5.109 -27.378 23.289 1.00 0.00 W1 H +ATOM 14295 OH2 TIP3X3936 0.332 -27.126 19.719 1.00 0.00 W1 O +ATOM 14296 H1 TIP3X3936 0.058 -27.251 20.628 1.00 0.00 W1 H +ATOM 14297 H2 TIP3X3936 0.138 -26.208 19.533 1.00 0.00 W1 H +ATOM 14298 OH2 TIP3X3937 4.333 -27.799 27.779 1.00 0.00 W1 O +ATOM 14299 H1 TIP3X3937 4.355 -28.605 27.264 1.00 0.00 W1 H +ATOM 14300 H2 TIP3X3937 3.939 -27.151 27.195 1.00 0.00 W1 H +ATOM 14301 OH2 TIP3X3938 4.916 -21.264 23.584 1.00 0.00 W1 O +ATOM 14302 H1 TIP3X3938 4.844 -22.199 23.397 1.00 0.00 W1 H +ATOM 14303 H2 TIP3X3938 4.920 -21.210 24.540 1.00 0.00 W1 H +ATOM 14304 OH2 TIP3X3939 9.105 -24.245 28.147 1.00 0.00 W1 O +ATOM 14305 H1 TIP3X3939 9.517 -23.413 28.383 1.00 0.00 W1 H +ATOM 14306 H2 TIP3X3939 8.555 -24.034 27.392 1.00 0.00 W1 H +ATOM 14307 OH2 TIP3X3940 14.900 -28.878 17.471 1.00 0.00 W1 O +ATOM 14308 H1 TIP3X3940 15.335 -28.651 18.293 1.00 0.00 W1 H +ATOM 14309 H2 TIP3X3940 14.380 -29.654 17.681 1.00 0.00 W1 H +ATOM 14310 OH2 TIP3X3941 6.055 -22.918 16.649 1.00 0.00 W1 O +ATOM 14311 H1 TIP3X3941 5.766 -23.040 17.554 1.00 0.00 W1 H +ATOM 14312 H2 TIP3X3941 6.744 -23.572 16.528 1.00 0.00 W1 H +ATOM 14313 OH2 TIP3X3942 12.758 -24.402 17.717 1.00 0.00 W1 O +ATOM 14314 H1 TIP3X3942 11.893 -24.601 18.076 1.00 0.00 W1 H +ATOM 14315 H2 TIP3X3942 13.315 -24.281 18.486 1.00 0.00 W1 H +ATOM 14316 OH2 TIP3X3943 7.591 -24.148 24.188 1.00 0.00 W1 O +ATOM 14317 H1 TIP3X3943 7.688 -23.351 24.709 1.00 0.00 W1 H +ATOM 14318 H2 TIP3X3943 8.466 -24.538 24.179 1.00 0.00 W1 H +ATOM 14319 OH2 TIP3X3944 7.336 -23.766 21.104 1.00 0.00 W1 O +ATOM 14320 H1 TIP3X3944 7.958 -24.363 20.686 1.00 0.00 W1 H +ATOM 14321 H2 TIP3X3944 7.362 -24.004 22.030 1.00 0.00 W1 H +ATOM 14322 OH2 TIP3X3945 10.231 -22.151 30.039 1.00 0.00 W1 O +ATOM 14323 H1 TIP3X3945 9.553 -21.867 30.653 1.00 0.00 W1 H +ATOM 14324 H2 TIP3X3945 11.029 -22.191 30.566 1.00 0.00 W1 H +ATOM 14325 OH2 TIP3X3946 2.741 -22.735 27.736 1.00 0.00 W1 O +ATOM 14326 H1 TIP3X3946 3.258 -22.330 28.432 1.00 0.00 W1 H +ATOM 14327 H2 TIP3X3946 2.358 -21.998 27.260 1.00 0.00 W1 H +ATOM 14328 OH2 TIP3X3947 1.647 -24.773 29.357 1.00 0.00 W1 O +ATOM 14329 H1 TIP3X3947 1.443 -25.613 28.945 1.00 0.00 W1 H +ATOM 14330 H2 TIP3X3947 1.524 -24.127 28.662 1.00 0.00 W1 H +ATOM 14331 OH2 TIP3X3948 1.540 -23.900 22.181 1.00 0.00 W1 O +ATOM 14332 H1 TIP3X3948 1.896 -23.028 22.011 1.00 0.00 W1 H +ATOM 14333 H2 TIP3X3948 1.438 -24.291 21.313 1.00 0.00 W1 H +ATOM 14334 OH2 TIP3X3949 12.299 -21.635 16.367 1.00 0.00 W1 O +ATOM 14335 H1 TIP3X3949 13.004 -21.137 15.955 1.00 0.00 W1 H +ATOM 14336 H2 TIP3X3949 12.748 -22.266 16.931 1.00 0.00 W1 H +ATOM 14337 OH2 TIP3X3950 14.895 -24.288 19.730 1.00 0.00 W1 O +ATOM 14338 H1 TIP3X3950 14.608 -24.115 20.626 1.00 0.00 W1 H +ATOM 14339 H2 TIP3X3950 15.408 -23.516 19.489 1.00 0.00 W1 H +ATOM 14340 OH2 TIP3X3951 1.393 -25.171 24.452 1.00 0.00 W1 O +ATOM 14341 H1 TIP3X3951 1.487 -24.493 23.783 1.00 0.00 W1 H +ATOM 14342 H2 TIP3X3951 2.051 -24.952 25.111 1.00 0.00 W1 H +ATOM 14343 OH2 TIP3X3952 4.180 -16.664 17.715 1.00 0.00 W1 O +ATOM 14344 H1 TIP3X3952 3.951 -16.304 16.859 1.00 0.00 W1 H +ATOM 14345 H2 TIP3X3952 3.767 -17.527 17.731 1.00 0.00 W1 H +ATOM 14346 OH2 TIP3X3953 2.955 -21.431 16.214 1.00 0.00 W1 O +ATOM 14347 H1 TIP3X3953 2.139 -21.721 15.805 1.00 0.00 W1 H +ATOM 14348 H2 TIP3X3953 3.487 -22.225 16.275 1.00 0.00 W1 H +ATOM 14349 OH2 TIP3X3954 4.373 -20.592 29.288 1.00 0.00 W1 O +ATOM 14350 H1 TIP3X3954 3.800 -19.990 28.814 1.00 0.00 W1 H +ATOM 14351 H2 TIP3X3954 3.899 -20.788 30.096 1.00 0.00 W1 H +ATOM 14352 OH2 TIP3X3955 7.449 -15.849 26.979 1.00 0.00 W1 O +ATOM 14353 H1 TIP3X3955 7.766 -16.143 27.833 1.00 0.00 W1 H +ATOM 14354 H2 TIP3X3955 7.882 -16.426 26.350 1.00 0.00 W1 H +ATOM 14355 OH2 TIP3X3956 12.155 -15.607 21.113 1.00 0.00 W1 O +ATOM 14356 H1 TIP3X3956 11.742 -16.298 20.594 1.00 0.00 W1 H +ATOM 14357 H2 TIP3X3956 11.959 -14.800 20.636 1.00 0.00 W1 H +ATOM 14358 OH2 TIP3X3957 8.733 -18.925 18.365 1.00 0.00 W1 O +ATOM 14359 H1 TIP3X3957 8.992 -18.139 17.883 1.00 0.00 W1 H +ATOM 14360 H2 TIP3X3957 8.163 -18.601 19.063 1.00 0.00 W1 H +ATOM 14361 OH2 TIP3X3958 8.750 -23.770 17.436 1.00 0.00 W1 O +ATOM 14362 H1 TIP3X3958 9.573 -23.697 16.953 1.00 0.00 W1 H +ATOM 14363 H2 TIP3X3958 8.757 -23.026 18.038 1.00 0.00 W1 H +ATOM 14364 OH2 TIP3X3959 12.151 -29.047 27.227 1.00 0.00 W1 O +ATOM 14365 H1 TIP3X3959 12.956 -29.277 26.763 1.00 0.00 W1 H +ATOM 14366 H2 TIP3X3959 12.442 -28.494 27.952 1.00 0.00 W1 H +ATOM 14367 OH2 TIP3X3960 0.116 -21.945 18.633 1.00 0.00 W1 O +ATOM 14368 H1 TIP3X3960 -0.037 -21.853 17.693 1.00 0.00 W1 H +ATOM 14369 H2 TIP3X3960 1.070 -21.945 18.722 1.00 0.00 W1 H +ATOM 14370 OH2 TIP3X3961 10.878 -22.357 25.229 1.00 0.00 W1 O +ATOM 14371 H1 TIP3X3961 11.424 -21.696 25.655 1.00 0.00 W1 H +ATOM 14372 H2 TIP3X3961 11.337 -22.558 24.414 1.00 0.00 W1 H +ATOM 14373 OH2 TIP3X3962 9.700 -17.384 16.307 1.00 0.00 W1 O +ATOM 14374 H1 TIP3X3962 10.525 -17.348 16.791 1.00 0.00 W1 H +ATOM 14375 H2 TIP3X3962 9.904 -17.896 15.524 1.00 0.00 W1 H +ATOM 14376 OH2 TIP3X3963 9.693 -19.596 27.958 1.00 0.00 W1 O +ATOM 14377 H1 TIP3X3963 8.872 -19.349 28.384 1.00 0.00 W1 H +ATOM 14378 H2 TIP3X3963 9.463 -19.692 27.033 1.00 0.00 W1 H +ATOM 14379 OH2 TIP3X3964 6.318 -19.371 19.844 1.00 0.00 W1 O +ATOM 14380 H1 TIP3X3964 5.611 -19.224 19.216 1.00 0.00 W1 H +ATOM 14381 H2 TIP3X3964 5.981 -19.027 20.671 1.00 0.00 W1 H +ATOM 14382 OH2 TIP3X3965 2.883 -18.459 28.555 1.00 0.00 W1 O +ATOM 14383 H1 TIP3X3965 3.617 -17.848 28.491 1.00 0.00 W1 H +ATOM 14384 H2 TIP3X3965 2.571 -18.365 29.455 1.00 0.00 W1 H +ATOM 14385 OH2 TIP3X3966 2.473 -16.755 22.657 1.00 0.00 W1 O +ATOM 14386 H1 TIP3X3966 1.887 -17.496 22.503 1.00 0.00 W1 H +ATOM 14387 H2 TIP3X3966 2.916 -16.621 21.819 1.00 0.00 W1 H +ATOM 14388 OH2 TIP3X3967 10.826 -30.741 23.738 1.00 0.00 W1 O +ATOM 14389 H1 TIP3X3967 11.158 -30.816 22.843 1.00 0.00 W1 H +ATOM 14390 H2 TIP3X3967 10.781 -29.799 23.899 1.00 0.00 W1 H +ATOM 14391 OH2 TIP3X3968 8.064 -28.612 23.972 1.00 0.00 W1 O +ATOM 14392 H1 TIP3X3968 7.702 -28.123 23.233 1.00 0.00 W1 H +ATOM 14393 H2 TIP3X3968 7.332 -28.702 24.582 1.00 0.00 W1 H +ATOM 14394 OH2 TIP3X3969 6.783 -30.628 17.900 1.00 0.00 W1 O +ATOM 14395 H1 TIP3X3969 7.639 -30.883 18.245 1.00 0.00 W1 H +ATOM 14396 H2 TIP3X3969 6.265 -31.432 17.925 1.00 0.00 W1 H +ATOM 14397 OH2 TIP3X3970 9.535 -30.784 18.944 1.00 0.00 W1 O +ATOM 14398 H1 TIP3X3970 9.990 -31.520 19.352 1.00 0.00 W1 H +ATOM 14399 H2 TIP3X3970 9.942 -30.698 18.082 1.00 0.00 W1 H +ATOM 14400 OH2 TIP3X3971 4.174 -16.206 30.398 1.00 0.00 W1 O +ATOM 14401 H1 TIP3X3971 3.924 -15.449 29.869 1.00 0.00 W1 H +ATOM 14402 H2 TIP3X3971 5.085 -16.375 30.159 1.00 0.00 W1 H +ATOM 14403 OH2 TIP3X3972 9.181 -17.511 20.699 1.00 0.00 W1 O +ATOM 14404 H1 TIP3X3972 9.842 -18.153 20.959 1.00 0.00 W1 H +ATOM 14405 H2 TIP3X3972 9.168 -16.877 21.415 1.00 0.00 W1 H +ATOM 14406 OH2 TIP3X3973 6.920 -16.609 29.608 1.00 0.00 W1 O +ATOM 14407 H1 TIP3X3973 7.138 -17.501 29.879 1.00 0.00 W1 H +ATOM 14408 H2 TIP3X3973 7.528 -16.055 30.098 1.00 0.00 W1 H +ATOM 14409 OH2 TIP3X3974 5.867 -28.491 19.653 1.00 0.00 W1 O +ATOM 14410 H1 TIP3X3974 6.524 -29.150 19.430 1.00 0.00 W1 H +ATOM 14411 H2 TIP3X3974 5.909 -28.422 20.607 1.00 0.00 W1 H +ATOM 14412 OH2 TIP3X3975 0.580 -30.152 29.109 1.00 0.00 W1 O +ATOM 14413 H1 TIP3X3975 1.328 -30.348 28.545 1.00 0.00 W1 H +ATOM 14414 H2 TIP3X3975 0.788 -30.578 29.940 1.00 0.00 W1 H +ATOM 14415 OH2 TIP3X3976 11.699 -17.425 18.710 1.00 0.00 W1 O +ATOM 14416 H1 TIP3X3976 11.844 -18.365 18.813 1.00 0.00 W1 H +ATOM 14417 H2 TIP3X3976 12.523 -17.093 18.353 1.00 0.00 W1 H +ATOM 14418 OH2 TIP3X3977 13.367 -30.659 29.937 1.00 0.00 W1 O +ATOM 14419 H1 TIP3X3977 12.753 -30.585 29.207 1.00 0.00 W1 H +ATOM 14420 H2 TIP3X3977 14.137 -30.164 29.656 1.00 0.00 W1 H +ATOM 14421 OH2 TIP3X3978 4.161 -16.446 20.424 1.00 0.00 W1 O +ATOM 14422 H1 TIP3X3978 4.154 -16.401 19.468 1.00 0.00 W1 H +ATOM 14423 H2 TIP3X3978 4.968 -16.000 20.680 1.00 0.00 W1 H +ATOM 14424 OH2 TIP3X3979 15.070 -17.507 28.373 1.00 0.00 W1 O +ATOM 14425 H1 TIP3X3979 14.347 -16.956 28.674 1.00 0.00 W1 H +ATOM 14426 H2 TIP3X3979 15.858 -17.008 28.587 1.00 0.00 W1 H +ATOM 14427 OH2 TIP3X3980 2.695 -28.185 20.053 1.00 0.00 W1 O +ATOM 14428 H1 TIP3X3980 2.052 -27.797 19.461 1.00 0.00 W1 H +ATOM 14429 H2 TIP3X3980 3.498 -27.688 19.895 1.00 0.00 W1 H +ATOM 14430 OH2 TIP3X3981 4.124 -19.586 17.785 1.00 0.00 W1 O +ATOM 14431 H1 TIP3X3981 4.085 -20.214 17.063 1.00 0.00 W1 H +ATOM 14432 H2 TIP3X3981 3.405 -19.840 18.363 1.00 0.00 W1 H +ATOM 14433 OH2 TIP3X3982 2.019 -4.501 -26.806 1.00 0.00 W1 O +ATOM 14434 H1 TIP3X3982 2.201 -4.577 -25.869 1.00 0.00 W1 H +ATOM 14435 H2 TIP3X3982 1.995 -3.558 -26.970 1.00 0.00 W1 H +ATOM 14436 OH2 TIP3X3983 13.121 -7.010 -23.068 1.00 0.00 W1 O +ATOM 14437 H1 TIP3X3983 13.356 -6.745 -23.957 1.00 0.00 W1 H +ATOM 14438 H2 TIP3X3983 13.950 -7.273 -22.669 1.00 0.00 W1 H +ATOM 14439 OH2 TIP3X3984 5.105 -7.286 -27.089 1.00 0.00 W1 O +ATOM 14440 H1 TIP3X3984 5.136 -6.377 -26.792 1.00 0.00 W1 H +ATOM 14441 H2 TIP3X3984 5.613 -7.769 -26.437 1.00 0.00 W1 H +ATOM 14442 OH2 TIP3X3985 12.908 -3.127 -24.946 1.00 0.00 W1 O +ATOM 14443 H1 TIP3X3985 12.634 -2.637 -24.171 1.00 0.00 W1 H +ATOM 14444 H2 TIP3X3985 12.383 -3.927 -24.922 1.00 0.00 W1 H +ATOM 14445 OH2 TIP3X3986 11.425 -4.684 -27.903 1.00 0.00 W1 O +ATOM 14446 H1 TIP3X3986 11.587 -4.912 -28.818 1.00 0.00 W1 H +ATOM 14447 H2 TIP3X3986 10.496 -4.455 -27.873 1.00 0.00 W1 H +ATOM 14448 OH2 TIP3X3987 15.273 -4.152 -23.118 1.00 0.00 W1 O +ATOM 14449 H1 TIP3X3987 14.721 -4.069 -23.896 1.00 0.00 W1 H +ATOM 14450 H2 TIP3X3987 14.662 -4.368 -22.413 1.00 0.00 W1 H +ATOM 14451 OH2 TIP3X3988 1.909 -2.887 -20.667 1.00 0.00 W1 O +ATOM 14452 H1 TIP3X3988 2.315 -2.684 -19.824 1.00 0.00 W1 H +ATOM 14453 H2 TIP3X3988 1.338 -3.633 -20.484 1.00 0.00 W1 H +ATOM 14454 OH2 TIP3X3989 9.284 -1.263 -21.441 1.00 0.00 W1 O +ATOM 14455 H1 TIP3X3989 9.585 -2.163 -21.319 1.00 0.00 W1 H +ATOM 14456 H2 TIP3X3989 9.909 -0.882 -22.058 1.00 0.00 W1 H +ATOM 14457 OH2 TIP3X3990 12.717 -1.306 -21.561 1.00 0.00 W1 O +ATOM 14458 H1 TIP3X3990 12.281 -0.483 -21.781 1.00 0.00 W1 H +ATOM 14459 H2 TIP3X3990 13.646 -1.080 -21.512 1.00 0.00 W1 H +ATOM 14460 OH2 TIP3X3991 5.165 -1.731 -22.432 1.00 0.00 W1 O +ATOM 14461 H1 TIP3X3991 5.520 -0.882 -22.695 1.00 0.00 W1 H +ATOM 14462 H2 TIP3X3991 4.230 -1.672 -22.628 1.00 0.00 W1 H +ATOM 14463 OH2 TIP3X3992 10.006 -9.839 -23.530 1.00 0.00 W1 O +ATOM 14464 H1 TIP3X3992 9.929 -10.648 -24.035 1.00 0.00 W1 H +ATOM 14465 H2 TIP3X3992 10.949 -9.700 -23.443 1.00 0.00 W1 H +ATOM 14466 OH2 TIP3X3993 6.029 -13.741 -21.168 1.00 0.00 W1 O +ATOM 14467 H1 TIP3X3993 6.287 -14.479 -20.615 1.00 0.00 W1 H +ATOM 14468 H2 TIP3X3993 5.353 -14.098 -21.744 1.00 0.00 W1 H +ATOM 14469 OH2 TIP3X3994 14.273 -12.737 -24.745 1.00 0.00 W1 O +ATOM 14470 H1 TIP3X3994 13.965 -12.399 -23.904 1.00 0.00 W1 H +ATOM 14471 H2 TIP3X3994 14.341 -13.682 -24.614 1.00 0.00 W1 H +ATOM 14472 OH2 TIP3X3995 12.870 -11.542 -22.791 1.00 0.00 W1 O +ATOM 14473 H1 TIP3X3995 13.446 -11.770 -22.061 1.00 0.00 W1 H +ATOM 14474 H2 TIP3X3995 11.996 -11.796 -22.496 1.00 0.00 W1 H +ATOM 14475 OH2 TIP3X3996 5.917 -10.417 -21.420 1.00 0.00 W1 O +ATOM 14476 H1 TIP3X3996 6.420 -11.119 -21.008 1.00 0.00 W1 H +ATOM 14477 H2 TIP3X3996 6.574 -9.775 -21.687 1.00 0.00 W1 H +ATOM 14478 OH2 TIP3X3997 13.394 -9.369 -24.523 1.00 0.00 W1 O +ATOM 14479 H1 TIP3X3997 13.435 -10.268 -24.199 1.00 0.00 W1 H +ATOM 14480 H2 TIP3X3997 13.276 -8.836 -23.736 1.00 0.00 W1 H +ATOM 14481 OH2 TIP3X3998 12.078 -12.725 -26.654 1.00 0.00 W1 O +ATOM 14482 H1 TIP3X3998 12.903 -12.541 -26.205 1.00 0.00 W1 H +ATOM 14483 H2 TIP3X3998 12.155 -12.270 -27.493 1.00 0.00 W1 H +ATOM 14484 OH2 TIP3X3999 8.261 -6.754 -20.583 1.00 0.00 W1 O +ATOM 14485 H1 TIP3X3999 9.138 -6.732 -20.966 1.00 0.00 W1 H +ATOM 14486 H2 TIP3X3999 7.995 -5.835 -20.537 1.00 0.00 W1 H +ATOM 14487 OH2 TIP3X4000 7.411 -4.206 -20.773 1.00 0.00 W1 O +ATOM 14488 H1 TIP3X4000 7.387 -3.979 -21.702 1.00 0.00 W1 H +ATOM 14489 H2 TIP3X4000 6.491 -4.260 -20.514 1.00 0.00 W1 H +ATOM 14490 OH2 TIP3X4001 2.274 -12.324 -23.935 1.00 0.00 W1 O +ATOM 14491 H1 TIP3X4001 1.949 -11.445 -23.744 1.00 0.00 W1 H +ATOM 14492 H2 TIP3X4001 2.151 -12.427 -24.878 1.00 0.00 W1 H +ATOM 14493 OH2 TIP3X4002 4.430 -8.767 -23.922 1.00 0.00 W1 O +ATOM 14494 H1 TIP3X4002 3.747 -9.217 -24.419 1.00 0.00 W1 H +ATOM 14495 H2 TIP3X4002 4.916 -9.470 -23.490 1.00 0.00 W1 H +ATOM 14496 OH2 TIP3X4003 10.486 -3.842 -21.526 1.00 0.00 W1 O +ATOM 14497 H1 TIP3X4003 10.244 -4.428 -22.243 1.00 0.00 W1 H +ATOM 14498 H2 TIP3X4003 11.436 -3.931 -21.453 1.00 0.00 W1 H +ATOM 14499 OH2 TIP3X4004 14.784 -0.208 -24.745 1.00 0.00 W1 O +ATOM 14500 H1 TIP3X4004 14.778 -0.676 -23.910 1.00 0.00 W1 H +ATOM 14501 H2 TIP3X4004 13.903 -0.337 -25.098 1.00 0.00 W1 H +ATOM 14502 OH2 TIP3X4005 6.656 -3.871 -23.723 1.00 0.00 W1 O +ATOM 14503 H1 TIP3X4005 6.084 -4.591 -23.454 1.00 0.00 W1 H +ATOM 14504 H2 TIP3X4005 6.195 -3.081 -23.441 1.00 0.00 W1 H +ATOM 14505 OH2 TIP3X4006 8.877 -13.420 -19.153 1.00 0.00 W1 O +ATOM 14506 H1 TIP3X4006 8.135 -12.940 -18.786 1.00 0.00 W1 H +ATOM 14507 H2 TIP3X4006 8.497 -14.232 -19.487 1.00 0.00 W1 H +ATOM 14508 OH2 TIP3X4007 4.229 -12.715 -29.351 1.00 0.00 W1 O +ATOM 14509 H1 TIP3X4007 4.131 -13.377 -28.667 1.00 0.00 W1 H +ATOM 14510 H2 TIP3X4007 4.046 -13.183 -30.166 1.00 0.00 W1 H +ATOM 14511 OH2 TIP3X4008 15.123 -11.793 -21.162 1.00 0.00 W1 O +ATOM 14512 H1 TIP3X4008 15.642 -11.124 -21.609 1.00 0.00 W1 H +ATOM 14513 H2 TIP3X4008 15.565 -11.917 -20.322 1.00 0.00 W1 H +ATOM 14514 OH2 TIP3X4009 1.181 -15.440 -27.002 1.00 0.00 W1 O +ATOM 14515 H1 TIP3X4009 1.906 -14.819 -26.933 1.00 0.00 W1 H +ATOM 14516 H2 TIP3X4009 0.808 -15.473 -26.120 1.00 0.00 W1 H +ATOM 14517 OH2 TIP3X4010 6.447 -9.205 -17.015 1.00 0.00 W1 O +ATOM 14518 H1 TIP3X4010 7.311 -8.806 -17.116 1.00 0.00 W1 H +ATOM 14519 H2 TIP3X4010 6.599 -10.142 -17.138 1.00 0.00 W1 H +ATOM 14520 OH2 TIP3X4011 9.613 -4.295 -24.276 1.00 0.00 W1 O +ATOM 14521 H1 TIP3X4011 9.707 -5.157 -24.679 1.00 0.00 W1 H +ATOM 14522 H2 TIP3X4011 8.680 -4.095 -24.352 1.00 0.00 W1 H +ATOM 14523 OH2 TIP3X4012 8.225 -6.011 -26.745 1.00 0.00 W1 O +ATOM 14524 H1 TIP3X4012 7.660 -6.625 -26.275 1.00 0.00 W1 H +ATOM 14525 H2 TIP3X4012 7.751 -5.180 -26.716 1.00 0.00 W1 H +ATOM 14526 OH2 TIP3X4013 0.762 -5.497 -20.288 1.00 0.00 W1 O +ATOM 14527 H1 TIP3X4013 0.228 -6.099 -20.806 1.00 0.00 W1 H +ATOM 14528 H2 TIP3X4013 0.292 -5.411 -19.459 1.00 0.00 W1 H +ATOM 14529 OH2 TIP3X4014 12.059 -6.477 -25.920 1.00 0.00 W1 O +ATOM 14530 H1 TIP3X4014 12.003 -7.391 -26.197 1.00 0.00 W1 H +ATOM 14531 H2 TIP3X4014 11.886 -5.974 -26.716 1.00 0.00 W1 H +ATOM 14532 OH2 TIP3X4015 12.356 -5.963 -18.896 1.00 0.00 W1 O +ATOM 14533 H1 TIP3X4015 11.453 -5.879 -18.588 1.00 0.00 W1 H +ATOM 14534 H2 TIP3X4015 12.524 -6.905 -18.892 1.00 0.00 W1 H +ATOM 14535 OH2 TIP3X4016 14.722 -8.003 -21.090 1.00 0.00 W1 O +ATOM 14536 H1 TIP3X4016 15.385 -8.684 -21.209 1.00 0.00 W1 H +ATOM 14537 H2 TIP3X4016 14.006 -8.443 -20.631 1.00 0.00 W1 H +ATOM 14538 OH2 TIP3X4017 3.867 -8.316 -15.946 1.00 0.00 W1 O +ATOM 14539 H1 TIP3X4017 3.338 -8.550 -16.708 1.00 0.00 W1 H +ATOM 14540 H2 TIP3X4017 4.762 -8.268 -16.280 1.00 0.00 W1 H +ATOM 14541 OH2 TIP3X4018 4.777 -5.110 -20.384 1.00 0.00 W1 O +ATOM 14542 H1 TIP3X4018 4.732 -5.665 -19.606 1.00 0.00 W1 H +ATOM 14543 H2 TIP3X4018 4.144 -4.412 -20.218 1.00 0.00 W1 H +ATOM 14544 OH2 TIP3X4019 13.449 -3.980 -20.635 1.00 0.00 W1 O +ATOM 14545 H1 TIP3X4019 13.872 -3.212 -20.251 1.00 0.00 W1 H +ATOM 14546 H2 TIP3X4019 13.145 -4.488 -19.882 1.00 0.00 W1 H +ATOM 14547 OH2 TIP3X4020 11.536 -2.005 -18.810 1.00 0.00 W1 O +ATOM 14548 H1 TIP3X4020 10.829 -2.634 -18.952 1.00 0.00 W1 H +ATOM 14549 H2 TIP3X4020 11.865 -1.810 -19.687 1.00 0.00 W1 H +ATOM 14550 OH2 TIP3X4021 11.787 -3.469 -16.413 1.00 0.00 W1 O +ATOM 14551 H1 TIP3X4021 11.154 -4.075 -16.797 1.00 0.00 W1 H +ATOM 14552 H2 TIP3X4021 11.901 -2.788 -17.077 1.00 0.00 W1 H +ATOM 14553 OH2 TIP3X4022 15.398 -1.560 -22.347 1.00 0.00 W1 O +ATOM 14554 H1 TIP3X4022 16.075 -1.719 -21.690 1.00 0.00 W1 H +ATOM 14555 H2 TIP3X4022 15.163 -2.432 -22.666 1.00 0.00 W1 H +ATOM 14556 OH2 TIP3X4023 5.954 -15.089 -23.954 1.00 0.00 W1 O +ATOM 14557 H1 TIP3X4023 5.662 -14.180 -24.015 1.00 0.00 W1 H +ATOM 14558 H2 TIP3X4023 6.786 -15.107 -24.427 1.00 0.00 W1 H +ATOM 14559 OH2 TIP3X4024 8.078 -5.143 -30.300 1.00 0.00 W1 O +ATOM 14560 H1 TIP3X4024 7.383 -5.765 -30.085 1.00 0.00 W1 H +ATOM 14561 H2 TIP3X4024 8.060 -4.507 -29.585 1.00 0.00 W1 H +ATOM 14562 OH2 TIP3X4025 15.458 -6.379 -30.863 1.00 0.00 W1 O +ATOM 14563 H1 TIP3X4025 15.195 -7.129 -31.397 1.00 0.00 W1 H +ATOM 14564 H2 TIP3X4025 15.204 -5.615 -31.381 1.00 0.00 W1 H +ATOM 14565 OH2 TIP3X4026 1.406 -2.683 -31.146 1.00 0.00 W1 O +ATOM 14566 H1 TIP3X4026 1.852 -3.232 -30.501 1.00 0.00 W1 H +ATOM 14567 H2 TIP3X4026 0.510 -3.017 -31.167 1.00 0.00 W1 H +ATOM 14568 OH2 TIP3X4027 13.500 -0.554 -29.888 1.00 0.00 W1 O +ATOM 14569 H1 TIP3X4027 14.385 -0.882 -30.046 1.00 0.00 W1 H +ATOM 14570 H2 TIP3X4027 13.270 -0.086 -30.690 1.00 0.00 W1 H +ATOM 14571 OH2 TIP3X4028 14.892 -4.892 -17.810 1.00 0.00 W1 O +ATOM 14572 H1 TIP3X4028 14.782 -3.943 -17.751 1.00 0.00 W1 H +ATOM 14573 H2 TIP3X4028 13.999 -5.237 -17.820 1.00 0.00 W1 H +ATOM 14574 OH2 TIP3X4029 1.578 -2.066 -28.191 1.00 0.00 W1 O +ATOM 14575 H1 TIP3X4029 1.510 -1.230 -27.731 1.00 0.00 W1 H +ATOM 14576 H2 TIP3X4029 0.683 -2.404 -28.208 1.00 0.00 W1 H +ATOM 14577 OH2 TIP3X4030 14.158 -3.573 -30.547 1.00 0.00 W1 O +ATOM 14578 H1 TIP3X4030 14.190 -3.653 -29.594 1.00 0.00 W1 H +ATOM 14579 H2 TIP3X4030 13.325 -3.136 -30.724 1.00 0.00 W1 H +ATOM 14580 OH2 TIP3X4031 10.529 -15.278 -17.663 1.00 0.00 W1 O +ATOM 14581 H1 TIP3X4031 10.222 -14.530 -18.176 1.00 0.00 W1 H +ATOM 14582 H2 TIP3X4031 10.583 -15.995 -18.295 1.00 0.00 W1 H +ATOM 14583 OH2 TIP3X4032 4.743 -1.362 -19.634 1.00 0.00 W1 O +ATOM 14584 H1 TIP3X4032 5.591 -1.124 -19.260 1.00 0.00 W1 H +ATOM 14585 H2 TIP3X4032 4.954 -1.742 -20.487 1.00 0.00 W1 H +ATOM 14586 OH2 TIP3X4033 3.209 -13.343 -16.284 1.00 0.00 W1 O +ATOM 14587 H1 TIP3X4033 2.332 -13.254 -15.910 1.00 0.00 W1 H +ATOM 14588 H2 TIP3X4033 3.272 -12.631 -16.920 1.00 0.00 W1 H +ATOM 14589 OH2 TIP3X4034 9.406 -11.396 -30.553 1.00 0.00 W1 O +ATOM 14590 H1 TIP3X4034 9.240 -11.099 -31.448 1.00 0.00 W1 H +ATOM 14591 H2 TIP3X4034 8.535 -11.520 -30.176 1.00 0.00 W1 H +ATOM 14592 OH2 TIP3X4035 14.804 -3.636 -27.505 1.00 0.00 W1 O +ATOM 14593 H1 TIP3X4035 15.377 -4.373 -27.292 1.00 0.00 W1 H +ATOM 14594 H2 TIP3X4035 14.473 -3.337 -26.658 1.00 0.00 W1 H +ATOM 14595 OH2 TIP3X4036 10.065 -14.600 -30.576 1.00 0.00 W1 O +ATOM 14596 H1 TIP3X4036 10.797 -13.984 -30.552 1.00 0.00 W1 H +ATOM 14597 H2 TIP3X4036 10.306 -15.232 -31.253 1.00 0.00 W1 H +ATOM 14598 OH2 TIP3X4037 14.597 -14.506 -20.311 1.00 0.00 W1 O +ATOM 14599 H1 TIP3X4037 15.089 -15.136 -19.784 1.00 0.00 W1 H +ATOM 14600 H2 TIP3X4037 15.197 -14.264 -21.016 1.00 0.00 W1 H +ATOM 14601 OH2 TIP3X4038 2.104 -5.286 -24.233 1.00 0.00 W1 O +ATOM 14602 H1 TIP3X4038 1.436 -4.962 -23.629 1.00 0.00 W1 H +ATOM 14603 H2 TIP3X4038 2.896 -5.355 -23.701 1.00 0.00 W1 H +ATOM 14604 OH2 TIP3X4039 7.101 -3.867 -17.123 1.00 0.00 W1 O +ATOM 14605 H1 TIP3X4039 7.324 -4.245 -16.272 1.00 0.00 W1 H +ATOM 14606 H2 TIP3X4039 6.494 -4.496 -17.513 1.00 0.00 W1 H +ATOM 14607 OH2 TIP3X4040 10.580 -12.562 -21.710 1.00 0.00 W1 O +ATOM 14608 H1 TIP3X4040 10.639 -12.744 -20.772 1.00 0.00 W1 H +ATOM 14609 H2 TIP3X4040 9.642 -12.475 -21.879 1.00 0.00 W1 H +ATOM 14610 OH2 TIP3X4041 6.772 -11.905 -17.531 1.00 0.00 W1 O +ATOM 14611 H1 TIP3X4041 5.905 -11.975 -17.931 1.00 0.00 W1 H +ATOM 14612 H2 TIP3X4041 6.717 -12.446 -16.743 1.00 0.00 W1 H +ATOM 14613 OH2 TIP3X4042 14.258 -9.185 -15.778 1.00 0.00 W1 O +ATOM 14614 H1 TIP3X4042 15.052 -9.718 -15.795 1.00 0.00 W1 H +ATOM 14615 H2 TIP3X4042 13.964 -9.220 -14.868 1.00 0.00 W1 H +ATOM 14616 OH2 TIP3X4043 2.443 -15.318 -19.860 1.00 0.00 W1 O +ATOM 14617 H1 TIP3X4043 2.217 -14.865 -20.672 1.00 0.00 W1 H +ATOM 14618 H2 TIP3X4043 3.273 -15.755 -20.051 1.00 0.00 W1 H +ATOM 14619 OH2 TIP3X4044 8.538 -14.860 -24.778 1.00 0.00 W1 O +ATOM 14620 H1 TIP3X4044 9.020 -14.346 -25.426 1.00 0.00 W1 H +ATOM 14621 H2 TIP3X4044 8.882 -14.567 -23.934 1.00 0.00 W1 H +ATOM 14622 OH2 TIP3X4045 3.008 -10.269 -29.625 1.00 0.00 W1 O +ATOM 14623 H1 TIP3X4045 3.430 -9.623 -30.191 1.00 0.00 W1 H +ATOM 14624 H2 TIP3X4045 3.720 -10.844 -29.344 1.00 0.00 W1 H +ATOM 14625 OH2 TIP3X4046 3.532 -9.612 -20.314 1.00 0.00 W1 O +ATOM 14626 H1 TIP3X4046 3.448 -8.821 -19.782 1.00 0.00 W1 H +ATOM 14627 H2 TIP3X4046 4.447 -9.616 -20.595 1.00 0.00 W1 H +ATOM 14628 OH2 TIP3X4047 2.715 -8.894 -27.129 1.00 0.00 W1 O +ATOM 14629 H1 TIP3X4047 2.778 -9.183 -28.039 1.00 0.00 W1 H +ATOM 14630 H2 TIP3X4047 3.490 -8.349 -26.996 1.00 0.00 W1 H +ATOM 14631 OH2 TIP3X4048 11.735 -12.324 -29.369 1.00 0.00 W1 O +ATOM 14632 H1 TIP3X4048 11.028 -11.836 -29.789 1.00 0.00 W1 H +ATOM 14633 H2 TIP3X4048 12.460 -12.280 -29.992 1.00 0.00 W1 H +ATOM 14634 OH2 TIP3X4049 0.286 -11.438 -18.281 1.00 0.00 W1 O +ATOM 14635 H1 TIP3X4049 -0.619 -11.144 -18.170 1.00 0.00 W1 H +ATOM 14636 H2 TIP3X4049 0.426 -12.057 -17.564 1.00 0.00 W1 H +ATOM 14637 OH2 TIP3X4050 1.429 -14.600 -22.298 1.00 0.00 W1 O +ATOM 14638 H1 TIP3X4050 1.536 -15.302 -22.941 1.00 0.00 W1 H +ATOM 14639 H2 TIP3X4050 1.564 -13.795 -22.797 1.00 0.00 W1 H +ATOM 14640 OH2 TIP3X4051 12.951 -10.972 -17.411 1.00 0.00 W1 O +ATOM 14641 H1 TIP3X4051 13.262 -10.394 -16.715 1.00 0.00 W1 H +ATOM 14642 H2 TIP3X4051 12.007 -11.036 -17.265 1.00 0.00 W1 H +ATOM 14643 OH2 TIP3X4052 9.994 -10.966 -17.464 1.00 0.00 W1 O +ATOM 14644 H1 TIP3X4052 9.634 -10.398 -18.145 1.00 0.00 W1 H +ATOM 14645 H2 TIP3X4052 9.656 -11.837 -17.675 1.00 0.00 W1 H +ATOM 14646 OH2 TIP3X4053 8.197 -10.497 -27.598 1.00 0.00 W1 O +ATOM 14647 H1 TIP3X4053 8.286 -9.918 -28.355 1.00 0.00 W1 H +ATOM 14648 H2 TIP3X4053 7.427 -11.032 -27.795 1.00 0.00 W1 H +ATOM 14649 OH2 TIP3X4054 6.500 -11.166 -29.911 1.00 0.00 W1 O +ATOM 14650 H1 TIP3X4054 6.062 -10.973 -30.740 1.00 0.00 W1 H +ATOM 14651 H2 TIP3X4054 6.093 -11.977 -29.607 1.00 0.00 W1 H +ATOM 14652 OH2 TIP3X4055 7.210 -14.104 -16.122 1.00 0.00 W1 O +ATOM 14653 H1 TIP3X4055 6.744 -14.491 -15.381 1.00 0.00 W1 H +ATOM 14654 H2 TIP3X4055 8.124 -14.071 -15.839 1.00 0.00 W1 H +ATOM 14655 OH2 TIP3X4056 12.773 -8.759 -19.440 1.00 0.00 W1 O +ATOM 14656 H1 TIP3X4056 12.793 -9.409 -18.737 1.00 0.00 W1 H +ATOM 14657 H2 TIP3X4056 11.939 -8.911 -19.884 1.00 0.00 W1 H +ATOM 14658 OH2 TIP3X4057 0.848 -11.659 -30.971 1.00 0.00 W1 O +ATOM 14659 H1 TIP3X4057 0.092 -11.851 -30.417 1.00 0.00 W1 H +ATOM 14660 H2 TIP3X4057 1.382 -11.060 -30.448 1.00 0.00 W1 H +ATOM 14661 OH2 TIP3X4058 0.767 -0.165 -30.484 1.00 0.00 W1 O +ATOM 14662 H1 TIP3X4058 1.183 -0.913 -30.054 1.00 0.00 W1 H +ATOM 14663 H2 TIP3X4058 0.780 0.528 -29.824 1.00 0.00 W1 H +ATOM 14664 OH2 TIP3X4059 9.515 -12.005 -25.491 1.00 0.00 W1 O +ATOM 14665 H1 TIP3X4059 9.178 -11.655 -26.315 1.00 0.00 W1 H +ATOM 14666 H2 TIP3X4059 10.411 -12.273 -25.692 1.00 0.00 W1 H +ATOM 14667 OH2 TIP3X4060 4.970 -12.695 -23.747 1.00 0.00 W1 O +ATOM 14668 H1 TIP3X4060 4.028 -12.742 -23.905 1.00 0.00 W1 H +ATOM 14669 H2 TIP3X4060 5.109 -11.820 -23.383 1.00 0.00 W1 H +ATOM 14670 OH2 TIP3X4061 0.332 -11.569 -26.953 1.00 0.00 W1 O +ATOM 14671 H1 TIP3X4061 0.058 -11.693 -26.045 1.00 0.00 W1 H +ATOM 14672 H2 TIP3X4061 0.138 -10.650 -27.139 1.00 0.00 W1 H +ATOM 14673 OH2 TIP3X4062 4.333 -12.242 -18.893 1.00 0.00 W1 O +ATOM 14674 H1 TIP3X4062 4.355 -13.048 -19.409 1.00 0.00 W1 H +ATOM 14675 H2 TIP3X4062 3.939 -11.594 -19.477 1.00 0.00 W1 H +ATOM 14676 OH2 TIP3X4063 4.916 -5.706 -23.088 1.00 0.00 W1 O +ATOM 14677 H1 TIP3X4063 4.844 -6.642 -23.276 1.00 0.00 W1 H +ATOM 14678 H2 TIP3X4063 4.920 -5.653 -22.132 1.00 0.00 W1 H +ATOM 14679 OH2 TIP3X4064 9.105 -8.687 -18.526 1.00 0.00 W1 O +ATOM 14680 H1 TIP3X4064 9.517 -7.856 -18.289 1.00 0.00 W1 H +ATOM 14681 H2 TIP3X4064 8.555 -8.477 -19.280 1.00 0.00 W1 H +ATOM 14682 OH2 TIP3X4065 14.900 -13.321 -29.201 1.00 0.00 W1 O +ATOM 14683 H1 TIP3X4065 15.335 -13.094 -28.379 1.00 0.00 W1 H +ATOM 14684 H2 TIP3X4065 14.380 -14.096 -28.992 1.00 0.00 W1 H +ATOM 14685 OH2 TIP3X4066 6.055 -7.361 -30.023 1.00 0.00 W1 O +ATOM 14686 H1 TIP3X4066 5.766 -7.483 -29.119 1.00 0.00 W1 H +ATOM 14687 H2 TIP3X4066 6.744 -8.014 -30.144 1.00 0.00 W1 H +ATOM 14688 OH2 TIP3X4067 12.758 -8.845 -28.955 1.00 0.00 W1 O +ATOM 14689 H1 TIP3X4067 11.893 -9.044 -28.596 1.00 0.00 W1 H +ATOM 14690 H2 TIP3X4067 13.315 -8.724 -28.186 1.00 0.00 W1 H +ATOM 14691 OH2 TIP3X4068 7.591 -8.591 -22.485 1.00 0.00 W1 O +ATOM 14692 H1 TIP3X4068 7.688 -7.794 -21.963 1.00 0.00 W1 H +ATOM 14693 H2 TIP3X4068 8.466 -8.980 -22.493 1.00 0.00 W1 H +ATOM 14694 OH2 TIP3X4069 7.336 -8.209 -25.569 1.00 0.00 W1 O +ATOM 14695 H1 TIP3X4069 7.958 -8.805 -25.987 1.00 0.00 W1 H +ATOM 14696 H2 TIP3X4069 7.362 -8.446 -24.642 1.00 0.00 W1 H +ATOM 14697 OH2 TIP3X4070 10.231 -6.593 -16.633 1.00 0.00 W1 O +ATOM 14698 H1 TIP3X4070 9.553 -6.309 -16.020 1.00 0.00 W1 H +ATOM 14699 H2 TIP3X4070 11.029 -6.634 -16.106 1.00 0.00 W1 H +ATOM 14700 OH2 TIP3X4071 2.741 -7.178 -18.937 1.00 0.00 W1 O +ATOM 14701 H1 TIP3X4071 3.258 -6.772 -18.241 1.00 0.00 W1 H +ATOM 14702 H2 TIP3X4071 2.358 -6.441 -19.412 1.00 0.00 W1 H +ATOM 14703 OH2 TIP3X4072 1.647 -9.216 -17.315 1.00 0.00 W1 O +ATOM 14704 H1 TIP3X4072 1.443 -10.055 -17.728 1.00 0.00 W1 H +ATOM 14705 H2 TIP3X4072 1.524 -8.570 -18.011 1.00 0.00 W1 H +ATOM 14706 OH2 TIP3X4073 1.540 -8.342 -24.492 1.00 0.00 W1 O +ATOM 14707 H1 TIP3X4073 1.896 -7.470 -24.662 1.00 0.00 W1 H +ATOM 14708 H2 TIP3X4073 1.438 -8.733 -25.360 1.00 0.00 W1 H +ATOM 14709 OH2 TIP3X4074 12.299 -6.078 -30.305 1.00 0.00 W1 O +ATOM 14710 H1 TIP3X4074 13.004 -5.579 -30.717 1.00 0.00 W1 H +ATOM 14711 H2 TIP3X4074 12.748 -6.708 -29.742 1.00 0.00 W1 H +ATOM 14712 OH2 TIP3X4075 14.895 -8.731 -26.943 1.00 0.00 W1 O +ATOM 14713 H1 TIP3X4075 14.608 -8.558 -26.046 1.00 0.00 W1 H +ATOM 14714 H2 TIP3X4075 15.408 -7.959 -27.183 1.00 0.00 W1 H +ATOM 14715 OH2 TIP3X4076 1.393 -9.614 -22.221 1.00 0.00 W1 O +ATOM 14716 H1 TIP3X4076 1.487 -8.936 -22.889 1.00 0.00 W1 H +ATOM 14717 H2 TIP3X4076 2.051 -9.395 -21.561 1.00 0.00 W1 H +ATOM 14718 OH2 TIP3X4077 4.180 -1.107 -28.957 1.00 0.00 W1 O +ATOM 14719 H1 TIP3X4077 3.951 -0.747 -29.814 1.00 0.00 W1 H +ATOM 14720 H2 TIP3X4077 3.767 -1.970 -28.941 1.00 0.00 W1 H +ATOM 14721 OH2 TIP3X4078 2.955 -5.874 -30.459 1.00 0.00 W1 O +ATOM 14722 H1 TIP3X4078 2.139 -6.163 -30.867 1.00 0.00 W1 H +ATOM 14723 H2 TIP3X4078 3.487 -6.667 -30.397 1.00 0.00 W1 H +ATOM 14724 OH2 TIP3X4079 4.373 -5.034 -17.384 1.00 0.00 W1 O +ATOM 14725 H1 TIP3X4079 3.800 -4.432 -17.858 1.00 0.00 W1 H +ATOM 14726 H2 TIP3X4079 3.899 -5.230 -16.576 1.00 0.00 W1 H +ATOM 14727 OH2 TIP3X4080 7.449 -0.291 -19.693 1.00 0.00 W1 O +ATOM 14728 H1 TIP3X4080 7.766 -0.585 -18.840 1.00 0.00 W1 H +ATOM 14729 H2 TIP3X4080 7.882 -0.869 -20.322 1.00 0.00 W1 H +ATOM 14730 OH2 TIP3X4081 12.155 -0.050 -25.560 1.00 0.00 W1 O +ATOM 14731 H1 TIP3X4081 11.742 -0.741 -26.078 1.00 0.00 W1 H +ATOM 14732 H2 TIP3X4081 11.959 0.757 -26.036 1.00 0.00 W1 H +ATOM 14733 OH2 TIP3X4082 8.733 -3.367 -28.308 1.00 0.00 W1 O +ATOM 14734 H1 TIP3X4082 8.992 -2.582 -28.790 1.00 0.00 W1 H +ATOM 14735 H2 TIP3X4082 8.163 -3.044 -27.610 1.00 0.00 W1 H +ATOM 14736 OH2 TIP3X4083 8.750 -8.213 -29.236 1.00 0.00 W1 O +ATOM 14737 H1 TIP3X4083 9.573 -8.140 -29.719 1.00 0.00 W1 H +ATOM 14738 H2 TIP3X4083 8.757 -7.468 -28.635 1.00 0.00 W1 H +ATOM 14739 OH2 TIP3X4084 12.151 -13.489 -19.445 1.00 0.00 W1 O +ATOM 14740 H1 TIP3X4084 12.956 -13.720 -19.909 1.00 0.00 W1 H +ATOM 14741 H2 TIP3X4084 12.442 -12.936 -18.720 1.00 0.00 W1 H +ATOM 14742 OH2 TIP3X4085 0.116 -6.388 -28.039 1.00 0.00 W1 O +ATOM 14743 H1 TIP3X4085 -0.037 -6.295 -28.979 1.00 0.00 W1 H +ATOM 14744 H2 TIP3X4085 1.070 -6.388 -27.950 1.00 0.00 W1 H +ATOM 14745 OH2 TIP3X4086 10.878 -6.800 -21.443 1.00 0.00 W1 O +ATOM 14746 H1 TIP3X4086 11.424 -6.138 -21.017 1.00 0.00 W1 H +ATOM 14747 H2 TIP3X4086 11.337 -7.000 -22.259 1.00 0.00 W1 H +ATOM 14748 OH2 TIP3X4087 9.700 -1.826 -30.366 1.00 0.00 W1 O +ATOM 14749 H1 TIP3X4087 10.525 -1.791 -29.881 1.00 0.00 W1 H +ATOM 14750 H2 TIP3X4087 9.904 -2.339 -31.148 1.00 0.00 W1 H +ATOM 14751 OH2 TIP3X4088 9.693 -4.039 -18.715 1.00 0.00 W1 O +ATOM 14752 H1 TIP3X4088 8.872 -3.792 -18.288 1.00 0.00 W1 H +ATOM 14753 H2 TIP3X4088 9.463 -4.134 -19.639 1.00 0.00 W1 H +ATOM 14754 OH2 TIP3X4089 6.318 -3.814 -26.828 1.00 0.00 W1 O +ATOM 14755 H1 TIP3X4089 5.611 -3.667 -27.456 1.00 0.00 W1 H +ATOM 14756 H2 TIP3X4089 5.981 -3.469 -26.001 1.00 0.00 W1 H +ATOM 14757 OH2 TIP3X4090 2.883 -2.902 -18.117 1.00 0.00 W1 O +ATOM 14758 H1 TIP3X4090 3.617 -2.291 -18.181 1.00 0.00 W1 H +ATOM 14759 H2 TIP3X4090 2.571 -2.808 -17.217 1.00 0.00 W1 H +ATOM 14760 OH2 TIP3X4091 2.473 -1.197 -24.015 1.00 0.00 W1 O +ATOM 14761 H1 TIP3X4091 1.887 -1.938 -24.169 1.00 0.00 W1 H +ATOM 14762 H2 TIP3X4091 2.916 -1.064 -24.853 1.00 0.00 W1 H +ATOM 14763 OH2 TIP3X4092 10.826 -15.184 -22.935 1.00 0.00 W1 O +ATOM 14764 H1 TIP3X4092 11.158 -15.259 -23.829 1.00 0.00 W1 H +ATOM 14765 H2 TIP3X4092 10.781 -14.241 -22.774 1.00 0.00 W1 H +ATOM 14766 OH2 TIP3X4093 8.064 -13.055 -22.700 1.00 0.00 W1 O +ATOM 14767 H1 TIP3X4093 7.702 -12.566 -23.439 1.00 0.00 W1 H +ATOM 14768 H2 TIP3X4093 7.332 -13.144 -22.090 1.00 0.00 W1 H +ATOM 14769 OH2 TIP3X4094 6.783 -15.070 -28.772 1.00 0.00 W1 O +ATOM 14770 H1 TIP3X4094 7.639 -15.326 -28.427 1.00 0.00 W1 H +ATOM 14771 H2 TIP3X4094 6.265 -15.874 -28.747 1.00 0.00 W1 H +ATOM 14772 OH2 TIP3X4095 9.535 -15.227 -27.729 1.00 0.00 W1 O +ATOM 14773 H1 TIP3X4095 9.990 -15.963 -27.320 1.00 0.00 W1 H +ATOM 14774 H2 TIP3X4095 9.942 -15.140 -28.590 1.00 0.00 W1 H +ATOM 14775 OH2 TIP3X4096 4.174 -0.648 -16.274 1.00 0.00 W1 O +ATOM 14776 H1 TIP3X4096 3.924 0.109 -16.804 1.00 0.00 W1 H +ATOM 14777 H2 TIP3X4096 5.085 -0.817 -16.513 1.00 0.00 W1 H +ATOM 14778 OH2 TIP3X4097 9.181 -1.954 -25.974 1.00 0.00 W1 O +ATOM 14779 H1 TIP3X4097 9.842 -2.596 -25.714 1.00 0.00 W1 H +ATOM 14780 H2 TIP3X4097 9.168 -1.319 -25.257 1.00 0.00 W1 H +ATOM 14781 OH2 TIP3X4098 6.920 -1.051 -17.064 1.00 0.00 W1 O +ATOM 14782 H1 TIP3X4098 7.138 -1.943 -16.794 1.00 0.00 W1 H +ATOM 14783 H2 TIP3X4098 7.528 -0.497 -16.575 1.00 0.00 W1 H +ATOM 14784 OH2 TIP3X4099 5.867 -12.933 -27.020 1.00 0.00 W1 O +ATOM 14785 H1 TIP3X4099 6.524 -13.592 -27.242 1.00 0.00 W1 H +ATOM 14786 H2 TIP3X4099 5.909 -12.864 -26.066 1.00 0.00 W1 H +ATOM 14787 OH2 TIP3X4100 0.580 -14.595 -17.564 1.00 0.00 W1 O +ATOM 14788 H1 TIP3X4100 1.328 -14.790 -18.128 1.00 0.00 W1 H +ATOM 14789 H2 TIP3X4100 0.788 -15.020 -16.732 1.00 0.00 W1 H +ATOM 14790 OH2 TIP3X4101 11.699 -1.867 -27.962 1.00 0.00 W1 O +ATOM 14791 H1 TIP3X4101 11.844 -2.808 -27.859 1.00 0.00 W1 H +ATOM 14792 H2 TIP3X4101 12.523 -1.535 -28.319 1.00 0.00 W1 H +ATOM 14793 OH2 TIP3X4102 13.367 -15.101 -16.735 1.00 0.00 W1 O +ATOM 14794 H1 TIP3X4102 12.753 -15.027 -17.466 1.00 0.00 W1 H +ATOM 14795 H2 TIP3X4102 14.137 -14.606 -17.017 1.00 0.00 W1 H +ATOM 14796 OH2 TIP3X4103 4.161 -0.888 -26.249 1.00 0.00 W1 O +ATOM 14797 H1 TIP3X4103 4.154 -0.843 -27.205 1.00 0.00 W1 H +ATOM 14798 H2 TIP3X4103 4.968 -0.442 -25.993 1.00 0.00 W1 H +ATOM 14799 OH2 TIP3X4104 15.070 -1.950 -18.299 1.00 0.00 W1 O +ATOM 14800 H1 TIP3X4104 14.347 -1.399 -17.998 1.00 0.00 W1 H +ATOM 14801 H2 TIP3X4104 15.858 -1.450 -18.085 1.00 0.00 W1 H +ATOM 14802 OH2 TIP3X4105 2.695 -12.628 -26.619 1.00 0.00 W1 O +ATOM 14803 H1 TIP3X4105 2.052 -12.239 -27.212 1.00 0.00 W1 H +ATOM 14804 H2 TIP3X4105 3.498 -12.131 -26.777 1.00 0.00 W1 H +ATOM 14805 OH2 TIP3X4106 4.124 -4.029 -28.888 1.00 0.00 W1 O +ATOM 14806 H1 TIP3X4106 4.085 -4.657 -29.609 1.00 0.00 W1 H +ATOM 14807 H2 TIP3X4106 3.405 -4.282 -28.310 1.00 0.00 W1 H +ATOM 14808 OH2 TIP3X4107 12.908 -3.127 -9.388 1.00 0.00 W1 O +ATOM 14809 H1 TIP3X4107 12.634 -2.637 -8.613 1.00 0.00 W1 H +ATOM 14810 H2 TIP3X4107 12.383 -3.927 -9.365 1.00 0.00 W1 H +ATOM 14811 OH2 TIP3X4108 10.006 -9.839 -7.973 1.00 0.00 W1 O +ATOM 14812 H1 TIP3X4108 9.929 -10.648 -8.477 1.00 0.00 W1 H +ATOM 14813 H2 TIP3X4108 10.949 -9.700 -7.885 1.00 0.00 W1 H +ATOM 14814 OH2 TIP3X4109 14.273 -12.737 -9.188 1.00 0.00 W1 O +ATOM 14815 H1 TIP3X4109 13.965 -12.399 -8.347 1.00 0.00 W1 H +ATOM 14816 H2 TIP3X4109 14.341 -13.682 -9.056 1.00 0.00 W1 H +ATOM 14817 OH2 TIP3X4110 13.394 -9.369 -8.965 1.00 0.00 W1 O +ATOM 14818 H1 TIP3X4110 13.435 -10.268 -8.641 1.00 0.00 W1 H +ATOM 14819 H2 TIP3X4110 13.276 -8.836 -8.179 1.00 0.00 W1 H +ATOM 14820 OH2 TIP3X4111 12.078 -12.725 -11.097 1.00 0.00 W1 O +ATOM 14821 H1 TIP3X4111 12.903 -12.541 -10.648 1.00 0.00 W1 H +ATOM 14822 H2 TIP3X4111 12.155 -12.270 -11.936 1.00 0.00 W1 H +ATOM 14823 OH2 TIP3X4112 14.784 -0.208 -9.188 1.00 0.00 W1 O +ATOM 14824 H1 TIP3X4112 14.778 -0.676 -8.353 1.00 0.00 W1 H +ATOM 14825 H2 TIP3X4112 13.903 -0.337 -9.541 1.00 0.00 W1 H +ATOM 14826 OH2 TIP3X4113 4.229 -12.715 -13.794 1.00 0.00 W1 O +ATOM 14827 H1 TIP3X4113 4.131 -13.377 -13.109 1.00 0.00 W1 H +ATOM 14828 H2 TIP3X4113 4.046 -13.183 -14.608 1.00 0.00 W1 H +ATOM 14829 OH2 TIP3X4114 1.181 -15.440 -11.444 1.00 0.00 W1 O +ATOM 14830 H1 TIP3X4114 1.906 -14.819 -11.375 1.00 0.00 W1 H +ATOM 14831 H2 TIP3X4114 0.808 -15.473 -10.563 1.00 0.00 W1 H +ATOM 14832 OH2 TIP3X4115 5.954 -15.089 -8.397 1.00 0.00 W1 O +ATOM 14833 H1 TIP3X4115 5.662 -14.180 -8.457 1.00 0.00 W1 H +ATOM 14834 H2 TIP3X4115 6.786 -15.107 -8.870 1.00 0.00 W1 H +ATOM 14835 OH2 TIP3X4116 8.078 -5.143 -14.742 1.00 0.00 W1 O +ATOM 14836 H1 TIP3X4116 7.383 -5.765 -14.528 1.00 0.00 W1 H +ATOM 14837 H2 TIP3X4116 8.060 -4.507 -14.027 1.00 0.00 W1 H +ATOM 14838 OH2 TIP3X4117 15.458 -6.379 -15.306 1.00 0.00 W1 O +ATOM 14839 H1 TIP3X4117 15.195 -7.129 -15.839 1.00 0.00 W1 H +ATOM 14840 H2 TIP3X4117 15.204 -5.615 -15.823 1.00 0.00 W1 H +ATOM 14841 OH2 TIP3X4118 13.500 -0.554 -14.330 1.00 0.00 W1 O +ATOM 14842 H1 TIP3X4118 14.385 -0.882 -14.489 1.00 0.00 W1 H +ATOM 14843 H2 TIP3X4118 13.270 -0.086 -15.133 1.00 0.00 W1 H +ATOM 14844 OH2 TIP3X4119 14.158 -3.573 -14.990 1.00 0.00 W1 O +ATOM 14845 H1 TIP3X4119 14.190 -3.653 -14.036 1.00 0.00 W1 H +ATOM 14846 H2 TIP3X4119 13.325 -3.136 -15.166 1.00 0.00 W1 H +ATOM 14847 OH2 TIP3X4120 10.529 -15.278 -2.106 1.00 0.00 W1 O +ATOM 14848 H1 TIP3X4120 10.222 -14.530 -2.618 1.00 0.00 W1 H +ATOM 14849 H2 TIP3X4120 10.583 -15.995 -2.738 1.00 0.00 W1 H +ATOM 14850 OH2 TIP3X4121 9.406 -11.396 -14.996 1.00 0.00 W1 O +ATOM 14851 H1 TIP3X4121 9.240 -11.099 -15.891 1.00 0.00 W1 H +ATOM 14852 H2 TIP3X4121 8.535 -11.520 -14.619 1.00 0.00 W1 H +ATOM 14853 OH2 TIP3X4122 14.804 -3.636 -11.948 1.00 0.00 W1 O +ATOM 14854 H1 TIP3X4122 15.377 -4.373 -11.735 1.00 0.00 W1 H +ATOM 14855 H2 TIP3X4122 14.473 -3.337 -11.101 1.00 0.00 W1 H +ATOM 14856 OH2 TIP3X4123 10.065 -14.600 -15.019 1.00 0.00 W1 O +ATOM 14857 H1 TIP3X4123 10.797 -13.984 -14.994 1.00 0.00 W1 H +ATOM 14858 H2 TIP3X4123 10.306 -15.232 -15.695 1.00 0.00 W1 H +ATOM 14859 OH2 TIP3X4124 14.597 -14.506 -4.754 1.00 0.00 W1 O +ATOM 14860 H1 TIP3X4124 15.089 -15.136 -4.226 1.00 0.00 W1 H +ATOM 14861 H2 TIP3X4124 15.197 -14.264 -5.459 1.00 0.00 W1 H +ATOM 14862 OH2 TIP3X4125 8.538 -14.860 -9.221 1.00 0.00 W1 O +ATOM 14863 H1 TIP3X4125 9.020 -14.346 -9.868 1.00 0.00 W1 H +ATOM 14864 H2 TIP3X4125 8.882 -14.567 -8.377 1.00 0.00 W1 H +ATOM 14865 OH2 TIP3X4126 3.008 -10.269 -14.068 1.00 0.00 W1 O +ATOM 14866 H1 TIP3X4126 3.430 -9.623 -14.634 1.00 0.00 W1 H +ATOM 14867 H2 TIP3X4126 3.720 -10.844 -13.787 1.00 0.00 W1 H +ATOM 14868 OH2 TIP3X4127 2.715 -8.894 -11.571 1.00 0.00 W1 O +ATOM 14869 H1 TIP3X4127 2.778 -9.183 -12.482 1.00 0.00 W1 H +ATOM 14870 H2 TIP3X4127 3.490 -8.349 -11.438 1.00 0.00 W1 H +ATOM 14871 OH2 TIP3X4128 11.735 -12.324 -13.811 1.00 0.00 W1 O +ATOM 14872 H1 TIP3X4128 11.028 -11.836 -14.231 1.00 0.00 W1 H +ATOM 14873 H2 TIP3X4128 12.460 -12.280 -14.435 1.00 0.00 W1 H +ATOM 14874 OH2 TIP3X4129 8.197 -10.497 -12.041 1.00 0.00 W1 O +ATOM 14875 H1 TIP3X4129 8.286 -9.918 -12.797 1.00 0.00 W1 H +ATOM 14876 H2 TIP3X4129 7.427 -11.032 -12.237 1.00 0.00 W1 H +ATOM 14877 OH2 TIP3X4130 6.500 -11.166 -14.353 1.00 0.00 W1 O +ATOM 14878 H1 TIP3X4130 6.062 -10.973 -15.183 1.00 0.00 W1 H +ATOM 14879 H2 TIP3X4130 6.093 -11.977 -14.050 1.00 0.00 W1 H +ATOM 14880 OH2 TIP3X4131 7.210 -14.104 -0.564 1.00 0.00 W1 O +ATOM 14881 H1 TIP3X4131 6.744 -14.491 0.176 1.00 0.00 W1 H +ATOM 14882 H2 TIP3X4131 8.124 -14.071 -0.282 1.00 0.00 W1 H +ATOM 14883 OH2 TIP3X4132 0.848 -11.659 -15.413 1.00 0.00 W1 O +ATOM 14884 H1 TIP3X4132 0.092 -11.851 -14.859 1.00 0.00 W1 H +ATOM 14885 H2 TIP3X4132 1.382 -11.060 -14.891 1.00 0.00 W1 H +ATOM 14886 OH2 TIP3X4133 0.767 -0.165 -14.926 1.00 0.00 W1 O +ATOM 14887 H1 TIP3X4133 1.183 -0.913 -14.497 1.00 0.00 W1 H +ATOM 14888 H2 TIP3X4133 0.780 0.528 -14.267 1.00 0.00 W1 H +ATOM 14889 OH2 TIP3X4134 9.515 -12.005 -9.933 1.00 0.00 W1 O +ATOM 14890 H1 TIP3X4134 9.178 -11.655 -10.758 1.00 0.00 W1 H +ATOM 14891 H2 TIP3X4134 10.411 -12.273 -10.135 1.00 0.00 W1 H +ATOM 14892 OH2 TIP3X4135 0.332 -11.569 -11.396 1.00 0.00 W1 O +ATOM 14893 H1 TIP3X4135 0.058 -11.693 -10.487 1.00 0.00 W1 H +ATOM 14894 H2 TIP3X4135 0.138 -10.650 -11.582 1.00 0.00 W1 H +ATOM 14895 OH2 TIP3X4136 14.900 -13.321 -13.644 1.00 0.00 W1 O +ATOM 14896 H1 TIP3X4136 15.335 -13.094 -12.822 1.00 0.00 W1 H +ATOM 14897 H2 TIP3X4136 14.380 -14.096 -13.434 1.00 0.00 W1 H +ATOM 14898 OH2 TIP3X4137 6.055 -7.361 -14.466 1.00 0.00 W1 O +ATOM 14899 H1 TIP3X4137 5.766 -7.483 -13.561 1.00 0.00 W1 H +ATOM 14900 H2 TIP3X4137 6.744 -8.014 -14.587 1.00 0.00 W1 H +ATOM 14901 OH2 TIP3X4138 12.758 -8.845 -13.398 1.00 0.00 W1 O +ATOM 14902 H1 TIP3X4138 11.893 -9.044 -13.039 1.00 0.00 W1 H +ATOM 14903 H2 TIP3X4138 13.315 -8.724 -12.629 1.00 0.00 W1 H +ATOM 14904 OH2 TIP3X4139 12.299 -6.078 -14.748 1.00 0.00 W1 O +ATOM 14905 H1 TIP3X4139 13.004 -5.579 -15.160 1.00 0.00 W1 H +ATOM 14906 H2 TIP3X4139 12.748 -6.708 -14.184 1.00 0.00 W1 H +ATOM 14907 OH2 TIP3X4140 14.895 -8.731 -11.385 1.00 0.00 W1 O +ATOM 14908 H1 TIP3X4140 14.608 -8.558 -10.489 1.00 0.00 W1 H +ATOM 14909 H2 TIP3X4140 15.408 -7.959 -11.626 1.00 0.00 W1 H +ATOM 14910 OH2 TIP3X4141 2.955 -5.874 -14.901 1.00 0.00 W1 O +ATOM 14911 H1 TIP3X4141 2.139 -6.163 -15.310 1.00 0.00 W1 H +ATOM 14912 H2 TIP3X4141 3.487 -6.667 -14.840 1.00 0.00 W1 H +ATOM 14913 OH2 TIP3X4142 12.155 -0.050 -10.002 1.00 0.00 W1 O +ATOM 14914 H1 TIP3X4142 11.742 -0.741 -10.521 1.00 0.00 W1 H +ATOM 14915 H2 TIP3X4142 11.959 0.757 -10.479 1.00 0.00 W1 H +ATOM 14916 OH2 TIP3X4143 8.750 -8.213 -13.679 1.00 0.00 W1 O +ATOM 14917 H1 TIP3X4143 9.573 -8.140 -14.162 1.00 0.00 W1 H +ATOM 14918 H2 TIP3X4143 8.757 -7.468 -13.077 1.00 0.00 W1 H +ATOM 14919 OH2 TIP3X4144 0.116 -6.388 -12.482 1.00 0.00 W1 O +ATOM 14920 H1 TIP3X4144 -0.037 -6.295 -13.422 1.00 0.00 W1 H +ATOM 14921 H2 TIP3X4144 1.070 -6.388 -12.393 1.00 0.00 W1 H +ATOM 14922 OH2 TIP3X4145 10.826 -15.184 -7.377 1.00 0.00 W1 O +ATOM 14923 H1 TIP3X4145 11.158 -15.259 -8.272 1.00 0.00 W1 H +ATOM 14924 H2 TIP3X4145 10.781 -14.241 -7.216 1.00 0.00 W1 H +ATOM 14925 OH2 TIP3X4146 8.064 -13.055 -7.143 1.00 0.00 W1 O +ATOM 14926 H1 TIP3X4146 7.702 -12.566 -7.882 1.00 0.00 W1 H +ATOM 14927 H2 TIP3X4146 7.332 -13.144 -6.533 1.00 0.00 W1 H +ATOM 14928 OH2 TIP3X4147 6.783 -15.070 -13.215 1.00 0.00 W1 O +ATOM 14929 H1 TIP3X4147 7.639 -15.326 -12.869 1.00 0.00 W1 H +ATOM 14930 H2 TIP3X4147 6.265 -15.874 -13.190 1.00 0.00 W1 H +ATOM 14931 OH2 TIP3X4148 9.535 -15.227 -12.171 1.00 0.00 W1 O +ATOM 14932 H1 TIP3X4148 9.990 -15.963 -11.763 1.00 0.00 W1 H +ATOM 14933 H2 TIP3X4148 9.942 -15.140 -13.033 1.00 0.00 W1 H +ATOM 14934 OH2 TIP3X4149 5.867 -12.933 -11.462 1.00 0.00 W1 O +ATOM 14935 H1 TIP3X4149 6.524 -13.592 -11.685 1.00 0.00 W1 H +ATOM 14936 H2 TIP3X4149 5.909 -12.864 -10.508 1.00 0.00 W1 H +ATOM 14937 OH2 TIP3X4150 13.367 -15.101 -1.178 1.00 0.00 W1 O +ATOM 14938 H1 TIP3X4150 12.753 -15.027 -1.908 1.00 0.00 W1 H +ATOM 14939 H2 TIP3X4150 14.137 -14.606 -1.459 1.00 0.00 W1 H +ATOM 14940 OH2 TIP3X4151 2.695 -12.628 -11.062 1.00 0.00 W1 O +ATOM 14941 H1 TIP3X4151 2.052 -12.239 -11.654 1.00 0.00 W1 H +ATOM 14942 H2 TIP3X4151 3.498 -12.131 -11.220 1.00 0.00 W1 H +ATOM 14943 OH2 TIP3X4152 14.273 -12.737 6.370 1.00 0.00 W1 O +ATOM 14944 H1 TIP3X4152 13.965 -12.399 7.211 1.00 0.00 W1 H +ATOM 14945 H2 TIP3X4152 14.341 -13.682 6.501 1.00 0.00 W1 H +ATOM 14946 OH2 TIP3X4153 12.078 -12.725 4.461 1.00 0.00 W1 O +ATOM 14947 H1 TIP3X4153 12.903 -12.541 4.910 1.00 0.00 W1 H +ATOM 14948 H2 TIP3X4153 12.155 -12.270 3.622 1.00 0.00 W1 H +ATOM 14949 OH2 TIP3X4154 14.784 -0.208 6.370 1.00 0.00 W1 O +ATOM 14950 H1 TIP3X4154 14.778 -0.676 7.205 1.00 0.00 W1 H +ATOM 14951 H2 TIP3X4154 13.903 -0.337 6.017 1.00 0.00 W1 H +ATOM 14952 OH2 TIP3X4155 8.877 -13.420 11.962 1.00 0.00 W1 O +ATOM 14953 H1 TIP3X4155 8.135 -12.940 12.329 1.00 0.00 W1 H +ATOM 14954 H2 TIP3X4155 8.497 -14.232 11.628 1.00 0.00 W1 H +ATOM 14955 OH2 TIP3X4156 3.867 -8.316 15.169 1.00 0.00 W1 O +ATOM 14956 H1 TIP3X4156 3.338 -8.550 14.407 1.00 0.00 W1 H +ATOM 14957 H2 TIP3X4156 4.762 -8.268 14.835 1.00 0.00 W1 H +ATOM 14958 OH2 TIP3X4157 11.787 -3.469 14.702 1.00 0.00 W1 O +ATOM 14959 H1 TIP3X4157 11.154 -4.075 14.318 1.00 0.00 W1 H +ATOM 14960 H2 TIP3X4157 11.901 -2.788 14.038 1.00 0.00 W1 H +ATOM 14961 OH2 TIP3X4158 14.892 -4.892 13.305 1.00 0.00 W1 O +ATOM 14962 H1 TIP3X4158 14.782 -3.943 13.364 1.00 0.00 W1 H +ATOM 14963 H2 TIP3X4158 13.999 -5.237 13.294 1.00 0.00 W1 H +ATOM 14964 OH2 TIP3X4159 10.529 -15.278 13.452 1.00 0.00 W1 O +ATOM 14965 H1 TIP3X4159 10.222 -14.530 12.939 1.00 0.00 W1 H +ATOM 14966 H2 TIP3X4159 10.583 -15.995 12.820 1.00 0.00 W1 H +ATOM 14967 OH2 TIP3X4160 3.209 -13.343 14.831 1.00 0.00 W1 O +ATOM 14968 H1 TIP3X4160 2.332 -13.254 15.205 1.00 0.00 W1 H +ATOM 14969 H2 TIP3X4160 3.272 -12.631 14.195 1.00 0.00 W1 H +ATOM 14970 OH2 TIP3X4161 10.065 -14.600 0.539 1.00 0.00 W1 O +ATOM 14971 H1 TIP3X4161 10.797 -13.984 0.563 1.00 0.00 W1 H +ATOM 14972 H2 TIP3X4161 10.306 -15.232 -0.138 1.00 0.00 W1 H +ATOM 14973 OH2 TIP3X4162 14.258 -9.185 15.337 1.00 0.00 W1 O +ATOM 14974 H1 TIP3X4162 15.052 -9.718 15.320 1.00 0.00 W1 H +ATOM 14975 H2 TIP3X4162 13.964 -9.220 16.247 1.00 0.00 W1 H +ATOM 14976 OH2 TIP3X4163 2.443 -15.318 11.255 1.00 0.00 W1 O +ATOM 14977 H1 TIP3X4163 2.217 -14.865 10.443 1.00 0.00 W1 H +ATOM 14978 H2 TIP3X4163 3.273 -15.755 11.064 1.00 0.00 W1 H +ATOM 14979 OH2 TIP3X4164 8.538 -14.860 6.337 1.00 0.00 W1 O +ATOM 14980 H1 TIP3X4164 9.020 -14.346 5.689 1.00 0.00 W1 H +ATOM 14981 H2 TIP3X4164 8.882 -14.567 7.181 1.00 0.00 W1 H +ATOM 14982 OH2 TIP3X4165 0.286 -11.438 12.834 1.00 0.00 W1 O +ATOM 14983 H1 TIP3X4165 -0.619 -11.144 12.945 1.00 0.00 W1 H +ATOM 14984 H2 TIP3X4165 0.426 -12.057 13.551 1.00 0.00 W1 H +ATOM 14985 OH2 TIP3X4166 1.429 -14.600 8.817 1.00 0.00 W1 O +ATOM 14986 H1 TIP3X4166 1.536 -15.302 8.174 1.00 0.00 W1 H +ATOM 14987 H2 TIP3X4166 1.564 -13.795 8.318 1.00 0.00 W1 H +ATOM 14988 OH2 TIP3X4167 7.210 -14.104 14.993 1.00 0.00 W1 O +ATOM 14989 H1 TIP3X4167 6.744 -14.491 15.734 1.00 0.00 W1 H +ATOM 14990 H2 TIP3X4167 8.124 -14.071 15.276 1.00 0.00 W1 H +ATOM 14991 OH2 TIP3X4168 9.515 -12.005 5.624 1.00 0.00 W1 O +ATOM 14992 H1 TIP3X4168 9.178 -11.655 4.800 1.00 0.00 W1 H +ATOM 14993 H2 TIP3X4168 10.411 -12.273 5.423 1.00 0.00 W1 H +ATOM 14994 OH2 TIP3X4169 14.900 -13.321 1.914 1.00 0.00 W1 O +ATOM 14995 H1 TIP3X4169 15.335 -13.094 2.736 1.00 0.00 W1 H +ATOM 14996 H2 TIP3X4169 14.380 -14.096 2.123 1.00 0.00 W1 H +ATOM 14997 OH2 TIP3X4170 10.231 -6.593 14.482 1.00 0.00 W1 O +ATOM 14998 H1 TIP3X4170 9.553 -6.309 15.095 1.00 0.00 W1 H +ATOM 14999 H2 TIP3X4170 11.029 -6.634 15.009 1.00 0.00 W1 H +ATOM 15000 OH2 TIP3X4171 2.741 -7.178 12.178 1.00 0.00 W1 O +ATOM 15001 H1 TIP3X4171 3.258 -6.772 12.874 1.00 0.00 W1 H +ATOM 15002 H2 TIP3X4171 2.358 -6.441 11.703 1.00 0.00 W1 H +ATOM 15003 OH2 TIP3X4172 1.647 -9.216 13.800 1.00 0.00 W1 O +ATOM 15004 H1 TIP3X4172 1.443 -10.055 13.387 1.00 0.00 W1 H +ATOM 15005 H2 TIP3X4172 1.524 -8.570 13.104 1.00 0.00 W1 H +ATOM 15006 OH2 TIP3X4173 9.693 -4.039 12.400 1.00 0.00 W1 O +ATOM 15007 H1 TIP3X4173 8.872 -3.792 12.826 1.00 0.00 W1 H +ATOM 15008 H2 TIP3X4173 9.463 -4.134 11.476 1.00 0.00 W1 H +ATOM 15009 OH2 TIP3X4174 10.826 -15.184 8.180 1.00 0.00 W1 O +ATOM 15010 H1 TIP3X4174 11.158 -15.259 7.286 1.00 0.00 W1 H +ATOM 15011 H2 TIP3X4174 10.781 -14.241 8.341 1.00 0.00 W1 H +ATOM 15012 OH2 TIP3X4175 6.783 -15.070 2.343 1.00 0.00 W1 O +ATOM 15013 H1 TIP3X4175 7.639 -15.326 2.688 1.00 0.00 W1 H +ATOM 15014 H2 TIP3X4175 6.265 -15.874 2.368 1.00 0.00 W1 H +ATOM 15015 OH2 TIP3X4176 9.535 -15.227 3.386 1.00 0.00 W1 O +ATOM 15016 H1 TIP3X4176 9.990 -15.963 3.795 1.00 0.00 W1 H +ATOM 15017 H2 TIP3X4176 9.942 -15.140 2.524 1.00 0.00 W1 H +ATOM 15018 OH2 TIP3X4177 0.580 -14.595 13.551 1.00 0.00 W1 O +ATOM 15019 H1 TIP3X4177 1.328 -14.790 12.987 1.00 0.00 W1 H +ATOM 15020 H2 TIP3X4177 0.788 -15.020 14.383 1.00 0.00 W1 H +ATOM 15021 OH2 TIP3X4178 13.367 -15.101 14.380 1.00 0.00 W1 O +ATOM 15022 H1 TIP3X4178 12.753 -15.027 13.649 1.00 0.00 W1 H +ATOM 15023 H2 TIP3X4178 14.137 -14.606 14.098 1.00 0.00 W1 H +ATOM 15024 OH2 TIP3X4179 2.019 -4.501 19.866 1.00 0.00 W1 O +ATOM 15025 H1 TIP3X4179 2.201 -4.577 20.803 1.00 0.00 W1 H +ATOM 15026 H2 TIP3X4179 1.995 -3.558 19.702 1.00 0.00 W1 H +ATOM 15027 OH2 TIP3X4180 13.121 -7.010 23.605 1.00 0.00 W1 O +ATOM 15028 H1 TIP3X4180 13.356 -6.745 22.715 1.00 0.00 W1 H +ATOM 15029 H2 TIP3X4180 13.950 -7.273 24.003 1.00 0.00 W1 H +ATOM 15030 OH2 TIP3X4181 5.105 -7.286 19.583 1.00 0.00 W1 O +ATOM 15031 H1 TIP3X4181 5.136 -6.377 19.880 1.00 0.00 W1 H +ATOM 15032 H2 TIP3X4181 5.613 -7.769 20.235 1.00 0.00 W1 H +ATOM 15033 OH2 TIP3X4182 12.908 -3.127 21.727 1.00 0.00 W1 O +ATOM 15034 H1 TIP3X4182 12.634 -2.637 22.502 1.00 0.00 W1 H +ATOM 15035 H2 TIP3X4182 12.383 -3.927 21.750 1.00 0.00 W1 H +ATOM 15036 OH2 TIP3X4183 11.425 -4.684 18.770 1.00 0.00 W1 O +ATOM 15037 H1 TIP3X4183 11.587 -4.912 17.855 1.00 0.00 W1 H +ATOM 15038 H2 TIP3X4183 10.496 -4.455 18.799 1.00 0.00 W1 H +ATOM 15039 OH2 TIP3X4184 15.273 -4.152 23.554 1.00 0.00 W1 O +ATOM 15040 H1 TIP3X4184 14.721 -4.069 22.777 1.00 0.00 W1 H +ATOM 15041 H2 TIP3X4184 14.662 -4.368 24.259 1.00 0.00 W1 H +ATOM 15042 OH2 TIP3X4185 1.909 -2.887 26.005 1.00 0.00 W1 O +ATOM 15043 H1 TIP3X4185 2.315 -2.684 26.848 1.00 0.00 W1 H +ATOM 15044 H2 TIP3X4185 1.338 -3.633 26.188 1.00 0.00 W1 H +ATOM 15045 OH2 TIP3X4186 9.284 -1.263 25.231 1.00 0.00 W1 O +ATOM 15046 H1 TIP3X4186 9.585 -2.163 25.353 1.00 0.00 W1 H +ATOM 15047 H2 TIP3X4186 9.909 -0.882 24.614 1.00 0.00 W1 H +ATOM 15048 OH2 TIP3X4187 12.717 -1.306 25.111 1.00 0.00 W1 O +ATOM 15049 H1 TIP3X4187 12.281 -0.483 24.892 1.00 0.00 W1 H +ATOM 15050 H2 TIP3X4187 13.646 -1.080 25.161 1.00 0.00 W1 H +ATOM 15051 OH2 TIP3X4188 5.165 -1.731 24.241 1.00 0.00 W1 O +ATOM 15052 H1 TIP3X4188 5.520 -0.882 23.977 1.00 0.00 W1 H +ATOM 15053 H2 TIP3X4188 4.230 -1.672 24.045 1.00 0.00 W1 H +ATOM 15054 OH2 TIP3X4189 10.006 -9.839 23.142 1.00 0.00 W1 O +ATOM 15055 H1 TIP3X4189 9.929 -10.648 22.638 1.00 0.00 W1 H +ATOM 15056 H2 TIP3X4189 10.949 -9.700 23.230 1.00 0.00 W1 H +ATOM 15057 OH2 TIP3X4190 6.029 -13.741 25.504 1.00 0.00 W1 O +ATOM 15058 H1 TIP3X4190 6.287 -14.479 26.057 1.00 0.00 W1 H +ATOM 15059 H2 TIP3X4190 5.353 -14.098 24.929 1.00 0.00 W1 H +ATOM 15060 OH2 TIP3X4191 14.273 -12.737 21.927 1.00 0.00 W1 O +ATOM 15061 H1 TIP3X4191 13.965 -12.399 22.768 1.00 0.00 W1 H +ATOM 15062 H2 TIP3X4191 14.341 -13.682 22.059 1.00 0.00 W1 H +ATOM 15063 OH2 TIP3X4192 12.870 -11.542 23.881 1.00 0.00 W1 O +ATOM 15064 H1 TIP3X4192 13.446 -11.770 24.612 1.00 0.00 W1 H +ATOM 15065 H2 TIP3X4192 11.996 -11.796 24.176 1.00 0.00 W1 H +ATOM 15066 OH2 TIP3X4193 5.917 -10.417 25.252 1.00 0.00 W1 O +ATOM 15067 H1 TIP3X4193 6.420 -11.119 25.664 1.00 0.00 W1 H +ATOM 15068 H2 TIP3X4193 6.574 -9.775 24.986 1.00 0.00 W1 H +ATOM 15069 OH2 TIP3X4194 13.394 -9.369 22.150 1.00 0.00 W1 O +ATOM 15070 H1 TIP3X4194 13.435 -10.268 22.474 1.00 0.00 W1 H +ATOM 15071 H2 TIP3X4194 13.276 -8.836 22.936 1.00 0.00 W1 H +ATOM 15072 OH2 TIP3X4195 12.078 -12.725 20.018 1.00 0.00 W1 O +ATOM 15073 H1 TIP3X4195 12.903 -12.541 20.467 1.00 0.00 W1 H +ATOM 15074 H2 TIP3X4195 12.155 -12.270 19.179 1.00 0.00 W1 H +ATOM 15075 OH2 TIP3X4196 8.261 -6.754 26.090 1.00 0.00 W1 O +ATOM 15076 H1 TIP3X4196 9.138 -6.732 25.707 1.00 0.00 W1 H +ATOM 15077 H2 TIP3X4196 7.995 -5.835 26.136 1.00 0.00 W1 H +ATOM 15078 OH2 TIP3X4197 7.411 -4.206 25.900 1.00 0.00 W1 O +ATOM 15079 H1 TIP3X4197 7.387 -3.979 24.970 1.00 0.00 W1 H +ATOM 15080 H2 TIP3X4197 6.491 -4.260 26.158 1.00 0.00 W1 H +ATOM 15081 OH2 TIP3X4198 2.274 -12.324 22.738 1.00 0.00 W1 O +ATOM 15082 H1 TIP3X4198 1.949 -11.445 22.929 1.00 0.00 W1 H +ATOM 15083 H2 TIP3X4198 2.151 -12.427 21.794 1.00 0.00 W1 H +ATOM 15084 OH2 TIP3X4199 4.430 -8.767 22.750 1.00 0.00 W1 O +ATOM 15085 H1 TIP3X4199 3.747 -9.217 22.253 1.00 0.00 W1 H +ATOM 15086 H2 TIP3X4199 4.916 -9.470 23.182 1.00 0.00 W1 H +ATOM 15087 OH2 TIP3X4200 10.486 -3.842 25.147 1.00 0.00 W1 O +ATOM 15088 H1 TIP3X4200 10.244 -4.428 24.430 1.00 0.00 W1 H +ATOM 15089 H2 TIP3X4200 11.436 -3.931 25.219 1.00 0.00 W1 H +ATOM 15090 OH2 TIP3X4201 14.784 -0.208 21.927 1.00 0.00 W1 O +ATOM 15091 H1 TIP3X4201 14.778 -0.676 22.762 1.00 0.00 W1 H +ATOM 15092 H2 TIP3X4201 13.903 -0.337 21.574 1.00 0.00 W1 H +ATOM 15093 OH2 TIP3X4202 6.656 -3.871 22.949 1.00 0.00 W1 O +ATOM 15094 H1 TIP3X4202 6.084 -4.591 23.218 1.00 0.00 W1 H +ATOM 15095 H2 TIP3X4202 6.195 -3.081 23.232 1.00 0.00 W1 H +ATOM 15096 OH2 TIP3X4203 8.877 -13.420 27.520 1.00 0.00 W1 O +ATOM 15097 H1 TIP3X4203 8.135 -12.940 27.887 1.00 0.00 W1 H +ATOM 15098 H2 TIP3X4203 8.497 -14.232 27.185 1.00 0.00 W1 H +ATOM 15099 OH2 TIP3X4204 4.229 -12.715 17.321 1.00 0.00 W1 O +ATOM 15100 H1 TIP3X4204 4.131 -13.377 18.006 1.00 0.00 W1 H +ATOM 15101 H2 TIP3X4204 4.046 -13.183 16.507 1.00 0.00 W1 H +ATOM 15102 OH2 TIP3X4205 15.123 -11.793 25.511 1.00 0.00 W1 O +ATOM 15103 H1 TIP3X4205 15.642 -11.124 25.063 1.00 0.00 W1 H +ATOM 15104 H2 TIP3X4205 15.565 -11.917 26.351 1.00 0.00 W1 H +ATOM 15105 OH2 TIP3X4206 1.181 -15.440 19.671 1.00 0.00 W1 O +ATOM 15106 H1 TIP3X4206 1.906 -14.819 19.740 1.00 0.00 W1 H +ATOM 15107 H2 TIP3X4206 0.808 -15.473 20.552 1.00 0.00 W1 H +ATOM 15108 OH2 TIP3X4207 6.447 -9.205 29.657 1.00 0.00 W1 O +ATOM 15109 H1 TIP3X4207 7.311 -8.806 29.556 1.00 0.00 W1 H +ATOM 15110 H2 TIP3X4207 6.599 -10.142 29.534 1.00 0.00 W1 H +ATOM 15111 OH2 TIP3X4208 9.613 -4.295 22.397 1.00 0.00 W1 O +ATOM 15112 H1 TIP3X4208 9.707 -5.157 21.993 1.00 0.00 W1 H +ATOM 15113 H2 TIP3X4208 8.680 -4.095 22.321 1.00 0.00 W1 H +ATOM 15114 OH2 TIP3X4209 8.225 -6.011 19.928 1.00 0.00 W1 O +ATOM 15115 H1 TIP3X4209 7.660 -6.625 20.397 1.00 0.00 W1 H +ATOM 15116 H2 TIP3X4209 7.751 -5.180 19.956 1.00 0.00 W1 H +ATOM 15117 OH2 TIP3X4210 0.762 -5.497 26.385 1.00 0.00 W1 O +ATOM 15118 H1 TIP3X4210 0.228 -6.099 25.867 1.00 0.00 W1 H +ATOM 15119 H2 TIP3X4210 0.292 -5.411 27.214 1.00 0.00 W1 H +ATOM 15120 OH2 TIP3X4211 12.059 -6.477 20.752 1.00 0.00 W1 O +ATOM 15121 H1 TIP3X4211 12.003 -7.391 20.476 1.00 0.00 W1 H +ATOM 15122 H2 TIP3X4211 11.886 -5.974 19.956 1.00 0.00 W1 H +ATOM 15123 OH2 TIP3X4212 12.356 -5.963 27.777 1.00 0.00 W1 O +ATOM 15124 H1 TIP3X4212 11.453 -5.879 28.084 1.00 0.00 W1 H +ATOM 15125 H2 TIP3X4212 12.524 -6.905 27.780 1.00 0.00 W1 H +ATOM 15126 OH2 TIP3X4213 14.722 -8.003 25.582 1.00 0.00 W1 O +ATOM 15127 H1 TIP3X4213 15.385 -8.684 25.463 1.00 0.00 W1 H +ATOM 15128 H2 TIP3X4213 14.006 -8.443 26.041 1.00 0.00 W1 H +ATOM 15129 OH2 TIP3X4214 3.867 -8.316 30.727 1.00 0.00 W1 O +ATOM 15130 H1 TIP3X4214 3.338 -8.550 29.964 1.00 0.00 W1 H +ATOM 15131 H2 TIP3X4214 4.762 -8.268 30.392 1.00 0.00 W1 H +ATOM 15132 OH2 TIP3X4215 4.777 -5.110 26.288 1.00 0.00 W1 O +ATOM 15133 H1 TIP3X4215 4.732 -5.665 27.067 1.00 0.00 W1 H +ATOM 15134 H2 TIP3X4215 4.144 -4.412 26.454 1.00 0.00 W1 H +ATOM 15135 OH2 TIP3X4216 13.449 -3.980 26.038 1.00 0.00 W1 O +ATOM 15136 H1 TIP3X4216 13.872 -3.212 26.422 1.00 0.00 W1 H +ATOM 15137 H2 TIP3X4216 13.145 -4.488 26.790 1.00 0.00 W1 H +ATOM 15138 OH2 TIP3X4217 11.536 -2.005 27.863 1.00 0.00 W1 O +ATOM 15139 H1 TIP3X4217 10.829 -2.634 27.720 1.00 0.00 W1 H +ATOM 15140 H2 TIP3X4217 11.865 -1.810 26.985 1.00 0.00 W1 H +ATOM 15141 OH2 TIP3X4218 11.787 -3.469 30.259 1.00 0.00 W1 O +ATOM 15142 H1 TIP3X4218 11.154 -4.075 29.875 1.00 0.00 W1 H +ATOM 15143 H2 TIP3X4218 11.901 -2.788 29.595 1.00 0.00 W1 H +ATOM 15144 OH2 TIP3X4219 15.398 -1.560 24.326 1.00 0.00 W1 O +ATOM 15145 H1 TIP3X4219 16.075 -1.719 24.982 1.00 0.00 W1 H +ATOM 15146 H2 TIP3X4219 15.163 -2.432 24.007 1.00 0.00 W1 H +ATOM 15147 OH2 TIP3X4220 5.954 -15.089 22.718 1.00 0.00 W1 O +ATOM 15148 H1 TIP3X4220 5.662 -14.180 22.657 1.00 0.00 W1 H +ATOM 15149 H2 TIP3X4220 6.786 -15.107 22.245 1.00 0.00 W1 H +ATOM 15150 OH2 TIP3X4221 8.078 -5.143 16.373 1.00 0.00 W1 O +ATOM 15151 H1 TIP3X4221 7.383 -5.765 16.587 1.00 0.00 W1 H +ATOM 15152 H2 TIP3X4221 8.060 -4.507 17.088 1.00 0.00 W1 H +ATOM 15153 OH2 TIP3X4222 15.458 -6.379 15.809 1.00 0.00 W1 O +ATOM 15154 H1 TIP3X4222 15.195 -7.129 15.275 1.00 0.00 W1 H +ATOM 15155 H2 TIP3X4222 15.204 -5.615 15.292 1.00 0.00 W1 H +ATOM 15156 OH2 TIP3X4223 1.406 -2.683 15.526 1.00 0.00 W1 O +ATOM 15157 H1 TIP3X4223 1.852 -3.232 16.172 1.00 0.00 W1 H +ATOM 15158 H2 TIP3X4223 0.510 -3.017 15.505 1.00 0.00 W1 H +ATOM 15159 OH2 TIP3X4224 13.500 -0.554 16.785 1.00 0.00 W1 O +ATOM 15160 H1 TIP3X4224 14.385 -0.882 16.626 1.00 0.00 W1 H +ATOM 15161 H2 TIP3X4224 13.270 -0.086 15.982 1.00 0.00 W1 H +ATOM 15162 OH2 TIP3X4225 14.892 -4.892 28.862 1.00 0.00 W1 O +ATOM 15163 H1 TIP3X4225 14.782 -3.943 28.921 1.00 0.00 W1 H +ATOM 15164 H2 TIP3X4225 13.999 -5.237 28.852 1.00 0.00 W1 H +ATOM 15165 OH2 TIP3X4226 1.578 -2.066 18.481 1.00 0.00 W1 O +ATOM 15166 H1 TIP3X4226 1.510 -1.230 18.941 1.00 0.00 W1 H +ATOM 15167 H2 TIP3X4226 0.683 -2.404 18.464 1.00 0.00 W1 H +ATOM 15168 OH2 TIP3X4227 14.158 -3.573 16.125 1.00 0.00 W1 O +ATOM 15169 H1 TIP3X4227 14.190 -3.653 17.079 1.00 0.00 W1 H +ATOM 15170 H2 TIP3X4227 13.325 -3.136 15.948 1.00 0.00 W1 H +ATOM 15171 OH2 TIP3X4228 10.529 -15.278 29.009 1.00 0.00 W1 O +ATOM 15172 H1 TIP3X4228 10.222 -14.530 28.497 1.00 0.00 W1 H +ATOM 15173 H2 TIP3X4228 10.583 -15.995 28.377 1.00 0.00 W1 H +ATOM 15174 OH2 TIP3X4229 4.743 -1.362 27.038 1.00 0.00 W1 O +ATOM 15175 H1 TIP3X4229 5.591 -1.124 27.412 1.00 0.00 W1 H +ATOM 15176 H2 TIP3X4229 4.954 -1.742 26.185 1.00 0.00 W1 H +ATOM 15177 OH2 TIP3X4230 3.209 -13.343 30.389 1.00 0.00 W1 O +ATOM 15178 H1 TIP3X4230 2.332 -13.254 30.763 1.00 0.00 W1 H +ATOM 15179 H2 TIP3X4230 3.272 -12.631 29.752 1.00 0.00 W1 H +ATOM 15180 OH2 TIP3X4231 9.406 -11.396 16.119 1.00 0.00 W1 O +ATOM 15181 H1 TIP3X4231 9.240 -11.099 15.224 1.00 0.00 W1 H +ATOM 15182 H2 TIP3X4231 8.535 -11.520 16.496 1.00 0.00 W1 H +ATOM 15183 OH2 TIP3X4232 14.804 -3.636 19.167 1.00 0.00 W1 O +ATOM 15184 H1 TIP3X4232 15.377 -4.373 19.380 1.00 0.00 W1 H +ATOM 15185 H2 TIP3X4232 14.473 -3.337 20.014 1.00 0.00 W1 H +ATOM 15186 OH2 TIP3X4233 10.065 -14.600 16.096 1.00 0.00 W1 O +ATOM 15187 H1 TIP3X4233 10.797 -13.984 16.121 1.00 0.00 W1 H +ATOM 15188 H2 TIP3X4233 10.306 -15.232 15.420 1.00 0.00 W1 H +ATOM 15189 OH2 TIP3X4234 14.597 -14.506 26.361 1.00 0.00 W1 O +ATOM 15190 H1 TIP3X4234 15.089 -15.136 26.889 1.00 0.00 W1 H +ATOM 15191 H2 TIP3X4234 15.197 -14.264 25.656 1.00 0.00 W1 H +ATOM 15192 OH2 TIP3X4235 2.104 -5.286 22.439 1.00 0.00 W1 O +ATOM 15193 H1 TIP3X4235 1.436 -4.962 23.044 1.00 0.00 W1 H +ATOM 15194 H2 TIP3X4235 2.896 -5.355 22.971 1.00 0.00 W1 H +ATOM 15195 OH2 TIP3X4236 7.101 -3.867 29.549 1.00 0.00 W1 O +ATOM 15196 H1 TIP3X4236 7.324 -4.245 30.400 1.00 0.00 W1 H +ATOM 15197 H2 TIP3X4236 6.494 -4.496 29.159 1.00 0.00 W1 H +ATOM 15198 OH2 TIP3X4237 10.580 -12.562 24.962 1.00 0.00 W1 O +ATOM 15199 H1 TIP3X4237 10.639 -12.744 25.900 1.00 0.00 W1 H +ATOM 15200 H2 TIP3X4237 9.642 -12.475 24.794 1.00 0.00 W1 H +ATOM 15201 OH2 TIP3X4238 6.772 -11.905 29.141 1.00 0.00 W1 O +ATOM 15202 H1 TIP3X4238 5.905 -11.975 28.741 1.00 0.00 W1 H +ATOM 15203 H2 TIP3X4238 6.717 -12.446 29.929 1.00 0.00 W1 H +ATOM 15204 OH2 TIP3X4239 14.258 -9.185 30.894 1.00 0.00 W1 O +ATOM 15205 H1 TIP3X4239 15.052 -9.718 30.878 1.00 0.00 W1 H +ATOM 15206 H2 TIP3X4239 13.964 -9.220 31.804 1.00 0.00 W1 H +ATOM 15207 OH2 TIP3X4240 2.443 -15.318 26.813 1.00 0.00 W1 O +ATOM 15208 H1 TIP3X4240 2.217 -14.865 26.000 1.00 0.00 W1 H +ATOM 15209 H2 TIP3X4240 3.273 -15.755 26.621 1.00 0.00 W1 H +ATOM 15210 OH2 TIP3X4241 8.538 -14.860 21.894 1.00 0.00 W1 O +ATOM 15211 H1 TIP3X4241 9.020 -14.346 21.247 1.00 0.00 W1 H +ATOM 15212 H2 TIP3X4241 8.882 -14.567 22.738 1.00 0.00 W1 H +ATOM 15213 OH2 TIP3X4242 3.008 -10.269 17.047 1.00 0.00 W1 O +ATOM 15214 H1 TIP3X4242 3.430 -9.623 16.481 1.00 0.00 W1 H +ATOM 15215 H2 TIP3X4242 3.720 -10.844 17.328 1.00 0.00 W1 H +ATOM 15216 OH2 TIP3X4243 3.532 -9.612 26.358 1.00 0.00 W1 O +ATOM 15217 H1 TIP3X4243 3.448 -8.821 26.890 1.00 0.00 W1 H +ATOM 15218 H2 TIP3X4243 4.447 -9.616 26.078 1.00 0.00 W1 H +ATOM 15219 OH2 TIP3X4244 2.715 -8.894 19.544 1.00 0.00 W1 O +ATOM 15220 H1 TIP3X4244 2.778 -9.183 18.633 1.00 0.00 W1 H +ATOM 15221 H2 TIP3X4244 3.490 -8.349 19.677 1.00 0.00 W1 H +ATOM 15222 OH2 TIP3X4245 11.735 -12.324 17.304 1.00 0.00 W1 O +ATOM 15223 H1 TIP3X4245 11.028 -11.836 16.884 1.00 0.00 W1 H +ATOM 15224 H2 TIP3X4245 12.460 -12.280 16.680 1.00 0.00 W1 H +ATOM 15225 OH2 TIP3X4246 0.286 -11.438 28.392 1.00 0.00 W1 O +ATOM 15226 H1 TIP3X4246 -0.619 -11.144 28.503 1.00 0.00 W1 H +ATOM 15227 H2 TIP3X4246 0.426 -12.057 29.108 1.00 0.00 W1 H +ATOM 15228 OH2 TIP3X4247 1.429 -14.600 24.374 1.00 0.00 W1 O +ATOM 15229 H1 TIP3X4247 1.536 -15.302 23.732 1.00 0.00 W1 H +ATOM 15230 H2 TIP3X4247 1.564 -13.795 23.875 1.00 0.00 W1 H +ATOM 15231 OH2 TIP3X4248 12.951 -10.972 29.262 1.00 0.00 W1 O +ATOM 15232 H1 TIP3X4248 13.262 -10.394 29.958 1.00 0.00 W1 H +ATOM 15233 H2 TIP3X4248 12.007 -11.036 29.407 1.00 0.00 W1 H +ATOM 15234 OH2 TIP3X4249 9.994 -10.966 29.209 1.00 0.00 W1 O +ATOM 15235 H1 TIP3X4249 9.634 -10.398 28.528 1.00 0.00 W1 H +ATOM 15236 H2 TIP3X4249 9.656 -11.837 28.998 1.00 0.00 W1 H +ATOM 15237 OH2 TIP3X4250 8.197 -10.497 19.074 1.00 0.00 W1 O +ATOM 15238 H1 TIP3X4250 8.286 -9.918 18.318 1.00 0.00 W1 H +ATOM 15239 H2 TIP3X4250 7.427 -11.032 18.878 1.00 0.00 W1 H +ATOM 15240 OH2 TIP3X4251 6.500 -11.166 16.762 1.00 0.00 W1 O +ATOM 15241 H1 TIP3X4251 6.062 -10.973 15.932 1.00 0.00 W1 H +ATOM 15242 H2 TIP3X4251 6.093 -11.977 17.065 1.00 0.00 W1 H +ATOM 15243 OH2 TIP3X4252 7.210 -14.104 30.551 1.00 0.00 W1 O +ATOM 15244 H1 TIP3X4252 6.744 -14.491 31.291 1.00 0.00 W1 H +ATOM 15245 H2 TIP3X4252 8.124 -14.071 30.833 1.00 0.00 W1 H +ATOM 15246 OH2 TIP3X4253 12.773 -8.759 27.232 1.00 0.00 W1 O +ATOM 15247 H1 TIP3X4253 12.793 -9.409 27.935 1.00 0.00 W1 H +ATOM 15248 H2 TIP3X4253 11.939 -8.911 26.788 1.00 0.00 W1 H +ATOM 15249 OH2 TIP3X4254 0.848 -11.659 15.702 1.00 0.00 W1 O +ATOM 15250 H1 TIP3X4254 0.092 -11.851 16.256 1.00 0.00 W1 H +ATOM 15251 H2 TIP3X4254 1.382 -11.060 16.224 1.00 0.00 W1 H +ATOM 15252 OH2 TIP3X4255 0.767 -0.165 16.189 1.00 0.00 W1 O +ATOM 15253 H1 TIP3X4255 1.183 -0.913 16.618 1.00 0.00 W1 H +ATOM 15254 H2 TIP3X4255 0.780 0.528 16.848 1.00 0.00 W1 H +ATOM 15255 OH2 TIP3X4256 9.515 -12.005 21.182 1.00 0.00 W1 O +ATOM 15256 H1 TIP3X4256 9.178 -11.655 20.357 1.00 0.00 W1 H +ATOM 15257 H2 TIP3X4256 10.411 -12.273 20.980 1.00 0.00 W1 H +ATOM 15258 OH2 TIP3X4257 4.970 -12.695 22.926 1.00 0.00 W1 O +ATOM 15259 H1 TIP3X4257 4.028 -12.742 22.767 1.00 0.00 W1 H +ATOM 15260 H2 TIP3X4257 5.109 -11.820 23.289 1.00 0.00 W1 H +ATOM 15261 OH2 TIP3X4258 0.332 -11.569 19.719 1.00 0.00 W1 O +ATOM 15262 H1 TIP3X4258 0.058 -11.693 20.628 1.00 0.00 W1 H +ATOM 15263 H2 TIP3X4258 0.138 -10.650 19.533 1.00 0.00 W1 H +ATOM 15264 OH2 TIP3X4259 4.333 -12.242 27.779 1.00 0.00 W1 O +ATOM 15265 H1 TIP3X4259 4.355 -13.048 27.264 1.00 0.00 W1 H +ATOM 15266 H2 TIP3X4259 3.939 -11.594 27.195 1.00 0.00 W1 H +ATOM 15267 OH2 TIP3X4260 4.916 -5.706 23.584 1.00 0.00 W1 O +ATOM 15268 H1 TIP3X4260 4.844 -6.642 23.397 1.00 0.00 W1 H +ATOM 15269 H2 TIP3X4260 4.920 -5.653 24.540 1.00 0.00 W1 H +ATOM 15270 OH2 TIP3X4261 9.105 -8.687 28.147 1.00 0.00 W1 O +ATOM 15271 H1 TIP3X4261 9.517 -7.856 28.383 1.00 0.00 W1 H +ATOM 15272 H2 TIP3X4261 8.555 -8.477 27.392 1.00 0.00 W1 H +ATOM 15273 OH2 TIP3X4262 14.900 -13.321 17.471 1.00 0.00 W1 O +ATOM 15274 H1 TIP3X4262 15.335 -13.094 18.293 1.00 0.00 W1 H +ATOM 15275 H2 TIP3X4262 14.380 -14.096 17.681 1.00 0.00 W1 H +ATOM 15276 OH2 TIP3X4263 6.055 -7.361 16.649 1.00 0.00 W1 O +ATOM 15277 H1 TIP3X4263 5.766 -7.483 17.554 1.00 0.00 W1 H +ATOM 15278 H2 TIP3X4263 6.744 -8.014 16.528 1.00 0.00 W1 H +ATOM 15279 OH2 TIP3X4264 12.758 -8.845 17.717 1.00 0.00 W1 O +ATOM 15280 H1 TIP3X4264 11.893 -9.044 18.076 1.00 0.00 W1 H +ATOM 15281 H2 TIP3X4264 13.315 -8.724 18.486 1.00 0.00 W1 H +ATOM 15282 OH2 TIP3X4265 7.591 -8.591 24.188 1.00 0.00 W1 O +ATOM 15283 H1 TIP3X4265 7.688 -7.794 24.709 1.00 0.00 W1 H +ATOM 15284 H2 TIP3X4265 8.466 -8.980 24.179 1.00 0.00 W1 H +ATOM 15285 OH2 TIP3X4266 7.336 -8.209 21.104 1.00 0.00 W1 O +ATOM 15286 H1 TIP3X4266 7.958 -8.805 20.686 1.00 0.00 W1 H +ATOM 15287 H2 TIP3X4266 7.362 -8.446 22.030 1.00 0.00 W1 H +ATOM 15288 OH2 TIP3X4267 10.231 -6.593 30.039 1.00 0.00 W1 O +ATOM 15289 H1 TIP3X4267 9.553 -6.309 30.653 1.00 0.00 W1 H +ATOM 15290 H2 TIP3X4267 11.029 -6.634 30.566 1.00 0.00 W1 H +ATOM 15291 OH2 TIP3X4268 2.741 -7.178 27.736 1.00 0.00 W1 O +ATOM 15292 H1 TIP3X4268 3.258 -6.772 28.432 1.00 0.00 W1 H +ATOM 15293 H2 TIP3X4268 2.358 -6.441 27.260 1.00 0.00 W1 H +ATOM 15294 OH2 TIP3X4269 1.647 -9.216 29.357 1.00 0.00 W1 O +ATOM 15295 H1 TIP3X4269 1.443 -10.055 28.945 1.00 0.00 W1 H +ATOM 15296 H2 TIP3X4269 1.524 -8.570 28.662 1.00 0.00 W1 H +ATOM 15297 OH2 TIP3X4270 1.540 -8.342 22.181 1.00 0.00 W1 O +ATOM 15298 H1 TIP3X4270 1.896 -7.470 22.011 1.00 0.00 W1 H +ATOM 15299 H2 TIP3X4270 1.438 -8.733 21.313 1.00 0.00 W1 H +ATOM 15300 OH2 TIP3X4271 12.299 -6.078 16.367 1.00 0.00 W1 O +ATOM 15301 H1 TIP3X4271 13.004 -5.579 15.955 1.00 0.00 W1 H +ATOM 15302 H2 TIP3X4271 12.748 -6.708 16.931 1.00 0.00 W1 H +ATOM 15303 OH2 TIP3X4272 14.895 -8.731 19.730 1.00 0.00 W1 O +ATOM 15304 H1 TIP3X4272 14.608 -8.558 20.626 1.00 0.00 W1 H +ATOM 15305 H2 TIP3X4272 15.408 -7.959 19.489 1.00 0.00 W1 H +ATOM 15306 OH2 TIP3X4273 1.393 -9.614 24.452 1.00 0.00 W1 O +ATOM 15307 H1 TIP3X4273 1.487 -8.936 23.783 1.00 0.00 W1 H +ATOM 15308 H2 TIP3X4273 2.051 -9.395 25.111 1.00 0.00 W1 H +ATOM 15309 OH2 TIP3X4274 2.955 -5.874 16.214 1.00 0.00 W1 O +ATOM 15310 H1 TIP3X4274 2.139 -6.163 15.805 1.00 0.00 W1 H +ATOM 15311 H2 TIP3X4274 3.487 -6.667 16.275 1.00 0.00 W1 H +ATOM 15312 OH2 TIP3X4275 4.373 -5.034 29.288 1.00 0.00 W1 O +ATOM 15313 H1 TIP3X4275 3.800 -4.432 28.814 1.00 0.00 W1 H +ATOM 15314 H2 TIP3X4275 3.899 -5.230 30.096 1.00 0.00 W1 H +ATOM 15315 OH2 TIP3X4276 7.449 -0.291 26.979 1.00 0.00 W1 O +ATOM 15316 H1 TIP3X4276 7.766 -0.585 27.833 1.00 0.00 W1 H +ATOM 15317 H2 TIP3X4276 7.882 -0.869 26.350 1.00 0.00 W1 H +ATOM 15318 OH2 TIP3X4277 12.155 -0.050 21.113 1.00 0.00 W1 O +ATOM 15319 H1 TIP3X4277 11.742 -0.741 20.594 1.00 0.00 W1 H +ATOM 15320 H2 TIP3X4277 11.959 0.757 20.636 1.00 0.00 W1 H +ATOM 15321 OH2 TIP3X4278 8.733 -3.367 18.365 1.00 0.00 W1 O +ATOM 15322 H1 TIP3X4278 8.992 -2.582 17.883 1.00 0.00 W1 H +ATOM 15323 H2 TIP3X4278 8.163 -3.044 19.063 1.00 0.00 W1 H +ATOM 15324 OH2 TIP3X4279 8.750 -8.213 17.436 1.00 0.00 W1 O +ATOM 15325 H1 TIP3X4279 9.573 -8.140 16.953 1.00 0.00 W1 H +ATOM 15326 H2 TIP3X4279 8.757 -7.468 18.038 1.00 0.00 W1 H +ATOM 15327 OH2 TIP3X4280 12.151 -13.489 27.227 1.00 0.00 W1 O +ATOM 15328 H1 TIP3X4280 12.956 -13.720 26.763 1.00 0.00 W1 H +ATOM 15329 H2 TIP3X4280 12.442 -12.936 27.952 1.00 0.00 W1 H +ATOM 15330 OH2 TIP3X4281 0.116 -6.388 18.633 1.00 0.00 W1 O +ATOM 15331 H1 TIP3X4281 -0.037 -6.295 17.693 1.00 0.00 W1 H +ATOM 15332 H2 TIP3X4281 1.070 -6.388 18.722 1.00 0.00 W1 H +ATOM 15333 OH2 TIP3X4282 10.878 -6.800 25.229 1.00 0.00 W1 O +ATOM 15334 H1 TIP3X4282 11.424 -6.138 25.655 1.00 0.00 W1 H +ATOM 15335 H2 TIP3X4282 11.337 -7.000 24.414 1.00 0.00 W1 H +ATOM 15336 OH2 TIP3X4283 9.693 -4.039 27.958 1.00 0.00 W1 O +ATOM 15337 H1 TIP3X4283 8.872 -3.792 28.384 1.00 0.00 W1 H +ATOM 15338 H2 TIP3X4283 9.463 -4.134 27.033 1.00 0.00 W1 H +ATOM 15339 OH2 TIP3X4284 6.318 -3.814 19.844 1.00 0.00 W1 O +ATOM 15340 H1 TIP3X4284 5.611 -3.667 19.216 1.00 0.00 W1 H +ATOM 15341 H2 TIP3X4284 5.981 -3.469 20.671 1.00 0.00 W1 H +ATOM 15342 OH2 TIP3X4285 2.883 -2.902 28.555 1.00 0.00 W1 O +ATOM 15343 H1 TIP3X4285 3.617 -2.291 28.491 1.00 0.00 W1 H +ATOM 15344 H2 TIP3X4285 2.571 -2.808 29.455 1.00 0.00 W1 H +ATOM 15345 OH2 TIP3X4286 2.473 -1.197 22.657 1.00 0.00 W1 O +ATOM 15346 H1 TIP3X4286 1.887 -1.938 22.503 1.00 0.00 W1 H +ATOM 15347 H2 TIP3X4286 2.916 -1.064 21.819 1.00 0.00 W1 H +ATOM 15348 OH2 TIP3X4287 10.826 -15.184 23.738 1.00 0.00 W1 O +ATOM 15349 H1 TIP3X4287 11.158 -15.259 22.843 1.00 0.00 W1 H +ATOM 15350 H2 TIP3X4287 10.781 -14.241 23.899 1.00 0.00 W1 H +ATOM 15351 OH2 TIP3X4288 8.064 -13.055 23.972 1.00 0.00 W1 O +ATOM 15352 H1 TIP3X4288 7.702 -12.566 23.233 1.00 0.00 W1 H +ATOM 15353 H2 TIP3X4288 7.332 -13.144 24.582 1.00 0.00 W1 H +ATOM 15354 OH2 TIP3X4289 6.783 -15.070 17.900 1.00 0.00 W1 O +ATOM 15355 H1 TIP3X4289 7.639 -15.326 18.245 1.00 0.00 W1 H +ATOM 15356 H2 TIP3X4289 6.265 -15.874 17.925 1.00 0.00 W1 H +ATOM 15357 OH2 TIP3X4290 9.535 -15.227 18.944 1.00 0.00 W1 O +ATOM 15358 H1 TIP3X4290 9.990 -15.963 19.352 1.00 0.00 W1 H +ATOM 15359 H2 TIP3X4290 9.942 -15.140 18.082 1.00 0.00 W1 H +ATOM 15360 OH2 TIP3X4291 4.174 -0.648 30.398 1.00 0.00 W1 O +ATOM 15361 H1 TIP3X4291 3.924 0.109 29.869 1.00 0.00 W1 H +ATOM 15362 H2 TIP3X4291 5.085 -0.817 30.159 1.00 0.00 W1 H +ATOM 15363 OH2 TIP3X4292 9.181 -1.954 20.699 1.00 0.00 W1 O +ATOM 15364 H1 TIP3X4292 9.842 -2.596 20.959 1.00 0.00 W1 H +ATOM 15365 H2 TIP3X4292 9.168 -1.319 21.415 1.00 0.00 W1 H +ATOM 15366 OH2 TIP3X4293 6.920 -1.051 29.608 1.00 0.00 W1 O +ATOM 15367 H1 TIP3X4293 7.138 -1.943 29.879 1.00 0.00 W1 H +ATOM 15368 H2 TIP3X4293 7.528 -0.497 30.098 1.00 0.00 W1 H +ATOM 15369 OH2 TIP3X4294 5.867 -12.933 19.653 1.00 0.00 W1 O +ATOM 15370 H1 TIP3X4294 6.524 -13.592 19.430 1.00 0.00 W1 H +ATOM 15371 H2 TIP3X4294 5.909 -12.864 20.607 1.00 0.00 W1 H +ATOM 15372 OH2 TIP3X4295 0.580 -14.595 29.109 1.00 0.00 W1 O +ATOM 15373 H1 TIP3X4295 1.328 -14.790 28.545 1.00 0.00 W1 H +ATOM 15374 H2 TIP3X4295 0.788 -15.020 29.940 1.00 0.00 W1 H +ATOM 15375 OH2 TIP3X4296 11.699 -1.867 18.710 1.00 0.00 W1 O +ATOM 15376 H1 TIP3X4296 11.844 -2.808 18.813 1.00 0.00 W1 H +ATOM 15377 H2 TIP3X4296 12.523 -1.535 18.353 1.00 0.00 W1 H +ATOM 15378 OH2 TIP3X4297 13.367 -15.101 29.937 1.00 0.00 W1 O +ATOM 15379 H1 TIP3X4297 12.753 -15.027 29.207 1.00 0.00 W1 H +ATOM 15380 H2 TIP3X4297 14.137 -14.606 29.656 1.00 0.00 W1 H +ATOM 15381 OH2 TIP3X4298 4.161 -0.888 20.424 1.00 0.00 W1 O +ATOM 15382 H1 TIP3X4298 4.154 -0.843 19.468 1.00 0.00 W1 H +ATOM 15383 H2 TIP3X4298 4.968 -0.442 20.680 1.00 0.00 W1 H +ATOM 15384 OH2 TIP3X4299 15.070 -1.950 28.373 1.00 0.00 W1 O +ATOM 15385 H1 TIP3X4299 14.347 -1.399 28.674 1.00 0.00 W1 H +ATOM 15386 H2 TIP3X4299 15.858 -1.450 28.587 1.00 0.00 W1 H +ATOM 15387 OH2 TIP3X4300 2.695 -12.628 20.053 1.00 0.00 W1 O +ATOM 15388 H1 TIP3X4300 2.052 -12.239 19.461 1.00 0.00 W1 H +ATOM 15389 H2 TIP3X4300 3.498 -12.131 19.895 1.00 0.00 W1 H +ATOM 15390 OH2 TIP3X4301 2.019 11.057 -26.806 1.00 0.00 W1 O +ATOM 15391 H1 TIP3X4301 2.201 10.981 -25.869 1.00 0.00 W1 H +ATOM 15392 H2 TIP3X4301 1.995 11.999 -26.970 1.00 0.00 W1 H +ATOM 15393 OH2 TIP3X4302 13.121 8.548 -23.068 1.00 0.00 W1 O +ATOM 15394 H1 TIP3X4302 13.356 8.812 -23.957 1.00 0.00 W1 H +ATOM 15395 H2 TIP3X4302 13.950 8.284 -22.669 1.00 0.00 W1 H +ATOM 15396 OH2 TIP3X4303 5.105 8.271 -27.089 1.00 0.00 W1 O +ATOM 15397 H1 TIP3X4303 5.136 9.181 -26.792 1.00 0.00 W1 H +ATOM 15398 H2 TIP3X4303 5.613 7.788 -26.437 1.00 0.00 W1 H +ATOM 15399 OH2 TIP3X4304 12.908 12.431 -24.946 1.00 0.00 W1 O +ATOM 15400 H1 TIP3X4304 12.634 12.921 -24.171 1.00 0.00 W1 H +ATOM 15401 H2 TIP3X4304 12.383 11.631 -24.922 1.00 0.00 W1 H +ATOM 15402 OH2 TIP3X4305 11.425 10.874 -27.903 1.00 0.00 W1 O +ATOM 15403 H1 TIP3X4305 11.587 10.645 -28.818 1.00 0.00 W1 H +ATOM 15404 H2 TIP3X4305 10.496 11.103 -27.873 1.00 0.00 W1 H +ATOM 15405 OH2 TIP3X4306 15.273 11.406 -23.118 1.00 0.00 W1 O +ATOM 15406 H1 TIP3X4306 14.721 11.489 -23.896 1.00 0.00 W1 H +ATOM 15407 H2 TIP3X4306 14.662 11.189 -22.413 1.00 0.00 W1 H +ATOM 15408 OH2 TIP3X4307 1.909 12.670 -20.667 1.00 0.00 W1 O +ATOM 15409 H1 TIP3X4307 2.315 12.873 -19.824 1.00 0.00 W1 H +ATOM 15410 H2 TIP3X4307 1.338 11.924 -20.484 1.00 0.00 W1 H +ATOM 15411 OH2 TIP3X4308 9.284 14.295 -21.441 1.00 0.00 W1 O +ATOM 15412 H1 TIP3X4308 9.585 13.394 -21.319 1.00 0.00 W1 H +ATOM 15413 H2 TIP3X4308 9.909 14.675 -22.058 1.00 0.00 W1 H +ATOM 15414 OH2 TIP3X4309 12.717 14.251 -21.561 1.00 0.00 W1 O +ATOM 15415 H1 TIP3X4309 12.281 15.075 -21.781 1.00 0.00 W1 H +ATOM 15416 H2 TIP3X4309 13.646 14.477 -21.512 1.00 0.00 W1 H +ATOM 15417 OH2 TIP3X4310 5.165 13.826 -22.432 1.00 0.00 W1 O +ATOM 15418 H1 TIP3X4310 5.520 14.675 -22.695 1.00 0.00 W1 H +ATOM 15419 H2 TIP3X4310 4.230 13.886 -22.628 1.00 0.00 W1 H +ATOM 15420 OH2 TIP3X4311 10.006 5.719 -23.530 1.00 0.00 W1 O +ATOM 15421 H1 TIP3X4311 9.929 4.909 -24.035 1.00 0.00 W1 H +ATOM 15422 H2 TIP3X4311 10.949 5.858 -23.443 1.00 0.00 W1 H +ATOM 15423 OH2 TIP3X4312 6.029 1.816 -21.168 1.00 0.00 W1 O +ATOM 15424 H1 TIP3X4312 6.287 1.079 -20.615 1.00 0.00 W1 H +ATOM 15425 H2 TIP3X4312 5.353 1.460 -21.744 1.00 0.00 W1 H +ATOM 15426 OH2 TIP3X4313 14.273 2.821 -24.745 1.00 0.00 W1 O +ATOM 15427 H1 TIP3X4313 13.965 3.159 -23.904 1.00 0.00 W1 H +ATOM 15428 H2 TIP3X4313 14.341 1.875 -24.614 1.00 0.00 W1 H +ATOM 15429 OH2 TIP3X4314 12.870 4.016 -22.791 1.00 0.00 W1 O +ATOM 15430 H1 TIP3X4314 13.446 3.788 -22.061 1.00 0.00 W1 H +ATOM 15431 H2 TIP3X4314 11.996 3.761 -22.496 1.00 0.00 W1 H +ATOM 15432 OH2 TIP3X4315 5.917 5.141 -21.420 1.00 0.00 W1 O +ATOM 15433 H1 TIP3X4315 6.420 4.438 -21.008 1.00 0.00 W1 H +ATOM 15434 H2 TIP3X4315 6.574 5.783 -21.687 1.00 0.00 W1 H +ATOM 15435 OH2 TIP3X4316 13.394 6.189 -24.523 1.00 0.00 W1 O +ATOM 15436 H1 TIP3X4316 13.435 5.289 -24.199 1.00 0.00 W1 H +ATOM 15437 H2 TIP3X4316 13.276 6.722 -23.736 1.00 0.00 W1 H +ATOM 15438 OH2 TIP3X4317 12.078 2.832 -26.654 1.00 0.00 W1 O +ATOM 15439 H1 TIP3X4317 12.903 3.017 -26.205 1.00 0.00 W1 H +ATOM 15440 H2 TIP3X4317 12.155 3.287 -27.493 1.00 0.00 W1 H +ATOM 15441 OH2 TIP3X4318 8.261 8.804 -20.583 1.00 0.00 W1 O +ATOM 15442 H1 TIP3X4318 9.138 8.826 -20.966 1.00 0.00 W1 H +ATOM 15443 H2 TIP3X4318 7.995 9.722 -20.537 1.00 0.00 W1 H +ATOM 15444 OH2 TIP3X4319 7.411 11.352 -20.773 1.00 0.00 W1 O +ATOM 15445 H1 TIP3X4319 7.387 11.579 -21.702 1.00 0.00 W1 H +ATOM 15446 H2 TIP3X4319 6.491 11.298 -20.514 1.00 0.00 W1 H +ATOM 15447 OH2 TIP3X4320 2.274 3.233 -23.935 1.00 0.00 W1 O +ATOM 15448 H1 TIP3X4320 1.949 4.113 -23.744 1.00 0.00 W1 H +ATOM 15449 H2 TIP3X4320 2.151 3.131 -24.878 1.00 0.00 W1 H +ATOM 15450 OH2 TIP3X4321 4.430 6.791 -23.922 1.00 0.00 W1 O +ATOM 15451 H1 TIP3X4321 3.747 6.341 -24.419 1.00 0.00 W1 H +ATOM 15452 H2 TIP3X4321 4.916 6.087 -23.490 1.00 0.00 W1 H +ATOM 15453 OH2 TIP3X4322 10.486 11.715 -21.526 1.00 0.00 W1 O +ATOM 15454 H1 TIP3X4322 10.244 11.129 -22.243 1.00 0.00 W1 H +ATOM 15455 H2 TIP3X4322 11.436 11.626 -21.453 1.00 0.00 W1 H +ATOM 15456 OH2 TIP3X4323 14.784 15.350 -24.745 1.00 0.00 W1 O +ATOM 15457 H1 TIP3X4323 14.778 14.882 -23.910 1.00 0.00 W1 H +ATOM 15458 H2 TIP3X4323 13.903 15.221 -25.098 1.00 0.00 W1 H +ATOM 15459 OH2 TIP3X4324 6.656 11.686 -23.723 1.00 0.00 W1 O +ATOM 15460 H1 TIP3X4324 6.084 10.967 -23.454 1.00 0.00 W1 H +ATOM 15461 H2 TIP3X4324 6.195 12.476 -23.441 1.00 0.00 W1 H +ATOM 15462 OH2 TIP3X4325 8.877 2.138 -19.153 1.00 0.00 W1 O +ATOM 15463 H1 TIP3X4325 8.135 2.617 -18.786 1.00 0.00 W1 H +ATOM 15464 H2 TIP3X4325 8.497 1.326 -19.487 1.00 0.00 W1 H +ATOM 15465 OH2 TIP3X4326 4.229 2.843 -29.351 1.00 0.00 W1 O +ATOM 15466 H1 TIP3X4326 4.131 2.181 -28.667 1.00 0.00 W1 H +ATOM 15467 H2 TIP3X4326 4.046 2.374 -30.166 1.00 0.00 W1 H +ATOM 15468 OH2 TIP3X4327 15.123 3.764 -21.162 1.00 0.00 W1 O +ATOM 15469 H1 TIP3X4327 15.642 4.433 -21.609 1.00 0.00 W1 H +ATOM 15470 H2 TIP3X4327 15.565 3.640 -20.322 1.00 0.00 W1 H +ATOM 15471 OH2 TIP3X4328 1.181 0.117 -27.002 1.00 0.00 W1 O +ATOM 15472 H1 TIP3X4328 1.906 0.738 -26.933 1.00 0.00 W1 H +ATOM 15473 H2 TIP3X4328 0.808 0.084 -26.120 1.00 0.00 W1 H +ATOM 15474 OH2 TIP3X4329 6.447 6.353 -17.015 1.00 0.00 W1 O +ATOM 15475 H1 TIP3X4329 7.311 6.751 -17.116 1.00 0.00 W1 H +ATOM 15476 H2 TIP3X4329 6.599 5.416 -17.138 1.00 0.00 W1 H +ATOM 15477 OH2 TIP3X4330 9.613 11.263 -24.276 1.00 0.00 W1 O +ATOM 15478 H1 TIP3X4330 9.707 10.400 -24.679 1.00 0.00 W1 H +ATOM 15479 H2 TIP3X4330 8.680 11.463 -24.352 1.00 0.00 W1 H +ATOM 15480 OH2 TIP3X4331 8.225 9.547 -26.745 1.00 0.00 W1 O +ATOM 15481 H1 TIP3X4331 7.660 8.933 -26.275 1.00 0.00 W1 H +ATOM 15482 H2 TIP3X4331 7.751 10.378 -26.716 1.00 0.00 W1 H +ATOM 15483 OH2 TIP3X4332 0.762 10.060 -20.288 1.00 0.00 W1 O +ATOM 15484 H1 TIP3X4332 0.228 9.458 -20.806 1.00 0.00 W1 H +ATOM 15485 H2 TIP3X4332 0.292 10.146 -19.459 1.00 0.00 W1 H +ATOM 15486 OH2 TIP3X4333 12.059 9.081 -25.920 1.00 0.00 W1 O +ATOM 15487 H1 TIP3X4333 12.003 8.166 -26.197 1.00 0.00 W1 H +ATOM 15488 H2 TIP3X4333 11.886 9.583 -26.716 1.00 0.00 W1 H +ATOM 15489 OH2 TIP3X4334 12.356 9.595 -18.896 1.00 0.00 W1 O +ATOM 15490 H1 TIP3X4334 11.453 9.678 -18.588 1.00 0.00 W1 H +ATOM 15491 H2 TIP3X4334 12.524 8.653 -18.892 1.00 0.00 W1 H +ATOM 15492 OH2 TIP3X4335 14.722 7.554 -21.090 1.00 0.00 W1 O +ATOM 15493 H1 TIP3X4335 15.385 6.873 -21.209 1.00 0.00 W1 H +ATOM 15494 H2 TIP3X4335 14.006 7.115 -20.631 1.00 0.00 W1 H +ATOM 15495 OH2 TIP3X4336 3.867 7.241 -15.946 1.00 0.00 W1 O +ATOM 15496 H1 TIP3X4336 3.338 7.007 -16.708 1.00 0.00 W1 H +ATOM 15497 H2 TIP3X4336 4.762 7.289 -16.280 1.00 0.00 W1 H +ATOM 15498 OH2 TIP3X4337 4.777 10.447 -20.384 1.00 0.00 W1 O +ATOM 15499 H1 TIP3X4337 4.732 9.892 -19.606 1.00 0.00 W1 H +ATOM 15500 H2 TIP3X4337 4.144 11.145 -20.218 1.00 0.00 W1 H +ATOM 15501 OH2 TIP3X4338 13.449 11.577 -20.635 1.00 0.00 W1 O +ATOM 15502 H1 TIP3X4338 13.872 12.345 -20.251 1.00 0.00 W1 H +ATOM 15503 H2 TIP3X4338 13.145 11.069 -19.882 1.00 0.00 W1 H +ATOM 15504 OH2 TIP3X4339 11.536 13.553 -18.810 1.00 0.00 W1 O +ATOM 15505 H1 TIP3X4339 10.829 12.924 -18.952 1.00 0.00 W1 H +ATOM 15506 H2 TIP3X4339 11.865 13.747 -19.687 1.00 0.00 W1 H +ATOM 15507 OH2 TIP3X4340 11.787 12.089 -16.413 1.00 0.00 W1 O +ATOM 15508 H1 TIP3X4340 11.154 11.482 -16.797 1.00 0.00 W1 H +ATOM 15509 H2 TIP3X4340 11.901 12.769 -17.077 1.00 0.00 W1 H +ATOM 15510 OH2 TIP3X4341 15.398 13.997 -22.347 1.00 0.00 W1 O +ATOM 15511 H1 TIP3X4341 16.075 13.838 -21.690 1.00 0.00 W1 H +ATOM 15512 H2 TIP3X4341 15.163 13.126 -22.666 1.00 0.00 W1 H +ATOM 15513 OH2 TIP3X4342 5.954 0.468 -23.954 1.00 0.00 W1 O +ATOM 15514 H1 TIP3X4342 5.662 1.378 -24.015 1.00 0.00 W1 H +ATOM 15515 H2 TIP3X4342 6.786 0.451 -24.427 1.00 0.00 W1 H +ATOM 15516 OH2 TIP3X4343 8.078 10.415 -30.300 1.00 0.00 W1 O +ATOM 15517 H1 TIP3X4343 7.383 9.793 -30.085 1.00 0.00 W1 H +ATOM 15518 H2 TIP3X4343 8.060 11.051 -29.585 1.00 0.00 W1 H +ATOM 15519 OH2 TIP3X4344 15.458 9.178 -30.863 1.00 0.00 W1 O +ATOM 15520 H1 TIP3X4344 15.195 8.428 -31.397 1.00 0.00 W1 H +ATOM 15521 H2 TIP3X4344 15.204 9.942 -31.381 1.00 0.00 W1 H +ATOM 15522 OH2 TIP3X4345 1.406 12.875 -31.146 1.00 0.00 W1 O +ATOM 15523 H1 TIP3X4345 1.852 12.326 -30.501 1.00 0.00 W1 H +ATOM 15524 H2 TIP3X4345 0.510 12.541 -31.167 1.00 0.00 W1 H +ATOM 15525 OH2 TIP3X4346 13.500 15.004 -29.888 1.00 0.00 W1 O +ATOM 15526 H1 TIP3X4346 14.385 14.676 -30.046 1.00 0.00 W1 H +ATOM 15527 H2 TIP3X4346 13.270 15.472 -30.690 1.00 0.00 W1 H +ATOM 15528 OH2 TIP3X4347 14.892 10.666 -17.810 1.00 0.00 W1 O +ATOM 15529 H1 TIP3X4347 14.782 11.615 -17.751 1.00 0.00 W1 H +ATOM 15530 H2 TIP3X4347 13.999 10.321 -17.820 1.00 0.00 W1 H +ATOM 15531 OH2 TIP3X4348 1.578 13.492 -28.191 1.00 0.00 W1 O +ATOM 15532 H1 TIP3X4348 1.510 14.328 -27.731 1.00 0.00 W1 H +ATOM 15533 H2 TIP3X4348 0.683 13.153 -28.208 1.00 0.00 W1 H +ATOM 15534 OH2 TIP3X4349 14.158 11.985 -30.547 1.00 0.00 W1 O +ATOM 15535 H1 TIP3X4349 14.190 11.905 -29.594 1.00 0.00 W1 H +ATOM 15536 H2 TIP3X4349 13.325 12.422 -30.724 1.00 0.00 W1 H +ATOM 15537 OH2 TIP3X4350 10.529 0.279 -17.663 1.00 0.00 W1 O +ATOM 15538 H1 TIP3X4350 10.222 1.028 -18.176 1.00 0.00 W1 H +ATOM 15539 H2 TIP3X4350 10.583 -0.438 -18.295 1.00 0.00 W1 H +ATOM 15540 OH2 TIP3X4351 4.743 14.196 -19.634 1.00 0.00 W1 O +ATOM 15541 H1 TIP3X4351 5.591 14.434 -19.260 1.00 0.00 W1 H +ATOM 15542 H2 TIP3X4351 4.954 13.816 -20.487 1.00 0.00 W1 H +ATOM 15543 OH2 TIP3X4352 3.209 2.214 -16.284 1.00 0.00 W1 O +ATOM 15544 H1 TIP3X4352 2.332 2.304 -15.910 1.00 0.00 W1 H +ATOM 15545 H2 TIP3X4352 3.272 2.927 -16.920 1.00 0.00 W1 H +ATOM 15546 OH2 TIP3X4353 9.406 4.161 -30.553 1.00 0.00 W1 O +ATOM 15547 H1 TIP3X4353 9.240 4.458 -31.448 1.00 0.00 W1 H +ATOM 15548 H2 TIP3X4353 8.535 4.038 -30.176 1.00 0.00 W1 H +ATOM 15549 OH2 TIP3X4354 14.804 11.922 -27.505 1.00 0.00 W1 O +ATOM 15550 H1 TIP3X4354 15.377 11.185 -27.292 1.00 0.00 W1 H +ATOM 15551 H2 TIP3X4354 14.473 12.221 -26.658 1.00 0.00 W1 H +ATOM 15552 OH2 TIP3X4355 10.065 0.958 -30.576 1.00 0.00 W1 O +ATOM 15553 H1 TIP3X4355 10.797 1.574 -30.552 1.00 0.00 W1 H +ATOM 15554 H2 TIP3X4355 10.306 0.325 -31.253 1.00 0.00 W1 H +ATOM 15555 OH2 TIP3X4356 14.597 1.051 -20.311 1.00 0.00 W1 O +ATOM 15556 H1 TIP3X4356 15.089 0.422 -19.784 1.00 0.00 W1 H +ATOM 15557 H2 TIP3X4356 15.197 1.294 -21.016 1.00 0.00 W1 H +ATOM 15558 OH2 TIP3X4357 2.104 10.272 -24.233 1.00 0.00 W1 O +ATOM 15559 H1 TIP3X4357 1.436 10.595 -23.629 1.00 0.00 W1 H +ATOM 15560 H2 TIP3X4357 2.896 10.202 -23.701 1.00 0.00 W1 H +ATOM 15561 OH2 TIP3X4358 7.101 11.691 -17.123 1.00 0.00 W1 O +ATOM 15562 H1 TIP3X4358 7.324 11.313 -16.272 1.00 0.00 W1 H +ATOM 15563 H2 TIP3X4358 6.494 11.062 -17.513 1.00 0.00 W1 H +ATOM 15564 OH2 TIP3X4359 10.580 2.995 -21.710 1.00 0.00 W1 O +ATOM 15565 H1 TIP3X4359 10.639 2.814 -20.772 1.00 0.00 W1 H +ATOM 15566 H2 TIP3X4359 9.642 3.083 -21.879 1.00 0.00 W1 H +ATOM 15567 OH2 TIP3X4360 6.772 3.652 -17.531 1.00 0.00 W1 O +ATOM 15568 H1 TIP3X4360 5.905 3.582 -17.931 1.00 0.00 W1 H +ATOM 15569 H2 TIP3X4360 6.717 3.112 -16.743 1.00 0.00 W1 H +ATOM 15570 OH2 TIP3X4361 14.258 6.373 -15.778 1.00 0.00 W1 O +ATOM 15571 H1 TIP3X4361 15.052 5.839 -15.795 1.00 0.00 W1 H +ATOM 15572 H2 TIP3X4361 13.964 6.338 -14.868 1.00 0.00 W1 H +ATOM 15573 OH2 TIP3X4362 2.443 0.239 -19.860 1.00 0.00 W1 O +ATOM 15574 H1 TIP3X4362 2.217 0.693 -20.672 1.00 0.00 W1 H +ATOM 15575 H2 TIP3X4362 3.273 -0.197 -20.051 1.00 0.00 W1 H +ATOM 15576 OH2 TIP3X4363 8.538 0.697 -24.778 1.00 0.00 W1 O +ATOM 15577 H1 TIP3X4363 9.020 1.211 -25.426 1.00 0.00 W1 H +ATOM 15578 H2 TIP3X4363 8.882 0.991 -23.934 1.00 0.00 W1 H +ATOM 15579 OH2 TIP3X4364 3.008 5.289 -29.625 1.00 0.00 W1 O +ATOM 15580 H1 TIP3X4364 3.430 5.935 -30.191 1.00 0.00 W1 H +ATOM 15581 H2 TIP3X4364 3.720 4.714 -29.344 1.00 0.00 W1 H +ATOM 15582 OH2 TIP3X4365 3.532 5.945 -20.314 1.00 0.00 W1 O +ATOM 15583 H1 TIP3X4365 3.448 6.737 -19.782 1.00 0.00 W1 H +ATOM 15584 H2 TIP3X4365 4.447 5.941 -20.595 1.00 0.00 W1 H +ATOM 15585 OH2 TIP3X4366 2.715 6.664 -27.129 1.00 0.00 W1 O +ATOM 15586 H1 TIP3X4366 2.778 6.375 -28.039 1.00 0.00 W1 H +ATOM 15587 H2 TIP3X4366 3.490 7.209 -26.996 1.00 0.00 W1 H +ATOM 15588 OH2 TIP3X4367 11.735 3.233 -29.369 1.00 0.00 W1 O +ATOM 15589 H1 TIP3X4367 11.028 3.722 -29.789 1.00 0.00 W1 H +ATOM 15590 H2 TIP3X4367 12.460 3.277 -29.992 1.00 0.00 W1 H +ATOM 15591 OH2 TIP3X4368 0.286 4.120 -18.281 1.00 0.00 W1 O +ATOM 15592 H1 TIP3X4368 -0.619 4.414 -18.170 1.00 0.00 W1 H +ATOM 15593 H2 TIP3X4368 0.426 3.501 -17.564 1.00 0.00 W1 H +ATOM 15594 OH2 TIP3X4369 1.429 0.957 -22.298 1.00 0.00 W1 O +ATOM 15595 H1 TIP3X4369 1.536 0.256 -22.941 1.00 0.00 W1 H +ATOM 15596 H2 TIP3X4369 1.564 1.763 -22.797 1.00 0.00 W1 H +ATOM 15597 OH2 TIP3X4370 12.951 4.585 -17.411 1.00 0.00 W1 O +ATOM 15598 H1 TIP3X4370 13.262 5.164 -16.715 1.00 0.00 W1 H +ATOM 15599 H2 TIP3X4370 12.007 4.521 -17.265 1.00 0.00 W1 H +ATOM 15600 OH2 TIP3X4371 9.994 4.591 -17.464 1.00 0.00 W1 O +ATOM 15601 H1 TIP3X4371 9.634 5.159 -18.145 1.00 0.00 W1 H +ATOM 15602 H2 TIP3X4371 9.656 3.721 -17.675 1.00 0.00 W1 H +ATOM 15603 OH2 TIP3X4372 8.197 5.060 -27.598 1.00 0.00 W1 O +ATOM 15604 H1 TIP3X4372 8.286 5.640 -28.355 1.00 0.00 W1 H +ATOM 15605 H2 TIP3X4372 7.427 4.526 -27.795 1.00 0.00 W1 H +ATOM 15606 OH2 TIP3X4373 6.500 4.392 -29.911 1.00 0.00 W1 O +ATOM 15607 H1 TIP3X4373 6.062 4.584 -30.740 1.00 0.00 W1 H +ATOM 15608 H2 TIP3X4373 6.093 3.581 -29.607 1.00 0.00 W1 H +ATOM 15609 OH2 TIP3X4374 7.210 1.454 -16.122 1.00 0.00 W1 O +ATOM 15610 H1 TIP3X4374 6.744 1.066 -15.381 1.00 0.00 W1 H +ATOM 15611 H2 TIP3X4374 8.124 1.486 -15.839 1.00 0.00 W1 H +ATOM 15612 OH2 TIP3X4375 12.773 6.798 -19.440 1.00 0.00 W1 O +ATOM 15613 H1 TIP3X4375 12.793 6.149 -18.737 1.00 0.00 W1 H +ATOM 15614 H2 TIP3X4375 11.939 6.647 -19.884 1.00 0.00 W1 H +ATOM 15615 OH2 TIP3X4376 0.848 3.899 -30.971 1.00 0.00 W1 O +ATOM 15616 H1 TIP3X4376 0.092 3.706 -30.417 1.00 0.00 W1 H +ATOM 15617 H2 TIP3X4376 1.382 4.497 -30.448 1.00 0.00 W1 H +ATOM 15618 OH2 TIP3X4377 0.767 15.392 -30.484 1.00 0.00 W1 O +ATOM 15619 H1 TIP3X4377 1.183 14.645 -30.054 1.00 0.00 W1 H +ATOM 15620 H2 TIP3X4377 0.780 16.086 -29.824 1.00 0.00 W1 H +ATOM 15621 OH2 TIP3X4378 9.515 3.552 -25.491 1.00 0.00 W1 O +ATOM 15622 H1 TIP3X4378 9.178 3.903 -26.315 1.00 0.00 W1 H +ATOM 15623 H2 TIP3X4378 10.411 3.285 -25.692 1.00 0.00 W1 H +ATOM 15624 OH2 TIP3X4379 4.970 2.863 -23.747 1.00 0.00 W1 O +ATOM 15625 H1 TIP3X4379 4.028 2.815 -23.905 1.00 0.00 W1 H +ATOM 15626 H2 TIP3X4379 5.109 3.737 -23.383 1.00 0.00 W1 H +ATOM 15627 OH2 TIP3X4380 0.332 3.989 -26.953 1.00 0.00 W1 O +ATOM 15628 H1 TIP3X4380 0.058 3.864 -26.045 1.00 0.00 W1 H +ATOM 15629 H2 TIP3X4380 0.138 4.907 -27.139 1.00 0.00 W1 H +ATOM 15630 OH2 TIP3X4381 4.333 3.316 -18.893 1.00 0.00 W1 O +ATOM 15631 H1 TIP3X4381 4.355 2.510 -19.409 1.00 0.00 W1 H +ATOM 15632 H2 TIP3X4381 3.939 3.964 -19.477 1.00 0.00 W1 H +ATOM 15633 OH2 TIP3X4382 4.916 9.851 -23.088 1.00 0.00 W1 O +ATOM 15634 H1 TIP3X4382 4.844 8.916 -23.276 1.00 0.00 W1 H +ATOM 15635 H2 TIP3X4382 4.920 9.905 -22.132 1.00 0.00 W1 H +ATOM 15636 OH2 TIP3X4383 9.105 6.870 -18.526 1.00 0.00 W1 O +ATOM 15637 H1 TIP3X4383 9.517 7.701 -18.289 1.00 0.00 W1 H +ATOM 15638 H2 TIP3X4383 8.555 7.081 -19.280 1.00 0.00 W1 H +ATOM 15639 OH2 TIP3X4384 14.900 2.237 -29.201 1.00 0.00 W1 O +ATOM 15640 H1 TIP3X4384 15.335 2.464 -28.379 1.00 0.00 W1 H +ATOM 15641 H2 TIP3X4384 14.380 1.461 -28.992 1.00 0.00 W1 H +ATOM 15642 OH2 TIP3X4385 6.055 8.197 -30.023 1.00 0.00 W1 O +ATOM 15643 H1 TIP3X4385 5.766 8.075 -29.119 1.00 0.00 W1 H +ATOM 15644 H2 TIP3X4385 6.744 7.543 -30.144 1.00 0.00 W1 H +ATOM 15645 OH2 TIP3X4386 12.758 6.713 -28.955 1.00 0.00 W1 O +ATOM 15646 H1 TIP3X4386 11.893 6.514 -28.596 1.00 0.00 W1 H +ATOM 15647 H2 TIP3X4386 13.315 6.834 -28.186 1.00 0.00 W1 H +ATOM 15648 OH2 TIP3X4387 7.591 6.967 -22.485 1.00 0.00 W1 O +ATOM 15649 H1 TIP3X4387 7.688 7.764 -21.963 1.00 0.00 W1 H +ATOM 15650 H2 TIP3X4387 8.466 6.577 -22.493 1.00 0.00 W1 H +ATOM 15651 OH2 TIP3X4388 7.336 7.348 -25.569 1.00 0.00 W1 O +ATOM 15652 H1 TIP3X4388 7.958 6.752 -25.987 1.00 0.00 W1 H +ATOM 15653 H2 TIP3X4388 7.362 7.111 -24.642 1.00 0.00 W1 H +ATOM 15654 OH2 TIP3X4389 10.231 8.964 -16.633 1.00 0.00 W1 O +ATOM 15655 H1 TIP3X4389 9.553 9.248 -16.020 1.00 0.00 W1 H +ATOM 15656 H2 TIP3X4389 11.029 8.923 -16.106 1.00 0.00 W1 H +ATOM 15657 OH2 TIP3X4390 2.741 8.379 -18.937 1.00 0.00 W1 O +ATOM 15658 H1 TIP3X4390 3.258 8.785 -18.241 1.00 0.00 W1 H +ATOM 15659 H2 TIP3X4390 2.358 9.117 -19.412 1.00 0.00 W1 H +ATOM 15660 OH2 TIP3X4391 1.647 6.342 -17.315 1.00 0.00 W1 O +ATOM 15661 H1 TIP3X4391 1.443 5.502 -17.728 1.00 0.00 W1 H +ATOM 15662 H2 TIP3X4391 1.524 6.987 -18.011 1.00 0.00 W1 H +ATOM 15663 OH2 TIP3X4392 1.540 7.215 -24.492 1.00 0.00 W1 O +ATOM 15664 H1 TIP3X4392 1.896 8.087 -24.662 1.00 0.00 W1 H +ATOM 15665 H2 TIP3X4392 1.438 6.824 -25.360 1.00 0.00 W1 H +ATOM 15666 OH2 TIP3X4393 12.299 9.480 -30.305 1.00 0.00 W1 O +ATOM 15667 H1 TIP3X4393 13.004 9.978 -30.717 1.00 0.00 W1 H +ATOM 15668 H2 TIP3X4393 12.748 8.849 -29.742 1.00 0.00 W1 H +ATOM 15669 OH2 TIP3X4394 14.895 6.827 -26.943 1.00 0.00 W1 O +ATOM 15670 H1 TIP3X4394 14.608 7.000 -26.046 1.00 0.00 W1 H +ATOM 15671 H2 TIP3X4394 15.408 7.598 -27.183 1.00 0.00 W1 H +ATOM 15672 OH2 TIP3X4395 1.393 5.944 -22.221 1.00 0.00 W1 O +ATOM 15673 H1 TIP3X4395 1.487 6.622 -22.889 1.00 0.00 W1 H +ATOM 15674 H2 TIP3X4395 2.051 6.163 -21.561 1.00 0.00 W1 H +ATOM 15675 OH2 TIP3X4396 4.180 14.451 -28.957 1.00 0.00 W1 O +ATOM 15676 H1 TIP3X4396 3.951 14.811 -29.814 1.00 0.00 W1 H +ATOM 15677 H2 TIP3X4396 3.767 13.587 -28.941 1.00 0.00 W1 H +ATOM 15678 OH2 TIP3X4397 2.955 9.684 -30.459 1.00 0.00 W1 O +ATOM 15679 H1 TIP3X4397 2.139 9.394 -30.867 1.00 0.00 W1 H +ATOM 15680 H2 TIP3X4397 3.487 8.890 -30.397 1.00 0.00 W1 H +ATOM 15681 OH2 TIP3X4398 4.373 10.523 -17.384 1.00 0.00 W1 O +ATOM 15682 H1 TIP3X4398 3.800 11.125 -17.858 1.00 0.00 W1 H +ATOM 15683 H2 TIP3X4398 3.899 10.327 -16.576 1.00 0.00 W1 H +ATOM 15684 OH2 TIP3X4399 7.449 15.266 -19.693 1.00 0.00 W1 O +ATOM 15685 H1 TIP3X4399 7.766 14.972 -18.840 1.00 0.00 W1 H +ATOM 15686 H2 TIP3X4399 7.882 14.689 -20.322 1.00 0.00 W1 H +ATOM 15687 OH2 TIP3X4400 12.155 15.508 -25.560 1.00 0.00 W1 O +ATOM 15688 H1 TIP3X4400 11.742 14.817 -26.078 1.00 0.00 W1 H +ATOM 15689 H2 TIP3X4400 11.959 16.315 -26.036 1.00 0.00 W1 H +ATOM 15690 OH2 TIP3X4401 8.733 12.190 -28.308 1.00 0.00 W1 O +ATOM 15691 H1 TIP3X4401 8.992 12.976 -28.790 1.00 0.00 W1 H +ATOM 15692 H2 TIP3X4401 8.163 12.514 -27.610 1.00 0.00 W1 H +ATOM 15693 OH2 TIP3X4402 8.750 7.345 -29.236 1.00 0.00 W1 O +ATOM 15694 H1 TIP3X4402 9.573 7.418 -29.719 1.00 0.00 W1 H +ATOM 15695 H2 TIP3X4402 8.757 8.089 -28.635 1.00 0.00 W1 H +ATOM 15696 OH2 TIP3X4403 12.151 2.068 -19.445 1.00 0.00 W1 O +ATOM 15697 H1 TIP3X4403 12.956 1.838 -19.909 1.00 0.00 W1 H +ATOM 15698 H2 TIP3X4403 12.442 2.621 -18.720 1.00 0.00 W1 H +ATOM 15699 OH2 TIP3X4404 0.116 9.170 -28.039 1.00 0.00 W1 O +ATOM 15700 H1 TIP3X4404 -0.037 9.262 -28.979 1.00 0.00 W1 H +ATOM 15701 H2 TIP3X4404 1.070 9.170 -27.950 1.00 0.00 W1 H +ATOM 15702 OH2 TIP3X4405 10.878 8.758 -21.443 1.00 0.00 W1 O +ATOM 15703 H1 TIP3X4405 11.424 9.419 -21.017 1.00 0.00 W1 H +ATOM 15704 H2 TIP3X4405 11.337 8.557 -22.259 1.00 0.00 W1 H +ATOM 15705 OH2 TIP3X4406 9.700 13.731 -30.366 1.00 0.00 W1 O +ATOM 15706 H1 TIP3X4406 10.525 13.766 -29.881 1.00 0.00 W1 H +ATOM 15707 H2 TIP3X4406 9.904 13.219 -31.148 1.00 0.00 W1 H +ATOM 15708 OH2 TIP3X4407 9.693 11.519 -18.715 1.00 0.00 W1 O +ATOM 15709 H1 TIP3X4407 8.872 11.766 -18.288 1.00 0.00 W1 H +ATOM 15710 H2 TIP3X4407 9.463 11.423 -19.639 1.00 0.00 W1 H +ATOM 15711 OH2 TIP3X4408 6.318 11.744 -26.828 1.00 0.00 W1 O +ATOM 15712 H1 TIP3X4408 5.611 11.891 -27.456 1.00 0.00 W1 H +ATOM 15713 H2 TIP3X4408 5.981 12.088 -26.001 1.00 0.00 W1 H +ATOM 15714 OH2 TIP3X4409 2.883 12.656 -18.117 1.00 0.00 W1 O +ATOM 15715 H1 TIP3X4409 3.617 13.267 -18.181 1.00 0.00 W1 H +ATOM 15716 H2 TIP3X4409 2.571 12.750 -17.217 1.00 0.00 W1 H +ATOM 15717 OH2 TIP3X4410 2.473 14.360 -24.015 1.00 0.00 W1 O +ATOM 15718 H1 TIP3X4410 1.887 13.619 -24.169 1.00 0.00 W1 H +ATOM 15719 H2 TIP3X4410 2.916 14.494 -24.853 1.00 0.00 W1 H +ATOM 15720 OH2 TIP3X4411 10.826 0.374 -22.935 1.00 0.00 W1 O +ATOM 15721 H1 TIP3X4411 11.158 0.298 -23.829 1.00 0.00 W1 H +ATOM 15722 H2 TIP3X4411 10.781 1.316 -22.774 1.00 0.00 W1 H +ATOM 15723 OH2 TIP3X4412 8.064 2.502 -22.700 1.00 0.00 W1 O +ATOM 15724 H1 TIP3X4412 7.702 2.991 -23.439 1.00 0.00 W1 H +ATOM 15725 H2 TIP3X4412 7.332 2.413 -22.090 1.00 0.00 W1 H +ATOM 15726 OH2 TIP3X4413 6.783 0.487 -28.772 1.00 0.00 W1 O +ATOM 15727 H1 TIP3X4413 7.639 0.232 -28.427 1.00 0.00 W1 H +ATOM 15728 H2 TIP3X4413 6.265 -0.317 -28.747 1.00 0.00 W1 H +ATOM 15729 OH2 TIP3X4414 9.535 0.331 -27.729 1.00 0.00 W1 O +ATOM 15730 H1 TIP3X4414 9.990 -0.405 -27.320 1.00 0.00 W1 H +ATOM 15731 H2 TIP3X4414 9.942 0.417 -28.590 1.00 0.00 W1 H +ATOM 15732 OH2 TIP3X4415 4.174 14.909 -16.274 1.00 0.00 W1 O +ATOM 15733 H1 TIP3X4415 3.924 15.666 -16.804 1.00 0.00 W1 H +ATOM 15734 H2 TIP3X4415 5.085 14.740 -16.513 1.00 0.00 W1 H +ATOM 15735 OH2 TIP3X4416 9.181 13.604 -25.974 1.00 0.00 W1 O +ATOM 15736 H1 TIP3X4416 9.842 12.962 -25.714 1.00 0.00 W1 H +ATOM 15737 H2 TIP3X4416 9.168 14.238 -25.257 1.00 0.00 W1 H +ATOM 15738 OH2 TIP3X4417 6.920 14.506 -17.064 1.00 0.00 W1 O +ATOM 15739 H1 TIP3X4417 7.138 13.614 -16.794 1.00 0.00 W1 H +ATOM 15740 H2 TIP3X4417 7.528 15.060 -16.575 1.00 0.00 W1 H +ATOM 15741 OH2 TIP3X4418 5.867 2.624 -27.020 1.00 0.00 W1 O +ATOM 15742 H1 TIP3X4418 6.524 1.965 -27.242 1.00 0.00 W1 H +ATOM 15743 H2 TIP3X4418 5.909 2.693 -26.066 1.00 0.00 W1 H +ATOM 15744 OH2 TIP3X4419 0.580 0.963 -17.564 1.00 0.00 W1 O +ATOM 15745 H1 TIP3X4419 1.328 0.767 -18.128 1.00 0.00 W1 H +ATOM 15746 H2 TIP3X4419 0.788 0.537 -16.732 1.00 0.00 W1 H +ATOM 15747 OH2 TIP3X4420 11.699 13.690 -27.962 1.00 0.00 W1 O +ATOM 15748 H1 TIP3X4420 11.844 12.749 -27.859 1.00 0.00 W1 H +ATOM 15749 H2 TIP3X4420 12.523 14.022 -28.319 1.00 0.00 W1 H +ATOM 15750 OH2 TIP3X4421 13.367 0.456 -16.735 1.00 0.00 W1 O +ATOM 15751 H1 TIP3X4421 12.753 0.530 -17.466 1.00 0.00 W1 H +ATOM 15752 H2 TIP3X4421 14.137 0.951 -17.017 1.00 0.00 W1 H +ATOM 15753 OH2 TIP3X4422 4.161 14.669 -26.249 1.00 0.00 W1 O +ATOM 15754 H1 TIP3X4422 4.154 14.714 -27.205 1.00 0.00 W1 H +ATOM 15755 H2 TIP3X4422 4.968 15.115 -25.993 1.00 0.00 W1 H +ATOM 15756 OH2 TIP3X4423 15.070 13.608 -18.299 1.00 0.00 W1 O +ATOM 15757 H1 TIP3X4423 14.347 14.159 -17.998 1.00 0.00 W1 H +ATOM 15758 H2 TIP3X4423 15.858 14.107 -18.085 1.00 0.00 W1 H +ATOM 15759 OH2 TIP3X4424 2.695 2.930 -26.619 1.00 0.00 W1 O +ATOM 15760 H1 TIP3X4424 2.052 3.318 -27.212 1.00 0.00 W1 H +ATOM 15761 H2 TIP3X4424 3.498 3.427 -26.777 1.00 0.00 W1 H +ATOM 15762 OH2 TIP3X4425 4.124 11.529 -28.888 1.00 0.00 W1 O +ATOM 15763 H1 TIP3X4425 4.085 10.901 -29.609 1.00 0.00 W1 H +ATOM 15764 H2 TIP3X4425 3.405 11.275 -28.310 1.00 0.00 W1 H +ATOM 15765 OH2 TIP3X4426 5.105 8.271 -11.532 1.00 0.00 W1 O +ATOM 15766 H1 TIP3X4426 5.136 9.181 -11.235 1.00 0.00 W1 H +ATOM 15767 H2 TIP3X4426 5.613 7.788 -10.880 1.00 0.00 W1 H +ATOM 15768 OH2 TIP3X4427 11.425 10.874 -12.345 1.00 0.00 W1 O +ATOM 15769 H1 TIP3X4427 11.587 10.645 -13.260 1.00 0.00 W1 H +ATOM 15770 H2 TIP3X4427 10.496 11.103 -12.315 1.00 0.00 W1 H +ATOM 15771 OH2 TIP3X4428 15.273 11.406 -7.561 1.00 0.00 W1 O +ATOM 15772 H1 TIP3X4428 14.721 11.489 -8.338 1.00 0.00 W1 H +ATOM 15773 H2 TIP3X4428 14.662 11.189 -6.856 1.00 0.00 W1 H +ATOM 15774 OH2 TIP3X4429 5.165 13.826 -6.874 1.00 0.00 W1 O +ATOM 15775 H1 TIP3X4429 5.520 14.675 -7.138 1.00 0.00 W1 H +ATOM 15776 H2 TIP3X4429 4.230 13.886 -7.070 1.00 0.00 W1 H +ATOM 15777 OH2 TIP3X4430 12.078 2.832 -11.097 1.00 0.00 W1 O +ATOM 15778 H1 TIP3X4430 12.903 3.017 -10.648 1.00 0.00 W1 H +ATOM 15779 H2 TIP3X4430 12.155 3.287 -11.936 1.00 0.00 W1 H +ATOM 15780 OH2 TIP3X4431 14.784 15.350 -9.188 1.00 0.00 W1 O +ATOM 15781 H1 TIP3X4431 14.778 14.882 -8.353 1.00 0.00 W1 H +ATOM 15782 H2 TIP3X4431 13.903 15.221 -9.541 1.00 0.00 W1 H +ATOM 15783 OH2 TIP3X4432 6.656 11.686 -8.166 1.00 0.00 W1 O +ATOM 15784 H1 TIP3X4432 6.084 10.967 -7.897 1.00 0.00 W1 H +ATOM 15785 H2 TIP3X4432 6.195 12.476 -7.883 1.00 0.00 W1 H +ATOM 15786 OH2 TIP3X4433 4.229 2.843 -13.794 1.00 0.00 W1 O +ATOM 15787 H1 TIP3X4433 4.131 2.181 -13.109 1.00 0.00 W1 H +ATOM 15788 H2 TIP3X4433 4.046 2.374 -14.608 1.00 0.00 W1 H +ATOM 15789 OH2 TIP3X4434 0.762 10.060 -4.730 1.00 0.00 W1 O +ATOM 15790 H1 TIP3X4434 0.228 9.458 -5.248 1.00 0.00 W1 H +ATOM 15791 H2 TIP3X4434 0.292 10.146 -3.901 1.00 0.00 W1 H +ATOM 15792 OH2 TIP3X4435 15.398 13.997 -6.789 1.00 0.00 W1 O +ATOM 15793 H1 TIP3X4435 16.075 13.838 -6.133 1.00 0.00 W1 H +ATOM 15794 H2 TIP3X4435 15.163 13.126 -7.108 1.00 0.00 W1 H +ATOM 15795 OH2 TIP3X4436 8.078 10.415 -14.742 1.00 0.00 W1 O +ATOM 15796 H1 TIP3X4436 7.383 9.793 -14.528 1.00 0.00 W1 H +ATOM 15797 H2 TIP3X4436 8.060 11.051 -14.027 1.00 0.00 W1 H +ATOM 15798 OH2 TIP3X4437 15.458 9.178 -15.306 1.00 0.00 W1 O +ATOM 15799 H1 TIP3X4437 15.195 8.428 -15.839 1.00 0.00 W1 H +ATOM 15800 H2 TIP3X4437 15.204 9.942 -15.823 1.00 0.00 W1 H +ATOM 15801 OH2 TIP3X4438 1.406 12.875 -15.589 1.00 0.00 W1 O +ATOM 15802 H1 TIP3X4438 1.852 12.326 -14.943 1.00 0.00 W1 H +ATOM 15803 H2 TIP3X4438 0.510 12.541 -15.610 1.00 0.00 W1 H +ATOM 15804 OH2 TIP3X4439 13.500 15.004 -14.330 1.00 0.00 W1 O +ATOM 15805 H1 TIP3X4439 14.385 14.676 -14.489 1.00 0.00 W1 H +ATOM 15806 H2 TIP3X4439 13.270 15.472 -15.133 1.00 0.00 W1 H +ATOM 15807 OH2 TIP3X4440 1.578 13.492 -12.634 1.00 0.00 W1 O +ATOM 15808 H1 TIP3X4440 1.510 14.328 -12.174 1.00 0.00 W1 H +ATOM 15809 H2 TIP3X4440 0.683 13.153 -12.651 1.00 0.00 W1 H +ATOM 15810 OH2 TIP3X4441 14.158 11.985 -14.990 1.00 0.00 W1 O +ATOM 15811 H1 TIP3X4441 14.190 11.905 -14.036 1.00 0.00 W1 H +ATOM 15812 H2 TIP3X4441 13.325 12.422 -15.166 1.00 0.00 W1 H +ATOM 15813 OH2 TIP3X4442 9.406 4.161 -14.996 1.00 0.00 W1 O +ATOM 15814 H1 TIP3X4442 9.240 4.458 -15.891 1.00 0.00 W1 H +ATOM 15815 H2 TIP3X4442 8.535 4.038 -14.619 1.00 0.00 W1 H +ATOM 15816 OH2 TIP3X4443 14.804 11.922 -11.948 1.00 0.00 W1 O +ATOM 15817 H1 TIP3X4443 15.377 11.185 -11.735 1.00 0.00 W1 H +ATOM 15818 H2 TIP3X4443 14.473 12.221 -11.101 1.00 0.00 W1 H +ATOM 15819 OH2 TIP3X4444 8.538 0.697 -9.221 1.00 0.00 W1 O +ATOM 15820 H1 TIP3X4444 9.020 1.211 -9.868 1.00 0.00 W1 H +ATOM 15821 H2 TIP3X4444 8.882 0.991 -8.377 1.00 0.00 W1 H +ATOM 15822 OH2 TIP3X4445 3.008 5.289 -14.068 1.00 0.00 W1 O +ATOM 15823 H1 TIP3X4445 3.430 5.935 -14.634 1.00 0.00 W1 H +ATOM 15824 H2 TIP3X4445 3.720 4.714 -13.787 1.00 0.00 W1 H +ATOM 15825 OH2 TIP3X4446 11.735 3.233 -13.811 1.00 0.00 W1 O +ATOM 15826 H1 TIP3X4446 11.028 3.722 -14.231 1.00 0.00 W1 H +ATOM 15827 H2 TIP3X4446 12.460 3.277 -14.435 1.00 0.00 W1 H +ATOM 15828 OH2 TIP3X4447 0.286 4.120 -2.723 1.00 0.00 W1 O +ATOM 15829 H1 TIP3X4447 -0.619 4.414 -2.612 1.00 0.00 W1 H +ATOM 15830 H2 TIP3X4447 0.426 3.501 -2.007 1.00 0.00 W1 H +ATOM 15831 OH2 TIP3X4448 6.500 4.392 -14.353 1.00 0.00 W1 O +ATOM 15832 H1 TIP3X4448 6.062 4.584 -15.183 1.00 0.00 W1 H +ATOM 15833 H2 TIP3X4448 6.093 3.581 -14.050 1.00 0.00 W1 H +ATOM 15834 OH2 TIP3X4449 0.848 3.899 -15.413 1.00 0.00 W1 O +ATOM 15835 H1 TIP3X4449 0.092 3.706 -14.859 1.00 0.00 W1 H +ATOM 15836 H2 TIP3X4449 1.382 4.497 -14.891 1.00 0.00 W1 H +ATOM 15837 OH2 TIP3X4450 0.767 15.392 -14.926 1.00 0.00 W1 O +ATOM 15838 H1 TIP3X4450 1.183 14.645 -14.497 1.00 0.00 W1 H +ATOM 15839 H2 TIP3X4450 0.780 16.086 -14.267 1.00 0.00 W1 H +ATOM 15840 OH2 TIP3X4451 9.515 3.552 -9.933 1.00 0.00 W1 O +ATOM 15841 H1 TIP3X4451 9.178 3.903 -10.758 1.00 0.00 W1 H +ATOM 15842 H2 TIP3X4451 10.411 3.285 -10.135 1.00 0.00 W1 H +ATOM 15843 OH2 TIP3X4452 6.055 8.197 -14.466 1.00 0.00 W1 O +ATOM 15844 H1 TIP3X4452 5.766 8.075 -13.561 1.00 0.00 W1 H +ATOM 15845 H2 TIP3X4452 6.744 7.543 -14.587 1.00 0.00 W1 H +ATOM 15846 OH2 TIP3X4453 12.758 6.713 -13.398 1.00 0.00 W1 O +ATOM 15847 H1 TIP3X4453 11.893 6.514 -13.039 1.00 0.00 W1 H +ATOM 15848 H2 TIP3X4453 13.315 6.834 -12.629 1.00 0.00 W1 H +ATOM 15849 OH2 TIP3X4454 1.647 6.342 -1.758 1.00 0.00 W1 O +ATOM 15850 H1 TIP3X4454 1.443 5.502 -2.170 1.00 0.00 W1 H +ATOM 15851 H2 TIP3X4454 1.524 6.987 -2.453 1.00 0.00 W1 H +ATOM 15852 OH2 TIP3X4455 12.299 9.480 -14.748 1.00 0.00 W1 O +ATOM 15853 H1 TIP3X4455 13.004 9.978 -15.160 1.00 0.00 W1 H +ATOM 15854 H2 TIP3X4455 12.748 8.849 -14.184 1.00 0.00 W1 H +ATOM 15855 OH2 TIP3X4456 14.895 6.827 -11.385 1.00 0.00 W1 O +ATOM 15856 H1 TIP3X4456 14.608 7.000 -10.489 1.00 0.00 W1 H +ATOM 15857 H2 TIP3X4456 15.408 7.598 -11.626 1.00 0.00 W1 H +ATOM 15858 OH2 TIP3X4457 1.393 5.944 -6.663 1.00 0.00 W1 O +ATOM 15859 H1 TIP3X4457 1.487 6.622 -7.332 1.00 0.00 W1 H +ATOM 15860 H2 TIP3X4457 2.051 6.163 -6.004 1.00 0.00 W1 H +ATOM 15861 OH2 TIP3X4458 2.955 9.684 -14.901 1.00 0.00 W1 O +ATOM 15862 H1 TIP3X4458 2.139 9.394 -15.310 1.00 0.00 W1 H +ATOM 15863 H2 TIP3X4458 3.487 8.890 -14.840 1.00 0.00 W1 H +ATOM 15864 OH2 TIP3X4459 12.155 15.508 -10.002 1.00 0.00 W1 O +ATOM 15865 H1 TIP3X4459 11.742 14.817 -10.521 1.00 0.00 W1 H +ATOM 15866 H2 TIP3X4459 11.959 16.315 -10.479 1.00 0.00 W1 H +ATOM 15867 OH2 TIP3X4460 8.733 12.190 -12.750 1.00 0.00 W1 O +ATOM 15868 H1 TIP3X4460 8.992 12.976 -13.232 1.00 0.00 W1 H +ATOM 15869 H2 TIP3X4460 8.163 12.514 -12.052 1.00 0.00 W1 H +ATOM 15870 OH2 TIP3X4461 8.750 7.345 -13.679 1.00 0.00 W1 O +ATOM 15871 H1 TIP3X4461 9.573 7.418 -14.162 1.00 0.00 W1 H +ATOM 15872 H2 TIP3X4461 8.757 8.089 -13.077 1.00 0.00 W1 H +ATOM 15873 OH2 TIP3X4462 9.700 13.731 -14.808 1.00 0.00 W1 O +ATOM 15874 H1 TIP3X4462 10.525 13.766 -14.324 1.00 0.00 W1 H +ATOM 15875 H2 TIP3X4462 9.904 13.219 -15.591 1.00 0.00 W1 H +ATOM 15876 OH2 TIP3X4463 9.181 13.604 -10.416 1.00 0.00 W1 O +ATOM 15877 H1 TIP3X4463 9.842 12.962 -10.156 1.00 0.00 W1 H +ATOM 15878 H2 TIP3X4463 9.168 14.238 -9.700 1.00 0.00 W1 H +ATOM 15879 OH2 TIP3X4464 11.699 13.690 -12.405 1.00 0.00 W1 O +ATOM 15880 H1 TIP3X4464 11.844 12.749 -12.302 1.00 0.00 W1 H +ATOM 15881 H2 TIP3X4464 12.523 14.022 -12.762 1.00 0.00 W1 H +ATOM 15882 OH2 TIP3X4465 15.070 13.608 -2.742 1.00 0.00 W1 O +ATOM 15883 H1 TIP3X4465 14.347 14.159 -2.441 1.00 0.00 W1 H +ATOM 15884 H2 TIP3X4465 15.858 14.107 -2.528 1.00 0.00 W1 H +ATOM 15885 OH2 TIP3X4466 2.019 11.057 4.309 1.00 0.00 W1 O +ATOM 15886 H1 TIP3X4466 2.201 10.981 5.246 1.00 0.00 W1 H +ATOM 15887 H2 TIP3X4466 1.995 11.999 4.145 1.00 0.00 W1 H +ATOM 15888 OH2 TIP3X4467 1.909 12.670 10.448 1.00 0.00 W1 O +ATOM 15889 H1 TIP3X4467 2.315 12.873 11.291 1.00 0.00 W1 H +ATOM 15890 H2 TIP3X4467 1.338 11.924 10.630 1.00 0.00 W1 H +ATOM 15891 OH2 TIP3X4468 12.717 14.251 9.554 1.00 0.00 W1 O +ATOM 15892 H1 TIP3X4468 12.281 15.075 9.334 1.00 0.00 W1 H +ATOM 15893 H2 TIP3X4468 13.646 14.477 9.603 1.00 0.00 W1 H +ATOM 15894 OH2 TIP3X4469 15.123 3.764 9.953 1.00 0.00 W1 O +ATOM 15895 H1 TIP3X4469 15.642 4.433 9.506 1.00 0.00 W1 H +ATOM 15896 H2 TIP3X4469 15.565 3.640 10.793 1.00 0.00 W1 H +ATOM 15897 OH2 TIP3X4470 12.356 9.595 12.219 1.00 0.00 W1 O +ATOM 15898 H1 TIP3X4470 11.453 9.678 12.527 1.00 0.00 W1 H +ATOM 15899 H2 TIP3X4470 12.524 8.653 12.223 1.00 0.00 W1 H +ATOM 15900 OH2 TIP3X4471 14.722 7.554 10.025 1.00 0.00 W1 O +ATOM 15901 H1 TIP3X4471 15.385 6.873 9.906 1.00 0.00 W1 H +ATOM 15902 H2 TIP3X4471 14.006 7.115 10.484 1.00 0.00 W1 H +ATOM 15903 OH2 TIP3X4472 3.867 7.241 15.169 1.00 0.00 W1 O +ATOM 15904 H1 TIP3X4472 3.338 7.007 14.407 1.00 0.00 W1 H +ATOM 15905 H2 TIP3X4472 4.762 7.289 14.835 1.00 0.00 W1 H +ATOM 15906 OH2 TIP3X4473 13.449 11.577 10.480 1.00 0.00 W1 O +ATOM 15907 H1 TIP3X4473 13.872 12.345 10.864 1.00 0.00 W1 H +ATOM 15908 H2 TIP3X4473 13.145 11.069 11.233 1.00 0.00 W1 H +ATOM 15909 OH2 TIP3X4474 11.536 13.553 12.305 1.00 0.00 W1 O +ATOM 15910 H1 TIP3X4474 10.829 12.924 12.163 1.00 0.00 W1 H +ATOM 15911 H2 TIP3X4474 11.865 13.747 11.428 1.00 0.00 W1 H +ATOM 15912 OH2 TIP3X4475 11.787 12.089 14.702 1.00 0.00 W1 O +ATOM 15913 H1 TIP3X4475 11.154 11.482 14.318 1.00 0.00 W1 H +ATOM 15914 H2 TIP3X4475 11.901 12.769 14.038 1.00 0.00 W1 H +ATOM 15915 OH2 TIP3X4476 1.406 12.875 -0.031 1.00 0.00 W1 O +ATOM 15916 H1 TIP3X4476 1.852 12.326 0.614 1.00 0.00 W1 H +ATOM 15917 H2 TIP3X4476 0.510 12.541 -0.053 1.00 0.00 W1 H +ATOM 15918 OH2 TIP3X4477 13.500 15.004 1.227 1.00 0.00 W1 O +ATOM 15919 H1 TIP3X4477 14.385 14.676 1.069 1.00 0.00 W1 H +ATOM 15920 H2 TIP3X4477 13.270 15.472 0.425 1.00 0.00 W1 H +ATOM 15921 OH2 TIP3X4478 14.892 10.666 13.305 1.00 0.00 W1 O +ATOM 15922 H1 TIP3X4478 14.782 11.615 13.364 1.00 0.00 W1 H +ATOM 15923 H2 TIP3X4478 13.999 10.321 13.294 1.00 0.00 W1 H +ATOM 15924 OH2 TIP3X4479 1.578 13.492 2.923 1.00 0.00 W1 O +ATOM 15925 H1 TIP3X4479 1.510 14.328 3.384 1.00 0.00 W1 H +ATOM 15926 H2 TIP3X4479 0.683 13.153 2.907 1.00 0.00 W1 H +ATOM 15927 OH2 TIP3X4480 10.529 0.279 13.452 1.00 0.00 W1 O +ATOM 15928 H1 TIP3X4480 10.222 1.028 12.939 1.00 0.00 W1 H +ATOM 15929 H2 TIP3X4480 10.583 -0.438 12.820 1.00 0.00 W1 H +ATOM 15930 OH2 TIP3X4481 4.743 14.196 11.481 1.00 0.00 W1 O +ATOM 15931 H1 TIP3X4481 5.591 14.434 11.854 1.00 0.00 W1 H +ATOM 15932 H2 TIP3X4481 4.954 13.816 10.628 1.00 0.00 W1 H +ATOM 15933 OH2 TIP3X4482 2.104 10.272 6.882 1.00 0.00 W1 O +ATOM 15934 H1 TIP3X4482 1.436 10.595 7.486 1.00 0.00 W1 H +ATOM 15935 H2 TIP3X4482 2.896 10.202 7.414 1.00 0.00 W1 H +ATOM 15936 OH2 TIP3X4483 7.101 11.691 13.992 1.00 0.00 W1 O +ATOM 15937 H1 TIP3X4483 7.324 11.313 14.843 1.00 0.00 W1 H +ATOM 15938 H2 TIP3X4483 6.494 11.062 13.602 1.00 0.00 W1 H +ATOM 15939 OH2 TIP3X4484 14.258 6.373 15.337 1.00 0.00 W1 O +ATOM 15940 H1 TIP3X4484 15.052 5.839 15.320 1.00 0.00 W1 H +ATOM 15941 H2 TIP3X4484 13.964 6.338 16.247 1.00 0.00 W1 H +ATOM 15942 OH2 TIP3X4485 2.715 6.664 3.986 1.00 0.00 W1 O +ATOM 15943 H1 TIP3X4485 2.778 6.375 3.076 1.00 0.00 W1 H +ATOM 15944 H2 TIP3X4485 3.490 7.209 4.119 1.00 0.00 W1 H +ATOM 15945 OH2 TIP3X4486 12.951 4.585 13.704 1.00 0.00 W1 O +ATOM 15946 H1 TIP3X4486 13.262 5.164 14.400 1.00 0.00 W1 H +ATOM 15947 H2 TIP3X4486 12.007 4.521 13.849 1.00 0.00 W1 H +ATOM 15948 OH2 TIP3X4487 12.773 6.798 11.675 1.00 0.00 W1 O +ATOM 15949 H1 TIP3X4487 12.793 6.149 12.378 1.00 0.00 W1 H +ATOM 15950 H2 TIP3X4487 11.939 6.647 11.231 1.00 0.00 W1 H +ATOM 15951 OH2 TIP3X4488 0.767 15.392 0.631 1.00 0.00 W1 O +ATOM 15952 H1 TIP3X4488 1.183 14.645 1.060 1.00 0.00 W1 H +ATOM 15953 H2 TIP3X4488 0.780 16.086 1.291 1.00 0.00 W1 H +ATOM 15954 OH2 TIP3X4489 10.231 8.964 14.482 1.00 0.00 W1 O +ATOM 15955 H1 TIP3X4489 9.553 9.248 15.095 1.00 0.00 W1 H +ATOM 15956 H2 TIP3X4489 11.029 8.923 15.009 1.00 0.00 W1 H +ATOM 15957 OH2 TIP3X4490 7.449 15.266 11.422 1.00 0.00 W1 O +ATOM 15958 H1 TIP3X4490 7.766 14.972 12.275 1.00 0.00 W1 H +ATOM 15959 H2 TIP3X4490 7.882 14.689 10.793 1.00 0.00 W1 H +ATOM 15960 OH2 TIP3X4491 12.151 2.068 11.670 1.00 0.00 W1 O +ATOM 15961 H1 TIP3X4491 12.956 1.838 11.206 1.00 0.00 W1 H +ATOM 15962 H2 TIP3X4491 12.442 2.621 12.395 1.00 0.00 W1 H +ATOM 15963 OH2 TIP3X4492 0.116 9.170 3.076 1.00 0.00 W1 O +ATOM 15964 H1 TIP3X4492 -0.037 9.262 2.136 1.00 0.00 W1 H +ATOM 15965 H2 TIP3X4492 1.070 9.170 3.165 1.00 0.00 W1 H +ATOM 15966 OH2 TIP3X4493 9.693 11.519 12.400 1.00 0.00 W1 O +ATOM 15967 H1 TIP3X4493 8.872 11.766 12.826 1.00 0.00 W1 H +ATOM 15968 H2 TIP3X4493 9.463 11.423 11.476 1.00 0.00 W1 H +ATOM 15969 OH2 TIP3X4494 2.883 12.656 12.998 1.00 0.00 W1 O +ATOM 15970 H1 TIP3X4494 3.617 13.267 12.933 1.00 0.00 W1 H +ATOM 15971 H2 TIP3X4494 2.571 12.750 13.898 1.00 0.00 W1 H +ATOM 15972 OH2 TIP3X4495 2.473 14.360 7.100 1.00 0.00 W1 O +ATOM 15973 H1 TIP3X4495 1.887 13.619 6.946 1.00 0.00 W1 H +ATOM 15974 H2 TIP3X4495 2.916 14.494 6.261 1.00 0.00 W1 H +ATOM 15975 OH2 TIP3X4496 4.174 14.909 14.841 1.00 0.00 W1 O +ATOM 15976 H1 TIP3X4496 3.924 15.666 14.311 1.00 0.00 W1 H +ATOM 15977 H2 TIP3X4496 5.085 14.740 14.602 1.00 0.00 W1 H +ATOM 15978 OH2 TIP3X4497 6.920 14.506 14.051 1.00 0.00 W1 O +ATOM 15979 H1 TIP3X4497 7.138 13.614 14.321 1.00 0.00 W1 H +ATOM 15980 H2 TIP3X4497 7.528 15.060 14.540 1.00 0.00 W1 H +ATOM 15981 OH2 TIP3X4498 13.367 0.456 14.380 1.00 0.00 W1 O +ATOM 15982 H1 TIP3X4498 12.753 0.530 13.649 1.00 0.00 W1 H +ATOM 15983 H2 TIP3X4498 14.137 0.951 14.098 1.00 0.00 W1 H +ATOM 15984 OH2 TIP3X4499 4.161 14.669 4.866 1.00 0.00 W1 O +ATOM 15985 H1 TIP3X4499 4.154 14.714 3.910 1.00 0.00 W1 H +ATOM 15986 H2 TIP3X4499 4.968 15.115 5.122 1.00 0.00 W1 H +ATOM 15987 OH2 TIP3X4500 15.070 13.608 12.816 1.00 0.00 W1 O +ATOM 15988 H1 TIP3X4500 14.347 14.159 13.117 1.00 0.00 W1 H +ATOM 15989 H2 TIP3X4500 15.858 14.107 13.030 1.00 0.00 W1 H +ATOM 15990 OH2 TIP3X4501 2.019 11.057 19.866 1.00 0.00 W1 O +ATOM 15991 H1 TIP3X4501 2.201 10.981 20.803 1.00 0.00 W1 H +ATOM 15992 H2 TIP3X4501 1.995 11.999 19.702 1.00 0.00 W1 H +ATOM 15993 OH2 TIP3X4502 13.121 8.548 23.605 1.00 0.00 W1 O +ATOM 15994 H1 TIP3X4502 13.356 8.812 22.715 1.00 0.00 W1 H +ATOM 15995 H2 TIP3X4502 13.950 8.284 24.003 1.00 0.00 W1 H +ATOM 15996 OH2 TIP3X4503 5.105 8.271 19.583 1.00 0.00 W1 O +ATOM 15997 H1 TIP3X4503 5.136 9.181 19.880 1.00 0.00 W1 H +ATOM 15998 H2 TIP3X4503 5.613 7.788 20.235 1.00 0.00 W1 H +ATOM 15999 OH2 TIP3X4504 12.908 12.431 21.727 1.00 0.00 W1 O +ATOM 16000 H1 TIP3X4504 12.634 12.921 22.502 1.00 0.00 W1 H +ATOM 16001 H2 TIP3X4504 12.383 11.631 21.750 1.00 0.00 W1 H +ATOM 16002 OH2 TIP3X4505 11.425 10.874 18.770 1.00 0.00 W1 O +ATOM 16003 H1 TIP3X4505 11.587 10.645 17.855 1.00 0.00 W1 H +ATOM 16004 H2 TIP3X4505 10.496 11.103 18.799 1.00 0.00 W1 H +ATOM 16005 OH2 TIP3X4506 15.273 11.406 23.554 1.00 0.00 W1 O +ATOM 16006 H1 TIP3X4506 14.721 11.489 22.777 1.00 0.00 W1 H +ATOM 16007 H2 TIP3X4506 14.662 11.189 24.259 1.00 0.00 W1 H +ATOM 16008 OH2 TIP3X4507 1.909 12.670 26.005 1.00 0.00 W1 O +ATOM 16009 H1 TIP3X4507 2.315 12.873 26.848 1.00 0.00 W1 H +ATOM 16010 H2 TIP3X4507 1.338 11.924 26.188 1.00 0.00 W1 H +ATOM 16011 OH2 TIP3X4508 9.284 14.295 25.231 1.00 0.00 W1 O +ATOM 16012 H1 TIP3X4508 9.585 13.394 25.353 1.00 0.00 W1 H +ATOM 16013 H2 TIP3X4508 9.909 14.675 24.614 1.00 0.00 W1 H +ATOM 16014 OH2 TIP3X4509 12.717 14.251 25.111 1.00 0.00 W1 O +ATOM 16015 H1 TIP3X4509 12.281 15.075 24.892 1.00 0.00 W1 H +ATOM 16016 H2 TIP3X4509 13.646 14.477 25.161 1.00 0.00 W1 H +ATOM 16017 OH2 TIP3X4510 5.165 13.826 24.241 1.00 0.00 W1 O +ATOM 16018 H1 TIP3X4510 5.520 14.675 23.977 1.00 0.00 W1 H +ATOM 16019 H2 TIP3X4510 4.230 13.886 24.045 1.00 0.00 W1 H +ATOM 16020 OH2 TIP3X4511 10.006 5.719 23.142 1.00 0.00 W1 O +ATOM 16021 H1 TIP3X4511 9.929 4.909 22.638 1.00 0.00 W1 H +ATOM 16022 H2 TIP3X4511 10.949 5.858 23.230 1.00 0.00 W1 H +ATOM 16023 OH2 TIP3X4512 6.029 1.816 25.504 1.00 0.00 W1 O +ATOM 16024 H1 TIP3X4512 6.287 1.079 26.057 1.00 0.00 W1 H +ATOM 16025 H2 TIP3X4512 5.353 1.460 24.929 1.00 0.00 W1 H +ATOM 16026 OH2 TIP3X4513 14.273 2.821 21.927 1.00 0.00 W1 O +ATOM 16027 H1 TIP3X4513 13.965 3.159 22.768 1.00 0.00 W1 H +ATOM 16028 H2 TIP3X4513 14.341 1.875 22.059 1.00 0.00 W1 H +ATOM 16029 OH2 TIP3X4514 12.870 4.016 23.881 1.00 0.00 W1 O +ATOM 16030 H1 TIP3X4514 13.446 3.788 24.612 1.00 0.00 W1 H +ATOM 16031 H2 TIP3X4514 11.996 3.761 24.176 1.00 0.00 W1 H +ATOM 16032 OH2 TIP3X4515 5.917 5.141 25.252 1.00 0.00 W1 O +ATOM 16033 H1 TIP3X4515 6.420 4.438 25.664 1.00 0.00 W1 H +ATOM 16034 H2 TIP3X4515 6.574 5.783 24.986 1.00 0.00 W1 H +ATOM 16035 OH2 TIP3X4516 13.394 6.189 22.150 1.00 0.00 W1 O +ATOM 16036 H1 TIP3X4516 13.435 5.289 22.474 1.00 0.00 W1 H +ATOM 16037 H2 TIP3X4516 13.276 6.722 22.936 1.00 0.00 W1 H +ATOM 16038 OH2 TIP3X4517 12.078 2.832 20.018 1.00 0.00 W1 O +ATOM 16039 H1 TIP3X4517 12.903 3.017 20.467 1.00 0.00 W1 H +ATOM 16040 H2 TIP3X4517 12.155 3.287 19.179 1.00 0.00 W1 H +ATOM 16041 OH2 TIP3X4518 8.261 8.804 26.090 1.00 0.00 W1 O +ATOM 16042 H1 TIP3X4518 9.138 8.826 25.707 1.00 0.00 W1 H +ATOM 16043 H2 TIP3X4518 7.995 9.722 26.136 1.00 0.00 W1 H +ATOM 16044 OH2 TIP3X4519 7.411 11.352 25.900 1.00 0.00 W1 O +ATOM 16045 H1 TIP3X4519 7.387 11.579 24.970 1.00 0.00 W1 H +ATOM 16046 H2 TIP3X4519 6.491 11.298 26.158 1.00 0.00 W1 H +ATOM 16047 OH2 TIP3X4520 2.274 3.233 22.738 1.00 0.00 W1 O +ATOM 16048 H1 TIP3X4520 1.949 4.113 22.929 1.00 0.00 W1 H +ATOM 16049 H2 TIP3X4520 2.151 3.131 21.794 1.00 0.00 W1 H +ATOM 16050 OH2 TIP3X4521 4.430 6.791 22.750 1.00 0.00 W1 O +ATOM 16051 H1 TIP3X4521 3.747 6.341 22.253 1.00 0.00 W1 H +ATOM 16052 H2 TIP3X4521 4.916 6.087 23.182 1.00 0.00 W1 H +ATOM 16053 OH2 TIP3X4522 10.486 11.715 25.147 1.00 0.00 W1 O +ATOM 16054 H1 TIP3X4522 10.244 11.129 24.430 1.00 0.00 W1 H +ATOM 16055 H2 TIP3X4522 11.436 11.626 25.219 1.00 0.00 W1 H +ATOM 16056 OH2 TIP3X4523 14.784 15.350 21.927 1.00 0.00 W1 O +ATOM 16057 H1 TIP3X4523 14.778 14.882 22.762 1.00 0.00 W1 H +ATOM 16058 H2 TIP3X4523 13.903 15.221 21.574 1.00 0.00 W1 H +ATOM 16059 OH2 TIP3X4524 6.656 11.686 22.949 1.00 0.00 W1 O +ATOM 16060 H1 TIP3X4524 6.084 10.967 23.218 1.00 0.00 W1 H +ATOM 16061 H2 TIP3X4524 6.195 12.476 23.232 1.00 0.00 W1 H +ATOM 16062 OH2 TIP3X4525 8.877 2.138 27.520 1.00 0.00 W1 O +ATOM 16063 H1 TIP3X4525 8.135 2.617 27.887 1.00 0.00 W1 H +ATOM 16064 H2 TIP3X4525 8.497 1.326 27.185 1.00 0.00 W1 H +ATOM 16065 OH2 TIP3X4526 4.229 2.843 17.321 1.00 0.00 W1 O +ATOM 16066 H1 TIP3X4526 4.131 2.181 18.006 1.00 0.00 W1 H +ATOM 16067 H2 TIP3X4526 4.046 2.374 16.507 1.00 0.00 W1 H +ATOM 16068 OH2 TIP3X4527 15.123 3.764 25.511 1.00 0.00 W1 O +ATOM 16069 H1 TIP3X4527 15.642 4.433 25.063 1.00 0.00 W1 H +ATOM 16070 H2 TIP3X4527 15.565 3.640 26.351 1.00 0.00 W1 H +ATOM 16071 OH2 TIP3X4528 1.181 0.117 19.671 1.00 0.00 W1 O +ATOM 16072 H1 TIP3X4528 1.906 0.738 19.740 1.00 0.00 W1 H +ATOM 16073 H2 TIP3X4528 0.808 0.084 20.552 1.00 0.00 W1 H +ATOM 16074 OH2 TIP3X4529 6.447 6.353 29.657 1.00 0.00 W1 O +ATOM 16075 H1 TIP3X4529 7.311 6.751 29.556 1.00 0.00 W1 H +ATOM 16076 H2 TIP3X4529 6.599 5.416 29.534 1.00 0.00 W1 H +ATOM 16077 OH2 TIP3X4530 9.613 11.263 22.397 1.00 0.00 W1 O +ATOM 16078 H1 TIP3X4530 9.707 10.400 21.993 1.00 0.00 W1 H +ATOM 16079 H2 TIP3X4530 8.680 11.463 22.321 1.00 0.00 W1 H +ATOM 16080 OH2 TIP3X4531 8.225 9.547 19.928 1.00 0.00 W1 O +ATOM 16081 H1 TIP3X4531 7.660 8.933 20.397 1.00 0.00 W1 H +ATOM 16082 H2 TIP3X4531 7.751 10.378 19.956 1.00 0.00 W1 H +ATOM 16083 OH2 TIP3X4532 0.762 10.060 26.385 1.00 0.00 W1 O +ATOM 16084 H1 TIP3X4532 0.228 9.458 25.867 1.00 0.00 W1 H +ATOM 16085 H2 TIP3X4532 0.292 10.146 27.214 1.00 0.00 W1 H +ATOM 16086 OH2 TIP3X4533 12.059 9.081 20.752 1.00 0.00 W1 O +ATOM 16087 H1 TIP3X4533 12.003 8.166 20.476 1.00 0.00 W1 H +ATOM 16088 H2 TIP3X4533 11.886 9.583 19.956 1.00 0.00 W1 H +ATOM 16089 OH2 TIP3X4534 12.356 9.595 27.777 1.00 0.00 W1 O +ATOM 16090 H1 TIP3X4534 11.453 9.678 28.084 1.00 0.00 W1 H +ATOM 16091 H2 TIP3X4534 12.524 8.653 27.780 1.00 0.00 W1 H +ATOM 16092 OH2 TIP3X4535 14.722 7.554 25.582 1.00 0.00 W1 O +ATOM 16093 H1 TIP3X4535 15.385 6.873 25.463 1.00 0.00 W1 H +ATOM 16094 H2 TIP3X4535 14.006 7.115 26.041 1.00 0.00 W1 H +ATOM 16095 OH2 TIP3X4536 3.867 7.241 30.727 1.00 0.00 W1 O +ATOM 16096 H1 TIP3X4536 3.338 7.007 29.964 1.00 0.00 W1 H +ATOM 16097 H2 TIP3X4536 4.762 7.289 30.392 1.00 0.00 W1 H +ATOM 16098 OH2 TIP3X4537 4.777 10.447 26.288 1.00 0.00 W1 O +ATOM 16099 H1 TIP3X4537 4.732 9.892 27.067 1.00 0.00 W1 H +ATOM 16100 H2 TIP3X4537 4.144 11.145 26.454 1.00 0.00 W1 H +ATOM 16101 OH2 TIP3X4538 13.449 11.577 26.038 1.00 0.00 W1 O +ATOM 16102 H1 TIP3X4538 13.872 12.345 26.422 1.00 0.00 W1 H +ATOM 16103 H2 TIP3X4538 13.145 11.069 26.790 1.00 0.00 W1 H +ATOM 16104 OH2 TIP3X4539 11.536 13.553 27.863 1.00 0.00 W1 O +ATOM 16105 H1 TIP3X4539 10.829 12.924 27.720 1.00 0.00 W1 H +ATOM 16106 H2 TIP3X4539 11.865 13.747 26.985 1.00 0.00 W1 H +ATOM 16107 OH2 TIP3X4540 11.787 12.089 30.259 1.00 0.00 W1 O +ATOM 16108 H1 TIP3X4540 11.154 11.482 29.875 1.00 0.00 W1 H +ATOM 16109 H2 TIP3X4540 11.901 12.769 29.595 1.00 0.00 W1 H +ATOM 16110 OH2 TIP3X4541 15.398 13.997 24.326 1.00 0.00 W1 O +ATOM 16111 H1 TIP3X4541 16.075 13.838 24.982 1.00 0.00 W1 H +ATOM 16112 H2 TIP3X4541 15.163 13.126 24.007 1.00 0.00 W1 H +ATOM 16113 OH2 TIP3X4542 5.954 0.468 22.718 1.00 0.00 W1 O +ATOM 16114 H1 TIP3X4542 5.662 1.378 22.657 1.00 0.00 W1 H +ATOM 16115 H2 TIP3X4542 6.786 0.451 22.245 1.00 0.00 W1 H +ATOM 16116 OH2 TIP3X4543 8.078 10.415 16.373 1.00 0.00 W1 O +ATOM 16117 H1 TIP3X4543 7.383 9.793 16.587 1.00 0.00 W1 H +ATOM 16118 H2 TIP3X4543 8.060 11.051 17.088 1.00 0.00 W1 H +ATOM 16119 OH2 TIP3X4544 15.458 9.178 15.809 1.00 0.00 W1 O +ATOM 16120 H1 TIP3X4544 15.195 8.428 15.275 1.00 0.00 W1 H +ATOM 16121 H2 TIP3X4544 15.204 9.942 15.292 1.00 0.00 W1 H +ATOM 16122 OH2 TIP3X4545 1.406 12.875 15.526 1.00 0.00 W1 O +ATOM 16123 H1 TIP3X4545 1.852 12.326 16.172 1.00 0.00 W1 H +ATOM 16124 H2 TIP3X4545 0.510 12.541 15.505 1.00 0.00 W1 H +ATOM 16125 OH2 TIP3X4546 13.500 15.004 16.785 1.00 0.00 W1 O +ATOM 16126 H1 TIP3X4546 14.385 14.676 16.626 1.00 0.00 W1 H +ATOM 16127 H2 TIP3X4546 13.270 15.472 15.982 1.00 0.00 W1 H +ATOM 16128 OH2 TIP3X4547 14.892 10.666 28.862 1.00 0.00 W1 O +ATOM 16129 H1 TIP3X4547 14.782 11.615 28.921 1.00 0.00 W1 H +ATOM 16130 H2 TIP3X4547 13.999 10.321 28.852 1.00 0.00 W1 H +ATOM 16131 OH2 TIP3X4548 1.578 13.492 18.481 1.00 0.00 W1 O +ATOM 16132 H1 TIP3X4548 1.510 14.328 18.941 1.00 0.00 W1 H +ATOM 16133 H2 TIP3X4548 0.683 13.153 18.464 1.00 0.00 W1 H +ATOM 16134 OH2 TIP3X4549 14.158 11.985 16.125 1.00 0.00 W1 O +ATOM 16135 H1 TIP3X4549 14.190 11.905 17.079 1.00 0.00 W1 H +ATOM 16136 H2 TIP3X4549 13.325 12.422 15.948 1.00 0.00 W1 H +ATOM 16137 OH2 TIP3X4550 10.529 0.279 29.009 1.00 0.00 W1 O +ATOM 16138 H1 TIP3X4550 10.222 1.028 28.497 1.00 0.00 W1 H +ATOM 16139 H2 TIP3X4550 10.583 -0.438 28.377 1.00 0.00 W1 H +ATOM 16140 OH2 TIP3X4551 4.743 14.196 27.038 1.00 0.00 W1 O +ATOM 16141 H1 TIP3X4551 5.591 14.434 27.412 1.00 0.00 W1 H +ATOM 16142 H2 TIP3X4551 4.954 13.816 26.185 1.00 0.00 W1 H +ATOM 16143 OH2 TIP3X4552 3.209 2.214 30.389 1.00 0.00 W1 O +ATOM 16144 H1 TIP3X4552 2.332 2.304 30.763 1.00 0.00 W1 H +ATOM 16145 H2 TIP3X4552 3.272 2.927 29.752 1.00 0.00 W1 H +ATOM 16146 OH2 TIP3X4553 9.406 4.161 16.119 1.00 0.00 W1 O +ATOM 16147 H1 TIP3X4553 9.240 4.458 15.224 1.00 0.00 W1 H +ATOM 16148 H2 TIP3X4553 8.535 4.038 16.496 1.00 0.00 W1 H +ATOM 16149 OH2 TIP3X4554 14.804 11.922 19.167 1.00 0.00 W1 O +ATOM 16150 H1 TIP3X4554 15.377 11.185 19.380 1.00 0.00 W1 H +ATOM 16151 H2 TIP3X4554 14.473 12.221 20.014 1.00 0.00 W1 H +ATOM 16152 OH2 TIP3X4555 10.065 0.958 16.096 1.00 0.00 W1 O +ATOM 16153 H1 TIP3X4555 10.797 1.574 16.121 1.00 0.00 W1 H +ATOM 16154 H2 TIP3X4555 10.306 0.325 15.420 1.00 0.00 W1 H +ATOM 16155 OH2 TIP3X4556 14.597 1.051 26.361 1.00 0.00 W1 O +ATOM 16156 H1 TIP3X4556 15.089 0.422 26.889 1.00 0.00 W1 H +ATOM 16157 H2 TIP3X4556 15.197 1.294 25.656 1.00 0.00 W1 H +ATOM 16158 OH2 TIP3X4557 2.104 10.272 22.439 1.00 0.00 W1 O +ATOM 16159 H1 TIP3X4557 1.436 10.595 23.044 1.00 0.00 W1 H +ATOM 16160 H2 TIP3X4557 2.896 10.202 22.971 1.00 0.00 W1 H +ATOM 16161 OH2 TIP3X4558 7.101 11.691 29.549 1.00 0.00 W1 O +ATOM 16162 H1 TIP3X4558 7.324 11.313 30.400 1.00 0.00 W1 H +ATOM 16163 H2 TIP3X4558 6.494 11.062 29.159 1.00 0.00 W1 H +ATOM 16164 OH2 TIP3X4559 10.580 2.995 24.962 1.00 0.00 W1 O +ATOM 16165 H1 TIP3X4559 10.639 2.814 25.900 1.00 0.00 W1 H +ATOM 16166 H2 TIP3X4559 9.642 3.083 24.794 1.00 0.00 W1 H +ATOM 16167 OH2 TIP3X4560 6.772 3.652 29.141 1.00 0.00 W1 O +ATOM 16168 H1 TIP3X4560 5.905 3.582 28.741 1.00 0.00 W1 H +ATOM 16169 H2 TIP3X4560 6.717 3.112 29.929 1.00 0.00 W1 H +ATOM 16170 OH2 TIP3X4561 14.258 6.373 30.894 1.00 0.00 W1 O +ATOM 16171 H1 TIP3X4561 15.052 5.839 30.878 1.00 0.00 W1 H +ATOM 16172 H2 TIP3X4561 13.964 6.338 31.804 1.00 0.00 W1 H +ATOM 16173 OH2 TIP3X4562 2.443 0.239 26.813 1.00 0.00 W1 O +ATOM 16174 H1 TIP3X4562 2.217 0.693 26.000 1.00 0.00 W1 H +ATOM 16175 H2 TIP3X4562 3.273 -0.197 26.621 1.00 0.00 W1 H +ATOM 16176 OH2 TIP3X4563 8.538 0.697 21.894 1.00 0.00 W1 O +ATOM 16177 H1 TIP3X4563 9.020 1.211 21.247 1.00 0.00 W1 H +ATOM 16178 H2 TIP3X4563 8.882 0.991 22.738 1.00 0.00 W1 H +ATOM 16179 OH2 TIP3X4564 3.008 5.289 17.047 1.00 0.00 W1 O +ATOM 16180 H1 TIP3X4564 3.430 5.935 16.481 1.00 0.00 W1 H +ATOM 16181 H2 TIP3X4564 3.720 4.714 17.328 1.00 0.00 W1 H +ATOM 16182 OH2 TIP3X4565 3.532 5.945 26.358 1.00 0.00 W1 O +ATOM 16183 H1 TIP3X4565 3.448 6.737 26.890 1.00 0.00 W1 H +ATOM 16184 H2 TIP3X4565 4.447 5.941 26.078 1.00 0.00 W1 H +ATOM 16185 OH2 TIP3X4566 2.715 6.664 19.544 1.00 0.00 W1 O +ATOM 16186 H1 TIP3X4566 2.778 6.375 18.633 1.00 0.00 W1 H +ATOM 16187 H2 TIP3X4566 3.490 7.209 19.677 1.00 0.00 W1 H +ATOM 16188 OH2 TIP3X4567 11.735 3.233 17.304 1.00 0.00 W1 O +ATOM 16189 H1 TIP3X4567 11.028 3.722 16.884 1.00 0.00 W1 H +ATOM 16190 H2 TIP3X4567 12.460 3.277 16.680 1.00 0.00 W1 H +ATOM 16191 OH2 TIP3X4568 0.286 4.120 28.392 1.00 0.00 W1 O +ATOM 16192 H1 TIP3X4568 -0.619 4.414 28.503 1.00 0.00 W1 H +ATOM 16193 H2 TIP3X4568 0.426 3.501 29.108 1.00 0.00 W1 H +ATOM 16194 OH2 TIP3X4569 1.429 0.957 24.374 1.00 0.00 W1 O +ATOM 16195 H1 TIP3X4569 1.536 0.256 23.732 1.00 0.00 W1 H +ATOM 16196 H2 TIP3X4569 1.564 1.763 23.875 1.00 0.00 W1 H +ATOM 16197 OH2 TIP3X4570 12.951 4.585 29.262 1.00 0.00 W1 O +ATOM 16198 H1 TIP3X4570 13.262 5.164 29.958 1.00 0.00 W1 H +ATOM 16199 H2 TIP3X4570 12.007 4.521 29.407 1.00 0.00 W1 H +ATOM 16200 OH2 TIP3X4571 9.994 4.591 29.209 1.00 0.00 W1 O +ATOM 16201 H1 TIP3X4571 9.634 5.159 28.528 1.00 0.00 W1 H +ATOM 16202 H2 TIP3X4571 9.656 3.721 28.998 1.00 0.00 W1 H +ATOM 16203 OH2 TIP3X4572 8.197 5.060 19.074 1.00 0.00 W1 O +ATOM 16204 H1 TIP3X4572 8.286 5.640 18.318 1.00 0.00 W1 H +ATOM 16205 H2 TIP3X4572 7.427 4.526 18.878 1.00 0.00 W1 H +ATOM 16206 OH2 TIP3X4573 6.500 4.392 16.762 1.00 0.00 W1 O +ATOM 16207 H1 TIP3X4573 6.062 4.584 15.932 1.00 0.00 W1 H +ATOM 16208 H2 TIP3X4573 6.093 3.581 17.065 1.00 0.00 W1 H +ATOM 16209 OH2 TIP3X4574 7.210 1.454 30.551 1.00 0.00 W1 O +ATOM 16210 H1 TIP3X4574 6.744 1.066 31.291 1.00 0.00 W1 H +ATOM 16211 H2 TIP3X4574 8.124 1.486 30.833 1.00 0.00 W1 H +ATOM 16212 OH2 TIP3X4575 12.773 6.798 27.232 1.00 0.00 W1 O +ATOM 16213 H1 TIP3X4575 12.793 6.149 27.935 1.00 0.00 W1 H +ATOM 16214 H2 TIP3X4575 11.939 6.647 26.788 1.00 0.00 W1 H +ATOM 16215 OH2 TIP3X4576 0.767 15.392 16.189 1.00 0.00 W1 O +ATOM 16216 H1 TIP3X4576 1.183 14.645 16.618 1.00 0.00 W1 H +ATOM 16217 H2 TIP3X4576 0.780 16.086 16.848 1.00 0.00 W1 H +ATOM 16218 OH2 TIP3X4577 9.515 3.552 21.182 1.00 0.00 W1 O +ATOM 16219 H1 TIP3X4577 9.178 3.903 20.357 1.00 0.00 W1 H +ATOM 16220 H2 TIP3X4577 10.411 3.285 20.980 1.00 0.00 W1 H +ATOM 16221 OH2 TIP3X4578 4.970 2.863 22.926 1.00 0.00 W1 O +ATOM 16222 H1 TIP3X4578 4.028 2.815 22.767 1.00 0.00 W1 H +ATOM 16223 H2 TIP3X4578 5.109 3.737 23.289 1.00 0.00 W1 H +ATOM 16224 OH2 TIP3X4579 0.332 3.989 19.719 1.00 0.00 W1 O +ATOM 16225 H1 TIP3X4579 0.058 3.864 20.628 1.00 0.00 W1 H +ATOM 16226 H2 TIP3X4579 0.138 4.907 19.533 1.00 0.00 W1 H +ATOM 16227 OH2 TIP3X4580 4.333 3.316 27.779 1.00 0.00 W1 O +ATOM 16228 H1 TIP3X4580 4.355 2.510 27.264 1.00 0.00 W1 H +ATOM 16229 H2 TIP3X4580 3.939 3.964 27.195 1.00 0.00 W1 H +ATOM 16230 OH2 TIP3X4581 4.916 9.851 23.584 1.00 0.00 W1 O +ATOM 16231 H1 TIP3X4581 4.844 8.916 23.397 1.00 0.00 W1 H +ATOM 16232 H2 TIP3X4581 4.920 9.905 24.540 1.00 0.00 W1 H +ATOM 16233 OH2 TIP3X4582 9.105 6.870 28.147 1.00 0.00 W1 O +ATOM 16234 H1 TIP3X4582 9.517 7.701 28.383 1.00 0.00 W1 H +ATOM 16235 H2 TIP3X4582 8.555 7.081 27.392 1.00 0.00 W1 H +ATOM 16236 OH2 TIP3X4583 14.900 2.237 17.471 1.00 0.00 W1 O +ATOM 16237 H1 TIP3X4583 15.335 2.464 18.293 1.00 0.00 W1 H +ATOM 16238 H2 TIP3X4583 14.380 1.461 17.681 1.00 0.00 W1 H +ATOM 16239 OH2 TIP3X4584 6.055 8.197 16.649 1.00 0.00 W1 O +ATOM 16240 H1 TIP3X4584 5.766 8.075 17.554 1.00 0.00 W1 H +ATOM 16241 H2 TIP3X4584 6.744 7.543 16.528 1.00 0.00 W1 H +ATOM 16242 OH2 TIP3X4585 12.758 6.713 17.717 1.00 0.00 W1 O +ATOM 16243 H1 TIP3X4585 11.893 6.514 18.076 1.00 0.00 W1 H +ATOM 16244 H2 TIP3X4585 13.315 6.834 18.486 1.00 0.00 W1 H +ATOM 16245 OH2 TIP3X4586 7.591 6.967 24.188 1.00 0.00 W1 O +ATOM 16246 H1 TIP3X4586 7.688 7.764 24.709 1.00 0.00 W1 H +ATOM 16247 H2 TIP3X4586 8.466 6.577 24.179 1.00 0.00 W1 H +ATOM 16248 OH2 TIP3X4587 7.336 7.348 21.104 1.00 0.00 W1 O +ATOM 16249 H1 TIP3X4587 7.958 6.752 20.686 1.00 0.00 W1 H +ATOM 16250 H2 TIP3X4587 7.362 7.111 22.030 1.00 0.00 W1 H +ATOM 16251 OH2 TIP3X4588 10.231 8.964 30.039 1.00 0.00 W1 O +ATOM 16252 H1 TIP3X4588 9.553 9.248 30.653 1.00 0.00 W1 H +ATOM 16253 H2 TIP3X4588 11.029 8.923 30.566 1.00 0.00 W1 H +ATOM 16254 OH2 TIP3X4589 2.741 8.379 27.736 1.00 0.00 W1 O +ATOM 16255 H1 TIP3X4589 3.258 8.785 28.432 1.00 0.00 W1 H +ATOM 16256 H2 TIP3X4589 2.358 9.117 27.260 1.00 0.00 W1 H +ATOM 16257 OH2 TIP3X4590 1.647 6.342 29.357 1.00 0.00 W1 O +ATOM 16258 H1 TIP3X4590 1.443 5.502 28.945 1.00 0.00 W1 H +ATOM 16259 H2 TIP3X4590 1.524 6.987 28.662 1.00 0.00 W1 H +ATOM 16260 OH2 TIP3X4591 1.540 7.215 22.181 1.00 0.00 W1 O +ATOM 16261 H1 TIP3X4591 1.896 8.087 22.011 1.00 0.00 W1 H +ATOM 16262 H2 TIP3X4591 1.438 6.824 21.313 1.00 0.00 W1 H +ATOM 16263 OH2 TIP3X4592 12.299 9.480 16.367 1.00 0.00 W1 O +ATOM 16264 H1 TIP3X4592 13.004 9.978 15.955 1.00 0.00 W1 H +ATOM 16265 H2 TIP3X4592 12.748 8.849 16.931 1.00 0.00 W1 H +ATOM 16266 OH2 TIP3X4593 14.895 6.827 19.730 1.00 0.00 W1 O +ATOM 16267 H1 TIP3X4593 14.608 7.000 20.626 1.00 0.00 W1 H +ATOM 16268 H2 TIP3X4593 15.408 7.598 19.489 1.00 0.00 W1 H +ATOM 16269 OH2 TIP3X4594 1.393 5.944 24.452 1.00 0.00 W1 O +ATOM 16270 H1 TIP3X4594 1.487 6.622 23.783 1.00 0.00 W1 H +ATOM 16271 H2 TIP3X4594 2.051 6.163 25.111 1.00 0.00 W1 H +ATOM 16272 OH2 TIP3X4595 4.180 14.451 17.715 1.00 0.00 W1 O +ATOM 16273 H1 TIP3X4595 3.951 14.811 16.859 1.00 0.00 W1 H +ATOM 16274 H2 TIP3X4595 3.767 13.587 17.731 1.00 0.00 W1 H +ATOM 16275 OH2 TIP3X4596 2.955 9.684 16.214 1.00 0.00 W1 O +ATOM 16276 H1 TIP3X4596 2.139 9.394 15.805 1.00 0.00 W1 H +ATOM 16277 H2 TIP3X4596 3.487 8.890 16.275 1.00 0.00 W1 H +ATOM 16278 OH2 TIP3X4597 4.373 10.523 29.288 1.00 0.00 W1 O +ATOM 16279 H1 TIP3X4597 3.800 11.125 28.814 1.00 0.00 W1 H +ATOM 16280 H2 TIP3X4597 3.899 10.327 30.096 1.00 0.00 W1 H +ATOM 16281 OH2 TIP3X4598 7.449 15.266 26.979 1.00 0.00 W1 O +ATOM 16282 H1 TIP3X4598 7.766 14.972 27.833 1.00 0.00 W1 H +ATOM 16283 H2 TIP3X4598 7.882 14.689 26.350 1.00 0.00 W1 H +ATOM 16284 OH2 TIP3X4599 12.155 15.508 21.113 1.00 0.00 W1 O +ATOM 16285 H1 TIP3X4599 11.742 14.817 20.594 1.00 0.00 W1 H +ATOM 16286 H2 TIP3X4599 11.959 16.315 20.636 1.00 0.00 W1 H +ATOM 16287 OH2 TIP3X4600 8.733 12.190 18.365 1.00 0.00 W1 O +ATOM 16288 H1 TIP3X4600 8.992 12.976 17.883 1.00 0.00 W1 H +ATOM 16289 H2 TIP3X4600 8.163 12.514 19.063 1.00 0.00 W1 H +ATOM 16290 OH2 TIP3X4601 8.750 7.345 17.436 1.00 0.00 W1 O +ATOM 16291 H1 TIP3X4601 9.573 7.418 16.953 1.00 0.00 W1 H +ATOM 16292 H2 TIP3X4601 8.757 8.089 18.038 1.00 0.00 W1 H +ATOM 16293 OH2 TIP3X4602 12.151 2.068 27.227 1.00 0.00 W1 O +ATOM 16294 H1 TIP3X4602 12.956 1.838 26.763 1.00 0.00 W1 H +ATOM 16295 H2 TIP3X4602 12.442 2.621 27.952 1.00 0.00 W1 H +ATOM 16296 OH2 TIP3X4603 0.116 9.170 18.633 1.00 0.00 W1 O +ATOM 16297 H1 TIP3X4603 -0.037 9.262 17.693 1.00 0.00 W1 H +ATOM 16298 H2 TIP3X4603 1.070 9.170 18.722 1.00 0.00 W1 H +ATOM 16299 OH2 TIP3X4604 10.878 8.758 25.229 1.00 0.00 W1 O +ATOM 16300 H1 TIP3X4604 11.424 9.419 25.655 1.00 0.00 W1 H +ATOM 16301 H2 TIP3X4604 11.337 8.557 24.414 1.00 0.00 W1 H +ATOM 16302 OH2 TIP3X4605 9.700 13.731 16.307 1.00 0.00 W1 O +ATOM 16303 H1 TIP3X4605 10.525 13.766 16.791 1.00 0.00 W1 H +ATOM 16304 H2 TIP3X4605 9.904 13.219 15.524 1.00 0.00 W1 H +ATOM 16305 OH2 TIP3X4606 9.693 11.519 27.958 1.00 0.00 W1 O +ATOM 16306 H1 TIP3X4606 8.872 11.766 28.384 1.00 0.00 W1 H +ATOM 16307 H2 TIP3X4606 9.463 11.423 27.033 1.00 0.00 W1 H +ATOM 16308 OH2 TIP3X4607 6.318 11.744 19.844 1.00 0.00 W1 O +ATOM 16309 H1 TIP3X4607 5.611 11.891 19.216 1.00 0.00 W1 H +ATOM 16310 H2 TIP3X4607 5.981 12.088 20.671 1.00 0.00 W1 H +ATOM 16311 OH2 TIP3X4608 2.883 12.656 28.555 1.00 0.00 W1 O +ATOM 16312 H1 TIP3X4608 3.617 13.267 28.491 1.00 0.00 W1 H +ATOM 16313 H2 TIP3X4608 2.571 12.750 29.455 1.00 0.00 W1 H +ATOM 16314 OH2 TIP3X4609 2.473 14.360 22.657 1.00 0.00 W1 O +ATOM 16315 H1 TIP3X4609 1.887 13.619 22.503 1.00 0.00 W1 H +ATOM 16316 H2 TIP3X4609 2.916 14.494 21.819 1.00 0.00 W1 H +ATOM 16317 OH2 TIP3X4610 10.826 0.374 23.738 1.00 0.00 W1 O +ATOM 16318 H1 TIP3X4610 11.158 0.298 22.843 1.00 0.00 W1 H +ATOM 16319 H2 TIP3X4610 10.781 1.316 23.899 1.00 0.00 W1 H +ATOM 16320 OH2 TIP3X4611 8.064 2.502 23.972 1.00 0.00 W1 O +ATOM 16321 H1 TIP3X4611 7.702 2.991 23.233 1.00 0.00 W1 H +ATOM 16322 H2 TIP3X4611 7.332 2.413 24.582 1.00 0.00 W1 H +ATOM 16323 OH2 TIP3X4612 6.783 0.487 17.900 1.00 0.00 W1 O +ATOM 16324 H1 TIP3X4612 7.639 0.232 18.245 1.00 0.00 W1 H +ATOM 16325 H2 TIP3X4612 6.265 -0.317 17.925 1.00 0.00 W1 H +ATOM 16326 OH2 TIP3X4613 9.535 0.331 18.944 1.00 0.00 W1 O +ATOM 16327 H1 TIP3X4613 9.990 -0.405 19.352 1.00 0.00 W1 H +ATOM 16328 H2 TIP3X4613 9.942 0.417 18.082 1.00 0.00 W1 H +ATOM 16329 OH2 TIP3X4614 4.174 14.909 30.398 1.00 0.00 W1 O +ATOM 16330 H1 TIP3X4614 3.924 15.666 29.869 1.00 0.00 W1 H +ATOM 16331 H2 TIP3X4614 5.085 14.740 30.159 1.00 0.00 W1 H +ATOM 16332 OH2 TIP3X4615 9.181 13.604 20.699 1.00 0.00 W1 O +ATOM 16333 H1 TIP3X4615 9.842 12.962 20.959 1.00 0.00 W1 H +ATOM 16334 H2 TIP3X4615 9.168 14.238 21.415 1.00 0.00 W1 H +ATOM 16335 OH2 TIP3X4616 6.920 14.506 29.608 1.00 0.00 W1 O +ATOM 16336 H1 TIP3X4616 7.138 13.614 29.879 1.00 0.00 W1 H +ATOM 16337 H2 TIP3X4616 7.528 15.060 30.098 1.00 0.00 W1 H +ATOM 16338 OH2 TIP3X4617 5.867 2.624 19.653 1.00 0.00 W1 O +ATOM 16339 H1 TIP3X4617 6.524 1.965 19.430 1.00 0.00 W1 H +ATOM 16340 H2 TIP3X4617 5.909 2.693 20.607 1.00 0.00 W1 H +ATOM 16341 OH2 TIP3X4618 0.580 0.963 29.109 1.00 0.00 W1 O +ATOM 16342 H1 TIP3X4618 1.328 0.767 28.545 1.00 0.00 W1 H +ATOM 16343 H2 TIP3X4618 0.788 0.537 29.940 1.00 0.00 W1 H +ATOM 16344 OH2 TIP3X4619 11.699 13.690 18.710 1.00 0.00 W1 O +ATOM 16345 H1 TIP3X4619 11.844 12.749 18.813 1.00 0.00 W1 H +ATOM 16346 H2 TIP3X4619 12.523 14.022 18.353 1.00 0.00 W1 H +ATOM 16347 OH2 TIP3X4620 13.367 0.456 29.937 1.00 0.00 W1 O +ATOM 16348 H1 TIP3X4620 12.753 0.530 29.207 1.00 0.00 W1 H +ATOM 16349 H2 TIP3X4620 14.137 0.951 29.656 1.00 0.00 W1 H +ATOM 16350 OH2 TIP3X4621 4.161 14.669 20.424 1.00 0.00 W1 O +ATOM 16351 H1 TIP3X4621 4.154 14.714 19.468 1.00 0.00 W1 H +ATOM 16352 H2 TIP3X4621 4.968 15.115 20.680 1.00 0.00 W1 H +ATOM 16353 OH2 TIP3X4622 15.070 13.608 28.373 1.00 0.00 W1 O +ATOM 16354 H1 TIP3X4622 14.347 14.159 28.674 1.00 0.00 W1 H +ATOM 16355 H2 TIP3X4622 15.858 14.107 28.587 1.00 0.00 W1 H +ATOM 16356 OH2 TIP3X4623 2.695 2.930 20.053 1.00 0.00 W1 O +ATOM 16357 H1 TIP3X4623 2.052 3.318 19.461 1.00 0.00 W1 H +ATOM 16358 H2 TIP3X4623 3.498 3.427 19.895 1.00 0.00 W1 H +ATOM 16359 OH2 TIP3X4624 4.124 11.529 17.785 1.00 0.00 W1 O +ATOM 16360 H1 TIP3X4624 4.085 10.901 17.063 1.00 0.00 W1 H +ATOM 16361 H2 TIP3X4624 3.405 11.275 18.363 1.00 0.00 W1 H +ATOM 16362 OH2 TIP3X4625 2.019 26.614 -26.806 1.00 0.00 W1 O +ATOM 16363 H1 TIP3X4625 2.201 26.538 -25.869 1.00 0.00 W1 H +ATOM 16364 H2 TIP3X4625 1.995 27.557 -26.970 1.00 0.00 W1 H +ATOM 16365 OH2 TIP3X4626 13.121 24.105 -23.068 1.00 0.00 W1 O +ATOM 16366 H1 TIP3X4626 13.356 24.370 -23.957 1.00 0.00 W1 H +ATOM 16367 H2 TIP3X4626 13.950 23.842 -22.669 1.00 0.00 W1 H +ATOM 16368 OH2 TIP3X4627 5.105 23.829 -27.089 1.00 0.00 W1 O +ATOM 16369 H1 TIP3X4627 5.136 24.738 -26.792 1.00 0.00 W1 H +ATOM 16370 H2 TIP3X4627 5.613 23.346 -26.437 1.00 0.00 W1 H +ATOM 16371 OH2 TIP3X4628 12.908 27.988 -24.946 1.00 0.00 W1 O +ATOM 16372 H1 TIP3X4628 12.634 28.478 -24.171 1.00 0.00 W1 H +ATOM 16373 H2 TIP3X4628 12.383 27.188 -24.922 1.00 0.00 W1 H +ATOM 16374 OH2 TIP3X4629 11.425 26.431 -27.903 1.00 0.00 W1 O +ATOM 16375 H1 TIP3X4629 11.587 26.203 -28.818 1.00 0.00 W1 H +ATOM 16376 H2 TIP3X4629 10.496 26.660 -27.873 1.00 0.00 W1 H +ATOM 16377 OH2 TIP3X4630 15.273 26.963 -23.118 1.00 0.00 W1 O +ATOM 16378 H1 TIP3X4630 14.721 27.046 -23.896 1.00 0.00 W1 H +ATOM 16379 H2 TIP3X4630 14.662 26.747 -22.413 1.00 0.00 W1 H +ATOM 16380 OH2 TIP3X4631 1.909 28.227 -20.667 1.00 0.00 W1 O +ATOM 16381 H1 TIP3X4631 2.315 28.431 -19.824 1.00 0.00 W1 H +ATOM 16382 H2 TIP3X4631 1.338 27.482 -20.484 1.00 0.00 W1 H +ATOM 16383 OH2 TIP3X4632 9.284 29.852 -21.441 1.00 0.00 W1 O +ATOM 16384 H1 TIP3X4632 9.585 28.952 -21.319 1.00 0.00 W1 H +ATOM 16385 H2 TIP3X4632 9.909 30.233 -22.058 1.00 0.00 W1 H +ATOM 16386 OH2 TIP3X4633 12.717 29.809 -21.561 1.00 0.00 W1 O +ATOM 16387 H1 TIP3X4633 12.281 30.632 -21.781 1.00 0.00 W1 H +ATOM 16388 H2 TIP3X4633 13.646 30.035 -21.512 1.00 0.00 W1 H +ATOM 16389 OH2 TIP3X4634 5.165 29.384 -22.432 1.00 0.00 W1 O +ATOM 16390 H1 TIP3X4634 5.520 30.233 -22.695 1.00 0.00 W1 H +ATOM 16391 H2 TIP3X4634 4.230 29.443 -22.628 1.00 0.00 W1 H +ATOM 16392 OH2 TIP3X4635 10.006 21.276 -23.530 1.00 0.00 W1 O +ATOM 16393 H1 TIP3X4635 9.929 20.466 -24.035 1.00 0.00 W1 H +ATOM 16394 H2 TIP3X4635 10.949 21.415 -23.443 1.00 0.00 W1 H +ATOM 16395 OH2 TIP3X4636 6.029 17.374 -21.168 1.00 0.00 W1 O +ATOM 16396 H1 TIP3X4636 6.287 16.636 -20.615 1.00 0.00 W1 H +ATOM 16397 H2 TIP3X4636 5.353 17.017 -21.744 1.00 0.00 W1 H +ATOM 16398 OH2 TIP3X4637 14.273 18.378 -24.745 1.00 0.00 W1 O +ATOM 16399 H1 TIP3X4637 13.965 18.716 -23.904 1.00 0.00 W1 H +ATOM 16400 H2 TIP3X4637 14.341 17.433 -24.614 1.00 0.00 W1 H +ATOM 16401 OH2 TIP3X4638 12.870 19.573 -22.791 1.00 0.00 W1 O +ATOM 16402 H1 TIP3X4638 13.446 19.345 -22.061 1.00 0.00 W1 H +ATOM 16403 H2 TIP3X4638 11.996 19.319 -22.496 1.00 0.00 W1 H +ATOM 16404 OH2 TIP3X4639 5.917 20.698 -21.420 1.00 0.00 W1 O +ATOM 16405 H1 TIP3X4639 6.420 19.996 -21.008 1.00 0.00 W1 H +ATOM 16406 H2 TIP3X4639 6.574 21.340 -21.687 1.00 0.00 W1 H +ATOM 16407 OH2 TIP3X4640 13.394 21.746 -24.523 1.00 0.00 W1 O +ATOM 16408 H1 TIP3X4640 13.435 20.847 -24.199 1.00 0.00 W1 H +ATOM 16409 H2 TIP3X4640 13.276 22.279 -23.736 1.00 0.00 W1 H +ATOM 16410 OH2 TIP3X4641 12.078 18.390 -26.654 1.00 0.00 W1 O +ATOM 16411 H1 TIP3X4641 12.903 18.574 -26.205 1.00 0.00 W1 H +ATOM 16412 H2 TIP3X4641 12.155 18.845 -27.493 1.00 0.00 W1 H +ATOM 16413 OH2 TIP3X4642 8.261 24.361 -20.583 1.00 0.00 W1 O +ATOM 16414 H1 TIP3X4642 9.138 24.383 -20.966 1.00 0.00 W1 H +ATOM 16415 H2 TIP3X4642 7.995 25.280 -20.537 1.00 0.00 W1 H +ATOM 16416 OH2 TIP3X4643 7.411 26.909 -20.773 1.00 0.00 W1 O +ATOM 16417 H1 TIP3X4643 7.387 27.136 -21.702 1.00 0.00 W1 H +ATOM 16418 H2 TIP3X4643 6.491 26.855 -20.514 1.00 0.00 W1 H +ATOM 16419 OH2 TIP3X4644 2.274 18.791 -23.935 1.00 0.00 W1 O +ATOM 16420 H1 TIP3X4644 1.949 19.670 -23.744 1.00 0.00 W1 H +ATOM 16421 H2 TIP3X4644 2.151 18.688 -24.878 1.00 0.00 W1 H +ATOM 16422 OH2 TIP3X4645 4.430 22.348 -23.922 1.00 0.00 W1 O +ATOM 16423 H1 TIP3X4645 3.747 21.898 -24.419 1.00 0.00 W1 H +ATOM 16424 H2 TIP3X4645 4.916 21.645 -23.490 1.00 0.00 W1 H +ATOM 16425 OH2 TIP3X4646 10.486 27.273 -21.526 1.00 0.00 W1 O +ATOM 16426 H1 TIP3X4646 10.244 26.686 -22.243 1.00 0.00 W1 H +ATOM 16427 H2 TIP3X4646 11.436 27.183 -21.453 1.00 0.00 W1 H +ATOM 16428 OH2 TIP3X4647 14.784 30.907 -24.745 1.00 0.00 W1 O +ATOM 16429 H1 TIP3X4647 14.778 30.439 -23.910 1.00 0.00 W1 H +ATOM 16430 H2 TIP3X4647 13.903 30.778 -25.098 1.00 0.00 W1 H +ATOM 16431 OH2 TIP3X4648 6.656 27.244 -23.723 1.00 0.00 W1 O +ATOM 16432 H1 TIP3X4648 6.084 26.524 -23.454 1.00 0.00 W1 H +ATOM 16433 H2 TIP3X4648 6.195 28.034 -23.441 1.00 0.00 W1 H +ATOM 16434 OH2 TIP3X4649 8.877 17.695 -19.153 1.00 0.00 W1 O +ATOM 16435 H1 TIP3X4649 8.135 18.175 -18.786 1.00 0.00 W1 H +ATOM 16436 H2 TIP3X4649 8.497 16.883 -19.487 1.00 0.00 W1 H +ATOM 16437 OH2 TIP3X4650 4.229 18.400 -29.351 1.00 0.00 W1 O +ATOM 16438 H1 TIP3X4650 4.131 17.738 -28.667 1.00 0.00 W1 H +ATOM 16439 H2 TIP3X4650 4.046 17.932 -30.166 1.00 0.00 W1 H +ATOM 16440 OH2 TIP3X4651 15.123 19.322 -21.162 1.00 0.00 W1 O +ATOM 16441 H1 TIP3X4651 15.642 19.991 -21.609 1.00 0.00 W1 H +ATOM 16442 H2 TIP3X4651 15.565 19.198 -20.322 1.00 0.00 W1 H +ATOM 16443 OH2 TIP3X4652 1.181 15.675 -27.002 1.00 0.00 W1 O +ATOM 16444 H1 TIP3X4652 1.906 16.296 -26.933 1.00 0.00 W1 H +ATOM 16445 H2 TIP3X4652 0.808 15.642 -26.120 1.00 0.00 W1 H +ATOM 16446 OH2 TIP3X4653 6.447 21.910 -17.015 1.00 0.00 W1 O +ATOM 16447 H1 TIP3X4653 7.311 22.309 -17.116 1.00 0.00 W1 H +ATOM 16448 H2 TIP3X4653 6.599 20.973 -17.138 1.00 0.00 W1 H +ATOM 16449 OH2 TIP3X4654 9.613 26.820 -24.276 1.00 0.00 W1 O +ATOM 16450 H1 TIP3X4654 9.707 25.957 -24.679 1.00 0.00 W1 H +ATOM 16451 H2 TIP3X4654 8.680 27.020 -24.352 1.00 0.00 W1 H +ATOM 16452 OH2 TIP3X4655 8.225 25.104 -26.745 1.00 0.00 W1 O +ATOM 16453 H1 TIP3X4655 7.660 24.490 -26.275 1.00 0.00 W1 H +ATOM 16454 H2 TIP3X4655 7.751 25.935 -26.716 1.00 0.00 W1 H +ATOM 16455 OH2 TIP3X4656 0.762 25.617 -20.288 1.00 0.00 W1 O +ATOM 16456 H1 TIP3X4656 0.228 25.016 -20.806 1.00 0.00 W1 H +ATOM 16457 H2 TIP3X4656 0.292 25.704 -19.459 1.00 0.00 W1 H +ATOM 16458 OH2 TIP3X4657 12.059 24.638 -25.920 1.00 0.00 W1 O +ATOM 16459 H1 TIP3X4657 12.003 23.723 -26.197 1.00 0.00 W1 H +ATOM 16460 H2 TIP3X4657 11.886 25.141 -26.716 1.00 0.00 W1 H +ATOM 16461 OH2 TIP3X4658 12.356 25.152 -18.896 1.00 0.00 W1 O +ATOM 16462 H1 TIP3X4658 11.453 25.236 -18.588 1.00 0.00 W1 H +ATOM 16463 H2 TIP3X4658 12.524 24.210 -18.892 1.00 0.00 W1 H +ATOM 16464 OH2 TIP3X4659 14.722 23.112 -21.090 1.00 0.00 W1 O +ATOM 16465 H1 TIP3X4659 15.385 22.431 -21.209 1.00 0.00 W1 H +ATOM 16466 H2 TIP3X4659 14.006 22.672 -20.631 1.00 0.00 W1 H +ATOM 16467 OH2 TIP3X4660 3.867 22.799 -15.946 1.00 0.00 W1 O +ATOM 16468 H1 TIP3X4660 3.338 22.565 -16.708 1.00 0.00 W1 H +ATOM 16469 H2 TIP3X4660 4.762 22.846 -16.280 1.00 0.00 W1 H +ATOM 16470 OH2 TIP3X4661 4.777 26.005 -20.384 1.00 0.00 W1 O +ATOM 16471 H1 TIP3X4661 4.732 25.450 -19.606 1.00 0.00 W1 H +ATOM 16472 H2 TIP3X4661 4.144 26.703 -20.218 1.00 0.00 W1 H +ATOM 16473 OH2 TIP3X4662 13.449 27.135 -20.635 1.00 0.00 W1 O +ATOM 16474 H1 TIP3X4662 13.872 27.903 -20.251 1.00 0.00 W1 H +ATOM 16475 H2 TIP3X4662 13.145 26.627 -19.882 1.00 0.00 W1 H +ATOM 16476 OH2 TIP3X4663 11.536 29.110 -18.810 1.00 0.00 W1 O +ATOM 16477 H1 TIP3X4663 10.829 28.481 -18.952 1.00 0.00 W1 H +ATOM 16478 H2 TIP3X4663 11.865 29.305 -19.687 1.00 0.00 W1 H +ATOM 16479 OH2 TIP3X4664 11.787 27.646 -16.413 1.00 0.00 W1 O +ATOM 16480 H1 TIP3X4664 11.154 27.040 -16.797 1.00 0.00 W1 H +ATOM 16481 H2 TIP3X4664 11.901 28.327 -17.077 1.00 0.00 W1 H +ATOM 16482 OH2 TIP3X4665 15.398 29.555 -22.347 1.00 0.00 W1 O +ATOM 16483 H1 TIP3X4665 16.075 29.396 -21.690 1.00 0.00 W1 H +ATOM 16484 H2 TIP3X4665 15.163 28.683 -22.666 1.00 0.00 W1 H +ATOM 16485 OH2 TIP3X4666 5.954 16.026 -23.954 1.00 0.00 W1 O +ATOM 16486 H1 TIP3X4666 5.662 16.935 -24.015 1.00 0.00 W1 H +ATOM 16487 H2 TIP3X4666 6.786 16.008 -24.427 1.00 0.00 W1 H +ATOM 16488 OH2 TIP3X4667 8.078 25.972 -30.300 1.00 0.00 W1 O +ATOM 16489 H1 TIP3X4667 7.383 25.350 -30.085 1.00 0.00 W1 H +ATOM 16490 H2 TIP3X4667 8.060 26.608 -29.585 1.00 0.00 W1 H +ATOM 16491 OH2 TIP3X4668 15.458 24.736 -30.863 1.00 0.00 W1 O +ATOM 16492 H1 TIP3X4668 15.195 23.986 -31.397 1.00 0.00 W1 H +ATOM 16493 H2 TIP3X4668 15.204 25.500 -31.381 1.00 0.00 W1 H +ATOM 16494 OH2 TIP3X4669 1.406 28.432 -31.146 1.00 0.00 W1 O +ATOM 16495 H1 TIP3X4669 1.852 27.883 -30.501 1.00 0.00 W1 H +ATOM 16496 H2 TIP3X4669 0.510 28.098 -31.167 1.00 0.00 W1 H +ATOM 16497 OH2 TIP3X4670 13.500 30.561 -29.888 1.00 0.00 W1 O +ATOM 16498 H1 TIP3X4670 14.385 30.233 -30.046 1.00 0.00 W1 H +ATOM 16499 H2 TIP3X4670 13.270 31.029 -30.690 1.00 0.00 W1 H +ATOM 16500 OH2 TIP3X4671 14.892 26.223 -17.810 1.00 0.00 W1 O +ATOM 16501 H1 TIP3X4671 14.782 27.172 -17.751 1.00 0.00 W1 H +ATOM 16502 H2 TIP3X4671 13.999 25.878 -17.820 1.00 0.00 W1 H +ATOM 16503 OH2 TIP3X4672 1.578 29.049 -28.191 1.00 0.00 W1 O +ATOM 16504 H1 TIP3X4672 1.510 29.885 -27.731 1.00 0.00 W1 H +ATOM 16505 H2 TIP3X4672 0.683 28.711 -28.208 1.00 0.00 W1 H +ATOM 16506 OH2 TIP3X4673 14.158 27.542 -30.547 1.00 0.00 W1 O +ATOM 16507 H1 TIP3X4673 14.190 27.462 -29.594 1.00 0.00 W1 H +ATOM 16508 H2 TIP3X4673 13.325 27.979 -30.724 1.00 0.00 W1 H +ATOM 16509 OH2 TIP3X4674 10.529 15.837 -17.663 1.00 0.00 W1 O +ATOM 16510 H1 TIP3X4674 10.222 16.585 -18.176 1.00 0.00 W1 H +ATOM 16511 H2 TIP3X4674 10.583 15.120 -18.295 1.00 0.00 W1 H +ATOM 16512 OH2 TIP3X4675 4.743 29.753 -19.634 1.00 0.00 W1 O +ATOM 16513 H1 TIP3X4675 5.591 29.991 -19.260 1.00 0.00 W1 H +ATOM 16514 H2 TIP3X4675 4.954 29.373 -20.487 1.00 0.00 W1 H +ATOM 16515 OH2 TIP3X4676 3.209 17.772 -16.284 1.00 0.00 W1 O +ATOM 16516 H1 TIP3X4676 2.332 17.861 -15.910 1.00 0.00 W1 H +ATOM 16517 H2 TIP3X4676 3.272 18.484 -16.920 1.00 0.00 W1 H +ATOM 16518 OH2 TIP3X4677 9.406 19.719 -30.553 1.00 0.00 W1 O +ATOM 16519 H1 TIP3X4677 9.240 20.016 -31.448 1.00 0.00 W1 H +ATOM 16520 H2 TIP3X4677 8.535 19.595 -30.176 1.00 0.00 W1 H +ATOM 16521 OH2 TIP3X4678 14.804 27.479 -27.505 1.00 0.00 W1 O +ATOM 16522 H1 TIP3X4678 15.377 26.742 -27.292 1.00 0.00 W1 H +ATOM 16523 H2 TIP3X4678 14.473 27.778 -26.658 1.00 0.00 W1 H +ATOM 16524 OH2 TIP3X4679 10.065 16.515 -30.576 1.00 0.00 W1 O +ATOM 16525 H1 TIP3X4679 10.797 17.131 -30.552 1.00 0.00 W1 H +ATOM 16526 H2 TIP3X4679 10.306 15.883 -31.253 1.00 0.00 W1 H +ATOM 16527 OH2 TIP3X4680 14.597 16.609 -20.311 1.00 0.00 W1 O +ATOM 16528 H1 TIP3X4680 15.089 15.979 -19.784 1.00 0.00 W1 H +ATOM 16529 H2 TIP3X4680 15.197 16.851 -21.016 1.00 0.00 W1 H +ATOM 16530 OH2 TIP3X4681 2.104 25.829 -24.233 1.00 0.00 W1 O +ATOM 16531 H1 TIP3X4681 1.436 26.153 -23.629 1.00 0.00 W1 H +ATOM 16532 H2 TIP3X4681 2.896 25.760 -23.701 1.00 0.00 W1 H +ATOM 16533 OH2 TIP3X4682 7.101 27.248 -17.123 1.00 0.00 W1 O +ATOM 16534 H1 TIP3X4682 7.324 26.870 -16.272 1.00 0.00 W1 H +ATOM 16535 H2 TIP3X4682 6.494 26.619 -17.513 1.00 0.00 W1 H +ATOM 16536 OH2 TIP3X4683 10.580 18.553 -21.710 1.00 0.00 W1 O +ATOM 16537 H1 TIP3X4683 10.639 18.371 -20.772 1.00 0.00 W1 H +ATOM 16538 H2 TIP3X4683 9.642 18.640 -21.879 1.00 0.00 W1 H +ATOM 16539 OH2 TIP3X4684 6.772 19.210 -17.531 1.00 0.00 W1 O +ATOM 16540 H1 TIP3X4684 5.905 19.140 -17.931 1.00 0.00 W1 H +ATOM 16541 H2 TIP3X4684 6.717 18.669 -16.743 1.00 0.00 W1 H +ATOM 16542 OH2 TIP3X4685 14.258 21.930 -15.778 1.00 0.00 W1 O +ATOM 16543 H1 TIP3X4685 15.052 21.397 -15.795 1.00 0.00 W1 H +ATOM 16544 H2 TIP3X4685 13.964 21.895 -14.868 1.00 0.00 W1 H +ATOM 16545 OH2 TIP3X4686 2.443 15.797 -19.860 1.00 0.00 W1 O +ATOM 16546 H1 TIP3X4686 2.217 16.250 -20.672 1.00 0.00 W1 H +ATOM 16547 H2 TIP3X4686 3.273 15.360 -20.051 1.00 0.00 W1 H +ATOM 16548 OH2 TIP3X4687 8.538 16.255 -24.778 1.00 0.00 W1 O +ATOM 16549 H1 TIP3X4687 9.020 16.769 -25.426 1.00 0.00 W1 H +ATOM 16550 H2 TIP3X4687 8.882 16.548 -23.934 1.00 0.00 W1 H +ATOM 16551 OH2 TIP3X4688 3.008 20.846 -29.625 1.00 0.00 W1 O +ATOM 16552 H1 TIP3X4688 3.430 21.492 -30.191 1.00 0.00 W1 H +ATOM 16553 H2 TIP3X4688 3.720 20.271 -29.344 1.00 0.00 W1 H +ATOM 16554 OH2 TIP3X4689 3.532 21.503 -20.314 1.00 0.00 W1 O +ATOM 16555 H1 TIP3X4689 3.448 22.294 -19.782 1.00 0.00 W1 H +ATOM 16556 H2 TIP3X4689 4.447 21.499 -20.595 1.00 0.00 W1 H +ATOM 16557 OH2 TIP3X4690 2.715 22.221 -27.129 1.00 0.00 W1 O +ATOM 16558 H1 TIP3X4690 2.778 21.932 -28.039 1.00 0.00 W1 H +ATOM 16559 H2 TIP3X4690 3.490 22.766 -26.996 1.00 0.00 W1 H +ATOM 16560 OH2 TIP3X4691 11.735 18.791 -29.369 1.00 0.00 W1 O +ATOM 16561 H1 TIP3X4691 11.028 19.279 -29.789 1.00 0.00 W1 H +ATOM 16562 H2 TIP3X4691 12.460 18.835 -29.992 1.00 0.00 W1 H +ATOM 16563 OH2 TIP3X4692 0.286 19.677 -18.281 1.00 0.00 W1 O +ATOM 16564 H1 TIP3X4692 -0.619 19.971 -18.170 1.00 0.00 W1 H +ATOM 16565 H2 TIP3X4692 0.426 19.058 -17.564 1.00 0.00 W1 H +ATOM 16566 OH2 TIP3X4693 1.429 16.515 -22.298 1.00 0.00 W1 O +ATOM 16567 H1 TIP3X4693 1.536 15.813 -22.941 1.00 0.00 W1 H +ATOM 16568 H2 TIP3X4693 1.564 17.320 -22.797 1.00 0.00 W1 H +ATOM 16569 OH2 TIP3X4694 12.951 20.143 -17.411 1.00 0.00 W1 O +ATOM 16570 H1 TIP3X4694 13.262 20.721 -16.715 1.00 0.00 W1 H +ATOM 16571 H2 TIP3X4694 12.007 20.079 -17.265 1.00 0.00 W1 H +ATOM 16572 OH2 TIP3X4695 9.994 20.148 -17.464 1.00 0.00 W1 O +ATOM 16573 H1 TIP3X4695 9.634 20.717 -18.145 1.00 0.00 W1 H +ATOM 16574 H2 TIP3X4695 9.656 19.278 -17.675 1.00 0.00 W1 H +ATOM 16575 OH2 TIP3X4696 8.197 20.618 -27.598 1.00 0.00 W1 O +ATOM 16576 H1 TIP3X4696 8.286 21.197 -28.355 1.00 0.00 W1 H +ATOM 16577 H2 TIP3X4696 7.427 20.083 -27.795 1.00 0.00 W1 H +ATOM 16578 OH2 TIP3X4697 6.500 19.949 -29.911 1.00 0.00 W1 O +ATOM 16579 H1 TIP3X4697 6.062 20.142 -30.740 1.00 0.00 W1 H +ATOM 16580 H2 TIP3X4697 6.093 19.138 -29.607 1.00 0.00 W1 H +ATOM 16581 OH2 TIP3X4698 7.210 17.011 -16.122 1.00 0.00 W1 O +ATOM 16582 H1 TIP3X4698 6.744 16.624 -15.381 1.00 0.00 W1 H +ATOM 16583 H2 TIP3X4698 8.124 17.044 -15.839 1.00 0.00 W1 H +ATOM 16584 OH2 TIP3X4699 12.773 22.356 -19.440 1.00 0.00 W1 O +ATOM 16585 H1 TIP3X4699 12.793 21.706 -18.737 1.00 0.00 W1 H +ATOM 16586 H2 TIP3X4699 11.939 22.204 -19.884 1.00 0.00 W1 H +ATOM 16587 OH2 TIP3X4700 0.848 19.456 -30.971 1.00 0.00 W1 O +ATOM 16588 H1 TIP3X4700 0.092 19.264 -30.417 1.00 0.00 W1 H +ATOM 16589 H2 TIP3X4700 1.382 20.055 -30.448 1.00 0.00 W1 H +ATOM 16590 OH2 TIP3X4701 0.767 30.950 -30.484 1.00 0.00 W1 O +ATOM 16591 H1 TIP3X4701 1.183 30.202 -30.054 1.00 0.00 W1 H +ATOM 16592 H2 TIP3X4701 0.780 31.643 -29.824 1.00 0.00 W1 H +ATOM 16593 OH2 TIP3X4702 9.515 19.110 -25.491 1.00 0.00 W1 O +ATOM 16594 H1 TIP3X4702 9.178 19.460 -26.315 1.00 0.00 W1 H +ATOM 16595 H2 TIP3X4702 10.411 18.842 -25.692 1.00 0.00 W1 H +ATOM 16596 OH2 TIP3X4703 4.970 18.420 -23.747 1.00 0.00 W1 O +ATOM 16597 H1 TIP3X4703 4.028 18.373 -23.905 1.00 0.00 W1 H +ATOM 16598 H2 TIP3X4703 5.109 19.294 -23.383 1.00 0.00 W1 H +ATOM 16599 OH2 TIP3X4704 0.332 19.546 -26.953 1.00 0.00 W1 O +ATOM 16600 H1 TIP3X4704 0.058 19.422 -26.045 1.00 0.00 W1 H +ATOM 16601 H2 TIP3X4704 0.138 20.465 -27.139 1.00 0.00 W1 H +ATOM 16602 OH2 TIP3X4705 4.333 18.873 -18.893 1.00 0.00 W1 O +ATOM 16603 H1 TIP3X4705 4.355 18.067 -19.409 1.00 0.00 W1 H +ATOM 16604 H2 TIP3X4705 3.939 19.521 -19.477 1.00 0.00 W1 H +ATOM 16605 OH2 TIP3X4706 4.916 25.409 -23.088 1.00 0.00 W1 O +ATOM 16606 H1 TIP3X4706 4.844 24.473 -23.276 1.00 0.00 W1 H +ATOM 16607 H2 TIP3X4706 4.920 25.462 -22.132 1.00 0.00 W1 H +ATOM 16608 OH2 TIP3X4707 9.105 22.428 -18.526 1.00 0.00 W1 O +ATOM 16609 H1 TIP3X4707 9.517 23.259 -18.289 1.00 0.00 W1 H +ATOM 16610 H2 TIP3X4707 8.555 22.638 -19.280 1.00 0.00 W1 H +ATOM 16611 OH2 TIP3X4708 14.900 17.794 -29.201 1.00 0.00 W1 O +ATOM 16612 H1 TIP3X4708 15.335 18.021 -28.379 1.00 0.00 W1 H +ATOM 16613 H2 TIP3X4708 14.380 17.019 -28.992 1.00 0.00 W1 H +ATOM 16614 OH2 TIP3X4709 6.055 23.754 -30.023 1.00 0.00 W1 O +ATOM 16615 H1 TIP3X4709 5.766 23.632 -29.119 1.00 0.00 W1 H +ATOM 16616 H2 TIP3X4709 6.744 23.101 -30.144 1.00 0.00 W1 H +ATOM 16617 OH2 TIP3X4710 12.758 22.270 -28.955 1.00 0.00 W1 O +ATOM 16618 H1 TIP3X4710 11.893 22.071 -28.596 1.00 0.00 W1 H +ATOM 16619 H2 TIP3X4710 13.315 22.391 -28.186 1.00 0.00 W1 H +ATOM 16620 OH2 TIP3X4711 7.591 22.524 -22.485 1.00 0.00 W1 O +ATOM 16621 H1 TIP3X4711 7.688 23.321 -21.963 1.00 0.00 W1 H +ATOM 16622 H2 TIP3X4711 8.466 22.135 -22.493 1.00 0.00 W1 H +ATOM 16623 OH2 TIP3X4712 7.336 22.906 -25.569 1.00 0.00 W1 O +ATOM 16624 H1 TIP3X4712 7.958 22.310 -25.987 1.00 0.00 W1 H +ATOM 16625 H2 TIP3X4712 7.362 22.669 -24.642 1.00 0.00 W1 H +ATOM 16626 OH2 TIP3X4713 10.231 24.522 -16.633 1.00 0.00 W1 O +ATOM 16627 H1 TIP3X4713 9.553 24.806 -16.020 1.00 0.00 W1 H +ATOM 16628 H2 TIP3X4713 11.029 24.481 -16.106 1.00 0.00 W1 H +ATOM 16629 OH2 TIP3X4714 2.741 23.937 -18.937 1.00 0.00 W1 O +ATOM 16630 H1 TIP3X4714 3.258 24.343 -18.241 1.00 0.00 W1 H +ATOM 16631 H2 TIP3X4714 2.358 24.674 -19.412 1.00 0.00 W1 H +ATOM 16632 OH2 TIP3X4715 1.647 21.899 -17.315 1.00 0.00 W1 O +ATOM 16633 H1 TIP3X4715 1.443 21.060 -17.728 1.00 0.00 W1 H +ATOM 16634 H2 TIP3X4715 1.524 22.545 -18.011 1.00 0.00 W1 H +ATOM 16635 OH2 TIP3X4716 1.540 22.772 -24.492 1.00 0.00 W1 O +ATOM 16636 H1 TIP3X4716 1.896 23.645 -24.662 1.00 0.00 W1 H +ATOM 16637 H2 TIP3X4716 1.438 22.382 -25.360 1.00 0.00 W1 H +ATOM 16638 OH2 TIP3X4717 12.299 25.037 -30.305 1.00 0.00 W1 O +ATOM 16639 H1 TIP3X4717 13.004 25.536 -30.717 1.00 0.00 W1 H +ATOM 16640 H2 TIP3X4717 12.748 24.407 -29.742 1.00 0.00 W1 H +ATOM 16641 OH2 TIP3X4718 14.895 22.384 -26.943 1.00 0.00 W1 O +ATOM 16642 H1 TIP3X4718 14.608 22.557 -26.046 1.00 0.00 W1 H +ATOM 16643 H2 TIP3X4718 15.408 23.156 -27.183 1.00 0.00 W1 H +ATOM 16644 OH2 TIP3X4719 1.393 21.501 -22.221 1.00 0.00 W1 O +ATOM 16645 H1 TIP3X4719 1.487 22.179 -22.889 1.00 0.00 W1 H +ATOM 16646 H2 TIP3X4719 2.051 21.720 -21.561 1.00 0.00 W1 H +ATOM 16647 OH2 TIP3X4720 4.180 30.008 -28.957 1.00 0.00 W1 O +ATOM 16648 H1 TIP3X4720 3.951 30.368 -29.814 1.00 0.00 W1 H +ATOM 16649 H2 TIP3X4720 3.767 29.145 -28.941 1.00 0.00 W1 H +ATOM 16650 OH2 TIP3X4721 2.955 25.241 -30.459 1.00 0.00 W1 O +ATOM 16651 H1 TIP3X4721 2.139 24.952 -30.867 1.00 0.00 W1 H +ATOM 16652 H2 TIP3X4721 3.487 24.448 -30.397 1.00 0.00 W1 H +ATOM 16653 OH2 TIP3X4722 4.373 26.081 -17.384 1.00 0.00 W1 O +ATOM 16654 H1 TIP3X4722 3.800 26.683 -17.858 1.00 0.00 W1 H +ATOM 16655 H2 TIP3X4722 3.899 25.885 -16.576 1.00 0.00 W1 H +ATOM 16656 OH2 TIP3X4723 7.449 30.824 -19.693 1.00 0.00 W1 O +ATOM 16657 H1 TIP3X4723 7.766 30.530 -18.840 1.00 0.00 W1 H +ATOM 16658 H2 TIP3X4723 7.882 30.246 -20.322 1.00 0.00 W1 H +ATOM 16659 OH2 TIP3X4724 12.155 31.065 -25.560 1.00 0.00 W1 O +ATOM 16660 H1 TIP3X4724 11.742 30.374 -26.078 1.00 0.00 W1 H +ATOM 16661 H2 TIP3X4724 11.959 31.872 -26.036 1.00 0.00 W1 H +ATOM 16662 OH2 TIP3X4725 8.733 27.748 -28.308 1.00 0.00 W1 O +ATOM 16663 H1 TIP3X4725 8.992 28.533 -28.790 1.00 0.00 W1 H +ATOM 16664 H2 TIP3X4725 8.163 28.071 -27.610 1.00 0.00 W1 H +ATOM 16665 OH2 TIP3X4726 8.750 22.902 -29.236 1.00 0.00 W1 O +ATOM 16666 H1 TIP3X4726 9.573 22.975 -29.719 1.00 0.00 W1 H +ATOM 16667 H2 TIP3X4726 8.757 23.646 -28.635 1.00 0.00 W1 H +ATOM 16668 OH2 TIP3X4727 12.151 17.626 -19.445 1.00 0.00 W1 O +ATOM 16669 H1 TIP3X4727 12.956 17.395 -19.909 1.00 0.00 W1 H +ATOM 16670 H2 TIP3X4727 12.442 18.179 -18.720 1.00 0.00 W1 H +ATOM 16671 OH2 TIP3X4728 0.116 24.727 -28.039 1.00 0.00 W1 O +ATOM 16672 H1 TIP3X4728 -0.037 24.819 -28.979 1.00 0.00 W1 H +ATOM 16673 H2 TIP3X4728 1.070 24.727 -27.950 1.00 0.00 W1 H +ATOM 16674 OH2 TIP3X4729 10.878 24.315 -21.443 1.00 0.00 W1 O +ATOM 16675 H1 TIP3X4729 11.424 24.977 -21.017 1.00 0.00 W1 H +ATOM 16676 H2 TIP3X4729 11.337 24.115 -22.259 1.00 0.00 W1 H +ATOM 16677 OH2 TIP3X4730 9.700 29.289 -30.366 1.00 0.00 W1 O +ATOM 16678 H1 TIP3X4730 10.525 29.324 -29.881 1.00 0.00 W1 H +ATOM 16679 H2 TIP3X4730 9.904 28.776 -31.148 1.00 0.00 W1 H +ATOM 16680 OH2 TIP3X4731 9.693 27.076 -18.715 1.00 0.00 W1 O +ATOM 16681 H1 TIP3X4731 8.872 27.323 -18.288 1.00 0.00 W1 H +ATOM 16682 H2 TIP3X4731 9.463 26.981 -19.639 1.00 0.00 W1 H +ATOM 16683 OH2 TIP3X4732 6.318 27.301 -26.828 1.00 0.00 W1 O +ATOM 16684 H1 TIP3X4732 5.611 27.448 -27.456 1.00 0.00 W1 H +ATOM 16685 H2 TIP3X4732 5.981 27.646 -26.001 1.00 0.00 W1 H +ATOM 16686 OH2 TIP3X4733 2.883 28.213 -18.117 1.00 0.00 W1 O +ATOM 16687 H1 TIP3X4733 3.617 28.824 -18.181 1.00 0.00 W1 H +ATOM 16688 H2 TIP3X4733 2.571 28.307 -17.217 1.00 0.00 W1 H +ATOM 16689 OH2 TIP3X4734 2.473 29.918 -24.015 1.00 0.00 W1 O +ATOM 16690 H1 TIP3X4734 1.887 29.177 -24.169 1.00 0.00 W1 H +ATOM 16691 H2 TIP3X4734 2.916 30.051 -24.853 1.00 0.00 W1 H +ATOM 16692 OH2 TIP3X4735 10.826 15.931 -22.935 1.00 0.00 W1 O +ATOM 16693 H1 TIP3X4735 11.158 15.856 -23.829 1.00 0.00 W1 H +ATOM 16694 H2 TIP3X4735 10.781 16.874 -22.774 1.00 0.00 W1 H +ATOM 16695 OH2 TIP3X4736 8.064 18.060 -22.700 1.00 0.00 W1 O +ATOM 16696 H1 TIP3X4736 7.702 18.549 -23.439 1.00 0.00 W1 H +ATOM 16697 H2 TIP3X4736 7.332 17.971 -22.090 1.00 0.00 W1 H +ATOM 16698 OH2 TIP3X4737 6.783 16.045 -28.772 1.00 0.00 W1 O +ATOM 16699 H1 TIP3X4737 7.639 15.789 -28.427 1.00 0.00 W1 H +ATOM 16700 H2 TIP3X4737 6.265 15.241 -28.747 1.00 0.00 W1 H +ATOM 16701 OH2 TIP3X4738 9.535 15.888 -27.729 1.00 0.00 W1 O +ATOM 16702 H1 TIP3X4738 9.990 15.152 -27.320 1.00 0.00 W1 H +ATOM 16703 H2 TIP3X4738 9.942 15.975 -28.590 1.00 0.00 W1 H +ATOM 16704 OH2 TIP3X4739 4.174 30.467 -16.274 1.00 0.00 W1 O +ATOM 16705 H1 TIP3X4739 3.924 31.224 -16.804 1.00 0.00 W1 H +ATOM 16706 H2 TIP3X4739 5.085 30.298 -16.513 1.00 0.00 W1 H +ATOM 16707 OH2 TIP3X4740 9.181 29.161 -25.974 1.00 0.00 W1 O +ATOM 16708 H1 TIP3X4740 9.842 28.519 -25.714 1.00 0.00 W1 H +ATOM 16709 H2 TIP3X4740 9.168 29.796 -25.257 1.00 0.00 W1 H +ATOM 16710 OH2 TIP3X4741 6.920 30.064 -17.064 1.00 0.00 W1 O +ATOM 16711 H1 TIP3X4741 7.138 29.171 -16.794 1.00 0.00 W1 H +ATOM 16712 H2 TIP3X4741 7.528 30.618 -16.575 1.00 0.00 W1 H +ATOM 16713 OH2 TIP3X4742 5.867 18.182 -27.020 1.00 0.00 W1 O +ATOM 16714 H1 TIP3X4742 6.524 17.523 -27.242 1.00 0.00 W1 H +ATOM 16715 H2 TIP3X4742 5.909 18.251 -26.066 1.00 0.00 W1 H +ATOM 16716 OH2 TIP3X4743 0.580 16.520 -17.564 1.00 0.00 W1 O +ATOM 16717 H1 TIP3X4743 1.328 16.325 -18.128 1.00 0.00 W1 H +ATOM 16718 H2 TIP3X4743 0.788 16.095 -16.732 1.00 0.00 W1 H +ATOM 16719 OH2 TIP3X4744 11.699 29.247 -27.962 1.00 0.00 W1 O +ATOM 16720 H1 TIP3X4744 11.844 28.307 -27.859 1.00 0.00 W1 H +ATOM 16721 H2 TIP3X4744 12.523 29.580 -28.319 1.00 0.00 W1 H +ATOM 16722 OH2 TIP3X4745 13.367 16.014 -16.735 1.00 0.00 W1 O +ATOM 16723 H1 TIP3X4745 12.753 16.088 -17.466 1.00 0.00 W1 H +ATOM 16724 H2 TIP3X4745 14.137 16.509 -17.017 1.00 0.00 W1 H +ATOM 16725 OH2 TIP3X4746 4.161 30.227 -26.249 1.00 0.00 W1 O +ATOM 16726 H1 TIP3X4746 4.154 30.272 -27.205 1.00 0.00 W1 H +ATOM 16727 H2 TIP3X4746 4.968 30.673 -25.993 1.00 0.00 W1 H +ATOM 16728 OH2 TIP3X4747 15.070 29.165 -18.299 1.00 0.00 W1 O +ATOM 16729 H1 TIP3X4747 14.347 29.716 -17.998 1.00 0.00 W1 H +ATOM 16730 H2 TIP3X4747 15.858 29.664 -18.085 1.00 0.00 W1 H +ATOM 16731 OH2 TIP3X4748 2.695 18.487 -26.619 1.00 0.00 W1 O +ATOM 16732 H1 TIP3X4748 2.052 18.876 -27.212 1.00 0.00 W1 H +ATOM 16733 H2 TIP3X4748 3.498 18.984 -26.777 1.00 0.00 W1 H +ATOM 16734 OH2 TIP3X4749 4.124 27.086 -28.888 1.00 0.00 W1 O +ATOM 16735 H1 TIP3X4749 4.085 26.458 -29.609 1.00 0.00 W1 H +ATOM 16736 H2 TIP3X4749 3.405 26.833 -28.310 1.00 0.00 W1 H +ATOM 16737 OH2 TIP3X4750 2.019 26.614 -11.248 1.00 0.00 W1 O +ATOM 16738 H1 TIP3X4750 2.201 26.538 -10.312 1.00 0.00 W1 H +ATOM 16739 H2 TIP3X4750 1.995 27.557 -11.413 1.00 0.00 W1 H +ATOM 16740 OH2 TIP3X4751 13.121 24.105 -7.510 1.00 0.00 W1 O +ATOM 16741 H1 TIP3X4751 13.356 24.370 -8.400 1.00 0.00 W1 H +ATOM 16742 H2 TIP3X4751 13.950 23.842 -7.111 1.00 0.00 W1 H +ATOM 16743 OH2 TIP3X4752 5.105 23.829 -11.532 1.00 0.00 W1 O +ATOM 16744 H1 TIP3X4752 5.136 24.738 -11.235 1.00 0.00 W1 H +ATOM 16745 H2 TIP3X4752 5.613 23.346 -10.880 1.00 0.00 W1 H +ATOM 16746 OH2 TIP3X4753 12.908 27.988 -9.388 1.00 0.00 W1 O +ATOM 16747 H1 TIP3X4753 12.634 28.478 -8.613 1.00 0.00 W1 H +ATOM 16748 H2 TIP3X4753 12.383 27.188 -9.365 1.00 0.00 W1 H +ATOM 16749 OH2 TIP3X4754 11.425 26.431 -12.345 1.00 0.00 W1 O +ATOM 16750 H1 TIP3X4754 11.587 26.203 -13.260 1.00 0.00 W1 H +ATOM 16751 H2 TIP3X4754 10.496 26.660 -12.315 1.00 0.00 W1 H +ATOM 16752 OH2 TIP3X4755 15.273 26.963 -7.561 1.00 0.00 W1 O +ATOM 16753 H1 TIP3X4755 14.721 27.046 -8.338 1.00 0.00 W1 H +ATOM 16754 H2 TIP3X4755 14.662 26.747 -6.856 1.00 0.00 W1 H +ATOM 16755 OH2 TIP3X4756 1.909 28.227 -5.110 1.00 0.00 W1 O +ATOM 16756 H1 TIP3X4756 2.315 28.431 -4.267 1.00 0.00 W1 H +ATOM 16757 H2 TIP3X4756 1.338 27.482 -4.927 1.00 0.00 W1 H +ATOM 16758 OH2 TIP3X4757 9.284 29.852 -5.884 1.00 0.00 W1 O +ATOM 16759 H1 TIP3X4757 9.585 28.952 -5.762 1.00 0.00 W1 H +ATOM 16760 H2 TIP3X4757 9.909 30.233 -6.501 1.00 0.00 W1 H +ATOM 16761 OH2 TIP3X4758 12.717 29.809 -6.004 1.00 0.00 W1 O +ATOM 16762 H1 TIP3X4758 12.281 30.632 -6.223 1.00 0.00 W1 H +ATOM 16763 H2 TIP3X4758 13.646 30.035 -5.954 1.00 0.00 W1 H +ATOM 16764 OH2 TIP3X4759 5.165 29.384 -6.874 1.00 0.00 W1 O +ATOM 16765 H1 TIP3X4759 5.520 30.233 -7.138 1.00 0.00 W1 H +ATOM 16766 H2 TIP3X4759 4.230 29.443 -7.070 1.00 0.00 W1 H +ATOM 16767 OH2 TIP3X4760 10.006 21.276 -7.973 1.00 0.00 W1 O +ATOM 16768 H1 TIP3X4760 9.929 20.466 -8.477 1.00 0.00 W1 H +ATOM 16769 H2 TIP3X4760 10.949 21.415 -7.885 1.00 0.00 W1 H +ATOM 16770 OH2 TIP3X4761 6.029 17.374 -5.611 1.00 0.00 W1 O +ATOM 16771 H1 TIP3X4761 6.287 16.636 -5.058 1.00 0.00 W1 H +ATOM 16772 H2 TIP3X4761 5.353 17.017 -6.186 1.00 0.00 W1 H +ATOM 16773 OH2 TIP3X4762 14.273 18.378 -9.188 1.00 0.00 W1 O +ATOM 16774 H1 TIP3X4762 13.965 18.716 -8.347 1.00 0.00 W1 H +ATOM 16775 H2 TIP3X4762 14.341 17.433 -9.056 1.00 0.00 W1 H +ATOM 16776 OH2 TIP3X4763 12.870 19.573 -7.234 1.00 0.00 W1 O +ATOM 16777 H1 TIP3X4763 13.446 19.345 -6.503 1.00 0.00 W1 H +ATOM 16778 H2 TIP3X4763 11.996 19.319 -6.939 1.00 0.00 W1 H +ATOM 16779 OH2 TIP3X4764 5.917 20.698 -5.863 1.00 0.00 W1 O +ATOM 16780 H1 TIP3X4764 6.420 19.996 -5.451 1.00 0.00 W1 H +ATOM 16781 H2 TIP3X4764 6.574 21.340 -6.129 1.00 0.00 W1 H +ATOM 16782 OH2 TIP3X4765 13.394 21.746 -8.965 1.00 0.00 W1 O +ATOM 16783 H1 TIP3X4765 13.435 20.847 -8.641 1.00 0.00 W1 H +ATOM 16784 H2 TIP3X4765 13.276 22.279 -8.179 1.00 0.00 W1 H +ATOM 16785 OH2 TIP3X4766 12.078 18.390 -11.097 1.00 0.00 W1 O +ATOM 16786 H1 TIP3X4766 12.903 18.574 -10.648 1.00 0.00 W1 H +ATOM 16787 H2 TIP3X4766 12.155 18.845 -11.936 1.00 0.00 W1 H +ATOM 16788 OH2 TIP3X4767 8.261 24.361 -5.025 1.00 0.00 W1 O +ATOM 16789 H1 TIP3X4767 9.138 24.383 -5.408 1.00 0.00 W1 H +ATOM 16790 H2 TIP3X4767 7.995 25.280 -4.979 1.00 0.00 W1 H +ATOM 16791 OH2 TIP3X4768 7.411 26.909 -5.215 1.00 0.00 W1 O +ATOM 16792 H1 TIP3X4768 7.387 27.136 -6.145 1.00 0.00 W1 H +ATOM 16793 H2 TIP3X4768 6.491 26.855 -4.957 1.00 0.00 W1 H +ATOM 16794 OH2 TIP3X4769 2.274 18.791 -8.377 1.00 0.00 W1 O +ATOM 16795 H1 TIP3X4769 1.949 19.670 -8.186 1.00 0.00 W1 H +ATOM 16796 H2 TIP3X4769 2.151 18.688 -9.321 1.00 0.00 W1 H +ATOM 16797 OH2 TIP3X4770 4.430 22.348 -8.365 1.00 0.00 W1 O +ATOM 16798 H1 TIP3X4770 3.747 21.898 -8.862 1.00 0.00 W1 H +ATOM 16799 H2 TIP3X4770 4.916 21.645 -7.933 1.00 0.00 W1 H +ATOM 16800 OH2 TIP3X4771 10.486 27.273 -5.968 1.00 0.00 W1 O +ATOM 16801 H1 TIP3X4771 10.244 26.686 -6.685 1.00 0.00 W1 H +ATOM 16802 H2 TIP3X4771 11.436 27.183 -5.896 1.00 0.00 W1 H +ATOM 16803 OH2 TIP3X4772 14.784 30.907 -9.188 1.00 0.00 W1 O +ATOM 16804 H1 TIP3X4772 14.778 30.439 -8.353 1.00 0.00 W1 H +ATOM 16805 H2 TIP3X4772 13.903 30.778 -9.541 1.00 0.00 W1 H +ATOM 16806 OH2 TIP3X4773 6.656 27.244 -8.166 1.00 0.00 W1 O +ATOM 16807 H1 TIP3X4773 6.084 26.524 -7.897 1.00 0.00 W1 H +ATOM 16808 H2 TIP3X4773 6.195 28.034 -7.883 1.00 0.00 W1 H +ATOM 16809 OH2 TIP3X4774 8.877 17.695 -3.595 1.00 0.00 W1 O +ATOM 16810 H1 TIP3X4774 8.135 18.175 -3.228 1.00 0.00 W1 H +ATOM 16811 H2 TIP3X4774 8.497 16.883 -3.930 1.00 0.00 W1 H +ATOM 16812 OH2 TIP3X4775 4.229 18.400 -13.794 1.00 0.00 W1 O +ATOM 16813 H1 TIP3X4775 4.131 17.738 -13.109 1.00 0.00 W1 H +ATOM 16814 H2 TIP3X4775 4.046 17.932 -14.608 1.00 0.00 W1 H +ATOM 16815 OH2 TIP3X4776 15.123 19.322 -5.604 1.00 0.00 W1 O +ATOM 16816 H1 TIP3X4776 15.642 19.991 -6.051 1.00 0.00 W1 H +ATOM 16817 H2 TIP3X4776 15.565 19.198 -4.764 1.00 0.00 W1 H +ATOM 16818 OH2 TIP3X4777 6.447 21.910 -1.458 1.00 0.00 W1 O +ATOM 16819 H1 TIP3X4777 7.311 22.309 -1.559 1.00 0.00 W1 H +ATOM 16820 H2 TIP3X4777 6.599 20.973 -1.580 1.00 0.00 W1 H +ATOM 16821 OH2 TIP3X4778 9.613 26.820 -8.718 1.00 0.00 W1 O +ATOM 16822 H1 TIP3X4778 9.707 25.957 -9.122 1.00 0.00 W1 H +ATOM 16823 H2 TIP3X4778 8.680 27.020 -8.794 1.00 0.00 W1 H +ATOM 16824 OH2 TIP3X4779 8.225 25.104 -11.187 1.00 0.00 W1 O +ATOM 16825 H1 TIP3X4779 7.660 24.490 -10.718 1.00 0.00 W1 H +ATOM 16826 H2 TIP3X4779 7.751 25.935 -11.159 1.00 0.00 W1 H +ATOM 16827 OH2 TIP3X4780 0.762 25.617 -4.730 1.00 0.00 W1 O +ATOM 16828 H1 TIP3X4780 0.228 25.016 -5.248 1.00 0.00 W1 H +ATOM 16829 H2 TIP3X4780 0.292 25.704 -3.901 1.00 0.00 W1 H +ATOM 16830 OH2 TIP3X4781 12.059 24.638 -10.363 1.00 0.00 W1 O +ATOM 16831 H1 TIP3X4781 12.003 23.723 -10.639 1.00 0.00 W1 H +ATOM 16832 H2 TIP3X4781 11.886 25.141 -11.159 1.00 0.00 W1 H +ATOM 16833 OH2 TIP3X4782 12.356 25.152 -3.338 1.00 0.00 W1 O +ATOM 16834 H1 TIP3X4782 11.453 25.236 -3.030 1.00 0.00 W1 H +ATOM 16835 H2 TIP3X4782 12.524 24.210 -3.335 1.00 0.00 W1 H +ATOM 16836 OH2 TIP3X4783 14.722 23.112 -5.533 1.00 0.00 W1 O +ATOM 16837 H1 TIP3X4783 15.385 22.431 -5.652 1.00 0.00 W1 H +ATOM 16838 H2 TIP3X4783 14.006 22.672 -5.074 1.00 0.00 W1 H +ATOM 16839 OH2 TIP3X4784 3.867 22.799 -0.388 1.00 0.00 W1 O +ATOM 16840 H1 TIP3X4784 3.338 22.565 -1.151 1.00 0.00 W1 H +ATOM 16841 H2 TIP3X4784 4.762 22.846 -0.723 1.00 0.00 W1 H +ATOM 16842 OH2 TIP3X4785 4.777 26.005 -4.827 1.00 0.00 W1 O +ATOM 16843 H1 TIP3X4785 4.732 25.450 -4.048 1.00 0.00 W1 H +ATOM 16844 H2 TIP3X4785 4.144 26.703 -4.661 1.00 0.00 W1 H +ATOM 16845 OH2 TIP3X4786 13.449 27.135 -5.077 1.00 0.00 W1 O +ATOM 16846 H1 TIP3X4786 13.872 27.903 -4.693 1.00 0.00 W1 H +ATOM 16847 H2 TIP3X4786 13.145 26.627 -4.325 1.00 0.00 W1 H +ATOM 16848 OH2 TIP3X4787 11.536 29.110 -3.252 1.00 0.00 W1 O +ATOM 16849 H1 TIP3X4787 10.829 28.481 -3.395 1.00 0.00 W1 H +ATOM 16850 H2 TIP3X4787 11.865 29.305 -4.130 1.00 0.00 W1 H +ATOM 16851 OH2 TIP3X4788 11.787 27.646 -0.856 1.00 0.00 W1 O +ATOM 16852 H1 TIP3X4788 11.154 27.040 -1.240 1.00 0.00 W1 H +ATOM 16853 H2 TIP3X4788 11.901 28.327 -1.520 1.00 0.00 W1 H +ATOM 16854 OH2 TIP3X4789 15.398 29.555 -6.789 1.00 0.00 W1 O +ATOM 16855 H1 TIP3X4789 16.075 29.396 -6.133 1.00 0.00 W1 H +ATOM 16856 H2 TIP3X4789 15.163 28.683 -7.108 1.00 0.00 W1 H +ATOM 16857 OH2 TIP3X4790 5.954 16.026 -8.397 1.00 0.00 W1 O +ATOM 16858 H1 TIP3X4790 5.662 16.935 -8.457 1.00 0.00 W1 H +ATOM 16859 H2 TIP3X4790 6.786 16.008 -8.870 1.00 0.00 W1 H +ATOM 16860 OH2 TIP3X4791 8.078 25.972 -14.742 1.00 0.00 W1 O +ATOM 16861 H1 TIP3X4791 7.383 25.350 -14.528 1.00 0.00 W1 H +ATOM 16862 H2 TIP3X4791 8.060 26.608 -14.027 1.00 0.00 W1 H +ATOM 16863 OH2 TIP3X4792 15.458 24.736 -15.306 1.00 0.00 W1 O +ATOM 16864 H1 TIP3X4792 15.195 23.986 -15.839 1.00 0.00 W1 H +ATOM 16865 H2 TIP3X4792 15.204 25.500 -15.823 1.00 0.00 W1 H +ATOM 16866 OH2 TIP3X4793 1.406 28.432 -15.589 1.00 0.00 W1 O +ATOM 16867 H1 TIP3X4793 1.852 27.883 -14.943 1.00 0.00 W1 H +ATOM 16868 H2 TIP3X4793 0.510 28.098 -15.610 1.00 0.00 W1 H +ATOM 16869 OH2 TIP3X4794 13.500 30.561 -14.330 1.00 0.00 W1 O +ATOM 16870 H1 TIP3X4794 14.385 30.233 -14.489 1.00 0.00 W1 H +ATOM 16871 H2 TIP3X4794 13.270 31.029 -15.133 1.00 0.00 W1 H +ATOM 16872 OH2 TIP3X4795 14.892 26.223 -2.253 1.00 0.00 W1 O +ATOM 16873 H1 TIP3X4795 14.782 27.172 -2.194 1.00 0.00 W1 H +ATOM 16874 H2 TIP3X4795 13.999 25.878 -2.263 1.00 0.00 W1 H +ATOM 16875 OH2 TIP3X4796 1.578 29.049 -12.634 1.00 0.00 W1 O +ATOM 16876 H1 TIP3X4796 1.510 29.885 -12.174 1.00 0.00 W1 H +ATOM 16877 H2 TIP3X4796 0.683 28.711 -12.651 1.00 0.00 W1 H +ATOM 16878 OH2 TIP3X4797 14.158 27.542 -14.990 1.00 0.00 W1 O +ATOM 16879 H1 TIP3X4797 14.190 27.462 -14.036 1.00 0.00 W1 H +ATOM 16880 H2 TIP3X4797 13.325 27.979 -15.166 1.00 0.00 W1 H +ATOM 16881 OH2 TIP3X4798 10.529 15.837 -2.106 1.00 0.00 W1 O +ATOM 16882 H1 TIP3X4798 10.222 16.585 -2.618 1.00 0.00 W1 H +ATOM 16883 H2 TIP3X4798 10.583 15.120 -2.738 1.00 0.00 W1 H +ATOM 16884 OH2 TIP3X4799 4.743 29.753 -4.077 1.00 0.00 W1 O +ATOM 16885 H1 TIP3X4799 5.591 29.991 -3.703 1.00 0.00 W1 H +ATOM 16886 H2 TIP3X4799 4.954 29.373 -4.930 1.00 0.00 W1 H +ATOM 16887 OH2 TIP3X4800 3.209 17.772 -0.726 1.00 0.00 W1 O +ATOM 16888 H1 TIP3X4800 2.332 17.861 -0.352 1.00 0.00 W1 H +ATOM 16889 H2 TIP3X4800 3.272 18.484 -1.363 1.00 0.00 W1 H +ATOM 16890 OH2 TIP3X4801 9.406 19.719 -14.996 1.00 0.00 W1 O +ATOM 16891 H1 TIP3X4801 9.240 20.016 -15.891 1.00 0.00 W1 H +ATOM 16892 H2 TIP3X4801 8.535 19.595 -14.619 1.00 0.00 W1 H +ATOM 16893 OH2 TIP3X4802 14.804 27.479 -11.948 1.00 0.00 W1 O +ATOM 16894 H1 TIP3X4802 15.377 26.742 -11.735 1.00 0.00 W1 H +ATOM 16895 H2 TIP3X4802 14.473 27.778 -11.101 1.00 0.00 W1 H +ATOM 16896 OH2 TIP3X4803 10.065 16.515 -15.019 1.00 0.00 W1 O +ATOM 16897 H1 TIP3X4803 10.797 17.131 -14.994 1.00 0.00 W1 H +ATOM 16898 H2 TIP3X4803 10.306 15.883 -15.695 1.00 0.00 W1 H +ATOM 16899 OH2 TIP3X4804 14.597 16.609 -4.754 1.00 0.00 W1 O +ATOM 16900 H1 TIP3X4804 15.089 15.979 -4.226 1.00 0.00 W1 H +ATOM 16901 H2 TIP3X4804 15.197 16.851 -5.459 1.00 0.00 W1 H +ATOM 16902 OH2 TIP3X4805 2.104 25.829 -8.676 1.00 0.00 W1 O +ATOM 16903 H1 TIP3X4805 1.436 26.153 -8.071 1.00 0.00 W1 H +ATOM 16904 H2 TIP3X4805 2.896 25.760 -8.144 1.00 0.00 W1 H +ATOM 16905 OH2 TIP3X4806 7.101 27.248 -1.565 1.00 0.00 W1 O +ATOM 16906 H1 TIP3X4806 7.324 26.870 -0.715 1.00 0.00 W1 H +ATOM 16907 H2 TIP3X4806 6.494 26.619 -1.956 1.00 0.00 W1 H +ATOM 16908 OH2 TIP3X4807 10.580 18.553 -6.153 1.00 0.00 W1 O +ATOM 16909 H1 TIP3X4807 10.639 18.371 -5.215 1.00 0.00 W1 H +ATOM 16910 H2 TIP3X4807 9.642 18.640 -6.321 1.00 0.00 W1 H +ATOM 16911 OH2 TIP3X4808 6.772 19.210 -1.974 1.00 0.00 W1 O +ATOM 16912 H1 TIP3X4808 5.905 19.140 -2.374 1.00 0.00 W1 H +ATOM 16913 H2 TIP3X4808 6.717 18.669 -1.186 1.00 0.00 W1 H +ATOM 16914 OH2 TIP3X4809 14.258 21.930 -0.221 1.00 0.00 W1 O +ATOM 16915 H1 TIP3X4809 15.052 21.397 -0.237 1.00 0.00 W1 H +ATOM 16916 H2 TIP3X4809 13.964 21.895 0.690 1.00 0.00 W1 H +ATOM 16917 OH2 TIP3X4810 2.443 15.797 -4.302 1.00 0.00 W1 O +ATOM 16918 H1 TIP3X4810 2.217 16.250 -5.115 1.00 0.00 W1 H +ATOM 16919 H2 TIP3X4810 3.273 15.360 -4.494 1.00 0.00 W1 H +ATOM 16920 OH2 TIP3X4811 8.538 16.255 -9.221 1.00 0.00 W1 O +ATOM 16921 H1 TIP3X4811 9.020 16.769 -9.868 1.00 0.00 W1 H +ATOM 16922 H2 TIP3X4811 8.882 16.548 -8.377 1.00 0.00 W1 H +ATOM 16923 OH2 TIP3X4812 3.008 20.846 -14.068 1.00 0.00 W1 O +ATOM 16924 H1 TIP3X4812 3.430 21.492 -14.634 1.00 0.00 W1 H +ATOM 16925 H2 TIP3X4812 3.720 20.271 -13.787 1.00 0.00 W1 H +ATOM 16926 OH2 TIP3X4813 3.532 21.503 -4.757 1.00 0.00 W1 O +ATOM 16927 H1 TIP3X4813 3.448 22.294 -4.225 1.00 0.00 W1 H +ATOM 16928 H2 TIP3X4813 4.447 21.499 -5.037 1.00 0.00 W1 H +ATOM 16929 OH2 TIP3X4814 2.715 22.221 -11.571 1.00 0.00 W1 O +ATOM 16930 H1 TIP3X4814 2.778 21.932 -12.482 1.00 0.00 W1 H +ATOM 16931 H2 TIP3X4814 3.490 22.766 -11.438 1.00 0.00 W1 H +ATOM 16932 OH2 TIP3X4815 11.735 18.791 -13.811 1.00 0.00 W1 O +ATOM 16933 H1 TIP3X4815 11.028 19.279 -14.231 1.00 0.00 W1 H +ATOM 16934 H2 TIP3X4815 12.460 18.835 -14.435 1.00 0.00 W1 H +ATOM 16935 OH2 TIP3X4816 0.286 19.677 -2.723 1.00 0.00 W1 O +ATOM 16936 H1 TIP3X4816 -0.619 19.971 -2.612 1.00 0.00 W1 H +ATOM 16937 H2 TIP3X4816 0.426 19.058 -2.007 1.00 0.00 W1 H +ATOM 16938 OH2 TIP3X4817 1.429 16.515 -6.741 1.00 0.00 W1 O +ATOM 16939 H1 TIP3X4817 1.536 15.813 -7.383 1.00 0.00 W1 H +ATOM 16940 H2 TIP3X4817 1.564 17.320 -7.240 1.00 0.00 W1 H +ATOM 16941 OH2 TIP3X4818 12.951 20.143 -1.853 1.00 0.00 W1 O +ATOM 16942 H1 TIP3X4818 13.262 20.721 -1.157 1.00 0.00 W1 H +ATOM 16943 H2 TIP3X4818 12.007 20.079 -1.708 1.00 0.00 W1 H +ATOM 16944 OH2 TIP3X4819 9.994 20.148 -1.906 1.00 0.00 W1 O +ATOM 16945 H1 TIP3X4819 9.634 20.717 -2.587 1.00 0.00 W1 H +ATOM 16946 H2 TIP3X4819 9.656 19.278 -2.117 1.00 0.00 W1 H +ATOM 16947 OH2 TIP3X4820 8.197 20.618 -12.041 1.00 0.00 W1 O +ATOM 16948 H1 TIP3X4820 8.286 21.197 -12.797 1.00 0.00 W1 H +ATOM 16949 H2 TIP3X4820 7.427 20.083 -12.237 1.00 0.00 W1 H +ATOM 16950 OH2 TIP3X4821 6.500 19.949 -14.353 1.00 0.00 W1 O +ATOM 16951 H1 TIP3X4821 6.062 20.142 -15.183 1.00 0.00 W1 H +ATOM 16952 H2 TIP3X4821 6.093 19.138 -14.050 1.00 0.00 W1 H +ATOM 16953 OH2 TIP3X4822 7.210 17.011 -0.564 1.00 0.00 W1 O +ATOM 16954 H1 TIP3X4822 6.744 16.624 0.176 1.00 0.00 W1 H +ATOM 16955 H2 TIP3X4822 8.124 17.044 -0.282 1.00 0.00 W1 H +ATOM 16956 OH2 TIP3X4823 12.773 22.356 -3.883 1.00 0.00 W1 O +ATOM 16957 H1 TIP3X4823 12.793 21.706 -3.180 1.00 0.00 W1 H +ATOM 16958 H2 TIP3X4823 11.939 22.204 -4.327 1.00 0.00 W1 H +ATOM 16959 OH2 TIP3X4824 0.848 19.456 -15.413 1.00 0.00 W1 O +ATOM 16960 H1 TIP3X4824 0.092 19.264 -14.859 1.00 0.00 W1 H +ATOM 16961 H2 TIP3X4824 1.382 20.055 -14.891 1.00 0.00 W1 H +ATOM 16962 OH2 TIP3X4825 0.767 30.950 -14.926 1.00 0.00 W1 O +ATOM 16963 H1 TIP3X4825 1.183 30.202 -14.497 1.00 0.00 W1 H +ATOM 16964 H2 TIP3X4825 0.780 31.643 -14.267 1.00 0.00 W1 H +ATOM 16965 OH2 TIP3X4826 9.515 19.110 -9.933 1.00 0.00 W1 O +ATOM 16966 H1 TIP3X4826 9.178 19.460 -10.758 1.00 0.00 W1 H +ATOM 16967 H2 TIP3X4826 10.411 18.842 -10.135 1.00 0.00 W1 H +ATOM 16968 OH2 TIP3X4827 4.970 18.420 -8.189 1.00 0.00 W1 O +ATOM 16969 H1 TIP3X4827 4.028 18.373 -8.348 1.00 0.00 W1 H +ATOM 16970 H2 TIP3X4827 5.109 19.294 -7.826 1.00 0.00 W1 H +ATOM 16971 OH2 TIP3X4828 0.332 19.546 -11.396 1.00 0.00 W1 O +ATOM 16972 H1 TIP3X4828 0.058 19.422 -10.487 1.00 0.00 W1 H +ATOM 16973 H2 TIP3X4828 0.138 20.465 -11.582 1.00 0.00 W1 H +ATOM 16974 OH2 TIP3X4829 4.333 18.873 -3.335 1.00 0.00 W1 O +ATOM 16975 H1 TIP3X4829 4.355 18.067 -3.851 1.00 0.00 W1 H +ATOM 16976 H2 TIP3X4829 3.939 19.521 -3.920 1.00 0.00 W1 H +ATOM 16977 OH2 TIP3X4830 4.916 25.409 -7.531 1.00 0.00 W1 O +ATOM 16978 H1 TIP3X4830 4.844 24.473 -7.718 1.00 0.00 W1 H +ATOM 16979 H2 TIP3X4830 4.920 25.462 -6.575 1.00 0.00 W1 H +ATOM 16980 OH2 TIP3X4831 9.105 22.428 -2.968 1.00 0.00 W1 O +ATOM 16981 H1 TIP3X4831 9.517 23.259 -2.732 1.00 0.00 W1 H +ATOM 16982 H2 TIP3X4831 8.555 22.638 -3.723 1.00 0.00 W1 H +ATOM 16983 OH2 TIP3X4832 14.900 17.794 -13.644 1.00 0.00 W1 O +ATOM 16984 H1 TIP3X4832 15.335 18.021 -12.822 1.00 0.00 W1 H +ATOM 16985 H2 TIP3X4832 14.380 17.019 -13.434 1.00 0.00 W1 H +ATOM 16986 OH2 TIP3X4833 6.055 23.754 -14.466 1.00 0.00 W1 O +ATOM 16987 H1 TIP3X4833 5.766 23.632 -13.561 1.00 0.00 W1 H +ATOM 16988 H2 TIP3X4833 6.744 23.101 -14.587 1.00 0.00 W1 H +ATOM 16989 OH2 TIP3X4834 12.758 22.270 -13.398 1.00 0.00 W1 O +ATOM 16990 H1 TIP3X4834 11.893 22.071 -13.039 1.00 0.00 W1 H +ATOM 16991 H2 TIP3X4834 13.315 22.391 -12.629 1.00 0.00 W1 H +ATOM 16992 OH2 TIP3X4835 7.591 22.524 -6.927 1.00 0.00 W1 O +ATOM 16993 H1 TIP3X4835 7.688 23.321 -6.406 1.00 0.00 W1 H +ATOM 16994 H2 TIP3X4835 8.466 22.135 -6.936 1.00 0.00 W1 H +ATOM 16995 OH2 TIP3X4836 7.336 22.906 -10.011 1.00 0.00 W1 O +ATOM 16996 H1 TIP3X4836 7.958 22.310 -10.429 1.00 0.00 W1 H +ATOM 16997 H2 TIP3X4836 7.362 22.669 -9.084 1.00 0.00 W1 H +ATOM 16998 OH2 TIP3X4837 10.231 24.522 -1.075 1.00 0.00 W1 O +ATOM 16999 H1 TIP3X4837 9.553 24.806 -0.462 1.00 0.00 W1 H +ATOM 17000 H2 TIP3X4837 11.029 24.481 -0.549 1.00 0.00 W1 H +ATOM 17001 OH2 TIP3X4838 2.741 23.937 -3.379 1.00 0.00 W1 O +ATOM 17002 H1 TIP3X4838 3.258 24.343 -2.683 1.00 0.00 W1 H +ATOM 17003 H2 TIP3X4838 2.358 24.674 -3.855 1.00 0.00 W1 H +ATOM 17004 OH2 TIP3X4839 1.647 21.899 -1.758 1.00 0.00 W1 O +ATOM 17005 H1 TIP3X4839 1.443 21.060 -2.170 1.00 0.00 W1 H +ATOM 17006 H2 TIP3X4839 1.524 22.545 -2.453 1.00 0.00 W1 H +ATOM 17007 OH2 TIP3X4840 1.540 22.772 -8.934 1.00 0.00 W1 O +ATOM 17008 H1 TIP3X4840 1.896 23.645 -9.104 1.00 0.00 W1 H +ATOM 17009 H2 TIP3X4840 1.438 22.382 -9.802 1.00 0.00 W1 H +ATOM 17010 OH2 TIP3X4841 12.299 25.037 -14.748 1.00 0.00 W1 O +ATOM 17011 H1 TIP3X4841 13.004 25.536 -15.160 1.00 0.00 W1 H +ATOM 17012 H2 TIP3X4841 12.748 24.407 -14.184 1.00 0.00 W1 H +ATOM 17013 OH2 TIP3X4842 14.895 22.384 -11.385 1.00 0.00 W1 O +ATOM 17014 H1 TIP3X4842 14.608 22.557 -10.489 1.00 0.00 W1 H +ATOM 17015 H2 TIP3X4842 15.408 23.156 -11.626 1.00 0.00 W1 H +ATOM 17016 OH2 TIP3X4843 1.393 21.501 -6.663 1.00 0.00 W1 O +ATOM 17017 H1 TIP3X4843 1.487 22.179 -7.332 1.00 0.00 W1 H +ATOM 17018 H2 TIP3X4843 2.051 21.720 -6.004 1.00 0.00 W1 H +ATOM 17019 OH2 TIP3X4844 4.180 30.008 -13.399 1.00 0.00 W1 O +ATOM 17020 H1 TIP3X4844 3.951 30.368 -14.256 1.00 0.00 W1 H +ATOM 17021 H2 TIP3X4844 3.767 29.145 -13.383 1.00 0.00 W1 H +ATOM 17022 OH2 TIP3X4845 2.955 25.241 -14.901 1.00 0.00 W1 O +ATOM 17023 H1 TIP3X4845 2.139 24.952 -15.310 1.00 0.00 W1 H +ATOM 17024 H2 TIP3X4845 3.487 24.448 -14.840 1.00 0.00 W1 H +ATOM 17025 OH2 TIP3X4846 4.373 26.081 -1.826 1.00 0.00 W1 O +ATOM 17026 H1 TIP3X4846 3.800 26.683 -2.301 1.00 0.00 W1 H +ATOM 17027 H2 TIP3X4846 3.899 25.885 -1.018 1.00 0.00 W1 H +ATOM 17028 OH2 TIP3X4847 7.449 30.824 -4.136 1.00 0.00 W1 O +ATOM 17029 H1 TIP3X4847 7.766 30.530 -3.282 1.00 0.00 W1 H +ATOM 17030 H2 TIP3X4847 7.882 30.246 -4.765 1.00 0.00 W1 H +ATOM 17031 OH2 TIP3X4848 12.155 31.065 -10.002 1.00 0.00 W1 O +ATOM 17032 H1 TIP3X4848 11.742 30.374 -10.521 1.00 0.00 W1 H +ATOM 17033 H2 TIP3X4848 11.959 31.872 -10.479 1.00 0.00 W1 H +ATOM 17034 OH2 TIP3X4849 8.733 27.748 -12.750 1.00 0.00 W1 O +ATOM 17035 H1 TIP3X4849 8.992 28.533 -13.232 1.00 0.00 W1 H +ATOM 17036 H2 TIP3X4849 8.163 28.071 -12.052 1.00 0.00 W1 H +ATOM 17037 OH2 TIP3X4850 8.750 22.902 -13.679 1.00 0.00 W1 O +ATOM 17038 H1 TIP3X4850 9.573 22.975 -14.162 1.00 0.00 W1 H +ATOM 17039 H2 TIP3X4850 8.757 23.646 -13.077 1.00 0.00 W1 H +ATOM 17040 OH2 TIP3X4851 12.151 17.626 -3.888 1.00 0.00 W1 O +ATOM 17041 H1 TIP3X4851 12.956 17.395 -4.351 1.00 0.00 W1 H +ATOM 17042 H2 TIP3X4851 12.442 18.179 -3.163 1.00 0.00 W1 H +ATOM 17043 OH2 TIP3X4852 0.116 24.727 -12.482 1.00 0.00 W1 O +ATOM 17044 H1 TIP3X4852 -0.037 24.819 -13.422 1.00 0.00 W1 H +ATOM 17045 H2 TIP3X4852 1.070 24.727 -12.393 1.00 0.00 W1 H +ATOM 17046 OH2 TIP3X4853 10.878 24.315 -5.886 1.00 0.00 W1 O +ATOM 17047 H1 TIP3X4853 11.424 24.977 -5.460 1.00 0.00 W1 H +ATOM 17048 H2 TIP3X4853 11.337 24.115 -6.701 1.00 0.00 W1 H +ATOM 17049 OH2 TIP3X4854 9.700 29.289 -14.808 1.00 0.00 W1 O +ATOM 17050 H1 TIP3X4854 10.525 29.324 -14.324 1.00 0.00 W1 H +ATOM 17051 H2 TIP3X4854 9.904 28.776 -15.591 1.00 0.00 W1 H +ATOM 17052 OH2 TIP3X4855 9.693 27.076 -3.157 1.00 0.00 W1 O +ATOM 17053 H1 TIP3X4855 8.872 27.323 -2.731 1.00 0.00 W1 H +ATOM 17054 H2 TIP3X4855 9.463 26.981 -4.082 1.00 0.00 W1 H +ATOM 17055 OH2 TIP3X4856 6.318 27.301 -11.271 1.00 0.00 W1 O +ATOM 17056 H1 TIP3X4856 5.611 27.448 -11.899 1.00 0.00 W1 H +ATOM 17057 H2 TIP3X4856 5.981 27.646 -10.444 1.00 0.00 W1 H +ATOM 17058 OH2 TIP3X4857 2.883 28.213 -2.559 1.00 0.00 W1 O +ATOM 17059 H1 TIP3X4857 3.617 28.824 -2.624 1.00 0.00 W1 H +ATOM 17060 H2 TIP3X4857 2.571 28.307 -1.660 1.00 0.00 W1 H +ATOM 17061 OH2 TIP3X4858 2.473 29.918 -8.458 1.00 0.00 W1 O +ATOM 17062 H1 TIP3X4858 1.887 29.177 -8.611 1.00 0.00 W1 H +ATOM 17063 H2 TIP3X4858 2.916 30.051 -9.296 1.00 0.00 W1 H +ATOM 17064 OH2 TIP3X4859 10.826 15.931 -7.377 1.00 0.00 W1 O +ATOM 17065 H1 TIP3X4859 11.158 15.856 -8.272 1.00 0.00 W1 H +ATOM 17066 H2 TIP3X4859 10.781 16.874 -7.216 1.00 0.00 W1 H +ATOM 17067 OH2 TIP3X4860 8.064 18.060 -7.143 1.00 0.00 W1 O +ATOM 17068 H1 TIP3X4860 7.702 18.549 -7.882 1.00 0.00 W1 H +ATOM 17069 H2 TIP3X4860 7.332 17.971 -6.533 1.00 0.00 W1 H +ATOM 17070 OH2 TIP3X4861 6.783 16.045 -13.215 1.00 0.00 W1 O +ATOM 17071 H1 TIP3X4861 7.639 15.789 -12.869 1.00 0.00 W1 H +ATOM 17072 H2 TIP3X4861 6.265 15.241 -13.190 1.00 0.00 W1 H +ATOM 17073 OH2 TIP3X4862 9.535 15.888 -12.171 1.00 0.00 W1 O +ATOM 17074 H1 TIP3X4862 9.990 15.152 -11.763 1.00 0.00 W1 H +ATOM 17075 H2 TIP3X4862 9.942 15.975 -13.033 1.00 0.00 W1 H +ATOM 17076 OH2 TIP3X4863 4.174 30.467 -0.717 1.00 0.00 W1 O +ATOM 17077 H1 TIP3X4863 3.924 31.224 -1.246 1.00 0.00 W1 H +ATOM 17078 H2 TIP3X4863 5.085 30.298 -0.956 1.00 0.00 W1 H +ATOM 17079 OH2 TIP3X4864 9.181 29.161 -10.416 1.00 0.00 W1 O +ATOM 17080 H1 TIP3X4864 9.842 28.519 -10.156 1.00 0.00 W1 H +ATOM 17081 H2 TIP3X4864 9.168 29.796 -9.700 1.00 0.00 W1 H +ATOM 17082 OH2 TIP3X4865 6.920 30.064 -1.507 1.00 0.00 W1 O +ATOM 17083 H1 TIP3X4865 7.138 29.171 -1.236 1.00 0.00 W1 H +ATOM 17084 H2 TIP3X4865 7.528 30.618 -1.017 1.00 0.00 W1 H +ATOM 17085 OH2 TIP3X4866 5.867 18.182 -11.462 1.00 0.00 W1 O +ATOM 17086 H1 TIP3X4866 6.524 17.523 -11.685 1.00 0.00 W1 H +ATOM 17087 H2 TIP3X4866 5.909 18.251 -10.508 1.00 0.00 W1 H +ATOM 17088 OH2 TIP3X4867 0.580 16.520 -2.006 1.00 0.00 W1 O +ATOM 17089 H1 TIP3X4867 1.328 16.325 -2.570 1.00 0.00 W1 H +ATOM 17090 H2 TIP3X4867 0.788 16.095 -1.175 1.00 0.00 W1 H +ATOM 17091 OH2 TIP3X4868 11.699 29.247 -12.405 1.00 0.00 W1 O +ATOM 17092 H1 TIP3X4868 11.844 28.307 -12.302 1.00 0.00 W1 H +ATOM 17093 H2 TIP3X4868 12.523 29.580 -12.762 1.00 0.00 W1 H +ATOM 17094 OH2 TIP3X4869 13.367 16.014 -1.178 1.00 0.00 W1 O +ATOM 17095 H1 TIP3X4869 12.753 16.088 -1.908 1.00 0.00 W1 H +ATOM 17096 H2 TIP3X4869 14.137 16.509 -1.459 1.00 0.00 W1 H +ATOM 17097 OH2 TIP3X4870 4.161 30.227 -10.691 1.00 0.00 W1 O +ATOM 17098 H1 TIP3X4870 4.154 30.272 -11.647 1.00 0.00 W1 H +ATOM 17099 H2 TIP3X4870 4.968 30.673 -10.435 1.00 0.00 W1 H +ATOM 17100 OH2 TIP3X4871 15.070 29.165 -2.742 1.00 0.00 W1 O +ATOM 17101 H1 TIP3X4871 14.347 29.716 -2.441 1.00 0.00 W1 H +ATOM 17102 H2 TIP3X4871 15.858 29.664 -2.528 1.00 0.00 W1 H +ATOM 17103 OH2 TIP3X4872 2.695 18.487 -11.062 1.00 0.00 W1 O +ATOM 17104 H1 TIP3X4872 2.052 18.876 -11.654 1.00 0.00 W1 H +ATOM 17105 H2 TIP3X4872 3.498 18.984 -11.220 1.00 0.00 W1 H +ATOM 17106 OH2 TIP3X4873 4.124 27.086 -13.330 1.00 0.00 W1 O +ATOM 17107 H1 TIP3X4873 4.085 26.458 -14.052 1.00 0.00 W1 H +ATOM 17108 H2 TIP3X4873 3.405 26.833 -12.752 1.00 0.00 W1 H +ATOM 17109 OH2 TIP3X4874 2.019 26.614 4.309 1.00 0.00 W1 O +ATOM 17110 H1 TIP3X4874 2.201 26.538 5.246 1.00 0.00 W1 H +ATOM 17111 H2 TIP3X4874 1.995 27.557 4.145 1.00 0.00 W1 H +ATOM 17112 OH2 TIP3X4875 13.121 24.105 8.047 1.00 0.00 W1 O +ATOM 17113 H1 TIP3X4875 13.356 24.370 7.158 1.00 0.00 W1 H +ATOM 17114 H2 TIP3X4875 13.950 23.842 8.446 1.00 0.00 W1 H +ATOM 17115 OH2 TIP3X4876 5.105 23.829 4.026 1.00 0.00 W1 O +ATOM 17116 H1 TIP3X4876 5.136 24.738 4.323 1.00 0.00 W1 H +ATOM 17117 H2 TIP3X4876 5.613 23.346 4.678 1.00 0.00 W1 H +ATOM 17118 OH2 TIP3X4877 12.908 27.988 6.169 1.00 0.00 W1 O +ATOM 17119 H1 TIP3X4877 12.634 28.478 6.944 1.00 0.00 W1 H +ATOM 17120 H2 TIP3X4877 12.383 27.188 6.192 1.00 0.00 W1 H +ATOM 17121 OH2 TIP3X4878 11.425 26.431 3.212 1.00 0.00 W1 O +ATOM 17122 H1 TIP3X4878 11.587 26.203 2.297 1.00 0.00 W1 H +ATOM 17123 H2 TIP3X4878 10.496 26.660 3.242 1.00 0.00 W1 H +ATOM 17124 OH2 TIP3X4879 15.273 26.963 7.997 1.00 0.00 W1 O +ATOM 17125 H1 TIP3X4879 14.721 27.046 7.219 1.00 0.00 W1 H +ATOM 17126 H2 TIP3X4879 14.662 26.747 8.702 1.00 0.00 W1 H +ATOM 17127 OH2 TIP3X4880 1.909 28.227 10.448 1.00 0.00 W1 O +ATOM 17128 H1 TIP3X4880 2.315 28.431 11.291 1.00 0.00 W1 H +ATOM 17129 H2 TIP3X4880 1.338 27.482 10.630 1.00 0.00 W1 H +ATOM 17130 OH2 TIP3X4881 9.284 29.852 9.674 1.00 0.00 W1 O +ATOM 17131 H1 TIP3X4881 9.585 28.952 9.796 1.00 0.00 W1 H +ATOM 17132 H2 TIP3X4881 9.909 30.233 9.057 1.00 0.00 W1 H +ATOM 17133 OH2 TIP3X4882 12.717 29.809 9.554 1.00 0.00 W1 O +ATOM 17134 H1 TIP3X4882 12.281 30.632 9.334 1.00 0.00 W1 H +ATOM 17135 H2 TIP3X4882 13.646 30.035 9.603 1.00 0.00 W1 H +ATOM 17136 OH2 TIP3X4883 5.165 29.384 8.683 1.00 0.00 W1 O +ATOM 17137 H1 TIP3X4883 5.520 30.233 8.420 1.00 0.00 W1 H +ATOM 17138 H2 TIP3X4883 4.230 29.443 8.487 1.00 0.00 W1 H +ATOM 17139 OH2 TIP3X4884 10.006 21.276 7.585 1.00 0.00 W1 O +ATOM 17140 H1 TIP3X4884 9.929 20.466 7.080 1.00 0.00 W1 H +ATOM 17141 H2 TIP3X4884 10.949 21.415 7.672 1.00 0.00 W1 H +ATOM 17142 OH2 TIP3X4885 6.029 17.374 9.947 1.00 0.00 W1 O +ATOM 17143 H1 TIP3X4885 6.287 16.636 10.500 1.00 0.00 W1 H +ATOM 17144 H2 TIP3X4885 5.353 17.017 9.371 1.00 0.00 W1 H +ATOM 17145 OH2 TIP3X4886 14.273 18.378 6.370 1.00 0.00 W1 O +ATOM 17146 H1 TIP3X4886 13.965 18.716 7.211 1.00 0.00 W1 H +ATOM 17147 H2 TIP3X4886 14.341 17.433 6.501 1.00 0.00 W1 H +ATOM 17148 OH2 TIP3X4887 12.870 19.573 8.324 1.00 0.00 W1 O +ATOM 17149 H1 TIP3X4887 13.446 19.345 9.054 1.00 0.00 W1 H +ATOM 17150 H2 TIP3X4887 11.996 19.319 8.618 1.00 0.00 W1 H +ATOM 17151 OH2 TIP3X4888 5.917 20.698 9.695 1.00 0.00 W1 O +ATOM 17152 H1 TIP3X4888 6.420 19.996 10.107 1.00 0.00 W1 H +ATOM 17153 H2 TIP3X4888 6.574 21.340 9.428 1.00 0.00 W1 H +ATOM 17154 OH2 TIP3X4889 13.394 21.746 6.592 1.00 0.00 W1 O +ATOM 17155 H1 TIP3X4889 13.435 20.847 6.916 1.00 0.00 W1 H +ATOM 17156 H2 TIP3X4889 13.276 22.279 7.379 1.00 0.00 W1 H +ATOM 17157 OH2 TIP3X4890 12.078 18.390 4.461 1.00 0.00 W1 O +ATOM 17158 H1 TIP3X4890 12.903 18.574 4.910 1.00 0.00 W1 H +ATOM 17159 H2 TIP3X4890 12.155 18.845 3.622 1.00 0.00 W1 H +ATOM 17160 OH2 TIP3X4891 8.261 24.361 10.532 1.00 0.00 W1 O +ATOM 17161 H1 TIP3X4891 9.138 24.383 10.149 1.00 0.00 W1 H +ATOM 17162 H2 TIP3X4891 7.995 25.280 10.578 1.00 0.00 W1 H +ATOM 17163 OH2 TIP3X4892 7.411 26.909 10.342 1.00 0.00 W1 O +ATOM 17164 H1 TIP3X4892 7.387 27.136 9.413 1.00 0.00 W1 H +ATOM 17165 H2 TIP3X4892 6.491 26.855 10.601 1.00 0.00 W1 H +ATOM 17166 OH2 TIP3X4893 2.274 18.791 7.180 1.00 0.00 W1 O +ATOM 17167 H1 TIP3X4893 1.949 19.670 7.371 1.00 0.00 W1 H +ATOM 17168 H2 TIP3X4893 2.151 18.688 6.237 1.00 0.00 W1 H +ATOM 17169 OH2 TIP3X4894 4.430 22.348 7.193 1.00 0.00 W1 O +ATOM 17170 H1 TIP3X4894 3.747 21.898 6.696 1.00 0.00 W1 H +ATOM 17171 H2 TIP3X4894 4.916 21.645 7.624 1.00 0.00 W1 H +ATOM 17172 OH2 TIP3X4895 10.486 27.273 9.589 1.00 0.00 W1 O +ATOM 17173 H1 TIP3X4895 10.244 26.686 8.872 1.00 0.00 W1 H +ATOM 17174 H2 TIP3X4895 11.436 27.183 9.662 1.00 0.00 W1 H +ATOM 17175 OH2 TIP3X4896 14.784 30.907 6.370 1.00 0.00 W1 O +ATOM 17176 H1 TIP3X4896 14.778 30.439 7.205 1.00 0.00 W1 H +ATOM 17177 H2 TIP3X4896 13.903 30.778 6.017 1.00 0.00 W1 H +ATOM 17178 OH2 TIP3X4897 6.656 27.244 7.392 1.00 0.00 W1 O +ATOM 17179 H1 TIP3X4897 6.084 26.524 7.661 1.00 0.00 W1 H +ATOM 17180 H2 TIP3X4897 6.195 28.034 7.674 1.00 0.00 W1 H +ATOM 17181 OH2 TIP3X4898 8.877 17.695 11.962 1.00 0.00 W1 O +ATOM 17182 H1 TIP3X4898 8.135 18.175 12.329 1.00 0.00 W1 H +ATOM 17183 H2 TIP3X4898 8.497 16.883 11.628 1.00 0.00 W1 H +ATOM 17184 OH2 TIP3X4899 4.229 18.400 1.764 1.00 0.00 W1 O +ATOM 17185 H1 TIP3X4899 4.131 17.738 2.448 1.00 0.00 W1 H +ATOM 17186 H2 TIP3X4899 4.046 17.932 0.949 1.00 0.00 W1 H +ATOM 17187 OH2 TIP3X4900 15.123 19.322 9.953 1.00 0.00 W1 O +ATOM 17188 H1 TIP3X4900 15.642 19.991 9.506 1.00 0.00 W1 H +ATOM 17189 H2 TIP3X4900 15.565 19.198 10.793 1.00 0.00 W1 H +ATOM 17190 OH2 TIP3X4901 1.181 15.675 4.113 1.00 0.00 W1 O +ATOM 17191 H1 TIP3X4901 1.906 16.296 4.182 1.00 0.00 W1 H +ATOM 17192 H2 TIP3X4901 0.808 15.642 4.995 1.00 0.00 W1 H +ATOM 17193 OH2 TIP3X4902 6.447 21.910 14.100 1.00 0.00 W1 O +ATOM 17194 H1 TIP3X4902 7.311 22.309 13.998 1.00 0.00 W1 H +ATOM 17195 H2 TIP3X4902 6.599 20.973 13.977 1.00 0.00 W1 H +ATOM 17196 OH2 TIP3X4903 9.613 26.820 6.839 1.00 0.00 W1 O +ATOM 17197 H1 TIP3X4903 9.707 25.957 6.436 1.00 0.00 W1 H +ATOM 17198 H2 TIP3X4903 8.680 27.020 6.763 1.00 0.00 W1 H +ATOM 17199 OH2 TIP3X4904 8.225 25.104 4.370 1.00 0.00 W1 O +ATOM 17200 H1 TIP3X4904 7.660 24.490 4.840 1.00 0.00 W1 H +ATOM 17201 H2 TIP3X4904 7.751 25.935 4.398 1.00 0.00 W1 H +ATOM 17202 OH2 TIP3X4905 0.762 25.617 10.827 1.00 0.00 W1 O +ATOM 17203 H1 TIP3X4905 0.228 25.016 10.309 1.00 0.00 W1 H +ATOM 17204 H2 TIP3X4905 0.292 25.704 11.656 1.00 0.00 W1 H +ATOM 17205 OH2 TIP3X4906 12.059 24.638 5.195 1.00 0.00 W1 O +ATOM 17206 H1 TIP3X4906 12.003 23.723 4.918 1.00 0.00 W1 H +ATOM 17207 H2 TIP3X4906 11.886 25.141 4.399 1.00 0.00 W1 H +ATOM 17208 OH2 TIP3X4907 12.356 25.152 12.219 1.00 0.00 W1 O +ATOM 17209 H1 TIP3X4907 11.453 25.236 12.527 1.00 0.00 W1 H +ATOM 17210 H2 TIP3X4907 12.524 24.210 12.223 1.00 0.00 W1 H +ATOM 17211 OH2 TIP3X4908 14.722 23.112 10.025 1.00 0.00 W1 O +ATOM 17212 H1 TIP3X4908 15.385 22.431 9.906 1.00 0.00 W1 H +ATOM 17213 H2 TIP3X4908 14.006 22.672 10.484 1.00 0.00 W1 H +ATOM 17214 OH2 TIP3X4909 3.867 22.799 15.169 1.00 0.00 W1 O +ATOM 17215 H1 TIP3X4909 3.338 22.565 14.407 1.00 0.00 W1 H +ATOM 17216 H2 TIP3X4909 4.762 22.846 14.835 1.00 0.00 W1 H +ATOM 17217 OH2 TIP3X4910 4.777 26.005 10.731 1.00 0.00 W1 O +ATOM 17218 H1 TIP3X4910 4.732 25.450 11.509 1.00 0.00 W1 H +ATOM 17219 H2 TIP3X4910 4.144 26.703 10.897 1.00 0.00 W1 H +ATOM 17220 OH2 TIP3X4911 13.449 27.135 10.480 1.00 0.00 W1 O +ATOM 17221 H1 TIP3X4911 13.872 27.903 10.864 1.00 0.00 W1 H +ATOM 17222 H2 TIP3X4911 13.145 26.627 11.233 1.00 0.00 W1 H +ATOM 17223 OH2 TIP3X4912 11.536 29.110 12.305 1.00 0.00 W1 O +ATOM 17224 H1 TIP3X4912 10.829 28.481 12.163 1.00 0.00 W1 H +ATOM 17225 H2 TIP3X4912 11.865 29.305 11.428 1.00 0.00 W1 H +ATOM 17226 OH2 TIP3X4913 11.787 27.646 14.702 1.00 0.00 W1 O +ATOM 17227 H1 TIP3X4913 11.154 27.040 14.318 1.00 0.00 W1 H +ATOM 17228 H2 TIP3X4913 11.901 28.327 14.038 1.00 0.00 W1 H +ATOM 17229 OH2 TIP3X4914 15.398 29.555 8.768 1.00 0.00 W1 O +ATOM 17230 H1 TIP3X4914 16.075 29.396 9.425 1.00 0.00 W1 H +ATOM 17231 H2 TIP3X4914 15.163 28.683 8.449 1.00 0.00 W1 H +ATOM 17232 OH2 TIP3X4915 8.078 25.972 0.815 1.00 0.00 W1 O +ATOM 17233 H1 TIP3X4915 7.383 25.350 1.030 1.00 0.00 W1 H +ATOM 17234 H2 TIP3X4915 8.060 26.608 1.530 1.00 0.00 W1 H +ATOM 17235 OH2 TIP3X4916 15.458 24.736 0.252 1.00 0.00 W1 O +ATOM 17236 H1 TIP3X4916 15.195 23.986 -0.282 1.00 0.00 W1 H +ATOM 17237 H2 TIP3X4916 15.204 25.500 -0.266 1.00 0.00 W1 H +ATOM 17238 OH2 TIP3X4917 1.406 28.432 -0.031 1.00 0.00 W1 O +ATOM 17239 H1 TIP3X4917 1.852 27.883 0.614 1.00 0.00 W1 H +ATOM 17240 H2 TIP3X4917 0.510 28.098 -0.053 1.00 0.00 W1 H +ATOM 17241 OH2 TIP3X4918 13.500 30.561 1.227 1.00 0.00 W1 O +ATOM 17242 H1 TIP3X4918 14.385 30.233 1.069 1.00 0.00 W1 H +ATOM 17243 H2 TIP3X4918 13.270 31.029 0.425 1.00 0.00 W1 H +ATOM 17244 OH2 TIP3X4919 14.892 26.223 13.305 1.00 0.00 W1 O +ATOM 17245 H1 TIP3X4919 14.782 27.172 13.364 1.00 0.00 W1 H +ATOM 17246 H2 TIP3X4919 13.999 25.878 13.294 1.00 0.00 W1 H +ATOM 17247 OH2 TIP3X4920 1.578 29.049 2.923 1.00 0.00 W1 O +ATOM 17248 H1 TIP3X4920 1.510 29.885 3.384 1.00 0.00 W1 H +ATOM 17249 H2 TIP3X4920 0.683 28.711 2.907 1.00 0.00 W1 H +ATOM 17250 OH2 TIP3X4921 14.158 27.542 0.568 1.00 0.00 W1 O +ATOM 17251 H1 TIP3X4921 14.190 27.462 1.521 1.00 0.00 W1 H +ATOM 17252 H2 TIP3X4921 13.325 27.979 0.391 1.00 0.00 W1 H +ATOM 17253 OH2 TIP3X4922 10.529 15.837 13.452 1.00 0.00 W1 O +ATOM 17254 H1 TIP3X4922 10.222 16.585 12.939 1.00 0.00 W1 H +ATOM 17255 H2 TIP3X4922 10.583 15.120 12.820 1.00 0.00 W1 H +ATOM 17256 OH2 TIP3X4923 4.743 29.753 11.481 1.00 0.00 W1 O +ATOM 17257 H1 TIP3X4923 5.591 29.991 11.854 1.00 0.00 W1 H +ATOM 17258 H2 TIP3X4923 4.954 29.373 10.628 1.00 0.00 W1 H +ATOM 17259 OH2 TIP3X4924 3.209 17.772 14.831 1.00 0.00 W1 O +ATOM 17260 H1 TIP3X4924 2.332 17.861 15.205 1.00 0.00 W1 H +ATOM 17261 H2 TIP3X4924 3.272 18.484 14.195 1.00 0.00 W1 H +ATOM 17262 OH2 TIP3X4925 9.406 19.719 0.562 1.00 0.00 W1 O +ATOM 17263 H1 TIP3X4925 9.240 20.016 -0.333 1.00 0.00 W1 H +ATOM 17264 H2 TIP3X4925 8.535 19.595 0.939 1.00 0.00 W1 H +ATOM 17265 OH2 TIP3X4926 14.804 27.479 3.610 1.00 0.00 W1 O +ATOM 17266 H1 TIP3X4926 15.377 26.742 3.823 1.00 0.00 W1 H +ATOM 17267 H2 TIP3X4926 14.473 27.778 4.457 1.00 0.00 W1 H +ATOM 17268 OH2 TIP3X4927 10.065 16.515 0.539 1.00 0.00 W1 O +ATOM 17269 H1 TIP3X4927 10.797 17.131 0.563 1.00 0.00 W1 H +ATOM 17270 H2 TIP3X4927 10.306 15.883 -0.138 1.00 0.00 W1 H +ATOM 17271 OH2 TIP3X4928 14.597 16.609 10.804 1.00 0.00 W1 O +ATOM 17272 H1 TIP3X4928 15.089 15.979 11.331 1.00 0.00 W1 H +ATOM 17273 H2 TIP3X4928 15.197 16.851 10.098 1.00 0.00 W1 H +ATOM 17274 OH2 TIP3X4929 2.104 25.829 6.882 1.00 0.00 W1 O +ATOM 17275 H1 TIP3X4929 1.436 26.153 7.486 1.00 0.00 W1 H +ATOM 17276 H2 TIP3X4929 2.896 25.760 7.414 1.00 0.00 W1 H +ATOM 17277 OH2 TIP3X4930 7.101 27.248 13.992 1.00 0.00 W1 O +ATOM 17278 H1 TIP3X4930 7.324 26.870 14.843 1.00 0.00 W1 H +ATOM 17279 H2 TIP3X4930 6.494 26.619 13.602 1.00 0.00 W1 H +ATOM 17280 OH2 TIP3X4931 10.580 18.553 9.405 1.00 0.00 W1 O +ATOM 17281 H1 TIP3X4931 10.639 18.371 10.343 1.00 0.00 W1 H +ATOM 17282 H2 TIP3X4931 9.642 18.640 9.236 1.00 0.00 W1 H +ATOM 17283 OH2 TIP3X4932 6.772 19.210 13.584 1.00 0.00 W1 O +ATOM 17284 H1 TIP3X4932 5.905 19.140 13.184 1.00 0.00 W1 H +ATOM 17285 H2 TIP3X4932 6.717 18.669 14.372 1.00 0.00 W1 H +ATOM 17286 OH2 TIP3X4933 14.258 21.930 15.337 1.00 0.00 W1 O +ATOM 17287 H1 TIP3X4933 15.052 21.397 15.320 1.00 0.00 W1 H +ATOM 17288 H2 TIP3X4933 13.964 21.895 16.247 1.00 0.00 W1 H +ATOM 17289 OH2 TIP3X4934 2.443 15.797 11.255 1.00 0.00 W1 O +ATOM 17290 H1 TIP3X4934 2.217 16.250 10.443 1.00 0.00 W1 H +ATOM 17291 H2 TIP3X4934 3.273 15.360 11.064 1.00 0.00 W1 H +ATOM 17292 OH2 TIP3X4935 3.008 20.846 1.490 1.00 0.00 W1 O +ATOM 17293 H1 TIP3X4935 3.430 21.492 0.924 1.00 0.00 W1 H +ATOM 17294 H2 TIP3X4935 3.720 20.271 1.771 1.00 0.00 W1 H +ATOM 17295 OH2 TIP3X4936 3.532 21.503 10.801 1.00 0.00 W1 O +ATOM 17296 H1 TIP3X4936 3.448 22.294 11.333 1.00 0.00 W1 H +ATOM 17297 H2 TIP3X4936 4.447 21.499 10.520 1.00 0.00 W1 H +ATOM 17298 OH2 TIP3X4937 2.715 22.221 3.986 1.00 0.00 W1 O +ATOM 17299 H1 TIP3X4937 2.778 21.932 3.076 1.00 0.00 W1 H +ATOM 17300 H2 TIP3X4937 3.490 22.766 4.119 1.00 0.00 W1 H +ATOM 17301 OH2 TIP3X4938 11.735 18.791 1.746 1.00 0.00 W1 O +ATOM 17302 H1 TIP3X4938 11.028 19.279 1.326 1.00 0.00 W1 H +ATOM 17303 H2 TIP3X4938 12.460 18.835 1.123 1.00 0.00 W1 H +ATOM 17304 OH2 TIP3X4939 0.286 19.677 12.834 1.00 0.00 W1 O +ATOM 17305 H1 TIP3X4939 -0.619 19.971 12.945 1.00 0.00 W1 H +ATOM 17306 H2 TIP3X4939 0.426 19.058 13.551 1.00 0.00 W1 H +ATOM 17307 OH2 TIP3X4940 1.429 16.515 8.817 1.00 0.00 W1 O +ATOM 17308 H1 TIP3X4940 1.536 15.813 8.174 1.00 0.00 W1 H +ATOM 17309 H2 TIP3X4940 1.564 17.320 8.318 1.00 0.00 W1 H +ATOM 17310 OH2 TIP3X4941 12.951 20.143 13.704 1.00 0.00 W1 O +ATOM 17311 H1 TIP3X4941 13.262 20.721 14.400 1.00 0.00 W1 H +ATOM 17312 H2 TIP3X4941 12.007 20.079 13.849 1.00 0.00 W1 H +ATOM 17313 OH2 TIP3X4942 9.994 20.148 13.651 1.00 0.00 W1 O +ATOM 17314 H1 TIP3X4942 9.634 20.717 12.970 1.00 0.00 W1 H +ATOM 17315 H2 TIP3X4942 9.656 19.278 13.440 1.00 0.00 W1 H +ATOM 17316 OH2 TIP3X4943 8.197 20.618 3.517 1.00 0.00 W1 O +ATOM 17317 H1 TIP3X4943 8.286 21.197 2.760 1.00 0.00 W1 H +ATOM 17318 H2 TIP3X4943 7.427 20.083 3.320 1.00 0.00 W1 H +ATOM 17319 OH2 TIP3X4944 6.500 19.949 1.204 1.00 0.00 W1 O +ATOM 17320 H1 TIP3X4944 6.062 20.142 0.375 1.00 0.00 W1 H +ATOM 17321 H2 TIP3X4944 6.093 19.138 1.508 1.00 0.00 W1 H +ATOM 17322 OH2 TIP3X4945 7.210 17.011 14.993 1.00 0.00 W1 O +ATOM 17323 H1 TIP3X4945 6.744 16.624 15.734 1.00 0.00 W1 H +ATOM 17324 H2 TIP3X4945 8.124 17.044 15.276 1.00 0.00 W1 H +ATOM 17325 OH2 TIP3X4946 12.773 22.356 11.675 1.00 0.00 W1 O +ATOM 17326 H1 TIP3X4946 12.793 21.706 12.378 1.00 0.00 W1 H +ATOM 17327 H2 TIP3X4946 11.939 22.204 11.231 1.00 0.00 W1 H +ATOM 17328 OH2 TIP3X4947 0.848 19.456 0.144 1.00 0.00 W1 O +ATOM 17329 H1 TIP3X4947 0.092 19.264 0.698 1.00 0.00 W1 H +ATOM 17330 H2 TIP3X4947 1.382 20.055 0.667 1.00 0.00 W1 H +ATOM 17331 OH2 TIP3X4948 0.767 30.950 0.631 1.00 0.00 W1 O +ATOM 17332 H1 TIP3X4948 1.183 30.202 1.060 1.00 0.00 W1 H +ATOM 17333 H2 TIP3X4948 0.780 31.643 1.291 1.00 0.00 W1 H +ATOM 17334 OH2 TIP3X4949 9.515 19.110 5.624 1.00 0.00 W1 O +ATOM 17335 H1 TIP3X4949 9.178 19.460 4.800 1.00 0.00 W1 H +ATOM 17336 H2 TIP3X4949 10.411 18.842 5.423 1.00 0.00 W1 H +ATOM 17337 OH2 TIP3X4950 4.970 18.420 7.368 1.00 0.00 W1 O +ATOM 17338 H1 TIP3X4950 4.028 18.373 7.209 1.00 0.00 W1 H +ATOM 17339 H2 TIP3X4950 5.109 19.294 7.732 1.00 0.00 W1 H +ATOM 17340 OH2 TIP3X4951 0.332 19.546 4.162 1.00 0.00 W1 O +ATOM 17341 H1 TIP3X4951 0.058 19.422 5.070 1.00 0.00 W1 H +ATOM 17342 H2 TIP3X4951 0.138 20.465 3.976 1.00 0.00 W1 H +ATOM 17343 OH2 TIP3X4952 4.333 18.873 12.222 1.00 0.00 W1 O +ATOM 17344 H1 TIP3X4952 4.355 18.067 11.706 1.00 0.00 W1 H +ATOM 17345 H2 TIP3X4952 3.939 19.521 11.638 1.00 0.00 W1 H +ATOM 17346 OH2 TIP3X4953 4.916 25.409 8.027 1.00 0.00 W1 O +ATOM 17347 H1 TIP3X4953 4.844 24.473 7.839 1.00 0.00 W1 H +ATOM 17348 H2 TIP3X4953 4.920 25.462 8.983 1.00 0.00 W1 H +ATOM 17349 OH2 TIP3X4954 9.105 22.428 12.589 1.00 0.00 W1 O +ATOM 17350 H1 TIP3X4954 9.517 23.259 12.826 1.00 0.00 W1 H +ATOM 17351 H2 TIP3X4954 8.555 22.638 11.835 1.00 0.00 W1 H +ATOM 17352 OH2 TIP3X4955 14.900 17.794 1.914 1.00 0.00 W1 O +ATOM 17353 H1 TIP3X4955 15.335 18.021 2.736 1.00 0.00 W1 H +ATOM 17354 H2 TIP3X4955 14.380 17.019 2.123 1.00 0.00 W1 H +ATOM 17355 OH2 TIP3X4956 6.055 23.754 1.092 1.00 0.00 W1 O +ATOM 17356 H1 TIP3X4956 5.766 23.632 1.996 1.00 0.00 W1 H +ATOM 17357 H2 TIP3X4956 6.744 23.101 0.970 1.00 0.00 W1 H +ATOM 17358 OH2 TIP3X4957 12.758 22.270 2.160 1.00 0.00 W1 O +ATOM 17359 H1 TIP3X4957 11.893 22.071 2.519 1.00 0.00 W1 H +ATOM 17360 H2 TIP3X4957 13.315 22.391 2.929 1.00 0.00 W1 H +ATOM 17361 OH2 TIP3X4958 7.591 22.524 8.630 1.00 0.00 W1 O +ATOM 17362 H1 TIP3X4958 7.688 23.321 9.152 1.00 0.00 W1 H +ATOM 17363 H2 TIP3X4958 8.466 22.135 8.622 1.00 0.00 W1 H +ATOM 17364 OH2 TIP3X4959 7.336 22.906 5.546 1.00 0.00 W1 O +ATOM 17365 H1 TIP3X4959 7.958 22.310 5.128 1.00 0.00 W1 H +ATOM 17366 H2 TIP3X4959 7.362 22.669 6.473 1.00 0.00 W1 H +ATOM 17367 OH2 TIP3X4960 10.231 24.522 14.482 1.00 0.00 W1 O +ATOM 17368 H1 TIP3X4960 9.553 24.806 15.095 1.00 0.00 W1 H +ATOM 17369 H2 TIP3X4960 11.029 24.481 15.009 1.00 0.00 W1 H +ATOM 17370 OH2 TIP3X4961 2.741 23.937 12.178 1.00 0.00 W1 O +ATOM 17371 H1 TIP3X4961 3.258 24.343 12.874 1.00 0.00 W1 H +ATOM 17372 H2 TIP3X4961 2.358 24.674 11.703 1.00 0.00 W1 H +ATOM 17373 OH2 TIP3X4962 1.647 21.899 13.800 1.00 0.00 W1 O +ATOM 17374 H1 TIP3X4962 1.443 21.060 13.387 1.00 0.00 W1 H +ATOM 17375 H2 TIP3X4962 1.524 22.545 13.104 1.00 0.00 W1 H +ATOM 17376 OH2 TIP3X4963 1.540 22.772 6.623 1.00 0.00 W1 O +ATOM 17377 H1 TIP3X4963 1.896 23.645 6.453 1.00 0.00 W1 H +ATOM 17378 H2 TIP3X4963 1.438 22.382 5.755 1.00 0.00 W1 H +ATOM 17379 OH2 TIP3X4964 12.299 25.037 0.810 1.00 0.00 W1 O +ATOM 17380 H1 TIP3X4964 13.004 25.536 0.398 1.00 0.00 W1 H +ATOM 17381 H2 TIP3X4964 12.748 24.407 1.373 1.00 0.00 W1 H +ATOM 17382 OH2 TIP3X4965 14.895 22.384 4.172 1.00 0.00 W1 O +ATOM 17383 H1 TIP3X4965 14.608 22.557 5.069 1.00 0.00 W1 H +ATOM 17384 H2 TIP3X4965 15.408 23.156 3.932 1.00 0.00 W1 H +ATOM 17385 OH2 TIP3X4966 1.393 21.501 8.894 1.00 0.00 W1 O +ATOM 17386 H1 TIP3X4966 1.487 22.179 8.226 1.00 0.00 W1 H +ATOM 17387 H2 TIP3X4966 2.051 21.720 9.553 1.00 0.00 W1 H +ATOM 17388 OH2 TIP3X4967 4.180 30.008 2.158 1.00 0.00 W1 O +ATOM 17389 H1 TIP3X4967 3.951 30.368 1.301 1.00 0.00 W1 H +ATOM 17390 H2 TIP3X4967 3.767 29.145 2.174 1.00 0.00 W1 H +ATOM 17391 OH2 TIP3X4968 2.955 25.241 0.656 1.00 0.00 W1 O +ATOM 17392 H1 TIP3X4968 2.139 24.952 0.248 1.00 0.00 W1 H +ATOM 17393 H2 TIP3X4968 3.487 24.448 0.718 1.00 0.00 W1 H +ATOM 17394 OH2 TIP3X4969 4.373 26.081 13.731 1.00 0.00 W1 O +ATOM 17395 H1 TIP3X4969 3.800 26.683 13.257 1.00 0.00 W1 H +ATOM 17396 H2 TIP3X4969 3.899 25.885 14.539 1.00 0.00 W1 H +ATOM 17397 OH2 TIP3X4970 7.449 30.824 11.422 1.00 0.00 W1 O +ATOM 17398 H1 TIP3X4970 7.766 30.530 12.275 1.00 0.00 W1 H +ATOM 17399 H2 TIP3X4970 7.882 30.246 10.793 1.00 0.00 W1 H +ATOM 17400 OH2 TIP3X4971 12.155 31.065 5.555 1.00 0.00 W1 O +ATOM 17401 H1 TIP3X4971 11.742 30.374 5.037 1.00 0.00 W1 H +ATOM 17402 H2 TIP3X4971 11.959 31.872 5.079 1.00 0.00 W1 H +ATOM 17403 OH2 TIP3X4972 8.733 27.748 2.807 1.00 0.00 W1 O +ATOM 17404 H1 TIP3X4972 8.992 28.533 2.325 1.00 0.00 W1 H +ATOM 17405 H2 TIP3X4972 8.163 28.071 3.505 1.00 0.00 W1 H +ATOM 17406 OH2 TIP3X4973 8.750 22.902 1.878 1.00 0.00 W1 O +ATOM 17407 H1 TIP3X4973 9.573 22.975 1.396 1.00 0.00 W1 H +ATOM 17408 H2 TIP3X4973 8.757 23.646 2.480 1.00 0.00 W1 H +ATOM 17409 OH2 TIP3X4974 12.151 17.626 11.670 1.00 0.00 W1 O +ATOM 17410 H1 TIP3X4974 12.956 17.395 11.206 1.00 0.00 W1 H +ATOM 17411 H2 TIP3X4974 12.442 18.179 12.395 1.00 0.00 W1 H +ATOM 17412 OH2 TIP3X4975 0.116 24.727 3.076 1.00 0.00 W1 O +ATOM 17413 H1 TIP3X4975 -0.037 24.819 2.136 1.00 0.00 W1 H +ATOM 17414 H2 TIP3X4975 1.070 24.727 3.165 1.00 0.00 W1 H +ATOM 17415 OH2 TIP3X4976 10.878 24.315 9.672 1.00 0.00 W1 O +ATOM 17416 H1 TIP3X4976 11.424 24.977 10.098 1.00 0.00 W1 H +ATOM 17417 H2 TIP3X4976 11.337 24.115 8.856 1.00 0.00 W1 H +ATOM 17418 OH2 TIP3X4977 9.700 29.289 0.749 1.00 0.00 W1 O +ATOM 17419 H1 TIP3X4977 10.525 29.324 1.234 1.00 0.00 W1 H +ATOM 17420 H2 TIP3X4977 9.904 28.776 -0.033 1.00 0.00 W1 H +ATOM 17421 OH2 TIP3X4978 9.693 27.076 12.400 1.00 0.00 W1 O +ATOM 17422 H1 TIP3X4978 8.872 27.323 12.826 1.00 0.00 W1 H +ATOM 17423 H2 TIP3X4978 9.463 26.981 11.476 1.00 0.00 W1 H +ATOM 17424 OH2 TIP3X4979 6.318 27.301 4.287 1.00 0.00 W1 O +ATOM 17425 H1 TIP3X4979 5.611 27.448 3.659 1.00 0.00 W1 H +ATOM 17426 H2 TIP3X4979 5.981 27.646 5.114 1.00 0.00 W1 H +ATOM 17427 OH2 TIP3X4980 2.883 28.213 12.998 1.00 0.00 W1 O +ATOM 17428 H1 TIP3X4980 3.617 28.824 12.933 1.00 0.00 W1 H +ATOM 17429 H2 TIP3X4980 2.571 28.307 13.898 1.00 0.00 W1 H +ATOM 17430 OH2 TIP3X4981 2.473 29.918 7.100 1.00 0.00 W1 O +ATOM 17431 H1 TIP3X4981 1.887 29.177 6.946 1.00 0.00 W1 H +ATOM 17432 H2 TIP3X4981 2.916 30.051 6.261 1.00 0.00 W1 H +ATOM 17433 OH2 TIP3X4982 10.826 15.931 8.180 1.00 0.00 W1 O +ATOM 17434 H1 TIP3X4982 11.158 15.856 7.286 1.00 0.00 W1 H +ATOM 17435 H2 TIP3X4982 10.781 16.874 8.341 1.00 0.00 W1 H +ATOM 17436 OH2 TIP3X4983 8.064 18.060 8.415 1.00 0.00 W1 O +ATOM 17437 H1 TIP3X4983 7.702 18.549 7.676 1.00 0.00 W1 H +ATOM 17438 H2 TIP3X4983 7.332 17.971 9.025 1.00 0.00 W1 H +ATOM 17439 OH2 TIP3X4984 4.174 30.467 14.841 1.00 0.00 W1 O +ATOM 17440 H1 TIP3X4984 3.924 31.224 14.311 1.00 0.00 W1 H +ATOM 17441 H2 TIP3X4984 5.085 30.298 14.602 1.00 0.00 W1 H +ATOM 17442 OH2 TIP3X4985 9.181 29.161 5.141 1.00 0.00 W1 O +ATOM 17443 H1 TIP3X4985 9.842 28.519 5.401 1.00 0.00 W1 H +ATOM 17444 H2 TIP3X4985 9.168 29.796 5.858 1.00 0.00 W1 H +ATOM 17445 OH2 TIP3X4986 6.920 30.064 14.051 1.00 0.00 W1 O +ATOM 17446 H1 TIP3X4986 7.138 29.171 14.321 1.00 0.00 W1 H +ATOM 17447 H2 TIP3X4986 7.528 30.618 14.540 1.00 0.00 W1 H +ATOM 17448 OH2 TIP3X4987 5.867 18.182 4.095 1.00 0.00 W1 O +ATOM 17449 H1 TIP3X4987 6.524 17.523 3.873 1.00 0.00 W1 H +ATOM 17450 H2 TIP3X4987 5.909 18.251 5.049 1.00 0.00 W1 H +ATOM 17451 OH2 TIP3X4988 0.580 16.520 13.551 1.00 0.00 W1 O +ATOM 17452 H1 TIP3X4988 1.328 16.325 12.987 1.00 0.00 W1 H +ATOM 17453 H2 TIP3X4988 0.788 16.095 14.383 1.00 0.00 W1 H +ATOM 17454 OH2 TIP3X4989 11.699 29.247 3.153 1.00 0.00 W1 O +ATOM 17455 H1 TIP3X4989 11.844 28.307 3.256 1.00 0.00 W1 H +ATOM 17456 H2 TIP3X4989 12.523 29.580 2.795 1.00 0.00 W1 H +ATOM 17457 OH2 TIP3X4990 13.367 16.014 14.380 1.00 0.00 W1 O +ATOM 17458 H1 TIP3X4990 12.753 16.088 13.649 1.00 0.00 W1 H +ATOM 17459 H2 TIP3X4990 14.137 16.509 14.098 1.00 0.00 W1 H +ATOM 17460 OH2 TIP3X4991 4.161 30.227 4.866 1.00 0.00 W1 O +ATOM 17461 H1 TIP3X4991 4.154 30.272 3.910 1.00 0.00 W1 H +ATOM 17462 H2 TIP3X4991 4.968 30.673 5.122 1.00 0.00 W1 H +ATOM 17463 OH2 TIP3X4992 15.070 29.165 12.816 1.00 0.00 W1 O +ATOM 17464 H1 TIP3X4992 14.347 29.716 13.117 1.00 0.00 W1 H +ATOM 17465 H2 TIP3X4992 15.858 29.664 13.030 1.00 0.00 W1 H +ATOM 17466 OH2 TIP3X4993 2.695 18.487 4.496 1.00 0.00 W1 O +ATOM 17467 H1 TIP3X4993 2.052 18.876 3.903 1.00 0.00 W1 H +ATOM 17468 H2 TIP3X4993 3.498 18.984 4.338 1.00 0.00 W1 H +ATOM 17469 OH2 TIP3X4994 4.124 27.086 2.227 1.00 0.00 W1 O +ATOM 17470 H1 TIP3X4994 4.085 26.458 1.506 1.00 0.00 W1 H +ATOM 17471 H2 TIP3X4994 3.405 26.833 2.805 1.00 0.00 W1 H +ATOM 17472 OH2 TIP3X4995 2.019 26.614 19.866 1.00 0.00 W1 O +ATOM 17473 H1 TIP3X4995 2.201 26.538 20.803 1.00 0.00 W1 H +ATOM 17474 H2 TIP3X4995 1.995 27.557 19.702 1.00 0.00 W1 H +ATOM 17475 OH2 TIP3X4996 13.121 24.105 23.605 1.00 0.00 W1 O +ATOM 17476 H1 TIP3X4996 13.356 24.370 22.715 1.00 0.00 W1 H +ATOM 17477 H2 TIP3X4996 13.950 23.842 24.003 1.00 0.00 W1 H +ATOM 17478 OH2 TIP3X4997 5.105 23.829 19.583 1.00 0.00 W1 O +ATOM 17479 H1 TIP3X4997 5.136 24.738 19.880 1.00 0.00 W1 H +ATOM 17480 H2 TIP3X4997 5.613 23.346 20.235 1.00 0.00 W1 H +ATOM 17481 OH2 TIP3X4998 12.908 27.988 21.727 1.00 0.00 W1 O +ATOM 17482 H1 TIP3X4998 12.634 28.478 22.502 1.00 0.00 W1 H +ATOM 17483 H2 TIP3X4998 12.383 27.188 21.750 1.00 0.00 W1 H +ATOM 17484 OH2 TIP3X4999 11.425 26.431 18.770 1.00 0.00 W1 O +ATOM 17485 H1 TIP3X4999 11.587 26.203 17.855 1.00 0.00 W1 H +ATOM 17486 H2 TIP3X4999 10.496 26.660 18.799 1.00 0.00 W1 H +ATOM 17487 OH2 TIP3X5000 15.273 26.963 23.554 1.00 0.00 W1 O +ATOM 17488 H1 TIP3X5000 14.721 27.046 22.777 1.00 0.00 W1 H +ATOM 17489 H2 TIP3X5000 14.662 26.747 24.259 1.00 0.00 W1 H +ATOM 17490 OH2 TIP3X5001 1.909 28.227 26.005 1.00 0.00 W1 O +ATOM 17491 H1 TIP3X5001 2.315 28.431 26.848 1.00 0.00 W1 H +ATOM 17492 H2 TIP3X5001 1.338 27.482 26.188 1.00 0.00 W1 H +ATOM 17493 OH2 TIP3X5002 9.284 29.852 25.231 1.00 0.00 W1 O +ATOM 17494 H1 TIP3X5002 9.585 28.952 25.353 1.00 0.00 W1 H +ATOM 17495 H2 TIP3X5002 9.909 30.233 24.614 1.00 0.00 W1 H +ATOM 17496 OH2 TIP3X5003 12.717 29.809 25.111 1.00 0.00 W1 O +ATOM 17497 H1 TIP3X5003 12.281 30.632 24.892 1.00 0.00 W1 H +ATOM 17498 H2 TIP3X5003 13.646 30.035 25.161 1.00 0.00 W1 H +ATOM 17499 OH2 TIP3X5004 5.165 29.384 24.241 1.00 0.00 W1 O +ATOM 17500 H1 TIP3X5004 5.520 30.233 23.977 1.00 0.00 W1 H +ATOM 17501 H2 TIP3X5004 4.230 29.443 24.045 1.00 0.00 W1 H +ATOM 17502 OH2 TIP3X5005 10.006 21.276 23.142 1.00 0.00 W1 O +ATOM 17503 H1 TIP3X5005 9.929 20.466 22.638 1.00 0.00 W1 H +ATOM 17504 H2 TIP3X5005 10.949 21.415 23.230 1.00 0.00 W1 H +ATOM 17505 OH2 TIP3X5006 6.029 17.374 25.504 1.00 0.00 W1 O +ATOM 17506 H1 TIP3X5006 6.287 16.636 26.057 1.00 0.00 W1 H +ATOM 17507 H2 TIP3X5006 5.353 17.017 24.929 1.00 0.00 W1 H +ATOM 17508 OH2 TIP3X5007 14.273 18.378 21.927 1.00 0.00 W1 O +ATOM 17509 H1 TIP3X5007 13.965 18.716 22.768 1.00 0.00 W1 H +ATOM 17510 H2 TIP3X5007 14.341 17.433 22.059 1.00 0.00 W1 H +ATOM 17511 OH2 TIP3X5008 12.870 19.573 23.881 1.00 0.00 W1 O +ATOM 17512 H1 TIP3X5008 13.446 19.345 24.612 1.00 0.00 W1 H +ATOM 17513 H2 TIP3X5008 11.996 19.319 24.176 1.00 0.00 W1 H +ATOM 17514 OH2 TIP3X5009 5.917 20.698 25.252 1.00 0.00 W1 O +ATOM 17515 H1 TIP3X5009 6.420 19.996 25.664 1.00 0.00 W1 H +ATOM 17516 H2 TIP3X5009 6.574 21.340 24.986 1.00 0.00 W1 H +ATOM 17517 OH2 TIP3X5010 13.394 21.746 22.150 1.00 0.00 W1 O +ATOM 17518 H1 TIP3X5010 13.435 20.847 22.474 1.00 0.00 W1 H +ATOM 17519 H2 TIP3X5010 13.276 22.279 22.936 1.00 0.00 W1 H +ATOM 17520 OH2 TIP3X5011 12.078 18.390 20.018 1.00 0.00 W1 O +ATOM 17521 H1 TIP3X5011 12.903 18.574 20.467 1.00 0.00 W1 H +ATOM 17522 H2 TIP3X5011 12.155 18.845 19.179 1.00 0.00 W1 H +ATOM 17523 OH2 TIP3X5012 8.261 24.361 26.090 1.00 0.00 W1 O +ATOM 17524 H1 TIP3X5012 9.138 24.383 25.707 1.00 0.00 W1 H +ATOM 17525 H2 TIP3X5012 7.995 25.280 26.136 1.00 0.00 W1 H +ATOM 17526 OH2 TIP3X5013 7.411 26.909 25.900 1.00 0.00 W1 O +ATOM 17527 H1 TIP3X5013 7.387 27.136 24.970 1.00 0.00 W1 H +ATOM 17528 H2 TIP3X5013 6.491 26.855 26.158 1.00 0.00 W1 H +ATOM 17529 OH2 TIP3X5014 2.274 18.791 22.738 1.00 0.00 W1 O +ATOM 17530 H1 TIP3X5014 1.949 19.670 22.929 1.00 0.00 W1 H +ATOM 17531 H2 TIP3X5014 2.151 18.688 21.794 1.00 0.00 W1 H +ATOM 17532 OH2 TIP3X5015 4.430 22.348 22.750 1.00 0.00 W1 O +ATOM 17533 H1 TIP3X5015 3.747 21.898 22.253 1.00 0.00 W1 H +ATOM 17534 H2 TIP3X5015 4.916 21.645 23.182 1.00 0.00 W1 H +ATOM 17535 OH2 TIP3X5016 10.486 27.273 25.147 1.00 0.00 W1 O +ATOM 17536 H1 TIP3X5016 10.244 26.686 24.430 1.00 0.00 W1 H +ATOM 17537 H2 TIP3X5016 11.436 27.183 25.219 1.00 0.00 W1 H +ATOM 17538 OH2 TIP3X5017 14.784 30.907 21.927 1.00 0.00 W1 O +ATOM 17539 H1 TIP3X5017 14.778 30.439 22.762 1.00 0.00 W1 H +ATOM 17540 H2 TIP3X5017 13.903 30.778 21.574 1.00 0.00 W1 H +ATOM 17541 OH2 TIP3X5018 6.656 27.244 22.949 1.00 0.00 W1 O +ATOM 17542 H1 TIP3X5018 6.084 26.524 23.218 1.00 0.00 W1 H +ATOM 17543 H2 TIP3X5018 6.195 28.034 23.232 1.00 0.00 W1 H +ATOM 17544 OH2 TIP3X5019 8.877 17.695 27.520 1.00 0.00 W1 O +ATOM 17545 H1 TIP3X5019 8.135 18.175 27.887 1.00 0.00 W1 H +ATOM 17546 H2 TIP3X5019 8.497 16.883 27.185 1.00 0.00 W1 H +ATOM 17547 OH2 TIP3X5020 4.229 18.400 17.321 1.00 0.00 W1 O +ATOM 17548 H1 TIP3X5020 4.131 17.738 18.006 1.00 0.00 W1 H +ATOM 17549 H2 TIP3X5020 4.046 17.932 16.507 1.00 0.00 W1 H +ATOM 17550 OH2 TIP3X5021 15.123 19.322 25.511 1.00 0.00 W1 O +ATOM 17551 H1 TIP3X5021 15.642 19.991 25.063 1.00 0.00 W1 H +ATOM 17552 H2 TIP3X5021 15.565 19.198 26.351 1.00 0.00 W1 H +ATOM 17553 OH2 TIP3X5022 1.181 15.675 19.671 1.00 0.00 W1 O +ATOM 17554 H1 TIP3X5022 1.906 16.296 19.740 1.00 0.00 W1 H +ATOM 17555 H2 TIP3X5022 0.808 15.642 20.552 1.00 0.00 W1 H +ATOM 17556 OH2 TIP3X5023 6.447 21.910 29.657 1.00 0.00 W1 O +ATOM 17557 H1 TIP3X5023 7.311 22.309 29.556 1.00 0.00 W1 H +ATOM 17558 H2 TIP3X5023 6.599 20.973 29.534 1.00 0.00 W1 H +ATOM 17559 OH2 TIP3X5024 9.613 26.820 22.397 1.00 0.00 W1 O +ATOM 17560 H1 TIP3X5024 9.707 25.957 21.993 1.00 0.00 W1 H +ATOM 17561 H2 TIP3X5024 8.680 27.020 22.321 1.00 0.00 W1 H +ATOM 17562 OH2 TIP3X5025 8.225 25.104 19.928 1.00 0.00 W1 O +ATOM 17563 H1 TIP3X5025 7.660 24.490 20.397 1.00 0.00 W1 H +ATOM 17564 H2 TIP3X5025 7.751 25.935 19.956 1.00 0.00 W1 H +ATOM 17565 OH2 TIP3X5026 0.762 25.617 26.385 1.00 0.00 W1 O +ATOM 17566 H1 TIP3X5026 0.228 25.016 25.867 1.00 0.00 W1 H +ATOM 17567 H2 TIP3X5026 0.292 25.704 27.214 1.00 0.00 W1 H +ATOM 17568 OH2 TIP3X5027 12.059 24.638 20.752 1.00 0.00 W1 O +ATOM 17569 H1 TIP3X5027 12.003 23.723 20.476 1.00 0.00 W1 H +ATOM 17570 H2 TIP3X5027 11.886 25.141 19.956 1.00 0.00 W1 H +ATOM 17571 OH2 TIP3X5028 12.356 25.152 27.777 1.00 0.00 W1 O +ATOM 17572 H1 TIP3X5028 11.453 25.236 28.084 1.00 0.00 W1 H +ATOM 17573 H2 TIP3X5028 12.524 24.210 27.780 1.00 0.00 W1 H +ATOM 17574 OH2 TIP3X5029 14.722 23.112 25.582 1.00 0.00 W1 O +ATOM 17575 H1 TIP3X5029 15.385 22.431 25.463 1.00 0.00 W1 H +ATOM 17576 H2 TIP3X5029 14.006 22.672 26.041 1.00 0.00 W1 H +ATOM 17577 OH2 TIP3X5030 3.867 22.799 30.727 1.00 0.00 W1 O +ATOM 17578 H1 TIP3X5030 3.338 22.565 29.964 1.00 0.00 W1 H +ATOM 17579 H2 TIP3X5030 4.762 22.846 30.392 1.00 0.00 W1 H +ATOM 17580 OH2 TIP3X5031 4.777 26.005 26.288 1.00 0.00 W1 O +ATOM 17581 H1 TIP3X5031 4.732 25.450 27.067 1.00 0.00 W1 H +ATOM 17582 H2 TIP3X5031 4.144 26.703 26.454 1.00 0.00 W1 H +ATOM 17583 OH2 TIP3X5032 13.449 27.135 26.038 1.00 0.00 W1 O +ATOM 17584 H1 TIP3X5032 13.872 27.903 26.422 1.00 0.00 W1 H +ATOM 17585 H2 TIP3X5032 13.145 26.627 26.790 1.00 0.00 W1 H +ATOM 17586 OH2 TIP3X5033 11.536 29.110 27.863 1.00 0.00 W1 O +ATOM 17587 H1 TIP3X5033 10.829 28.481 27.720 1.00 0.00 W1 H +ATOM 17588 H2 TIP3X5033 11.865 29.305 26.985 1.00 0.00 W1 H +ATOM 17589 OH2 TIP3X5034 11.787 27.646 30.259 1.00 0.00 W1 O +ATOM 17590 H1 TIP3X5034 11.154 27.040 29.875 1.00 0.00 W1 H +ATOM 17591 H2 TIP3X5034 11.901 28.327 29.595 1.00 0.00 W1 H +ATOM 17592 OH2 TIP3X5035 15.398 29.555 24.326 1.00 0.00 W1 O +ATOM 17593 H1 TIP3X5035 16.075 29.396 24.982 1.00 0.00 W1 H +ATOM 17594 H2 TIP3X5035 15.163 28.683 24.007 1.00 0.00 W1 H +ATOM 17595 OH2 TIP3X5036 5.954 16.026 22.718 1.00 0.00 W1 O +ATOM 17596 H1 TIP3X5036 5.662 16.935 22.657 1.00 0.00 W1 H +ATOM 17597 H2 TIP3X5036 6.786 16.008 22.245 1.00 0.00 W1 H +ATOM 17598 OH2 TIP3X5037 8.078 25.972 16.373 1.00 0.00 W1 O +ATOM 17599 H1 TIP3X5037 7.383 25.350 16.587 1.00 0.00 W1 H +ATOM 17600 H2 TIP3X5037 8.060 26.608 17.088 1.00 0.00 W1 H +ATOM 17601 OH2 TIP3X5038 15.458 24.736 15.809 1.00 0.00 W1 O +ATOM 17602 H1 TIP3X5038 15.195 23.986 15.275 1.00 0.00 W1 H +ATOM 17603 H2 TIP3X5038 15.204 25.500 15.292 1.00 0.00 W1 H +ATOM 17604 OH2 TIP3X5039 1.406 28.432 15.526 1.00 0.00 W1 O +ATOM 17605 H1 TIP3X5039 1.852 27.883 16.172 1.00 0.00 W1 H +ATOM 17606 H2 TIP3X5039 0.510 28.098 15.505 1.00 0.00 W1 H +ATOM 17607 OH2 TIP3X5040 13.500 30.561 16.785 1.00 0.00 W1 O +ATOM 17608 H1 TIP3X5040 14.385 30.233 16.626 1.00 0.00 W1 H +ATOM 17609 H2 TIP3X5040 13.270 31.029 15.982 1.00 0.00 W1 H +ATOM 17610 OH2 TIP3X5041 14.892 26.223 28.862 1.00 0.00 W1 O +ATOM 17611 H1 TIP3X5041 14.782 27.172 28.921 1.00 0.00 W1 H +ATOM 17612 H2 TIP3X5041 13.999 25.878 28.852 1.00 0.00 W1 H +ATOM 17613 OH2 TIP3X5042 1.578 29.049 18.481 1.00 0.00 W1 O +ATOM 17614 H1 TIP3X5042 1.510 29.885 18.941 1.00 0.00 W1 H +ATOM 17615 H2 TIP3X5042 0.683 28.711 18.464 1.00 0.00 W1 H +ATOM 17616 OH2 TIP3X5043 14.158 27.542 16.125 1.00 0.00 W1 O +ATOM 17617 H1 TIP3X5043 14.190 27.462 17.079 1.00 0.00 W1 H +ATOM 17618 H2 TIP3X5043 13.325 27.979 15.948 1.00 0.00 W1 H +ATOM 17619 OH2 TIP3X5044 10.529 15.837 29.009 1.00 0.00 W1 O +ATOM 17620 H1 TIP3X5044 10.222 16.585 28.497 1.00 0.00 W1 H +ATOM 17621 H2 TIP3X5044 10.583 15.120 28.377 1.00 0.00 W1 H +ATOM 17622 OH2 TIP3X5045 4.743 29.753 27.038 1.00 0.00 W1 O +ATOM 17623 H1 TIP3X5045 5.591 29.991 27.412 1.00 0.00 W1 H +ATOM 17624 H2 TIP3X5045 4.954 29.373 26.185 1.00 0.00 W1 H +ATOM 17625 OH2 TIP3X5046 3.209 17.772 30.389 1.00 0.00 W1 O +ATOM 17626 H1 TIP3X5046 2.332 17.861 30.763 1.00 0.00 W1 H +ATOM 17627 H2 TIP3X5046 3.272 18.484 29.752 1.00 0.00 W1 H +ATOM 17628 OH2 TIP3X5047 9.406 19.719 16.119 1.00 0.00 W1 O +ATOM 17629 H1 TIP3X5047 9.240 20.016 15.224 1.00 0.00 W1 H +ATOM 17630 H2 TIP3X5047 8.535 19.595 16.496 1.00 0.00 W1 H +ATOM 17631 OH2 TIP3X5048 14.804 27.479 19.167 1.00 0.00 W1 O +ATOM 17632 H1 TIP3X5048 15.377 26.742 19.380 1.00 0.00 W1 H +ATOM 17633 H2 TIP3X5048 14.473 27.778 20.014 1.00 0.00 W1 H +ATOM 17634 OH2 TIP3X5049 10.065 16.515 16.096 1.00 0.00 W1 O +ATOM 17635 H1 TIP3X5049 10.797 17.131 16.121 1.00 0.00 W1 H +ATOM 17636 H2 TIP3X5049 10.306 15.883 15.420 1.00 0.00 W1 H +ATOM 17637 OH2 TIP3X5050 14.597 16.609 26.361 1.00 0.00 W1 O +ATOM 17638 H1 TIP3X5050 15.089 15.979 26.889 1.00 0.00 W1 H +ATOM 17639 H2 TIP3X5050 15.197 16.851 25.656 1.00 0.00 W1 H +ATOM 17640 OH2 TIP3X5051 2.104 25.829 22.439 1.00 0.00 W1 O +ATOM 17641 H1 TIP3X5051 1.436 26.153 23.044 1.00 0.00 W1 H +ATOM 17642 H2 TIP3X5051 2.896 25.760 22.971 1.00 0.00 W1 H +ATOM 17643 OH2 TIP3X5052 7.101 27.248 29.549 1.00 0.00 W1 O +ATOM 17644 H1 TIP3X5052 7.324 26.870 30.400 1.00 0.00 W1 H +ATOM 17645 H2 TIP3X5052 6.494 26.619 29.159 1.00 0.00 W1 H +ATOM 17646 OH2 TIP3X5053 10.580 18.553 24.962 1.00 0.00 W1 O +ATOM 17647 H1 TIP3X5053 10.639 18.371 25.900 1.00 0.00 W1 H +ATOM 17648 H2 TIP3X5053 9.642 18.640 24.794 1.00 0.00 W1 H +ATOM 17649 OH2 TIP3X5054 6.772 19.210 29.141 1.00 0.00 W1 O +ATOM 17650 H1 TIP3X5054 5.905 19.140 28.741 1.00 0.00 W1 H +ATOM 17651 H2 TIP3X5054 6.717 18.669 29.929 1.00 0.00 W1 H +ATOM 17652 OH2 TIP3X5055 14.258 21.930 30.894 1.00 0.00 W1 O +ATOM 17653 H1 TIP3X5055 15.052 21.397 30.878 1.00 0.00 W1 H +ATOM 17654 H2 TIP3X5055 13.964 21.895 31.804 1.00 0.00 W1 H +ATOM 17655 OH2 TIP3X5056 2.443 15.797 26.813 1.00 0.00 W1 O +ATOM 17656 H1 TIP3X5056 2.217 16.250 26.000 1.00 0.00 W1 H +ATOM 17657 H2 TIP3X5056 3.273 15.360 26.621 1.00 0.00 W1 H +ATOM 17658 OH2 TIP3X5057 8.538 16.255 21.894 1.00 0.00 W1 O +ATOM 17659 H1 TIP3X5057 9.020 16.769 21.247 1.00 0.00 W1 H +ATOM 17660 H2 TIP3X5057 8.882 16.548 22.738 1.00 0.00 W1 H +ATOM 17661 OH2 TIP3X5058 3.008 20.846 17.047 1.00 0.00 W1 O +ATOM 17662 H1 TIP3X5058 3.430 21.492 16.481 1.00 0.00 W1 H +ATOM 17663 H2 TIP3X5058 3.720 20.271 17.328 1.00 0.00 W1 H +ATOM 17664 OH2 TIP3X5059 3.532 21.503 26.358 1.00 0.00 W1 O +ATOM 17665 H1 TIP3X5059 3.448 22.294 26.890 1.00 0.00 W1 H +ATOM 17666 H2 TIP3X5059 4.447 21.499 26.078 1.00 0.00 W1 H +ATOM 17667 OH2 TIP3X5060 2.715 22.221 19.544 1.00 0.00 W1 O +ATOM 17668 H1 TIP3X5060 2.778 21.932 18.633 1.00 0.00 W1 H +ATOM 17669 H2 TIP3X5060 3.490 22.766 19.677 1.00 0.00 W1 H +ATOM 17670 OH2 TIP3X5061 11.735 18.791 17.304 1.00 0.00 W1 O +ATOM 17671 H1 TIP3X5061 11.028 19.279 16.884 1.00 0.00 W1 H +ATOM 17672 H2 TIP3X5061 12.460 18.835 16.680 1.00 0.00 W1 H +ATOM 17673 OH2 TIP3X5062 0.286 19.677 28.392 1.00 0.00 W1 O +ATOM 17674 H1 TIP3X5062 -0.619 19.971 28.503 1.00 0.00 W1 H +ATOM 17675 H2 TIP3X5062 0.426 19.058 29.108 1.00 0.00 W1 H +ATOM 17676 OH2 TIP3X5063 1.429 16.515 24.374 1.00 0.00 W1 O +ATOM 17677 H1 TIP3X5063 1.536 15.813 23.732 1.00 0.00 W1 H +ATOM 17678 H2 TIP3X5063 1.564 17.320 23.875 1.00 0.00 W1 H +ATOM 17679 OH2 TIP3X5064 12.951 20.143 29.262 1.00 0.00 W1 O +ATOM 17680 H1 TIP3X5064 13.262 20.721 29.958 1.00 0.00 W1 H +ATOM 17681 H2 TIP3X5064 12.007 20.079 29.407 1.00 0.00 W1 H +ATOM 17682 OH2 TIP3X5065 9.994 20.148 29.209 1.00 0.00 W1 O +ATOM 17683 H1 TIP3X5065 9.634 20.717 28.528 1.00 0.00 W1 H +ATOM 17684 H2 TIP3X5065 9.656 19.278 28.998 1.00 0.00 W1 H +ATOM 17685 OH2 TIP3X5066 8.197 20.618 19.074 1.00 0.00 W1 O +ATOM 17686 H1 TIP3X5066 8.286 21.197 18.318 1.00 0.00 W1 H +ATOM 17687 H2 TIP3X5066 7.427 20.083 18.878 1.00 0.00 W1 H +ATOM 17688 OH2 TIP3X5067 6.500 19.949 16.762 1.00 0.00 W1 O +ATOM 17689 H1 TIP3X5067 6.062 20.142 15.932 1.00 0.00 W1 H +ATOM 17690 H2 TIP3X5067 6.093 19.138 17.065 1.00 0.00 W1 H +ATOM 17691 OH2 TIP3X5068 7.210 17.011 30.551 1.00 0.00 W1 O +ATOM 17692 H1 TIP3X5068 6.744 16.624 31.291 1.00 0.00 W1 H +ATOM 17693 H2 TIP3X5068 8.124 17.044 30.833 1.00 0.00 W1 H +ATOM 17694 OH2 TIP3X5069 12.773 22.356 27.232 1.00 0.00 W1 O +ATOM 17695 H1 TIP3X5069 12.793 21.706 27.935 1.00 0.00 W1 H +ATOM 17696 H2 TIP3X5069 11.939 22.204 26.788 1.00 0.00 W1 H +ATOM 17697 OH2 TIP3X5070 0.848 19.456 15.702 1.00 0.00 W1 O +ATOM 17698 H1 TIP3X5070 0.092 19.264 16.256 1.00 0.00 W1 H +ATOM 17699 H2 TIP3X5070 1.382 20.055 16.224 1.00 0.00 W1 H +ATOM 17700 OH2 TIP3X5071 0.767 30.950 16.189 1.00 0.00 W1 O +ATOM 17701 H1 TIP3X5071 1.183 30.202 16.618 1.00 0.00 W1 H +ATOM 17702 H2 TIP3X5071 0.780 31.643 16.848 1.00 0.00 W1 H +ATOM 17703 OH2 TIP3X5072 9.515 19.110 21.182 1.00 0.00 W1 O +ATOM 17704 H1 TIP3X5072 9.178 19.460 20.357 1.00 0.00 W1 H +ATOM 17705 H2 TIP3X5072 10.411 18.842 20.980 1.00 0.00 W1 H +ATOM 17706 OH2 TIP3X5073 4.970 18.420 22.926 1.00 0.00 W1 O +ATOM 17707 H1 TIP3X5073 4.028 18.373 22.767 1.00 0.00 W1 H +ATOM 17708 H2 TIP3X5073 5.109 19.294 23.289 1.00 0.00 W1 H +ATOM 17709 OH2 TIP3X5074 0.332 19.546 19.719 1.00 0.00 W1 O +ATOM 17710 H1 TIP3X5074 0.058 19.422 20.628 1.00 0.00 W1 H +ATOM 17711 H2 TIP3X5074 0.138 20.465 19.533 1.00 0.00 W1 H +ATOM 17712 OH2 TIP3X5075 4.333 18.873 27.779 1.00 0.00 W1 O +ATOM 17713 H1 TIP3X5075 4.355 18.067 27.264 1.00 0.00 W1 H +ATOM 17714 H2 TIP3X5075 3.939 19.521 27.195 1.00 0.00 W1 H +ATOM 17715 OH2 TIP3X5076 4.916 25.409 23.584 1.00 0.00 W1 O +ATOM 17716 H1 TIP3X5076 4.844 24.473 23.397 1.00 0.00 W1 H +ATOM 17717 H2 TIP3X5076 4.920 25.462 24.540 1.00 0.00 W1 H +ATOM 17718 OH2 TIP3X5077 9.105 22.428 28.147 1.00 0.00 W1 O +ATOM 17719 H1 TIP3X5077 9.517 23.259 28.383 1.00 0.00 W1 H +ATOM 17720 H2 TIP3X5077 8.555 22.638 27.392 1.00 0.00 W1 H +ATOM 17721 OH2 TIP3X5078 14.900 17.794 17.471 1.00 0.00 W1 O +ATOM 17722 H1 TIP3X5078 15.335 18.021 18.293 1.00 0.00 W1 H +ATOM 17723 H2 TIP3X5078 14.380 17.019 17.681 1.00 0.00 W1 H +ATOM 17724 OH2 TIP3X5079 6.055 23.754 16.649 1.00 0.00 W1 O +ATOM 17725 H1 TIP3X5079 5.766 23.632 17.554 1.00 0.00 W1 H +ATOM 17726 H2 TIP3X5079 6.744 23.101 16.528 1.00 0.00 W1 H +ATOM 17727 OH2 TIP3X5080 12.758 22.270 17.717 1.00 0.00 W1 O +ATOM 17728 H1 TIP3X5080 11.893 22.071 18.076 1.00 0.00 W1 H +ATOM 17729 H2 TIP3X5080 13.315 22.391 18.486 1.00 0.00 W1 H +ATOM 17730 OH2 TIP3X5081 7.591 22.524 24.188 1.00 0.00 W1 O +ATOM 17731 H1 TIP3X5081 7.688 23.321 24.709 1.00 0.00 W1 H +ATOM 17732 H2 TIP3X5081 8.466 22.135 24.179 1.00 0.00 W1 H +ATOM 17733 OH2 TIP3X5082 7.336 22.906 21.104 1.00 0.00 W1 O +ATOM 17734 H1 TIP3X5082 7.958 22.310 20.686 1.00 0.00 W1 H +ATOM 17735 H2 TIP3X5082 7.362 22.669 22.030 1.00 0.00 W1 H +ATOM 17736 OH2 TIP3X5083 10.231 24.522 30.039 1.00 0.00 W1 O +ATOM 17737 H1 TIP3X5083 9.553 24.806 30.653 1.00 0.00 W1 H +ATOM 17738 H2 TIP3X5083 11.029 24.481 30.566 1.00 0.00 W1 H +ATOM 17739 OH2 TIP3X5084 2.741 23.937 27.736 1.00 0.00 W1 O +ATOM 17740 H1 TIP3X5084 3.258 24.343 28.432 1.00 0.00 W1 H +ATOM 17741 H2 TIP3X5084 2.358 24.674 27.260 1.00 0.00 W1 H +ATOM 17742 OH2 TIP3X5085 1.647 21.899 29.357 1.00 0.00 W1 O +ATOM 17743 H1 TIP3X5085 1.443 21.060 28.945 1.00 0.00 W1 H +ATOM 17744 H2 TIP3X5085 1.524 22.545 28.662 1.00 0.00 W1 H +ATOM 17745 OH2 TIP3X5086 1.540 22.772 22.181 1.00 0.00 W1 O +ATOM 17746 H1 TIP3X5086 1.896 23.645 22.011 1.00 0.00 W1 H +ATOM 17747 H2 TIP3X5086 1.438 22.382 21.313 1.00 0.00 W1 H +ATOM 17748 OH2 TIP3X5087 12.299 25.037 16.367 1.00 0.00 W1 O +ATOM 17749 H1 TIP3X5087 13.004 25.536 15.955 1.00 0.00 W1 H +ATOM 17750 H2 TIP3X5087 12.748 24.407 16.931 1.00 0.00 W1 H +ATOM 17751 OH2 TIP3X5088 14.895 22.384 19.730 1.00 0.00 W1 O +ATOM 17752 H1 TIP3X5088 14.608 22.557 20.626 1.00 0.00 W1 H +ATOM 17753 H2 TIP3X5088 15.408 23.156 19.489 1.00 0.00 W1 H +ATOM 17754 OH2 TIP3X5089 1.393 21.501 24.452 1.00 0.00 W1 O +ATOM 17755 H1 TIP3X5089 1.487 22.179 23.783 1.00 0.00 W1 H +ATOM 17756 H2 TIP3X5089 2.051 21.720 25.111 1.00 0.00 W1 H +ATOM 17757 OH2 TIP3X5090 4.180 30.008 17.715 1.00 0.00 W1 O +ATOM 17758 H1 TIP3X5090 3.951 30.368 16.859 1.00 0.00 W1 H +ATOM 17759 H2 TIP3X5090 3.767 29.145 17.731 1.00 0.00 W1 H +ATOM 17760 OH2 TIP3X5091 2.955 25.241 16.214 1.00 0.00 W1 O +ATOM 17761 H1 TIP3X5091 2.139 24.952 15.805 1.00 0.00 W1 H +ATOM 17762 H2 TIP3X5091 3.487 24.448 16.275 1.00 0.00 W1 H +ATOM 17763 OH2 TIP3X5092 4.373 26.081 29.288 1.00 0.00 W1 O +ATOM 17764 H1 TIP3X5092 3.800 26.683 28.814 1.00 0.00 W1 H +ATOM 17765 H2 TIP3X5092 3.899 25.885 30.096 1.00 0.00 W1 H +ATOM 17766 OH2 TIP3X5093 7.449 30.824 26.979 1.00 0.00 W1 O +ATOM 17767 H1 TIP3X5093 7.766 30.530 27.833 1.00 0.00 W1 H +ATOM 17768 H2 TIP3X5093 7.882 30.246 26.350 1.00 0.00 W1 H +ATOM 17769 OH2 TIP3X5094 12.155 31.065 21.113 1.00 0.00 W1 O +ATOM 17770 H1 TIP3X5094 11.742 30.374 20.594 1.00 0.00 W1 H +ATOM 17771 H2 TIP3X5094 11.959 31.872 20.636 1.00 0.00 W1 H +ATOM 17772 OH2 TIP3X5095 8.733 27.748 18.365 1.00 0.00 W1 O +ATOM 17773 H1 TIP3X5095 8.992 28.533 17.883 1.00 0.00 W1 H +ATOM 17774 H2 TIP3X5095 8.163 28.071 19.063 1.00 0.00 W1 H +ATOM 17775 OH2 TIP3X5096 8.750 22.902 17.436 1.00 0.00 W1 O +ATOM 17776 H1 TIP3X5096 9.573 22.975 16.953 1.00 0.00 W1 H +ATOM 17777 H2 TIP3X5096 8.757 23.646 18.038 1.00 0.00 W1 H +ATOM 17778 OH2 TIP3X5097 12.151 17.626 27.227 1.00 0.00 W1 O +ATOM 17779 H1 TIP3X5097 12.956 17.395 26.763 1.00 0.00 W1 H +ATOM 17780 H2 TIP3X5097 12.442 18.179 27.952 1.00 0.00 W1 H +ATOM 17781 OH2 TIP3X5098 0.116 24.727 18.633 1.00 0.00 W1 O +ATOM 17782 H1 TIP3X5098 -0.037 24.819 17.693 1.00 0.00 W1 H +ATOM 17783 H2 TIP3X5098 1.070 24.727 18.722 1.00 0.00 W1 H +ATOM 17784 OH2 TIP3X5099 10.878 24.315 25.229 1.00 0.00 W1 O +ATOM 17785 H1 TIP3X5099 11.424 24.977 25.655 1.00 0.00 W1 H +ATOM 17786 H2 TIP3X5099 11.337 24.115 24.414 1.00 0.00 W1 H +ATOM 17787 OH2 TIP3X5100 9.700 29.289 16.307 1.00 0.00 W1 O +ATOM 17788 H1 TIP3X5100 10.525 29.324 16.791 1.00 0.00 W1 H +ATOM 17789 H2 TIP3X5100 9.904 28.776 15.524 1.00 0.00 W1 H +ATOM 17790 OH2 TIP3X5101 9.693 27.076 27.958 1.00 0.00 W1 O +ATOM 17791 H1 TIP3X5101 8.872 27.323 28.384 1.00 0.00 W1 H +ATOM 17792 H2 TIP3X5101 9.463 26.981 27.033 1.00 0.00 W1 H +ATOM 17793 OH2 TIP3X5102 6.318 27.301 19.844 1.00 0.00 W1 O +ATOM 17794 H1 TIP3X5102 5.611 27.448 19.216 1.00 0.00 W1 H +ATOM 17795 H2 TIP3X5102 5.981 27.646 20.671 1.00 0.00 W1 H +ATOM 17796 OH2 TIP3X5103 2.883 28.213 28.555 1.00 0.00 W1 O +ATOM 17797 H1 TIP3X5103 3.617 28.824 28.491 1.00 0.00 W1 H +ATOM 17798 H2 TIP3X5103 2.571 28.307 29.455 1.00 0.00 W1 H +ATOM 17799 OH2 TIP3X5104 2.473 29.918 22.657 1.00 0.00 W1 O +ATOM 17800 H1 TIP3X5104 1.887 29.177 22.503 1.00 0.00 W1 H +ATOM 17801 H2 TIP3X5104 2.916 30.051 21.819 1.00 0.00 W1 H +ATOM 17802 OH2 TIP3X5105 10.826 15.931 23.738 1.00 0.00 W1 O +ATOM 17803 H1 TIP3X5105 11.158 15.856 22.843 1.00 0.00 W1 H +ATOM 17804 H2 TIP3X5105 10.781 16.874 23.899 1.00 0.00 W1 H +ATOM 17805 OH2 TIP3X5106 8.064 18.060 23.972 1.00 0.00 W1 O +ATOM 17806 H1 TIP3X5106 7.702 18.549 23.233 1.00 0.00 W1 H +ATOM 17807 H2 TIP3X5106 7.332 17.971 24.582 1.00 0.00 W1 H +ATOM 17808 OH2 TIP3X5107 6.783 16.045 17.900 1.00 0.00 W1 O +ATOM 17809 H1 TIP3X5107 7.639 15.789 18.245 1.00 0.00 W1 H +ATOM 17810 H2 TIP3X5107 6.265 15.241 17.925 1.00 0.00 W1 H +ATOM 17811 OH2 TIP3X5108 9.535 15.888 18.944 1.00 0.00 W1 O +ATOM 17812 H1 TIP3X5108 9.990 15.152 19.352 1.00 0.00 W1 H +ATOM 17813 H2 TIP3X5108 9.942 15.975 18.082 1.00 0.00 W1 H +ATOM 17814 OH2 TIP3X5109 4.174 30.467 30.398 1.00 0.00 W1 O +ATOM 17815 H1 TIP3X5109 3.924 31.224 29.869 1.00 0.00 W1 H +ATOM 17816 H2 TIP3X5109 5.085 30.298 30.159 1.00 0.00 W1 H +ATOM 17817 OH2 TIP3X5110 9.181 29.161 20.699 1.00 0.00 W1 O +ATOM 17818 H1 TIP3X5110 9.842 28.519 20.959 1.00 0.00 W1 H +ATOM 17819 H2 TIP3X5110 9.168 29.796 21.415 1.00 0.00 W1 H +ATOM 17820 OH2 TIP3X5111 6.920 30.064 29.608 1.00 0.00 W1 O +ATOM 17821 H1 TIP3X5111 7.138 29.171 29.879 1.00 0.00 W1 H +ATOM 17822 H2 TIP3X5111 7.528 30.618 30.098 1.00 0.00 W1 H +ATOM 17823 OH2 TIP3X5112 5.867 18.182 19.653 1.00 0.00 W1 O +ATOM 17824 H1 TIP3X5112 6.524 17.523 19.430 1.00 0.00 W1 H +ATOM 17825 H2 TIP3X5112 5.909 18.251 20.607 1.00 0.00 W1 H +ATOM 17826 OH2 TIP3X5113 0.580 16.520 29.109 1.00 0.00 W1 O +ATOM 17827 H1 TIP3X5113 1.328 16.325 28.545 1.00 0.00 W1 H +ATOM 17828 H2 TIP3X5113 0.788 16.095 29.940 1.00 0.00 W1 H +ATOM 17829 OH2 TIP3X5114 11.699 29.247 18.710 1.00 0.00 W1 O +ATOM 17830 H1 TIP3X5114 11.844 28.307 18.813 1.00 0.00 W1 H +ATOM 17831 H2 TIP3X5114 12.523 29.580 18.353 1.00 0.00 W1 H +ATOM 17832 OH2 TIP3X5115 13.367 16.014 29.937 1.00 0.00 W1 O +ATOM 17833 H1 TIP3X5115 12.753 16.088 29.207 1.00 0.00 W1 H +ATOM 17834 H2 TIP3X5115 14.137 16.509 29.656 1.00 0.00 W1 H +ATOM 17835 OH2 TIP3X5116 4.161 30.227 20.424 1.00 0.00 W1 O +ATOM 17836 H1 TIP3X5116 4.154 30.272 19.468 1.00 0.00 W1 H +ATOM 17837 H2 TIP3X5116 4.968 30.673 20.680 1.00 0.00 W1 H +ATOM 17838 OH2 TIP3X5117 15.070 29.165 28.373 1.00 0.00 W1 O +ATOM 17839 H1 TIP3X5117 14.347 29.716 28.674 1.00 0.00 W1 H +ATOM 17840 H2 TIP3X5117 15.858 29.664 28.587 1.00 0.00 W1 H +ATOM 17841 OH2 TIP3X5118 2.695 18.487 20.053 1.00 0.00 W1 O +ATOM 17842 H1 TIP3X5118 2.052 18.876 19.461 1.00 0.00 W1 H +ATOM 17843 H2 TIP3X5118 3.498 18.984 19.895 1.00 0.00 W1 H +ATOM 17844 OH2 TIP3X5119 4.124 27.086 17.785 1.00 0.00 W1 O +ATOM 17845 H1 TIP3X5119 4.085 26.458 17.063 1.00 0.00 W1 H +ATOM 17846 H2 TIP3X5119 3.405 26.833 18.363 1.00 0.00 W1 H +ATOM 17847 OH2 TIP3X5120 17.576 -20.058 -26.806 1.00 0.00 W1 O +ATOM 17848 H1 TIP3X5120 17.759 -20.134 -25.869 1.00 0.00 W1 H +ATOM 17849 H2 TIP3X5120 17.552 -19.116 -26.970 1.00 0.00 W1 H +ATOM 17850 OH2 TIP3X5121 28.679 -22.567 -23.068 1.00 0.00 W1 O +ATOM 17851 H1 TIP3X5121 28.914 -22.303 -23.957 1.00 0.00 W1 H +ATOM 17852 H2 TIP3X5121 29.508 -22.831 -22.669 1.00 0.00 W1 H +ATOM 17853 OH2 TIP3X5122 20.663 -22.844 -27.089 1.00 0.00 W1 O +ATOM 17854 H1 TIP3X5122 20.693 -21.934 -26.792 1.00 0.00 W1 H +ATOM 17855 H2 TIP3X5122 21.170 -23.327 -26.437 1.00 0.00 W1 H +ATOM 17856 OH2 TIP3X5123 28.466 -18.684 -24.946 1.00 0.00 W1 O +ATOM 17857 H1 TIP3X5123 28.191 -18.194 -24.171 1.00 0.00 W1 H +ATOM 17858 H2 TIP3X5123 27.941 -19.484 -24.922 1.00 0.00 W1 H +ATOM 17859 OH2 TIP3X5124 26.983 -20.241 -27.903 1.00 0.00 W1 O +ATOM 17860 H1 TIP3X5124 27.145 -20.470 -28.818 1.00 0.00 W1 H +ATOM 17861 H2 TIP3X5124 26.054 -20.012 -27.873 1.00 0.00 W1 H +ATOM 17862 OH2 TIP3X5125 30.830 -19.709 -23.118 1.00 0.00 W1 O +ATOM 17863 H1 TIP3X5125 30.278 -19.626 -23.896 1.00 0.00 W1 H +ATOM 17864 H2 TIP3X5125 30.220 -19.926 -22.413 1.00 0.00 W1 H +ATOM 17865 OH2 TIP3X5126 17.467 -18.445 -20.667 1.00 0.00 W1 O +ATOM 17866 H1 TIP3X5126 17.873 -18.242 -19.824 1.00 0.00 W1 H +ATOM 17867 H2 TIP3X5126 16.895 -19.191 -20.484 1.00 0.00 W1 H +ATOM 17868 OH2 TIP3X5127 24.842 -16.820 -21.441 1.00 0.00 W1 O +ATOM 17869 H1 TIP3X5127 25.143 -17.721 -21.319 1.00 0.00 W1 H +ATOM 17870 H2 TIP3X5127 25.467 -16.440 -22.058 1.00 0.00 W1 H +ATOM 17871 OH2 TIP3X5128 28.274 -16.863 -21.561 1.00 0.00 W1 O +ATOM 17872 H1 TIP3X5128 27.839 -16.040 -21.781 1.00 0.00 W1 H +ATOM 17873 H2 TIP3X5128 29.203 -16.638 -21.512 1.00 0.00 W1 H +ATOM 17874 OH2 TIP3X5129 20.722 -17.289 -22.432 1.00 0.00 W1 O +ATOM 17875 H1 TIP3X5129 21.078 -16.440 -22.695 1.00 0.00 W1 H +ATOM 17876 H2 TIP3X5129 19.787 -17.229 -22.628 1.00 0.00 W1 H +ATOM 17877 OH2 TIP3X5130 25.564 -25.396 -23.530 1.00 0.00 W1 O +ATOM 17878 H1 TIP3X5130 25.486 -26.206 -24.035 1.00 0.00 W1 H +ATOM 17879 H2 TIP3X5130 26.506 -25.257 -23.443 1.00 0.00 W1 H +ATOM 17880 OH2 TIP3X5131 21.587 -29.299 -21.168 1.00 0.00 W1 O +ATOM 17881 H1 TIP3X5131 21.844 -30.036 -20.615 1.00 0.00 W1 H +ATOM 17882 H2 TIP3X5131 20.910 -29.655 -21.744 1.00 0.00 W1 H +ATOM 17883 OH2 TIP3X5132 29.830 -28.294 -24.745 1.00 0.00 W1 O +ATOM 17884 H1 TIP3X5132 29.523 -27.956 -23.904 1.00 0.00 W1 H +ATOM 17885 H2 TIP3X5132 29.898 -29.240 -24.614 1.00 0.00 W1 H +ATOM 17886 OH2 TIP3X5133 28.428 -27.099 -22.791 1.00 0.00 W1 O +ATOM 17887 H1 TIP3X5133 29.003 -27.327 -22.061 1.00 0.00 W1 H +ATOM 17888 H2 TIP3X5133 27.553 -27.353 -22.496 1.00 0.00 W1 H +ATOM 17889 OH2 TIP3X5134 21.474 -25.974 -21.420 1.00 0.00 W1 O +ATOM 17890 H1 TIP3X5134 21.978 -26.677 -21.008 1.00 0.00 W1 H +ATOM 17891 H2 TIP3X5134 22.132 -25.332 -21.687 1.00 0.00 W1 H +ATOM 17892 OH2 TIP3X5135 28.951 -24.926 -24.523 1.00 0.00 W1 O +ATOM 17893 H1 TIP3X5135 28.992 -25.826 -24.199 1.00 0.00 W1 H +ATOM 17894 H2 TIP3X5135 28.833 -24.393 -23.736 1.00 0.00 W1 H +ATOM 17895 OH2 TIP3X5136 27.636 -28.283 -26.654 1.00 0.00 W1 O +ATOM 17896 H1 TIP3X5136 28.461 -28.098 -26.205 1.00 0.00 W1 H +ATOM 17897 H2 TIP3X5136 27.712 -27.828 -27.493 1.00 0.00 W1 H +ATOM 17898 OH2 TIP3X5137 23.818 -22.311 -20.583 1.00 0.00 W1 O +ATOM 17899 H1 TIP3X5137 24.695 -22.289 -20.966 1.00 0.00 W1 H +ATOM 17900 H2 TIP3X5137 23.553 -21.393 -20.537 1.00 0.00 W1 H +ATOM 17901 OH2 TIP3X5138 22.969 -19.763 -20.773 1.00 0.00 W1 O +ATOM 17902 H1 TIP3X5138 22.944 -19.536 -21.702 1.00 0.00 W1 H +ATOM 17903 H2 TIP3X5138 22.049 -19.817 -20.514 1.00 0.00 W1 H +ATOM 17904 OH2 TIP3X5139 17.832 -27.882 -23.935 1.00 0.00 W1 O +ATOM 17905 H1 TIP3X5139 17.506 -27.002 -23.744 1.00 0.00 W1 H +ATOM 17906 H2 TIP3X5139 17.708 -27.984 -24.878 1.00 0.00 W1 H +ATOM 17907 OH2 TIP3X5140 19.988 -24.324 -23.922 1.00 0.00 W1 O +ATOM 17908 H1 TIP3X5140 19.305 -24.774 -24.419 1.00 0.00 W1 H +ATOM 17909 H2 TIP3X5140 20.473 -25.028 -23.490 1.00 0.00 W1 H +ATOM 17910 OH2 TIP3X5141 26.043 -19.400 -21.526 1.00 0.00 W1 O +ATOM 17911 H1 TIP3X5141 25.801 -19.986 -22.243 1.00 0.00 W1 H +ATOM 17912 H2 TIP3X5141 26.993 -19.489 -21.453 1.00 0.00 W1 H +ATOM 17913 OH2 TIP3X5142 30.341 -15.765 -24.745 1.00 0.00 W1 O +ATOM 17914 H1 TIP3X5142 30.336 -16.233 -23.910 1.00 0.00 W1 H +ATOM 17915 H2 TIP3X5142 29.461 -15.894 -25.098 1.00 0.00 W1 H +ATOM 17916 OH2 TIP3X5143 22.213 -19.429 -23.723 1.00 0.00 W1 O +ATOM 17917 H1 TIP3X5143 21.642 -20.148 -23.454 1.00 0.00 W1 H +ATOM 17918 H2 TIP3X5143 21.753 -18.638 -23.441 1.00 0.00 W1 H +ATOM 17919 OH2 TIP3X5144 24.435 -28.977 -19.153 1.00 0.00 W1 O +ATOM 17920 H1 TIP3X5144 23.692 -28.498 -18.786 1.00 0.00 W1 H +ATOM 17921 H2 TIP3X5144 24.054 -29.789 -19.487 1.00 0.00 W1 H +ATOM 17922 OH2 TIP3X5145 19.787 -28.272 -29.351 1.00 0.00 W1 O +ATOM 17923 H1 TIP3X5145 19.689 -28.934 -28.667 1.00 0.00 W1 H +ATOM 17924 H2 TIP3X5145 19.603 -28.741 -30.166 1.00 0.00 W1 H +ATOM 17925 OH2 TIP3X5146 30.680 -27.350 -21.162 1.00 0.00 W1 O +ATOM 17926 H1 TIP3X5146 31.199 -26.682 -21.609 1.00 0.00 W1 H +ATOM 17927 H2 TIP3X5146 31.122 -27.475 -20.322 1.00 0.00 W1 H +ATOM 17928 OH2 TIP3X5147 16.738 -30.998 -27.002 1.00 0.00 W1 O +ATOM 17929 H1 TIP3X5147 17.463 -30.377 -26.933 1.00 0.00 W1 H +ATOM 17930 H2 TIP3X5147 16.366 -31.031 -26.120 1.00 0.00 W1 H +ATOM 17931 OH2 TIP3X5148 22.004 -24.762 -17.015 1.00 0.00 W1 O +ATOM 17932 H1 TIP3X5148 22.868 -24.364 -17.116 1.00 0.00 W1 H +ATOM 17933 H2 TIP3X5148 22.156 -25.699 -17.138 1.00 0.00 W1 H +ATOM 17934 OH2 TIP3X5149 25.170 -19.852 -24.276 1.00 0.00 W1 O +ATOM 17935 H1 TIP3X5149 25.264 -20.715 -24.679 1.00 0.00 W1 H +ATOM 17936 H2 TIP3X5149 24.237 -19.652 -24.352 1.00 0.00 W1 H +ATOM 17937 OH2 TIP3X5150 23.782 -21.568 -26.745 1.00 0.00 W1 O +ATOM 17938 H1 TIP3X5150 23.218 -22.182 -26.275 1.00 0.00 W1 H +ATOM 17939 H2 TIP3X5150 23.308 -20.737 -26.716 1.00 0.00 W1 H +ATOM 17940 OH2 TIP3X5151 16.320 -21.055 -20.288 1.00 0.00 W1 O +ATOM 17941 H1 TIP3X5151 15.785 -21.657 -20.806 1.00 0.00 W1 H +ATOM 17942 H2 TIP3X5151 15.849 -20.969 -19.459 1.00 0.00 W1 H +ATOM 17943 OH2 TIP3X5152 27.616 -22.034 -25.920 1.00 0.00 W1 O +ATOM 17944 H1 TIP3X5152 27.560 -22.949 -26.197 1.00 0.00 W1 H +ATOM 17945 H2 TIP3X5152 27.444 -21.532 -26.716 1.00 0.00 W1 H +ATOM 17946 OH2 TIP3X5153 27.913 -21.520 -18.896 1.00 0.00 W1 O +ATOM 17947 H1 TIP3X5153 27.011 -21.436 -18.588 1.00 0.00 W1 H +ATOM 17948 H2 TIP3X5153 28.082 -22.462 -18.892 1.00 0.00 W1 H +ATOM 17949 OH2 TIP3X5154 30.280 -23.561 -21.090 1.00 0.00 W1 O +ATOM 17950 H1 TIP3X5154 30.942 -24.241 -21.209 1.00 0.00 W1 H +ATOM 17951 H2 TIP3X5154 29.564 -24.000 -20.631 1.00 0.00 W1 H +ATOM 17952 OH2 TIP3X5155 19.424 -23.874 -15.946 1.00 0.00 W1 O +ATOM 17953 H1 TIP3X5155 18.895 -24.108 -16.708 1.00 0.00 W1 H +ATOM 17954 H2 TIP3X5155 20.320 -23.826 -16.280 1.00 0.00 W1 H +ATOM 17955 OH2 TIP3X5156 20.335 -20.668 -20.384 1.00 0.00 W1 O +ATOM 17956 H1 TIP3X5156 20.290 -21.223 -19.606 1.00 0.00 W1 H +ATOM 17957 H2 TIP3X5156 19.702 -19.969 -20.218 1.00 0.00 W1 H +ATOM 17958 OH2 TIP3X5157 29.006 -19.538 -20.635 1.00 0.00 W1 O +ATOM 17959 H1 TIP3X5157 29.430 -18.770 -20.251 1.00 0.00 W1 H +ATOM 17960 H2 TIP3X5157 28.702 -20.046 -19.882 1.00 0.00 W1 H +ATOM 17961 OH2 TIP3X5158 27.094 -17.562 -18.810 1.00 0.00 W1 O +ATOM 17962 H1 TIP3X5158 26.387 -18.191 -18.952 1.00 0.00 W1 H +ATOM 17963 H2 TIP3X5158 27.423 -17.368 -19.687 1.00 0.00 W1 H +ATOM 17964 OH2 TIP3X5159 27.345 -19.026 -16.413 1.00 0.00 W1 O +ATOM 17965 H1 TIP3X5159 26.711 -19.633 -16.797 1.00 0.00 W1 H +ATOM 17966 H2 TIP3X5159 27.458 -18.346 -17.077 1.00 0.00 W1 H +ATOM 17967 OH2 TIP3X5160 30.955 -17.118 -22.347 1.00 0.00 W1 O +ATOM 17968 H1 TIP3X5160 31.633 -17.276 -21.690 1.00 0.00 W1 H +ATOM 17969 H2 TIP3X5160 30.721 -17.989 -22.666 1.00 0.00 W1 H +ATOM 17970 OH2 TIP3X5161 21.511 -30.647 -23.954 1.00 0.00 W1 O +ATOM 17971 H1 TIP3X5161 21.220 -29.737 -24.015 1.00 0.00 W1 H +ATOM 17972 H2 TIP3X5161 22.343 -30.664 -24.427 1.00 0.00 W1 H +ATOM 17973 OH2 TIP3X5162 23.635 -20.700 -30.300 1.00 0.00 W1 O +ATOM 17974 H1 TIP3X5162 22.940 -21.322 -30.085 1.00 0.00 W1 H +ATOM 17975 H2 TIP3X5162 23.618 -20.064 -29.585 1.00 0.00 W1 H +ATOM 17976 OH2 TIP3X5163 31.016 -21.937 -30.863 1.00 0.00 W1 O +ATOM 17977 H1 TIP3X5163 30.753 -22.686 -31.397 1.00 0.00 W1 H +ATOM 17978 H2 TIP3X5163 30.761 -21.173 -31.381 1.00 0.00 W1 H +ATOM 17979 OH2 TIP3X5164 16.964 -18.240 -31.146 1.00 0.00 W1 O +ATOM 17980 H1 TIP3X5164 17.409 -18.789 -30.501 1.00 0.00 W1 H +ATOM 17981 H2 TIP3X5164 16.067 -18.574 -31.167 1.00 0.00 W1 H +ATOM 17982 OH2 TIP3X5165 29.057 -16.111 -29.888 1.00 0.00 W1 O +ATOM 17983 H1 TIP3X5165 29.942 -16.439 -30.046 1.00 0.00 W1 H +ATOM 17984 H2 TIP3X5165 28.827 -15.643 -30.690 1.00 0.00 W1 H +ATOM 17985 OH2 TIP3X5166 30.449 -20.449 -17.810 1.00 0.00 W1 O +ATOM 17986 H1 TIP3X5166 30.340 -19.500 -17.751 1.00 0.00 W1 H +ATOM 17987 H2 TIP3X5166 29.557 -20.794 -17.820 1.00 0.00 W1 H +ATOM 17988 OH2 TIP3X5167 17.136 -17.623 -28.191 1.00 0.00 W1 O +ATOM 17989 H1 TIP3X5167 17.068 -16.787 -27.731 1.00 0.00 W1 H +ATOM 17990 H2 TIP3X5167 16.240 -17.962 -28.208 1.00 0.00 W1 H +ATOM 17991 OH2 TIP3X5168 29.716 -19.130 -30.547 1.00 0.00 W1 O +ATOM 17992 H1 TIP3X5168 29.747 -19.210 -29.594 1.00 0.00 W1 H +ATOM 17993 H2 TIP3X5168 28.883 -18.693 -30.724 1.00 0.00 W1 H +ATOM 17994 OH2 TIP3X5169 26.086 -30.836 -17.663 1.00 0.00 W1 O +ATOM 17995 H1 TIP3X5169 25.780 -30.087 -18.176 1.00 0.00 W1 H +ATOM 17996 H2 TIP3X5169 26.140 -31.553 -18.295 1.00 0.00 W1 H +ATOM 17997 OH2 TIP3X5170 20.300 -16.919 -19.634 1.00 0.00 W1 O +ATOM 17998 H1 TIP3X5170 21.148 -16.681 -19.260 1.00 0.00 W1 H +ATOM 17999 H2 TIP3X5170 20.512 -17.299 -20.487 1.00 0.00 W1 H +ATOM 18000 OH2 TIP3X5171 18.766 -28.901 -16.284 1.00 0.00 W1 O +ATOM 18001 H1 TIP3X5171 17.889 -28.811 -15.910 1.00 0.00 W1 H +ATOM 18002 H2 TIP3X5171 18.829 -28.188 -16.920 1.00 0.00 W1 H +ATOM 18003 OH2 TIP3X5172 24.964 -26.954 -30.553 1.00 0.00 W1 O +ATOM 18004 H1 TIP3X5172 24.798 -26.657 -31.448 1.00 0.00 W1 H +ATOM 18005 H2 TIP3X5172 24.093 -27.077 -30.176 1.00 0.00 W1 H +ATOM 18006 OH2 TIP3X5173 30.361 -19.193 -27.505 1.00 0.00 W1 O +ATOM 18007 H1 TIP3X5173 30.934 -19.930 -27.292 1.00 0.00 W1 H +ATOM 18008 H2 TIP3X5173 30.030 -18.894 -26.658 1.00 0.00 W1 H +ATOM 18009 OH2 TIP3X5174 25.622 -30.157 -30.576 1.00 0.00 W1 O +ATOM 18010 H1 TIP3X5174 26.354 -29.541 -30.552 1.00 0.00 W1 H +ATOM 18011 H2 TIP3X5174 25.863 -30.790 -31.253 1.00 0.00 W1 H +ATOM 18012 OH2 TIP3X5175 30.154 -30.064 -20.311 1.00 0.00 W1 O +ATOM 18013 H1 TIP3X5175 30.646 -30.693 -19.784 1.00 0.00 W1 H +ATOM 18014 H2 TIP3X5175 30.755 -29.821 -21.016 1.00 0.00 W1 H +ATOM 18015 OH2 TIP3X5176 17.661 -20.843 -24.233 1.00 0.00 W1 O +ATOM 18016 H1 TIP3X5176 16.993 -20.520 -23.629 1.00 0.00 W1 H +ATOM 18017 H2 TIP3X5176 18.454 -20.913 -23.701 1.00 0.00 W1 H +ATOM 18018 OH2 TIP3X5177 22.658 -19.424 -17.123 1.00 0.00 W1 O +ATOM 18019 H1 TIP3X5177 22.882 -19.802 -16.272 1.00 0.00 W1 H +ATOM 18020 H2 TIP3X5177 22.052 -20.053 -17.513 1.00 0.00 W1 H +ATOM 18021 OH2 TIP3X5178 26.138 -28.119 -21.710 1.00 0.00 W1 O +ATOM 18022 H1 TIP3X5178 26.197 -28.301 -20.772 1.00 0.00 W1 H +ATOM 18023 H2 TIP3X5178 25.199 -28.032 -21.879 1.00 0.00 W1 H +ATOM 18024 OH2 TIP3X5179 22.329 -27.463 -17.531 1.00 0.00 W1 O +ATOM 18025 H1 TIP3X5179 21.462 -27.533 -17.931 1.00 0.00 W1 H +ATOM 18026 H2 TIP3X5179 22.274 -28.003 -16.743 1.00 0.00 W1 H +ATOM 18027 OH2 TIP3X5180 29.815 -24.742 -15.778 1.00 0.00 W1 O +ATOM 18028 H1 TIP3X5180 30.610 -25.276 -15.795 1.00 0.00 W1 H +ATOM 18029 H2 TIP3X5180 29.521 -24.777 -14.868 1.00 0.00 W1 H +ATOM 18030 OH2 TIP3X5181 18.000 -30.875 -19.860 1.00 0.00 W1 O +ATOM 18031 H1 TIP3X5181 17.775 -30.422 -20.672 1.00 0.00 W1 H +ATOM 18032 H2 TIP3X5181 18.830 -31.312 -20.051 1.00 0.00 W1 H +ATOM 18033 OH2 TIP3X5182 24.095 -30.418 -24.778 1.00 0.00 W1 O +ATOM 18034 H1 TIP3X5182 24.577 -29.904 -25.426 1.00 0.00 W1 H +ATOM 18035 H2 TIP3X5182 24.439 -30.124 -23.934 1.00 0.00 W1 H +ATOM 18036 OH2 TIP3X5183 18.565 -25.826 -29.625 1.00 0.00 W1 O +ATOM 18037 H1 TIP3X5183 18.988 -25.180 -30.191 1.00 0.00 W1 H +ATOM 18038 H2 TIP3X5183 19.277 -26.401 -29.344 1.00 0.00 W1 H +ATOM 18039 OH2 TIP3X5184 19.090 -25.170 -20.314 1.00 0.00 W1 O +ATOM 18040 H1 TIP3X5184 19.005 -24.378 -19.782 1.00 0.00 W1 H +ATOM 18041 H2 TIP3X5184 20.005 -25.174 -20.595 1.00 0.00 W1 H +ATOM 18042 OH2 TIP3X5185 18.272 -24.451 -27.129 1.00 0.00 W1 O +ATOM 18043 H1 TIP3X5185 18.335 -24.740 -28.039 1.00 0.00 W1 H +ATOM 18044 H2 TIP3X5185 19.048 -23.906 -26.996 1.00 0.00 W1 H +ATOM 18045 OH2 TIP3X5186 27.293 -27.882 -29.369 1.00 0.00 W1 O +ATOM 18046 H1 TIP3X5186 26.585 -27.393 -29.789 1.00 0.00 W1 H +ATOM 18047 H2 TIP3X5186 28.018 -27.838 -29.992 1.00 0.00 W1 H +ATOM 18048 OH2 TIP3X5187 15.843 -26.995 -18.281 1.00 0.00 W1 O +ATOM 18049 H1 TIP3X5187 14.939 -26.701 -18.170 1.00 0.00 W1 H +ATOM 18050 H2 TIP3X5187 15.984 -27.614 -17.564 1.00 0.00 W1 H +ATOM 18051 OH2 TIP3X5188 16.987 -30.158 -22.298 1.00 0.00 W1 O +ATOM 18052 H1 TIP3X5188 17.094 -30.859 -22.941 1.00 0.00 W1 H +ATOM 18053 H2 TIP3X5188 17.122 -29.352 -22.797 1.00 0.00 W1 H +ATOM 18054 OH2 TIP3X5189 28.508 -26.530 -17.411 1.00 0.00 W1 O +ATOM 18055 H1 TIP3X5189 28.820 -25.951 -16.715 1.00 0.00 W1 H +ATOM 18056 H2 TIP3X5189 27.564 -26.594 -17.265 1.00 0.00 W1 H +ATOM 18057 OH2 TIP3X5190 25.551 -26.524 -17.464 1.00 0.00 W1 O +ATOM 18058 H1 TIP3X5190 25.192 -25.956 -18.145 1.00 0.00 W1 H +ATOM 18059 H2 TIP3X5190 25.214 -27.394 -17.675 1.00 0.00 W1 H +ATOM 18060 OH2 TIP3X5191 23.754 -26.055 -27.598 1.00 0.00 W1 O +ATOM 18061 H1 TIP3X5191 23.843 -25.475 -28.355 1.00 0.00 W1 H +ATOM 18062 H2 TIP3X5191 22.985 -26.589 -27.795 1.00 0.00 W1 H +ATOM 18063 OH2 TIP3X5192 22.057 -26.723 -29.911 1.00 0.00 W1 O +ATOM 18064 H1 TIP3X5192 21.620 -26.531 -30.740 1.00 0.00 W1 H +ATOM 18065 H2 TIP3X5192 21.650 -27.534 -29.607 1.00 0.00 W1 H +ATOM 18066 OH2 TIP3X5193 22.768 -29.661 -16.122 1.00 0.00 W1 O +ATOM 18067 H1 TIP3X5193 22.301 -30.048 -15.381 1.00 0.00 W1 H +ATOM 18068 H2 TIP3X5193 23.682 -29.629 -15.839 1.00 0.00 W1 H +ATOM 18069 OH2 TIP3X5194 28.331 -24.317 -19.440 1.00 0.00 W1 O +ATOM 18070 H1 TIP3X5194 28.350 -24.966 -18.737 1.00 0.00 W1 H +ATOM 18071 H2 TIP3X5194 27.496 -24.468 -19.884 1.00 0.00 W1 H +ATOM 18072 OH2 TIP3X5195 16.406 -27.216 -30.971 1.00 0.00 W1 O +ATOM 18073 H1 TIP3X5195 15.649 -27.409 -30.417 1.00 0.00 W1 H +ATOM 18074 H2 TIP3X5195 16.940 -26.618 -30.448 1.00 0.00 W1 H +ATOM 18075 OH2 TIP3X5196 16.324 -15.723 -30.484 1.00 0.00 W1 O +ATOM 18076 H1 TIP3X5196 16.740 -16.470 -30.054 1.00 0.00 W1 H +ATOM 18077 H2 TIP3X5196 16.337 -15.029 -29.824 1.00 0.00 W1 H +ATOM 18078 OH2 TIP3X5197 25.072 -27.563 -25.491 1.00 0.00 W1 O +ATOM 18079 H1 TIP3X5197 24.735 -27.212 -26.315 1.00 0.00 W1 H +ATOM 18080 H2 TIP3X5197 25.969 -27.830 -25.692 1.00 0.00 W1 H +ATOM 18081 OH2 TIP3X5198 20.528 -28.252 -23.747 1.00 0.00 W1 O +ATOM 18082 H1 TIP3X5198 19.585 -28.299 -23.905 1.00 0.00 W1 H +ATOM 18083 H2 TIP3X5198 20.667 -27.378 -23.383 1.00 0.00 W1 H +ATOM 18084 OH2 TIP3X5199 15.890 -27.126 -26.953 1.00 0.00 W1 O +ATOM 18085 H1 TIP3X5199 15.616 -27.251 -26.045 1.00 0.00 W1 H +ATOM 18086 H2 TIP3X5199 15.695 -26.208 -27.139 1.00 0.00 W1 H +ATOM 18087 OH2 TIP3X5200 19.890 -27.799 -18.893 1.00 0.00 W1 O +ATOM 18088 H1 TIP3X5200 19.912 -28.605 -19.409 1.00 0.00 W1 H +ATOM 18089 H2 TIP3X5200 19.496 -27.151 -19.477 1.00 0.00 W1 H +ATOM 18090 OH2 TIP3X5201 20.473 -21.264 -23.088 1.00 0.00 W1 O +ATOM 18091 H1 TIP3X5201 20.402 -22.199 -23.276 1.00 0.00 W1 H +ATOM 18092 H2 TIP3X5201 20.478 -21.210 -22.132 1.00 0.00 W1 H +ATOM 18093 OH2 TIP3X5202 24.662 -24.245 -18.526 1.00 0.00 W1 O +ATOM 18094 H1 TIP3X5202 25.074 -23.413 -18.289 1.00 0.00 W1 H +ATOM 18095 H2 TIP3X5202 24.113 -24.034 -19.280 1.00 0.00 W1 H +ATOM 18096 OH2 TIP3X5203 30.458 -28.878 -29.201 1.00 0.00 W1 O +ATOM 18097 H1 TIP3X5203 30.892 -28.651 -28.379 1.00 0.00 W1 H +ATOM 18098 H2 TIP3X5203 29.938 -29.654 -28.992 1.00 0.00 W1 H +ATOM 18099 OH2 TIP3X5204 21.612 -22.918 -30.023 1.00 0.00 W1 O +ATOM 18100 H1 TIP3X5204 21.323 -23.040 -29.119 1.00 0.00 W1 H +ATOM 18101 H2 TIP3X5204 22.301 -23.572 -30.144 1.00 0.00 W1 H +ATOM 18102 OH2 TIP3X5205 28.316 -24.402 -28.955 1.00 0.00 W1 O +ATOM 18103 H1 TIP3X5205 27.451 -24.601 -28.596 1.00 0.00 W1 H +ATOM 18104 H2 TIP3X5205 28.873 -24.281 -28.186 1.00 0.00 W1 H +ATOM 18105 OH2 TIP3X5206 23.149 -24.148 -22.485 1.00 0.00 W1 O +ATOM 18106 H1 TIP3X5206 23.246 -23.351 -21.963 1.00 0.00 W1 H +ATOM 18107 H2 TIP3X5206 24.023 -24.538 -22.493 1.00 0.00 W1 H +ATOM 18108 OH2 TIP3X5207 22.894 -23.766 -25.569 1.00 0.00 W1 O +ATOM 18109 H1 TIP3X5207 23.515 -24.363 -25.987 1.00 0.00 W1 H +ATOM 18110 H2 TIP3X5207 22.919 -24.004 -24.642 1.00 0.00 W1 H +ATOM 18111 OH2 TIP3X5208 25.789 -22.151 -16.633 1.00 0.00 W1 O +ATOM 18112 H1 TIP3X5208 25.111 -21.867 -16.020 1.00 0.00 W1 H +ATOM 18113 H2 TIP3X5208 26.587 -22.191 -16.106 1.00 0.00 W1 H +ATOM 18114 OH2 TIP3X5209 18.298 -22.735 -18.937 1.00 0.00 W1 O +ATOM 18115 H1 TIP3X5209 18.815 -22.330 -18.241 1.00 0.00 W1 H +ATOM 18116 H2 TIP3X5209 17.916 -21.998 -19.412 1.00 0.00 W1 H +ATOM 18117 OH2 TIP3X5210 17.205 -24.773 -17.315 1.00 0.00 W1 O +ATOM 18118 H1 TIP3X5210 17.001 -25.613 -17.728 1.00 0.00 W1 H +ATOM 18119 H2 TIP3X5210 17.081 -24.127 -18.011 1.00 0.00 W1 H +ATOM 18120 OH2 TIP3X5211 17.097 -23.900 -24.492 1.00 0.00 W1 O +ATOM 18121 H1 TIP3X5211 17.454 -23.028 -24.662 1.00 0.00 W1 H +ATOM 18122 H2 TIP3X5211 16.995 -24.291 -25.360 1.00 0.00 W1 H +ATOM 18123 OH2 TIP3X5212 27.856 -21.635 -30.305 1.00 0.00 W1 O +ATOM 18124 H1 TIP3X5212 28.562 -21.137 -30.717 1.00 0.00 W1 H +ATOM 18125 H2 TIP3X5212 28.305 -22.266 -29.742 1.00 0.00 W1 H +ATOM 18126 OH2 TIP3X5213 30.453 -24.288 -26.943 1.00 0.00 W1 O +ATOM 18127 H1 TIP3X5213 30.165 -24.115 -26.046 1.00 0.00 W1 H +ATOM 18128 H2 TIP3X5213 30.965 -23.516 -27.183 1.00 0.00 W1 H +ATOM 18129 OH2 TIP3X5214 16.950 -25.171 -22.221 1.00 0.00 W1 O +ATOM 18130 H1 TIP3X5214 17.045 -24.493 -22.889 1.00 0.00 W1 H +ATOM 18131 H2 TIP3X5214 17.609 -24.952 -21.561 1.00 0.00 W1 H +ATOM 18132 OH2 TIP3X5215 19.737 -16.664 -28.957 1.00 0.00 W1 O +ATOM 18133 H1 TIP3X5215 19.508 -16.304 -29.814 1.00 0.00 W1 H +ATOM 18134 H2 TIP3X5215 19.324 -17.527 -28.941 1.00 0.00 W1 H +ATOM 18135 OH2 TIP3X5216 18.512 -21.431 -30.459 1.00 0.00 W1 O +ATOM 18136 H1 TIP3X5216 17.696 -21.721 -30.867 1.00 0.00 W1 H +ATOM 18137 H2 TIP3X5216 19.044 -22.225 -30.397 1.00 0.00 W1 H +ATOM 18138 OH2 TIP3X5217 19.930 -20.592 -17.384 1.00 0.00 W1 O +ATOM 18139 H1 TIP3X5217 19.357 -19.990 -17.858 1.00 0.00 W1 H +ATOM 18140 H2 TIP3X5217 19.456 -20.788 -16.576 1.00 0.00 W1 H +ATOM 18141 OH2 TIP3X5218 23.006 -15.849 -19.693 1.00 0.00 W1 O +ATOM 18142 H1 TIP3X5218 23.324 -16.143 -18.840 1.00 0.00 W1 H +ATOM 18143 H2 TIP3X5218 23.439 -16.426 -20.322 1.00 0.00 W1 H +ATOM 18144 OH2 TIP3X5219 27.712 -15.607 -25.560 1.00 0.00 W1 O +ATOM 18145 H1 TIP3X5219 27.300 -16.298 -26.078 1.00 0.00 W1 H +ATOM 18146 H2 TIP3X5219 27.516 -14.800 -26.036 1.00 0.00 W1 H +ATOM 18147 OH2 TIP3X5220 24.290 -18.925 -28.308 1.00 0.00 W1 O +ATOM 18148 H1 TIP3X5220 24.549 -18.139 -28.790 1.00 0.00 W1 H +ATOM 18149 H2 TIP3X5220 23.721 -18.601 -27.610 1.00 0.00 W1 H +ATOM 18150 OH2 TIP3X5221 24.307 -23.770 -29.236 1.00 0.00 W1 O +ATOM 18151 H1 TIP3X5221 25.130 -23.697 -29.719 1.00 0.00 W1 H +ATOM 18152 H2 TIP3X5221 24.315 -23.026 -28.635 1.00 0.00 W1 H +ATOM 18153 OH2 TIP3X5222 27.709 -29.047 -19.445 1.00 0.00 W1 O +ATOM 18154 H1 TIP3X5222 28.514 -29.277 -19.909 1.00 0.00 W1 H +ATOM 18155 H2 TIP3X5222 27.999 -28.494 -18.720 1.00 0.00 W1 H +ATOM 18156 OH2 TIP3X5223 15.674 -21.945 -28.039 1.00 0.00 W1 O +ATOM 18157 H1 TIP3X5223 15.520 -21.853 -28.979 1.00 0.00 W1 H +ATOM 18158 H2 TIP3X5223 16.627 -21.945 -27.950 1.00 0.00 W1 H +ATOM 18159 OH2 TIP3X5224 26.436 -22.357 -21.443 1.00 0.00 W1 O +ATOM 18160 H1 TIP3X5224 26.981 -21.696 -21.017 1.00 0.00 W1 H +ATOM 18161 H2 TIP3X5224 26.895 -22.558 -22.259 1.00 0.00 W1 H +ATOM 18162 OH2 TIP3X5225 25.258 -17.384 -30.366 1.00 0.00 W1 O +ATOM 18163 H1 TIP3X5225 26.083 -17.348 -29.881 1.00 0.00 W1 H +ATOM 18164 H2 TIP3X5225 25.461 -17.896 -31.148 1.00 0.00 W1 H +ATOM 18165 OH2 TIP3X5226 25.250 -19.596 -18.715 1.00 0.00 W1 O +ATOM 18166 H1 TIP3X5226 24.429 -19.349 -18.288 1.00 0.00 W1 H +ATOM 18167 H2 TIP3X5226 25.021 -19.692 -19.639 1.00 0.00 W1 H +ATOM 18168 OH2 TIP3X5227 21.875 -19.371 -26.828 1.00 0.00 W1 O +ATOM 18169 H1 TIP3X5227 21.168 -19.224 -27.456 1.00 0.00 W1 H +ATOM 18170 H2 TIP3X5227 21.538 -19.027 -26.001 1.00 0.00 W1 H +ATOM 18171 OH2 TIP3X5228 18.440 -18.459 -18.117 1.00 0.00 W1 O +ATOM 18172 H1 TIP3X5228 19.174 -17.848 -18.181 1.00 0.00 W1 H +ATOM 18173 H2 TIP3X5228 18.128 -18.365 -17.217 1.00 0.00 W1 H +ATOM 18174 OH2 TIP3X5229 18.030 -16.755 -24.015 1.00 0.00 W1 O +ATOM 18175 H1 TIP3X5229 17.444 -17.496 -24.169 1.00 0.00 W1 H +ATOM 18176 H2 TIP3X5229 18.473 -16.621 -24.853 1.00 0.00 W1 H +ATOM 18177 OH2 TIP3X5230 26.384 -30.741 -22.935 1.00 0.00 W1 O +ATOM 18178 H1 TIP3X5230 26.716 -30.816 -23.829 1.00 0.00 W1 H +ATOM 18179 H2 TIP3X5230 26.339 -29.799 -22.774 1.00 0.00 W1 H +ATOM 18180 OH2 TIP3X5231 23.622 -28.612 -22.700 1.00 0.00 W1 O +ATOM 18181 H1 TIP3X5231 23.260 -28.123 -23.439 1.00 0.00 W1 H +ATOM 18182 H2 TIP3X5231 22.890 -28.702 -22.090 1.00 0.00 W1 H +ATOM 18183 OH2 TIP3X5232 22.341 -30.628 -28.772 1.00 0.00 W1 O +ATOM 18184 H1 TIP3X5232 23.196 -30.883 -28.427 1.00 0.00 W1 H +ATOM 18185 H2 TIP3X5232 21.822 -31.432 -28.747 1.00 0.00 W1 H +ATOM 18186 OH2 TIP3X5233 25.092 -30.784 -27.729 1.00 0.00 W1 O +ATOM 18187 H1 TIP3X5233 25.548 -31.520 -27.320 1.00 0.00 W1 H +ATOM 18188 H2 TIP3X5233 25.500 -30.698 -28.590 1.00 0.00 W1 H +ATOM 18189 OH2 TIP3X5234 19.732 -16.206 -16.274 1.00 0.00 W1 O +ATOM 18190 H1 TIP3X5234 19.481 -15.449 -16.804 1.00 0.00 W1 H +ATOM 18191 H2 TIP3X5234 20.643 -16.375 -16.513 1.00 0.00 W1 H +ATOM 18192 OH2 TIP3X5235 24.738 -17.511 -25.974 1.00 0.00 W1 O +ATOM 18193 H1 TIP3X5235 25.399 -18.153 -25.714 1.00 0.00 W1 H +ATOM 18194 H2 TIP3X5235 24.725 -16.877 -25.257 1.00 0.00 W1 H +ATOM 18195 OH2 TIP3X5236 22.478 -16.609 -17.064 1.00 0.00 W1 O +ATOM 18196 H1 TIP3X5236 22.695 -17.501 -16.794 1.00 0.00 W1 H +ATOM 18197 H2 TIP3X5236 23.085 -16.055 -16.575 1.00 0.00 W1 H +ATOM 18198 OH2 TIP3X5237 21.424 -28.491 -27.020 1.00 0.00 W1 O +ATOM 18199 H1 TIP3X5237 22.081 -29.150 -27.242 1.00 0.00 W1 H +ATOM 18200 H2 TIP3X5237 21.467 -28.422 -26.066 1.00 0.00 W1 H +ATOM 18201 OH2 TIP3X5238 16.137 -30.152 -17.564 1.00 0.00 W1 O +ATOM 18202 H1 TIP3X5238 16.886 -30.348 -18.128 1.00 0.00 W1 H +ATOM 18203 H2 TIP3X5238 16.346 -30.578 -16.732 1.00 0.00 W1 H +ATOM 18204 OH2 TIP3X5239 27.257 -17.425 -27.962 1.00 0.00 W1 O +ATOM 18205 H1 TIP3X5239 27.402 -18.365 -27.859 1.00 0.00 W1 H +ATOM 18206 H2 TIP3X5239 28.080 -17.093 -28.319 1.00 0.00 W1 H +ATOM 18207 OH2 TIP3X5240 28.925 -30.659 -16.735 1.00 0.00 W1 O +ATOM 18208 H1 TIP3X5240 28.311 -30.585 -17.466 1.00 0.00 W1 H +ATOM 18209 H2 TIP3X5240 29.694 -30.164 -17.017 1.00 0.00 W1 H +ATOM 18210 OH2 TIP3X5241 19.718 -16.446 -26.249 1.00 0.00 W1 O +ATOM 18211 H1 TIP3X5241 19.712 -16.401 -27.205 1.00 0.00 W1 H +ATOM 18212 H2 TIP3X5241 20.526 -16.000 -25.993 1.00 0.00 W1 H +ATOM 18213 OH2 TIP3X5242 30.627 -17.507 -18.299 1.00 0.00 W1 O +ATOM 18214 H1 TIP3X5242 29.905 -16.956 -17.998 1.00 0.00 W1 H +ATOM 18215 H2 TIP3X5242 31.415 -17.008 -18.085 1.00 0.00 W1 H +ATOM 18216 OH2 TIP3X5243 18.253 -28.185 -26.619 1.00 0.00 W1 O +ATOM 18217 H1 TIP3X5243 17.610 -27.797 -27.212 1.00 0.00 W1 H +ATOM 18218 H2 TIP3X5243 19.056 -27.688 -26.777 1.00 0.00 W1 H +ATOM 18219 OH2 TIP3X5244 19.682 -19.586 -28.888 1.00 0.00 W1 O +ATOM 18220 H1 TIP3X5244 19.643 -20.214 -29.609 1.00 0.00 W1 H +ATOM 18221 H2 TIP3X5244 18.962 -19.840 -28.310 1.00 0.00 W1 H +ATOM 18222 OH2 TIP3X5245 17.576 -20.058 -11.248 1.00 0.00 W1 O +ATOM 18223 H1 TIP3X5245 17.759 -20.134 -10.312 1.00 0.00 W1 H +ATOM 18224 H2 TIP3X5245 17.552 -19.116 -11.413 1.00 0.00 W1 H +ATOM 18225 OH2 TIP3X5246 28.679 -22.567 -7.510 1.00 0.00 W1 O +ATOM 18226 H1 TIP3X5246 28.914 -22.303 -8.400 1.00 0.00 W1 H +ATOM 18227 H2 TIP3X5246 29.508 -22.831 -7.111 1.00 0.00 W1 H +ATOM 18228 OH2 TIP3X5247 20.663 -22.844 -11.532 1.00 0.00 W1 O +ATOM 18229 H1 TIP3X5247 20.693 -21.934 -11.235 1.00 0.00 W1 H +ATOM 18230 H2 TIP3X5247 21.170 -23.327 -10.880 1.00 0.00 W1 H +ATOM 18231 OH2 TIP3X5248 28.466 -18.684 -9.388 1.00 0.00 W1 O +ATOM 18232 H1 TIP3X5248 28.191 -18.194 -8.613 1.00 0.00 W1 H +ATOM 18233 H2 TIP3X5248 27.941 -19.484 -9.365 1.00 0.00 W1 H +ATOM 18234 OH2 TIP3X5249 26.983 -20.241 -12.345 1.00 0.00 W1 O +ATOM 18235 H1 TIP3X5249 27.145 -20.470 -13.260 1.00 0.00 W1 H +ATOM 18236 H2 TIP3X5249 26.054 -20.012 -12.315 1.00 0.00 W1 H +ATOM 18237 OH2 TIP3X5250 30.830 -19.709 -7.561 1.00 0.00 W1 O +ATOM 18238 H1 TIP3X5250 30.278 -19.626 -8.338 1.00 0.00 W1 H +ATOM 18239 H2 TIP3X5250 30.220 -19.926 -6.856 1.00 0.00 W1 H +ATOM 18240 OH2 TIP3X5251 17.467 -18.445 -5.110 1.00 0.00 W1 O +ATOM 18241 H1 TIP3X5251 17.873 -18.242 -4.267 1.00 0.00 W1 H +ATOM 18242 H2 TIP3X5251 16.895 -19.191 -4.927 1.00 0.00 W1 H +ATOM 18243 OH2 TIP3X5252 24.842 -16.820 -5.884 1.00 0.00 W1 O +ATOM 18244 H1 TIP3X5252 25.143 -17.721 -5.762 1.00 0.00 W1 H +ATOM 18245 H2 TIP3X5252 25.467 -16.440 -6.501 1.00 0.00 W1 H +ATOM 18246 OH2 TIP3X5253 28.274 -16.863 -6.004 1.00 0.00 W1 O +ATOM 18247 H1 TIP3X5253 27.839 -16.040 -6.223 1.00 0.00 W1 H +ATOM 18248 H2 TIP3X5253 29.203 -16.638 -5.954 1.00 0.00 W1 H +ATOM 18249 OH2 TIP3X5254 20.722 -17.289 -6.874 1.00 0.00 W1 O +ATOM 18250 H1 TIP3X5254 21.078 -16.440 -7.138 1.00 0.00 W1 H +ATOM 18251 H2 TIP3X5254 19.787 -17.229 -7.070 1.00 0.00 W1 H +ATOM 18252 OH2 TIP3X5255 25.564 -25.396 -7.973 1.00 0.00 W1 O +ATOM 18253 H1 TIP3X5255 25.486 -26.206 -8.477 1.00 0.00 W1 H +ATOM 18254 H2 TIP3X5255 26.506 -25.257 -7.885 1.00 0.00 W1 H +ATOM 18255 OH2 TIP3X5256 21.587 -29.299 -5.611 1.00 0.00 W1 O +ATOM 18256 H1 TIP3X5256 21.844 -30.036 -5.058 1.00 0.00 W1 H +ATOM 18257 H2 TIP3X5256 20.910 -29.655 -6.186 1.00 0.00 W1 H +ATOM 18258 OH2 TIP3X5257 29.830 -28.294 -9.188 1.00 0.00 W1 O +ATOM 18259 H1 TIP3X5257 29.523 -27.956 -8.347 1.00 0.00 W1 H +ATOM 18260 H2 TIP3X5257 29.898 -29.240 -9.056 1.00 0.00 W1 H +ATOM 18261 OH2 TIP3X5258 28.428 -27.099 -7.234 1.00 0.00 W1 O +ATOM 18262 H1 TIP3X5258 29.003 -27.327 -6.503 1.00 0.00 W1 H +ATOM 18263 H2 TIP3X5258 27.553 -27.353 -6.939 1.00 0.00 W1 H +ATOM 18264 OH2 TIP3X5259 21.474 -25.974 -5.863 1.00 0.00 W1 O +ATOM 18265 H1 TIP3X5259 21.978 -26.677 -5.451 1.00 0.00 W1 H +ATOM 18266 H2 TIP3X5259 22.132 -25.332 -6.129 1.00 0.00 W1 H +ATOM 18267 OH2 TIP3X5260 28.951 -24.926 -8.965 1.00 0.00 W1 O +ATOM 18268 H1 TIP3X5260 28.992 -25.826 -8.641 1.00 0.00 W1 H +ATOM 18269 H2 TIP3X5260 28.833 -24.393 -8.179 1.00 0.00 W1 H +ATOM 18270 OH2 TIP3X5261 27.636 -28.283 -11.097 1.00 0.00 W1 O +ATOM 18271 H1 TIP3X5261 28.461 -28.098 -10.648 1.00 0.00 W1 H +ATOM 18272 H2 TIP3X5261 27.712 -27.828 -11.936 1.00 0.00 W1 H +ATOM 18273 OH2 TIP3X5262 23.818 -22.311 -5.025 1.00 0.00 W1 O +ATOM 18274 H1 TIP3X5262 24.695 -22.289 -5.408 1.00 0.00 W1 H +ATOM 18275 H2 TIP3X5262 23.553 -21.393 -4.979 1.00 0.00 W1 H +ATOM 18276 OH2 TIP3X5263 22.969 -19.763 -5.215 1.00 0.00 W1 O +ATOM 18277 H1 TIP3X5263 22.944 -19.536 -6.145 1.00 0.00 W1 H +ATOM 18278 H2 TIP3X5263 22.049 -19.817 -4.957 1.00 0.00 W1 H +ATOM 18279 OH2 TIP3X5264 17.832 -27.882 -8.377 1.00 0.00 W1 O +ATOM 18280 H1 TIP3X5264 17.506 -27.002 -8.186 1.00 0.00 W1 H +ATOM 18281 H2 TIP3X5264 17.708 -27.984 -9.321 1.00 0.00 W1 H +ATOM 18282 OH2 TIP3X5265 19.988 -24.324 -8.365 1.00 0.00 W1 O +ATOM 18283 H1 TIP3X5265 19.305 -24.774 -8.862 1.00 0.00 W1 H +ATOM 18284 H2 TIP3X5265 20.473 -25.028 -7.933 1.00 0.00 W1 H +ATOM 18285 OH2 TIP3X5266 26.043 -19.400 -5.968 1.00 0.00 W1 O +ATOM 18286 H1 TIP3X5266 25.801 -19.986 -6.685 1.00 0.00 W1 H +ATOM 18287 H2 TIP3X5266 26.993 -19.489 -5.896 1.00 0.00 W1 H +ATOM 18288 OH2 TIP3X5267 30.341 -15.765 -9.188 1.00 0.00 W1 O +ATOM 18289 H1 TIP3X5267 30.336 -16.233 -8.353 1.00 0.00 W1 H +ATOM 18290 H2 TIP3X5267 29.461 -15.894 -9.541 1.00 0.00 W1 H +ATOM 18291 OH2 TIP3X5268 22.213 -19.429 -8.166 1.00 0.00 W1 O +ATOM 18292 H1 TIP3X5268 21.642 -20.148 -7.897 1.00 0.00 W1 H +ATOM 18293 H2 TIP3X5268 21.753 -18.638 -7.883 1.00 0.00 W1 H +ATOM 18294 OH2 TIP3X5269 24.435 -28.977 -3.595 1.00 0.00 W1 O +ATOM 18295 H1 TIP3X5269 23.692 -28.498 -3.228 1.00 0.00 W1 H +ATOM 18296 H2 TIP3X5269 24.054 -29.789 -3.930 1.00 0.00 W1 H +ATOM 18297 OH2 TIP3X5270 19.787 -28.272 -13.794 1.00 0.00 W1 O +ATOM 18298 H1 TIP3X5270 19.689 -28.934 -13.109 1.00 0.00 W1 H +ATOM 18299 H2 TIP3X5270 19.603 -28.741 -14.608 1.00 0.00 W1 H +ATOM 18300 OH2 TIP3X5271 30.680 -27.350 -5.604 1.00 0.00 W1 O +ATOM 18301 H1 TIP3X5271 31.199 -26.682 -6.051 1.00 0.00 W1 H +ATOM 18302 H2 TIP3X5271 31.122 -27.475 -4.764 1.00 0.00 W1 H +ATOM 18303 OH2 TIP3X5272 16.738 -30.998 -11.444 1.00 0.00 W1 O +ATOM 18304 H1 TIP3X5272 17.463 -30.377 -11.375 1.00 0.00 W1 H +ATOM 18305 H2 TIP3X5272 16.366 -31.031 -10.563 1.00 0.00 W1 H +ATOM 18306 OH2 TIP3X5273 22.004 -24.762 -1.458 1.00 0.00 W1 O +ATOM 18307 H1 TIP3X5273 22.868 -24.364 -1.559 1.00 0.00 W1 H +ATOM 18308 H2 TIP3X5273 22.156 -25.699 -1.580 1.00 0.00 W1 H +ATOM 18309 OH2 TIP3X5274 25.170 -19.852 -8.718 1.00 0.00 W1 O +ATOM 18310 H1 TIP3X5274 25.264 -20.715 -9.122 1.00 0.00 W1 H +ATOM 18311 H2 TIP3X5274 24.237 -19.652 -8.794 1.00 0.00 W1 H +ATOM 18312 OH2 TIP3X5275 23.782 -21.568 -11.187 1.00 0.00 W1 O +ATOM 18313 H1 TIP3X5275 23.218 -22.182 -10.718 1.00 0.00 W1 H +ATOM 18314 H2 TIP3X5275 23.308 -20.737 -11.159 1.00 0.00 W1 H +ATOM 18315 OH2 TIP3X5276 16.320 -21.055 -4.730 1.00 0.00 W1 O +ATOM 18316 H1 TIP3X5276 15.785 -21.657 -5.248 1.00 0.00 W1 H +ATOM 18317 H2 TIP3X5276 15.849 -20.969 -3.901 1.00 0.00 W1 H +ATOM 18318 OH2 TIP3X5277 27.616 -22.034 -10.363 1.00 0.00 W1 O +ATOM 18319 H1 TIP3X5277 27.560 -22.949 -10.639 1.00 0.00 W1 H +ATOM 18320 H2 TIP3X5277 27.444 -21.532 -11.159 1.00 0.00 W1 H +ATOM 18321 OH2 TIP3X5278 27.913 -21.520 -3.338 1.00 0.00 W1 O +ATOM 18322 H1 TIP3X5278 27.011 -21.436 -3.030 1.00 0.00 W1 H +ATOM 18323 H2 TIP3X5278 28.082 -22.462 -3.335 1.00 0.00 W1 H +ATOM 18324 OH2 TIP3X5279 30.280 -23.561 -5.533 1.00 0.00 W1 O +ATOM 18325 H1 TIP3X5279 30.942 -24.241 -5.652 1.00 0.00 W1 H +ATOM 18326 H2 TIP3X5279 29.564 -24.000 -5.074 1.00 0.00 W1 H +ATOM 18327 OH2 TIP3X5280 19.424 -23.874 -0.388 1.00 0.00 W1 O +ATOM 18328 H1 TIP3X5280 18.895 -24.108 -1.151 1.00 0.00 W1 H +ATOM 18329 H2 TIP3X5280 20.320 -23.826 -0.723 1.00 0.00 W1 H +ATOM 18330 OH2 TIP3X5281 20.335 -20.668 -4.827 1.00 0.00 W1 O +ATOM 18331 H1 TIP3X5281 20.290 -21.223 -4.048 1.00 0.00 W1 H +ATOM 18332 H2 TIP3X5281 19.702 -19.969 -4.661 1.00 0.00 W1 H +ATOM 18333 OH2 TIP3X5282 29.006 -19.538 -5.077 1.00 0.00 W1 O +ATOM 18334 H1 TIP3X5282 29.430 -18.770 -4.693 1.00 0.00 W1 H +ATOM 18335 H2 TIP3X5282 28.702 -20.046 -4.325 1.00 0.00 W1 H +ATOM 18336 OH2 TIP3X5283 27.094 -17.562 -3.252 1.00 0.00 W1 O +ATOM 18337 H1 TIP3X5283 26.387 -18.191 -3.395 1.00 0.00 W1 H +ATOM 18338 H2 TIP3X5283 27.423 -17.368 -4.130 1.00 0.00 W1 H +ATOM 18339 OH2 TIP3X5284 27.345 -19.026 -0.856 1.00 0.00 W1 O +ATOM 18340 H1 TIP3X5284 26.711 -19.633 -1.240 1.00 0.00 W1 H +ATOM 18341 H2 TIP3X5284 27.458 -18.346 -1.520 1.00 0.00 W1 H +ATOM 18342 OH2 TIP3X5285 30.955 -17.118 -6.789 1.00 0.00 W1 O +ATOM 18343 H1 TIP3X5285 31.633 -17.276 -6.133 1.00 0.00 W1 H +ATOM 18344 H2 TIP3X5285 30.721 -17.989 -7.108 1.00 0.00 W1 H +ATOM 18345 OH2 TIP3X5286 21.511 -30.647 -8.397 1.00 0.00 W1 O +ATOM 18346 H1 TIP3X5286 21.220 -29.737 -8.457 1.00 0.00 W1 H +ATOM 18347 H2 TIP3X5286 22.343 -30.664 -8.870 1.00 0.00 W1 H +ATOM 18348 OH2 TIP3X5287 23.635 -20.700 -14.742 1.00 0.00 W1 O +ATOM 18349 H1 TIP3X5287 22.940 -21.322 -14.528 1.00 0.00 W1 H +ATOM 18350 H2 TIP3X5287 23.618 -20.064 -14.027 1.00 0.00 W1 H +ATOM 18351 OH2 TIP3X5288 31.016 -21.937 -15.306 1.00 0.00 W1 O +ATOM 18352 H1 TIP3X5288 30.753 -22.686 -15.839 1.00 0.00 W1 H +ATOM 18353 H2 TIP3X5288 30.761 -21.173 -15.823 1.00 0.00 W1 H +ATOM 18354 OH2 TIP3X5289 16.964 -18.240 -15.589 1.00 0.00 W1 O +ATOM 18355 H1 TIP3X5289 17.409 -18.789 -14.943 1.00 0.00 W1 H +ATOM 18356 H2 TIP3X5289 16.067 -18.574 -15.610 1.00 0.00 W1 H +ATOM 18357 OH2 TIP3X5290 29.057 -16.111 -14.330 1.00 0.00 W1 O +ATOM 18358 H1 TIP3X5290 29.942 -16.439 -14.489 1.00 0.00 W1 H +ATOM 18359 H2 TIP3X5290 28.827 -15.643 -15.133 1.00 0.00 W1 H +ATOM 18360 OH2 TIP3X5291 30.449 -20.449 -2.253 1.00 0.00 W1 O +ATOM 18361 H1 TIP3X5291 30.340 -19.500 -2.194 1.00 0.00 W1 H +ATOM 18362 H2 TIP3X5291 29.557 -20.794 -2.263 1.00 0.00 W1 H +ATOM 18363 OH2 TIP3X5292 17.136 -17.623 -12.634 1.00 0.00 W1 O +ATOM 18364 H1 TIP3X5292 17.068 -16.787 -12.174 1.00 0.00 W1 H +ATOM 18365 H2 TIP3X5292 16.240 -17.962 -12.651 1.00 0.00 W1 H +ATOM 18366 OH2 TIP3X5293 29.716 -19.130 -14.990 1.00 0.00 W1 O +ATOM 18367 H1 TIP3X5293 29.747 -19.210 -14.036 1.00 0.00 W1 H +ATOM 18368 H2 TIP3X5293 28.883 -18.693 -15.166 1.00 0.00 W1 H +ATOM 18369 OH2 TIP3X5294 26.086 -30.836 -2.106 1.00 0.00 W1 O +ATOM 18370 H1 TIP3X5294 25.780 -30.087 -2.618 1.00 0.00 W1 H +ATOM 18371 H2 TIP3X5294 26.140 -31.553 -2.738 1.00 0.00 W1 H +ATOM 18372 OH2 TIP3X5295 20.300 -16.919 -4.077 1.00 0.00 W1 O +ATOM 18373 H1 TIP3X5295 21.148 -16.681 -3.703 1.00 0.00 W1 H +ATOM 18374 H2 TIP3X5295 20.512 -17.299 -4.930 1.00 0.00 W1 H +ATOM 18375 OH2 TIP3X5296 18.766 -28.901 -0.726 1.00 0.00 W1 O +ATOM 18376 H1 TIP3X5296 17.889 -28.811 -0.352 1.00 0.00 W1 H +ATOM 18377 H2 TIP3X5296 18.829 -28.188 -1.363 1.00 0.00 W1 H +ATOM 18378 OH2 TIP3X5297 24.964 -26.954 -14.996 1.00 0.00 W1 O +ATOM 18379 H1 TIP3X5297 24.798 -26.657 -15.891 1.00 0.00 W1 H +ATOM 18380 H2 TIP3X5297 24.093 -27.077 -14.619 1.00 0.00 W1 H +ATOM 18381 OH2 TIP3X5298 30.361 -19.193 -11.948 1.00 0.00 W1 O +ATOM 18382 H1 TIP3X5298 30.934 -19.930 -11.735 1.00 0.00 W1 H +ATOM 18383 H2 TIP3X5298 30.030 -18.894 -11.101 1.00 0.00 W1 H +ATOM 18384 OH2 TIP3X5299 25.622 -30.157 -15.019 1.00 0.00 W1 O +ATOM 18385 H1 TIP3X5299 26.354 -29.541 -14.994 1.00 0.00 W1 H +ATOM 18386 H2 TIP3X5299 25.863 -30.790 -15.695 1.00 0.00 W1 H +ATOM 18387 OH2 TIP3X5300 30.154 -30.064 -4.754 1.00 0.00 W1 O +ATOM 18388 H1 TIP3X5300 30.646 -30.693 -4.226 1.00 0.00 W1 H +ATOM 18389 H2 TIP3X5300 30.755 -29.821 -5.459 1.00 0.00 W1 H +ATOM 18390 OH2 TIP3X5301 17.661 -20.843 -8.676 1.00 0.00 W1 O +ATOM 18391 H1 TIP3X5301 16.993 -20.520 -8.071 1.00 0.00 W1 H +ATOM 18392 H2 TIP3X5301 18.454 -20.913 -8.144 1.00 0.00 W1 H +ATOM 18393 OH2 TIP3X5302 22.658 -19.424 -1.565 1.00 0.00 W1 O +ATOM 18394 H1 TIP3X5302 22.882 -19.802 -0.715 1.00 0.00 W1 H +ATOM 18395 H2 TIP3X5302 22.052 -20.053 -1.956 1.00 0.00 W1 H +ATOM 18396 OH2 TIP3X5303 26.138 -28.119 -6.153 1.00 0.00 W1 O +ATOM 18397 H1 TIP3X5303 26.197 -28.301 -5.215 1.00 0.00 W1 H +ATOM 18398 H2 TIP3X5303 25.199 -28.032 -6.321 1.00 0.00 W1 H +ATOM 18399 OH2 TIP3X5304 22.329 -27.463 -1.974 1.00 0.00 W1 O +ATOM 18400 H1 TIP3X5304 21.462 -27.533 -2.374 1.00 0.00 W1 H +ATOM 18401 H2 TIP3X5304 22.274 -28.003 -1.186 1.00 0.00 W1 H +ATOM 18402 OH2 TIP3X5305 29.815 -24.742 -0.221 1.00 0.00 W1 O +ATOM 18403 H1 TIP3X5305 30.610 -25.276 -0.237 1.00 0.00 W1 H +ATOM 18404 H2 TIP3X5305 29.521 -24.777 0.690 1.00 0.00 W1 H +ATOM 18405 OH2 TIP3X5306 18.000 -30.875 -4.302 1.00 0.00 W1 O +ATOM 18406 H1 TIP3X5306 17.775 -30.422 -5.115 1.00 0.00 W1 H +ATOM 18407 H2 TIP3X5306 18.830 -31.312 -4.494 1.00 0.00 W1 H +ATOM 18408 OH2 TIP3X5307 24.095 -30.418 -9.221 1.00 0.00 W1 O +ATOM 18409 H1 TIP3X5307 24.577 -29.904 -9.868 1.00 0.00 W1 H +ATOM 18410 H2 TIP3X5307 24.439 -30.124 -8.377 1.00 0.00 W1 H +ATOM 18411 OH2 TIP3X5308 18.565 -25.826 -14.068 1.00 0.00 W1 O +ATOM 18412 H1 TIP3X5308 18.988 -25.180 -14.634 1.00 0.00 W1 H +ATOM 18413 H2 TIP3X5308 19.277 -26.401 -13.787 1.00 0.00 W1 H +ATOM 18414 OH2 TIP3X5309 19.090 -25.170 -4.757 1.00 0.00 W1 O +ATOM 18415 H1 TIP3X5309 19.005 -24.378 -4.225 1.00 0.00 W1 H +ATOM 18416 H2 TIP3X5309 20.005 -25.174 -5.037 1.00 0.00 W1 H +ATOM 18417 OH2 TIP3X5310 18.272 -24.451 -11.571 1.00 0.00 W1 O +ATOM 18418 H1 TIP3X5310 18.335 -24.740 -12.482 1.00 0.00 W1 H +ATOM 18419 H2 TIP3X5310 19.048 -23.906 -11.438 1.00 0.00 W1 H +ATOM 18420 OH2 TIP3X5311 27.293 -27.882 -13.811 1.00 0.00 W1 O +ATOM 18421 H1 TIP3X5311 26.585 -27.393 -14.231 1.00 0.00 W1 H +ATOM 18422 H2 TIP3X5311 28.018 -27.838 -14.435 1.00 0.00 W1 H +ATOM 18423 OH2 TIP3X5312 15.843 -26.995 -2.723 1.00 0.00 W1 O +ATOM 18424 H1 TIP3X5312 14.939 -26.701 -2.612 1.00 0.00 W1 H +ATOM 18425 H2 TIP3X5312 15.984 -27.614 -2.007 1.00 0.00 W1 H +ATOM 18426 OH2 TIP3X5313 16.987 -30.158 -6.741 1.00 0.00 W1 O +ATOM 18427 H1 TIP3X5313 17.094 -30.859 -7.383 1.00 0.00 W1 H +ATOM 18428 H2 TIP3X5313 17.122 -29.352 -7.240 1.00 0.00 W1 H +ATOM 18429 OH2 TIP3X5314 28.508 -26.530 -1.853 1.00 0.00 W1 O +ATOM 18430 H1 TIP3X5314 28.820 -25.951 -1.157 1.00 0.00 W1 H +ATOM 18431 H2 TIP3X5314 27.564 -26.594 -1.708 1.00 0.00 W1 H +ATOM 18432 OH2 TIP3X5315 25.551 -26.524 -1.906 1.00 0.00 W1 O +ATOM 18433 H1 TIP3X5315 25.192 -25.956 -2.587 1.00 0.00 W1 H +ATOM 18434 H2 TIP3X5315 25.214 -27.394 -2.117 1.00 0.00 W1 H +ATOM 18435 OH2 TIP3X5316 23.754 -26.055 -12.041 1.00 0.00 W1 O +ATOM 18436 H1 TIP3X5316 23.843 -25.475 -12.797 1.00 0.00 W1 H +ATOM 18437 H2 TIP3X5316 22.985 -26.589 -12.237 1.00 0.00 W1 H +ATOM 18438 OH2 TIP3X5317 22.057 -26.723 -14.353 1.00 0.00 W1 O +ATOM 18439 H1 TIP3X5317 21.620 -26.531 -15.183 1.00 0.00 W1 H +ATOM 18440 H2 TIP3X5317 21.650 -27.534 -14.050 1.00 0.00 W1 H +ATOM 18441 OH2 TIP3X5318 22.768 -29.661 -0.564 1.00 0.00 W1 O +ATOM 18442 H1 TIP3X5318 22.301 -30.048 0.176 1.00 0.00 W1 H +ATOM 18443 H2 TIP3X5318 23.682 -29.629 -0.282 1.00 0.00 W1 H +ATOM 18444 OH2 TIP3X5319 28.331 -24.317 -3.883 1.00 0.00 W1 O +ATOM 18445 H1 TIP3X5319 28.350 -24.966 -3.180 1.00 0.00 W1 H +ATOM 18446 H2 TIP3X5319 27.496 -24.468 -4.327 1.00 0.00 W1 H +ATOM 18447 OH2 TIP3X5320 16.406 -27.216 -15.413 1.00 0.00 W1 O +ATOM 18448 H1 TIP3X5320 15.649 -27.409 -14.859 1.00 0.00 W1 H +ATOM 18449 H2 TIP3X5320 16.940 -26.618 -14.891 1.00 0.00 W1 H +ATOM 18450 OH2 TIP3X5321 16.324 -15.723 -14.926 1.00 0.00 W1 O +ATOM 18451 H1 TIP3X5321 16.740 -16.470 -14.497 1.00 0.00 W1 H +ATOM 18452 H2 TIP3X5321 16.337 -15.029 -14.267 1.00 0.00 W1 H +ATOM 18453 OH2 TIP3X5322 25.072 -27.563 -9.933 1.00 0.00 W1 O +ATOM 18454 H1 TIP3X5322 24.735 -27.212 -10.758 1.00 0.00 W1 H +ATOM 18455 H2 TIP3X5322 25.969 -27.830 -10.135 1.00 0.00 W1 H +ATOM 18456 OH2 TIP3X5323 20.528 -28.252 -8.189 1.00 0.00 W1 O +ATOM 18457 H1 TIP3X5323 19.585 -28.299 -8.348 1.00 0.00 W1 H +ATOM 18458 H2 TIP3X5323 20.667 -27.378 -7.826 1.00 0.00 W1 H +ATOM 18459 OH2 TIP3X5324 15.890 -27.126 -11.396 1.00 0.00 W1 O +ATOM 18460 H1 TIP3X5324 15.616 -27.251 -10.487 1.00 0.00 W1 H +ATOM 18461 H2 TIP3X5324 15.695 -26.208 -11.582 1.00 0.00 W1 H +ATOM 18462 OH2 TIP3X5325 19.890 -27.799 -3.335 1.00 0.00 W1 O +ATOM 18463 H1 TIP3X5325 19.912 -28.605 -3.851 1.00 0.00 W1 H +ATOM 18464 H2 TIP3X5325 19.496 -27.151 -3.920 1.00 0.00 W1 H +ATOM 18465 OH2 TIP3X5326 20.473 -21.264 -7.531 1.00 0.00 W1 O +ATOM 18466 H1 TIP3X5326 20.402 -22.199 -7.718 1.00 0.00 W1 H +ATOM 18467 H2 TIP3X5326 20.478 -21.210 -6.575 1.00 0.00 W1 H +ATOM 18468 OH2 TIP3X5327 24.662 -24.245 -2.968 1.00 0.00 W1 O +ATOM 18469 H1 TIP3X5327 25.074 -23.413 -2.732 1.00 0.00 W1 H +ATOM 18470 H2 TIP3X5327 24.113 -24.034 -3.723 1.00 0.00 W1 H +ATOM 18471 OH2 TIP3X5328 30.458 -28.878 -13.644 1.00 0.00 W1 O +ATOM 18472 H1 TIP3X5328 30.892 -28.651 -12.822 1.00 0.00 W1 H +ATOM 18473 H2 TIP3X5328 29.938 -29.654 -13.434 1.00 0.00 W1 H +ATOM 18474 OH2 TIP3X5329 21.612 -22.918 -14.466 1.00 0.00 W1 O +ATOM 18475 H1 TIP3X5329 21.323 -23.040 -13.561 1.00 0.00 W1 H +ATOM 18476 H2 TIP3X5329 22.301 -23.572 -14.587 1.00 0.00 W1 H +ATOM 18477 OH2 TIP3X5330 28.316 -24.402 -13.398 1.00 0.00 W1 O +ATOM 18478 H1 TIP3X5330 27.451 -24.601 -13.039 1.00 0.00 W1 H +ATOM 18479 H2 TIP3X5330 28.873 -24.281 -12.629 1.00 0.00 W1 H +ATOM 18480 OH2 TIP3X5331 23.149 -24.148 -6.927 1.00 0.00 W1 O +ATOM 18481 H1 TIP3X5331 23.246 -23.351 -6.406 1.00 0.00 W1 H +ATOM 18482 H2 TIP3X5331 24.023 -24.538 -6.936 1.00 0.00 W1 H +ATOM 18483 OH2 TIP3X5332 22.894 -23.766 -10.011 1.00 0.00 W1 O +ATOM 18484 H1 TIP3X5332 23.515 -24.363 -10.429 1.00 0.00 W1 H +ATOM 18485 H2 TIP3X5332 22.919 -24.004 -9.084 1.00 0.00 W1 H +ATOM 18486 OH2 TIP3X5333 25.789 -22.151 -1.075 1.00 0.00 W1 O +ATOM 18487 H1 TIP3X5333 25.111 -21.867 -0.462 1.00 0.00 W1 H +ATOM 18488 H2 TIP3X5333 26.587 -22.191 -0.549 1.00 0.00 W1 H +ATOM 18489 OH2 TIP3X5334 18.298 -22.735 -3.379 1.00 0.00 W1 O +ATOM 18490 H1 TIP3X5334 18.815 -22.330 -2.683 1.00 0.00 W1 H +ATOM 18491 H2 TIP3X5334 17.916 -21.998 -3.855 1.00 0.00 W1 H +ATOM 18492 OH2 TIP3X5335 17.205 -24.773 -1.758 1.00 0.00 W1 O +ATOM 18493 H1 TIP3X5335 17.001 -25.613 -2.170 1.00 0.00 W1 H +ATOM 18494 H2 TIP3X5335 17.081 -24.127 -2.453 1.00 0.00 W1 H +ATOM 18495 OH2 TIP3X5336 17.097 -23.900 -8.934 1.00 0.00 W1 O +ATOM 18496 H1 TIP3X5336 17.454 -23.028 -9.104 1.00 0.00 W1 H +ATOM 18497 H2 TIP3X5336 16.995 -24.291 -9.802 1.00 0.00 W1 H +ATOM 18498 OH2 TIP3X5337 27.856 -21.635 -14.748 1.00 0.00 W1 O +ATOM 18499 H1 TIP3X5337 28.562 -21.137 -15.160 1.00 0.00 W1 H +ATOM 18500 H2 TIP3X5337 28.305 -22.266 -14.184 1.00 0.00 W1 H +ATOM 18501 OH2 TIP3X5338 30.453 -24.288 -11.385 1.00 0.00 W1 O +ATOM 18502 H1 TIP3X5338 30.165 -24.115 -10.489 1.00 0.00 W1 H +ATOM 18503 H2 TIP3X5338 30.965 -23.516 -11.626 1.00 0.00 W1 H +ATOM 18504 OH2 TIP3X5339 16.950 -25.171 -6.663 1.00 0.00 W1 O +ATOM 18505 H1 TIP3X5339 17.045 -24.493 -7.332 1.00 0.00 W1 H +ATOM 18506 H2 TIP3X5339 17.609 -24.952 -6.004 1.00 0.00 W1 H +ATOM 18507 OH2 TIP3X5340 19.737 -16.664 -13.399 1.00 0.00 W1 O +ATOM 18508 H1 TIP3X5340 19.508 -16.304 -14.256 1.00 0.00 W1 H +ATOM 18509 H2 TIP3X5340 19.324 -17.527 -13.383 1.00 0.00 W1 H +ATOM 18510 OH2 TIP3X5341 18.512 -21.431 -14.901 1.00 0.00 W1 O +ATOM 18511 H1 TIP3X5341 17.696 -21.721 -15.310 1.00 0.00 W1 H +ATOM 18512 H2 TIP3X5341 19.044 -22.225 -14.840 1.00 0.00 W1 H +ATOM 18513 OH2 TIP3X5342 19.930 -20.592 -1.826 1.00 0.00 W1 O +ATOM 18514 H1 TIP3X5342 19.357 -19.990 -2.301 1.00 0.00 W1 H +ATOM 18515 H2 TIP3X5342 19.456 -20.788 -1.018 1.00 0.00 W1 H +ATOM 18516 OH2 TIP3X5343 23.006 -15.849 -4.136 1.00 0.00 W1 O +ATOM 18517 H1 TIP3X5343 23.324 -16.143 -3.282 1.00 0.00 W1 H +ATOM 18518 H2 TIP3X5343 23.439 -16.426 -4.765 1.00 0.00 W1 H +ATOM 18519 OH2 TIP3X5344 27.712 -15.607 -10.002 1.00 0.00 W1 O +ATOM 18520 H1 TIP3X5344 27.300 -16.298 -10.521 1.00 0.00 W1 H +ATOM 18521 H2 TIP3X5344 27.516 -14.800 -10.479 1.00 0.00 W1 H +ATOM 18522 OH2 TIP3X5345 24.290 -18.925 -12.750 1.00 0.00 W1 O +ATOM 18523 H1 TIP3X5345 24.549 -18.139 -13.232 1.00 0.00 W1 H +ATOM 18524 H2 TIP3X5345 23.721 -18.601 -12.052 1.00 0.00 W1 H +ATOM 18525 OH2 TIP3X5346 24.307 -23.770 -13.679 1.00 0.00 W1 O +ATOM 18526 H1 TIP3X5346 25.130 -23.697 -14.162 1.00 0.00 W1 H +ATOM 18527 H2 TIP3X5346 24.315 -23.026 -13.077 1.00 0.00 W1 H +ATOM 18528 OH2 TIP3X5347 27.709 -29.047 -3.888 1.00 0.00 W1 O +ATOM 18529 H1 TIP3X5347 28.514 -29.277 -4.351 1.00 0.00 W1 H +ATOM 18530 H2 TIP3X5347 27.999 -28.494 -3.163 1.00 0.00 W1 H +ATOM 18531 OH2 TIP3X5348 15.674 -21.945 -12.482 1.00 0.00 W1 O +ATOM 18532 H1 TIP3X5348 15.520 -21.853 -13.422 1.00 0.00 W1 H +ATOM 18533 H2 TIP3X5348 16.627 -21.945 -12.393 1.00 0.00 W1 H +ATOM 18534 OH2 TIP3X5349 26.436 -22.357 -5.886 1.00 0.00 W1 O +ATOM 18535 H1 TIP3X5349 26.981 -21.696 -5.460 1.00 0.00 W1 H +ATOM 18536 H2 TIP3X5349 26.895 -22.558 -6.701 1.00 0.00 W1 H +ATOM 18537 OH2 TIP3X5350 25.258 -17.384 -14.808 1.00 0.00 W1 O +ATOM 18538 H1 TIP3X5350 26.083 -17.348 -14.324 1.00 0.00 W1 H +ATOM 18539 H2 TIP3X5350 25.461 -17.896 -15.591 1.00 0.00 W1 H +ATOM 18540 OH2 TIP3X5351 25.250 -19.596 -3.157 1.00 0.00 W1 O +ATOM 18541 H1 TIP3X5351 24.429 -19.349 -2.731 1.00 0.00 W1 H +ATOM 18542 H2 TIP3X5351 25.021 -19.692 -4.082 1.00 0.00 W1 H +ATOM 18543 OH2 TIP3X5352 21.875 -19.371 -11.271 1.00 0.00 W1 O +ATOM 18544 H1 TIP3X5352 21.168 -19.224 -11.899 1.00 0.00 W1 H +ATOM 18545 H2 TIP3X5352 21.538 -19.027 -10.444 1.00 0.00 W1 H +ATOM 18546 OH2 TIP3X5353 18.440 -18.459 -2.559 1.00 0.00 W1 O +ATOM 18547 H1 TIP3X5353 19.174 -17.848 -2.624 1.00 0.00 W1 H +ATOM 18548 H2 TIP3X5353 18.128 -18.365 -1.660 1.00 0.00 W1 H +ATOM 18549 OH2 TIP3X5354 18.030 -16.755 -8.458 1.00 0.00 W1 O +ATOM 18550 H1 TIP3X5354 17.444 -17.496 -8.611 1.00 0.00 W1 H +ATOM 18551 H2 TIP3X5354 18.473 -16.621 -9.296 1.00 0.00 W1 H +ATOM 18552 OH2 TIP3X5355 26.384 -30.741 -7.377 1.00 0.00 W1 O +ATOM 18553 H1 TIP3X5355 26.716 -30.816 -8.272 1.00 0.00 W1 H +ATOM 18554 H2 TIP3X5355 26.339 -29.799 -7.216 1.00 0.00 W1 H +ATOM 18555 OH2 TIP3X5356 23.622 -28.612 -7.143 1.00 0.00 W1 O +ATOM 18556 H1 TIP3X5356 23.260 -28.123 -7.882 1.00 0.00 W1 H +ATOM 18557 H2 TIP3X5356 22.890 -28.702 -6.533 1.00 0.00 W1 H +ATOM 18558 OH2 TIP3X5357 22.341 -30.628 -13.215 1.00 0.00 W1 O +ATOM 18559 H1 TIP3X5357 23.196 -30.883 -12.869 1.00 0.00 W1 H +ATOM 18560 H2 TIP3X5357 21.822 -31.432 -13.190 1.00 0.00 W1 H +ATOM 18561 OH2 TIP3X5358 25.092 -30.784 -12.171 1.00 0.00 W1 O +ATOM 18562 H1 TIP3X5358 25.548 -31.520 -11.763 1.00 0.00 W1 H +ATOM 18563 H2 TIP3X5358 25.500 -30.698 -13.033 1.00 0.00 W1 H +ATOM 18564 OH2 TIP3X5359 19.732 -16.206 -0.717 1.00 0.00 W1 O +ATOM 18565 H1 TIP3X5359 19.481 -15.449 -1.246 1.00 0.00 W1 H +ATOM 18566 H2 TIP3X5359 20.643 -16.375 -0.956 1.00 0.00 W1 H +ATOM 18567 OH2 TIP3X5360 24.738 -17.511 -10.416 1.00 0.00 W1 O +ATOM 18568 H1 TIP3X5360 25.399 -18.153 -10.156 1.00 0.00 W1 H +ATOM 18569 H2 TIP3X5360 24.725 -16.877 -9.700 1.00 0.00 W1 H +ATOM 18570 OH2 TIP3X5361 22.478 -16.609 -1.507 1.00 0.00 W1 O +ATOM 18571 H1 TIP3X5361 22.695 -17.501 -1.236 1.00 0.00 W1 H +ATOM 18572 H2 TIP3X5361 23.085 -16.055 -1.017 1.00 0.00 W1 H +ATOM 18573 OH2 TIP3X5362 21.424 -28.491 -11.462 1.00 0.00 W1 O +ATOM 18574 H1 TIP3X5362 22.081 -29.150 -11.685 1.00 0.00 W1 H +ATOM 18575 H2 TIP3X5362 21.467 -28.422 -10.508 1.00 0.00 W1 H +ATOM 18576 OH2 TIP3X5363 16.137 -30.152 -2.006 1.00 0.00 W1 O +ATOM 18577 H1 TIP3X5363 16.886 -30.348 -2.570 1.00 0.00 W1 H +ATOM 18578 H2 TIP3X5363 16.346 -30.578 -1.175 1.00 0.00 W1 H +ATOM 18579 OH2 TIP3X5364 27.257 -17.425 -12.405 1.00 0.00 W1 O +ATOM 18580 H1 TIP3X5364 27.402 -18.365 -12.302 1.00 0.00 W1 H +ATOM 18581 H2 TIP3X5364 28.080 -17.093 -12.762 1.00 0.00 W1 H +ATOM 18582 OH2 TIP3X5365 28.925 -30.659 -1.178 1.00 0.00 W1 O +ATOM 18583 H1 TIP3X5365 28.311 -30.585 -1.908 1.00 0.00 W1 H +ATOM 18584 H2 TIP3X5365 29.694 -30.164 -1.459 1.00 0.00 W1 H +ATOM 18585 OH2 TIP3X5366 19.718 -16.446 -10.691 1.00 0.00 W1 O +ATOM 18586 H1 TIP3X5366 19.712 -16.401 -11.647 1.00 0.00 W1 H +ATOM 18587 H2 TIP3X5366 20.526 -16.000 -10.435 1.00 0.00 W1 H +ATOM 18588 OH2 TIP3X5367 30.627 -17.507 -2.742 1.00 0.00 W1 O +ATOM 18589 H1 TIP3X5367 29.905 -16.956 -2.441 1.00 0.00 W1 H +ATOM 18590 H2 TIP3X5367 31.415 -17.008 -2.528 1.00 0.00 W1 H +ATOM 18591 OH2 TIP3X5368 18.253 -28.185 -11.062 1.00 0.00 W1 O +ATOM 18592 H1 TIP3X5368 17.610 -27.797 -11.654 1.00 0.00 W1 H +ATOM 18593 H2 TIP3X5368 19.056 -27.688 -11.220 1.00 0.00 W1 H +ATOM 18594 OH2 TIP3X5369 19.682 -19.586 -13.330 1.00 0.00 W1 O +ATOM 18595 H1 TIP3X5369 19.643 -20.214 -14.052 1.00 0.00 W1 H +ATOM 18596 H2 TIP3X5369 18.962 -19.840 -12.752 1.00 0.00 W1 H +ATOM 18597 OH2 TIP3X5370 17.576 -20.058 4.309 1.00 0.00 W1 O +ATOM 18598 H1 TIP3X5370 17.759 -20.134 5.246 1.00 0.00 W1 H +ATOM 18599 H2 TIP3X5370 17.552 -19.116 4.145 1.00 0.00 W1 H +ATOM 18600 OH2 TIP3X5371 28.679 -22.567 8.047 1.00 0.00 W1 O +ATOM 18601 H1 TIP3X5371 28.914 -22.303 7.158 1.00 0.00 W1 H +ATOM 18602 H2 TIP3X5371 29.508 -22.831 8.446 1.00 0.00 W1 H +ATOM 18603 OH2 TIP3X5372 20.663 -22.844 4.026 1.00 0.00 W1 O +ATOM 18604 H1 TIP3X5372 20.693 -21.934 4.323 1.00 0.00 W1 H +ATOM 18605 H2 TIP3X5372 21.170 -23.327 4.678 1.00 0.00 W1 H +ATOM 18606 OH2 TIP3X5373 28.466 -18.684 6.169 1.00 0.00 W1 O +ATOM 18607 H1 TIP3X5373 28.191 -18.194 6.944 1.00 0.00 W1 H +ATOM 18608 H2 TIP3X5373 27.941 -19.484 6.192 1.00 0.00 W1 H +ATOM 18609 OH2 TIP3X5374 26.983 -20.241 3.212 1.00 0.00 W1 O +ATOM 18610 H1 TIP3X5374 27.145 -20.470 2.297 1.00 0.00 W1 H +ATOM 18611 H2 TIP3X5374 26.054 -20.012 3.242 1.00 0.00 W1 H +ATOM 18612 OH2 TIP3X5375 30.830 -19.709 7.997 1.00 0.00 W1 O +ATOM 18613 H1 TIP3X5375 30.278 -19.626 7.219 1.00 0.00 W1 H +ATOM 18614 H2 TIP3X5375 30.220 -19.926 8.702 1.00 0.00 W1 H +ATOM 18615 OH2 TIP3X5376 17.467 -18.445 10.448 1.00 0.00 W1 O +ATOM 18616 H1 TIP3X5376 17.873 -18.242 11.291 1.00 0.00 W1 H +ATOM 18617 H2 TIP3X5376 16.895 -19.191 10.630 1.00 0.00 W1 H +ATOM 18618 OH2 TIP3X5377 24.842 -16.820 9.674 1.00 0.00 W1 O +ATOM 18619 H1 TIP3X5377 25.143 -17.721 9.796 1.00 0.00 W1 H +ATOM 18620 H2 TIP3X5377 25.467 -16.440 9.057 1.00 0.00 W1 H +ATOM 18621 OH2 TIP3X5378 28.274 -16.863 9.554 1.00 0.00 W1 O +ATOM 18622 H1 TIP3X5378 27.839 -16.040 9.334 1.00 0.00 W1 H +ATOM 18623 H2 TIP3X5378 29.203 -16.638 9.603 1.00 0.00 W1 H +ATOM 18624 OH2 TIP3X5379 20.722 -17.289 8.683 1.00 0.00 W1 O +ATOM 18625 H1 TIP3X5379 21.078 -16.440 8.420 1.00 0.00 W1 H +ATOM 18626 H2 TIP3X5379 19.787 -17.229 8.487 1.00 0.00 W1 H +ATOM 18627 OH2 TIP3X5380 25.564 -25.396 7.585 1.00 0.00 W1 O +ATOM 18628 H1 TIP3X5380 25.486 -26.206 7.080 1.00 0.00 W1 H +ATOM 18629 H2 TIP3X5380 26.506 -25.257 7.672 1.00 0.00 W1 H +ATOM 18630 OH2 TIP3X5381 21.587 -29.299 9.947 1.00 0.00 W1 O +ATOM 18631 H1 TIP3X5381 21.844 -30.036 10.500 1.00 0.00 W1 H +ATOM 18632 H2 TIP3X5381 20.910 -29.655 9.371 1.00 0.00 W1 H +ATOM 18633 OH2 TIP3X5382 29.830 -28.294 6.370 1.00 0.00 W1 O +ATOM 18634 H1 TIP3X5382 29.523 -27.956 7.211 1.00 0.00 W1 H +ATOM 18635 H2 TIP3X5382 29.898 -29.240 6.501 1.00 0.00 W1 H +ATOM 18636 OH2 TIP3X5383 28.428 -27.099 8.324 1.00 0.00 W1 O +ATOM 18637 H1 TIP3X5383 29.003 -27.327 9.054 1.00 0.00 W1 H +ATOM 18638 H2 TIP3X5383 27.553 -27.353 8.618 1.00 0.00 W1 H +ATOM 18639 OH2 TIP3X5384 21.474 -25.974 9.695 1.00 0.00 W1 O +ATOM 18640 H1 TIP3X5384 21.978 -26.677 10.107 1.00 0.00 W1 H +ATOM 18641 H2 TIP3X5384 22.132 -25.332 9.428 1.00 0.00 W1 H +ATOM 18642 OH2 TIP3X5385 28.951 -24.926 6.592 1.00 0.00 W1 O +ATOM 18643 H1 TIP3X5385 28.992 -25.826 6.916 1.00 0.00 W1 H +ATOM 18644 H2 TIP3X5385 28.833 -24.393 7.379 1.00 0.00 W1 H +ATOM 18645 OH2 TIP3X5386 27.636 -28.283 4.461 1.00 0.00 W1 O +ATOM 18646 H1 TIP3X5386 28.461 -28.098 4.910 1.00 0.00 W1 H +ATOM 18647 H2 TIP3X5386 27.712 -27.828 3.622 1.00 0.00 W1 H +ATOM 18648 OH2 TIP3X5387 23.818 -22.311 10.532 1.00 0.00 W1 O +ATOM 18649 H1 TIP3X5387 24.695 -22.289 10.149 1.00 0.00 W1 H +ATOM 18650 H2 TIP3X5387 23.553 -21.393 10.578 1.00 0.00 W1 H +ATOM 18651 OH2 TIP3X5388 22.969 -19.763 10.342 1.00 0.00 W1 O +ATOM 18652 H1 TIP3X5388 22.944 -19.536 9.413 1.00 0.00 W1 H +ATOM 18653 H2 TIP3X5388 22.049 -19.817 10.601 1.00 0.00 W1 H +ATOM 18654 OH2 TIP3X5389 17.832 -27.882 7.180 1.00 0.00 W1 O +ATOM 18655 H1 TIP3X5389 17.506 -27.002 7.371 1.00 0.00 W1 H +ATOM 18656 H2 TIP3X5389 17.708 -27.984 6.237 1.00 0.00 W1 H +ATOM 18657 OH2 TIP3X5390 19.988 -24.324 7.193 1.00 0.00 W1 O +ATOM 18658 H1 TIP3X5390 19.305 -24.774 6.696 1.00 0.00 W1 H +ATOM 18659 H2 TIP3X5390 20.473 -25.028 7.624 1.00 0.00 W1 H +ATOM 18660 OH2 TIP3X5391 26.043 -19.400 9.589 1.00 0.00 W1 O +ATOM 18661 H1 TIP3X5391 25.801 -19.986 8.872 1.00 0.00 W1 H +ATOM 18662 H2 TIP3X5391 26.993 -19.489 9.662 1.00 0.00 W1 H +ATOM 18663 OH2 TIP3X5392 30.341 -15.765 6.370 1.00 0.00 W1 O +ATOM 18664 H1 TIP3X5392 30.336 -16.233 7.205 1.00 0.00 W1 H +ATOM 18665 H2 TIP3X5392 29.461 -15.894 6.017 1.00 0.00 W1 H +ATOM 18666 OH2 TIP3X5393 22.213 -19.429 7.392 1.00 0.00 W1 O +ATOM 18667 H1 TIP3X5393 21.642 -20.148 7.661 1.00 0.00 W1 H +ATOM 18668 H2 TIP3X5393 21.753 -18.638 7.674 1.00 0.00 W1 H +ATOM 18669 OH2 TIP3X5394 24.435 -28.977 11.962 1.00 0.00 W1 O +ATOM 18670 H1 TIP3X5394 23.692 -28.498 12.329 1.00 0.00 W1 H +ATOM 18671 H2 TIP3X5394 24.054 -29.789 11.628 1.00 0.00 W1 H +ATOM 18672 OH2 TIP3X5395 19.787 -28.272 1.764 1.00 0.00 W1 O +ATOM 18673 H1 TIP3X5395 19.689 -28.934 2.448 1.00 0.00 W1 H +ATOM 18674 H2 TIP3X5395 19.603 -28.741 0.949 1.00 0.00 W1 H +ATOM 18675 OH2 TIP3X5396 30.680 -27.350 9.953 1.00 0.00 W1 O +ATOM 18676 H1 TIP3X5396 31.199 -26.682 9.506 1.00 0.00 W1 H +ATOM 18677 H2 TIP3X5396 31.122 -27.475 10.793 1.00 0.00 W1 H +ATOM 18678 OH2 TIP3X5397 16.738 -30.998 4.113 1.00 0.00 W1 O +ATOM 18679 H1 TIP3X5397 17.463 -30.377 4.182 1.00 0.00 W1 H +ATOM 18680 H2 TIP3X5397 16.366 -31.031 4.995 1.00 0.00 W1 H +ATOM 18681 OH2 TIP3X5398 22.004 -24.762 14.100 1.00 0.00 W1 O +ATOM 18682 H1 TIP3X5398 22.868 -24.364 13.998 1.00 0.00 W1 H +ATOM 18683 H2 TIP3X5398 22.156 -25.699 13.977 1.00 0.00 W1 H +ATOM 18684 OH2 TIP3X5399 25.170 -19.852 6.839 1.00 0.00 W1 O +ATOM 18685 H1 TIP3X5399 25.264 -20.715 6.436 1.00 0.00 W1 H +ATOM 18686 H2 TIP3X5399 24.237 -19.652 6.763 1.00 0.00 W1 H +ATOM 18687 OH2 TIP3X5400 23.782 -21.568 4.370 1.00 0.00 W1 O +ATOM 18688 H1 TIP3X5400 23.218 -22.182 4.840 1.00 0.00 W1 H +ATOM 18689 H2 TIP3X5400 23.308 -20.737 4.398 1.00 0.00 W1 H +ATOM 18690 OH2 TIP3X5401 16.320 -21.055 10.827 1.00 0.00 W1 O +ATOM 18691 H1 TIP3X5401 15.785 -21.657 10.309 1.00 0.00 W1 H +ATOM 18692 H2 TIP3X5401 15.849 -20.969 11.656 1.00 0.00 W1 H +ATOM 18693 OH2 TIP3X5402 27.616 -22.034 5.195 1.00 0.00 W1 O +ATOM 18694 H1 TIP3X5402 27.560 -22.949 4.918 1.00 0.00 W1 H +ATOM 18695 H2 TIP3X5402 27.444 -21.532 4.399 1.00 0.00 W1 H +ATOM 18696 OH2 TIP3X5403 27.913 -21.520 12.219 1.00 0.00 W1 O +ATOM 18697 H1 TIP3X5403 27.011 -21.436 12.527 1.00 0.00 W1 H +ATOM 18698 H2 TIP3X5403 28.082 -22.462 12.223 1.00 0.00 W1 H +ATOM 18699 OH2 TIP3X5404 30.280 -23.561 10.025 1.00 0.00 W1 O +ATOM 18700 H1 TIP3X5404 30.942 -24.241 9.906 1.00 0.00 W1 H +ATOM 18701 H2 TIP3X5404 29.564 -24.000 10.484 1.00 0.00 W1 H +ATOM 18702 OH2 TIP3X5405 19.424 -23.874 15.169 1.00 0.00 W1 O +ATOM 18703 H1 TIP3X5405 18.895 -24.108 14.407 1.00 0.00 W1 H +ATOM 18704 H2 TIP3X5405 20.320 -23.826 14.835 1.00 0.00 W1 H +ATOM 18705 OH2 TIP3X5406 20.335 -20.668 10.731 1.00 0.00 W1 O +ATOM 18706 H1 TIP3X5406 20.290 -21.223 11.509 1.00 0.00 W1 H +ATOM 18707 H2 TIP3X5406 19.702 -19.969 10.897 1.00 0.00 W1 H +ATOM 18708 OH2 TIP3X5407 29.006 -19.538 10.480 1.00 0.00 W1 O +ATOM 18709 H1 TIP3X5407 29.430 -18.770 10.864 1.00 0.00 W1 H +ATOM 18710 H2 TIP3X5407 28.702 -20.046 11.233 1.00 0.00 W1 H +ATOM 18711 OH2 TIP3X5408 27.094 -17.562 12.305 1.00 0.00 W1 O +ATOM 18712 H1 TIP3X5408 26.387 -18.191 12.163 1.00 0.00 W1 H +ATOM 18713 H2 TIP3X5408 27.423 -17.368 11.428 1.00 0.00 W1 H +ATOM 18714 OH2 TIP3X5409 27.345 -19.026 14.702 1.00 0.00 W1 O +ATOM 18715 H1 TIP3X5409 26.711 -19.633 14.318 1.00 0.00 W1 H +ATOM 18716 H2 TIP3X5409 27.458 -18.346 14.038 1.00 0.00 W1 H +ATOM 18717 OH2 TIP3X5410 30.955 -17.118 8.768 1.00 0.00 W1 O +ATOM 18718 H1 TIP3X5410 31.633 -17.276 9.425 1.00 0.00 W1 H +ATOM 18719 H2 TIP3X5410 30.721 -17.989 8.449 1.00 0.00 W1 H +ATOM 18720 OH2 TIP3X5411 21.511 -30.647 7.161 1.00 0.00 W1 O +ATOM 18721 H1 TIP3X5411 21.220 -29.737 7.100 1.00 0.00 W1 H +ATOM 18722 H2 TIP3X5411 22.343 -30.664 6.688 1.00 0.00 W1 H +ATOM 18723 OH2 TIP3X5412 23.635 -20.700 0.815 1.00 0.00 W1 O +ATOM 18724 H1 TIP3X5412 22.940 -21.322 1.030 1.00 0.00 W1 H +ATOM 18725 H2 TIP3X5412 23.618 -20.064 1.530 1.00 0.00 W1 H +ATOM 18726 OH2 TIP3X5413 31.016 -21.937 0.252 1.00 0.00 W1 O +ATOM 18727 H1 TIP3X5413 30.753 -22.686 -0.282 1.00 0.00 W1 H +ATOM 18728 H2 TIP3X5413 30.761 -21.173 -0.266 1.00 0.00 W1 H +ATOM 18729 OH2 TIP3X5414 16.964 -18.240 -0.031 1.00 0.00 W1 O +ATOM 18730 H1 TIP3X5414 17.409 -18.789 0.614 1.00 0.00 W1 H +ATOM 18731 H2 TIP3X5414 16.067 -18.574 -0.053 1.00 0.00 W1 H +ATOM 18732 OH2 TIP3X5415 29.057 -16.111 1.227 1.00 0.00 W1 O +ATOM 18733 H1 TIP3X5415 29.942 -16.439 1.069 1.00 0.00 W1 H +ATOM 18734 H2 TIP3X5415 28.827 -15.643 0.425 1.00 0.00 W1 H +ATOM 18735 OH2 TIP3X5416 30.449 -20.449 13.305 1.00 0.00 W1 O +ATOM 18736 H1 TIP3X5416 30.340 -19.500 13.364 1.00 0.00 W1 H +ATOM 18737 H2 TIP3X5416 29.557 -20.794 13.294 1.00 0.00 W1 H +ATOM 18738 OH2 TIP3X5417 17.136 -17.623 2.923 1.00 0.00 W1 O +ATOM 18739 H1 TIP3X5417 17.068 -16.787 3.384 1.00 0.00 W1 H +ATOM 18740 H2 TIP3X5417 16.240 -17.962 2.907 1.00 0.00 W1 H +ATOM 18741 OH2 TIP3X5418 29.716 -19.130 0.568 1.00 0.00 W1 O +ATOM 18742 H1 TIP3X5418 29.747 -19.210 1.521 1.00 0.00 W1 H +ATOM 18743 H2 TIP3X5418 28.883 -18.693 0.391 1.00 0.00 W1 H +ATOM 18744 OH2 TIP3X5419 26.086 -30.836 13.452 1.00 0.00 W1 O +ATOM 18745 H1 TIP3X5419 25.780 -30.087 12.939 1.00 0.00 W1 H +ATOM 18746 H2 TIP3X5419 26.140 -31.553 12.820 1.00 0.00 W1 H +ATOM 18747 OH2 TIP3X5420 20.300 -16.919 11.481 1.00 0.00 W1 O +ATOM 18748 H1 TIP3X5420 21.148 -16.681 11.854 1.00 0.00 W1 H +ATOM 18749 H2 TIP3X5420 20.512 -17.299 10.628 1.00 0.00 W1 H +ATOM 18750 OH2 TIP3X5421 18.766 -28.901 14.831 1.00 0.00 W1 O +ATOM 18751 H1 TIP3X5421 17.889 -28.811 15.205 1.00 0.00 W1 H +ATOM 18752 H2 TIP3X5421 18.829 -28.188 14.195 1.00 0.00 W1 H +ATOM 18753 OH2 TIP3X5422 24.964 -26.954 0.562 1.00 0.00 W1 O +ATOM 18754 H1 TIP3X5422 24.798 -26.657 -0.333 1.00 0.00 W1 H +ATOM 18755 H2 TIP3X5422 24.093 -27.077 0.939 1.00 0.00 W1 H +ATOM 18756 OH2 TIP3X5423 30.361 -19.193 3.610 1.00 0.00 W1 O +ATOM 18757 H1 TIP3X5423 30.934 -19.930 3.823 1.00 0.00 W1 H +ATOM 18758 H2 TIP3X5423 30.030 -18.894 4.457 1.00 0.00 W1 H +ATOM 18759 OH2 TIP3X5424 25.622 -30.157 0.539 1.00 0.00 W1 O +ATOM 18760 H1 TIP3X5424 26.354 -29.541 0.563 1.00 0.00 W1 H +ATOM 18761 H2 TIP3X5424 25.863 -30.790 -0.138 1.00 0.00 W1 H +ATOM 18762 OH2 TIP3X5425 30.154 -30.064 10.804 1.00 0.00 W1 O +ATOM 18763 H1 TIP3X5425 30.646 -30.693 11.331 1.00 0.00 W1 H +ATOM 18764 H2 TIP3X5425 30.755 -29.821 10.098 1.00 0.00 W1 H +ATOM 18765 OH2 TIP3X5426 17.661 -20.843 6.882 1.00 0.00 W1 O +ATOM 18766 H1 TIP3X5426 16.993 -20.520 7.486 1.00 0.00 W1 H +ATOM 18767 H2 TIP3X5426 18.454 -20.913 7.414 1.00 0.00 W1 H +ATOM 18768 OH2 TIP3X5427 22.658 -19.424 13.992 1.00 0.00 W1 O +ATOM 18769 H1 TIP3X5427 22.882 -19.802 14.843 1.00 0.00 W1 H +ATOM 18770 H2 TIP3X5427 22.052 -20.053 13.602 1.00 0.00 W1 H +ATOM 18771 OH2 TIP3X5428 26.138 -28.119 9.405 1.00 0.00 W1 O +ATOM 18772 H1 TIP3X5428 26.197 -28.301 10.343 1.00 0.00 W1 H +ATOM 18773 H2 TIP3X5428 25.199 -28.032 9.236 1.00 0.00 W1 H +ATOM 18774 OH2 TIP3X5429 22.329 -27.463 13.584 1.00 0.00 W1 O +ATOM 18775 H1 TIP3X5429 21.462 -27.533 13.184 1.00 0.00 W1 H +ATOM 18776 H2 TIP3X5429 22.274 -28.003 14.372 1.00 0.00 W1 H +ATOM 18777 OH2 TIP3X5430 29.815 -24.742 15.337 1.00 0.00 W1 O +ATOM 18778 H1 TIP3X5430 30.610 -25.276 15.320 1.00 0.00 W1 H +ATOM 18779 H2 TIP3X5430 29.521 -24.777 16.247 1.00 0.00 W1 H +ATOM 18780 OH2 TIP3X5431 18.000 -30.875 11.255 1.00 0.00 W1 O +ATOM 18781 H1 TIP3X5431 17.775 -30.422 10.443 1.00 0.00 W1 H +ATOM 18782 H2 TIP3X5431 18.830 -31.312 11.064 1.00 0.00 W1 H +ATOM 18783 OH2 TIP3X5432 24.095 -30.418 6.337 1.00 0.00 W1 O +ATOM 18784 H1 TIP3X5432 24.577 -29.904 5.689 1.00 0.00 W1 H +ATOM 18785 H2 TIP3X5432 24.439 -30.124 7.181 1.00 0.00 W1 H +ATOM 18786 OH2 TIP3X5433 18.565 -25.826 1.490 1.00 0.00 W1 O +ATOM 18787 H1 TIP3X5433 18.988 -25.180 0.924 1.00 0.00 W1 H +ATOM 18788 H2 TIP3X5433 19.277 -26.401 1.771 1.00 0.00 W1 H +ATOM 18789 OH2 TIP3X5434 19.090 -25.170 10.801 1.00 0.00 W1 O +ATOM 18790 H1 TIP3X5434 19.005 -24.378 11.333 1.00 0.00 W1 H +ATOM 18791 H2 TIP3X5434 20.005 -25.174 10.520 1.00 0.00 W1 H +ATOM 18792 OH2 TIP3X5435 18.272 -24.451 3.986 1.00 0.00 W1 O +ATOM 18793 H1 TIP3X5435 18.335 -24.740 3.076 1.00 0.00 W1 H +ATOM 18794 H2 TIP3X5435 19.048 -23.906 4.119 1.00 0.00 W1 H +ATOM 18795 OH2 TIP3X5436 27.293 -27.882 1.746 1.00 0.00 W1 O +ATOM 18796 H1 TIP3X5436 26.585 -27.393 1.326 1.00 0.00 W1 H +ATOM 18797 H2 TIP3X5436 28.018 -27.838 1.123 1.00 0.00 W1 H +ATOM 18798 OH2 TIP3X5437 15.843 -26.995 12.834 1.00 0.00 W1 O +ATOM 18799 H1 TIP3X5437 14.939 -26.701 12.945 1.00 0.00 W1 H +ATOM 18800 H2 TIP3X5437 15.984 -27.614 13.551 1.00 0.00 W1 H +ATOM 18801 OH2 TIP3X5438 16.987 -30.158 8.817 1.00 0.00 W1 O +ATOM 18802 H1 TIP3X5438 17.094 -30.859 8.174 1.00 0.00 W1 H +ATOM 18803 H2 TIP3X5438 17.122 -29.352 8.318 1.00 0.00 W1 H +ATOM 18804 OH2 TIP3X5439 28.508 -26.530 13.704 1.00 0.00 W1 O +ATOM 18805 H1 TIP3X5439 28.820 -25.951 14.400 1.00 0.00 W1 H +ATOM 18806 H2 TIP3X5439 27.564 -26.594 13.849 1.00 0.00 W1 H +ATOM 18807 OH2 TIP3X5440 25.551 -26.524 13.651 1.00 0.00 W1 O +ATOM 18808 H1 TIP3X5440 25.192 -25.956 12.970 1.00 0.00 W1 H +ATOM 18809 H2 TIP3X5440 25.214 -27.394 13.440 1.00 0.00 W1 H +ATOM 18810 OH2 TIP3X5441 23.754 -26.055 3.517 1.00 0.00 W1 O +ATOM 18811 H1 TIP3X5441 23.843 -25.475 2.760 1.00 0.00 W1 H +ATOM 18812 H2 TIP3X5441 22.985 -26.589 3.320 1.00 0.00 W1 H +ATOM 18813 OH2 TIP3X5442 22.057 -26.723 1.204 1.00 0.00 W1 O +ATOM 18814 H1 TIP3X5442 21.620 -26.531 0.375 1.00 0.00 W1 H +ATOM 18815 H2 TIP3X5442 21.650 -27.534 1.508 1.00 0.00 W1 H +ATOM 18816 OH2 TIP3X5443 22.768 -29.661 14.993 1.00 0.00 W1 O +ATOM 18817 H1 TIP3X5443 22.301 -30.048 15.734 1.00 0.00 W1 H +ATOM 18818 H2 TIP3X5443 23.682 -29.629 15.276 1.00 0.00 W1 H +ATOM 18819 OH2 TIP3X5444 28.331 -24.317 11.675 1.00 0.00 W1 O +ATOM 18820 H1 TIP3X5444 28.350 -24.966 12.378 1.00 0.00 W1 H +ATOM 18821 H2 TIP3X5444 27.496 -24.468 11.231 1.00 0.00 W1 H +ATOM 18822 OH2 TIP3X5445 16.406 -27.216 0.144 1.00 0.00 W1 O +ATOM 18823 H1 TIP3X5445 15.649 -27.409 0.698 1.00 0.00 W1 H +ATOM 18824 H2 TIP3X5445 16.940 -26.618 0.667 1.00 0.00 W1 H +ATOM 18825 OH2 TIP3X5446 16.324 -15.723 0.631 1.00 0.00 W1 O +ATOM 18826 H1 TIP3X5446 16.740 -16.470 1.060 1.00 0.00 W1 H +ATOM 18827 H2 TIP3X5446 16.337 -15.029 1.291 1.00 0.00 W1 H +ATOM 18828 OH2 TIP3X5447 25.072 -27.563 5.624 1.00 0.00 W1 O +ATOM 18829 H1 TIP3X5447 24.735 -27.212 4.800 1.00 0.00 W1 H +ATOM 18830 H2 TIP3X5447 25.969 -27.830 5.423 1.00 0.00 W1 H +ATOM 18831 OH2 TIP3X5448 20.528 -28.252 7.368 1.00 0.00 W1 O +ATOM 18832 H1 TIP3X5448 19.585 -28.299 7.209 1.00 0.00 W1 H +ATOM 18833 H2 TIP3X5448 20.667 -27.378 7.732 1.00 0.00 W1 H +ATOM 18834 OH2 TIP3X5449 15.890 -27.126 4.162 1.00 0.00 W1 O +ATOM 18835 H1 TIP3X5449 15.616 -27.251 5.070 1.00 0.00 W1 H +ATOM 18836 H2 TIP3X5449 15.695 -26.208 3.976 1.00 0.00 W1 H +ATOM 18837 OH2 TIP3X5450 19.890 -27.799 12.222 1.00 0.00 W1 O +ATOM 18838 H1 TIP3X5450 19.912 -28.605 11.706 1.00 0.00 W1 H +ATOM 18839 H2 TIP3X5450 19.496 -27.151 11.638 1.00 0.00 W1 H +ATOM 18840 OH2 TIP3X5451 20.473 -21.264 8.027 1.00 0.00 W1 O +ATOM 18841 H1 TIP3X5451 20.402 -22.199 7.839 1.00 0.00 W1 H +ATOM 18842 H2 TIP3X5451 20.478 -21.210 8.983 1.00 0.00 W1 H +ATOM 18843 OH2 TIP3X5452 24.662 -24.245 12.589 1.00 0.00 W1 O +ATOM 18844 H1 TIP3X5452 25.074 -23.413 12.826 1.00 0.00 W1 H +ATOM 18845 H2 TIP3X5452 24.113 -24.034 11.835 1.00 0.00 W1 H +ATOM 18846 OH2 TIP3X5453 30.458 -28.878 1.914 1.00 0.00 W1 O +ATOM 18847 H1 TIP3X5453 30.892 -28.651 2.736 1.00 0.00 W1 H +ATOM 18848 H2 TIP3X5453 29.938 -29.654 2.123 1.00 0.00 W1 H +ATOM 18849 OH2 TIP3X5454 21.612 -22.918 1.092 1.00 0.00 W1 O +ATOM 18850 H1 TIP3X5454 21.323 -23.040 1.996 1.00 0.00 W1 H +ATOM 18851 H2 TIP3X5454 22.301 -23.572 0.970 1.00 0.00 W1 H +ATOM 18852 OH2 TIP3X5455 28.316 -24.402 2.160 1.00 0.00 W1 O +ATOM 18853 H1 TIP3X5455 27.451 -24.601 2.519 1.00 0.00 W1 H +ATOM 18854 H2 TIP3X5455 28.873 -24.281 2.929 1.00 0.00 W1 H +ATOM 18855 OH2 TIP3X5456 23.149 -24.148 8.630 1.00 0.00 W1 O +ATOM 18856 H1 TIP3X5456 23.246 -23.351 9.152 1.00 0.00 W1 H +ATOM 18857 H2 TIP3X5456 24.023 -24.538 8.622 1.00 0.00 W1 H +ATOM 18858 OH2 TIP3X5457 22.894 -23.766 5.546 1.00 0.00 W1 O +ATOM 18859 H1 TIP3X5457 23.515 -24.363 5.128 1.00 0.00 W1 H +ATOM 18860 H2 TIP3X5457 22.919 -24.004 6.473 1.00 0.00 W1 H +ATOM 18861 OH2 TIP3X5458 25.789 -22.151 14.482 1.00 0.00 W1 O +ATOM 18862 H1 TIP3X5458 25.111 -21.867 15.095 1.00 0.00 W1 H +ATOM 18863 H2 TIP3X5458 26.587 -22.191 15.009 1.00 0.00 W1 H +ATOM 18864 OH2 TIP3X5459 18.298 -22.735 12.178 1.00 0.00 W1 O +ATOM 18865 H1 TIP3X5459 18.815 -22.330 12.874 1.00 0.00 W1 H +ATOM 18866 H2 TIP3X5459 17.916 -21.998 11.703 1.00 0.00 W1 H +ATOM 18867 OH2 TIP3X5460 17.205 -24.773 13.800 1.00 0.00 W1 O +ATOM 18868 H1 TIP3X5460 17.001 -25.613 13.387 1.00 0.00 W1 H +ATOM 18869 H2 TIP3X5460 17.081 -24.127 13.104 1.00 0.00 W1 H +ATOM 18870 OH2 TIP3X5461 17.097 -23.900 6.623 1.00 0.00 W1 O +ATOM 18871 H1 TIP3X5461 17.454 -23.028 6.453 1.00 0.00 W1 H +ATOM 18872 H2 TIP3X5461 16.995 -24.291 5.755 1.00 0.00 W1 H +ATOM 18873 OH2 TIP3X5462 27.856 -21.635 0.810 1.00 0.00 W1 O +ATOM 18874 H1 TIP3X5462 28.562 -21.137 0.398 1.00 0.00 W1 H +ATOM 18875 H2 TIP3X5462 28.305 -22.266 1.373 1.00 0.00 W1 H +ATOM 18876 OH2 TIP3X5463 30.453 -24.288 4.172 1.00 0.00 W1 O +ATOM 18877 H1 TIP3X5463 30.165 -24.115 5.069 1.00 0.00 W1 H +ATOM 18878 H2 TIP3X5463 30.965 -23.516 3.932 1.00 0.00 W1 H +ATOM 18879 OH2 TIP3X5464 16.950 -25.171 8.894 1.00 0.00 W1 O +ATOM 18880 H1 TIP3X5464 17.045 -24.493 8.226 1.00 0.00 W1 H +ATOM 18881 H2 TIP3X5464 17.609 -24.952 9.553 1.00 0.00 W1 H +ATOM 18882 OH2 TIP3X5465 19.737 -16.664 2.158 1.00 0.00 W1 O +ATOM 18883 H1 TIP3X5465 19.508 -16.304 1.301 1.00 0.00 W1 H +ATOM 18884 H2 TIP3X5465 19.324 -17.527 2.174 1.00 0.00 W1 H +ATOM 18885 OH2 TIP3X5466 18.512 -21.431 0.656 1.00 0.00 W1 O +ATOM 18886 H1 TIP3X5466 17.696 -21.721 0.248 1.00 0.00 W1 H +ATOM 18887 H2 TIP3X5466 19.044 -22.225 0.718 1.00 0.00 W1 H +ATOM 18888 OH2 TIP3X5467 19.930 -20.592 13.731 1.00 0.00 W1 O +ATOM 18889 H1 TIP3X5467 19.357 -19.990 13.257 1.00 0.00 W1 H +ATOM 18890 H2 TIP3X5467 19.456 -20.788 14.539 1.00 0.00 W1 H +ATOM 18891 OH2 TIP3X5468 23.006 -15.849 11.422 1.00 0.00 W1 O +ATOM 18892 H1 TIP3X5468 23.324 -16.143 12.275 1.00 0.00 W1 H +ATOM 18893 H2 TIP3X5468 23.439 -16.426 10.793 1.00 0.00 W1 H +ATOM 18894 OH2 TIP3X5469 27.712 -15.607 5.555 1.00 0.00 W1 O +ATOM 18895 H1 TIP3X5469 27.300 -16.298 5.037 1.00 0.00 W1 H +ATOM 18896 H2 TIP3X5469 27.516 -14.800 5.079 1.00 0.00 W1 H +ATOM 18897 OH2 TIP3X5470 24.290 -18.925 2.807 1.00 0.00 W1 O +ATOM 18898 H1 TIP3X5470 24.549 -18.139 2.325 1.00 0.00 W1 H +ATOM 18899 H2 TIP3X5470 23.721 -18.601 3.505 1.00 0.00 W1 H +ATOM 18900 OH2 TIP3X5471 24.307 -23.770 1.878 1.00 0.00 W1 O +ATOM 18901 H1 TIP3X5471 25.130 -23.697 1.396 1.00 0.00 W1 H +ATOM 18902 H2 TIP3X5471 24.315 -23.026 2.480 1.00 0.00 W1 H +ATOM 18903 OH2 TIP3X5472 27.709 -29.047 11.670 1.00 0.00 W1 O +ATOM 18904 H1 TIP3X5472 28.514 -29.277 11.206 1.00 0.00 W1 H +ATOM 18905 H2 TIP3X5472 27.999 -28.494 12.395 1.00 0.00 W1 H +ATOM 18906 OH2 TIP3X5473 15.674 -21.945 3.076 1.00 0.00 W1 O +ATOM 18907 H1 TIP3X5473 15.520 -21.853 2.136 1.00 0.00 W1 H +ATOM 18908 H2 TIP3X5473 16.627 -21.945 3.165 1.00 0.00 W1 H +ATOM 18909 OH2 TIP3X5474 26.436 -22.357 9.672 1.00 0.00 W1 O +ATOM 18910 H1 TIP3X5474 26.981 -21.696 10.098 1.00 0.00 W1 H +ATOM 18911 H2 TIP3X5474 26.895 -22.558 8.856 1.00 0.00 W1 H +ATOM 18912 OH2 TIP3X5475 25.258 -17.384 0.749 1.00 0.00 W1 O +ATOM 18913 H1 TIP3X5475 26.083 -17.348 1.234 1.00 0.00 W1 H +ATOM 18914 H2 TIP3X5475 25.461 -17.896 -0.033 1.00 0.00 W1 H +ATOM 18915 OH2 TIP3X5476 25.250 -19.596 12.400 1.00 0.00 W1 O +ATOM 18916 H1 TIP3X5476 24.429 -19.349 12.826 1.00 0.00 W1 H +ATOM 18917 H2 TIP3X5476 25.021 -19.692 11.476 1.00 0.00 W1 H +ATOM 18918 OH2 TIP3X5477 21.875 -19.371 4.287 1.00 0.00 W1 O +ATOM 18919 H1 TIP3X5477 21.168 -19.224 3.659 1.00 0.00 W1 H +ATOM 18920 H2 TIP3X5477 21.538 -19.027 5.114 1.00 0.00 W1 H +ATOM 18921 OH2 TIP3X5478 18.440 -18.459 12.998 1.00 0.00 W1 O +ATOM 18922 H1 TIP3X5478 19.174 -17.848 12.933 1.00 0.00 W1 H +ATOM 18923 H2 TIP3X5478 18.128 -18.365 13.898 1.00 0.00 W1 H +ATOM 18924 OH2 TIP3X5479 18.030 -16.755 7.100 1.00 0.00 W1 O +ATOM 18925 H1 TIP3X5479 17.444 -17.496 6.946 1.00 0.00 W1 H +ATOM 18926 H2 TIP3X5479 18.473 -16.621 6.261 1.00 0.00 W1 H +ATOM 18927 OH2 TIP3X5480 26.384 -30.741 8.180 1.00 0.00 W1 O +ATOM 18928 H1 TIP3X5480 26.716 -30.816 7.286 1.00 0.00 W1 H +ATOM 18929 H2 TIP3X5480 26.339 -29.799 8.341 1.00 0.00 W1 H +ATOM 18930 OH2 TIP3X5481 23.622 -28.612 8.415 1.00 0.00 W1 O +ATOM 18931 H1 TIP3X5481 23.260 -28.123 7.676 1.00 0.00 W1 H +ATOM 18932 H2 TIP3X5481 22.890 -28.702 9.025 1.00 0.00 W1 H +ATOM 18933 OH2 TIP3X5482 22.341 -30.628 2.343 1.00 0.00 W1 O +ATOM 18934 H1 TIP3X5482 23.196 -30.883 2.688 1.00 0.00 W1 H +ATOM 18935 H2 TIP3X5482 21.822 -31.432 2.368 1.00 0.00 W1 H +ATOM 18936 OH2 TIP3X5483 25.092 -30.784 3.386 1.00 0.00 W1 O +ATOM 18937 H1 TIP3X5483 25.548 -31.520 3.795 1.00 0.00 W1 H +ATOM 18938 H2 TIP3X5483 25.500 -30.698 2.524 1.00 0.00 W1 H +ATOM 18939 OH2 TIP3X5484 19.732 -16.206 14.841 1.00 0.00 W1 O +ATOM 18940 H1 TIP3X5484 19.481 -15.449 14.311 1.00 0.00 W1 H +ATOM 18941 H2 TIP3X5484 20.643 -16.375 14.602 1.00 0.00 W1 H +ATOM 18942 OH2 TIP3X5485 24.738 -17.511 5.141 1.00 0.00 W1 O +ATOM 18943 H1 TIP3X5485 25.399 -18.153 5.401 1.00 0.00 W1 H +ATOM 18944 H2 TIP3X5485 24.725 -16.877 5.858 1.00 0.00 W1 H +ATOM 18945 OH2 TIP3X5486 22.478 -16.609 14.051 1.00 0.00 W1 O +ATOM 18946 H1 TIP3X5486 22.695 -17.501 14.321 1.00 0.00 W1 H +ATOM 18947 H2 TIP3X5486 23.085 -16.055 14.540 1.00 0.00 W1 H +ATOM 18948 OH2 TIP3X5487 21.424 -28.491 4.095 1.00 0.00 W1 O +ATOM 18949 H1 TIP3X5487 22.081 -29.150 3.873 1.00 0.00 W1 H +ATOM 18950 H2 TIP3X5487 21.467 -28.422 5.049 1.00 0.00 W1 H +ATOM 18951 OH2 TIP3X5488 16.137 -30.152 13.551 1.00 0.00 W1 O +ATOM 18952 H1 TIP3X5488 16.886 -30.348 12.987 1.00 0.00 W1 H +ATOM 18953 H2 TIP3X5488 16.346 -30.578 14.383 1.00 0.00 W1 H +ATOM 18954 OH2 TIP3X5489 27.257 -17.425 3.153 1.00 0.00 W1 O +ATOM 18955 H1 TIP3X5489 27.402 -18.365 3.256 1.00 0.00 W1 H +ATOM 18956 H2 TIP3X5489 28.080 -17.093 2.795 1.00 0.00 W1 H +ATOM 18957 OH2 TIP3X5490 28.925 -30.659 14.380 1.00 0.00 W1 O +ATOM 18958 H1 TIP3X5490 28.311 -30.585 13.649 1.00 0.00 W1 H +ATOM 18959 H2 TIP3X5490 29.694 -30.164 14.098 1.00 0.00 W1 H +ATOM 18960 OH2 TIP3X5491 19.718 -16.446 4.866 1.00 0.00 W1 O +ATOM 18961 H1 TIP3X5491 19.712 -16.401 3.910 1.00 0.00 W1 H +ATOM 18962 H2 TIP3X5491 20.526 -16.000 5.122 1.00 0.00 W1 H +ATOM 18963 OH2 TIP3X5492 30.627 -17.507 12.816 1.00 0.00 W1 O +ATOM 18964 H1 TIP3X5492 29.905 -16.956 13.117 1.00 0.00 W1 H +ATOM 18965 H2 TIP3X5492 31.415 -17.008 13.030 1.00 0.00 W1 H +ATOM 18966 OH2 TIP3X5493 18.253 -28.185 4.496 1.00 0.00 W1 O +ATOM 18967 H1 TIP3X5493 17.610 -27.797 3.903 1.00 0.00 W1 H +ATOM 18968 H2 TIP3X5493 19.056 -27.688 4.338 1.00 0.00 W1 H +ATOM 18969 OH2 TIP3X5494 19.682 -19.586 2.227 1.00 0.00 W1 O +ATOM 18970 H1 TIP3X5494 19.643 -20.214 1.506 1.00 0.00 W1 H +ATOM 18971 H2 TIP3X5494 18.962 -19.840 2.805 1.00 0.00 W1 H +ATOM 18972 OH2 TIP3X5495 17.576 -20.058 19.866 1.00 0.00 W1 O +ATOM 18973 H1 TIP3X5495 17.759 -20.134 20.803 1.00 0.00 W1 H +ATOM 18974 H2 TIP3X5495 17.552 -19.116 19.702 1.00 0.00 W1 H +ATOM 18975 OH2 TIP3X5496 28.679 -22.567 23.605 1.00 0.00 W1 O +ATOM 18976 H1 TIP3X5496 28.914 -22.303 22.715 1.00 0.00 W1 H +ATOM 18977 H2 TIP3X5496 29.508 -22.831 24.003 1.00 0.00 W1 H +ATOM 18978 OH2 TIP3X5497 20.663 -22.844 19.583 1.00 0.00 W1 O +ATOM 18979 H1 TIP3X5497 20.693 -21.934 19.880 1.00 0.00 W1 H +ATOM 18980 H2 TIP3X5497 21.170 -23.327 20.235 1.00 0.00 W1 H +ATOM 18981 OH2 TIP3X5498 28.466 -18.684 21.727 1.00 0.00 W1 O +ATOM 18982 H1 TIP3X5498 28.191 -18.194 22.502 1.00 0.00 W1 H +ATOM 18983 H2 TIP3X5498 27.941 -19.484 21.750 1.00 0.00 W1 H +ATOM 18984 OH2 TIP3X5499 26.983 -20.241 18.770 1.00 0.00 W1 O +ATOM 18985 H1 TIP3X5499 27.145 -20.470 17.855 1.00 0.00 W1 H +ATOM 18986 H2 TIP3X5499 26.054 -20.012 18.799 1.00 0.00 W1 H +ATOM 18987 OH2 TIP3X5500 30.830 -19.709 23.554 1.00 0.00 W1 O +ATOM 18988 H1 TIP3X5500 30.278 -19.626 22.777 1.00 0.00 W1 H +ATOM 18989 H2 TIP3X5500 30.220 -19.926 24.259 1.00 0.00 W1 H +ATOM 18990 OH2 TIP3X5501 17.467 -18.445 26.005 1.00 0.00 W1 O +ATOM 18991 H1 TIP3X5501 17.873 -18.242 26.848 1.00 0.00 W1 H +ATOM 18992 H2 TIP3X5501 16.895 -19.191 26.188 1.00 0.00 W1 H +ATOM 18993 OH2 TIP3X5502 24.842 -16.820 25.231 1.00 0.00 W1 O +ATOM 18994 H1 TIP3X5502 25.143 -17.721 25.353 1.00 0.00 W1 H +ATOM 18995 H2 TIP3X5502 25.467 -16.440 24.614 1.00 0.00 W1 H +ATOM 18996 OH2 TIP3X5503 28.274 -16.863 25.111 1.00 0.00 W1 O +ATOM 18997 H1 TIP3X5503 27.839 -16.040 24.892 1.00 0.00 W1 H +ATOM 18998 H2 TIP3X5503 29.203 -16.638 25.161 1.00 0.00 W1 H +ATOM 18999 OH2 TIP3X5504 20.722 -17.289 24.241 1.00 0.00 W1 O +ATOM 19000 H1 TIP3X5504 21.078 -16.440 23.977 1.00 0.00 W1 H +ATOM 19001 H2 TIP3X5504 19.787 -17.229 24.045 1.00 0.00 W1 H +ATOM 19002 OH2 TIP3X5505 25.564 -25.396 23.142 1.00 0.00 W1 O +ATOM 19003 H1 TIP3X5505 25.486 -26.206 22.638 1.00 0.00 W1 H +ATOM 19004 H2 TIP3X5505 26.506 -25.257 23.230 1.00 0.00 W1 H +ATOM 19005 OH2 TIP3X5506 21.587 -29.299 25.504 1.00 0.00 W1 O +ATOM 19006 H1 TIP3X5506 21.844 -30.036 26.057 1.00 0.00 W1 H +ATOM 19007 H2 TIP3X5506 20.910 -29.655 24.929 1.00 0.00 W1 H +ATOM 19008 OH2 TIP3X5507 29.830 -28.294 21.927 1.00 0.00 W1 O +ATOM 19009 H1 TIP3X5507 29.523 -27.956 22.768 1.00 0.00 W1 H +ATOM 19010 H2 TIP3X5507 29.898 -29.240 22.059 1.00 0.00 W1 H +ATOM 19011 OH2 TIP3X5508 28.428 -27.099 23.881 1.00 0.00 W1 O +ATOM 19012 H1 TIP3X5508 29.003 -27.327 24.612 1.00 0.00 W1 H +ATOM 19013 H2 TIP3X5508 27.553 -27.353 24.176 1.00 0.00 W1 H +ATOM 19014 OH2 TIP3X5509 21.474 -25.974 25.252 1.00 0.00 W1 O +ATOM 19015 H1 TIP3X5509 21.978 -26.677 25.664 1.00 0.00 W1 H +ATOM 19016 H2 TIP3X5509 22.132 -25.332 24.986 1.00 0.00 W1 H +ATOM 19017 OH2 TIP3X5510 28.951 -24.926 22.150 1.00 0.00 W1 O +ATOM 19018 H1 TIP3X5510 28.992 -25.826 22.474 1.00 0.00 W1 H +ATOM 19019 H2 TIP3X5510 28.833 -24.393 22.936 1.00 0.00 W1 H +ATOM 19020 OH2 TIP3X5511 27.636 -28.283 20.018 1.00 0.00 W1 O +ATOM 19021 H1 TIP3X5511 28.461 -28.098 20.467 1.00 0.00 W1 H +ATOM 19022 H2 TIP3X5511 27.712 -27.828 19.179 1.00 0.00 W1 H +ATOM 19023 OH2 TIP3X5512 23.818 -22.311 26.090 1.00 0.00 W1 O +ATOM 19024 H1 TIP3X5512 24.695 -22.289 25.707 1.00 0.00 W1 H +ATOM 19025 H2 TIP3X5512 23.553 -21.393 26.136 1.00 0.00 W1 H +ATOM 19026 OH2 TIP3X5513 22.969 -19.763 25.900 1.00 0.00 W1 O +ATOM 19027 H1 TIP3X5513 22.944 -19.536 24.970 1.00 0.00 W1 H +ATOM 19028 H2 TIP3X5513 22.049 -19.817 26.158 1.00 0.00 W1 H +ATOM 19029 OH2 TIP3X5514 17.832 -27.882 22.738 1.00 0.00 W1 O +ATOM 19030 H1 TIP3X5514 17.506 -27.002 22.929 1.00 0.00 W1 H +ATOM 19031 H2 TIP3X5514 17.708 -27.984 21.794 1.00 0.00 W1 H +ATOM 19032 OH2 TIP3X5515 19.988 -24.324 22.750 1.00 0.00 W1 O +ATOM 19033 H1 TIP3X5515 19.305 -24.774 22.253 1.00 0.00 W1 H +ATOM 19034 H2 TIP3X5515 20.473 -25.028 23.182 1.00 0.00 W1 H +ATOM 19035 OH2 TIP3X5516 26.043 -19.400 25.147 1.00 0.00 W1 O +ATOM 19036 H1 TIP3X5516 25.801 -19.986 24.430 1.00 0.00 W1 H +ATOM 19037 H2 TIP3X5516 26.993 -19.489 25.219 1.00 0.00 W1 H +ATOM 19038 OH2 TIP3X5517 30.341 -15.765 21.927 1.00 0.00 W1 O +ATOM 19039 H1 TIP3X5517 30.336 -16.233 22.762 1.00 0.00 W1 H +ATOM 19040 H2 TIP3X5517 29.461 -15.894 21.574 1.00 0.00 W1 H +ATOM 19041 OH2 TIP3X5518 22.213 -19.429 22.949 1.00 0.00 W1 O +ATOM 19042 H1 TIP3X5518 21.642 -20.148 23.218 1.00 0.00 W1 H +ATOM 19043 H2 TIP3X5518 21.753 -18.638 23.232 1.00 0.00 W1 H +ATOM 19044 OH2 TIP3X5519 24.435 -28.977 27.520 1.00 0.00 W1 O +ATOM 19045 H1 TIP3X5519 23.692 -28.498 27.887 1.00 0.00 W1 H +ATOM 19046 H2 TIP3X5519 24.054 -29.789 27.185 1.00 0.00 W1 H +ATOM 19047 OH2 TIP3X5520 19.787 -28.272 17.321 1.00 0.00 W1 O +ATOM 19048 H1 TIP3X5520 19.689 -28.934 18.006 1.00 0.00 W1 H +ATOM 19049 H2 TIP3X5520 19.603 -28.741 16.507 1.00 0.00 W1 H +ATOM 19050 OH2 TIP3X5521 30.680 -27.350 25.511 1.00 0.00 W1 O +ATOM 19051 H1 TIP3X5521 31.199 -26.682 25.063 1.00 0.00 W1 H +ATOM 19052 H2 TIP3X5521 31.122 -27.475 26.351 1.00 0.00 W1 H +ATOM 19053 OH2 TIP3X5522 16.738 -30.998 19.671 1.00 0.00 W1 O +ATOM 19054 H1 TIP3X5522 17.463 -30.377 19.740 1.00 0.00 W1 H +ATOM 19055 H2 TIP3X5522 16.366 -31.031 20.552 1.00 0.00 W1 H +ATOM 19056 OH2 TIP3X5523 22.004 -24.762 29.657 1.00 0.00 W1 O +ATOM 19057 H1 TIP3X5523 22.868 -24.364 29.556 1.00 0.00 W1 H +ATOM 19058 H2 TIP3X5523 22.156 -25.699 29.534 1.00 0.00 W1 H +ATOM 19059 OH2 TIP3X5524 25.170 -19.852 22.397 1.00 0.00 W1 O +ATOM 19060 H1 TIP3X5524 25.264 -20.715 21.993 1.00 0.00 W1 H +ATOM 19061 H2 TIP3X5524 24.237 -19.652 22.321 1.00 0.00 W1 H +ATOM 19062 OH2 TIP3X5525 23.782 -21.568 19.928 1.00 0.00 W1 O +ATOM 19063 H1 TIP3X5525 23.218 -22.182 20.397 1.00 0.00 W1 H +ATOM 19064 H2 TIP3X5525 23.308 -20.737 19.956 1.00 0.00 W1 H +ATOM 19065 OH2 TIP3X5526 16.320 -21.055 26.385 1.00 0.00 W1 O +ATOM 19066 H1 TIP3X5526 15.785 -21.657 25.867 1.00 0.00 W1 H +ATOM 19067 H2 TIP3X5526 15.849 -20.969 27.214 1.00 0.00 W1 H +ATOM 19068 OH2 TIP3X5527 27.616 -22.034 20.752 1.00 0.00 W1 O +ATOM 19069 H1 TIP3X5527 27.560 -22.949 20.476 1.00 0.00 W1 H +ATOM 19070 H2 TIP3X5527 27.444 -21.532 19.956 1.00 0.00 W1 H +ATOM 19071 OH2 TIP3X5528 27.913 -21.520 27.777 1.00 0.00 W1 O +ATOM 19072 H1 TIP3X5528 27.011 -21.436 28.084 1.00 0.00 W1 H +ATOM 19073 H2 TIP3X5528 28.082 -22.462 27.780 1.00 0.00 W1 H +ATOM 19074 OH2 TIP3X5529 30.280 -23.561 25.582 1.00 0.00 W1 O +ATOM 19075 H1 TIP3X5529 30.942 -24.241 25.463 1.00 0.00 W1 H +ATOM 19076 H2 TIP3X5529 29.564 -24.000 26.041 1.00 0.00 W1 H +ATOM 19077 OH2 TIP3X5530 19.424 -23.874 30.727 1.00 0.00 W1 O +ATOM 19078 H1 TIP3X5530 18.895 -24.108 29.964 1.00 0.00 W1 H +ATOM 19079 H2 TIP3X5530 20.320 -23.826 30.392 1.00 0.00 W1 H +ATOM 19080 OH2 TIP3X5531 20.335 -20.668 26.288 1.00 0.00 W1 O +ATOM 19081 H1 TIP3X5531 20.290 -21.223 27.067 1.00 0.00 W1 H +ATOM 19082 H2 TIP3X5531 19.702 -19.969 26.454 1.00 0.00 W1 H +ATOM 19083 OH2 TIP3X5532 29.006 -19.538 26.038 1.00 0.00 W1 O +ATOM 19084 H1 TIP3X5532 29.430 -18.770 26.422 1.00 0.00 W1 H +ATOM 19085 H2 TIP3X5532 28.702 -20.046 26.790 1.00 0.00 W1 H +ATOM 19086 OH2 TIP3X5533 27.094 -17.562 27.863 1.00 0.00 W1 O +ATOM 19087 H1 TIP3X5533 26.387 -18.191 27.720 1.00 0.00 W1 H +ATOM 19088 H2 TIP3X5533 27.423 -17.368 26.985 1.00 0.00 W1 H +ATOM 19089 OH2 TIP3X5534 27.345 -19.026 30.259 1.00 0.00 W1 O +ATOM 19090 H1 TIP3X5534 26.711 -19.633 29.875 1.00 0.00 W1 H +ATOM 19091 H2 TIP3X5534 27.458 -18.346 29.595 1.00 0.00 W1 H +ATOM 19092 OH2 TIP3X5535 30.955 -17.118 24.326 1.00 0.00 W1 O +ATOM 19093 H1 TIP3X5535 31.633 -17.276 24.982 1.00 0.00 W1 H +ATOM 19094 H2 TIP3X5535 30.721 -17.989 24.007 1.00 0.00 W1 H +ATOM 19095 OH2 TIP3X5536 21.511 -30.647 22.718 1.00 0.00 W1 O +ATOM 19096 H1 TIP3X5536 21.220 -29.737 22.657 1.00 0.00 W1 H +ATOM 19097 H2 TIP3X5536 22.343 -30.664 22.245 1.00 0.00 W1 H +ATOM 19098 OH2 TIP3X5537 23.635 -20.700 16.373 1.00 0.00 W1 O +ATOM 19099 H1 TIP3X5537 22.940 -21.322 16.587 1.00 0.00 W1 H +ATOM 19100 H2 TIP3X5537 23.618 -20.064 17.088 1.00 0.00 W1 H +ATOM 19101 OH2 TIP3X5538 31.016 -21.937 15.809 1.00 0.00 W1 O +ATOM 19102 H1 TIP3X5538 30.753 -22.686 15.275 1.00 0.00 W1 H +ATOM 19103 H2 TIP3X5538 30.761 -21.173 15.292 1.00 0.00 W1 H +ATOM 19104 OH2 TIP3X5539 16.964 -18.240 15.526 1.00 0.00 W1 O +ATOM 19105 H1 TIP3X5539 17.409 -18.789 16.172 1.00 0.00 W1 H +ATOM 19106 H2 TIP3X5539 16.067 -18.574 15.505 1.00 0.00 W1 H +ATOM 19107 OH2 TIP3X5540 29.057 -16.111 16.785 1.00 0.00 W1 O +ATOM 19108 H1 TIP3X5540 29.942 -16.439 16.626 1.00 0.00 W1 H +ATOM 19109 H2 TIP3X5540 28.827 -15.643 15.982 1.00 0.00 W1 H +ATOM 19110 OH2 TIP3X5541 30.449 -20.449 28.862 1.00 0.00 W1 O +ATOM 19111 H1 TIP3X5541 30.340 -19.500 28.921 1.00 0.00 W1 H +ATOM 19112 H2 TIP3X5541 29.557 -20.794 28.852 1.00 0.00 W1 H +ATOM 19113 OH2 TIP3X5542 17.136 -17.623 18.481 1.00 0.00 W1 O +ATOM 19114 H1 TIP3X5542 17.068 -16.787 18.941 1.00 0.00 W1 H +ATOM 19115 H2 TIP3X5542 16.240 -17.962 18.464 1.00 0.00 W1 H +ATOM 19116 OH2 TIP3X5543 29.716 -19.130 16.125 1.00 0.00 W1 O +ATOM 19117 H1 TIP3X5543 29.747 -19.210 17.079 1.00 0.00 W1 H +ATOM 19118 H2 TIP3X5543 28.883 -18.693 15.948 1.00 0.00 W1 H +ATOM 19119 OH2 TIP3X5544 26.086 -30.836 29.009 1.00 0.00 W1 O +ATOM 19120 H1 TIP3X5544 25.780 -30.087 28.497 1.00 0.00 W1 H +ATOM 19121 H2 TIP3X5544 26.140 -31.553 28.377 1.00 0.00 W1 H +ATOM 19122 OH2 TIP3X5545 20.300 -16.919 27.038 1.00 0.00 W1 O +ATOM 19123 H1 TIP3X5545 21.148 -16.681 27.412 1.00 0.00 W1 H +ATOM 19124 H2 TIP3X5545 20.512 -17.299 26.185 1.00 0.00 W1 H +ATOM 19125 OH2 TIP3X5546 18.766 -28.901 30.389 1.00 0.00 W1 O +ATOM 19126 H1 TIP3X5546 17.889 -28.811 30.763 1.00 0.00 W1 H +ATOM 19127 H2 TIP3X5546 18.829 -28.188 29.752 1.00 0.00 W1 H +ATOM 19128 OH2 TIP3X5547 24.964 -26.954 16.119 1.00 0.00 W1 O +ATOM 19129 H1 TIP3X5547 24.798 -26.657 15.224 1.00 0.00 W1 H +ATOM 19130 H2 TIP3X5547 24.093 -27.077 16.496 1.00 0.00 W1 H +ATOM 19131 OH2 TIP3X5548 30.361 -19.193 19.167 1.00 0.00 W1 O +ATOM 19132 H1 TIP3X5548 30.934 -19.930 19.380 1.00 0.00 W1 H +ATOM 19133 H2 TIP3X5548 30.030 -18.894 20.014 1.00 0.00 W1 H +ATOM 19134 OH2 TIP3X5549 25.622 -30.157 16.096 1.00 0.00 W1 O +ATOM 19135 H1 TIP3X5549 26.354 -29.541 16.121 1.00 0.00 W1 H +ATOM 19136 H2 TIP3X5549 25.863 -30.790 15.420 1.00 0.00 W1 H +ATOM 19137 OH2 TIP3X5550 30.154 -30.064 26.361 1.00 0.00 W1 O +ATOM 19138 H1 TIP3X5550 30.646 -30.693 26.889 1.00 0.00 W1 H +ATOM 19139 H2 TIP3X5550 30.755 -29.821 25.656 1.00 0.00 W1 H +ATOM 19140 OH2 TIP3X5551 17.661 -20.843 22.439 1.00 0.00 W1 O +ATOM 19141 H1 TIP3X5551 16.993 -20.520 23.044 1.00 0.00 W1 H +ATOM 19142 H2 TIP3X5551 18.454 -20.913 22.971 1.00 0.00 W1 H +ATOM 19143 OH2 TIP3X5552 22.658 -19.424 29.549 1.00 0.00 W1 O +ATOM 19144 H1 TIP3X5552 22.882 -19.802 30.400 1.00 0.00 W1 H +ATOM 19145 H2 TIP3X5552 22.052 -20.053 29.159 1.00 0.00 W1 H +ATOM 19146 OH2 TIP3X5553 26.138 -28.119 24.962 1.00 0.00 W1 O +ATOM 19147 H1 TIP3X5553 26.197 -28.301 25.900 1.00 0.00 W1 H +ATOM 19148 H2 TIP3X5553 25.199 -28.032 24.794 1.00 0.00 W1 H +ATOM 19149 OH2 TIP3X5554 22.329 -27.463 29.141 1.00 0.00 W1 O +ATOM 19150 H1 TIP3X5554 21.462 -27.533 28.741 1.00 0.00 W1 H +ATOM 19151 H2 TIP3X5554 22.274 -28.003 29.929 1.00 0.00 W1 H +ATOM 19152 OH2 TIP3X5555 29.815 -24.742 30.894 1.00 0.00 W1 O +ATOM 19153 H1 TIP3X5555 30.610 -25.276 30.878 1.00 0.00 W1 H +ATOM 19154 H2 TIP3X5555 29.521 -24.777 31.804 1.00 0.00 W1 H +ATOM 19155 OH2 TIP3X5556 18.000 -30.875 26.813 1.00 0.00 W1 O +ATOM 19156 H1 TIP3X5556 17.775 -30.422 26.000 1.00 0.00 W1 H +ATOM 19157 H2 TIP3X5556 18.830 -31.312 26.621 1.00 0.00 W1 H +ATOM 19158 OH2 TIP3X5557 24.095 -30.418 21.894 1.00 0.00 W1 O +ATOM 19159 H1 TIP3X5557 24.577 -29.904 21.247 1.00 0.00 W1 H +ATOM 19160 H2 TIP3X5557 24.439 -30.124 22.738 1.00 0.00 W1 H +ATOM 19161 OH2 TIP3X5558 18.565 -25.826 17.047 1.00 0.00 W1 O +ATOM 19162 H1 TIP3X5558 18.988 -25.180 16.481 1.00 0.00 W1 H +ATOM 19163 H2 TIP3X5558 19.277 -26.401 17.328 1.00 0.00 W1 H +ATOM 19164 OH2 TIP3X5559 19.090 -25.170 26.358 1.00 0.00 W1 O +ATOM 19165 H1 TIP3X5559 19.005 -24.378 26.890 1.00 0.00 W1 H +ATOM 19166 H2 TIP3X5559 20.005 -25.174 26.078 1.00 0.00 W1 H +ATOM 19167 OH2 TIP3X5560 18.272 -24.451 19.544 1.00 0.00 W1 O +ATOM 19168 H1 TIP3X5560 18.335 -24.740 18.633 1.00 0.00 W1 H +ATOM 19169 H2 TIP3X5560 19.048 -23.906 19.677 1.00 0.00 W1 H +ATOM 19170 OH2 TIP3X5561 27.293 -27.882 17.304 1.00 0.00 W1 O +ATOM 19171 H1 TIP3X5561 26.585 -27.393 16.884 1.00 0.00 W1 H +ATOM 19172 H2 TIP3X5561 28.018 -27.838 16.680 1.00 0.00 W1 H +ATOM 19173 OH2 TIP3X5562 15.843 -26.995 28.392 1.00 0.00 W1 O +ATOM 19174 H1 TIP3X5562 14.939 -26.701 28.503 1.00 0.00 W1 H +ATOM 19175 H2 TIP3X5562 15.984 -27.614 29.108 1.00 0.00 W1 H +ATOM 19176 OH2 TIP3X5563 16.987 -30.158 24.374 1.00 0.00 W1 O +ATOM 19177 H1 TIP3X5563 17.094 -30.859 23.732 1.00 0.00 W1 H +ATOM 19178 H2 TIP3X5563 17.122 -29.352 23.875 1.00 0.00 W1 H +ATOM 19179 OH2 TIP3X5564 28.508 -26.530 29.262 1.00 0.00 W1 O +ATOM 19180 H1 TIP3X5564 28.820 -25.951 29.958 1.00 0.00 W1 H +ATOM 19181 H2 TIP3X5564 27.564 -26.594 29.407 1.00 0.00 W1 H +ATOM 19182 OH2 TIP3X5565 25.551 -26.524 29.209 1.00 0.00 W1 O +ATOM 19183 H1 TIP3X5565 25.192 -25.956 28.528 1.00 0.00 W1 H +ATOM 19184 H2 TIP3X5565 25.214 -27.394 28.998 1.00 0.00 W1 H +ATOM 19185 OH2 TIP3X5566 23.754 -26.055 19.074 1.00 0.00 W1 O +ATOM 19186 H1 TIP3X5566 23.843 -25.475 18.318 1.00 0.00 W1 H +ATOM 19187 H2 TIP3X5566 22.985 -26.589 18.878 1.00 0.00 W1 H +ATOM 19188 OH2 TIP3X5567 22.057 -26.723 16.762 1.00 0.00 W1 O +ATOM 19189 H1 TIP3X5567 21.620 -26.531 15.932 1.00 0.00 W1 H +ATOM 19190 H2 TIP3X5567 21.650 -27.534 17.065 1.00 0.00 W1 H +ATOM 19191 OH2 TIP3X5568 22.768 -29.661 30.551 1.00 0.00 W1 O +ATOM 19192 H1 TIP3X5568 22.301 -30.048 31.291 1.00 0.00 W1 H +ATOM 19193 H2 TIP3X5568 23.682 -29.629 30.833 1.00 0.00 W1 H +ATOM 19194 OH2 TIP3X5569 28.331 -24.317 27.232 1.00 0.00 W1 O +ATOM 19195 H1 TIP3X5569 28.350 -24.966 27.935 1.00 0.00 W1 H +ATOM 19196 H2 TIP3X5569 27.496 -24.468 26.788 1.00 0.00 W1 H +ATOM 19197 OH2 TIP3X5570 16.406 -27.216 15.702 1.00 0.00 W1 O +ATOM 19198 H1 TIP3X5570 15.649 -27.409 16.256 1.00 0.00 W1 H +ATOM 19199 H2 TIP3X5570 16.940 -26.618 16.224 1.00 0.00 W1 H +ATOM 19200 OH2 TIP3X5571 16.324 -15.723 16.189 1.00 0.00 W1 O +ATOM 19201 H1 TIP3X5571 16.740 -16.470 16.618 1.00 0.00 W1 H +ATOM 19202 H2 TIP3X5571 16.337 -15.029 16.848 1.00 0.00 W1 H +ATOM 19203 OH2 TIP3X5572 25.072 -27.563 21.182 1.00 0.00 W1 O +ATOM 19204 H1 TIP3X5572 24.735 -27.212 20.357 1.00 0.00 W1 H +ATOM 19205 H2 TIP3X5572 25.969 -27.830 20.980 1.00 0.00 W1 H +ATOM 19206 OH2 TIP3X5573 20.528 -28.252 22.926 1.00 0.00 W1 O +ATOM 19207 H1 TIP3X5573 19.585 -28.299 22.767 1.00 0.00 W1 H +ATOM 19208 H2 TIP3X5573 20.667 -27.378 23.289 1.00 0.00 W1 H +ATOM 19209 OH2 TIP3X5574 15.890 -27.126 19.719 1.00 0.00 W1 O +ATOM 19210 H1 TIP3X5574 15.616 -27.251 20.628 1.00 0.00 W1 H +ATOM 19211 H2 TIP3X5574 15.695 -26.208 19.533 1.00 0.00 W1 H +ATOM 19212 OH2 TIP3X5575 19.890 -27.799 27.779 1.00 0.00 W1 O +ATOM 19213 H1 TIP3X5575 19.912 -28.605 27.264 1.00 0.00 W1 H +ATOM 19214 H2 TIP3X5575 19.496 -27.151 27.195 1.00 0.00 W1 H +ATOM 19215 OH2 TIP3X5576 20.473 -21.264 23.584 1.00 0.00 W1 O +ATOM 19216 H1 TIP3X5576 20.402 -22.199 23.397 1.00 0.00 W1 H +ATOM 19217 H2 TIP3X5576 20.478 -21.210 24.540 1.00 0.00 W1 H +ATOM 19218 OH2 TIP3X5577 24.662 -24.245 28.147 1.00 0.00 W1 O +ATOM 19219 H1 TIP3X5577 25.074 -23.413 28.383 1.00 0.00 W1 H +ATOM 19220 H2 TIP3X5577 24.113 -24.034 27.392 1.00 0.00 W1 H +ATOM 19221 OH2 TIP3X5578 30.458 -28.878 17.471 1.00 0.00 W1 O +ATOM 19222 H1 TIP3X5578 30.892 -28.651 18.293 1.00 0.00 W1 H +ATOM 19223 H2 TIP3X5578 29.938 -29.654 17.681 1.00 0.00 W1 H +ATOM 19224 OH2 TIP3X5579 21.612 -22.918 16.649 1.00 0.00 W1 O +ATOM 19225 H1 TIP3X5579 21.323 -23.040 17.554 1.00 0.00 W1 H +ATOM 19226 H2 TIP3X5579 22.301 -23.572 16.528 1.00 0.00 W1 H +ATOM 19227 OH2 TIP3X5580 28.316 -24.402 17.717 1.00 0.00 W1 O +ATOM 19228 H1 TIP3X5580 27.451 -24.601 18.076 1.00 0.00 W1 H +ATOM 19229 H2 TIP3X5580 28.873 -24.281 18.486 1.00 0.00 W1 H +ATOM 19230 OH2 TIP3X5581 23.149 -24.148 24.188 1.00 0.00 W1 O +ATOM 19231 H1 TIP3X5581 23.246 -23.351 24.709 1.00 0.00 W1 H +ATOM 19232 H2 TIP3X5581 24.023 -24.538 24.179 1.00 0.00 W1 H +ATOM 19233 OH2 TIP3X5582 22.894 -23.766 21.104 1.00 0.00 W1 O +ATOM 19234 H1 TIP3X5582 23.515 -24.363 20.686 1.00 0.00 W1 H +ATOM 19235 H2 TIP3X5582 22.919 -24.004 22.030 1.00 0.00 W1 H +ATOM 19236 OH2 TIP3X5583 25.789 -22.151 30.039 1.00 0.00 W1 O +ATOM 19237 H1 TIP3X5583 25.111 -21.867 30.653 1.00 0.00 W1 H +ATOM 19238 H2 TIP3X5583 26.587 -22.191 30.566 1.00 0.00 W1 H +ATOM 19239 OH2 TIP3X5584 18.298 -22.735 27.736 1.00 0.00 W1 O +ATOM 19240 H1 TIP3X5584 18.815 -22.330 28.432 1.00 0.00 W1 H +ATOM 19241 H2 TIP3X5584 17.916 -21.998 27.260 1.00 0.00 W1 H +ATOM 19242 OH2 TIP3X5585 17.205 -24.773 29.357 1.00 0.00 W1 O +ATOM 19243 H1 TIP3X5585 17.001 -25.613 28.945 1.00 0.00 W1 H +ATOM 19244 H2 TIP3X5585 17.081 -24.127 28.662 1.00 0.00 W1 H +ATOM 19245 OH2 TIP3X5586 17.097 -23.900 22.181 1.00 0.00 W1 O +ATOM 19246 H1 TIP3X5586 17.454 -23.028 22.011 1.00 0.00 W1 H +ATOM 19247 H2 TIP3X5586 16.995 -24.291 21.313 1.00 0.00 W1 H +ATOM 19248 OH2 TIP3X5587 27.856 -21.635 16.367 1.00 0.00 W1 O +ATOM 19249 H1 TIP3X5587 28.562 -21.137 15.955 1.00 0.00 W1 H +ATOM 19250 H2 TIP3X5587 28.305 -22.266 16.931 1.00 0.00 W1 H +ATOM 19251 OH2 TIP3X5588 30.453 -24.288 19.730 1.00 0.00 W1 O +ATOM 19252 H1 TIP3X5588 30.165 -24.115 20.626 1.00 0.00 W1 H +ATOM 19253 H2 TIP3X5588 30.965 -23.516 19.489 1.00 0.00 W1 H +ATOM 19254 OH2 TIP3X5589 16.950 -25.171 24.452 1.00 0.00 W1 O +ATOM 19255 H1 TIP3X5589 17.045 -24.493 23.783 1.00 0.00 W1 H +ATOM 19256 H2 TIP3X5589 17.609 -24.952 25.111 1.00 0.00 W1 H +ATOM 19257 OH2 TIP3X5590 19.737 -16.664 17.715 1.00 0.00 W1 O +ATOM 19258 H1 TIP3X5590 19.508 -16.304 16.859 1.00 0.00 W1 H +ATOM 19259 H2 TIP3X5590 19.324 -17.527 17.731 1.00 0.00 W1 H +ATOM 19260 OH2 TIP3X5591 18.512 -21.431 16.214 1.00 0.00 W1 O +ATOM 19261 H1 TIP3X5591 17.696 -21.721 15.805 1.00 0.00 W1 H +ATOM 19262 H2 TIP3X5591 19.044 -22.225 16.275 1.00 0.00 W1 H +ATOM 19263 OH2 TIP3X5592 19.930 -20.592 29.288 1.00 0.00 W1 O +ATOM 19264 H1 TIP3X5592 19.357 -19.990 28.814 1.00 0.00 W1 H +ATOM 19265 H2 TIP3X5592 19.456 -20.788 30.096 1.00 0.00 W1 H +ATOM 19266 OH2 TIP3X5593 23.006 -15.849 26.979 1.00 0.00 W1 O +ATOM 19267 H1 TIP3X5593 23.324 -16.143 27.833 1.00 0.00 W1 H +ATOM 19268 H2 TIP3X5593 23.439 -16.426 26.350 1.00 0.00 W1 H +ATOM 19269 OH2 TIP3X5594 27.712 -15.607 21.113 1.00 0.00 W1 O +ATOM 19270 H1 TIP3X5594 27.300 -16.298 20.594 1.00 0.00 W1 H +ATOM 19271 H2 TIP3X5594 27.516 -14.800 20.636 1.00 0.00 W1 H +ATOM 19272 OH2 TIP3X5595 24.290 -18.925 18.365 1.00 0.00 W1 O +ATOM 19273 H1 TIP3X5595 24.549 -18.139 17.883 1.00 0.00 W1 H +ATOM 19274 H2 TIP3X5595 23.721 -18.601 19.063 1.00 0.00 W1 H +ATOM 19275 OH2 TIP3X5596 24.307 -23.770 17.436 1.00 0.00 W1 O +ATOM 19276 H1 TIP3X5596 25.130 -23.697 16.953 1.00 0.00 W1 H +ATOM 19277 H2 TIP3X5596 24.315 -23.026 18.038 1.00 0.00 W1 H +ATOM 19278 OH2 TIP3X5597 27.709 -29.047 27.227 1.00 0.00 W1 O +ATOM 19279 H1 TIP3X5597 28.514 -29.277 26.763 1.00 0.00 W1 H +ATOM 19280 H2 TIP3X5597 27.999 -28.494 27.952 1.00 0.00 W1 H +ATOM 19281 OH2 TIP3X5598 15.674 -21.945 18.633 1.00 0.00 W1 O +ATOM 19282 H1 TIP3X5598 15.520 -21.853 17.693 1.00 0.00 W1 H +ATOM 19283 H2 TIP3X5598 16.627 -21.945 18.722 1.00 0.00 W1 H +ATOM 19284 OH2 TIP3X5599 26.436 -22.357 25.229 1.00 0.00 W1 O +ATOM 19285 H1 TIP3X5599 26.981 -21.696 25.655 1.00 0.00 W1 H +ATOM 19286 H2 TIP3X5599 26.895 -22.558 24.414 1.00 0.00 W1 H +ATOM 19287 OH2 TIP3X5600 25.258 -17.384 16.307 1.00 0.00 W1 O +ATOM 19288 H1 TIP3X5600 26.083 -17.348 16.791 1.00 0.00 W1 H +ATOM 19289 H2 TIP3X5600 25.461 -17.896 15.524 1.00 0.00 W1 H +ATOM 19290 OH2 TIP3X5601 25.250 -19.596 27.958 1.00 0.00 W1 O +ATOM 19291 H1 TIP3X5601 24.429 -19.349 28.384 1.00 0.00 W1 H +ATOM 19292 H2 TIP3X5601 25.021 -19.692 27.033 1.00 0.00 W1 H +ATOM 19293 OH2 TIP3X5602 21.875 -19.371 19.844 1.00 0.00 W1 O +ATOM 19294 H1 TIP3X5602 21.168 -19.224 19.216 1.00 0.00 W1 H +ATOM 19295 H2 TIP3X5602 21.538 -19.027 20.671 1.00 0.00 W1 H +ATOM 19296 OH2 TIP3X5603 18.440 -18.459 28.555 1.00 0.00 W1 O +ATOM 19297 H1 TIP3X5603 19.174 -17.848 28.491 1.00 0.00 W1 H +ATOM 19298 H2 TIP3X5603 18.128 -18.365 29.455 1.00 0.00 W1 H +ATOM 19299 OH2 TIP3X5604 18.030 -16.755 22.657 1.00 0.00 W1 O +ATOM 19300 H1 TIP3X5604 17.444 -17.496 22.503 1.00 0.00 W1 H +ATOM 19301 H2 TIP3X5604 18.473 -16.621 21.819 1.00 0.00 W1 H +ATOM 19302 OH2 TIP3X5605 26.384 -30.741 23.738 1.00 0.00 W1 O +ATOM 19303 H1 TIP3X5605 26.716 -30.816 22.843 1.00 0.00 W1 H +ATOM 19304 H2 TIP3X5605 26.339 -29.799 23.899 1.00 0.00 W1 H +ATOM 19305 OH2 TIP3X5606 23.622 -28.612 23.972 1.00 0.00 W1 O +ATOM 19306 H1 TIP3X5606 23.260 -28.123 23.233 1.00 0.00 W1 H +ATOM 19307 H2 TIP3X5606 22.890 -28.702 24.582 1.00 0.00 W1 H +ATOM 19308 OH2 TIP3X5607 22.341 -30.628 17.900 1.00 0.00 W1 O +ATOM 19309 H1 TIP3X5607 23.196 -30.883 18.245 1.00 0.00 W1 H +ATOM 19310 H2 TIP3X5607 21.822 -31.432 17.925 1.00 0.00 W1 H +ATOM 19311 OH2 TIP3X5608 25.092 -30.784 18.944 1.00 0.00 W1 O +ATOM 19312 H1 TIP3X5608 25.548 -31.520 19.352 1.00 0.00 W1 H +ATOM 19313 H2 TIP3X5608 25.500 -30.698 18.082 1.00 0.00 W1 H +ATOM 19314 OH2 TIP3X5609 19.732 -16.206 30.398 1.00 0.00 W1 O +ATOM 19315 H1 TIP3X5609 19.481 -15.449 29.869 1.00 0.00 W1 H +ATOM 19316 H2 TIP3X5609 20.643 -16.375 30.159 1.00 0.00 W1 H +ATOM 19317 OH2 TIP3X5610 24.738 -17.511 20.699 1.00 0.00 W1 O +ATOM 19318 H1 TIP3X5610 25.399 -18.153 20.959 1.00 0.00 W1 H +ATOM 19319 H2 TIP3X5610 24.725 -16.877 21.415 1.00 0.00 W1 H +ATOM 19320 OH2 TIP3X5611 22.478 -16.609 29.608 1.00 0.00 W1 O +ATOM 19321 H1 TIP3X5611 22.695 -17.501 29.879 1.00 0.00 W1 H +ATOM 19322 H2 TIP3X5611 23.085 -16.055 30.098 1.00 0.00 W1 H +ATOM 19323 OH2 TIP3X5612 21.424 -28.491 19.653 1.00 0.00 W1 O +ATOM 19324 H1 TIP3X5612 22.081 -29.150 19.430 1.00 0.00 W1 H +ATOM 19325 H2 TIP3X5612 21.467 -28.422 20.607 1.00 0.00 W1 H +ATOM 19326 OH2 TIP3X5613 16.137 -30.152 29.109 1.00 0.00 W1 O +ATOM 19327 H1 TIP3X5613 16.886 -30.348 28.545 1.00 0.00 W1 H +ATOM 19328 H2 TIP3X5613 16.346 -30.578 29.940 1.00 0.00 W1 H +ATOM 19329 OH2 TIP3X5614 27.257 -17.425 18.710 1.00 0.00 W1 O +ATOM 19330 H1 TIP3X5614 27.402 -18.365 18.813 1.00 0.00 W1 H +ATOM 19331 H2 TIP3X5614 28.080 -17.093 18.353 1.00 0.00 W1 H +ATOM 19332 OH2 TIP3X5615 28.925 -30.659 29.937 1.00 0.00 W1 O +ATOM 19333 H1 TIP3X5615 28.311 -30.585 29.207 1.00 0.00 W1 H +ATOM 19334 H2 TIP3X5615 29.694 -30.164 29.656 1.00 0.00 W1 H +ATOM 19335 OH2 TIP3X5616 19.718 -16.446 20.424 1.00 0.00 W1 O +ATOM 19336 H1 TIP3X5616 19.712 -16.401 19.468 1.00 0.00 W1 H +ATOM 19337 H2 TIP3X5616 20.526 -16.000 20.680 1.00 0.00 W1 H +ATOM 19338 OH2 TIP3X5617 30.627 -17.507 28.373 1.00 0.00 W1 O +ATOM 19339 H1 TIP3X5617 29.905 -16.956 28.674 1.00 0.00 W1 H +ATOM 19340 H2 TIP3X5617 31.415 -17.008 28.587 1.00 0.00 W1 H +ATOM 19341 OH2 TIP3X5618 18.253 -28.185 20.053 1.00 0.00 W1 O +ATOM 19342 H1 TIP3X5618 17.610 -27.797 19.461 1.00 0.00 W1 H +ATOM 19343 H2 TIP3X5618 19.056 -27.688 19.895 1.00 0.00 W1 H +ATOM 19344 OH2 TIP3X5619 19.682 -19.586 17.785 1.00 0.00 W1 O +ATOM 19345 H1 TIP3X5619 19.643 -20.214 17.063 1.00 0.00 W1 H +ATOM 19346 H2 TIP3X5619 18.962 -19.840 18.363 1.00 0.00 W1 H +ATOM 19347 OH2 TIP3X5620 17.576 -4.501 -26.806 1.00 0.00 W1 O +ATOM 19348 H1 TIP3X5620 17.759 -4.577 -25.869 1.00 0.00 W1 H +ATOM 19349 H2 TIP3X5620 17.552 -3.558 -26.970 1.00 0.00 W1 H +ATOM 19350 OH2 TIP3X5621 28.679 -7.010 -23.068 1.00 0.00 W1 O +ATOM 19351 H1 TIP3X5621 28.914 -6.745 -23.957 1.00 0.00 W1 H +ATOM 19352 H2 TIP3X5621 29.508 -7.273 -22.669 1.00 0.00 W1 H +ATOM 19353 OH2 TIP3X5622 20.663 -7.286 -27.089 1.00 0.00 W1 O +ATOM 19354 H1 TIP3X5622 20.693 -6.377 -26.792 1.00 0.00 W1 H +ATOM 19355 H2 TIP3X5622 21.170 -7.769 -26.437 1.00 0.00 W1 H +ATOM 19356 OH2 TIP3X5623 28.466 -3.127 -24.946 1.00 0.00 W1 O +ATOM 19357 H1 TIP3X5623 28.191 -2.637 -24.171 1.00 0.00 W1 H +ATOM 19358 H2 TIP3X5623 27.941 -3.927 -24.922 1.00 0.00 W1 H +ATOM 19359 OH2 TIP3X5624 26.983 -4.684 -27.903 1.00 0.00 W1 O +ATOM 19360 H1 TIP3X5624 27.145 -4.912 -28.818 1.00 0.00 W1 H +ATOM 19361 H2 TIP3X5624 26.054 -4.455 -27.873 1.00 0.00 W1 H +ATOM 19362 OH2 TIP3X5625 30.830 -4.152 -23.118 1.00 0.00 W1 O +ATOM 19363 H1 TIP3X5625 30.278 -4.069 -23.896 1.00 0.00 W1 H +ATOM 19364 H2 TIP3X5625 30.220 -4.368 -22.413 1.00 0.00 W1 H +ATOM 19365 OH2 TIP3X5626 17.467 -2.887 -20.667 1.00 0.00 W1 O +ATOM 19366 H1 TIP3X5626 17.873 -2.684 -19.824 1.00 0.00 W1 H +ATOM 19367 H2 TIP3X5626 16.895 -3.633 -20.484 1.00 0.00 W1 H +ATOM 19368 OH2 TIP3X5627 24.842 -1.263 -21.441 1.00 0.00 W1 O +ATOM 19369 H1 TIP3X5627 25.143 -2.163 -21.319 1.00 0.00 W1 H +ATOM 19370 H2 TIP3X5627 25.467 -0.882 -22.058 1.00 0.00 W1 H +ATOM 19371 OH2 TIP3X5628 28.274 -1.306 -21.561 1.00 0.00 W1 O +ATOM 19372 H1 TIP3X5628 27.839 -0.483 -21.781 1.00 0.00 W1 H +ATOM 19373 H2 TIP3X5628 29.203 -1.080 -21.512 1.00 0.00 W1 H +ATOM 19374 OH2 TIP3X5629 20.722 -1.731 -22.432 1.00 0.00 W1 O +ATOM 19375 H1 TIP3X5629 21.078 -0.882 -22.695 1.00 0.00 W1 H +ATOM 19376 H2 TIP3X5629 19.787 -1.672 -22.628 1.00 0.00 W1 H +ATOM 19377 OH2 TIP3X5630 25.564 -9.839 -23.530 1.00 0.00 W1 O +ATOM 19378 H1 TIP3X5630 25.486 -10.648 -24.035 1.00 0.00 W1 H +ATOM 19379 H2 TIP3X5630 26.506 -9.700 -23.443 1.00 0.00 W1 H +ATOM 19380 OH2 TIP3X5631 21.587 -13.741 -21.168 1.00 0.00 W1 O +ATOM 19381 H1 TIP3X5631 21.844 -14.479 -20.615 1.00 0.00 W1 H +ATOM 19382 H2 TIP3X5631 20.910 -14.098 -21.744 1.00 0.00 W1 H +ATOM 19383 OH2 TIP3X5632 29.830 -12.737 -24.745 1.00 0.00 W1 O +ATOM 19384 H1 TIP3X5632 29.523 -12.399 -23.904 1.00 0.00 W1 H +ATOM 19385 H2 TIP3X5632 29.898 -13.682 -24.614 1.00 0.00 W1 H +ATOM 19386 OH2 TIP3X5633 28.428 -11.542 -22.791 1.00 0.00 W1 O +ATOM 19387 H1 TIP3X5633 29.003 -11.770 -22.061 1.00 0.00 W1 H +ATOM 19388 H2 TIP3X5633 27.553 -11.796 -22.496 1.00 0.00 W1 H +ATOM 19389 OH2 TIP3X5634 21.474 -10.417 -21.420 1.00 0.00 W1 O +ATOM 19390 H1 TIP3X5634 21.978 -11.119 -21.008 1.00 0.00 W1 H +ATOM 19391 H2 TIP3X5634 22.132 -9.775 -21.687 1.00 0.00 W1 H +ATOM 19392 OH2 TIP3X5635 28.951 -9.369 -24.523 1.00 0.00 W1 O +ATOM 19393 H1 TIP3X5635 28.992 -10.268 -24.199 1.00 0.00 W1 H +ATOM 19394 H2 TIP3X5635 28.833 -8.836 -23.736 1.00 0.00 W1 H +ATOM 19395 OH2 TIP3X5636 27.636 -12.725 -26.654 1.00 0.00 W1 O +ATOM 19396 H1 TIP3X5636 28.461 -12.541 -26.205 1.00 0.00 W1 H +ATOM 19397 H2 TIP3X5636 27.712 -12.270 -27.493 1.00 0.00 W1 H +ATOM 19398 OH2 TIP3X5637 23.818 -6.754 -20.583 1.00 0.00 W1 O +ATOM 19399 H1 TIP3X5637 24.695 -6.732 -20.966 1.00 0.00 W1 H +ATOM 19400 H2 TIP3X5637 23.553 -5.835 -20.537 1.00 0.00 W1 H +ATOM 19401 OH2 TIP3X5638 22.969 -4.206 -20.773 1.00 0.00 W1 O +ATOM 19402 H1 TIP3X5638 22.944 -3.979 -21.702 1.00 0.00 W1 H +ATOM 19403 H2 TIP3X5638 22.049 -4.260 -20.514 1.00 0.00 W1 H +ATOM 19404 OH2 TIP3X5639 17.832 -12.324 -23.935 1.00 0.00 W1 O +ATOM 19405 H1 TIP3X5639 17.506 -11.445 -23.744 1.00 0.00 W1 H +ATOM 19406 H2 TIP3X5639 17.708 -12.427 -24.878 1.00 0.00 W1 H +ATOM 19407 OH2 TIP3X5640 19.988 -8.767 -23.922 1.00 0.00 W1 O +ATOM 19408 H1 TIP3X5640 19.305 -9.217 -24.419 1.00 0.00 W1 H +ATOM 19409 H2 TIP3X5640 20.473 -9.470 -23.490 1.00 0.00 W1 H +ATOM 19410 OH2 TIP3X5641 26.043 -3.842 -21.526 1.00 0.00 W1 O +ATOM 19411 H1 TIP3X5641 25.801 -4.428 -22.243 1.00 0.00 W1 H +ATOM 19412 H2 TIP3X5641 26.993 -3.931 -21.453 1.00 0.00 W1 H +ATOM 19413 OH2 TIP3X5642 30.341 -0.208 -24.745 1.00 0.00 W1 O +ATOM 19414 H1 TIP3X5642 30.336 -0.676 -23.910 1.00 0.00 W1 H +ATOM 19415 H2 TIP3X5642 29.461 -0.337 -25.098 1.00 0.00 W1 H +ATOM 19416 OH2 TIP3X5643 22.213 -3.871 -23.723 1.00 0.00 W1 O +ATOM 19417 H1 TIP3X5643 21.642 -4.591 -23.454 1.00 0.00 W1 H +ATOM 19418 H2 TIP3X5643 21.753 -3.081 -23.441 1.00 0.00 W1 H +ATOM 19419 OH2 TIP3X5644 24.435 -13.420 -19.153 1.00 0.00 W1 O +ATOM 19420 H1 TIP3X5644 23.692 -12.940 -18.786 1.00 0.00 W1 H +ATOM 19421 H2 TIP3X5644 24.054 -14.232 -19.487 1.00 0.00 W1 H +ATOM 19422 OH2 TIP3X5645 19.787 -12.715 -29.351 1.00 0.00 W1 O +ATOM 19423 H1 TIP3X5645 19.689 -13.377 -28.667 1.00 0.00 W1 H +ATOM 19424 H2 TIP3X5645 19.603 -13.183 -30.166 1.00 0.00 W1 H +ATOM 19425 OH2 TIP3X5646 30.680 -11.793 -21.162 1.00 0.00 W1 O +ATOM 19426 H1 TIP3X5646 31.199 -11.124 -21.609 1.00 0.00 W1 H +ATOM 19427 H2 TIP3X5646 31.122 -11.917 -20.322 1.00 0.00 W1 H +ATOM 19428 OH2 TIP3X5647 16.738 -15.440 -27.002 1.00 0.00 W1 O +ATOM 19429 H1 TIP3X5647 17.463 -14.819 -26.933 1.00 0.00 W1 H +ATOM 19430 H2 TIP3X5647 16.366 -15.473 -26.120 1.00 0.00 W1 H +ATOM 19431 OH2 TIP3X5648 22.004 -9.205 -17.015 1.00 0.00 W1 O +ATOM 19432 H1 TIP3X5648 22.868 -8.806 -17.116 1.00 0.00 W1 H +ATOM 19433 H2 TIP3X5648 22.156 -10.142 -17.138 1.00 0.00 W1 H +ATOM 19434 OH2 TIP3X5649 25.170 -4.295 -24.276 1.00 0.00 W1 O +ATOM 19435 H1 TIP3X5649 25.264 -5.157 -24.679 1.00 0.00 W1 H +ATOM 19436 H2 TIP3X5649 24.237 -4.095 -24.352 1.00 0.00 W1 H +ATOM 19437 OH2 TIP3X5650 23.782 -6.011 -26.745 1.00 0.00 W1 O +ATOM 19438 H1 TIP3X5650 23.218 -6.625 -26.275 1.00 0.00 W1 H +ATOM 19439 H2 TIP3X5650 23.308 -5.180 -26.716 1.00 0.00 W1 H +ATOM 19440 OH2 TIP3X5651 16.320 -5.497 -20.288 1.00 0.00 W1 O +ATOM 19441 H1 TIP3X5651 15.785 -6.099 -20.806 1.00 0.00 W1 H +ATOM 19442 H2 TIP3X5651 15.849 -5.411 -19.459 1.00 0.00 W1 H +ATOM 19443 OH2 TIP3X5652 27.616 -6.477 -25.920 1.00 0.00 W1 O +ATOM 19444 H1 TIP3X5652 27.560 -7.391 -26.197 1.00 0.00 W1 H +ATOM 19445 H2 TIP3X5652 27.444 -5.974 -26.716 1.00 0.00 W1 H +ATOM 19446 OH2 TIP3X5653 27.913 -5.963 -18.896 1.00 0.00 W1 O +ATOM 19447 H1 TIP3X5653 27.011 -5.879 -18.588 1.00 0.00 W1 H +ATOM 19448 H2 TIP3X5653 28.082 -6.905 -18.892 1.00 0.00 W1 H +ATOM 19449 OH2 TIP3X5654 30.280 -8.003 -21.090 1.00 0.00 W1 O +ATOM 19450 H1 TIP3X5654 30.942 -8.684 -21.209 1.00 0.00 W1 H +ATOM 19451 H2 TIP3X5654 29.564 -8.443 -20.631 1.00 0.00 W1 H +ATOM 19452 OH2 TIP3X5655 19.424 -8.316 -15.946 1.00 0.00 W1 O +ATOM 19453 H1 TIP3X5655 18.895 -8.550 -16.708 1.00 0.00 W1 H +ATOM 19454 H2 TIP3X5655 20.320 -8.268 -16.280 1.00 0.00 W1 H +ATOM 19455 OH2 TIP3X5656 20.335 -5.110 -20.384 1.00 0.00 W1 O +ATOM 19456 H1 TIP3X5656 20.290 -5.665 -19.606 1.00 0.00 W1 H +ATOM 19457 H2 TIP3X5656 19.702 -4.412 -20.218 1.00 0.00 W1 H +ATOM 19458 OH2 TIP3X5657 29.006 -3.980 -20.635 1.00 0.00 W1 O +ATOM 19459 H1 TIP3X5657 29.430 -3.212 -20.251 1.00 0.00 W1 H +ATOM 19460 H2 TIP3X5657 28.702 -4.488 -19.882 1.00 0.00 W1 H +ATOM 19461 OH2 TIP3X5658 27.094 -2.005 -18.810 1.00 0.00 W1 O +ATOM 19462 H1 TIP3X5658 26.387 -2.634 -18.952 1.00 0.00 W1 H +ATOM 19463 H2 TIP3X5658 27.423 -1.810 -19.687 1.00 0.00 W1 H +ATOM 19464 OH2 TIP3X5659 27.345 -3.469 -16.413 1.00 0.00 W1 O +ATOM 19465 H1 TIP3X5659 26.711 -4.075 -16.797 1.00 0.00 W1 H +ATOM 19466 H2 TIP3X5659 27.458 -2.788 -17.077 1.00 0.00 W1 H +ATOM 19467 OH2 TIP3X5660 30.955 -1.560 -22.347 1.00 0.00 W1 O +ATOM 19468 H1 TIP3X5660 31.633 -1.719 -21.690 1.00 0.00 W1 H +ATOM 19469 H2 TIP3X5660 30.721 -2.432 -22.666 1.00 0.00 W1 H +ATOM 19470 OH2 TIP3X5661 21.511 -15.089 -23.954 1.00 0.00 W1 O +ATOM 19471 H1 TIP3X5661 21.220 -14.180 -24.015 1.00 0.00 W1 H +ATOM 19472 H2 TIP3X5661 22.343 -15.107 -24.427 1.00 0.00 W1 H +ATOM 19473 OH2 TIP3X5662 23.635 -5.143 -30.300 1.00 0.00 W1 O +ATOM 19474 H1 TIP3X5662 22.940 -5.765 -30.085 1.00 0.00 W1 H +ATOM 19475 H2 TIP3X5662 23.618 -4.507 -29.585 1.00 0.00 W1 H +ATOM 19476 OH2 TIP3X5663 31.016 -6.379 -30.863 1.00 0.00 W1 O +ATOM 19477 H1 TIP3X5663 30.753 -7.129 -31.397 1.00 0.00 W1 H +ATOM 19478 H2 TIP3X5663 30.761 -5.615 -31.381 1.00 0.00 W1 H +ATOM 19479 OH2 TIP3X5664 16.964 -2.683 -31.146 1.00 0.00 W1 O +ATOM 19480 H1 TIP3X5664 17.409 -3.232 -30.501 1.00 0.00 W1 H +ATOM 19481 H2 TIP3X5664 16.067 -3.017 -31.167 1.00 0.00 W1 H +ATOM 19482 OH2 TIP3X5665 29.057 -0.554 -29.888 1.00 0.00 W1 O +ATOM 19483 H1 TIP3X5665 29.942 -0.882 -30.046 1.00 0.00 W1 H +ATOM 19484 H2 TIP3X5665 28.827 -0.086 -30.690 1.00 0.00 W1 H +ATOM 19485 OH2 TIP3X5666 30.449 -4.892 -17.810 1.00 0.00 W1 O +ATOM 19486 H1 TIP3X5666 30.340 -3.943 -17.751 1.00 0.00 W1 H +ATOM 19487 H2 TIP3X5666 29.557 -5.237 -17.820 1.00 0.00 W1 H +ATOM 19488 OH2 TIP3X5667 17.136 -2.066 -28.191 1.00 0.00 W1 O +ATOM 19489 H1 TIP3X5667 17.068 -1.230 -27.731 1.00 0.00 W1 H +ATOM 19490 H2 TIP3X5667 16.240 -2.404 -28.208 1.00 0.00 W1 H +ATOM 19491 OH2 TIP3X5668 29.716 -3.573 -30.547 1.00 0.00 W1 O +ATOM 19492 H1 TIP3X5668 29.747 -3.653 -29.594 1.00 0.00 W1 H +ATOM 19493 H2 TIP3X5668 28.883 -3.136 -30.724 1.00 0.00 W1 H +ATOM 19494 OH2 TIP3X5669 26.086 -15.278 -17.663 1.00 0.00 W1 O +ATOM 19495 H1 TIP3X5669 25.780 -14.530 -18.176 1.00 0.00 W1 H +ATOM 19496 H2 TIP3X5669 26.140 -15.995 -18.295 1.00 0.00 W1 H +ATOM 19497 OH2 TIP3X5670 20.300 -1.362 -19.634 1.00 0.00 W1 O +ATOM 19498 H1 TIP3X5670 21.148 -1.124 -19.260 1.00 0.00 W1 H +ATOM 19499 H2 TIP3X5670 20.512 -1.742 -20.487 1.00 0.00 W1 H +ATOM 19500 OH2 TIP3X5671 18.766 -13.343 -16.284 1.00 0.00 W1 O +ATOM 19501 H1 TIP3X5671 17.889 -13.254 -15.910 1.00 0.00 W1 H +ATOM 19502 H2 TIP3X5671 18.829 -12.631 -16.920 1.00 0.00 W1 H +ATOM 19503 OH2 TIP3X5672 24.964 -11.396 -30.553 1.00 0.00 W1 O +ATOM 19504 H1 TIP3X5672 24.798 -11.099 -31.448 1.00 0.00 W1 H +ATOM 19505 H2 TIP3X5672 24.093 -11.520 -30.176 1.00 0.00 W1 H +ATOM 19506 OH2 TIP3X5673 30.361 -3.636 -27.505 1.00 0.00 W1 O +ATOM 19507 H1 TIP3X5673 30.934 -4.373 -27.292 1.00 0.00 W1 H +ATOM 19508 H2 TIP3X5673 30.030 -3.337 -26.658 1.00 0.00 W1 H +ATOM 19509 OH2 TIP3X5674 25.622 -14.600 -30.576 1.00 0.00 W1 O +ATOM 19510 H1 TIP3X5674 26.354 -13.984 -30.552 1.00 0.00 W1 H +ATOM 19511 H2 TIP3X5674 25.863 -15.232 -31.253 1.00 0.00 W1 H +ATOM 19512 OH2 TIP3X5675 30.154 -14.506 -20.311 1.00 0.00 W1 O +ATOM 19513 H1 TIP3X5675 30.646 -15.136 -19.784 1.00 0.00 W1 H +ATOM 19514 H2 TIP3X5675 30.755 -14.264 -21.016 1.00 0.00 W1 H +ATOM 19515 OH2 TIP3X5676 17.661 -5.286 -24.233 1.00 0.00 W1 O +ATOM 19516 H1 TIP3X5676 16.993 -4.962 -23.629 1.00 0.00 W1 H +ATOM 19517 H2 TIP3X5676 18.454 -5.355 -23.701 1.00 0.00 W1 H +ATOM 19518 OH2 TIP3X5677 22.658 -3.867 -17.123 1.00 0.00 W1 O +ATOM 19519 H1 TIP3X5677 22.882 -4.245 -16.272 1.00 0.00 W1 H +ATOM 19520 H2 TIP3X5677 22.052 -4.496 -17.513 1.00 0.00 W1 H +ATOM 19521 OH2 TIP3X5678 26.138 -12.562 -21.710 1.00 0.00 W1 O +ATOM 19522 H1 TIP3X5678 26.197 -12.744 -20.772 1.00 0.00 W1 H +ATOM 19523 H2 TIP3X5678 25.199 -12.475 -21.879 1.00 0.00 W1 H +ATOM 19524 OH2 TIP3X5679 22.329 -11.905 -17.531 1.00 0.00 W1 O +ATOM 19525 H1 TIP3X5679 21.462 -11.975 -17.931 1.00 0.00 W1 H +ATOM 19526 H2 TIP3X5679 22.274 -12.446 -16.743 1.00 0.00 W1 H +ATOM 19527 OH2 TIP3X5680 29.815 -9.185 -15.778 1.00 0.00 W1 O +ATOM 19528 H1 TIP3X5680 30.610 -9.718 -15.795 1.00 0.00 W1 H +ATOM 19529 H2 TIP3X5680 29.521 -9.220 -14.868 1.00 0.00 W1 H +ATOM 19530 OH2 TIP3X5681 18.000 -15.318 -19.860 1.00 0.00 W1 O +ATOM 19531 H1 TIP3X5681 17.775 -14.865 -20.672 1.00 0.00 W1 H +ATOM 19532 H2 TIP3X5681 18.830 -15.755 -20.051 1.00 0.00 W1 H +ATOM 19533 OH2 TIP3X5682 24.095 -14.860 -24.778 1.00 0.00 W1 O +ATOM 19534 H1 TIP3X5682 24.577 -14.346 -25.426 1.00 0.00 W1 H +ATOM 19535 H2 TIP3X5682 24.439 -14.567 -23.934 1.00 0.00 W1 H +ATOM 19536 OH2 TIP3X5683 18.565 -10.269 -29.625 1.00 0.00 W1 O +ATOM 19537 H1 TIP3X5683 18.988 -9.623 -30.191 1.00 0.00 W1 H +ATOM 19538 H2 TIP3X5683 19.277 -10.844 -29.344 1.00 0.00 W1 H +ATOM 19539 OH2 TIP3X5684 19.090 -9.612 -20.314 1.00 0.00 W1 O +ATOM 19540 H1 TIP3X5684 19.005 -8.821 -19.782 1.00 0.00 W1 H +ATOM 19541 H2 TIP3X5684 20.005 -9.616 -20.595 1.00 0.00 W1 H +ATOM 19542 OH2 TIP3X5685 18.272 -8.894 -27.129 1.00 0.00 W1 O +ATOM 19543 H1 TIP3X5685 18.335 -9.183 -28.039 1.00 0.00 W1 H +ATOM 19544 H2 TIP3X5685 19.048 -8.349 -26.996 1.00 0.00 W1 H +ATOM 19545 OH2 TIP3X5686 27.293 -12.324 -29.369 1.00 0.00 W1 O +ATOM 19546 H1 TIP3X5686 26.585 -11.836 -29.789 1.00 0.00 W1 H +ATOM 19547 H2 TIP3X5686 28.018 -12.280 -29.992 1.00 0.00 W1 H +ATOM 19548 OH2 TIP3X5687 15.843 -11.438 -18.281 1.00 0.00 W1 O +ATOM 19549 H1 TIP3X5687 14.939 -11.144 -18.170 1.00 0.00 W1 H +ATOM 19550 H2 TIP3X5687 15.984 -12.057 -17.564 1.00 0.00 W1 H +ATOM 19551 OH2 TIP3X5688 16.987 -14.600 -22.298 1.00 0.00 W1 O +ATOM 19552 H1 TIP3X5688 17.094 -15.302 -22.941 1.00 0.00 W1 H +ATOM 19553 H2 TIP3X5688 17.122 -13.795 -22.797 1.00 0.00 W1 H +ATOM 19554 OH2 TIP3X5689 28.508 -10.972 -17.411 1.00 0.00 W1 O +ATOM 19555 H1 TIP3X5689 28.820 -10.394 -16.715 1.00 0.00 W1 H +ATOM 19556 H2 TIP3X5689 27.564 -11.036 -17.265 1.00 0.00 W1 H +ATOM 19557 OH2 TIP3X5690 25.551 -10.966 -17.464 1.00 0.00 W1 O +ATOM 19558 H1 TIP3X5690 25.192 -10.398 -18.145 1.00 0.00 W1 H +ATOM 19559 H2 TIP3X5690 25.214 -11.837 -17.675 1.00 0.00 W1 H +ATOM 19560 OH2 TIP3X5691 23.754 -10.497 -27.598 1.00 0.00 W1 O +ATOM 19561 H1 TIP3X5691 23.843 -9.918 -28.355 1.00 0.00 W1 H +ATOM 19562 H2 TIP3X5691 22.985 -11.032 -27.795 1.00 0.00 W1 H +ATOM 19563 OH2 TIP3X5692 22.057 -11.166 -29.911 1.00 0.00 W1 O +ATOM 19564 H1 TIP3X5692 21.620 -10.973 -30.740 1.00 0.00 W1 H +ATOM 19565 H2 TIP3X5692 21.650 -11.977 -29.607 1.00 0.00 W1 H +ATOM 19566 OH2 TIP3X5693 22.768 -14.104 -16.122 1.00 0.00 W1 O +ATOM 19567 H1 TIP3X5693 22.301 -14.491 -15.381 1.00 0.00 W1 H +ATOM 19568 H2 TIP3X5693 23.682 -14.071 -15.839 1.00 0.00 W1 H +ATOM 19569 OH2 TIP3X5694 28.331 -8.759 -19.440 1.00 0.00 W1 O +ATOM 19570 H1 TIP3X5694 28.350 -9.409 -18.737 1.00 0.00 W1 H +ATOM 19571 H2 TIP3X5694 27.496 -8.911 -19.884 1.00 0.00 W1 H +ATOM 19572 OH2 TIP3X5695 16.406 -11.659 -30.971 1.00 0.00 W1 O +ATOM 19573 H1 TIP3X5695 15.649 -11.851 -30.417 1.00 0.00 W1 H +ATOM 19574 H2 TIP3X5695 16.940 -11.060 -30.448 1.00 0.00 W1 H +ATOM 19575 OH2 TIP3X5696 16.324 -0.165 -30.484 1.00 0.00 W1 O +ATOM 19576 H1 TIP3X5696 16.740 -0.913 -30.054 1.00 0.00 W1 H +ATOM 19577 H2 TIP3X5696 16.337 0.528 -29.824 1.00 0.00 W1 H +ATOM 19578 OH2 TIP3X5697 25.072 -12.005 -25.491 1.00 0.00 W1 O +ATOM 19579 H1 TIP3X5697 24.735 -11.655 -26.315 1.00 0.00 W1 H +ATOM 19580 H2 TIP3X5697 25.969 -12.273 -25.692 1.00 0.00 W1 H +ATOM 19581 OH2 TIP3X5698 20.528 -12.695 -23.747 1.00 0.00 W1 O +ATOM 19582 H1 TIP3X5698 19.585 -12.742 -23.905 1.00 0.00 W1 H +ATOM 19583 H2 TIP3X5698 20.667 -11.820 -23.383 1.00 0.00 W1 H +ATOM 19584 OH2 TIP3X5699 15.890 -11.569 -26.953 1.00 0.00 W1 O +ATOM 19585 H1 TIP3X5699 15.616 -11.693 -26.045 1.00 0.00 W1 H +ATOM 19586 H2 TIP3X5699 15.695 -10.650 -27.139 1.00 0.00 W1 H +ATOM 19587 OH2 TIP3X5700 19.890 -12.242 -18.893 1.00 0.00 W1 O +ATOM 19588 H1 TIP3X5700 19.912 -13.048 -19.409 1.00 0.00 W1 H +ATOM 19589 H2 TIP3X5700 19.496 -11.594 -19.477 1.00 0.00 W1 H +ATOM 19590 OH2 TIP3X5701 20.473 -5.706 -23.088 1.00 0.00 W1 O +ATOM 19591 H1 TIP3X5701 20.402 -6.642 -23.276 1.00 0.00 W1 H +ATOM 19592 H2 TIP3X5701 20.478 -5.653 -22.132 1.00 0.00 W1 H +ATOM 19593 OH2 TIP3X5702 24.662 -8.687 -18.526 1.00 0.00 W1 O +ATOM 19594 H1 TIP3X5702 25.074 -7.856 -18.289 1.00 0.00 W1 H +ATOM 19595 H2 TIP3X5702 24.113 -8.477 -19.280 1.00 0.00 W1 H +ATOM 19596 OH2 TIP3X5703 30.458 -13.321 -29.201 1.00 0.00 W1 O +ATOM 19597 H1 TIP3X5703 30.892 -13.094 -28.379 1.00 0.00 W1 H +ATOM 19598 H2 TIP3X5703 29.938 -14.096 -28.992 1.00 0.00 W1 H +ATOM 19599 OH2 TIP3X5704 21.612 -7.361 -30.023 1.00 0.00 W1 O +ATOM 19600 H1 TIP3X5704 21.323 -7.483 -29.119 1.00 0.00 W1 H +ATOM 19601 H2 TIP3X5704 22.301 -8.014 -30.144 1.00 0.00 W1 H +ATOM 19602 OH2 TIP3X5705 28.316 -8.845 -28.955 1.00 0.00 W1 O +ATOM 19603 H1 TIP3X5705 27.451 -9.044 -28.596 1.00 0.00 W1 H +ATOM 19604 H2 TIP3X5705 28.873 -8.724 -28.186 1.00 0.00 W1 H +ATOM 19605 OH2 TIP3X5706 23.149 -8.591 -22.485 1.00 0.00 W1 O +ATOM 19606 H1 TIP3X5706 23.246 -7.794 -21.963 1.00 0.00 W1 H +ATOM 19607 H2 TIP3X5706 24.023 -8.980 -22.493 1.00 0.00 W1 H +ATOM 19608 OH2 TIP3X5707 22.894 -8.209 -25.569 1.00 0.00 W1 O +ATOM 19609 H1 TIP3X5707 23.515 -8.805 -25.987 1.00 0.00 W1 H +ATOM 19610 H2 TIP3X5707 22.919 -8.446 -24.642 1.00 0.00 W1 H +ATOM 19611 OH2 TIP3X5708 25.789 -6.593 -16.633 1.00 0.00 W1 O +ATOM 19612 H1 TIP3X5708 25.111 -6.309 -16.020 1.00 0.00 W1 H +ATOM 19613 H2 TIP3X5708 26.587 -6.634 -16.106 1.00 0.00 W1 H +ATOM 19614 OH2 TIP3X5709 18.298 -7.178 -18.937 1.00 0.00 W1 O +ATOM 19615 H1 TIP3X5709 18.815 -6.772 -18.241 1.00 0.00 W1 H +ATOM 19616 H2 TIP3X5709 17.916 -6.441 -19.412 1.00 0.00 W1 H +ATOM 19617 OH2 TIP3X5710 17.205 -9.216 -17.315 1.00 0.00 W1 O +ATOM 19618 H1 TIP3X5710 17.001 -10.055 -17.728 1.00 0.00 W1 H +ATOM 19619 H2 TIP3X5710 17.081 -8.570 -18.011 1.00 0.00 W1 H +ATOM 19620 OH2 TIP3X5711 17.097 -8.342 -24.492 1.00 0.00 W1 O +ATOM 19621 H1 TIP3X5711 17.454 -7.470 -24.662 1.00 0.00 W1 H +ATOM 19622 H2 TIP3X5711 16.995 -8.733 -25.360 1.00 0.00 W1 H +ATOM 19623 OH2 TIP3X5712 27.856 -6.078 -30.305 1.00 0.00 W1 O +ATOM 19624 H1 TIP3X5712 28.562 -5.579 -30.717 1.00 0.00 W1 H +ATOM 19625 H2 TIP3X5712 28.305 -6.708 -29.742 1.00 0.00 W1 H +ATOM 19626 OH2 TIP3X5713 30.453 -8.731 -26.943 1.00 0.00 W1 O +ATOM 19627 H1 TIP3X5713 30.165 -8.558 -26.046 1.00 0.00 W1 H +ATOM 19628 H2 TIP3X5713 30.965 -7.959 -27.183 1.00 0.00 W1 H +ATOM 19629 OH2 TIP3X5714 16.950 -9.614 -22.221 1.00 0.00 W1 O +ATOM 19630 H1 TIP3X5714 17.045 -8.936 -22.889 1.00 0.00 W1 H +ATOM 19631 H2 TIP3X5714 17.609 -9.395 -21.561 1.00 0.00 W1 H +ATOM 19632 OH2 TIP3X5715 19.737 -1.107 -28.957 1.00 0.00 W1 O +ATOM 19633 H1 TIP3X5715 19.508 -0.747 -29.814 1.00 0.00 W1 H +ATOM 19634 H2 TIP3X5715 19.324 -1.970 -28.941 1.00 0.00 W1 H +ATOM 19635 OH2 TIP3X5716 18.512 -5.874 -30.459 1.00 0.00 W1 O +ATOM 19636 H1 TIP3X5716 17.696 -6.163 -30.867 1.00 0.00 W1 H +ATOM 19637 H2 TIP3X5716 19.044 -6.667 -30.397 1.00 0.00 W1 H +ATOM 19638 OH2 TIP3X5717 19.930 -5.034 -17.384 1.00 0.00 W1 O +ATOM 19639 H1 TIP3X5717 19.357 -4.432 -17.858 1.00 0.00 W1 H +ATOM 19640 H2 TIP3X5717 19.456 -5.230 -16.576 1.00 0.00 W1 H +ATOM 19641 OH2 TIP3X5718 23.006 -0.291 -19.693 1.00 0.00 W1 O +ATOM 19642 H1 TIP3X5718 23.324 -0.585 -18.840 1.00 0.00 W1 H +ATOM 19643 H2 TIP3X5718 23.439 -0.869 -20.322 1.00 0.00 W1 H +ATOM 19644 OH2 TIP3X5719 27.712 -0.050 -25.560 1.00 0.00 W1 O +ATOM 19645 H1 TIP3X5719 27.300 -0.741 -26.078 1.00 0.00 W1 H +ATOM 19646 H2 TIP3X5719 27.516 0.757 -26.036 1.00 0.00 W1 H +ATOM 19647 OH2 TIP3X5720 24.290 -3.367 -28.308 1.00 0.00 W1 O +ATOM 19648 H1 TIP3X5720 24.549 -2.582 -28.790 1.00 0.00 W1 H +ATOM 19649 H2 TIP3X5720 23.721 -3.044 -27.610 1.00 0.00 W1 H +ATOM 19650 OH2 TIP3X5721 24.307 -8.213 -29.236 1.00 0.00 W1 O +ATOM 19651 H1 TIP3X5721 25.130 -8.140 -29.719 1.00 0.00 W1 H +ATOM 19652 H2 TIP3X5721 24.315 -7.468 -28.635 1.00 0.00 W1 H +ATOM 19653 OH2 TIP3X5722 27.709 -13.489 -19.445 1.00 0.00 W1 O +ATOM 19654 H1 TIP3X5722 28.514 -13.720 -19.909 1.00 0.00 W1 H +ATOM 19655 H2 TIP3X5722 27.999 -12.936 -18.720 1.00 0.00 W1 H +ATOM 19656 OH2 TIP3X5723 15.674 -6.388 -28.039 1.00 0.00 W1 O +ATOM 19657 H1 TIP3X5723 15.520 -6.295 -28.979 1.00 0.00 W1 H +ATOM 19658 H2 TIP3X5723 16.627 -6.388 -27.950 1.00 0.00 W1 H +ATOM 19659 OH2 TIP3X5724 26.436 -6.800 -21.443 1.00 0.00 W1 O +ATOM 19660 H1 TIP3X5724 26.981 -6.138 -21.017 1.00 0.00 W1 H +ATOM 19661 H2 TIP3X5724 26.895 -7.000 -22.259 1.00 0.00 W1 H +ATOM 19662 OH2 TIP3X5725 25.258 -1.826 -30.366 1.00 0.00 W1 O +ATOM 19663 H1 TIP3X5725 26.083 -1.791 -29.881 1.00 0.00 W1 H +ATOM 19664 H2 TIP3X5725 25.461 -2.339 -31.148 1.00 0.00 W1 H +ATOM 19665 OH2 TIP3X5726 25.250 -4.039 -18.715 1.00 0.00 W1 O +ATOM 19666 H1 TIP3X5726 24.429 -3.792 -18.288 1.00 0.00 W1 H +ATOM 19667 H2 TIP3X5726 25.021 -4.134 -19.639 1.00 0.00 W1 H +ATOM 19668 OH2 TIP3X5727 21.875 -3.814 -26.828 1.00 0.00 W1 O +ATOM 19669 H1 TIP3X5727 21.168 -3.667 -27.456 1.00 0.00 W1 H +ATOM 19670 H2 TIP3X5727 21.538 -3.469 -26.001 1.00 0.00 W1 H +ATOM 19671 OH2 TIP3X5728 18.440 -2.902 -18.117 1.00 0.00 W1 O +ATOM 19672 H1 TIP3X5728 19.174 -2.291 -18.181 1.00 0.00 W1 H +ATOM 19673 H2 TIP3X5728 18.128 -2.808 -17.217 1.00 0.00 W1 H +ATOM 19674 OH2 TIP3X5729 18.030 -1.197 -24.015 1.00 0.00 W1 O +ATOM 19675 H1 TIP3X5729 17.444 -1.938 -24.169 1.00 0.00 W1 H +ATOM 19676 H2 TIP3X5729 18.473 -1.064 -24.853 1.00 0.00 W1 H +ATOM 19677 OH2 TIP3X5730 26.384 -15.184 -22.935 1.00 0.00 W1 O +ATOM 19678 H1 TIP3X5730 26.716 -15.259 -23.829 1.00 0.00 W1 H +ATOM 19679 H2 TIP3X5730 26.339 -14.241 -22.774 1.00 0.00 W1 H +ATOM 19680 OH2 TIP3X5731 23.622 -13.055 -22.700 1.00 0.00 W1 O +ATOM 19681 H1 TIP3X5731 23.260 -12.566 -23.439 1.00 0.00 W1 H +ATOM 19682 H2 TIP3X5731 22.890 -13.144 -22.090 1.00 0.00 W1 H +ATOM 19683 OH2 TIP3X5732 22.341 -15.070 -28.772 1.00 0.00 W1 O +ATOM 19684 H1 TIP3X5732 23.196 -15.326 -28.427 1.00 0.00 W1 H +ATOM 19685 H2 TIP3X5732 21.822 -15.874 -28.747 1.00 0.00 W1 H +ATOM 19686 OH2 TIP3X5733 25.092 -15.227 -27.729 1.00 0.00 W1 O +ATOM 19687 H1 TIP3X5733 25.548 -15.963 -27.320 1.00 0.00 W1 H +ATOM 19688 H2 TIP3X5733 25.500 -15.140 -28.590 1.00 0.00 W1 H +ATOM 19689 OH2 TIP3X5734 19.732 -0.648 -16.274 1.00 0.00 W1 O +ATOM 19690 H1 TIP3X5734 19.481 0.109 -16.804 1.00 0.00 W1 H +ATOM 19691 H2 TIP3X5734 20.643 -0.817 -16.513 1.00 0.00 W1 H +ATOM 19692 OH2 TIP3X5735 24.738 -1.954 -25.974 1.00 0.00 W1 O +ATOM 19693 H1 TIP3X5735 25.399 -2.596 -25.714 1.00 0.00 W1 H +ATOM 19694 H2 TIP3X5735 24.725 -1.319 -25.257 1.00 0.00 W1 H +ATOM 19695 OH2 TIP3X5736 22.478 -1.051 -17.064 1.00 0.00 W1 O +ATOM 19696 H1 TIP3X5736 22.695 -1.943 -16.794 1.00 0.00 W1 H +ATOM 19697 H2 TIP3X5736 23.085 -0.497 -16.575 1.00 0.00 W1 H +ATOM 19698 OH2 TIP3X5737 21.424 -12.933 -27.020 1.00 0.00 W1 O +ATOM 19699 H1 TIP3X5737 22.081 -13.592 -27.242 1.00 0.00 W1 H +ATOM 19700 H2 TIP3X5737 21.467 -12.864 -26.066 1.00 0.00 W1 H +ATOM 19701 OH2 TIP3X5738 16.137 -14.595 -17.564 1.00 0.00 W1 O +ATOM 19702 H1 TIP3X5738 16.886 -14.790 -18.128 1.00 0.00 W1 H +ATOM 19703 H2 TIP3X5738 16.346 -15.020 -16.732 1.00 0.00 W1 H +ATOM 19704 OH2 TIP3X5739 27.257 -1.867 -27.962 1.00 0.00 W1 O +ATOM 19705 H1 TIP3X5739 27.402 -2.808 -27.859 1.00 0.00 W1 H +ATOM 19706 H2 TIP3X5739 28.080 -1.535 -28.319 1.00 0.00 W1 H +ATOM 19707 OH2 TIP3X5740 28.925 -15.101 -16.735 1.00 0.00 W1 O +ATOM 19708 H1 TIP3X5740 28.311 -15.027 -17.466 1.00 0.00 W1 H +ATOM 19709 H2 TIP3X5740 29.694 -14.606 -17.017 1.00 0.00 W1 H +ATOM 19710 OH2 TIP3X5741 19.718 -0.888 -26.249 1.00 0.00 W1 O +ATOM 19711 H1 TIP3X5741 19.712 -0.843 -27.205 1.00 0.00 W1 H +ATOM 19712 H2 TIP3X5741 20.526 -0.442 -25.993 1.00 0.00 W1 H +ATOM 19713 OH2 TIP3X5742 30.627 -1.950 -18.299 1.00 0.00 W1 O +ATOM 19714 H1 TIP3X5742 29.905 -1.399 -17.998 1.00 0.00 W1 H +ATOM 19715 H2 TIP3X5742 31.415 -1.450 -18.085 1.00 0.00 W1 H +ATOM 19716 OH2 TIP3X5743 18.253 -12.628 -26.619 1.00 0.00 W1 O +ATOM 19717 H1 TIP3X5743 17.610 -12.239 -27.212 1.00 0.00 W1 H +ATOM 19718 H2 TIP3X5743 19.056 -12.131 -26.777 1.00 0.00 W1 H +ATOM 19719 OH2 TIP3X5744 19.682 -4.029 -28.888 1.00 0.00 W1 O +ATOM 19720 H1 TIP3X5744 19.643 -4.657 -29.609 1.00 0.00 W1 H +ATOM 19721 H2 TIP3X5744 18.962 -4.282 -28.310 1.00 0.00 W1 H +ATOM 19722 OH2 TIP3X5745 17.576 -4.501 -11.248 1.00 0.00 W1 O +ATOM 19723 H1 TIP3X5745 17.759 -4.577 -10.312 1.00 0.00 W1 H +ATOM 19724 H2 TIP3X5745 17.552 -3.558 -11.413 1.00 0.00 W1 H +ATOM 19725 OH2 TIP3X5746 28.679 -7.010 -7.510 1.00 0.00 W1 O +ATOM 19726 H1 TIP3X5746 28.914 -6.745 -8.400 1.00 0.00 W1 H +ATOM 19727 H2 TIP3X5746 29.508 -7.273 -7.111 1.00 0.00 W1 H +ATOM 19728 OH2 TIP3X5747 20.663 -7.286 -11.532 1.00 0.00 W1 O +ATOM 19729 H1 TIP3X5747 20.693 -6.377 -11.235 1.00 0.00 W1 H +ATOM 19730 H2 TIP3X5747 21.170 -7.769 -10.880 1.00 0.00 W1 H +ATOM 19731 OH2 TIP3X5748 28.466 -3.127 -9.388 1.00 0.00 W1 O +ATOM 19732 H1 TIP3X5748 28.191 -2.637 -8.613 1.00 0.00 W1 H +ATOM 19733 H2 TIP3X5748 27.941 -3.927 -9.365 1.00 0.00 W1 H +ATOM 19734 OH2 TIP3X5749 26.983 -4.684 -12.345 1.00 0.00 W1 O +ATOM 19735 H1 TIP3X5749 27.145 -4.912 -13.260 1.00 0.00 W1 H +ATOM 19736 H2 TIP3X5749 26.054 -4.455 -12.315 1.00 0.00 W1 H +ATOM 19737 OH2 TIP3X5750 30.830 -4.152 -7.561 1.00 0.00 W1 O +ATOM 19738 H1 TIP3X5750 30.278 -4.069 -8.338 1.00 0.00 W1 H +ATOM 19739 H2 TIP3X5750 30.220 -4.368 -6.856 1.00 0.00 W1 H +ATOM 19740 OH2 TIP3X5751 28.274 -1.306 -6.004 1.00 0.00 W1 O +ATOM 19741 H1 TIP3X5751 27.839 -0.483 -6.223 1.00 0.00 W1 H +ATOM 19742 H2 TIP3X5751 29.203 -1.080 -5.954 1.00 0.00 W1 H +ATOM 19743 OH2 TIP3X5752 25.564 -9.839 -7.973 1.00 0.00 W1 O +ATOM 19744 H1 TIP3X5752 25.486 -10.648 -8.477 1.00 0.00 W1 H +ATOM 19745 H2 TIP3X5752 26.506 -9.700 -7.885 1.00 0.00 W1 H +ATOM 19746 OH2 TIP3X5753 21.587 -13.741 -5.611 1.00 0.00 W1 O +ATOM 19747 H1 TIP3X5753 21.844 -14.479 -5.058 1.00 0.00 W1 H +ATOM 19748 H2 TIP3X5753 20.910 -14.098 -6.186 1.00 0.00 W1 H +ATOM 19749 OH2 TIP3X5754 29.830 -12.737 -9.188 1.00 0.00 W1 O +ATOM 19750 H1 TIP3X5754 29.523 -12.399 -8.347 1.00 0.00 W1 H +ATOM 19751 H2 TIP3X5754 29.898 -13.682 -9.056 1.00 0.00 W1 H +ATOM 19752 OH2 TIP3X5755 28.428 -11.542 -7.234 1.00 0.00 W1 O +ATOM 19753 H1 TIP3X5755 29.003 -11.770 -6.503 1.00 0.00 W1 H +ATOM 19754 H2 TIP3X5755 27.553 -11.796 -6.939 1.00 0.00 W1 H +ATOM 19755 OH2 TIP3X5756 21.474 -10.417 -5.863 1.00 0.00 W1 O +ATOM 19756 H1 TIP3X5756 21.978 -11.119 -5.451 1.00 0.00 W1 H +ATOM 19757 H2 TIP3X5756 22.132 -9.775 -6.129 1.00 0.00 W1 H +ATOM 19758 OH2 TIP3X5757 28.951 -9.369 -8.965 1.00 0.00 W1 O +ATOM 19759 H1 TIP3X5757 28.992 -10.268 -8.641 1.00 0.00 W1 H +ATOM 19760 H2 TIP3X5757 28.833 -8.836 -8.179 1.00 0.00 W1 H +ATOM 19761 OH2 TIP3X5758 27.636 -12.725 -11.097 1.00 0.00 W1 O +ATOM 19762 H1 TIP3X5758 28.461 -12.541 -10.648 1.00 0.00 W1 H +ATOM 19763 H2 TIP3X5758 27.712 -12.270 -11.936 1.00 0.00 W1 H +ATOM 19764 OH2 TIP3X5759 23.818 -6.754 -5.025 1.00 0.00 W1 O +ATOM 19765 H1 TIP3X5759 24.695 -6.732 -5.408 1.00 0.00 W1 H +ATOM 19766 H2 TIP3X5759 23.553 -5.835 -4.979 1.00 0.00 W1 H +ATOM 19767 OH2 TIP3X5760 22.969 -4.206 -5.215 1.00 0.00 W1 O +ATOM 19768 H1 TIP3X5760 22.944 -3.979 -6.145 1.00 0.00 W1 H +ATOM 19769 H2 TIP3X5760 22.049 -4.260 -4.957 1.00 0.00 W1 H +ATOM 19770 OH2 TIP3X5761 17.832 -12.324 -8.377 1.00 0.00 W1 O +ATOM 19771 H1 TIP3X5761 17.506 -11.445 -8.186 1.00 0.00 W1 H +ATOM 19772 H2 TIP3X5761 17.708 -12.427 -9.321 1.00 0.00 W1 H +ATOM 19773 OH2 TIP3X5762 19.988 -8.767 -8.365 1.00 0.00 W1 O +ATOM 19774 H1 TIP3X5762 19.305 -9.217 -8.862 1.00 0.00 W1 H +ATOM 19775 H2 TIP3X5762 20.473 -9.470 -7.933 1.00 0.00 W1 H +ATOM 19776 OH2 TIP3X5763 26.043 -3.842 -5.968 1.00 0.00 W1 O +ATOM 19777 H1 TIP3X5763 25.801 -4.428 -6.685 1.00 0.00 W1 H +ATOM 19778 H2 TIP3X5763 26.993 -3.931 -5.896 1.00 0.00 W1 H +ATOM 19779 OH2 TIP3X5764 30.341 -0.208 -9.188 1.00 0.00 W1 O +ATOM 19780 H1 TIP3X5764 30.336 -0.676 -8.353 1.00 0.00 W1 H +ATOM 19781 H2 TIP3X5764 29.461 -0.337 -9.541 1.00 0.00 W1 H +ATOM 19782 OH2 TIP3X5765 22.213 -3.871 -8.166 1.00 0.00 W1 O +ATOM 19783 H1 TIP3X5765 21.642 -4.591 -7.897 1.00 0.00 W1 H +ATOM 19784 H2 TIP3X5765 21.753 -3.081 -7.883 1.00 0.00 W1 H +ATOM 19785 OH2 TIP3X5766 24.435 -13.420 -3.595 1.00 0.00 W1 O +ATOM 19786 H1 TIP3X5766 23.692 -12.940 -3.228 1.00 0.00 W1 H +ATOM 19787 H2 TIP3X5766 24.054 -14.232 -3.930 1.00 0.00 W1 H +ATOM 19788 OH2 TIP3X5767 19.787 -12.715 -13.794 1.00 0.00 W1 O +ATOM 19789 H1 TIP3X5767 19.689 -13.377 -13.109 1.00 0.00 W1 H +ATOM 19790 H2 TIP3X5767 19.603 -13.183 -14.608 1.00 0.00 W1 H +ATOM 19791 OH2 TIP3X5768 30.680 -11.793 -5.604 1.00 0.00 W1 O +ATOM 19792 H1 TIP3X5768 31.199 -11.124 -6.051 1.00 0.00 W1 H +ATOM 19793 H2 TIP3X5768 31.122 -11.917 -4.764 1.00 0.00 W1 H +ATOM 19794 OH2 TIP3X5769 16.738 -15.440 -11.444 1.00 0.00 W1 O +ATOM 19795 H1 TIP3X5769 17.463 -14.819 -11.375 1.00 0.00 W1 H +ATOM 19796 H2 TIP3X5769 16.366 -15.473 -10.563 1.00 0.00 W1 H +ATOM 19797 OH2 TIP3X5770 22.004 -9.205 -1.458 1.00 0.00 W1 O +ATOM 19798 H1 TIP3X5770 22.868 -8.806 -1.559 1.00 0.00 W1 H +ATOM 19799 H2 TIP3X5770 22.156 -10.142 -1.580 1.00 0.00 W1 H +ATOM 19800 OH2 TIP3X5771 25.170 -4.295 -8.718 1.00 0.00 W1 O +ATOM 19801 H1 TIP3X5771 25.264 -5.157 -9.122 1.00 0.00 W1 H +ATOM 19802 H2 TIP3X5771 24.237 -4.095 -8.794 1.00 0.00 W1 H +ATOM 19803 OH2 TIP3X5772 23.782 -6.011 -11.187 1.00 0.00 W1 O +ATOM 19804 H1 TIP3X5772 23.218 -6.625 -10.718 1.00 0.00 W1 H +ATOM 19805 H2 TIP3X5772 23.308 -5.180 -11.159 1.00 0.00 W1 H +ATOM 19806 OH2 TIP3X5773 27.616 -6.477 -10.363 1.00 0.00 W1 O +ATOM 19807 H1 TIP3X5773 27.560 -7.391 -10.639 1.00 0.00 W1 H +ATOM 19808 H2 TIP3X5773 27.444 -5.974 -11.159 1.00 0.00 W1 H +ATOM 19809 OH2 TIP3X5774 27.913 -5.963 -3.338 1.00 0.00 W1 O +ATOM 19810 H1 TIP3X5774 27.011 -5.879 -3.030 1.00 0.00 W1 H +ATOM 19811 H2 TIP3X5774 28.082 -6.905 -3.335 1.00 0.00 W1 H +ATOM 19812 OH2 TIP3X5775 30.280 -8.003 -5.533 1.00 0.00 W1 O +ATOM 19813 H1 TIP3X5775 30.942 -8.684 -5.652 1.00 0.00 W1 H +ATOM 19814 H2 TIP3X5775 29.564 -8.443 -5.074 1.00 0.00 W1 H +ATOM 19815 OH2 TIP3X5776 19.424 -8.316 -0.388 1.00 0.00 W1 O +ATOM 19816 H1 TIP3X5776 18.895 -8.550 -1.151 1.00 0.00 W1 H +ATOM 19817 H2 TIP3X5776 20.320 -8.268 -0.723 1.00 0.00 W1 H +ATOM 19818 OH2 TIP3X5777 29.006 -3.980 -5.077 1.00 0.00 W1 O +ATOM 19819 H1 TIP3X5777 29.430 -3.212 -4.693 1.00 0.00 W1 H +ATOM 19820 H2 TIP3X5777 28.702 -4.488 -4.325 1.00 0.00 W1 H +ATOM 19821 OH2 TIP3X5778 27.094 -2.005 -3.252 1.00 0.00 W1 O +ATOM 19822 H1 TIP3X5778 26.387 -2.634 -3.395 1.00 0.00 W1 H +ATOM 19823 H2 TIP3X5778 27.423 -1.810 -4.130 1.00 0.00 W1 H +ATOM 19824 OH2 TIP3X5779 27.345 -3.469 -0.856 1.00 0.00 W1 O +ATOM 19825 H1 TIP3X5779 26.711 -4.075 -1.240 1.00 0.00 W1 H +ATOM 19826 H2 TIP3X5779 27.458 -2.788 -1.520 1.00 0.00 W1 H +ATOM 19827 OH2 TIP3X5780 30.955 -1.560 -6.789 1.00 0.00 W1 O +ATOM 19828 H1 TIP3X5780 31.633 -1.719 -6.133 1.00 0.00 W1 H +ATOM 19829 H2 TIP3X5780 30.721 -2.432 -7.108 1.00 0.00 W1 H +ATOM 19830 OH2 TIP3X5781 21.511 -15.089 -8.397 1.00 0.00 W1 O +ATOM 19831 H1 TIP3X5781 21.220 -14.180 -8.457 1.00 0.00 W1 H +ATOM 19832 H2 TIP3X5781 22.343 -15.107 -8.870 1.00 0.00 W1 H +ATOM 19833 OH2 TIP3X5782 23.635 -5.143 -14.742 1.00 0.00 W1 O +ATOM 19834 H1 TIP3X5782 22.940 -5.765 -14.528 1.00 0.00 W1 H +ATOM 19835 H2 TIP3X5782 23.618 -4.507 -14.027 1.00 0.00 W1 H +ATOM 19836 OH2 TIP3X5783 31.016 -6.379 -15.306 1.00 0.00 W1 O +ATOM 19837 H1 TIP3X5783 30.753 -7.129 -15.839 1.00 0.00 W1 H +ATOM 19838 H2 TIP3X5783 30.761 -5.615 -15.823 1.00 0.00 W1 H +ATOM 19839 OH2 TIP3X5784 16.964 -2.683 -15.589 1.00 0.00 W1 O +ATOM 19840 H1 TIP3X5784 17.409 -3.232 -14.943 1.00 0.00 W1 H +ATOM 19841 H2 TIP3X5784 16.067 -3.017 -15.610 1.00 0.00 W1 H +ATOM 19842 OH2 TIP3X5785 29.057 -0.554 -14.330 1.00 0.00 W1 O +ATOM 19843 H1 TIP3X5785 29.942 -0.882 -14.489 1.00 0.00 W1 H +ATOM 19844 H2 TIP3X5785 28.827 -0.086 -15.133 1.00 0.00 W1 H +ATOM 19845 OH2 TIP3X5786 30.449 -4.892 -2.253 1.00 0.00 W1 O +ATOM 19846 H1 TIP3X5786 30.340 -3.943 -2.194 1.00 0.00 W1 H +ATOM 19847 H2 TIP3X5786 29.557 -5.237 -2.263 1.00 0.00 W1 H +ATOM 19848 OH2 TIP3X5787 17.136 -2.066 -12.634 1.00 0.00 W1 O +ATOM 19849 H1 TIP3X5787 17.068 -1.230 -12.174 1.00 0.00 W1 H +ATOM 19850 H2 TIP3X5787 16.240 -2.404 -12.651 1.00 0.00 W1 H +ATOM 19851 OH2 TIP3X5788 29.716 -3.573 -14.990 1.00 0.00 W1 O +ATOM 19852 H1 TIP3X5788 29.747 -3.653 -14.036 1.00 0.00 W1 H +ATOM 19853 H2 TIP3X5788 28.883 -3.136 -15.166 1.00 0.00 W1 H +ATOM 19854 OH2 TIP3X5789 26.086 -15.278 -2.106 1.00 0.00 W1 O +ATOM 19855 H1 TIP3X5789 25.780 -14.530 -2.618 1.00 0.00 W1 H +ATOM 19856 H2 TIP3X5789 26.140 -15.995 -2.738 1.00 0.00 W1 H +ATOM 19857 OH2 TIP3X5790 18.766 -13.343 -0.726 1.00 0.00 W1 O +ATOM 19858 H1 TIP3X5790 17.889 -13.254 -0.352 1.00 0.00 W1 H +ATOM 19859 H2 TIP3X5790 18.829 -12.631 -1.363 1.00 0.00 W1 H +ATOM 19860 OH2 TIP3X5791 24.964 -11.396 -14.996 1.00 0.00 W1 O +ATOM 19861 H1 TIP3X5791 24.798 -11.099 -15.891 1.00 0.00 W1 H +ATOM 19862 H2 TIP3X5791 24.093 -11.520 -14.619 1.00 0.00 W1 H +ATOM 19863 OH2 TIP3X5792 30.361 -3.636 -11.948 1.00 0.00 W1 O +ATOM 19864 H1 TIP3X5792 30.934 -4.373 -11.735 1.00 0.00 W1 H +ATOM 19865 H2 TIP3X5792 30.030 -3.337 -11.101 1.00 0.00 W1 H +ATOM 19866 OH2 TIP3X5793 25.622 -14.600 -15.019 1.00 0.00 W1 O +ATOM 19867 H1 TIP3X5793 26.354 -13.984 -14.994 1.00 0.00 W1 H +ATOM 19868 H2 TIP3X5793 25.863 -15.232 -15.695 1.00 0.00 W1 H +ATOM 19869 OH2 TIP3X5794 30.154 -14.506 -4.754 1.00 0.00 W1 O +ATOM 19870 H1 TIP3X5794 30.646 -15.136 -4.226 1.00 0.00 W1 H +ATOM 19871 H2 TIP3X5794 30.755 -14.264 -5.459 1.00 0.00 W1 H +ATOM 19872 OH2 TIP3X5795 26.138 -12.562 -6.153 1.00 0.00 W1 O +ATOM 19873 H1 TIP3X5795 26.197 -12.744 -5.215 1.00 0.00 W1 H +ATOM 19874 H2 TIP3X5795 25.199 -12.475 -6.321 1.00 0.00 W1 H +ATOM 19875 OH2 TIP3X5796 22.329 -11.905 -1.974 1.00 0.00 W1 O +ATOM 19876 H1 TIP3X5796 21.462 -11.975 -2.374 1.00 0.00 W1 H +ATOM 19877 H2 TIP3X5796 22.274 -12.446 -1.186 1.00 0.00 W1 H +ATOM 19878 OH2 TIP3X5797 29.815 -9.185 -0.221 1.00 0.00 W1 O +ATOM 19879 H1 TIP3X5797 30.610 -9.718 -0.237 1.00 0.00 W1 H +ATOM 19880 H2 TIP3X5797 29.521 -9.220 0.690 1.00 0.00 W1 H +ATOM 19881 OH2 TIP3X5798 18.000 -15.318 -4.302 1.00 0.00 W1 O +ATOM 19882 H1 TIP3X5798 17.775 -14.865 -5.115 1.00 0.00 W1 H +ATOM 19883 H2 TIP3X5798 18.830 -15.755 -4.494 1.00 0.00 W1 H +ATOM 19884 OH2 TIP3X5799 24.095 -14.860 -9.221 1.00 0.00 W1 O +ATOM 19885 H1 TIP3X5799 24.577 -14.346 -9.868 1.00 0.00 W1 H +ATOM 19886 H2 TIP3X5799 24.439 -14.567 -8.377 1.00 0.00 W1 H +ATOM 19887 OH2 TIP3X5800 18.565 -10.269 -14.068 1.00 0.00 W1 O +ATOM 19888 H1 TIP3X5800 18.988 -9.623 -14.634 1.00 0.00 W1 H +ATOM 19889 H2 TIP3X5800 19.277 -10.844 -13.787 1.00 0.00 W1 H +ATOM 19890 OH2 TIP3X5801 19.090 -9.612 -4.757 1.00 0.00 W1 O +ATOM 19891 H1 TIP3X5801 19.005 -8.821 -4.225 1.00 0.00 W1 H +ATOM 19892 H2 TIP3X5801 20.005 -9.616 -5.037 1.00 0.00 W1 H +ATOM 19893 OH2 TIP3X5802 18.272 -8.894 -11.571 1.00 0.00 W1 O +ATOM 19894 H1 TIP3X5802 18.335 -9.183 -12.482 1.00 0.00 W1 H +ATOM 19895 H2 TIP3X5802 19.048 -8.349 -11.438 1.00 0.00 W1 H +ATOM 19896 OH2 TIP3X5803 27.293 -12.324 -13.811 1.00 0.00 W1 O +ATOM 19897 H1 TIP3X5803 26.585 -11.836 -14.231 1.00 0.00 W1 H +ATOM 19898 H2 TIP3X5803 28.018 -12.280 -14.435 1.00 0.00 W1 H +ATOM 19899 OH2 TIP3X5804 16.987 -14.600 -6.741 1.00 0.00 W1 O +ATOM 19900 H1 TIP3X5804 17.094 -15.302 -7.383 1.00 0.00 W1 H +ATOM 19901 H2 TIP3X5804 17.122 -13.795 -7.240 1.00 0.00 W1 H +ATOM 19902 OH2 TIP3X5805 28.508 -10.972 -1.853 1.00 0.00 W1 O +ATOM 19903 H1 TIP3X5805 28.820 -10.394 -1.157 1.00 0.00 W1 H +ATOM 19904 H2 TIP3X5805 27.564 -11.036 -1.708 1.00 0.00 W1 H +ATOM 19905 OH2 TIP3X5806 25.551 -10.966 -1.906 1.00 0.00 W1 O +ATOM 19906 H1 TIP3X5806 25.192 -10.398 -2.587 1.00 0.00 W1 H +ATOM 19907 H2 TIP3X5806 25.214 -11.837 -2.117 1.00 0.00 W1 H +ATOM 19908 OH2 TIP3X5807 23.754 -10.497 -12.041 1.00 0.00 W1 O +ATOM 19909 H1 TIP3X5807 23.843 -9.918 -12.797 1.00 0.00 W1 H +ATOM 19910 H2 TIP3X5807 22.985 -11.032 -12.237 1.00 0.00 W1 H +ATOM 19911 OH2 TIP3X5808 22.057 -11.166 -14.353 1.00 0.00 W1 O +ATOM 19912 H1 TIP3X5808 21.620 -10.973 -15.183 1.00 0.00 W1 H +ATOM 19913 H2 TIP3X5808 21.650 -11.977 -14.050 1.00 0.00 W1 H +ATOM 19914 OH2 TIP3X5809 22.768 -14.104 -0.564 1.00 0.00 W1 O +ATOM 19915 H1 TIP3X5809 22.301 -14.491 0.176 1.00 0.00 W1 H +ATOM 19916 H2 TIP3X5809 23.682 -14.071 -0.282 1.00 0.00 W1 H +ATOM 19917 OH2 TIP3X5810 28.331 -8.759 -3.883 1.00 0.00 W1 O +ATOM 19918 H1 TIP3X5810 28.350 -9.409 -3.180 1.00 0.00 W1 H +ATOM 19919 H2 TIP3X5810 27.496 -8.911 -4.327 1.00 0.00 W1 H +ATOM 19920 OH2 TIP3X5811 16.406 -11.659 -15.413 1.00 0.00 W1 O +ATOM 19921 H1 TIP3X5811 15.649 -11.851 -14.859 1.00 0.00 W1 H +ATOM 19922 H2 TIP3X5811 16.940 -11.060 -14.891 1.00 0.00 W1 H +ATOM 19923 OH2 TIP3X5812 16.324 -0.165 -14.926 1.00 0.00 W1 O +ATOM 19924 H1 TIP3X5812 16.740 -0.913 -14.497 1.00 0.00 W1 H +ATOM 19925 H2 TIP3X5812 16.337 0.528 -14.267 1.00 0.00 W1 H +ATOM 19926 OH2 TIP3X5813 25.072 -12.005 -9.933 1.00 0.00 W1 O +ATOM 19927 H1 TIP3X5813 24.735 -11.655 -10.758 1.00 0.00 W1 H +ATOM 19928 H2 TIP3X5813 25.969 -12.273 -10.135 1.00 0.00 W1 H +ATOM 19929 OH2 TIP3X5814 20.528 -12.695 -8.189 1.00 0.00 W1 O +ATOM 19930 H1 TIP3X5814 19.585 -12.742 -8.348 1.00 0.00 W1 H +ATOM 19931 H2 TIP3X5814 20.667 -11.820 -7.826 1.00 0.00 W1 H +ATOM 19932 OH2 TIP3X5815 15.890 -11.569 -11.396 1.00 0.00 W1 O +ATOM 19933 H1 TIP3X5815 15.616 -11.693 -10.487 1.00 0.00 W1 H +ATOM 19934 H2 TIP3X5815 15.695 -10.650 -11.582 1.00 0.00 W1 H +ATOM 19935 OH2 TIP3X5816 19.890 -12.242 -3.335 1.00 0.00 W1 O +ATOM 19936 H1 TIP3X5816 19.912 -13.048 -3.851 1.00 0.00 W1 H +ATOM 19937 H2 TIP3X5816 19.496 -11.594 -3.920 1.00 0.00 W1 H +ATOM 19938 OH2 TIP3X5817 20.473 -5.706 -7.531 1.00 0.00 W1 O +ATOM 19939 H1 TIP3X5817 20.402 -6.642 -7.718 1.00 0.00 W1 H +ATOM 19940 H2 TIP3X5817 20.478 -5.653 -6.575 1.00 0.00 W1 H +ATOM 19941 OH2 TIP3X5818 24.662 -8.687 -2.968 1.00 0.00 W1 O +ATOM 19942 H1 TIP3X5818 25.074 -7.856 -2.732 1.00 0.00 W1 H +ATOM 19943 H2 TIP3X5818 24.113 -8.477 -3.723 1.00 0.00 W1 H +ATOM 19944 OH2 TIP3X5819 30.458 -13.321 -13.644 1.00 0.00 W1 O +ATOM 19945 H1 TIP3X5819 30.892 -13.094 -12.822 1.00 0.00 W1 H +ATOM 19946 H2 TIP3X5819 29.938 -14.096 -13.434 1.00 0.00 W1 H +ATOM 19947 OH2 TIP3X5820 21.612 -7.361 -14.466 1.00 0.00 W1 O +ATOM 19948 H1 TIP3X5820 21.323 -7.483 -13.561 1.00 0.00 W1 H +ATOM 19949 H2 TIP3X5820 22.301 -8.014 -14.587 1.00 0.00 W1 H +ATOM 19950 OH2 TIP3X5821 28.316 -8.845 -13.398 1.00 0.00 W1 O +ATOM 19951 H1 TIP3X5821 27.451 -9.044 -13.039 1.00 0.00 W1 H +ATOM 19952 H2 TIP3X5821 28.873 -8.724 -12.629 1.00 0.00 W1 H +ATOM 19953 OH2 TIP3X5822 23.149 -8.591 -6.927 1.00 0.00 W1 O +ATOM 19954 H1 TIP3X5822 23.246 -7.794 -6.406 1.00 0.00 W1 H +ATOM 19955 H2 TIP3X5822 24.023 -8.980 -6.936 1.00 0.00 W1 H +ATOM 19956 OH2 TIP3X5823 22.894 -8.209 -10.011 1.00 0.00 W1 O +ATOM 19957 H1 TIP3X5823 23.515 -8.805 -10.429 1.00 0.00 W1 H +ATOM 19958 H2 TIP3X5823 22.919 -8.446 -9.084 1.00 0.00 W1 H +ATOM 19959 OH2 TIP3X5824 25.789 -6.593 -1.075 1.00 0.00 W1 O +ATOM 19960 H1 TIP3X5824 25.111 -6.309 -0.462 1.00 0.00 W1 H +ATOM 19961 H2 TIP3X5824 26.587 -6.634 -0.549 1.00 0.00 W1 H +ATOM 19962 OH2 TIP3X5825 17.097 -8.342 -8.934 1.00 0.00 W1 O +ATOM 19963 H1 TIP3X5825 17.454 -7.470 -9.104 1.00 0.00 W1 H +ATOM 19964 H2 TIP3X5825 16.995 -8.733 -9.802 1.00 0.00 W1 H +ATOM 19965 OH2 TIP3X5826 27.856 -6.078 -14.748 1.00 0.00 W1 O +ATOM 19966 H1 TIP3X5826 28.562 -5.579 -15.160 1.00 0.00 W1 H +ATOM 19967 H2 TIP3X5826 28.305 -6.708 -14.184 1.00 0.00 W1 H +ATOM 19968 OH2 TIP3X5827 30.453 -8.731 -11.385 1.00 0.00 W1 O +ATOM 19969 H1 TIP3X5827 30.165 -8.558 -10.489 1.00 0.00 W1 H +ATOM 19970 H2 TIP3X5827 30.965 -7.959 -11.626 1.00 0.00 W1 H +ATOM 19971 OH2 TIP3X5828 19.737 -1.107 -13.399 1.00 0.00 W1 O +ATOM 19972 H1 TIP3X5828 19.508 -0.747 -14.256 1.00 0.00 W1 H +ATOM 19973 H2 TIP3X5828 19.324 -1.970 -13.383 1.00 0.00 W1 H +ATOM 19974 OH2 TIP3X5829 18.512 -5.874 -14.901 1.00 0.00 W1 O +ATOM 19975 H1 TIP3X5829 17.696 -6.163 -15.310 1.00 0.00 W1 H +ATOM 19976 H2 TIP3X5829 19.044 -6.667 -14.840 1.00 0.00 W1 H +ATOM 19977 OH2 TIP3X5830 27.712 -0.050 -10.002 1.00 0.00 W1 O +ATOM 19978 H1 TIP3X5830 27.300 -0.741 -10.521 1.00 0.00 W1 H +ATOM 19979 H2 TIP3X5830 27.516 0.757 -10.479 1.00 0.00 W1 H +ATOM 19980 OH2 TIP3X5831 24.290 -3.367 -12.750 1.00 0.00 W1 O +ATOM 19981 H1 TIP3X5831 24.549 -2.582 -13.232 1.00 0.00 W1 H +ATOM 19982 H2 TIP3X5831 23.721 -3.044 -12.052 1.00 0.00 W1 H +ATOM 19983 OH2 TIP3X5832 24.307 -8.213 -13.679 1.00 0.00 W1 O +ATOM 19984 H1 TIP3X5832 25.130 -8.140 -14.162 1.00 0.00 W1 H +ATOM 19985 H2 TIP3X5832 24.315 -7.468 -13.077 1.00 0.00 W1 H +ATOM 19986 OH2 TIP3X5833 27.709 -13.489 -3.888 1.00 0.00 W1 O +ATOM 19987 H1 TIP3X5833 28.514 -13.720 -4.351 1.00 0.00 W1 H +ATOM 19988 H2 TIP3X5833 27.999 -12.936 -3.163 1.00 0.00 W1 H +ATOM 19989 OH2 TIP3X5834 15.674 -6.388 -12.482 1.00 0.00 W1 O +ATOM 19990 H1 TIP3X5834 15.520 -6.295 -13.422 1.00 0.00 W1 H +ATOM 19991 H2 TIP3X5834 16.627 -6.388 -12.393 1.00 0.00 W1 H +ATOM 19992 OH2 TIP3X5835 26.436 -6.800 -5.886 1.00 0.00 W1 O +ATOM 19993 H1 TIP3X5835 26.981 -6.138 -5.460 1.00 0.00 W1 H +ATOM 19994 H2 TIP3X5835 26.895 -7.000 -6.701 1.00 0.00 W1 H +ATOM 19995 OH2 TIP3X5836 25.258 -1.826 -14.808 1.00 0.00 W1 O +ATOM 19996 H1 TIP3X5836 26.083 -1.791 -14.324 1.00 0.00 W1 H +ATOM 19997 H2 TIP3X5836 25.461 -2.339 -15.591 1.00 0.00 W1 H +ATOM 19998 OH2 TIP3X5837 25.250 -4.039 -3.157 1.00 0.00 W1 O +ATOM 19999 H1 TIP3X5837 24.429 -3.792 -2.731 1.00 0.00 W1 H +ATOM 20000 H2 TIP3X5837 25.021 -4.134 -4.082 1.00 0.00 W1 H +ATOM 20001 OH2 TIP3X5838 21.875 -3.814 -11.271 1.00 0.00 W1 O +ATOM 20002 H1 TIP3X5838 21.168 -3.667 -11.899 1.00 0.00 W1 H +ATOM 20003 H2 TIP3X5838 21.538 -3.469 -10.444 1.00 0.00 W1 H +ATOM 20004 OH2 TIP3X5839 26.384 -15.184 -7.377 1.00 0.00 W1 O +ATOM 20005 H1 TIP3X5839 26.716 -15.259 -8.272 1.00 0.00 W1 H +ATOM 20006 H2 TIP3X5839 26.339 -14.241 -7.216 1.00 0.00 W1 H +ATOM 20007 OH2 TIP3X5840 23.622 -13.055 -7.143 1.00 0.00 W1 O +ATOM 20008 H1 TIP3X5840 23.260 -12.566 -7.882 1.00 0.00 W1 H +ATOM 20009 H2 TIP3X5840 22.890 -13.144 -6.533 1.00 0.00 W1 H +ATOM 20010 OH2 TIP3X5841 22.341 -15.070 -13.215 1.00 0.00 W1 O +ATOM 20011 H1 TIP3X5841 23.196 -15.326 -12.869 1.00 0.00 W1 H +ATOM 20012 H2 TIP3X5841 21.822 -15.874 -13.190 1.00 0.00 W1 H +ATOM 20013 OH2 TIP3X5842 25.092 -15.227 -12.171 1.00 0.00 W1 O +ATOM 20014 H1 TIP3X5842 25.548 -15.963 -11.763 1.00 0.00 W1 H +ATOM 20015 H2 TIP3X5842 25.500 -15.140 -13.033 1.00 0.00 W1 H +ATOM 20016 OH2 TIP3X5843 24.738 -1.954 -10.416 1.00 0.00 W1 O +ATOM 20017 H1 TIP3X5843 25.399 -2.596 -10.156 1.00 0.00 W1 H +ATOM 20018 H2 TIP3X5843 24.725 -1.319 -9.700 1.00 0.00 W1 H +ATOM 20019 OH2 TIP3X5844 22.478 -1.051 -1.507 1.00 0.00 W1 O +ATOM 20020 H1 TIP3X5844 22.695 -1.943 -1.236 1.00 0.00 W1 H +ATOM 20021 H2 TIP3X5844 23.085 -0.497 -1.017 1.00 0.00 W1 H +ATOM 20022 OH2 TIP3X5845 21.424 -12.933 -11.462 1.00 0.00 W1 O +ATOM 20023 H1 TIP3X5845 22.081 -13.592 -11.685 1.00 0.00 W1 H +ATOM 20024 H2 TIP3X5845 21.467 -12.864 -10.508 1.00 0.00 W1 H +ATOM 20025 OH2 TIP3X5846 16.137 -14.595 -2.006 1.00 0.00 W1 O +ATOM 20026 H1 TIP3X5846 16.886 -14.790 -2.570 1.00 0.00 W1 H +ATOM 20027 H2 TIP3X5846 16.346 -15.020 -1.175 1.00 0.00 W1 H +ATOM 20028 OH2 TIP3X5847 27.257 -1.867 -12.405 1.00 0.00 W1 O +ATOM 20029 H1 TIP3X5847 27.402 -2.808 -12.302 1.00 0.00 W1 H +ATOM 20030 H2 TIP3X5847 28.080 -1.535 -12.762 1.00 0.00 W1 H +ATOM 20031 OH2 TIP3X5848 28.925 -15.101 -1.178 1.00 0.00 W1 O +ATOM 20032 H1 TIP3X5848 28.311 -15.027 -1.908 1.00 0.00 W1 H +ATOM 20033 H2 TIP3X5848 29.694 -14.606 -1.459 1.00 0.00 W1 H +ATOM 20034 OH2 TIP3X5849 19.718 -0.888 -10.691 1.00 0.00 W1 O +ATOM 20035 H1 TIP3X5849 19.712 -0.843 -11.647 1.00 0.00 W1 H +ATOM 20036 H2 TIP3X5849 20.526 -0.442 -10.435 1.00 0.00 W1 H +ATOM 20037 OH2 TIP3X5850 30.627 -1.950 -2.742 1.00 0.00 W1 O +ATOM 20038 H1 TIP3X5850 29.905 -1.399 -2.441 1.00 0.00 W1 H +ATOM 20039 H2 TIP3X5850 31.415 -1.450 -2.528 1.00 0.00 W1 H +ATOM 20040 OH2 TIP3X5851 18.253 -12.628 -11.062 1.00 0.00 W1 O +ATOM 20041 H1 TIP3X5851 17.610 -12.239 -11.654 1.00 0.00 W1 H +ATOM 20042 H2 TIP3X5851 19.056 -12.131 -11.220 1.00 0.00 W1 H +ATOM 20043 OH2 TIP3X5852 19.682 -4.029 -13.330 1.00 0.00 W1 O +ATOM 20044 H1 TIP3X5852 19.643 -4.657 -14.052 1.00 0.00 W1 H +ATOM 20045 H2 TIP3X5852 18.962 -4.282 -12.752 1.00 0.00 W1 H +ATOM 20046 OH2 TIP3X5853 28.679 -7.010 8.047 1.00 0.00 W1 O +ATOM 20047 H1 TIP3X5853 28.914 -6.745 7.158 1.00 0.00 W1 H +ATOM 20048 H2 TIP3X5853 29.508 -7.273 8.446 1.00 0.00 W1 H +ATOM 20049 OH2 TIP3X5854 20.663 -7.286 4.026 1.00 0.00 W1 O +ATOM 20050 H1 TIP3X5854 20.693 -6.377 4.323 1.00 0.00 W1 H +ATOM 20051 H2 TIP3X5854 21.170 -7.769 4.678 1.00 0.00 W1 H +ATOM 20052 OH2 TIP3X5855 28.466 -3.127 6.169 1.00 0.00 W1 O +ATOM 20053 H1 TIP3X5855 28.191 -2.637 6.944 1.00 0.00 W1 H +ATOM 20054 H2 TIP3X5855 27.941 -3.927 6.192 1.00 0.00 W1 H +ATOM 20055 OH2 TIP3X5856 26.983 -4.684 3.212 1.00 0.00 W1 O +ATOM 20056 H1 TIP3X5856 27.145 -4.912 2.297 1.00 0.00 W1 H +ATOM 20057 H2 TIP3X5856 26.054 -4.455 3.242 1.00 0.00 W1 H +ATOM 20058 OH2 TIP3X5857 30.830 -4.152 7.997 1.00 0.00 W1 O +ATOM 20059 H1 TIP3X5857 30.278 -4.069 7.219 1.00 0.00 W1 H +ATOM 20060 H2 TIP3X5857 30.220 -4.368 8.702 1.00 0.00 W1 H +ATOM 20061 OH2 TIP3X5858 17.467 -2.887 10.448 1.00 0.00 W1 O +ATOM 20062 H1 TIP3X5858 17.873 -2.684 11.291 1.00 0.00 W1 H +ATOM 20063 H2 TIP3X5858 16.895 -3.633 10.630 1.00 0.00 W1 H +ATOM 20064 OH2 TIP3X5859 24.842 -1.263 9.674 1.00 0.00 W1 O +ATOM 20065 H1 TIP3X5859 25.143 -2.163 9.796 1.00 0.00 W1 H +ATOM 20066 H2 TIP3X5859 25.467 -0.882 9.057 1.00 0.00 W1 H +ATOM 20067 OH2 TIP3X5860 28.274 -1.306 9.554 1.00 0.00 W1 O +ATOM 20068 H1 TIP3X5860 27.839 -0.483 9.334 1.00 0.00 W1 H +ATOM 20069 H2 TIP3X5860 29.203 -1.080 9.603 1.00 0.00 W1 H +ATOM 20070 OH2 TIP3X5861 20.722 -1.731 8.683 1.00 0.00 W1 O +ATOM 20071 H1 TIP3X5861 21.078 -0.882 8.420 1.00 0.00 W1 H +ATOM 20072 H2 TIP3X5861 19.787 -1.672 8.487 1.00 0.00 W1 H +ATOM 20073 OH2 TIP3X5862 25.564 -9.839 7.585 1.00 0.00 W1 O +ATOM 20074 H1 TIP3X5862 25.486 -10.648 7.080 1.00 0.00 W1 H +ATOM 20075 H2 TIP3X5862 26.506 -9.700 7.672 1.00 0.00 W1 H +ATOM 20076 OH2 TIP3X5863 21.587 -13.741 9.947 1.00 0.00 W1 O +ATOM 20077 H1 TIP3X5863 21.844 -14.479 10.500 1.00 0.00 W1 H +ATOM 20078 H2 TIP3X5863 20.910 -14.098 9.371 1.00 0.00 W1 H +ATOM 20079 OH2 TIP3X5864 29.830 -12.737 6.370 1.00 0.00 W1 O +ATOM 20080 H1 TIP3X5864 29.523 -12.399 7.211 1.00 0.00 W1 H +ATOM 20081 H2 TIP3X5864 29.898 -13.682 6.501 1.00 0.00 W1 H +ATOM 20082 OH2 TIP3X5865 28.428 -11.542 8.324 1.00 0.00 W1 O +ATOM 20083 H1 TIP3X5865 29.003 -11.770 9.054 1.00 0.00 W1 H +ATOM 20084 H2 TIP3X5865 27.553 -11.796 8.618 1.00 0.00 W1 H +ATOM 20085 OH2 TIP3X5866 21.474 -10.417 9.695 1.00 0.00 W1 O +ATOM 20086 H1 TIP3X5866 21.978 -11.119 10.107 1.00 0.00 W1 H +ATOM 20087 H2 TIP3X5866 22.132 -9.775 9.428 1.00 0.00 W1 H +ATOM 20088 OH2 TIP3X5867 28.951 -9.369 6.592 1.00 0.00 W1 O +ATOM 20089 H1 TIP3X5867 28.992 -10.268 6.916 1.00 0.00 W1 H +ATOM 20090 H2 TIP3X5867 28.833 -8.836 7.379 1.00 0.00 W1 H +ATOM 20091 OH2 TIP3X5868 27.636 -12.725 4.461 1.00 0.00 W1 O +ATOM 20092 H1 TIP3X5868 28.461 -12.541 4.910 1.00 0.00 W1 H +ATOM 20093 H2 TIP3X5868 27.712 -12.270 3.622 1.00 0.00 W1 H +ATOM 20094 OH2 TIP3X5869 23.818 -6.754 10.532 1.00 0.00 W1 O +ATOM 20095 H1 TIP3X5869 24.695 -6.732 10.149 1.00 0.00 W1 H +ATOM 20096 H2 TIP3X5869 23.553 -5.835 10.578 1.00 0.00 W1 H +ATOM 20097 OH2 TIP3X5870 22.969 -4.206 10.342 1.00 0.00 W1 O +ATOM 20098 H1 TIP3X5870 22.944 -3.979 9.413 1.00 0.00 W1 H +ATOM 20099 H2 TIP3X5870 22.049 -4.260 10.601 1.00 0.00 W1 H +ATOM 20100 OH2 TIP3X5871 17.832 -12.324 7.180 1.00 0.00 W1 O +ATOM 20101 H1 TIP3X5871 17.506 -11.445 7.371 1.00 0.00 W1 H +ATOM 20102 H2 TIP3X5871 17.708 -12.427 6.237 1.00 0.00 W1 H +ATOM 20103 OH2 TIP3X5872 19.988 -8.767 7.193 1.00 0.00 W1 O +ATOM 20104 H1 TIP3X5872 19.305 -9.217 6.696 1.00 0.00 W1 H +ATOM 20105 H2 TIP3X5872 20.473 -9.470 7.624 1.00 0.00 W1 H +ATOM 20106 OH2 TIP3X5873 26.043 -3.842 9.589 1.00 0.00 W1 O +ATOM 20107 H1 TIP3X5873 25.801 -4.428 8.872 1.00 0.00 W1 H +ATOM 20108 H2 TIP3X5873 26.993 -3.931 9.662 1.00 0.00 W1 H +ATOM 20109 OH2 TIP3X5874 30.341 -0.208 6.370 1.00 0.00 W1 O +ATOM 20110 H1 TIP3X5874 30.336 -0.676 7.205 1.00 0.00 W1 H +ATOM 20111 H2 TIP3X5874 29.461 -0.337 6.017 1.00 0.00 W1 H +ATOM 20112 OH2 TIP3X5875 22.213 -3.871 7.392 1.00 0.00 W1 O +ATOM 20113 H1 TIP3X5875 21.642 -4.591 7.661 1.00 0.00 W1 H +ATOM 20114 H2 TIP3X5875 21.753 -3.081 7.674 1.00 0.00 W1 H +ATOM 20115 OH2 TIP3X5876 24.435 -13.420 11.962 1.00 0.00 W1 O +ATOM 20116 H1 TIP3X5876 23.692 -12.940 12.329 1.00 0.00 W1 H +ATOM 20117 H2 TIP3X5876 24.054 -14.232 11.628 1.00 0.00 W1 H +ATOM 20118 OH2 TIP3X5877 19.787 -12.715 1.764 1.00 0.00 W1 O +ATOM 20119 H1 TIP3X5877 19.689 -13.377 2.448 1.00 0.00 W1 H +ATOM 20120 H2 TIP3X5877 19.603 -13.183 0.949 1.00 0.00 W1 H +ATOM 20121 OH2 TIP3X5878 30.680 -11.793 9.953 1.00 0.00 W1 O +ATOM 20122 H1 TIP3X5878 31.199 -11.124 9.506 1.00 0.00 W1 H +ATOM 20123 H2 TIP3X5878 31.122 -11.917 10.793 1.00 0.00 W1 H +ATOM 20124 OH2 TIP3X5879 16.738 -15.440 4.113 1.00 0.00 W1 O +ATOM 20125 H1 TIP3X5879 17.463 -14.819 4.182 1.00 0.00 W1 H +ATOM 20126 H2 TIP3X5879 16.366 -15.473 4.995 1.00 0.00 W1 H +ATOM 20127 OH2 TIP3X5880 22.004 -9.205 14.100 1.00 0.00 W1 O +ATOM 20128 H1 TIP3X5880 22.868 -8.806 13.998 1.00 0.00 W1 H +ATOM 20129 H2 TIP3X5880 22.156 -10.142 13.977 1.00 0.00 W1 H +ATOM 20130 OH2 TIP3X5881 25.170 -4.295 6.839 1.00 0.00 W1 O +ATOM 20131 H1 TIP3X5881 25.264 -5.157 6.436 1.00 0.00 W1 H +ATOM 20132 H2 TIP3X5881 24.237 -4.095 6.763 1.00 0.00 W1 H +ATOM 20133 OH2 TIP3X5882 23.782 -6.011 4.370 1.00 0.00 W1 O +ATOM 20134 H1 TIP3X5882 23.218 -6.625 4.840 1.00 0.00 W1 H +ATOM 20135 H2 TIP3X5882 23.308 -5.180 4.398 1.00 0.00 W1 H +ATOM 20136 OH2 TIP3X5883 16.320 -5.497 10.827 1.00 0.00 W1 O +ATOM 20137 H1 TIP3X5883 15.785 -6.099 10.309 1.00 0.00 W1 H +ATOM 20138 H2 TIP3X5883 15.849 -5.411 11.656 1.00 0.00 W1 H +ATOM 20139 OH2 TIP3X5884 27.616 -6.477 5.195 1.00 0.00 W1 O +ATOM 20140 H1 TIP3X5884 27.560 -7.391 4.918 1.00 0.00 W1 H +ATOM 20141 H2 TIP3X5884 27.444 -5.974 4.399 1.00 0.00 W1 H +ATOM 20142 OH2 TIP3X5885 27.913 -5.963 12.219 1.00 0.00 W1 O +ATOM 20143 H1 TIP3X5885 27.011 -5.879 12.527 1.00 0.00 W1 H +ATOM 20144 H2 TIP3X5885 28.082 -6.905 12.223 1.00 0.00 W1 H +ATOM 20145 OH2 TIP3X5886 30.280 -8.003 10.025 1.00 0.00 W1 O +ATOM 20146 H1 TIP3X5886 30.942 -8.684 9.906 1.00 0.00 W1 H +ATOM 20147 H2 TIP3X5886 29.564 -8.443 10.484 1.00 0.00 W1 H +ATOM 20148 OH2 TIP3X5887 19.424 -8.316 15.169 1.00 0.00 W1 O +ATOM 20149 H1 TIP3X5887 18.895 -8.550 14.407 1.00 0.00 W1 H +ATOM 20150 H2 TIP3X5887 20.320 -8.268 14.835 1.00 0.00 W1 H +ATOM 20151 OH2 TIP3X5888 20.335 -5.110 10.731 1.00 0.00 W1 O +ATOM 20152 H1 TIP3X5888 20.290 -5.665 11.509 1.00 0.00 W1 H +ATOM 20153 H2 TIP3X5888 19.702 -4.412 10.897 1.00 0.00 W1 H +ATOM 20154 OH2 TIP3X5889 29.006 -3.980 10.480 1.00 0.00 W1 O +ATOM 20155 H1 TIP3X5889 29.430 -3.212 10.864 1.00 0.00 W1 H +ATOM 20156 H2 TIP3X5889 28.702 -4.488 11.233 1.00 0.00 W1 H +ATOM 20157 OH2 TIP3X5890 27.094 -2.005 12.305 1.00 0.00 W1 O +ATOM 20158 H1 TIP3X5890 26.387 -2.634 12.163 1.00 0.00 W1 H +ATOM 20159 H2 TIP3X5890 27.423 -1.810 11.428 1.00 0.00 W1 H +ATOM 20160 OH2 TIP3X5891 27.345 -3.469 14.702 1.00 0.00 W1 O +ATOM 20161 H1 TIP3X5891 26.711 -4.075 14.318 1.00 0.00 W1 H +ATOM 20162 H2 TIP3X5891 27.458 -2.788 14.038 1.00 0.00 W1 H +ATOM 20163 OH2 TIP3X5892 30.955 -1.560 8.768 1.00 0.00 W1 O +ATOM 20164 H1 TIP3X5892 31.633 -1.719 9.425 1.00 0.00 W1 H +ATOM 20165 H2 TIP3X5892 30.721 -2.432 8.449 1.00 0.00 W1 H +ATOM 20166 OH2 TIP3X5893 21.511 -15.089 7.161 1.00 0.00 W1 O +ATOM 20167 H1 TIP3X5893 21.220 -14.180 7.100 1.00 0.00 W1 H +ATOM 20168 H2 TIP3X5893 22.343 -15.107 6.688 1.00 0.00 W1 H +ATOM 20169 OH2 TIP3X5894 23.635 -5.143 0.815 1.00 0.00 W1 O +ATOM 20170 H1 TIP3X5894 22.940 -5.765 1.030 1.00 0.00 W1 H +ATOM 20171 H2 TIP3X5894 23.618 -4.507 1.530 1.00 0.00 W1 H +ATOM 20172 OH2 TIP3X5895 31.016 -6.379 0.252 1.00 0.00 W1 O +ATOM 20173 H1 TIP3X5895 30.753 -7.129 -0.282 1.00 0.00 W1 H +ATOM 20174 H2 TIP3X5895 30.761 -5.615 -0.266 1.00 0.00 W1 H +ATOM 20175 OH2 TIP3X5896 29.057 -0.554 1.227 1.00 0.00 W1 O +ATOM 20176 H1 TIP3X5896 29.942 -0.882 1.069 1.00 0.00 W1 H +ATOM 20177 H2 TIP3X5896 28.827 -0.086 0.425 1.00 0.00 W1 H +ATOM 20178 OH2 TIP3X5897 30.449 -4.892 13.305 1.00 0.00 W1 O +ATOM 20179 H1 TIP3X5897 30.340 -3.943 13.364 1.00 0.00 W1 H +ATOM 20180 H2 TIP3X5897 29.557 -5.237 13.294 1.00 0.00 W1 H +ATOM 20181 OH2 TIP3X5898 29.716 -3.573 0.568 1.00 0.00 W1 O +ATOM 20182 H1 TIP3X5898 29.747 -3.653 1.521 1.00 0.00 W1 H +ATOM 20183 H2 TIP3X5898 28.883 -3.136 0.391 1.00 0.00 W1 H +ATOM 20184 OH2 TIP3X5899 26.086 -15.278 13.452 1.00 0.00 W1 O +ATOM 20185 H1 TIP3X5899 25.780 -14.530 12.939 1.00 0.00 W1 H +ATOM 20186 H2 TIP3X5899 26.140 -15.995 12.820 1.00 0.00 W1 H +ATOM 20187 OH2 TIP3X5900 20.300 -1.362 11.481 1.00 0.00 W1 O +ATOM 20188 H1 TIP3X5900 21.148 -1.124 11.854 1.00 0.00 W1 H +ATOM 20189 H2 TIP3X5900 20.512 -1.742 10.628 1.00 0.00 W1 H +ATOM 20190 OH2 TIP3X5901 18.766 -13.343 14.831 1.00 0.00 W1 O +ATOM 20191 H1 TIP3X5901 17.889 -13.254 15.205 1.00 0.00 W1 H +ATOM 20192 H2 TIP3X5901 18.829 -12.631 14.195 1.00 0.00 W1 H +ATOM 20193 OH2 TIP3X5902 24.964 -11.396 0.562 1.00 0.00 W1 O +ATOM 20194 H1 TIP3X5902 24.798 -11.099 -0.333 1.00 0.00 W1 H +ATOM 20195 H2 TIP3X5902 24.093 -11.520 0.939 1.00 0.00 W1 H +ATOM 20196 OH2 TIP3X5903 30.361 -3.636 3.610 1.00 0.00 W1 O +ATOM 20197 H1 TIP3X5903 30.934 -4.373 3.823 1.00 0.00 W1 H +ATOM 20198 H2 TIP3X5903 30.030 -3.337 4.457 1.00 0.00 W1 H +ATOM 20199 OH2 TIP3X5904 25.622 -14.600 0.539 1.00 0.00 W1 O +ATOM 20200 H1 TIP3X5904 26.354 -13.984 0.563 1.00 0.00 W1 H +ATOM 20201 H2 TIP3X5904 25.863 -15.232 -0.138 1.00 0.00 W1 H +ATOM 20202 OH2 TIP3X5905 30.154 -14.506 10.804 1.00 0.00 W1 O +ATOM 20203 H1 TIP3X5905 30.646 -15.136 11.331 1.00 0.00 W1 H +ATOM 20204 H2 TIP3X5905 30.755 -14.264 10.098 1.00 0.00 W1 H +ATOM 20205 OH2 TIP3X5906 22.658 -3.867 13.992 1.00 0.00 W1 O +ATOM 20206 H1 TIP3X5906 22.882 -4.245 14.843 1.00 0.00 W1 H +ATOM 20207 H2 TIP3X5906 22.052 -4.496 13.602 1.00 0.00 W1 H +ATOM 20208 OH2 TIP3X5907 26.138 -12.562 9.405 1.00 0.00 W1 O +ATOM 20209 H1 TIP3X5907 26.197 -12.744 10.343 1.00 0.00 W1 H +ATOM 20210 H2 TIP3X5907 25.199 -12.475 9.236 1.00 0.00 W1 H +ATOM 20211 OH2 TIP3X5908 22.329 -11.905 13.584 1.00 0.00 W1 O +ATOM 20212 H1 TIP3X5908 21.462 -11.975 13.184 1.00 0.00 W1 H +ATOM 20213 H2 TIP3X5908 22.274 -12.446 14.372 1.00 0.00 W1 H +ATOM 20214 OH2 TIP3X5909 29.815 -9.185 15.337 1.00 0.00 W1 O +ATOM 20215 H1 TIP3X5909 30.610 -9.718 15.320 1.00 0.00 W1 H +ATOM 20216 H2 TIP3X5909 29.521 -9.220 16.247 1.00 0.00 W1 H +ATOM 20217 OH2 TIP3X5910 18.000 -15.318 11.255 1.00 0.00 W1 O +ATOM 20218 H1 TIP3X5910 17.775 -14.865 10.443 1.00 0.00 W1 H +ATOM 20219 H2 TIP3X5910 18.830 -15.755 11.064 1.00 0.00 W1 H +ATOM 20220 OH2 TIP3X5911 24.095 -14.860 6.337 1.00 0.00 W1 O +ATOM 20221 H1 TIP3X5911 24.577 -14.346 5.689 1.00 0.00 W1 H +ATOM 20222 H2 TIP3X5911 24.439 -14.567 7.181 1.00 0.00 W1 H +ATOM 20223 OH2 TIP3X5912 19.090 -9.612 10.801 1.00 0.00 W1 O +ATOM 20224 H1 TIP3X5912 19.005 -8.821 11.333 1.00 0.00 W1 H +ATOM 20225 H2 TIP3X5912 20.005 -9.616 10.520 1.00 0.00 W1 H +ATOM 20226 OH2 TIP3X5913 27.293 -12.324 1.746 1.00 0.00 W1 O +ATOM 20227 H1 TIP3X5913 26.585 -11.836 1.326 1.00 0.00 W1 H +ATOM 20228 H2 TIP3X5913 28.018 -12.280 1.123 1.00 0.00 W1 H +ATOM 20229 OH2 TIP3X5914 16.987 -14.600 8.817 1.00 0.00 W1 O +ATOM 20230 H1 TIP3X5914 17.094 -15.302 8.174 1.00 0.00 W1 H +ATOM 20231 H2 TIP3X5914 17.122 -13.795 8.318 1.00 0.00 W1 H +ATOM 20232 OH2 TIP3X5915 28.508 -10.972 13.704 1.00 0.00 W1 O +ATOM 20233 H1 TIP3X5915 28.820 -10.394 14.400 1.00 0.00 W1 H +ATOM 20234 H2 TIP3X5915 27.564 -11.036 13.849 1.00 0.00 W1 H +ATOM 20235 OH2 TIP3X5916 25.551 -10.966 13.651 1.00 0.00 W1 O +ATOM 20236 H1 TIP3X5916 25.192 -10.398 12.970 1.00 0.00 W1 H +ATOM 20237 H2 TIP3X5916 25.214 -11.837 13.440 1.00 0.00 W1 H +ATOM 20238 OH2 TIP3X5917 23.754 -10.497 3.517 1.00 0.00 W1 O +ATOM 20239 H1 TIP3X5917 23.843 -9.918 2.760 1.00 0.00 W1 H +ATOM 20240 H2 TIP3X5917 22.985 -11.032 3.320 1.00 0.00 W1 H +ATOM 20241 OH2 TIP3X5918 22.057 -11.166 1.204 1.00 0.00 W1 O +ATOM 20242 H1 TIP3X5918 21.620 -10.973 0.375 1.00 0.00 W1 H +ATOM 20243 H2 TIP3X5918 21.650 -11.977 1.508 1.00 0.00 W1 H +ATOM 20244 OH2 TIP3X5919 22.768 -14.104 14.993 1.00 0.00 W1 O +ATOM 20245 H1 TIP3X5919 22.301 -14.491 15.734 1.00 0.00 W1 H +ATOM 20246 H2 TIP3X5919 23.682 -14.071 15.276 1.00 0.00 W1 H +ATOM 20247 OH2 TIP3X5920 28.331 -8.759 11.675 1.00 0.00 W1 O +ATOM 20248 H1 TIP3X5920 28.350 -9.409 12.378 1.00 0.00 W1 H +ATOM 20249 H2 TIP3X5920 27.496 -8.911 11.231 1.00 0.00 W1 H +ATOM 20250 OH2 TIP3X5921 25.072 -12.005 5.624 1.00 0.00 W1 O +ATOM 20251 H1 TIP3X5921 24.735 -11.655 4.800 1.00 0.00 W1 H +ATOM 20252 H2 TIP3X5921 25.969 -12.273 5.423 1.00 0.00 W1 H +ATOM 20253 OH2 TIP3X5922 20.528 -12.695 7.368 1.00 0.00 W1 O +ATOM 20254 H1 TIP3X5922 19.585 -12.742 7.209 1.00 0.00 W1 H +ATOM 20255 H2 TIP3X5922 20.667 -11.820 7.732 1.00 0.00 W1 H +ATOM 20256 OH2 TIP3X5923 15.890 -11.569 4.162 1.00 0.00 W1 O +ATOM 20257 H1 TIP3X5923 15.616 -11.693 5.070 1.00 0.00 W1 H +ATOM 20258 H2 TIP3X5923 15.695 -10.650 3.976 1.00 0.00 W1 H +ATOM 20259 OH2 TIP3X5924 19.890 -12.242 12.222 1.00 0.00 W1 O +ATOM 20260 H1 TIP3X5924 19.912 -13.048 11.706 1.00 0.00 W1 H +ATOM 20261 H2 TIP3X5924 19.496 -11.594 11.638 1.00 0.00 W1 H +ATOM 20262 OH2 TIP3X5925 20.473 -5.706 8.027 1.00 0.00 W1 O +ATOM 20263 H1 TIP3X5925 20.402 -6.642 7.839 1.00 0.00 W1 H +ATOM 20264 H2 TIP3X5925 20.478 -5.653 8.983 1.00 0.00 W1 H +ATOM 20265 OH2 TIP3X5926 24.662 -8.687 12.589 1.00 0.00 W1 O +ATOM 20266 H1 TIP3X5926 25.074 -7.856 12.826 1.00 0.00 W1 H +ATOM 20267 H2 TIP3X5926 24.113 -8.477 11.835 1.00 0.00 W1 H +ATOM 20268 OH2 TIP3X5927 30.458 -13.321 1.914 1.00 0.00 W1 O +ATOM 20269 H1 TIP3X5927 30.892 -13.094 2.736 1.00 0.00 W1 H +ATOM 20270 H2 TIP3X5927 29.938 -14.096 2.123 1.00 0.00 W1 H +ATOM 20271 OH2 TIP3X5928 21.612 -7.361 1.092 1.00 0.00 W1 O +ATOM 20272 H1 TIP3X5928 21.323 -7.483 1.996 1.00 0.00 W1 H +ATOM 20273 H2 TIP3X5928 22.301 -8.014 0.970 1.00 0.00 W1 H +ATOM 20274 OH2 TIP3X5929 28.316 -8.845 2.160 1.00 0.00 W1 O +ATOM 20275 H1 TIP3X5929 27.451 -9.044 2.519 1.00 0.00 W1 H +ATOM 20276 H2 TIP3X5929 28.873 -8.724 2.929 1.00 0.00 W1 H +ATOM 20277 OH2 TIP3X5930 23.149 -8.591 8.630 1.00 0.00 W1 O +ATOM 20278 H1 TIP3X5930 23.246 -7.794 9.152 1.00 0.00 W1 H +ATOM 20279 H2 TIP3X5930 24.023 -8.980 8.622 1.00 0.00 W1 H +ATOM 20280 OH2 TIP3X5931 22.894 -8.209 5.546 1.00 0.00 W1 O +ATOM 20281 H1 TIP3X5931 23.515 -8.805 5.128 1.00 0.00 W1 H +ATOM 20282 H2 TIP3X5931 22.919 -8.446 6.473 1.00 0.00 W1 H +ATOM 20283 OH2 TIP3X5932 25.789 -6.593 14.482 1.00 0.00 W1 O +ATOM 20284 H1 TIP3X5932 25.111 -6.309 15.095 1.00 0.00 W1 H +ATOM 20285 H2 TIP3X5932 26.587 -6.634 15.009 1.00 0.00 W1 H +ATOM 20286 OH2 TIP3X5933 18.298 -7.178 12.178 1.00 0.00 W1 O +ATOM 20287 H1 TIP3X5933 18.815 -6.772 12.874 1.00 0.00 W1 H +ATOM 20288 H2 TIP3X5933 17.916 -6.441 11.703 1.00 0.00 W1 H +ATOM 20289 OH2 TIP3X5934 17.205 -9.216 13.800 1.00 0.00 W1 O +ATOM 20290 H1 TIP3X5934 17.001 -10.055 13.387 1.00 0.00 W1 H +ATOM 20291 H2 TIP3X5934 17.081 -8.570 13.104 1.00 0.00 W1 H +ATOM 20292 OH2 TIP3X5935 27.856 -6.078 0.810 1.00 0.00 W1 O +ATOM 20293 H1 TIP3X5935 28.562 -5.579 0.398 1.00 0.00 W1 H +ATOM 20294 H2 TIP3X5935 28.305 -6.708 1.373 1.00 0.00 W1 H +ATOM 20295 OH2 TIP3X5936 30.453 -8.731 4.172 1.00 0.00 W1 O +ATOM 20296 H1 TIP3X5936 30.165 -8.558 5.069 1.00 0.00 W1 H +ATOM 20297 H2 TIP3X5936 30.965 -7.959 3.932 1.00 0.00 W1 H +ATOM 20298 OH2 TIP3X5937 19.930 -5.034 13.731 1.00 0.00 W1 O +ATOM 20299 H1 TIP3X5937 19.357 -4.432 13.257 1.00 0.00 W1 H +ATOM 20300 H2 TIP3X5937 19.456 -5.230 14.539 1.00 0.00 W1 H +ATOM 20301 OH2 TIP3X5938 23.006 -0.291 11.422 1.00 0.00 W1 O +ATOM 20302 H1 TIP3X5938 23.324 -0.585 12.275 1.00 0.00 W1 H +ATOM 20303 H2 TIP3X5938 23.439 -0.869 10.793 1.00 0.00 W1 H +ATOM 20304 OH2 TIP3X5939 27.712 -0.050 5.555 1.00 0.00 W1 O +ATOM 20305 H1 TIP3X5939 27.300 -0.741 5.037 1.00 0.00 W1 H +ATOM 20306 H2 TIP3X5939 27.516 0.757 5.079 1.00 0.00 W1 H +ATOM 20307 OH2 TIP3X5940 24.290 -3.367 2.807 1.00 0.00 W1 O +ATOM 20308 H1 TIP3X5940 24.549 -2.582 2.325 1.00 0.00 W1 H +ATOM 20309 H2 TIP3X5940 23.721 -3.044 3.505 1.00 0.00 W1 H +ATOM 20310 OH2 TIP3X5941 24.307 -8.213 1.878 1.00 0.00 W1 O +ATOM 20311 H1 TIP3X5941 25.130 -8.140 1.396 1.00 0.00 W1 H +ATOM 20312 H2 TIP3X5941 24.315 -7.468 2.480 1.00 0.00 W1 H +ATOM 20313 OH2 TIP3X5942 27.709 -13.489 11.670 1.00 0.00 W1 O +ATOM 20314 H1 TIP3X5942 28.514 -13.720 11.206 1.00 0.00 W1 H +ATOM 20315 H2 TIP3X5942 27.999 -12.936 12.395 1.00 0.00 W1 H +ATOM 20316 OH2 TIP3X5943 26.436 -6.800 9.672 1.00 0.00 W1 O +ATOM 20317 H1 TIP3X5943 26.981 -6.138 10.098 1.00 0.00 W1 H +ATOM 20318 H2 TIP3X5943 26.895 -7.000 8.856 1.00 0.00 W1 H +ATOM 20319 OH2 TIP3X5944 25.258 -1.826 0.749 1.00 0.00 W1 O +ATOM 20320 H1 TIP3X5944 26.083 -1.791 1.234 1.00 0.00 W1 H +ATOM 20321 H2 TIP3X5944 25.461 -2.339 -0.033 1.00 0.00 W1 H +ATOM 20322 OH2 TIP3X5945 25.250 -4.039 12.400 1.00 0.00 W1 O +ATOM 20323 H1 TIP3X5945 24.429 -3.792 12.826 1.00 0.00 W1 H +ATOM 20324 H2 TIP3X5945 25.021 -4.134 11.476 1.00 0.00 W1 H +ATOM 20325 OH2 TIP3X5946 21.875 -3.814 4.287 1.00 0.00 W1 O +ATOM 20326 H1 TIP3X5946 21.168 -3.667 3.659 1.00 0.00 W1 H +ATOM 20327 H2 TIP3X5946 21.538 -3.469 5.114 1.00 0.00 W1 H +ATOM 20328 OH2 TIP3X5947 18.440 -2.902 12.998 1.00 0.00 W1 O +ATOM 20329 H1 TIP3X5947 19.174 -2.291 12.933 1.00 0.00 W1 H +ATOM 20330 H2 TIP3X5947 18.128 -2.808 13.898 1.00 0.00 W1 H +ATOM 20331 OH2 TIP3X5948 18.030 -1.197 7.100 1.00 0.00 W1 O +ATOM 20332 H1 TIP3X5948 17.444 -1.938 6.946 1.00 0.00 W1 H +ATOM 20333 H2 TIP3X5948 18.473 -1.064 6.261 1.00 0.00 W1 H +ATOM 20334 OH2 TIP3X5949 26.384 -15.184 8.180 1.00 0.00 W1 O +ATOM 20335 H1 TIP3X5949 26.716 -15.259 7.286 1.00 0.00 W1 H +ATOM 20336 H2 TIP3X5949 26.339 -14.241 8.341 1.00 0.00 W1 H +ATOM 20337 OH2 TIP3X5950 23.622 -13.055 8.415 1.00 0.00 W1 O +ATOM 20338 H1 TIP3X5950 23.260 -12.566 7.676 1.00 0.00 W1 H +ATOM 20339 H2 TIP3X5950 22.890 -13.144 9.025 1.00 0.00 W1 H +ATOM 20340 OH2 TIP3X5951 22.341 -15.070 2.343 1.00 0.00 W1 O +ATOM 20341 H1 TIP3X5951 23.196 -15.326 2.688 1.00 0.00 W1 H +ATOM 20342 H2 TIP3X5951 21.822 -15.874 2.368 1.00 0.00 W1 H +ATOM 20343 OH2 TIP3X5952 25.092 -15.227 3.386 1.00 0.00 W1 O +ATOM 20344 H1 TIP3X5952 25.548 -15.963 3.795 1.00 0.00 W1 H +ATOM 20345 H2 TIP3X5952 25.500 -15.140 2.524 1.00 0.00 W1 H +ATOM 20346 OH2 TIP3X5953 19.732 -0.648 14.841 1.00 0.00 W1 O +ATOM 20347 H1 TIP3X5953 19.481 0.109 14.311 1.00 0.00 W1 H +ATOM 20348 H2 TIP3X5953 20.643 -0.817 14.602 1.00 0.00 W1 H +ATOM 20349 OH2 TIP3X5954 24.738 -1.954 5.141 1.00 0.00 W1 O +ATOM 20350 H1 TIP3X5954 25.399 -2.596 5.401 1.00 0.00 W1 H +ATOM 20351 H2 TIP3X5954 24.725 -1.319 5.858 1.00 0.00 W1 H +ATOM 20352 OH2 TIP3X5955 22.478 -1.051 14.051 1.00 0.00 W1 O +ATOM 20353 H1 TIP3X5955 22.695 -1.943 14.321 1.00 0.00 W1 H +ATOM 20354 H2 TIP3X5955 23.085 -0.497 14.540 1.00 0.00 W1 H +ATOM 20355 OH2 TIP3X5956 21.424 -12.933 4.095 1.00 0.00 W1 O +ATOM 20356 H1 TIP3X5956 22.081 -13.592 3.873 1.00 0.00 W1 H +ATOM 20357 H2 TIP3X5956 21.467 -12.864 5.049 1.00 0.00 W1 H +ATOM 20358 OH2 TIP3X5957 27.257 -1.867 3.153 1.00 0.00 W1 O +ATOM 20359 H1 TIP3X5957 27.402 -2.808 3.256 1.00 0.00 W1 H +ATOM 20360 H2 TIP3X5957 28.080 -1.535 2.795 1.00 0.00 W1 H +ATOM 20361 OH2 TIP3X5958 28.925 -15.101 14.380 1.00 0.00 W1 O +ATOM 20362 H1 TIP3X5958 28.311 -15.027 13.649 1.00 0.00 W1 H +ATOM 20363 H2 TIP3X5958 29.694 -14.606 14.098 1.00 0.00 W1 H +ATOM 20364 OH2 TIP3X5959 30.627 -1.950 12.816 1.00 0.00 W1 O +ATOM 20365 H1 TIP3X5959 29.905 -1.399 13.117 1.00 0.00 W1 H +ATOM 20366 H2 TIP3X5959 31.415 -1.450 13.030 1.00 0.00 W1 H +ATOM 20367 OH2 TIP3X5960 18.253 -12.628 4.496 1.00 0.00 W1 O +ATOM 20368 H1 TIP3X5960 17.610 -12.239 3.903 1.00 0.00 W1 H +ATOM 20369 H2 TIP3X5960 19.056 -12.131 4.338 1.00 0.00 W1 H +ATOM 20370 OH2 TIP3X5961 19.682 -4.029 2.227 1.00 0.00 W1 O +ATOM 20371 H1 TIP3X5961 19.643 -4.657 1.506 1.00 0.00 W1 H +ATOM 20372 H2 TIP3X5961 18.962 -4.282 2.805 1.00 0.00 W1 H +ATOM 20373 OH2 TIP3X5962 17.576 -4.501 19.866 1.00 0.00 W1 O +ATOM 20374 H1 TIP3X5962 17.759 -4.577 20.803 1.00 0.00 W1 H +ATOM 20375 H2 TIP3X5962 17.552 -3.558 19.702 1.00 0.00 W1 H +ATOM 20376 OH2 TIP3X5963 28.679 -7.010 23.605 1.00 0.00 W1 O +ATOM 20377 H1 TIP3X5963 28.914 -6.745 22.715 1.00 0.00 W1 H +ATOM 20378 H2 TIP3X5963 29.508 -7.273 24.003 1.00 0.00 W1 H +ATOM 20379 OH2 TIP3X5964 20.663 -7.286 19.583 1.00 0.00 W1 O +ATOM 20380 H1 TIP3X5964 20.693 -6.377 19.880 1.00 0.00 W1 H +ATOM 20381 H2 TIP3X5964 21.170 -7.769 20.235 1.00 0.00 W1 H +ATOM 20382 OH2 TIP3X5965 28.466 -3.127 21.727 1.00 0.00 W1 O +ATOM 20383 H1 TIP3X5965 28.191 -2.637 22.502 1.00 0.00 W1 H +ATOM 20384 H2 TIP3X5965 27.941 -3.927 21.750 1.00 0.00 W1 H +ATOM 20385 OH2 TIP3X5966 26.983 -4.684 18.770 1.00 0.00 W1 O +ATOM 20386 H1 TIP3X5966 27.145 -4.912 17.855 1.00 0.00 W1 H +ATOM 20387 H2 TIP3X5966 26.054 -4.455 18.799 1.00 0.00 W1 H +ATOM 20388 OH2 TIP3X5967 30.830 -4.152 23.554 1.00 0.00 W1 O +ATOM 20389 H1 TIP3X5967 30.278 -4.069 22.777 1.00 0.00 W1 H +ATOM 20390 H2 TIP3X5967 30.220 -4.368 24.259 1.00 0.00 W1 H +ATOM 20391 OH2 TIP3X5968 17.467 -2.887 26.005 1.00 0.00 W1 O +ATOM 20392 H1 TIP3X5968 17.873 -2.684 26.848 1.00 0.00 W1 H +ATOM 20393 H2 TIP3X5968 16.895 -3.633 26.188 1.00 0.00 W1 H +ATOM 20394 OH2 TIP3X5969 24.842 -1.263 25.231 1.00 0.00 W1 O +ATOM 20395 H1 TIP3X5969 25.143 -2.163 25.353 1.00 0.00 W1 H +ATOM 20396 H2 TIP3X5969 25.467 -0.882 24.614 1.00 0.00 W1 H +ATOM 20397 OH2 TIP3X5970 28.274 -1.306 25.111 1.00 0.00 W1 O +ATOM 20398 H1 TIP3X5970 27.839 -0.483 24.892 1.00 0.00 W1 H +ATOM 20399 H2 TIP3X5970 29.203 -1.080 25.161 1.00 0.00 W1 H +ATOM 20400 OH2 TIP3X5971 20.722 -1.731 24.241 1.00 0.00 W1 O +ATOM 20401 H1 TIP3X5971 21.078 -0.882 23.977 1.00 0.00 W1 H +ATOM 20402 H2 TIP3X5971 19.787 -1.672 24.045 1.00 0.00 W1 H +ATOM 20403 OH2 TIP3X5972 25.564 -9.839 23.142 1.00 0.00 W1 O +ATOM 20404 H1 TIP3X5972 25.486 -10.648 22.638 1.00 0.00 W1 H +ATOM 20405 H2 TIP3X5972 26.506 -9.700 23.230 1.00 0.00 W1 H +ATOM 20406 OH2 TIP3X5973 21.587 -13.741 25.504 1.00 0.00 W1 O +ATOM 20407 H1 TIP3X5973 21.844 -14.479 26.057 1.00 0.00 W1 H +ATOM 20408 H2 TIP3X5973 20.910 -14.098 24.929 1.00 0.00 W1 H +ATOM 20409 OH2 TIP3X5974 29.830 -12.737 21.927 1.00 0.00 W1 O +ATOM 20410 H1 TIP3X5974 29.523 -12.399 22.768 1.00 0.00 W1 H +ATOM 20411 H2 TIP3X5974 29.898 -13.682 22.059 1.00 0.00 W1 H +ATOM 20412 OH2 TIP3X5975 28.428 -11.542 23.881 1.00 0.00 W1 O +ATOM 20413 H1 TIP3X5975 29.003 -11.770 24.612 1.00 0.00 W1 H +ATOM 20414 H2 TIP3X5975 27.553 -11.796 24.176 1.00 0.00 W1 H +ATOM 20415 OH2 TIP3X5976 21.474 -10.417 25.252 1.00 0.00 W1 O +ATOM 20416 H1 TIP3X5976 21.978 -11.119 25.664 1.00 0.00 W1 H +ATOM 20417 H2 TIP3X5976 22.132 -9.775 24.986 1.00 0.00 W1 H +ATOM 20418 OH2 TIP3X5977 28.951 -9.369 22.150 1.00 0.00 W1 O +ATOM 20419 H1 TIP3X5977 28.992 -10.268 22.474 1.00 0.00 W1 H +ATOM 20420 H2 TIP3X5977 28.833 -8.836 22.936 1.00 0.00 W1 H +ATOM 20421 OH2 TIP3X5978 27.636 -12.725 20.018 1.00 0.00 W1 O +ATOM 20422 H1 TIP3X5978 28.461 -12.541 20.467 1.00 0.00 W1 H +ATOM 20423 H2 TIP3X5978 27.712 -12.270 19.179 1.00 0.00 W1 H +ATOM 20424 OH2 TIP3X5979 23.818 -6.754 26.090 1.00 0.00 W1 O +ATOM 20425 H1 TIP3X5979 24.695 -6.732 25.707 1.00 0.00 W1 H +ATOM 20426 H2 TIP3X5979 23.553 -5.835 26.136 1.00 0.00 W1 H +ATOM 20427 OH2 TIP3X5980 22.969 -4.206 25.900 1.00 0.00 W1 O +ATOM 20428 H1 TIP3X5980 22.944 -3.979 24.970 1.00 0.00 W1 H +ATOM 20429 H2 TIP3X5980 22.049 -4.260 26.158 1.00 0.00 W1 H +ATOM 20430 OH2 TIP3X5981 17.832 -12.324 22.738 1.00 0.00 W1 O +ATOM 20431 H1 TIP3X5981 17.506 -11.445 22.929 1.00 0.00 W1 H +ATOM 20432 H2 TIP3X5981 17.708 -12.427 21.794 1.00 0.00 W1 H +ATOM 20433 OH2 TIP3X5982 19.988 -8.767 22.750 1.00 0.00 W1 O +ATOM 20434 H1 TIP3X5982 19.305 -9.217 22.253 1.00 0.00 W1 H +ATOM 20435 H2 TIP3X5982 20.473 -9.470 23.182 1.00 0.00 W1 H +ATOM 20436 OH2 TIP3X5983 26.043 -3.842 25.147 1.00 0.00 W1 O +ATOM 20437 H1 TIP3X5983 25.801 -4.428 24.430 1.00 0.00 W1 H +ATOM 20438 H2 TIP3X5983 26.993 -3.931 25.219 1.00 0.00 W1 H +ATOM 20439 OH2 TIP3X5984 30.341 -0.208 21.927 1.00 0.00 W1 O +ATOM 20440 H1 TIP3X5984 30.336 -0.676 22.762 1.00 0.00 W1 H +ATOM 20441 H2 TIP3X5984 29.461 -0.337 21.574 1.00 0.00 W1 H +ATOM 20442 OH2 TIP3X5985 22.213 -3.871 22.949 1.00 0.00 W1 O +ATOM 20443 H1 TIP3X5985 21.642 -4.591 23.218 1.00 0.00 W1 H +ATOM 20444 H2 TIP3X5985 21.753 -3.081 23.232 1.00 0.00 W1 H +ATOM 20445 OH2 TIP3X5986 24.435 -13.420 27.520 1.00 0.00 W1 O +ATOM 20446 H1 TIP3X5986 23.692 -12.940 27.887 1.00 0.00 W1 H +ATOM 20447 H2 TIP3X5986 24.054 -14.232 27.185 1.00 0.00 W1 H +ATOM 20448 OH2 TIP3X5987 19.787 -12.715 17.321 1.00 0.00 W1 O +ATOM 20449 H1 TIP3X5987 19.689 -13.377 18.006 1.00 0.00 W1 H +ATOM 20450 H2 TIP3X5987 19.603 -13.183 16.507 1.00 0.00 W1 H +ATOM 20451 OH2 TIP3X5988 30.680 -11.793 25.511 1.00 0.00 W1 O +ATOM 20452 H1 TIP3X5988 31.199 -11.124 25.063 1.00 0.00 W1 H +ATOM 20453 H2 TIP3X5988 31.122 -11.917 26.351 1.00 0.00 W1 H +ATOM 20454 OH2 TIP3X5989 16.738 -15.440 19.671 1.00 0.00 W1 O +ATOM 20455 H1 TIP3X5989 17.463 -14.819 19.740 1.00 0.00 W1 H +ATOM 20456 H2 TIP3X5989 16.366 -15.473 20.552 1.00 0.00 W1 H +ATOM 20457 OH2 TIP3X5990 22.004 -9.205 29.657 1.00 0.00 W1 O +ATOM 20458 H1 TIP3X5990 22.868 -8.806 29.556 1.00 0.00 W1 H +ATOM 20459 H2 TIP3X5990 22.156 -10.142 29.534 1.00 0.00 W1 H +ATOM 20460 OH2 TIP3X5991 25.170 -4.295 22.397 1.00 0.00 W1 O +ATOM 20461 H1 TIP3X5991 25.264 -5.157 21.993 1.00 0.00 W1 H +ATOM 20462 H2 TIP3X5991 24.237 -4.095 22.321 1.00 0.00 W1 H +ATOM 20463 OH2 TIP3X5992 23.782 -6.011 19.928 1.00 0.00 W1 O +ATOM 20464 H1 TIP3X5992 23.218 -6.625 20.397 1.00 0.00 W1 H +ATOM 20465 H2 TIP3X5992 23.308 -5.180 19.956 1.00 0.00 W1 H +ATOM 20466 OH2 TIP3X5993 16.320 -5.497 26.385 1.00 0.00 W1 O +ATOM 20467 H1 TIP3X5993 15.785 -6.099 25.867 1.00 0.00 W1 H +ATOM 20468 H2 TIP3X5993 15.849 -5.411 27.214 1.00 0.00 W1 H +ATOM 20469 OH2 TIP3X5994 27.616 -6.477 20.752 1.00 0.00 W1 O +ATOM 20470 H1 TIP3X5994 27.560 -7.391 20.476 1.00 0.00 W1 H +ATOM 20471 H2 TIP3X5994 27.444 -5.974 19.956 1.00 0.00 W1 H +ATOM 20472 OH2 TIP3X5995 27.913 -5.963 27.777 1.00 0.00 W1 O +ATOM 20473 H1 TIP3X5995 27.011 -5.879 28.084 1.00 0.00 W1 H +ATOM 20474 H2 TIP3X5995 28.082 -6.905 27.780 1.00 0.00 W1 H +ATOM 20475 OH2 TIP3X5996 30.280 -8.003 25.582 1.00 0.00 W1 O +ATOM 20476 H1 TIP3X5996 30.942 -8.684 25.463 1.00 0.00 W1 H +ATOM 20477 H2 TIP3X5996 29.564 -8.443 26.041 1.00 0.00 W1 H +ATOM 20478 OH2 TIP3X5997 19.424 -8.316 30.727 1.00 0.00 W1 O +ATOM 20479 H1 TIP3X5997 18.895 -8.550 29.964 1.00 0.00 W1 H +ATOM 20480 H2 TIP3X5997 20.320 -8.268 30.392 1.00 0.00 W1 H +ATOM 20481 OH2 TIP3X5998 20.335 -5.110 26.288 1.00 0.00 W1 O +ATOM 20482 H1 TIP3X5998 20.290 -5.665 27.067 1.00 0.00 W1 H +ATOM 20483 H2 TIP3X5998 19.702 -4.412 26.454 1.00 0.00 W1 H +ATOM 20484 OH2 TIP3X5999 29.006 -3.980 26.038 1.00 0.00 W1 O +ATOM 20485 H1 TIP3X5999 29.430 -3.212 26.422 1.00 0.00 W1 H +ATOM 20486 H2 TIP3X5999 28.702 -4.488 26.790 1.00 0.00 W1 H +ATOM 20487 OH2 TIP3X6000 27.094 -2.005 27.863 1.00 0.00 W1 O +ATOM 20488 H1 TIP3X6000 26.387 -2.634 27.720 1.00 0.00 W1 H +ATOM 20489 H2 TIP3X6000 27.423 -1.810 26.985 1.00 0.00 W1 H +ATOM 20490 OH2 TIP3X6001 27.345 -3.469 30.259 1.00 0.00 W1 O +ATOM 20491 H1 TIP3X6001 26.711 -4.075 29.875 1.00 0.00 W1 H +ATOM 20492 H2 TIP3X6001 27.458 -2.788 29.595 1.00 0.00 W1 H +ATOM 20493 OH2 TIP3X6002 30.955 -1.560 24.326 1.00 0.00 W1 O +ATOM 20494 H1 TIP3X6002 31.633 -1.719 24.982 1.00 0.00 W1 H +ATOM 20495 H2 TIP3X6002 30.721 -2.432 24.007 1.00 0.00 W1 H +ATOM 20496 OH2 TIP3X6003 21.511 -15.089 22.718 1.00 0.00 W1 O +ATOM 20497 H1 TIP3X6003 21.220 -14.180 22.657 1.00 0.00 W1 H +ATOM 20498 H2 TIP3X6003 22.343 -15.107 22.245 1.00 0.00 W1 H +ATOM 20499 OH2 TIP3X6004 23.635 -5.143 16.373 1.00 0.00 W1 O +ATOM 20500 H1 TIP3X6004 22.940 -5.765 16.587 1.00 0.00 W1 H +ATOM 20501 H2 TIP3X6004 23.618 -4.507 17.088 1.00 0.00 W1 H +ATOM 20502 OH2 TIP3X6005 31.016 -6.379 15.809 1.00 0.00 W1 O +ATOM 20503 H1 TIP3X6005 30.753 -7.129 15.275 1.00 0.00 W1 H +ATOM 20504 H2 TIP3X6005 30.761 -5.615 15.292 1.00 0.00 W1 H +ATOM 20505 OH2 TIP3X6006 16.964 -2.683 15.526 1.00 0.00 W1 O +ATOM 20506 H1 TIP3X6006 17.409 -3.232 16.172 1.00 0.00 W1 H +ATOM 20507 H2 TIP3X6006 16.067 -3.017 15.505 1.00 0.00 W1 H +ATOM 20508 OH2 TIP3X6007 29.057 -0.554 16.785 1.00 0.00 W1 O +ATOM 20509 H1 TIP3X6007 29.942 -0.882 16.626 1.00 0.00 W1 H +ATOM 20510 H2 TIP3X6007 28.827 -0.086 15.982 1.00 0.00 W1 H +ATOM 20511 OH2 TIP3X6008 30.449 -4.892 28.862 1.00 0.00 W1 O +ATOM 20512 H1 TIP3X6008 30.340 -3.943 28.921 1.00 0.00 W1 H +ATOM 20513 H2 TIP3X6008 29.557 -5.237 28.852 1.00 0.00 W1 H +ATOM 20514 OH2 TIP3X6009 17.136 -2.066 18.481 1.00 0.00 W1 O +ATOM 20515 H1 TIP3X6009 17.068 -1.230 18.941 1.00 0.00 W1 H +ATOM 20516 H2 TIP3X6009 16.240 -2.404 18.464 1.00 0.00 W1 H +ATOM 20517 OH2 TIP3X6010 29.716 -3.573 16.125 1.00 0.00 W1 O +ATOM 20518 H1 TIP3X6010 29.747 -3.653 17.079 1.00 0.00 W1 H +ATOM 20519 H2 TIP3X6010 28.883 -3.136 15.948 1.00 0.00 W1 H +ATOM 20520 OH2 TIP3X6011 26.086 -15.278 29.009 1.00 0.00 W1 O +ATOM 20521 H1 TIP3X6011 25.780 -14.530 28.497 1.00 0.00 W1 H +ATOM 20522 H2 TIP3X6011 26.140 -15.995 28.377 1.00 0.00 W1 H +ATOM 20523 OH2 TIP3X6012 20.300 -1.362 27.038 1.00 0.00 W1 O +ATOM 20524 H1 TIP3X6012 21.148 -1.124 27.412 1.00 0.00 W1 H +ATOM 20525 H2 TIP3X6012 20.512 -1.742 26.185 1.00 0.00 W1 H +ATOM 20526 OH2 TIP3X6013 18.766 -13.343 30.389 1.00 0.00 W1 O +ATOM 20527 H1 TIP3X6013 17.889 -13.254 30.763 1.00 0.00 W1 H +ATOM 20528 H2 TIP3X6013 18.829 -12.631 29.752 1.00 0.00 W1 H +ATOM 20529 OH2 TIP3X6014 24.964 -11.396 16.119 1.00 0.00 W1 O +ATOM 20530 H1 TIP3X6014 24.798 -11.099 15.224 1.00 0.00 W1 H +ATOM 20531 H2 TIP3X6014 24.093 -11.520 16.496 1.00 0.00 W1 H +ATOM 20532 OH2 TIP3X6015 30.361 -3.636 19.167 1.00 0.00 W1 O +ATOM 20533 H1 TIP3X6015 30.934 -4.373 19.380 1.00 0.00 W1 H +ATOM 20534 H2 TIP3X6015 30.030 -3.337 20.014 1.00 0.00 W1 H +ATOM 20535 OH2 TIP3X6016 25.622 -14.600 16.096 1.00 0.00 W1 O +ATOM 20536 H1 TIP3X6016 26.354 -13.984 16.121 1.00 0.00 W1 H +ATOM 20537 H2 TIP3X6016 25.863 -15.232 15.420 1.00 0.00 W1 H +ATOM 20538 OH2 TIP3X6017 30.154 -14.506 26.361 1.00 0.00 W1 O +ATOM 20539 H1 TIP3X6017 30.646 -15.136 26.889 1.00 0.00 W1 H +ATOM 20540 H2 TIP3X6017 30.755 -14.264 25.656 1.00 0.00 W1 H +ATOM 20541 OH2 TIP3X6018 17.661 -5.286 22.439 1.00 0.00 W1 O +ATOM 20542 H1 TIP3X6018 16.993 -4.962 23.044 1.00 0.00 W1 H +ATOM 20543 H2 TIP3X6018 18.454 -5.355 22.971 1.00 0.00 W1 H +ATOM 20544 OH2 TIP3X6019 22.658 -3.867 29.549 1.00 0.00 W1 O +ATOM 20545 H1 TIP3X6019 22.882 -4.245 30.400 1.00 0.00 W1 H +ATOM 20546 H2 TIP3X6019 22.052 -4.496 29.159 1.00 0.00 W1 H +ATOM 20547 OH2 TIP3X6020 26.138 -12.562 24.962 1.00 0.00 W1 O +ATOM 20548 H1 TIP3X6020 26.197 -12.744 25.900 1.00 0.00 W1 H +ATOM 20549 H2 TIP3X6020 25.199 -12.475 24.794 1.00 0.00 W1 H +ATOM 20550 OH2 TIP3X6021 22.329 -11.905 29.141 1.00 0.00 W1 O +ATOM 20551 H1 TIP3X6021 21.462 -11.975 28.741 1.00 0.00 W1 H +ATOM 20552 H2 TIP3X6021 22.274 -12.446 29.929 1.00 0.00 W1 H +ATOM 20553 OH2 TIP3X6022 29.815 -9.185 30.894 1.00 0.00 W1 O +ATOM 20554 H1 TIP3X6022 30.610 -9.718 30.878 1.00 0.00 W1 H +ATOM 20555 H2 TIP3X6022 29.521 -9.220 31.804 1.00 0.00 W1 H +ATOM 20556 OH2 TIP3X6023 18.000 -15.318 26.813 1.00 0.00 W1 O +ATOM 20557 H1 TIP3X6023 17.775 -14.865 26.000 1.00 0.00 W1 H +ATOM 20558 H2 TIP3X6023 18.830 -15.755 26.621 1.00 0.00 W1 H +ATOM 20559 OH2 TIP3X6024 24.095 -14.860 21.894 1.00 0.00 W1 O +ATOM 20560 H1 TIP3X6024 24.577 -14.346 21.247 1.00 0.00 W1 H +ATOM 20561 H2 TIP3X6024 24.439 -14.567 22.738 1.00 0.00 W1 H +ATOM 20562 OH2 TIP3X6025 18.565 -10.269 17.047 1.00 0.00 W1 O +ATOM 20563 H1 TIP3X6025 18.988 -9.623 16.481 1.00 0.00 W1 H +ATOM 20564 H2 TIP3X6025 19.277 -10.844 17.328 1.00 0.00 W1 H +ATOM 20565 OH2 TIP3X6026 19.090 -9.612 26.358 1.00 0.00 W1 O +ATOM 20566 H1 TIP3X6026 19.005 -8.821 26.890 1.00 0.00 W1 H +ATOM 20567 H2 TIP3X6026 20.005 -9.616 26.078 1.00 0.00 W1 H +ATOM 20568 OH2 TIP3X6027 18.272 -8.894 19.544 1.00 0.00 W1 O +ATOM 20569 H1 TIP3X6027 18.335 -9.183 18.633 1.00 0.00 W1 H +ATOM 20570 H2 TIP3X6027 19.048 -8.349 19.677 1.00 0.00 W1 H +ATOM 20571 OH2 TIP3X6028 27.293 -12.324 17.304 1.00 0.00 W1 O +ATOM 20572 H1 TIP3X6028 26.585 -11.836 16.884 1.00 0.00 W1 H +ATOM 20573 H2 TIP3X6028 28.018 -12.280 16.680 1.00 0.00 W1 H +ATOM 20574 OH2 TIP3X6029 15.843 -11.438 28.392 1.00 0.00 W1 O +ATOM 20575 H1 TIP3X6029 14.939 -11.144 28.503 1.00 0.00 W1 H +ATOM 20576 H2 TIP3X6029 15.984 -12.057 29.108 1.00 0.00 W1 H +ATOM 20577 OH2 TIP3X6030 16.987 -14.600 24.374 1.00 0.00 W1 O +ATOM 20578 H1 TIP3X6030 17.094 -15.302 23.732 1.00 0.00 W1 H +ATOM 20579 H2 TIP3X6030 17.122 -13.795 23.875 1.00 0.00 W1 H +ATOM 20580 OH2 TIP3X6031 28.508 -10.972 29.262 1.00 0.00 W1 O +ATOM 20581 H1 TIP3X6031 28.820 -10.394 29.958 1.00 0.00 W1 H +ATOM 20582 H2 TIP3X6031 27.564 -11.036 29.407 1.00 0.00 W1 H +ATOM 20583 OH2 TIP3X6032 25.551 -10.966 29.209 1.00 0.00 W1 O +ATOM 20584 H1 TIP3X6032 25.192 -10.398 28.528 1.00 0.00 W1 H +ATOM 20585 H2 TIP3X6032 25.214 -11.837 28.998 1.00 0.00 W1 H +ATOM 20586 OH2 TIP3X6033 23.754 -10.497 19.074 1.00 0.00 W1 O +ATOM 20587 H1 TIP3X6033 23.843 -9.918 18.318 1.00 0.00 W1 H +ATOM 20588 H2 TIP3X6033 22.985 -11.032 18.878 1.00 0.00 W1 H +ATOM 20589 OH2 TIP3X6034 22.057 -11.166 16.762 1.00 0.00 W1 O +ATOM 20590 H1 TIP3X6034 21.620 -10.973 15.932 1.00 0.00 W1 H +ATOM 20591 H2 TIP3X6034 21.650 -11.977 17.065 1.00 0.00 W1 H +ATOM 20592 OH2 TIP3X6035 22.768 -14.104 30.551 1.00 0.00 W1 O +ATOM 20593 H1 TIP3X6035 22.301 -14.491 31.291 1.00 0.00 W1 H +ATOM 20594 H2 TIP3X6035 23.682 -14.071 30.833 1.00 0.00 W1 H +ATOM 20595 OH2 TIP3X6036 28.331 -8.759 27.232 1.00 0.00 W1 O +ATOM 20596 H1 TIP3X6036 28.350 -9.409 27.935 1.00 0.00 W1 H +ATOM 20597 H2 TIP3X6036 27.496 -8.911 26.788 1.00 0.00 W1 H +ATOM 20598 OH2 TIP3X6037 16.406 -11.659 15.702 1.00 0.00 W1 O +ATOM 20599 H1 TIP3X6037 15.649 -11.851 16.256 1.00 0.00 W1 H +ATOM 20600 H2 TIP3X6037 16.940 -11.060 16.224 1.00 0.00 W1 H +ATOM 20601 OH2 TIP3X6038 16.324 -0.165 16.189 1.00 0.00 W1 O +ATOM 20602 H1 TIP3X6038 16.740 -0.913 16.618 1.00 0.00 W1 H +ATOM 20603 H2 TIP3X6038 16.337 0.528 16.848 1.00 0.00 W1 H +ATOM 20604 OH2 TIP3X6039 25.072 -12.005 21.182 1.00 0.00 W1 O +ATOM 20605 H1 TIP3X6039 24.735 -11.655 20.357 1.00 0.00 W1 H +ATOM 20606 H2 TIP3X6039 25.969 -12.273 20.980 1.00 0.00 W1 H +ATOM 20607 OH2 TIP3X6040 20.528 -12.695 22.926 1.00 0.00 W1 O +ATOM 20608 H1 TIP3X6040 19.585 -12.742 22.767 1.00 0.00 W1 H +ATOM 20609 H2 TIP3X6040 20.667 -11.820 23.289 1.00 0.00 W1 H +ATOM 20610 OH2 TIP3X6041 15.890 -11.569 19.719 1.00 0.00 W1 O +ATOM 20611 H1 TIP3X6041 15.616 -11.693 20.628 1.00 0.00 W1 H +ATOM 20612 H2 TIP3X6041 15.695 -10.650 19.533 1.00 0.00 W1 H +ATOM 20613 OH2 TIP3X6042 19.890 -12.242 27.779 1.00 0.00 W1 O +ATOM 20614 H1 TIP3X6042 19.912 -13.048 27.264 1.00 0.00 W1 H +ATOM 20615 H2 TIP3X6042 19.496 -11.594 27.195 1.00 0.00 W1 H +ATOM 20616 OH2 TIP3X6043 20.473 -5.706 23.584 1.00 0.00 W1 O +ATOM 20617 H1 TIP3X6043 20.402 -6.642 23.397 1.00 0.00 W1 H +ATOM 20618 H2 TIP3X6043 20.478 -5.653 24.540 1.00 0.00 W1 H +ATOM 20619 OH2 TIP3X6044 24.662 -8.687 28.147 1.00 0.00 W1 O +ATOM 20620 H1 TIP3X6044 25.074 -7.856 28.383 1.00 0.00 W1 H +ATOM 20621 H2 TIP3X6044 24.113 -8.477 27.392 1.00 0.00 W1 H +ATOM 20622 OH2 TIP3X6045 30.458 -13.321 17.471 1.00 0.00 W1 O +ATOM 20623 H1 TIP3X6045 30.892 -13.094 18.293 1.00 0.00 W1 H +ATOM 20624 H2 TIP3X6045 29.938 -14.096 17.681 1.00 0.00 W1 H +ATOM 20625 OH2 TIP3X6046 21.612 -7.361 16.649 1.00 0.00 W1 O +ATOM 20626 H1 TIP3X6046 21.323 -7.483 17.554 1.00 0.00 W1 H +ATOM 20627 H2 TIP3X6046 22.301 -8.014 16.528 1.00 0.00 W1 H +ATOM 20628 OH2 TIP3X6047 28.316 -8.845 17.717 1.00 0.00 W1 O +ATOM 20629 H1 TIP3X6047 27.451 -9.044 18.076 1.00 0.00 W1 H +ATOM 20630 H2 TIP3X6047 28.873 -8.724 18.486 1.00 0.00 W1 H +ATOM 20631 OH2 TIP3X6048 23.149 -8.591 24.188 1.00 0.00 W1 O +ATOM 20632 H1 TIP3X6048 23.246 -7.794 24.709 1.00 0.00 W1 H +ATOM 20633 H2 TIP3X6048 24.023 -8.980 24.179 1.00 0.00 W1 H +ATOM 20634 OH2 TIP3X6049 22.894 -8.209 21.104 1.00 0.00 W1 O +ATOM 20635 H1 TIP3X6049 23.515 -8.805 20.686 1.00 0.00 W1 H +ATOM 20636 H2 TIP3X6049 22.919 -8.446 22.030 1.00 0.00 W1 H +ATOM 20637 OH2 TIP3X6050 25.789 -6.593 30.039 1.00 0.00 W1 O +ATOM 20638 H1 TIP3X6050 25.111 -6.309 30.653 1.00 0.00 W1 H +ATOM 20639 H2 TIP3X6050 26.587 -6.634 30.566 1.00 0.00 W1 H +ATOM 20640 OH2 TIP3X6051 18.298 -7.178 27.736 1.00 0.00 W1 O +ATOM 20641 H1 TIP3X6051 18.815 -6.772 28.432 1.00 0.00 W1 H +ATOM 20642 H2 TIP3X6051 17.916 -6.441 27.260 1.00 0.00 W1 H +ATOM 20643 OH2 TIP3X6052 17.205 -9.216 29.357 1.00 0.00 W1 O +ATOM 20644 H1 TIP3X6052 17.001 -10.055 28.945 1.00 0.00 W1 H +ATOM 20645 H2 TIP3X6052 17.081 -8.570 28.662 1.00 0.00 W1 H +ATOM 20646 OH2 TIP3X6053 17.097 -8.342 22.181 1.00 0.00 W1 O +ATOM 20647 H1 TIP3X6053 17.454 -7.470 22.011 1.00 0.00 W1 H +ATOM 20648 H2 TIP3X6053 16.995 -8.733 21.313 1.00 0.00 W1 H +ATOM 20649 OH2 TIP3X6054 27.856 -6.078 16.367 1.00 0.00 W1 O +ATOM 20650 H1 TIP3X6054 28.562 -5.579 15.955 1.00 0.00 W1 H +ATOM 20651 H2 TIP3X6054 28.305 -6.708 16.931 1.00 0.00 W1 H +ATOM 20652 OH2 TIP3X6055 30.453 -8.731 19.730 1.00 0.00 W1 O +ATOM 20653 H1 TIP3X6055 30.165 -8.558 20.626 1.00 0.00 W1 H +ATOM 20654 H2 TIP3X6055 30.965 -7.959 19.489 1.00 0.00 W1 H +ATOM 20655 OH2 TIP3X6056 16.950 -9.614 24.452 1.00 0.00 W1 O +ATOM 20656 H1 TIP3X6056 17.045 -8.936 23.783 1.00 0.00 W1 H +ATOM 20657 H2 TIP3X6056 17.609 -9.395 25.111 1.00 0.00 W1 H +ATOM 20658 OH2 TIP3X6057 19.737 -1.107 17.715 1.00 0.00 W1 O +ATOM 20659 H1 TIP3X6057 19.508 -0.747 16.859 1.00 0.00 W1 H +ATOM 20660 H2 TIP3X6057 19.324 -1.970 17.731 1.00 0.00 W1 H +ATOM 20661 OH2 TIP3X6058 18.512 -5.874 16.214 1.00 0.00 W1 O +ATOM 20662 H1 TIP3X6058 17.696 -6.163 15.805 1.00 0.00 W1 H +ATOM 20663 H2 TIP3X6058 19.044 -6.667 16.275 1.00 0.00 W1 H +ATOM 20664 OH2 TIP3X6059 19.930 -5.034 29.288 1.00 0.00 W1 O +ATOM 20665 H1 TIP3X6059 19.357 -4.432 28.814 1.00 0.00 W1 H +ATOM 20666 H2 TIP3X6059 19.456 -5.230 30.096 1.00 0.00 W1 H +ATOM 20667 OH2 TIP3X6060 23.006 -0.291 26.979 1.00 0.00 W1 O +ATOM 20668 H1 TIP3X6060 23.324 -0.585 27.833 1.00 0.00 W1 H +ATOM 20669 H2 TIP3X6060 23.439 -0.869 26.350 1.00 0.00 W1 H +ATOM 20670 OH2 TIP3X6061 27.712 -0.050 21.113 1.00 0.00 W1 O +ATOM 20671 H1 TIP3X6061 27.300 -0.741 20.594 1.00 0.00 W1 H +ATOM 20672 H2 TIP3X6061 27.516 0.757 20.636 1.00 0.00 W1 H +ATOM 20673 OH2 TIP3X6062 24.290 -3.367 18.365 1.00 0.00 W1 O +ATOM 20674 H1 TIP3X6062 24.549 -2.582 17.883 1.00 0.00 W1 H +ATOM 20675 H2 TIP3X6062 23.721 -3.044 19.063 1.00 0.00 W1 H +ATOM 20676 OH2 TIP3X6063 24.307 -8.213 17.436 1.00 0.00 W1 O +ATOM 20677 H1 TIP3X6063 25.130 -8.140 16.953 1.00 0.00 W1 H +ATOM 20678 H2 TIP3X6063 24.315 -7.468 18.038 1.00 0.00 W1 H +ATOM 20679 OH2 TIP3X6064 27.709 -13.489 27.227 1.00 0.00 W1 O +ATOM 20680 H1 TIP3X6064 28.514 -13.720 26.763 1.00 0.00 W1 H +ATOM 20681 H2 TIP3X6064 27.999 -12.936 27.952 1.00 0.00 W1 H +ATOM 20682 OH2 TIP3X6065 15.674 -6.388 18.633 1.00 0.00 W1 O +ATOM 20683 H1 TIP3X6065 15.520 -6.295 17.693 1.00 0.00 W1 H +ATOM 20684 H2 TIP3X6065 16.627 -6.388 18.722 1.00 0.00 W1 H +ATOM 20685 OH2 TIP3X6066 26.436 -6.800 25.229 1.00 0.00 W1 O +ATOM 20686 H1 TIP3X6066 26.981 -6.138 25.655 1.00 0.00 W1 H +ATOM 20687 H2 TIP3X6066 26.895 -7.000 24.414 1.00 0.00 W1 H +ATOM 20688 OH2 TIP3X6067 25.258 -1.826 16.307 1.00 0.00 W1 O +ATOM 20689 H1 TIP3X6067 26.083 -1.791 16.791 1.00 0.00 W1 H +ATOM 20690 H2 TIP3X6067 25.461 -2.339 15.524 1.00 0.00 W1 H +ATOM 20691 OH2 TIP3X6068 25.250 -4.039 27.958 1.00 0.00 W1 O +ATOM 20692 H1 TIP3X6068 24.429 -3.792 28.384 1.00 0.00 W1 H +ATOM 20693 H2 TIP3X6068 25.021 -4.134 27.033 1.00 0.00 W1 H +ATOM 20694 OH2 TIP3X6069 21.875 -3.814 19.844 1.00 0.00 W1 O +ATOM 20695 H1 TIP3X6069 21.168 -3.667 19.216 1.00 0.00 W1 H +ATOM 20696 H2 TIP3X6069 21.538 -3.469 20.671 1.00 0.00 W1 H +ATOM 20697 OH2 TIP3X6070 18.440 -2.902 28.555 1.00 0.00 W1 O +ATOM 20698 H1 TIP3X6070 19.174 -2.291 28.491 1.00 0.00 W1 H +ATOM 20699 H2 TIP3X6070 18.128 -2.808 29.455 1.00 0.00 W1 H +ATOM 20700 OH2 TIP3X6071 18.030 -1.197 22.657 1.00 0.00 W1 O +ATOM 20701 H1 TIP3X6071 17.444 -1.938 22.503 1.00 0.00 W1 H +ATOM 20702 H2 TIP3X6071 18.473 -1.064 21.819 1.00 0.00 W1 H +ATOM 20703 OH2 TIP3X6072 26.384 -15.184 23.738 1.00 0.00 W1 O +ATOM 20704 H1 TIP3X6072 26.716 -15.259 22.843 1.00 0.00 W1 H +ATOM 20705 H2 TIP3X6072 26.339 -14.241 23.899 1.00 0.00 W1 H +ATOM 20706 OH2 TIP3X6073 23.622 -13.055 23.972 1.00 0.00 W1 O +ATOM 20707 H1 TIP3X6073 23.260 -12.566 23.233 1.00 0.00 W1 H +ATOM 20708 H2 TIP3X6073 22.890 -13.144 24.582 1.00 0.00 W1 H +ATOM 20709 OH2 TIP3X6074 22.341 -15.070 17.900 1.00 0.00 W1 O +ATOM 20710 H1 TIP3X6074 23.196 -15.326 18.245 1.00 0.00 W1 H +ATOM 20711 H2 TIP3X6074 21.822 -15.874 17.925 1.00 0.00 W1 H +ATOM 20712 OH2 TIP3X6075 25.092 -15.227 18.944 1.00 0.00 W1 O +ATOM 20713 H1 TIP3X6075 25.548 -15.963 19.352 1.00 0.00 W1 H +ATOM 20714 H2 TIP3X6075 25.500 -15.140 18.082 1.00 0.00 W1 H +ATOM 20715 OH2 TIP3X6076 19.732 -0.648 30.398 1.00 0.00 W1 O +ATOM 20716 H1 TIP3X6076 19.481 0.109 29.869 1.00 0.00 W1 H +ATOM 20717 H2 TIP3X6076 20.643 -0.817 30.159 1.00 0.00 W1 H +ATOM 20718 OH2 TIP3X6077 24.738 -1.954 20.699 1.00 0.00 W1 O +ATOM 20719 H1 TIP3X6077 25.399 -2.596 20.959 1.00 0.00 W1 H +ATOM 20720 H2 TIP3X6077 24.725 -1.319 21.415 1.00 0.00 W1 H +ATOM 20721 OH2 TIP3X6078 22.478 -1.051 29.608 1.00 0.00 W1 O +ATOM 20722 H1 TIP3X6078 22.695 -1.943 29.879 1.00 0.00 W1 H +ATOM 20723 H2 TIP3X6078 23.085 -0.497 30.098 1.00 0.00 W1 H +ATOM 20724 OH2 TIP3X6079 21.424 -12.933 19.653 1.00 0.00 W1 O +ATOM 20725 H1 TIP3X6079 22.081 -13.592 19.430 1.00 0.00 W1 H +ATOM 20726 H2 TIP3X6079 21.467 -12.864 20.607 1.00 0.00 W1 H +ATOM 20727 OH2 TIP3X6080 16.137 -14.595 29.109 1.00 0.00 W1 O +ATOM 20728 H1 TIP3X6080 16.886 -14.790 28.545 1.00 0.00 W1 H +ATOM 20729 H2 TIP3X6080 16.346 -15.020 29.940 1.00 0.00 W1 H +ATOM 20730 OH2 TIP3X6081 27.257 -1.867 18.710 1.00 0.00 W1 O +ATOM 20731 H1 TIP3X6081 27.402 -2.808 18.813 1.00 0.00 W1 H +ATOM 20732 H2 TIP3X6081 28.080 -1.535 18.353 1.00 0.00 W1 H +ATOM 20733 OH2 TIP3X6082 28.925 -15.101 29.937 1.00 0.00 W1 O +ATOM 20734 H1 TIP3X6082 28.311 -15.027 29.207 1.00 0.00 W1 H +ATOM 20735 H2 TIP3X6082 29.694 -14.606 29.656 1.00 0.00 W1 H +ATOM 20736 OH2 TIP3X6083 19.718 -0.888 20.424 1.00 0.00 W1 O +ATOM 20737 H1 TIP3X6083 19.712 -0.843 19.468 1.00 0.00 W1 H +ATOM 20738 H2 TIP3X6083 20.526 -0.442 20.680 1.00 0.00 W1 H +ATOM 20739 OH2 TIP3X6084 30.627 -1.950 28.373 1.00 0.00 W1 O +ATOM 20740 H1 TIP3X6084 29.905 -1.399 28.674 1.00 0.00 W1 H +ATOM 20741 H2 TIP3X6084 31.415 -1.450 28.587 1.00 0.00 W1 H +ATOM 20742 OH2 TIP3X6085 18.253 -12.628 20.053 1.00 0.00 W1 O +ATOM 20743 H1 TIP3X6085 17.610 -12.239 19.461 1.00 0.00 W1 H +ATOM 20744 H2 TIP3X6085 19.056 -12.131 19.895 1.00 0.00 W1 H +ATOM 20745 OH2 TIP3X6086 19.682 -4.029 17.785 1.00 0.00 W1 O +ATOM 20746 H1 TIP3X6086 19.643 -4.657 17.063 1.00 0.00 W1 H +ATOM 20747 H2 TIP3X6086 18.962 -4.282 18.363 1.00 0.00 W1 H +ATOM 20748 OH2 TIP3X6087 17.576 11.057 -26.806 1.00 0.00 W1 O +ATOM 20749 H1 TIP3X6087 17.759 10.981 -25.869 1.00 0.00 W1 H +ATOM 20750 H2 TIP3X6087 17.552 11.999 -26.970 1.00 0.00 W1 H +ATOM 20751 OH2 TIP3X6088 28.679 8.548 -23.068 1.00 0.00 W1 O +ATOM 20752 H1 TIP3X6088 28.914 8.812 -23.957 1.00 0.00 W1 H +ATOM 20753 H2 TIP3X6088 29.508 8.284 -22.669 1.00 0.00 W1 H +ATOM 20754 OH2 TIP3X6089 20.663 8.271 -27.089 1.00 0.00 W1 O +ATOM 20755 H1 TIP3X6089 20.693 9.181 -26.792 1.00 0.00 W1 H +ATOM 20756 H2 TIP3X6089 21.170 7.788 -26.437 1.00 0.00 W1 H +ATOM 20757 OH2 TIP3X6090 28.466 12.431 -24.946 1.00 0.00 W1 O +ATOM 20758 H1 TIP3X6090 28.191 12.921 -24.171 1.00 0.00 W1 H +ATOM 20759 H2 TIP3X6090 27.941 11.631 -24.922 1.00 0.00 W1 H +ATOM 20760 OH2 TIP3X6091 26.983 10.874 -27.903 1.00 0.00 W1 O +ATOM 20761 H1 TIP3X6091 27.145 10.645 -28.818 1.00 0.00 W1 H +ATOM 20762 H2 TIP3X6091 26.054 11.103 -27.873 1.00 0.00 W1 H +ATOM 20763 OH2 TIP3X6092 30.830 11.406 -23.118 1.00 0.00 W1 O +ATOM 20764 H1 TIP3X6092 30.278 11.489 -23.896 1.00 0.00 W1 H +ATOM 20765 H2 TIP3X6092 30.220 11.189 -22.413 1.00 0.00 W1 H +ATOM 20766 OH2 TIP3X6093 17.467 12.670 -20.667 1.00 0.00 W1 O +ATOM 20767 H1 TIP3X6093 17.873 12.873 -19.824 1.00 0.00 W1 H +ATOM 20768 H2 TIP3X6093 16.895 11.924 -20.484 1.00 0.00 W1 H +ATOM 20769 OH2 TIP3X6094 24.842 14.295 -21.441 1.00 0.00 W1 O +ATOM 20770 H1 TIP3X6094 25.143 13.394 -21.319 1.00 0.00 W1 H +ATOM 20771 H2 TIP3X6094 25.467 14.675 -22.058 1.00 0.00 W1 H +ATOM 20772 OH2 TIP3X6095 28.274 14.251 -21.561 1.00 0.00 W1 O +ATOM 20773 H1 TIP3X6095 27.839 15.075 -21.781 1.00 0.00 W1 H +ATOM 20774 H2 TIP3X6095 29.203 14.477 -21.512 1.00 0.00 W1 H +ATOM 20775 OH2 TIP3X6096 20.722 13.826 -22.432 1.00 0.00 W1 O +ATOM 20776 H1 TIP3X6096 21.078 14.675 -22.695 1.00 0.00 W1 H +ATOM 20777 H2 TIP3X6096 19.787 13.886 -22.628 1.00 0.00 W1 H +ATOM 20778 OH2 TIP3X6097 25.564 5.719 -23.530 1.00 0.00 W1 O +ATOM 20779 H1 TIP3X6097 25.486 4.909 -24.035 1.00 0.00 W1 H +ATOM 20780 H2 TIP3X6097 26.506 5.858 -23.443 1.00 0.00 W1 H +ATOM 20781 OH2 TIP3X6098 21.587 1.816 -21.168 1.00 0.00 W1 O +ATOM 20782 H1 TIP3X6098 21.844 1.079 -20.615 1.00 0.00 W1 H +ATOM 20783 H2 TIP3X6098 20.910 1.460 -21.744 1.00 0.00 W1 H +ATOM 20784 OH2 TIP3X6099 29.830 2.821 -24.745 1.00 0.00 W1 O +ATOM 20785 H1 TIP3X6099 29.523 3.159 -23.904 1.00 0.00 W1 H +ATOM 20786 H2 TIP3X6099 29.898 1.875 -24.614 1.00 0.00 W1 H +ATOM 20787 OH2 TIP3X6100 28.428 4.016 -22.791 1.00 0.00 W1 O +ATOM 20788 H1 TIP3X6100 29.003 3.788 -22.061 1.00 0.00 W1 H +ATOM 20789 H2 TIP3X6100 27.553 3.761 -22.496 1.00 0.00 W1 H +ATOM 20790 OH2 TIP3X6101 21.474 5.141 -21.420 1.00 0.00 W1 O +ATOM 20791 H1 TIP3X6101 21.978 4.438 -21.008 1.00 0.00 W1 H +ATOM 20792 H2 TIP3X6101 22.132 5.783 -21.687 1.00 0.00 W1 H +ATOM 20793 OH2 TIP3X6102 28.951 6.189 -24.523 1.00 0.00 W1 O +ATOM 20794 H1 TIP3X6102 28.992 5.289 -24.199 1.00 0.00 W1 H +ATOM 20795 H2 TIP3X6102 28.833 6.722 -23.736 1.00 0.00 W1 H +ATOM 20796 OH2 TIP3X6103 27.636 2.832 -26.654 1.00 0.00 W1 O +ATOM 20797 H1 TIP3X6103 28.461 3.017 -26.205 1.00 0.00 W1 H +ATOM 20798 H2 TIP3X6103 27.712 3.287 -27.493 1.00 0.00 W1 H +ATOM 20799 OH2 TIP3X6104 23.818 8.804 -20.583 1.00 0.00 W1 O +ATOM 20800 H1 TIP3X6104 24.695 8.826 -20.966 1.00 0.00 W1 H +ATOM 20801 H2 TIP3X6104 23.553 9.722 -20.537 1.00 0.00 W1 H +ATOM 20802 OH2 TIP3X6105 22.969 11.352 -20.773 1.00 0.00 W1 O +ATOM 20803 H1 TIP3X6105 22.944 11.579 -21.702 1.00 0.00 W1 H +ATOM 20804 H2 TIP3X6105 22.049 11.298 -20.514 1.00 0.00 W1 H +ATOM 20805 OH2 TIP3X6106 17.832 3.233 -23.935 1.00 0.00 W1 O +ATOM 20806 H1 TIP3X6106 17.506 4.113 -23.744 1.00 0.00 W1 H +ATOM 20807 H2 TIP3X6106 17.708 3.131 -24.878 1.00 0.00 W1 H +ATOM 20808 OH2 TIP3X6107 19.988 6.791 -23.922 1.00 0.00 W1 O +ATOM 20809 H1 TIP3X6107 19.305 6.341 -24.419 1.00 0.00 W1 H +ATOM 20810 H2 TIP3X6107 20.473 6.087 -23.490 1.00 0.00 W1 H +ATOM 20811 OH2 TIP3X6108 26.043 11.715 -21.526 1.00 0.00 W1 O +ATOM 20812 H1 TIP3X6108 25.801 11.129 -22.243 1.00 0.00 W1 H +ATOM 20813 H2 TIP3X6108 26.993 11.626 -21.453 1.00 0.00 W1 H +ATOM 20814 OH2 TIP3X6109 30.341 15.350 -24.745 1.00 0.00 W1 O +ATOM 20815 H1 TIP3X6109 30.336 14.882 -23.910 1.00 0.00 W1 H +ATOM 20816 H2 TIP3X6109 29.461 15.221 -25.098 1.00 0.00 W1 H +ATOM 20817 OH2 TIP3X6110 22.213 11.686 -23.723 1.00 0.00 W1 O +ATOM 20818 H1 TIP3X6110 21.642 10.967 -23.454 1.00 0.00 W1 H +ATOM 20819 H2 TIP3X6110 21.753 12.476 -23.441 1.00 0.00 W1 H +ATOM 20820 OH2 TIP3X6111 24.435 2.138 -19.153 1.00 0.00 W1 O +ATOM 20821 H1 TIP3X6111 23.692 2.617 -18.786 1.00 0.00 W1 H +ATOM 20822 H2 TIP3X6111 24.054 1.326 -19.487 1.00 0.00 W1 H +ATOM 20823 OH2 TIP3X6112 19.787 2.843 -29.351 1.00 0.00 W1 O +ATOM 20824 H1 TIP3X6112 19.689 2.181 -28.667 1.00 0.00 W1 H +ATOM 20825 H2 TIP3X6112 19.603 2.374 -30.166 1.00 0.00 W1 H +ATOM 20826 OH2 TIP3X6113 30.680 3.764 -21.162 1.00 0.00 W1 O +ATOM 20827 H1 TIP3X6113 31.199 4.433 -21.609 1.00 0.00 W1 H +ATOM 20828 H2 TIP3X6113 31.122 3.640 -20.322 1.00 0.00 W1 H +ATOM 20829 OH2 TIP3X6114 16.738 0.117 -27.002 1.00 0.00 W1 O +ATOM 20830 H1 TIP3X6114 17.463 0.738 -26.933 1.00 0.00 W1 H +ATOM 20831 H2 TIP3X6114 16.366 0.084 -26.120 1.00 0.00 W1 H +ATOM 20832 OH2 TIP3X6115 22.004 6.353 -17.015 1.00 0.00 W1 O +ATOM 20833 H1 TIP3X6115 22.868 6.751 -17.116 1.00 0.00 W1 H +ATOM 20834 H2 TIP3X6115 22.156 5.416 -17.138 1.00 0.00 W1 H +ATOM 20835 OH2 TIP3X6116 25.170 11.263 -24.276 1.00 0.00 W1 O +ATOM 20836 H1 TIP3X6116 25.264 10.400 -24.679 1.00 0.00 W1 H +ATOM 20837 H2 TIP3X6116 24.237 11.463 -24.352 1.00 0.00 W1 H +ATOM 20838 OH2 TIP3X6117 23.782 9.547 -26.745 1.00 0.00 W1 O +ATOM 20839 H1 TIP3X6117 23.218 8.933 -26.275 1.00 0.00 W1 H +ATOM 20840 H2 TIP3X6117 23.308 10.378 -26.716 1.00 0.00 W1 H +ATOM 20841 OH2 TIP3X6118 16.320 10.060 -20.288 1.00 0.00 W1 O +ATOM 20842 H1 TIP3X6118 15.785 9.458 -20.806 1.00 0.00 W1 H +ATOM 20843 H2 TIP3X6118 15.849 10.146 -19.459 1.00 0.00 W1 H +ATOM 20844 OH2 TIP3X6119 27.616 9.081 -25.920 1.00 0.00 W1 O +ATOM 20845 H1 TIP3X6119 27.560 8.166 -26.197 1.00 0.00 W1 H +ATOM 20846 H2 TIP3X6119 27.444 9.583 -26.716 1.00 0.00 W1 H +ATOM 20847 OH2 TIP3X6120 27.913 9.595 -18.896 1.00 0.00 W1 O +ATOM 20848 H1 TIP3X6120 27.011 9.678 -18.588 1.00 0.00 W1 H +ATOM 20849 H2 TIP3X6120 28.082 8.653 -18.892 1.00 0.00 W1 H +ATOM 20850 OH2 TIP3X6121 30.280 7.554 -21.090 1.00 0.00 W1 O +ATOM 20851 H1 TIP3X6121 30.942 6.873 -21.209 1.00 0.00 W1 H +ATOM 20852 H2 TIP3X6121 29.564 7.115 -20.631 1.00 0.00 W1 H +ATOM 20853 OH2 TIP3X6122 19.424 7.241 -15.946 1.00 0.00 W1 O +ATOM 20854 H1 TIP3X6122 18.895 7.007 -16.708 1.00 0.00 W1 H +ATOM 20855 H2 TIP3X6122 20.320 7.289 -16.280 1.00 0.00 W1 H +ATOM 20856 OH2 TIP3X6123 20.335 10.447 -20.384 1.00 0.00 W1 O +ATOM 20857 H1 TIP3X6123 20.290 9.892 -19.606 1.00 0.00 W1 H +ATOM 20858 H2 TIP3X6123 19.702 11.145 -20.218 1.00 0.00 W1 H +ATOM 20859 OH2 TIP3X6124 29.006 11.577 -20.635 1.00 0.00 W1 O +ATOM 20860 H1 TIP3X6124 29.430 12.345 -20.251 1.00 0.00 W1 H +ATOM 20861 H2 TIP3X6124 28.702 11.069 -19.882 1.00 0.00 W1 H +ATOM 20862 OH2 TIP3X6125 27.094 13.553 -18.810 1.00 0.00 W1 O +ATOM 20863 H1 TIP3X6125 26.387 12.924 -18.952 1.00 0.00 W1 H +ATOM 20864 H2 TIP3X6125 27.423 13.747 -19.687 1.00 0.00 W1 H +ATOM 20865 OH2 TIP3X6126 27.345 12.089 -16.413 1.00 0.00 W1 O +ATOM 20866 H1 TIP3X6126 26.711 11.482 -16.797 1.00 0.00 W1 H +ATOM 20867 H2 TIP3X6126 27.458 12.769 -17.077 1.00 0.00 W1 H +ATOM 20868 OH2 TIP3X6127 30.955 13.997 -22.347 1.00 0.00 W1 O +ATOM 20869 H1 TIP3X6127 31.633 13.838 -21.690 1.00 0.00 W1 H +ATOM 20870 H2 TIP3X6127 30.721 13.126 -22.666 1.00 0.00 W1 H +ATOM 20871 OH2 TIP3X6128 21.511 0.468 -23.954 1.00 0.00 W1 O +ATOM 20872 H1 TIP3X6128 21.220 1.378 -24.015 1.00 0.00 W1 H +ATOM 20873 H2 TIP3X6128 22.343 0.451 -24.427 1.00 0.00 W1 H +ATOM 20874 OH2 TIP3X6129 23.635 10.415 -30.300 1.00 0.00 W1 O +ATOM 20875 H1 TIP3X6129 22.940 9.793 -30.085 1.00 0.00 W1 H +ATOM 20876 H2 TIP3X6129 23.618 11.051 -29.585 1.00 0.00 W1 H +ATOM 20877 OH2 TIP3X6130 31.016 9.178 -30.863 1.00 0.00 W1 O +ATOM 20878 H1 TIP3X6130 30.753 8.428 -31.397 1.00 0.00 W1 H +ATOM 20879 H2 TIP3X6130 30.761 9.942 -31.381 1.00 0.00 W1 H +ATOM 20880 OH2 TIP3X6131 16.964 12.875 -31.146 1.00 0.00 W1 O +ATOM 20881 H1 TIP3X6131 17.409 12.326 -30.501 1.00 0.00 W1 H +ATOM 20882 H2 TIP3X6131 16.067 12.541 -31.167 1.00 0.00 W1 H +ATOM 20883 OH2 TIP3X6132 29.057 15.004 -29.888 1.00 0.00 W1 O +ATOM 20884 H1 TIP3X6132 29.942 14.676 -30.046 1.00 0.00 W1 H +ATOM 20885 H2 TIP3X6132 28.827 15.472 -30.690 1.00 0.00 W1 H +ATOM 20886 OH2 TIP3X6133 30.449 10.666 -17.810 1.00 0.00 W1 O +ATOM 20887 H1 TIP3X6133 30.340 11.615 -17.751 1.00 0.00 W1 H +ATOM 20888 H2 TIP3X6133 29.557 10.321 -17.820 1.00 0.00 W1 H +ATOM 20889 OH2 TIP3X6134 17.136 13.492 -28.191 1.00 0.00 W1 O +ATOM 20890 H1 TIP3X6134 17.068 14.328 -27.731 1.00 0.00 W1 H +ATOM 20891 H2 TIP3X6134 16.240 13.153 -28.208 1.00 0.00 W1 H +ATOM 20892 OH2 TIP3X6135 29.716 11.985 -30.547 1.00 0.00 W1 O +ATOM 20893 H1 TIP3X6135 29.747 11.905 -29.594 1.00 0.00 W1 H +ATOM 20894 H2 TIP3X6135 28.883 12.422 -30.724 1.00 0.00 W1 H +ATOM 20895 OH2 TIP3X6136 26.086 0.279 -17.663 1.00 0.00 W1 O +ATOM 20896 H1 TIP3X6136 25.780 1.028 -18.176 1.00 0.00 W1 H +ATOM 20897 H2 TIP3X6136 26.140 -0.438 -18.295 1.00 0.00 W1 H +ATOM 20898 OH2 TIP3X6137 20.300 14.196 -19.634 1.00 0.00 W1 O +ATOM 20899 H1 TIP3X6137 21.148 14.434 -19.260 1.00 0.00 W1 H +ATOM 20900 H2 TIP3X6137 20.512 13.816 -20.487 1.00 0.00 W1 H +ATOM 20901 OH2 TIP3X6138 18.766 2.214 -16.284 1.00 0.00 W1 O +ATOM 20902 H1 TIP3X6138 17.889 2.304 -15.910 1.00 0.00 W1 H +ATOM 20903 H2 TIP3X6138 18.829 2.927 -16.920 1.00 0.00 W1 H +ATOM 20904 OH2 TIP3X6139 24.964 4.161 -30.553 1.00 0.00 W1 O +ATOM 20905 H1 TIP3X6139 24.798 4.458 -31.448 1.00 0.00 W1 H +ATOM 20906 H2 TIP3X6139 24.093 4.038 -30.176 1.00 0.00 W1 H +ATOM 20907 OH2 TIP3X6140 30.361 11.922 -27.505 1.00 0.00 W1 O +ATOM 20908 H1 TIP3X6140 30.934 11.185 -27.292 1.00 0.00 W1 H +ATOM 20909 H2 TIP3X6140 30.030 12.221 -26.658 1.00 0.00 W1 H +ATOM 20910 OH2 TIP3X6141 25.622 0.958 -30.576 1.00 0.00 W1 O +ATOM 20911 H1 TIP3X6141 26.354 1.574 -30.552 1.00 0.00 W1 H +ATOM 20912 H2 TIP3X6141 25.863 0.325 -31.253 1.00 0.00 W1 H +ATOM 20913 OH2 TIP3X6142 30.154 1.051 -20.311 1.00 0.00 W1 O +ATOM 20914 H1 TIP3X6142 30.646 0.422 -19.784 1.00 0.00 W1 H +ATOM 20915 H2 TIP3X6142 30.755 1.294 -21.016 1.00 0.00 W1 H +ATOM 20916 OH2 TIP3X6143 17.661 10.272 -24.233 1.00 0.00 W1 O +ATOM 20917 H1 TIP3X6143 16.993 10.595 -23.629 1.00 0.00 W1 H +ATOM 20918 H2 TIP3X6143 18.454 10.202 -23.701 1.00 0.00 W1 H +ATOM 20919 OH2 TIP3X6144 22.658 11.691 -17.123 1.00 0.00 W1 O +ATOM 20920 H1 TIP3X6144 22.882 11.313 -16.272 1.00 0.00 W1 H +ATOM 20921 H2 TIP3X6144 22.052 11.062 -17.513 1.00 0.00 W1 H +ATOM 20922 OH2 TIP3X6145 26.138 2.995 -21.710 1.00 0.00 W1 O +ATOM 20923 H1 TIP3X6145 26.197 2.814 -20.772 1.00 0.00 W1 H +ATOM 20924 H2 TIP3X6145 25.199 3.083 -21.879 1.00 0.00 W1 H +ATOM 20925 OH2 TIP3X6146 22.329 3.652 -17.531 1.00 0.00 W1 O +ATOM 20926 H1 TIP3X6146 21.462 3.582 -17.931 1.00 0.00 W1 H +ATOM 20927 H2 TIP3X6146 22.274 3.112 -16.743 1.00 0.00 W1 H +ATOM 20928 OH2 TIP3X6147 29.815 6.373 -15.778 1.00 0.00 W1 O +ATOM 20929 H1 TIP3X6147 30.610 5.839 -15.795 1.00 0.00 W1 H +ATOM 20930 H2 TIP3X6147 29.521 6.338 -14.868 1.00 0.00 W1 H +ATOM 20931 OH2 TIP3X6148 18.000 0.239 -19.860 1.00 0.00 W1 O +ATOM 20932 H1 TIP3X6148 17.775 0.693 -20.672 1.00 0.00 W1 H +ATOM 20933 H2 TIP3X6148 18.830 -0.197 -20.051 1.00 0.00 W1 H +ATOM 20934 OH2 TIP3X6149 24.095 0.697 -24.778 1.00 0.00 W1 O +ATOM 20935 H1 TIP3X6149 24.577 1.211 -25.426 1.00 0.00 W1 H +ATOM 20936 H2 TIP3X6149 24.439 0.991 -23.934 1.00 0.00 W1 H +ATOM 20937 OH2 TIP3X6150 18.565 5.289 -29.625 1.00 0.00 W1 O +ATOM 20938 H1 TIP3X6150 18.988 5.935 -30.191 1.00 0.00 W1 H +ATOM 20939 H2 TIP3X6150 19.277 4.714 -29.344 1.00 0.00 W1 H +ATOM 20940 OH2 TIP3X6151 19.090 5.945 -20.314 1.00 0.00 W1 O +ATOM 20941 H1 TIP3X6151 19.005 6.737 -19.782 1.00 0.00 W1 H +ATOM 20942 H2 TIP3X6151 20.005 5.941 -20.595 1.00 0.00 W1 H +ATOM 20943 OH2 TIP3X6152 18.272 6.664 -27.129 1.00 0.00 W1 O +ATOM 20944 H1 TIP3X6152 18.335 6.375 -28.039 1.00 0.00 W1 H +ATOM 20945 H2 TIP3X6152 19.048 7.209 -26.996 1.00 0.00 W1 H +ATOM 20946 OH2 TIP3X6153 27.293 3.233 -29.369 1.00 0.00 W1 O +ATOM 20947 H1 TIP3X6153 26.585 3.722 -29.789 1.00 0.00 W1 H +ATOM 20948 H2 TIP3X6153 28.018 3.277 -29.992 1.00 0.00 W1 H +ATOM 20949 OH2 TIP3X6154 15.843 4.120 -18.281 1.00 0.00 W1 O +ATOM 20950 H1 TIP3X6154 14.939 4.414 -18.170 1.00 0.00 W1 H +ATOM 20951 H2 TIP3X6154 15.984 3.501 -17.564 1.00 0.00 W1 H +ATOM 20952 OH2 TIP3X6155 16.987 0.957 -22.298 1.00 0.00 W1 O +ATOM 20953 H1 TIP3X6155 17.094 0.256 -22.941 1.00 0.00 W1 H +ATOM 20954 H2 TIP3X6155 17.122 1.763 -22.797 1.00 0.00 W1 H +ATOM 20955 OH2 TIP3X6156 28.508 4.585 -17.411 1.00 0.00 W1 O +ATOM 20956 H1 TIP3X6156 28.820 5.164 -16.715 1.00 0.00 W1 H +ATOM 20957 H2 TIP3X6156 27.564 4.521 -17.265 1.00 0.00 W1 H +ATOM 20958 OH2 TIP3X6157 25.551 4.591 -17.464 1.00 0.00 W1 O +ATOM 20959 H1 TIP3X6157 25.192 5.159 -18.145 1.00 0.00 W1 H +ATOM 20960 H2 TIP3X6157 25.214 3.721 -17.675 1.00 0.00 W1 H +ATOM 20961 OH2 TIP3X6158 23.754 5.060 -27.598 1.00 0.00 W1 O +ATOM 20962 H1 TIP3X6158 23.843 5.640 -28.355 1.00 0.00 W1 H +ATOM 20963 H2 TIP3X6158 22.985 4.526 -27.795 1.00 0.00 W1 H +ATOM 20964 OH2 TIP3X6159 22.057 4.392 -29.911 1.00 0.00 W1 O +ATOM 20965 H1 TIP3X6159 21.620 4.584 -30.740 1.00 0.00 W1 H +ATOM 20966 H2 TIP3X6159 21.650 3.581 -29.607 1.00 0.00 W1 H +ATOM 20967 OH2 TIP3X6160 22.768 1.454 -16.122 1.00 0.00 W1 O +ATOM 20968 H1 TIP3X6160 22.301 1.066 -15.381 1.00 0.00 W1 H +ATOM 20969 H2 TIP3X6160 23.682 1.486 -15.839 1.00 0.00 W1 H +ATOM 20970 OH2 TIP3X6161 28.331 6.798 -19.440 1.00 0.00 W1 O +ATOM 20971 H1 TIP3X6161 28.350 6.149 -18.737 1.00 0.00 W1 H +ATOM 20972 H2 TIP3X6161 27.496 6.647 -19.884 1.00 0.00 W1 H +ATOM 20973 OH2 TIP3X6162 16.406 3.899 -30.971 1.00 0.00 W1 O +ATOM 20974 H1 TIP3X6162 15.649 3.706 -30.417 1.00 0.00 W1 H +ATOM 20975 H2 TIP3X6162 16.940 4.497 -30.448 1.00 0.00 W1 H +ATOM 20976 OH2 TIP3X6163 16.324 15.392 -30.484 1.00 0.00 W1 O +ATOM 20977 H1 TIP3X6163 16.740 14.645 -30.054 1.00 0.00 W1 H +ATOM 20978 H2 TIP3X6163 16.337 16.086 -29.824 1.00 0.00 W1 H +ATOM 20979 OH2 TIP3X6164 25.072 3.552 -25.491 1.00 0.00 W1 O +ATOM 20980 H1 TIP3X6164 24.735 3.903 -26.315 1.00 0.00 W1 H +ATOM 20981 H2 TIP3X6164 25.969 3.285 -25.692 1.00 0.00 W1 H +ATOM 20982 OH2 TIP3X6165 20.528 2.863 -23.747 1.00 0.00 W1 O +ATOM 20983 H1 TIP3X6165 19.585 2.815 -23.905 1.00 0.00 W1 H +ATOM 20984 H2 TIP3X6165 20.667 3.737 -23.383 1.00 0.00 W1 H +ATOM 20985 OH2 TIP3X6166 15.890 3.989 -26.953 1.00 0.00 W1 O +ATOM 20986 H1 TIP3X6166 15.616 3.864 -26.045 1.00 0.00 W1 H +ATOM 20987 H2 TIP3X6166 15.695 4.907 -27.139 1.00 0.00 W1 H +ATOM 20988 OH2 TIP3X6167 19.890 3.316 -18.893 1.00 0.00 W1 O +ATOM 20989 H1 TIP3X6167 19.912 2.510 -19.409 1.00 0.00 W1 H +ATOM 20990 H2 TIP3X6167 19.496 3.964 -19.477 1.00 0.00 W1 H +ATOM 20991 OH2 TIP3X6168 20.473 9.851 -23.088 1.00 0.00 W1 O +ATOM 20992 H1 TIP3X6168 20.402 8.916 -23.276 1.00 0.00 W1 H +ATOM 20993 H2 TIP3X6168 20.478 9.905 -22.132 1.00 0.00 W1 H +ATOM 20994 OH2 TIP3X6169 24.662 6.870 -18.526 1.00 0.00 W1 O +ATOM 20995 H1 TIP3X6169 25.074 7.701 -18.289 1.00 0.00 W1 H +ATOM 20996 H2 TIP3X6169 24.113 7.081 -19.280 1.00 0.00 W1 H +ATOM 20997 OH2 TIP3X6170 30.458 2.237 -29.201 1.00 0.00 W1 O +ATOM 20998 H1 TIP3X6170 30.892 2.464 -28.379 1.00 0.00 W1 H +ATOM 20999 H2 TIP3X6170 29.938 1.461 -28.992 1.00 0.00 W1 H +ATOM 21000 OH2 TIP3X6171 21.612 8.197 -30.023 1.00 0.00 W1 O +ATOM 21001 H1 TIP3X6171 21.323 8.075 -29.119 1.00 0.00 W1 H +ATOM 21002 H2 TIP3X6171 22.301 7.543 -30.144 1.00 0.00 W1 H +ATOM 21003 OH2 TIP3X6172 28.316 6.713 -28.955 1.00 0.00 W1 O +ATOM 21004 H1 TIP3X6172 27.451 6.514 -28.596 1.00 0.00 W1 H +ATOM 21005 H2 TIP3X6172 28.873 6.834 -28.186 1.00 0.00 W1 H +ATOM 21006 OH2 TIP3X6173 23.149 6.967 -22.485 1.00 0.00 W1 O +ATOM 21007 H1 TIP3X6173 23.246 7.764 -21.963 1.00 0.00 W1 H +ATOM 21008 H2 TIP3X6173 24.023 6.577 -22.493 1.00 0.00 W1 H +ATOM 21009 OH2 TIP3X6174 22.894 7.348 -25.569 1.00 0.00 W1 O +ATOM 21010 H1 TIP3X6174 23.515 6.752 -25.987 1.00 0.00 W1 H +ATOM 21011 H2 TIP3X6174 22.919 7.111 -24.642 1.00 0.00 W1 H +ATOM 21012 OH2 TIP3X6175 25.789 8.964 -16.633 1.00 0.00 W1 O +ATOM 21013 H1 TIP3X6175 25.111 9.248 -16.020 1.00 0.00 W1 H +ATOM 21014 H2 TIP3X6175 26.587 8.923 -16.106 1.00 0.00 W1 H +ATOM 21015 OH2 TIP3X6176 18.298 8.379 -18.937 1.00 0.00 W1 O +ATOM 21016 H1 TIP3X6176 18.815 8.785 -18.241 1.00 0.00 W1 H +ATOM 21017 H2 TIP3X6176 17.916 9.117 -19.412 1.00 0.00 W1 H +ATOM 21018 OH2 TIP3X6177 17.205 6.342 -17.315 1.00 0.00 W1 O +ATOM 21019 H1 TIP3X6177 17.001 5.502 -17.728 1.00 0.00 W1 H +ATOM 21020 H2 TIP3X6177 17.081 6.987 -18.011 1.00 0.00 W1 H +ATOM 21021 OH2 TIP3X6178 17.097 7.215 -24.492 1.00 0.00 W1 O +ATOM 21022 H1 TIP3X6178 17.454 8.087 -24.662 1.00 0.00 W1 H +ATOM 21023 H2 TIP3X6178 16.995 6.824 -25.360 1.00 0.00 W1 H +ATOM 21024 OH2 TIP3X6179 27.856 9.480 -30.305 1.00 0.00 W1 O +ATOM 21025 H1 TIP3X6179 28.562 9.978 -30.717 1.00 0.00 W1 H +ATOM 21026 H2 TIP3X6179 28.305 8.849 -29.742 1.00 0.00 W1 H +ATOM 21027 OH2 TIP3X6180 30.453 6.827 -26.943 1.00 0.00 W1 O +ATOM 21028 H1 TIP3X6180 30.165 7.000 -26.046 1.00 0.00 W1 H +ATOM 21029 H2 TIP3X6180 30.965 7.598 -27.183 1.00 0.00 W1 H +ATOM 21030 OH2 TIP3X6181 16.950 5.944 -22.221 1.00 0.00 W1 O +ATOM 21031 H1 TIP3X6181 17.045 6.622 -22.889 1.00 0.00 W1 H +ATOM 21032 H2 TIP3X6181 17.609 6.163 -21.561 1.00 0.00 W1 H +ATOM 21033 OH2 TIP3X6182 19.737 14.451 -28.957 1.00 0.00 W1 O +ATOM 21034 H1 TIP3X6182 19.508 14.811 -29.814 1.00 0.00 W1 H +ATOM 21035 H2 TIP3X6182 19.324 13.587 -28.941 1.00 0.00 W1 H +ATOM 21036 OH2 TIP3X6183 18.512 9.684 -30.459 1.00 0.00 W1 O +ATOM 21037 H1 TIP3X6183 17.696 9.394 -30.867 1.00 0.00 W1 H +ATOM 21038 H2 TIP3X6183 19.044 8.890 -30.397 1.00 0.00 W1 H +ATOM 21039 OH2 TIP3X6184 19.930 10.523 -17.384 1.00 0.00 W1 O +ATOM 21040 H1 TIP3X6184 19.357 11.125 -17.858 1.00 0.00 W1 H +ATOM 21041 H2 TIP3X6184 19.456 10.327 -16.576 1.00 0.00 W1 H +ATOM 21042 OH2 TIP3X6185 23.006 15.266 -19.693 1.00 0.00 W1 O +ATOM 21043 H1 TIP3X6185 23.324 14.972 -18.840 1.00 0.00 W1 H +ATOM 21044 H2 TIP3X6185 23.439 14.689 -20.322 1.00 0.00 W1 H +ATOM 21045 OH2 TIP3X6186 27.712 15.508 -25.560 1.00 0.00 W1 O +ATOM 21046 H1 TIP3X6186 27.300 14.817 -26.078 1.00 0.00 W1 H +ATOM 21047 H2 TIP3X6186 27.516 16.315 -26.036 1.00 0.00 W1 H +ATOM 21048 OH2 TIP3X6187 24.290 12.190 -28.308 1.00 0.00 W1 O +ATOM 21049 H1 TIP3X6187 24.549 12.976 -28.790 1.00 0.00 W1 H +ATOM 21050 H2 TIP3X6187 23.721 12.514 -27.610 1.00 0.00 W1 H +ATOM 21051 OH2 TIP3X6188 24.307 7.345 -29.236 1.00 0.00 W1 O +ATOM 21052 H1 TIP3X6188 25.130 7.418 -29.719 1.00 0.00 W1 H +ATOM 21053 H2 TIP3X6188 24.315 8.089 -28.635 1.00 0.00 W1 H +ATOM 21054 OH2 TIP3X6189 27.709 2.068 -19.445 1.00 0.00 W1 O +ATOM 21055 H1 TIP3X6189 28.514 1.838 -19.909 1.00 0.00 W1 H +ATOM 21056 H2 TIP3X6189 27.999 2.621 -18.720 1.00 0.00 W1 H +ATOM 21057 OH2 TIP3X6190 15.674 9.170 -28.039 1.00 0.00 W1 O +ATOM 21058 H1 TIP3X6190 15.520 9.262 -28.979 1.00 0.00 W1 H +ATOM 21059 H2 TIP3X6190 16.627 9.170 -27.950 1.00 0.00 W1 H +ATOM 21060 OH2 TIP3X6191 26.436 8.758 -21.443 1.00 0.00 W1 O +ATOM 21061 H1 TIP3X6191 26.981 9.419 -21.017 1.00 0.00 W1 H +ATOM 21062 H2 TIP3X6191 26.895 8.557 -22.259 1.00 0.00 W1 H +ATOM 21063 OH2 TIP3X6192 25.258 13.731 -30.366 1.00 0.00 W1 O +ATOM 21064 H1 TIP3X6192 26.083 13.766 -29.881 1.00 0.00 W1 H +ATOM 21065 H2 TIP3X6192 25.461 13.219 -31.148 1.00 0.00 W1 H +ATOM 21066 OH2 TIP3X6193 25.250 11.519 -18.715 1.00 0.00 W1 O +ATOM 21067 H1 TIP3X6193 24.429 11.766 -18.288 1.00 0.00 W1 H +ATOM 21068 H2 TIP3X6193 25.021 11.423 -19.639 1.00 0.00 W1 H +ATOM 21069 OH2 TIP3X6194 21.875 11.744 -26.828 1.00 0.00 W1 O +ATOM 21070 H1 TIP3X6194 21.168 11.891 -27.456 1.00 0.00 W1 H +ATOM 21071 H2 TIP3X6194 21.538 12.088 -26.001 1.00 0.00 W1 H +ATOM 21072 OH2 TIP3X6195 18.440 12.656 -18.117 1.00 0.00 W1 O +ATOM 21073 H1 TIP3X6195 19.174 13.267 -18.181 1.00 0.00 W1 H +ATOM 21074 H2 TIP3X6195 18.128 12.750 -17.217 1.00 0.00 W1 H +ATOM 21075 OH2 TIP3X6196 18.030 14.360 -24.015 1.00 0.00 W1 O +ATOM 21076 H1 TIP3X6196 17.444 13.619 -24.169 1.00 0.00 W1 H +ATOM 21077 H2 TIP3X6196 18.473 14.494 -24.853 1.00 0.00 W1 H +ATOM 21078 OH2 TIP3X6197 26.384 0.374 -22.935 1.00 0.00 W1 O +ATOM 21079 H1 TIP3X6197 26.716 0.298 -23.829 1.00 0.00 W1 H +ATOM 21080 H2 TIP3X6197 26.339 1.316 -22.774 1.00 0.00 W1 H +ATOM 21081 OH2 TIP3X6198 23.622 2.502 -22.700 1.00 0.00 W1 O +ATOM 21082 H1 TIP3X6198 23.260 2.991 -23.439 1.00 0.00 W1 H +ATOM 21083 H2 TIP3X6198 22.890 2.413 -22.090 1.00 0.00 W1 H +ATOM 21084 OH2 TIP3X6199 22.341 0.487 -28.772 1.00 0.00 W1 O +ATOM 21085 H1 TIP3X6199 23.196 0.232 -28.427 1.00 0.00 W1 H +ATOM 21086 H2 TIP3X6199 21.822 -0.317 -28.747 1.00 0.00 W1 H +ATOM 21087 OH2 TIP3X6200 25.092 0.331 -27.729 1.00 0.00 W1 O +ATOM 21088 H1 TIP3X6200 25.548 -0.405 -27.320 1.00 0.00 W1 H +ATOM 21089 H2 TIP3X6200 25.500 0.417 -28.590 1.00 0.00 W1 H +ATOM 21090 OH2 TIP3X6201 19.732 14.909 -16.274 1.00 0.00 W1 O +ATOM 21091 H1 TIP3X6201 19.481 15.666 -16.804 1.00 0.00 W1 H +ATOM 21092 H2 TIP3X6201 20.643 14.740 -16.513 1.00 0.00 W1 H +ATOM 21093 OH2 TIP3X6202 24.738 13.604 -25.974 1.00 0.00 W1 O +ATOM 21094 H1 TIP3X6202 25.399 12.962 -25.714 1.00 0.00 W1 H +ATOM 21095 H2 TIP3X6202 24.725 14.238 -25.257 1.00 0.00 W1 H +ATOM 21096 OH2 TIP3X6203 22.478 14.506 -17.064 1.00 0.00 W1 O +ATOM 21097 H1 TIP3X6203 22.695 13.614 -16.794 1.00 0.00 W1 H +ATOM 21098 H2 TIP3X6203 23.085 15.060 -16.575 1.00 0.00 W1 H +ATOM 21099 OH2 TIP3X6204 21.424 2.624 -27.020 1.00 0.00 W1 O +ATOM 21100 H1 TIP3X6204 22.081 1.965 -27.242 1.00 0.00 W1 H +ATOM 21101 H2 TIP3X6204 21.467 2.693 -26.066 1.00 0.00 W1 H +ATOM 21102 OH2 TIP3X6205 16.137 0.963 -17.564 1.00 0.00 W1 O +ATOM 21103 H1 TIP3X6205 16.886 0.767 -18.128 1.00 0.00 W1 H +ATOM 21104 H2 TIP3X6205 16.346 0.537 -16.732 1.00 0.00 W1 H +ATOM 21105 OH2 TIP3X6206 27.257 13.690 -27.962 1.00 0.00 W1 O +ATOM 21106 H1 TIP3X6206 27.402 12.749 -27.859 1.00 0.00 W1 H +ATOM 21107 H2 TIP3X6206 28.080 14.022 -28.319 1.00 0.00 W1 H +ATOM 21108 OH2 TIP3X6207 28.925 0.456 -16.735 1.00 0.00 W1 O +ATOM 21109 H1 TIP3X6207 28.311 0.530 -17.466 1.00 0.00 W1 H +ATOM 21110 H2 TIP3X6207 29.694 0.951 -17.017 1.00 0.00 W1 H +ATOM 21111 OH2 TIP3X6208 19.718 14.669 -26.249 1.00 0.00 W1 O +ATOM 21112 H1 TIP3X6208 19.712 14.714 -27.205 1.00 0.00 W1 H +ATOM 21113 H2 TIP3X6208 20.526 15.115 -25.993 1.00 0.00 W1 H +ATOM 21114 OH2 TIP3X6209 30.627 13.608 -18.299 1.00 0.00 W1 O +ATOM 21115 H1 TIP3X6209 29.905 14.159 -17.998 1.00 0.00 W1 H +ATOM 21116 H2 TIP3X6209 31.415 14.107 -18.085 1.00 0.00 W1 H +ATOM 21117 OH2 TIP3X6210 18.253 2.930 -26.619 1.00 0.00 W1 O +ATOM 21118 H1 TIP3X6210 17.610 3.318 -27.212 1.00 0.00 W1 H +ATOM 21119 H2 TIP3X6210 19.056 3.427 -26.777 1.00 0.00 W1 H +ATOM 21120 OH2 TIP3X6211 19.682 11.529 -28.888 1.00 0.00 W1 O +ATOM 21121 H1 TIP3X6211 19.643 10.901 -29.609 1.00 0.00 W1 H +ATOM 21122 H2 TIP3X6211 18.962 11.275 -28.310 1.00 0.00 W1 H +ATOM 21123 OH2 TIP3X6212 17.576 11.057 -11.248 1.00 0.00 W1 O +ATOM 21124 H1 TIP3X6212 17.759 10.981 -10.312 1.00 0.00 W1 H +ATOM 21125 H2 TIP3X6212 17.552 11.999 -11.413 1.00 0.00 W1 H +ATOM 21126 OH2 TIP3X6213 28.679 8.548 -7.510 1.00 0.00 W1 O +ATOM 21127 H1 TIP3X6213 28.914 8.812 -8.400 1.00 0.00 W1 H +ATOM 21128 H2 TIP3X6213 29.508 8.284 -7.111 1.00 0.00 W1 H +ATOM 21129 OH2 TIP3X6214 28.466 12.431 -9.388 1.00 0.00 W1 O +ATOM 21130 H1 TIP3X6214 28.191 12.921 -8.613 1.00 0.00 W1 H +ATOM 21131 H2 TIP3X6214 27.941 11.631 -9.365 1.00 0.00 W1 H +ATOM 21132 OH2 TIP3X6215 26.983 10.874 -12.345 1.00 0.00 W1 O +ATOM 21133 H1 TIP3X6215 27.145 10.645 -13.260 1.00 0.00 W1 H +ATOM 21134 H2 TIP3X6215 26.054 11.103 -12.315 1.00 0.00 W1 H +ATOM 21135 OH2 TIP3X6216 30.830 11.406 -7.561 1.00 0.00 W1 O +ATOM 21136 H1 TIP3X6216 30.278 11.489 -8.338 1.00 0.00 W1 H +ATOM 21137 H2 TIP3X6216 30.220 11.189 -6.856 1.00 0.00 W1 H +ATOM 21138 OH2 TIP3X6217 24.842 14.295 -5.884 1.00 0.00 W1 O +ATOM 21139 H1 TIP3X6217 25.143 13.394 -5.762 1.00 0.00 W1 H +ATOM 21140 H2 TIP3X6217 25.467 14.675 -6.501 1.00 0.00 W1 H +ATOM 21141 OH2 TIP3X6218 28.274 14.251 -6.004 1.00 0.00 W1 O +ATOM 21142 H1 TIP3X6218 27.839 15.075 -6.223 1.00 0.00 W1 H +ATOM 21143 H2 TIP3X6218 29.203 14.477 -5.954 1.00 0.00 W1 H +ATOM 21144 OH2 TIP3X6219 20.722 13.826 -6.874 1.00 0.00 W1 O +ATOM 21145 H1 TIP3X6219 21.078 14.675 -7.138 1.00 0.00 W1 H +ATOM 21146 H2 TIP3X6219 19.787 13.886 -7.070 1.00 0.00 W1 H +ATOM 21147 OH2 TIP3X6220 25.564 5.719 -7.973 1.00 0.00 W1 O +ATOM 21148 H1 TIP3X6220 25.486 4.909 -8.477 1.00 0.00 W1 H +ATOM 21149 H2 TIP3X6220 26.506 5.858 -7.885 1.00 0.00 W1 H +ATOM 21150 OH2 TIP3X6221 29.830 2.821 -9.188 1.00 0.00 W1 O +ATOM 21151 H1 TIP3X6221 29.523 3.159 -8.347 1.00 0.00 W1 H +ATOM 21152 H2 TIP3X6221 29.898 1.875 -9.056 1.00 0.00 W1 H +ATOM 21153 OH2 TIP3X6222 28.428 4.016 -7.234 1.00 0.00 W1 O +ATOM 21154 H1 TIP3X6222 29.003 3.788 -6.503 1.00 0.00 W1 H +ATOM 21155 H2 TIP3X6222 27.553 3.761 -6.939 1.00 0.00 W1 H +ATOM 21156 OH2 TIP3X6223 28.951 6.189 -8.965 1.00 0.00 W1 O +ATOM 21157 H1 TIP3X6223 28.992 5.289 -8.641 1.00 0.00 W1 H +ATOM 21158 H2 TIP3X6223 28.833 6.722 -8.179 1.00 0.00 W1 H +ATOM 21159 OH2 TIP3X6224 27.636 2.832 -11.097 1.00 0.00 W1 O +ATOM 21160 H1 TIP3X6224 28.461 3.017 -10.648 1.00 0.00 W1 H +ATOM 21161 H2 TIP3X6224 27.712 3.287 -11.936 1.00 0.00 W1 H +ATOM 21162 OH2 TIP3X6225 23.818 8.804 -5.025 1.00 0.00 W1 O +ATOM 21163 H1 TIP3X6225 24.695 8.826 -5.408 1.00 0.00 W1 H +ATOM 21164 H2 TIP3X6225 23.553 9.722 -4.979 1.00 0.00 W1 H +ATOM 21165 OH2 TIP3X6226 22.969 11.352 -5.215 1.00 0.00 W1 O +ATOM 21166 H1 TIP3X6226 22.944 11.579 -6.145 1.00 0.00 W1 H +ATOM 21167 H2 TIP3X6226 22.049 11.298 -4.957 1.00 0.00 W1 H +ATOM 21168 OH2 TIP3X6227 26.043 11.715 -5.968 1.00 0.00 W1 O +ATOM 21169 H1 TIP3X6227 25.801 11.129 -6.685 1.00 0.00 W1 H +ATOM 21170 H2 TIP3X6227 26.993 11.626 -5.896 1.00 0.00 W1 H +ATOM 21171 OH2 TIP3X6228 30.341 15.350 -9.188 1.00 0.00 W1 O +ATOM 21172 H1 TIP3X6228 30.336 14.882 -8.353 1.00 0.00 W1 H +ATOM 21173 H2 TIP3X6228 29.461 15.221 -9.541 1.00 0.00 W1 H +ATOM 21174 OH2 TIP3X6229 22.213 11.686 -8.166 1.00 0.00 W1 O +ATOM 21175 H1 TIP3X6229 21.642 10.967 -7.897 1.00 0.00 W1 H +ATOM 21176 H2 TIP3X6229 21.753 12.476 -7.883 1.00 0.00 W1 H +ATOM 21177 OH2 TIP3X6230 24.435 2.138 -3.595 1.00 0.00 W1 O +ATOM 21178 H1 TIP3X6230 23.692 2.617 -3.228 1.00 0.00 W1 H +ATOM 21179 H2 TIP3X6230 24.054 1.326 -3.930 1.00 0.00 W1 H +ATOM 21180 OH2 TIP3X6231 30.680 3.764 -5.604 1.00 0.00 W1 O +ATOM 21181 H1 TIP3X6231 31.199 4.433 -6.051 1.00 0.00 W1 H +ATOM 21182 H2 TIP3X6231 31.122 3.640 -4.764 1.00 0.00 W1 H +ATOM 21183 OH2 TIP3X6232 25.170 11.263 -8.718 1.00 0.00 W1 O +ATOM 21184 H1 TIP3X6232 25.264 10.400 -9.122 1.00 0.00 W1 H +ATOM 21185 H2 TIP3X6232 24.237 11.463 -8.794 1.00 0.00 W1 H +ATOM 21186 OH2 TIP3X6233 23.782 9.547 -11.187 1.00 0.00 W1 O +ATOM 21187 H1 TIP3X6233 23.218 8.933 -10.718 1.00 0.00 W1 H +ATOM 21188 H2 TIP3X6233 23.308 10.378 -11.159 1.00 0.00 W1 H +ATOM 21189 OH2 TIP3X6234 16.320 10.060 -4.730 1.00 0.00 W1 O +ATOM 21190 H1 TIP3X6234 15.785 9.458 -5.248 1.00 0.00 W1 H +ATOM 21191 H2 TIP3X6234 15.849 10.146 -3.901 1.00 0.00 W1 H +ATOM 21192 OH2 TIP3X6235 27.616 9.081 -10.363 1.00 0.00 W1 O +ATOM 21193 H1 TIP3X6235 27.560 8.166 -10.639 1.00 0.00 W1 H +ATOM 21194 H2 TIP3X6235 27.444 9.583 -11.159 1.00 0.00 W1 H +ATOM 21195 OH2 TIP3X6236 27.913 9.595 -3.338 1.00 0.00 W1 O +ATOM 21196 H1 TIP3X6236 27.011 9.678 -3.030 1.00 0.00 W1 H +ATOM 21197 H2 TIP3X6236 28.082 8.653 -3.335 1.00 0.00 W1 H +ATOM 21198 OH2 TIP3X6237 30.280 7.554 -5.533 1.00 0.00 W1 O +ATOM 21199 H1 TIP3X6237 30.942 6.873 -5.652 1.00 0.00 W1 H +ATOM 21200 H2 TIP3X6237 29.564 7.115 -5.074 1.00 0.00 W1 H +ATOM 21201 OH2 TIP3X6238 29.006 11.577 -5.077 1.00 0.00 W1 O +ATOM 21202 H1 TIP3X6238 29.430 12.345 -4.693 1.00 0.00 W1 H +ATOM 21203 H2 TIP3X6238 28.702 11.069 -4.325 1.00 0.00 W1 H +ATOM 21204 OH2 TIP3X6239 27.094 13.553 -3.252 1.00 0.00 W1 O +ATOM 21205 H1 TIP3X6239 26.387 12.924 -3.395 1.00 0.00 W1 H +ATOM 21206 H2 TIP3X6239 27.423 13.747 -4.130 1.00 0.00 W1 H +ATOM 21207 OH2 TIP3X6240 27.345 12.089 -0.856 1.00 0.00 W1 O +ATOM 21208 H1 TIP3X6240 26.711 11.482 -1.240 1.00 0.00 W1 H +ATOM 21209 H2 TIP3X6240 27.458 12.769 -1.520 1.00 0.00 W1 H +ATOM 21210 OH2 TIP3X6241 30.955 13.997 -6.789 1.00 0.00 W1 O +ATOM 21211 H1 TIP3X6241 31.633 13.838 -6.133 1.00 0.00 W1 H +ATOM 21212 H2 TIP3X6241 30.721 13.126 -7.108 1.00 0.00 W1 H +ATOM 21213 OH2 TIP3X6242 23.635 10.415 -14.742 1.00 0.00 W1 O +ATOM 21214 H1 TIP3X6242 22.940 9.793 -14.528 1.00 0.00 W1 H +ATOM 21215 H2 TIP3X6242 23.618 11.051 -14.027 1.00 0.00 W1 H +ATOM 21216 OH2 TIP3X6243 31.016 9.178 -15.306 1.00 0.00 W1 O +ATOM 21217 H1 TIP3X6243 30.753 8.428 -15.839 1.00 0.00 W1 H +ATOM 21218 H2 TIP3X6243 30.761 9.942 -15.823 1.00 0.00 W1 H +ATOM 21219 OH2 TIP3X6244 16.964 12.875 -15.589 1.00 0.00 W1 O +ATOM 21220 H1 TIP3X6244 17.409 12.326 -14.943 1.00 0.00 W1 H +ATOM 21221 H2 TIP3X6244 16.067 12.541 -15.610 1.00 0.00 W1 H +ATOM 21222 OH2 TIP3X6245 29.057 15.004 -14.330 1.00 0.00 W1 O +ATOM 21223 H1 TIP3X6245 29.942 14.676 -14.489 1.00 0.00 W1 H +ATOM 21224 H2 TIP3X6245 28.827 15.472 -15.133 1.00 0.00 W1 H +ATOM 21225 OH2 TIP3X6246 30.449 10.666 -2.253 1.00 0.00 W1 O +ATOM 21226 H1 TIP3X6246 30.340 11.615 -2.194 1.00 0.00 W1 H +ATOM 21227 H2 TIP3X6246 29.557 10.321 -2.263 1.00 0.00 W1 H +ATOM 21228 OH2 TIP3X6247 17.136 13.492 -12.634 1.00 0.00 W1 O +ATOM 21229 H1 TIP3X6247 17.068 14.328 -12.174 1.00 0.00 W1 H +ATOM 21230 H2 TIP3X6247 16.240 13.153 -12.651 1.00 0.00 W1 H +ATOM 21231 OH2 TIP3X6248 29.716 11.985 -14.990 1.00 0.00 W1 O +ATOM 21232 H1 TIP3X6248 29.747 11.905 -14.036 1.00 0.00 W1 H +ATOM 21233 H2 TIP3X6248 28.883 12.422 -15.166 1.00 0.00 W1 H +ATOM 21234 OH2 TIP3X6249 26.086 0.279 -2.106 1.00 0.00 W1 O +ATOM 21235 H1 TIP3X6249 25.780 1.028 -2.618 1.00 0.00 W1 H +ATOM 21236 H2 TIP3X6249 26.140 -0.438 -2.738 1.00 0.00 W1 H +ATOM 21237 OH2 TIP3X6250 24.964 4.161 -14.996 1.00 0.00 W1 O +ATOM 21238 H1 TIP3X6250 24.798 4.458 -15.891 1.00 0.00 W1 H +ATOM 21239 H2 TIP3X6250 24.093 4.038 -14.619 1.00 0.00 W1 H +ATOM 21240 OH2 TIP3X6251 30.361 11.922 -11.948 1.00 0.00 W1 O +ATOM 21241 H1 TIP3X6251 30.934 11.185 -11.735 1.00 0.00 W1 H +ATOM 21242 H2 TIP3X6251 30.030 12.221 -11.101 1.00 0.00 W1 H +ATOM 21243 OH2 TIP3X6252 25.622 0.958 -15.019 1.00 0.00 W1 O +ATOM 21244 H1 TIP3X6252 26.354 1.574 -14.994 1.00 0.00 W1 H +ATOM 21245 H2 TIP3X6252 25.863 0.325 -15.695 1.00 0.00 W1 H +ATOM 21246 OH2 TIP3X6253 30.154 1.051 -4.754 1.00 0.00 W1 O +ATOM 21247 H1 TIP3X6253 30.646 0.422 -4.226 1.00 0.00 W1 H +ATOM 21248 H2 TIP3X6253 30.755 1.294 -5.459 1.00 0.00 W1 H +ATOM 21249 OH2 TIP3X6254 17.661 10.272 -8.676 1.00 0.00 W1 O +ATOM 21250 H1 TIP3X6254 16.993 10.595 -8.071 1.00 0.00 W1 H +ATOM 21251 H2 TIP3X6254 18.454 10.202 -8.144 1.00 0.00 W1 H +ATOM 21252 OH2 TIP3X6255 26.138 2.995 -6.153 1.00 0.00 W1 O +ATOM 21253 H1 TIP3X6255 26.197 2.814 -5.215 1.00 0.00 W1 H +ATOM 21254 H2 TIP3X6255 25.199 3.083 -6.321 1.00 0.00 W1 H +ATOM 21255 OH2 TIP3X6256 22.329 3.652 -1.974 1.00 0.00 W1 O +ATOM 21256 H1 TIP3X6256 21.462 3.582 -2.374 1.00 0.00 W1 H +ATOM 21257 H2 TIP3X6256 22.274 3.112 -1.186 1.00 0.00 W1 H +ATOM 21258 OH2 TIP3X6257 29.815 6.373 -0.221 1.00 0.00 W1 O +ATOM 21259 H1 TIP3X6257 30.610 5.839 -0.237 1.00 0.00 W1 H +ATOM 21260 H2 TIP3X6257 29.521 6.338 0.690 1.00 0.00 W1 H +ATOM 21261 OH2 TIP3X6258 27.293 3.233 -13.811 1.00 0.00 W1 O +ATOM 21262 H1 TIP3X6258 26.585 3.722 -14.231 1.00 0.00 W1 H +ATOM 21263 H2 TIP3X6258 28.018 3.277 -14.435 1.00 0.00 W1 H +ATOM 21264 OH2 TIP3X6259 28.508 4.585 -1.853 1.00 0.00 W1 O +ATOM 21265 H1 TIP3X6259 28.820 5.164 -1.157 1.00 0.00 W1 H +ATOM 21266 H2 TIP3X6259 27.564 4.521 -1.708 1.00 0.00 W1 H +ATOM 21267 OH2 TIP3X6260 25.551 4.591 -1.906 1.00 0.00 W1 O +ATOM 21268 H1 TIP3X6260 25.192 5.159 -2.587 1.00 0.00 W1 H +ATOM 21269 H2 TIP3X6260 25.214 3.721 -2.117 1.00 0.00 W1 H +ATOM 21270 OH2 TIP3X6261 22.768 1.454 -0.564 1.00 0.00 W1 O +ATOM 21271 H1 TIP3X6261 22.301 1.066 0.176 1.00 0.00 W1 H +ATOM 21272 H2 TIP3X6261 23.682 1.486 -0.282 1.00 0.00 W1 H +ATOM 21273 OH2 TIP3X6262 28.331 6.798 -3.883 1.00 0.00 W1 O +ATOM 21274 H1 TIP3X6262 28.350 6.149 -3.180 1.00 0.00 W1 H +ATOM 21275 H2 TIP3X6262 27.496 6.647 -4.327 1.00 0.00 W1 H +ATOM 21276 OH2 TIP3X6263 16.406 3.899 -15.413 1.00 0.00 W1 O +ATOM 21277 H1 TIP3X6263 15.649 3.706 -14.859 1.00 0.00 W1 H +ATOM 21278 H2 TIP3X6263 16.940 4.497 -14.891 1.00 0.00 W1 H +ATOM 21279 OH2 TIP3X6264 16.324 15.392 -14.926 1.00 0.00 W1 O +ATOM 21280 H1 TIP3X6264 16.740 14.645 -14.497 1.00 0.00 W1 H +ATOM 21281 H2 TIP3X6264 16.337 16.086 -14.267 1.00 0.00 W1 H +ATOM 21282 OH2 TIP3X6265 25.072 3.552 -9.933 1.00 0.00 W1 O +ATOM 21283 H1 TIP3X6265 24.735 3.903 -10.758 1.00 0.00 W1 H +ATOM 21284 H2 TIP3X6265 25.969 3.285 -10.135 1.00 0.00 W1 H +ATOM 21285 OH2 TIP3X6266 20.473 9.851 -7.531 1.00 0.00 W1 O +ATOM 21286 H1 TIP3X6266 20.402 8.916 -7.718 1.00 0.00 W1 H +ATOM 21287 H2 TIP3X6266 20.478 9.905 -6.575 1.00 0.00 W1 H +ATOM 21288 OH2 TIP3X6267 24.662 6.870 -2.968 1.00 0.00 W1 O +ATOM 21289 H1 TIP3X6267 25.074 7.701 -2.732 1.00 0.00 W1 H +ATOM 21290 H2 TIP3X6267 24.113 7.081 -3.723 1.00 0.00 W1 H +ATOM 21291 OH2 TIP3X6268 30.458 2.237 -13.644 1.00 0.00 W1 O +ATOM 21292 H1 TIP3X6268 30.892 2.464 -12.822 1.00 0.00 W1 H +ATOM 21293 H2 TIP3X6268 29.938 1.461 -13.434 1.00 0.00 W1 H +ATOM 21294 OH2 TIP3X6269 28.316 6.713 -13.398 1.00 0.00 W1 O +ATOM 21295 H1 TIP3X6269 27.451 6.514 -13.039 1.00 0.00 W1 H +ATOM 21296 H2 TIP3X6269 28.873 6.834 -12.629 1.00 0.00 W1 H +ATOM 21297 OH2 TIP3X6270 25.789 8.964 -1.075 1.00 0.00 W1 O +ATOM 21298 H1 TIP3X6270 25.111 9.248 -0.462 1.00 0.00 W1 H +ATOM 21299 H2 TIP3X6270 26.587 8.923 -0.549 1.00 0.00 W1 H +ATOM 21300 OH2 TIP3X6271 17.097 7.215 -8.934 1.00 0.00 W1 O +ATOM 21301 H1 TIP3X6271 17.454 8.087 -9.104 1.00 0.00 W1 H +ATOM 21302 H2 TIP3X6271 16.995 6.824 -9.802 1.00 0.00 W1 H +ATOM 21303 OH2 TIP3X6272 27.856 9.480 -14.748 1.00 0.00 W1 O +ATOM 21304 H1 TIP3X6272 28.562 9.978 -15.160 1.00 0.00 W1 H +ATOM 21305 H2 TIP3X6272 28.305 8.849 -14.184 1.00 0.00 W1 H +ATOM 21306 OH2 TIP3X6273 30.453 6.827 -11.385 1.00 0.00 W1 O +ATOM 21307 H1 TIP3X6273 30.165 7.000 -10.489 1.00 0.00 W1 H +ATOM 21308 H2 TIP3X6273 30.965 7.598 -11.626 1.00 0.00 W1 H +ATOM 21309 OH2 TIP3X6274 19.737 14.451 -13.399 1.00 0.00 W1 O +ATOM 21310 H1 TIP3X6274 19.508 14.811 -14.256 1.00 0.00 W1 H +ATOM 21311 H2 TIP3X6274 19.324 13.587 -13.383 1.00 0.00 W1 H +ATOM 21312 OH2 TIP3X6275 18.512 9.684 -14.901 1.00 0.00 W1 O +ATOM 21313 H1 TIP3X6275 17.696 9.394 -15.310 1.00 0.00 W1 H +ATOM 21314 H2 TIP3X6275 19.044 8.890 -14.840 1.00 0.00 W1 H +ATOM 21315 OH2 TIP3X6276 23.006 15.266 -4.136 1.00 0.00 W1 O +ATOM 21316 H1 TIP3X6276 23.324 14.972 -3.282 1.00 0.00 W1 H +ATOM 21317 H2 TIP3X6276 23.439 14.689 -4.765 1.00 0.00 W1 H +ATOM 21318 OH2 TIP3X6277 27.712 15.508 -10.002 1.00 0.00 W1 O +ATOM 21319 H1 TIP3X6277 27.300 14.817 -10.521 1.00 0.00 W1 H +ATOM 21320 H2 TIP3X6277 27.516 16.315 -10.479 1.00 0.00 W1 H +ATOM 21321 OH2 TIP3X6278 24.290 12.190 -12.750 1.00 0.00 W1 O +ATOM 21322 H1 TIP3X6278 24.549 12.976 -13.232 1.00 0.00 W1 H +ATOM 21323 H2 TIP3X6278 23.721 12.514 -12.052 1.00 0.00 W1 H +ATOM 21324 OH2 TIP3X6279 24.307 7.345 -13.679 1.00 0.00 W1 O +ATOM 21325 H1 TIP3X6279 25.130 7.418 -14.162 1.00 0.00 W1 H +ATOM 21326 H2 TIP3X6279 24.315 8.089 -13.077 1.00 0.00 W1 H +ATOM 21327 OH2 TIP3X6280 27.709 2.068 -3.888 1.00 0.00 W1 O +ATOM 21328 H1 TIP3X6280 28.514 1.838 -4.351 1.00 0.00 W1 H +ATOM 21329 H2 TIP3X6280 27.999 2.621 -3.163 1.00 0.00 W1 H +ATOM 21330 OH2 TIP3X6281 15.674 9.170 -12.482 1.00 0.00 W1 O +ATOM 21331 H1 TIP3X6281 15.520 9.262 -13.422 1.00 0.00 W1 H +ATOM 21332 H2 TIP3X6281 16.627 9.170 -12.393 1.00 0.00 W1 H +ATOM 21333 OH2 TIP3X6282 26.436 8.758 -5.886 1.00 0.00 W1 O +ATOM 21334 H1 TIP3X6282 26.981 9.419 -5.460 1.00 0.00 W1 H +ATOM 21335 H2 TIP3X6282 26.895 8.557 -6.701 1.00 0.00 W1 H +ATOM 21336 OH2 TIP3X6283 25.258 13.731 -14.808 1.00 0.00 W1 O +ATOM 21337 H1 TIP3X6283 26.083 13.766 -14.324 1.00 0.00 W1 H +ATOM 21338 H2 TIP3X6283 25.461 13.219 -15.591 1.00 0.00 W1 H +ATOM 21339 OH2 TIP3X6284 25.250 11.519 -3.157 1.00 0.00 W1 O +ATOM 21340 H1 TIP3X6284 24.429 11.766 -2.731 1.00 0.00 W1 H +ATOM 21341 H2 TIP3X6284 25.021 11.423 -4.082 1.00 0.00 W1 H +ATOM 21342 OH2 TIP3X6285 21.875 11.744 -11.271 1.00 0.00 W1 O +ATOM 21343 H1 TIP3X6285 21.168 11.891 -11.899 1.00 0.00 W1 H +ATOM 21344 H2 TIP3X6285 21.538 12.088 -10.444 1.00 0.00 W1 H +ATOM 21345 OH2 TIP3X6286 18.030 14.360 -8.458 1.00 0.00 W1 O +ATOM 21346 H1 TIP3X6286 17.444 13.619 -8.611 1.00 0.00 W1 H +ATOM 21347 H2 TIP3X6286 18.473 14.494 -9.296 1.00 0.00 W1 H +ATOM 21348 OH2 TIP3X6287 26.384 0.374 -7.377 1.00 0.00 W1 O +ATOM 21349 H1 TIP3X6287 26.716 0.298 -8.272 1.00 0.00 W1 H +ATOM 21350 H2 TIP3X6287 26.339 1.316 -7.216 1.00 0.00 W1 H +ATOM 21351 OH2 TIP3X6288 22.341 0.487 -13.215 1.00 0.00 W1 O +ATOM 21352 H1 TIP3X6288 23.196 0.232 -12.869 1.00 0.00 W1 H +ATOM 21353 H2 TIP3X6288 21.822 -0.317 -13.190 1.00 0.00 W1 H +ATOM 21354 OH2 TIP3X6289 25.092 0.331 -12.171 1.00 0.00 W1 O +ATOM 21355 H1 TIP3X6289 25.548 -0.405 -11.763 1.00 0.00 W1 H +ATOM 21356 H2 TIP3X6289 25.500 0.417 -13.033 1.00 0.00 W1 H +ATOM 21357 OH2 TIP3X6290 24.738 13.604 -10.416 1.00 0.00 W1 O +ATOM 21358 H1 TIP3X6290 25.399 12.962 -10.156 1.00 0.00 W1 H +ATOM 21359 H2 TIP3X6290 24.725 14.238 -9.700 1.00 0.00 W1 H +ATOM 21360 OH2 TIP3X6291 22.478 14.506 -1.507 1.00 0.00 W1 O +ATOM 21361 H1 TIP3X6291 22.695 13.614 -1.236 1.00 0.00 W1 H +ATOM 21362 H2 TIP3X6291 23.085 15.060 -1.017 1.00 0.00 W1 H +ATOM 21363 OH2 TIP3X6292 21.424 2.624 -11.462 1.00 0.00 W1 O +ATOM 21364 H1 TIP3X6292 22.081 1.965 -11.685 1.00 0.00 W1 H +ATOM 21365 H2 TIP3X6292 21.467 2.693 -10.508 1.00 0.00 W1 H +ATOM 21366 OH2 TIP3X6293 27.257 13.690 -12.405 1.00 0.00 W1 O +ATOM 21367 H1 TIP3X6293 27.402 12.749 -12.302 1.00 0.00 W1 H +ATOM 21368 H2 TIP3X6293 28.080 14.022 -12.762 1.00 0.00 W1 H +ATOM 21369 OH2 TIP3X6294 28.925 0.456 -1.178 1.00 0.00 W1 O +ATOM 21370 H1 TIP3X6294 28.311 0.530 -1.908 1.00 0.00 W1 H +ATOM 21371 H2 TIP3X6294 29.694 0.951 -1.459 1.00 0.00 W1 H +ATOM 21372 OH2 TIP3X6295 19.718 14.669 -10.691 1.00 0.00 W1 O +ATOM 21373 H1 TIP3X6295 19.712 14.714 -11.647 1.00 0.00 W1 H +ATOM 21374 H2 TIP3X6295 20.526 15.115 -10.435 1.00 0.00 W1 H +ATOM 21375 OH2 TIP3X6296 30.627 13.608 -2.742 1.00 0.00 W1 O +ATOM 21376 H1 TIP3X6296 29.905 14.159 -2.441 1.00 0.00 W1 H +ATOM 21377 H2 TIP3X6296 31.415 14.107 -2.528 1.00 0.00 W1 H +ATOM 21378 OH2 TIP3X6297 19.682 11.529 -13.330 1.00 0.00 W1 O +ATOM 21379 H1 TIP3X6297 19.643 10.901 -14.052 1.00 0.00 W1 H +ATOM 21380 H2 TIP3X6297 18.962 11.275 -12.752 1.00 0.00 W1 H +ATOM 21381 OH2 TIP3X6298 28.679 8.548 8.047 1.00 0.00 W1 O +ATOM 21382 H1 TIP3X6298 28.914 8.812 7.158 1.00 0.00 W1 H +ATOM 21383 H2 TIP3X6298 29.508 8.284 8.446 1.00 0.00 W1 H +ATOM 21384 OH2 TIP3X6299 28.466 12.431 6.169 1.00 0.00 W1 O +ATOM 21385 H1 TIP3X6299 28.191 12.921 6.944 1.00 0.00 W1 H +ATOM 21386 H2 TIP3X6299 27.941 11.631 6.192 1.00 0.00 W1 H +ATOM 21387 OH2 TIP3X6300 26.983 10.874 3.212 1.00 0.00 W1 O +ATOM 21388 H1 TIP3X6300 27.145 10.645 2.297 1.00 0.00 W1 H +ATOM 21389 H2 TIP3X6300 26.054 11.103 3.242 1.00 0.00 W1 H +ATOM 21390 OH2 TIP3X6301 30.830 11.406 7.997 1.00 0.00 W1 O +ATOM 21391 H1 TIP3X6301 30.278 11.489 7.219 1.00 0.00 W1 H +ATOM 21392 H2 TIP3X6301 30.220 11.189 8.702 1.00 0.00 W1 H +ATOM 21393 OH2 TIP3X6302 17.467 12.670 10.448 1.00 0.00 W1 O +ATOM 21394 H1 TIP3X6302 17.873 12.873 11.291 1.00 0.00 W1 H +ATOM 21395 H2 TIP3X6302 16.895 11.924 10.630 1.00 0.00 W1 H +ATOM 21396 OH2 TIP3X6303 24.842 14.295 9.674 1.00 0.00 W1 O +ATOM 21397 H1 TIP3X6303 25.143 13.394 9.796 1.00 0.00 W1 H +ATOM 21398 H2 TIP3X6303 25.467 14.675 9.057 1.00 0.00 W1 H +ATOM 21399 OH2 TIP3X6304 28.274 14.251 9.554 1.00 0.00 W1 O +ATOM 21400 H1 TIP3X6304 27.839 15.075 9.334 1.00 0.00 W1 H +ATOM 21401 H2 TIP3X6304 29.203 14.477 9.603 1.00 0.00 W1 H +ATOM 21402 OH2 TIP3X6305 20.722 13.826 8.683 1.00 0.00 W1 O +ATOM 21403 H1 TIP3X6305 21.078 14.675 8.420 1.00 0.00 W1 H +ATOM 21404 H2 TIP3X6305 19.787 13.886 8.487 1.00 0.00 W1 H +ATOM 21405 OH2 TIP3X6306 25.564 5.719 7.585 1.00 0.00 W1 O +ATOM 21406 H1 TIP3X6306 25.486 4.909 7.080 1.00 0.00 W1 H +ATOM 21407 H2 TIP3X6306 26.506 5.858 7.672 1.00 0.00 W1 H +ATOM 21408 OH2 TIP3X6307 21.587 1.816 9.947 1.00 0.00 W1 O +ATOM 21409 H1 TIP3X6307 21.844 1.079 10.500 1.00 0.00 W1 H +ATOM 21410 H2 TIP3X6307 20.910 1.460 9.371 1.00 0.00 W1 H +ATOM 21411 OH2 TIP3X6308 29.830 2.821 6.370 1.00 0.00 W1 O +ATOM 21412 H1 TIP3X6308 29.523 3.159 7.211 1.00 0.00 W1 H +ATOM 21413 H2 TIP3X6308 29.898 1.875 6.501 1.00 0.00 W1 H +ATOM 21414 OH2 TIP3X6309 28.428 4.016 8.324 1.00 0.00 W1 O +ATOM 21415 H1 TIP3X6309 29.003 3.788 9.054 1.00 0.00 W1 H +ATOM 21416 H2 TIP3X6309 27.553 3.761 8.618 1.00 0.00 W1 H +ATOM 21417 OH2 TIP3X6310 21.474 5.141 9.695 1.00 0.00 W1 O +ATOM 21418 H1 TIP3X6310 21.978 4.438 10.107 1.00 0.00 W1 H +ATOM 21419 H2 TIP3X6310 22.132 5.783 9.428 1.00 0.00 W1 H +ATOM 21420 OH2 TIP3X6311 28.951 6.189 6.592 1.00 0.00 W1 O +ATOM 21421 H1 TIP3X6311 28.992 5.289 6.916 1.00 0.00 W1 H +ATOM 21422 H2 TIP3X6311 28.833 6.722 7.379 1.00 0.00 W1 H +ATOM 21423 OH2 TIP3X6312 27.636 2.832 4.461 1.00 0.00 W1 O +ATOM 21424 H1 TIP3X6312 28.461 3.017 4.910 1.00 0.00 W1 H +ATOM 21425 H2 TIP3X6312 27.712 3.287 3.622 1.00 0.00 W1 H +ATOM 21426 OH2 TIP3X6313 23.818 8.804 10.532 1.00 0.00 W1 O +ATOM 21427 H1 TIP3X6313 24.695 8.826 10.149 1.00 0.00 W1 H +ATOM 21428 H2 TIP3X6313 23.553 9.722 10.578 1.00 0.00 W1 H +ATOM 21429 OH2 TIP3X6314 22.969 11.352 10.342 1.00 0.00 W1 O +ATOM 21430 H1 TIP3X6314 22.944 11.579 9.413 1.00 0.00 W1 H +ATOM 21431 H2 TIP3X6314 22.049 11.298 10.601 1.00 0.00 W1 H +ATOM 21432 OH2 TIP3X6315 17.832 3.233 7.180 1.00 0.00 W1 O +ATOM 21433 H1 TIP3X6315 17.506 4.113 7.371 1.00 0.00 W1 H +ATOM 21434 H2 TIP3X6315 17.708 3.131 6.237 1.00 0.00 W1 H +ATOM 21435 OH2 TIP3X6316 26.043 11.715 9.589 1.00 0.00 W1 O +ATOM 21436 H1 TIP3X6316 25.801 11.129 8.872 1.00 0.00 W1 H +ATOM 21437 H2 TIP3X6316 26.993 11.626 9.662 1.00 0.00 W1 H +ATOM 21438 OH2 TIP3X6317 30.341 15.350 6.370 1.00 0.00 W1 O +ATOM 21439 H1 TIP3X6317 30.336 14.882 7.205 1.00 0.00 W1 H +ATOM 21440 H2 TIP3X6317 29.461 15.221 6.017 1.00 0.00 W1 H +ATOM 21441 OH2 TIP3X6318 22.213 11.686 7.392 1.00 0.00 W1 O +ATOM 21442 H1 TIP3X6318 21.642 10.967 7.661 1.00 0.00 W1 H +ATOM 21443 H2 TIP3X6318 21.753 12.476 7.674 1.00 0.00 W1 H +ATOM 21444 OH2 TIP3X6319 24.435 2.138 11.962 1.00 0.00 W1 O +ATOM 21445 H1 TIP3X6319 23.692 2.617 12.329 1.00 0.00 W1 H +ATOM 21446 H2 TIP3X6319 24.054 1.326 11.628 1.00 0.00 W1 H +ATOM 21447 OH2 TIP3X6320 30.680 3.764 9.953 1.00 0.00 W1 O +ATOM 21448 H1 TIP3X6320 31.199 4.433 9.506 1.00 0.00 W1 H +ATOM 21449 H2 TIP3X6320 31.122 3.640 10.793 1.00 0.00 W1 H +ATOM 21450 OH2 TIP3X6321 22.004 6.353 14.100 1.00 0.00 W1 O +ATOM 21451 H1 TIP3X6321 22.868 6.751 13.998 1.00 0.00 W1 H +ATOM 21452 H2 TIP3X6321 22.156 5.416 13.977 1.00 0.00 W1 H +ATOM 21453 OH2 TIP3X6322 25.170 11.263 6.839 1.00 0.00 W1 O +ATOM 21454 H1 TIP3X6322 25.264 10.400 6.436 1.00 0.00 W1 H +ATOM 21455 H2 TIP3X6322 24.237 11.463 6.763 1.00 0.00 W1 H +ATOM 21456 OH2 TIP3X6323 16.320 10.060 10.827 1.00 0.00 W1 O +ATOM 21457 H1 TIP3X6323 15.785 9.458 10.309 1.00 0.00 W1 H +ATOM 21458 H2 TIP3X6323 15.849 10.146 11.656 1.00 0.00 W1 H +ATOM 21459 OH2 TIP3X6324 27.616 9.081 5.195 1.00 0.00 W1 O +ATOM 21460 H1 TIP3X6324 27.560 8.166 4.918 1.00 0.00 W1 H +ATOM 21461 H2 TIP3X6324 27.444 9.583 4.399 1.00 0.00 W1 H +ATOM 21462 OH2 TIP3X6325 27.913 9.595 12.219 1.00 0.00 W1 O +ATOM 21463 H1 TIP3X6325 27.011 9.678 12.527 1.00 0.00 W1 H +ATOM 21464 H2 TIP3X6325 28.082 8.653 12.223 1.00 0.00 W1 H +ATOM 21465 OH2 TIP3X6326 30.280 7.554 10.025 1.00 0.00 W1 O +ATOM 21466 H1 TIP3X6326 30.942 6.873 9.906 1.00 0.00 W1 H +ATOM 21467 H2 TIP3X6326 29.564 7.115 10.484 1.00 0.00 W1 H +ATOM 21468 OH2 TIP3X6327 19.424 7.241 15.169 1.00 0.00 W1 O +ATOM 21469 H1 TIP3X6327 18.895 7.007 14.407 1.00 0.00 W1 H +ATOM 21470 H2 TIP3X6327 20.320 7.289 14.835 1.00 0.00 W1 H +ATOM 21471 OH2 TIP3X6328 20.335 10.447 10.731 1.00 0.00 W1 O +ATOM 21472 H1 TIP3X6328 20.290 9.892 11.509 1.00 0.00 W1 H +ATOM 21473 H2 TIP3X6328 19.702 11.145 10.897 1.00 0.00 W1 H +ATOM 21474 OH2 TIP3X6329 29.006 11.577 10.480 1.00 0.00 W1 O +ATOM 21475 H1 TIP3X6329 29.430 12.345 10.864 1.00 0.00 W1 H +ATOM 21476 H2 TIP3X6329 28.702 11.069 11.233 1.00 0.00 W1 H +ATOM 21477 OH2 TIP3X6330 27.094 13.553 12.305 1.00 0.00 W1 O +ATOM 21478 H1 TIP3X6330 26.387 12.924 12.163 1.00 0.00 W1 H +ATOM 21479 H2 TIP3X6330 27.423 13.747 11.428 1.00 0.00 W1 H +ATOM 21480 OH2 TIP3X6331 27.345 12.089 14.702 1.00 0.00 W1 O +ATOM 21481 H1 TIP3X6331 26.711 11.482 14.318 1.00 0.00 W1 H +ATOM 21482 H2 TIP3X6331 27.458 12.769 14.038 1.00 0.00 W1 H +ATOM 21483 OH2 TIP3X6332 30.955 13.997 8.768 1.00 0.00 W1 O +ATOM 21484 H1 TIP3X6332 31.633 13.838 9.425 1.00 0.00 W1 H +ATOM 21485 H2 TIP3X6332 30.721 13.126 8.449 1.00 0.00 W1 H +ATOM 21486 OH2 TIP3X6333 21.511 0.468 7.161 1.00 0.00 W1 O +ATOM 21487 H1 TIP3X6333 21.220 1.378 7.100 1.00 0.00 W1 H +ATOM 21488 H2 TIP3X6333 22.343 0.451 6.688 1.00 0.00 W1 H +ATOM 21489 OH2 TIP3X6334 23.635 10.415 0.815 1.00 0.00 W1 O +ATOM 21490 H1 TIP3X6334 22.940 9.793 1.030 1.00 0.00 W1 H +ATOM 21491 H2 TIP3X6334 23.618 11.051 1.530 1.00 0.00 W1 H +ATOM 21492 OH2 TIP3X6335 31.016 9.178 0.252 1.00 0.00 W1 O +ATOM 21493 H1 TIP3X6335 30.753 8.428 -0.282 1.00 0.00 W1 H +ATOM 21494 H2 TIP3X6335 30.761 9.942 -0.266 1.00 0.00 W1 H +ATOM 21495 OH2 TIP3X6336 29.057 15.004 1.227 1.00 0.00 W1 O +ATOM 21496 H1 TIP3X6336 29.942 14.676 1.069 1.00 0.00 W1 H +ATOM 21497 H2 TIP3X6336 28.827 15.472 0.425 1.00 0.00 W1 H +ATOM 21498 OH2 TIP3X6337 30.449 10.666 13.305 1.00 0.00 W1 O +ATOM 21499 H1 TIP3X6337 30.340 11.615 13.364 1.00 0.00 W1 H +ATOM 21500 H2 TIP3X6337 29.557 10.321 13.294 1.00 0.00 W1 H +ATOM 21501 OH2 TIP3X6338 29.716 11.985 0.568 1.00 0.00 W1 O +ATOM 21502 H1 TIP3X6338 29.747 11.905 1.521 1.00 0.00 W1 H +ATOM 21503 H2 TIP3X6338 28.883 12.422 0.391 1.00 0.00 W1 H +ATOM 21504 OH2 TIP3X6339 26.086 0.279 13.452 1.00 0.00 W1 O +ATOM 21505 H1 TIP3X6339 25.780 1.028 12.939 1.00 0.00 W1 H +ATOM 21506 H2 TIP3X6339 26.140 -0.438 12.820 1.00 0.00 W1 H +ATOM 21507 OH2 TIP3X6340 20.300 14.196 11.481 1.00 0.00 W1 O +ATOM 21508 H1 TIP3X6340 21.148 14.434 11.854 1.00 0.00 W1 H +ATOM 21509 H2 TIP3X6340 20.512 13.816 10.628 1.00 0.00 W1 H +ATOM 21510 OH2 TIP3X6341 18.766 2.214 14.831 1.00 0.00 W1 O +ATOM 21511 H1 TIP3X6341 17.889 2.304 15.205 1.00 0.00 W1 H +ATOM 21512 H2 TIP3X6341 18.829 2.927 14.195 1.00 0.00 W1 H +ATOM 21513 OH2 TIP3X6342 24.964 4.161 0.562 1.00 0.00 W1 O +ATOM 21514 H1 TIP3X6342 24.798 4.458 -0.333 1.00 0.00 W1 H +ATOM 21515 H2 TIP3X6342 24.093 4.038 0.939 1.00 0.00 W1 H +ATOM 21516 OH2 TIP3X6343 30.361 11.922 3.610 1.00 0.00 W1 O +ATOM 21517 H1 TIP3X6343 30.934 11.185 3.823 1.00 0.00 W1 H +ATOM 21518 H2 TIP3X6343 30.030 12.221 4.457 1.00 0.00 W1 H +ATOM 21519 OH2 TIP3X6344 25.622 0.958 0.539 1.00 0.00 W1 O +ATOM 21520 H1 TIP3X6344 26.354 1.574 0.563 1.00 0.00 W1 H +ATOM 21521 H2 TIP3X6344 25.863 0.325 -0.138 1.00 0.00 W1 H +ATOM 21522 OH2 TIP3X6345 30.154 1.051 10.804 1.00 0.00 W1 O +ATOM 21523 H1 TIP3X6345 30.646 0.422 11.331 1.00 0.00 W1 H +ATOM 21524 H2 TIP3X6345 30.755 1.294 10.098 1.00 0.00 W1 H +ATOM 21525 OH2 TIP3X6346 22.658 11.691 13.992 1.00 0.00 W1 O +ATOM 21526 H1 TIP3X6346 22.882 11.313 14.843 1.00 0.00 W1 H +ATOM 21527 H2 TIP3X6346 22.052 11.062 13.602 1.00 0.00 W1 H +ATOM 21528 OH2 TIP3X6347 26.138 2.995 9.405 1.00 0.00 W1 O +ATOM 21529 H1 TIP3X6347 26.197 2.814 10.343 1.00 0.00 W1 H +ATOM 21530 H2 TIP3X6347 25.199 3.083 9.236 1.00 0.00 W1 H +ATOM 21531 OH2 TIP3X6348 22.329 3.652 13.584 1.00 0.00 W1 O +ATOM 21532 H1 TIP3X6348 21.462 3.582 13.184 1.00 0.00 W1 H +ATOM 21533 H2 TIP3X6348 22.274 3.112 14.372 1.00 0.00 W1 H +ATOM 21534 OH2 TIP3X6349 29.815 6.373 15.337 1.00 0.00 W1 O +ATOM 21535 H1 TIP3X6349 30.610 5.839 15.320 1.00 0.00 W1 H +ATOM 21536 H2 TIP3X6349 29.521 6.338 16.247 1.00 0.00 W1 H +ATOM 21537 OH2 TIP3X6350 18.000 0.239 11.255 1.00 0.00 W1 O +ATOM 21538 H1 TIP3X6350 17.775 0.693 10.443 1.00 0.00 W1 H +ATOM 21539 H2 TIP3X6350 18.830 -0.197 11.064 1.00 0.00 W1 H +ATOM 21540 OH2 TIP3X6351 24.095 0.697 6.337 1.00 0.00 W1 O +ATOM 21541 H1 TIP3X6351 24.577 1.211 5.689 1.00 0.00 W1 H +ATOM 21542 H2 TIP3X6351 24.439 0.991 7.181 1.00 0.00 W1 H +ATOM 21543 OH2 TIP3X6352 19.090 5.945 10.801 1.00 0.00 W1 O +ATOM 21544 H1 TIP3X6352 19.005 6.737 11.333 1.00 0.00 W1 H +ATOM 21545 H2 TIP3X6352 20.005 5.941 10.520 1.00 0.00 W1 H +ATOM 21546 OH2 TIP3X6353 27.293 3.233 1.746 1.00 0.00 W1 O +ATOM 21547 H1 TIP3X6353 26.585 3.722 1.326 1.00 0.00 W1 H +ATOM 21548 H2 TIP3X6353 28.018 3.277 1.123 1.00 0.00 W1 H +ATOM 21549 OH2 TIP3X6354 15.843 4.120 12.834 1.00 0.00 W1 O +ATOM 21550 H1 TIP3X6354 14.939 4.414 12.945 1.00 0.00 W1 H +ATOM 21551 H2 TIP3X6354 15.984 3.501 13.551 1.00 0.00 W1 H +ATOM 21552 OH2 TIP3X6355 16.987 0.957 8.817 1.00 0.00 W1 O +ATOM 21553 H1 TIP3X6355 17.094 0.256 8.174 1.00 0.00 W1 H +ATOM 21554 H2 TIP3X6355 17.122 1.763 8.318 1.00 0.00 W1 H +ATOM 21555 OH2 TIP3X6356 28.508 4.585 13.704 1.00 0.00 W1 O +ATOM 21556 H1 TIP3X6356 28.820 5.164 14.400 1.00 0.00 W1 H +ATOM 21557 H2 TIP3X6356 27.564 4.521 13.849 1.00 0.00 W1 H +ATOM 21558 OH2 TIP3X6357 25.551 4.591 13.651 1.00 0.00 W1 O +ATOM 21559 H1 TIP3X6357 25.192 5.159 12.970 1.00 0.00 W1 H +ATOM 21560 H2 TIP3X6357 25.214 3.721 13.440 1.00 0.00 W1 H +ATOM 21561 OH2 TIP3X6358 23.754 5.060 3.517 1.00 0.00 W1 O +ATOM 21562 H1 TIP3X6358 23.843 5.640 2.760 1.00 0.00 W1 H +ATOM 21563 H2 TIP3X6358 22.985 4.526 3.320 1.00 0.00 W1 H +ATOM 21564 OH2 TIP3X6359 22.057 4.392 1.204 1.00 0.00 W1 O +ATOM 21565 H1 TIP3X6359 21.620 4.584 0.375 1.00 0.00 W1 H +ATOM 21566 H2 TIP3X6359 21.650 3.581 1.508 1.00 0.00 W1 H +ATOM 21567 OH2 TIP3X6360 22.768 1.454 14.993 1.00 0.00 W1 O +ATOM 21568 H1 TIP3X6360 22.301 1.066 15.734 1.00 0.00 W1 H +ATOM 21569 H2 TIP3X6360 23.682 1.486 15.276 1.00 0.00 W1 H +ATOM 21570 OH2 TIP3X6361 28.331 6.798 11.675 1.00 0.00 W1 O +ATOM 21571 H1 TIP3X6361 28.350 6.149 12.378 1.00 0.00 W1 H +ATOM 21572 H2 TIP3X6361 27.496 6.647 11.231 1.00 0.00 W1 H +ATOM 21573 OH2 TIP3X6362 16.324 15.392 0.631 1.00 0.00 W1 O +ATOM 21574 H1 TIP3X6362 16.740 14.645 1.060 1.00 0.00 W1 H +ATOM 21575 H2 TIP3X6362 16.337 16.086 1.291 1.00 0.00 W1 H +ATOM 21576 OH2 TIP3X6363 25.072 3.552 5.624 1.00 0.00 W1 O +ATOM 21577 H1 TIP3X6363 24.735 3.903 4.800 1.00 0.00 W1 H +ATOM 21578 H2 TIP3X6363 25.969 3.285 5.423 1.00 0.00 W1 H +ATOM 21579 OH2 TIP3X6364 20.528 2.863 7.368 1.00 0.00 W1 O +ATOM 21580 H1 TIP3X6364 19.585 2.815 7.209 1.00 0.00 W1 H +ATOM 21581 H2 TIP3X6364 20.667 3.737 7.732 1.00 0.00 W1 H +ATOM 21582 OH2 TIP3X6365 19.890 3.316 12.222 1.00 0.00 W1 O +ATOM 21583 H1 TIP3X6365 19.912 2.510 11.706 1.00 0.00 W1 H +ATOM 21584 H2 TIP3X6365 19.496 3.964 11.638 1.00 0.00 W1 H +ATOM 21585 OH2 TIP3X6366 20.473 9.851 8.027 1.00 0.00 W1 O +ATOM 21586 H1 TIP3X6366 20.402 8.916 7.839 1.00 0.00 W1 H +ATOM 21587 H2 TIP3X6366 20.478 9.905 8.983 1.00 0.00 W1 H +ATOM 21588 OH2 TIP3X6367 24.662 6.870 12.589 1.00 0.00 W1 O +ATOM 21589 H1 TIP3X6367 25.074 7.701 12.826 1.00 0.00 W1 H +ATOM 21590 H2 TIP3X6367 24.113 7.081 11.835 1.00 0.00 W1 H +ATOM 21591 OH2 TIP3X6368 30.458 2.237 1.914 1.00 0.00 W1 O +ATOM 21592 H1 TIP3X6368 30.892 2.464 2.736 1.00 0.00 W1 H +ATOM 21593 H2 TIP3X6368 29.938 1.461 2.123 1.00 0.00 W1 H +ATOM 21594 OH2 TIP3X6369 28.316 6.713 2.160 1.00 0.00 W1 O +ATOM 21595 H1 TIP3X6369 27.451 6.514 2.519 1.00 0.00 W1 H +ATOM 21596 H2 TIP3X6369 28.873 6.834 2.929 1.00 0.00 W1 H +ATOM 21597 OH2 TIP3X6370 23.149 6.967 8.630 1.00 0.00 W1 O +ATOM 21598 H1 TIP3X6370 23.246 7.764 9.152 1.00 0.00 W1 H +ATOM 21599 H2 TIP3X6370 24.023 6.577 8.622 1.00 0.00 W1 H +ATOM 21600 OH2 TIP3X6371 25.789 8.964 14.482 1.00 0.00 W1 O +ATOM 21601 H1 TIP3X6371 25.111 9.248 15.095 1.00 0.00 W1 H +ATOM 21602 H2 TIP3X6371 26.587 8.923 15.009 1.00 0.00 W1 H +ATOM 21603 OH2 TIP3X6372 18.298 8.379 12.178 1.00 0.00 W1 O +ATOM 21604 H1 TIP3X6372 18.815 8.785 12.874 1.00 0.00 W1 H +ATOM 21605 H2 TIP3X6372 17.916 9.117 11.703 1.00 0.00 W1 H +ATOM 21606 OH2 TIP3X6373 17.205 6.342 13.800 1.00 0.00 W1 O +ATOM 21607 H1 TIP3X6373 17.001 5.502 13.387 1.00 0.00 W1 H +ATOM 21608 H2 TIP3X6373 17.081 6.987 13.104 1.00 0.00 W1 H +ATOM 21609 OH2 TIP3X6374 27.856 9.480 0.810 1.00 0.00 W1 O +ATOM 21610 H1 TIP3X6374 28.562 9.978 0.398 1.00 0.00 W1 H +ATOM 21611 H2 TIP3X6374 28.305 8.849 1.373 1.00 0.00 W1 H +ATOM 21612 OH2 TIP3X6375 30.453 6.827 4.172 1.00 0.00 W1 O +ATOM 21613 H1 TIP3X6375 30.165 7.000 5.069 1.00 0.00 W1 H +ATOM 21614 H2 TIP3X6375 30.965 7.598 3.932 1.00 0.00 W1 H +ATOM 21615 OH2 TIP3X6376 19.737 14.451 2.158 1.00 0.00 W1 O +ATOM 21616 H1 TIP3X6376 19.508 14.811 1.301 1.00 0.00 W1 H +ATOM 21617 H2 TIP3X6376 19.324 13.587 2.174 1.00 0.00 W1 H +ATOM 21618 OH2 TIP3X6377 19.930 10.523 13.731 1.00 0.00 W1 O +ATOM 21619 H1 TIP3X6377 19.357 11.125 13.257 1.00 0.00 W1 H +ATOM 21620 H2 TIP3X6377 19.456 10.327 14.539 1.00 0.00 W1 H +ATOM 21621 OH2 TIP3X6378 23.006 15.266 11.422 1.00 0.00 W1 O +ATOM 21622 H1 TIP3X6378 23.324 14.972 12.275 1.00 0.00 W1 H +ATOM 21623 H2 TIP3X6378 23.439 14.689 10.793 1.00 0.00 W1 H +ATOM 21624 OH2 TIP3X6379 27.712 15.508 5.555 1.00 0.00 W1 O +ATOM 21625 H1 TIP3X6379 27.300 14.817 5.037 1.00 0.00 W1 H +ATOM 21626 H2 TIP3X6379 27.516 16.315 5.079 1.00 0.00 W1 H +ATOM 21627 OH2 TIP3X6380 24.290 12.190 2.807 1.00 0.00 W1 O +ATOM 21628 H1 TIP3X6380 24.549 12.976 2.325 1.00 0.00 W1 H +ATOM 21629 H2 TIP3X6380 23.721 12.514 3.505 1.00 0.00 W1 H +ATOM 21630 OH2 TIP3X6381 27.709 2.068 11.670 1.00 0.00 W1 O +ATOM 21631 H1 TIP3X6381 28.514 1.838 11.206 1.00 0.00 W1 H +ATOM 21632 H2 TIP3X6381 27.999 2.621 12.395 1.00 0.00 W1 H +ATOM 21633 OH2 TIP3X6382 26.436 8.758 9.672 1.00 0.00 W1 O +ATOM 21634 H1 TIP3X6382 26.981 9.419 10.098 1.00 0.00 W1 H +ATOM 21635 H2 TIP3X6382 26.895 8.557 8.856 1.00 0.00 W1 H +ATOM 21636 OH2 TIP3X6383 25.258 13.731 0.749 1.00 0.00 W1 O +ATOM 21637 H1 TIP3X6383 26.083 13.766 1.234 1.00 0.00 W1 H +ATOM 21638 H2 TIP3X6383 25.461 13.219 -0.033 1.00 0.00 W1 H +ATOM 21639 OH2 TIP3X6384 25.250 11.519 12.400 1.00 0.00 W1 O +ATOM 21640 H1 TIP3X6384 24.429 11.766 12.826 1.00 0.00 W1 H +ATOM 21641 H2 TIP3X6384 25.021 11.423 11.476 1.00 0.00 W1 H +ATOM 21642 OH2 TIP3X6385 18.440 12.656 12.998 1.00 0.00 W1 O +ATOM 21643 H1 TIP3X6385 19.174 13.267 12.933 1.00 0.00 W1 H +ATOM 21644 H2 TIP3X6385 18.128 12.750 13.898 1.00 0.00 W1 H +ATOM 21645 OH2 TIP3X6386 18.030 14.360 7.100 1.00 0.00 W1 O +ATOM 21646 H1 TIP3X6386 17.444 13.619 6.946 1.00 0.00 W1 H +ATOM 21647 H2 TIP3X6386 18.473 14.494 6.261 1.00 0.00 W1 H +ATOM 21648 OH2 TIP3X6387 26.384 0.374 8.180 1.00 0.00 W1 O +ATOM 21649 H1 TIP3X6387 26.716 0.298 7.286 1.00 0.00 W1 H +ATOM 21650 H2 TIP3X6387 26.339 1.316 8.341 1.00 0.00 W1 H +ATOM 21651 OH2 TIP3X6388 23.622 2.502 8.415 1.00 0.00 W1 O +ATOM 21652 H1 TIP3X6388 23.260 2.991 7.676 1.00 0.00 W1 H +ATOM 21653 H2 TIP3X6388 22.890 2.413 9.025 1.00 0.00 W1 H +ATOM 21654 OH2 TIP3X6389 22.341 0.487 2.343 1.00 0.00 W1 O +ATOM 21655 H1 TIP3X6389 23.196 0.232 2.688 1.00 0.00 W1 H +ATOM 21656 H2 TIP3X6389 21.822 -0.317 2.368 1.00 0.00 W1 H +ATOM 21657 OH2 TIP3X6390 25.092 0.331 3.386 1.00 0.00 W1 O +ATOM 21658 H1 TIP3X6390 25.548 -0.405 3.795 1.00 0.00 W1 H +ATOM 21659 H2 TIP3X6390 25.500 0.417 2.524 1.00 0.00 W1 H +ATOM 21660 OH2 TIP3X6391 19.732 14.909 14.841 1.00 0.00 W1 O +ATOM 21661 H1 TIP3X6391 19.481 15.666 14.311 1.00 0.00 W1 H +ATOM 21662 H2 TIP3X6391 20.643 14.740 14.602 1.00 0.00 W1 H +ATOM 21663 OH2 TIP3X6392 24.738 13.604 5.141 1.00 0.00 W1 O +ATOM 21664 H1 TIP3X6392 25.399 12.962 5.401 1.00 0.00 W1 H +ATOM 21665 H2 TIP3X6392 24.725 14.238 5.858 1.00 0.00 W1 H +ATOM 21666 OH2 TIP3X6393 22.478 14.506 14.051 1.00 0.00 W1 O +ATOM 21667 H1 TIP3X6393 22.695 13.614 14.321 1.00 0.00 W1 H +ATOM 21668 H2 TIP3X6393 23.085 15.060 14.540 1.00 0.00 W1 H +ATOM 21669 OH2 TIP3X6394 21.424 2.624 4.095 1.00 0.00 W1 O +ATOM 21670 H1 TIP3X6394 22.081 1.965 3.873 1.00 0.00 W1 H +ATOM 21671 H2 TIP3X6394 21.467 2.693 5.049 1.00 0.00 W1 H +ATOM 21672 OH2 TIP3X6395 27.257 13.690 3.153 1.00 0.00 W1 O +ATOM 21673 H1 TIP3X6395 27.402 12.749 3.256 1.00 0.00 W1 H +ATOM 21674 H2 TIP3X6395 28.080 14.022 2.795 1.00 0.00 W1 H +ATOM 21675 OH2 TIP3X6396 28.925 0.456 14.380 1.00 0.00 W1 O +ATOM 21676 H1 TIP3X6396 28.311 0.530 13.649 1.00 0.00 W1 H +ATOM 21677 H2 TIP3X6396 29.694 0.951 14.098 1.00 0.00 W1 H +ATOM 21678 OH2 TIP3X6397 19.718 14.669 4.866 1.00 0.00 W1 O +ATOM 21679 H1 TIP3X6397 19.712 14.714 3.910 1.00 0.00 W1 H +ATOM 21680 H2 TIP3X6397 20.526 15.115 5.122 1.00 0.00 W1 H +ATOM 21681 OH2 TIP3X6398 30.627 13.608 12.816 1.00 0.00 W1 O +ATOM 21682 H1 TIP3X6398 29.905 14.159 13.117 1.00 0.00 W1 H +ATOM 21683 H2 TIP3X6398 31.415 14.107 13.030 1.00 0.00 W1 H +ATOM 21684 OH2 TIP3X6399 17.576 11.057 19.866 1.00 0.00 W1 O +ATOM 21685 H1 TIP3X6399 17.759 10.981 20.803 1.00 0.00 W1 H +ATOM 21686 H2 TIP3X6399 17.552 11.999 19.702 1.00 0.00 W1 H +ATOM 21687 OH2 TIP3X6400 28.679 8.548 23.605 1.00 0.00 W1 O +ATOM 21688 H1 TIP3X6400 28.914 8.812 22.715 1.00 0.00 W1 H +ATOM 21689 H2 TIP3X6400 29.508 8.284 24.003 1.00 0.00 W1 H +ATOM 21690 OH2 TIP3X6401 20.663 8.271 19.583 1.00 0.00 W1 O +ATOM 21691 H1 TIP3X6401 20.693 9.181 19.880 1.00 0.00 W1 H +ATOM 21692 H2 TIP3X6401 21.170 7.788 20.235 1.00 0.00 W1 H +ATOM 21693 OH2 TIP3X6402 28.466 12.431 21.727 1.00 0.00 W1 O +ATOM 21694 H1 TIP3X6402 28.191 12.921 22.502 1.00 0.00 W1 H +ATOM 21695 H2 TIP3X6402 27.941 11.631 21.750 1.00 0.00 W1 H +ATOM 21696 OH2 TIP3X6403 26.983 10.874 18.770 1.00 0.00 W1 O +ATOM 21697 H1 TIP3X6403 27.145 10.645 17.855 1.00 0.00 W1 H +ATOM 21698 H2 TIP3X6403 26.054 11.103 18.799 1.00 0.00 W1 H +ATOM 21699 OH2 TIP3X6404 30.830 11.406 23.554 1.00 0.00 W1 O +ATOM 21700 H1 TIP3X6404 30.278 11.489 22.777 1.00 0.00 W1 H +ATOM 21701 H2 TIP3X6404 30.220 11.189 24.259 1.00 0.00 W1 H +ATOM 21702 OH2 TIP3X6405 17.467 12.670 26.005 1.00 0.00 W1 O +ATOM 21703 H1 TIP3X6405 17.873 12.873 26.848 1.00 0.00 W1 H +ATOM 21704 H2 TIP3X6405 16.895 11.924 26.188 1.00 0.00 W1 H +ATOM 21705 OH2 TIP3X6406 24.842 14.295 25.231 1.00 0.00 W1 O +ATOM 21706 H1 TIP3X6406 25.143 13.394 25.353 1.00 0.00 W1 H +ATOM 21707 H2 TIP3X6406 25.467 14.675 24.614 1.00 0.00 W1 H +ATOM 21708 OH2 TIP3X6407 28.274 14.251 25.111 1.00 0.00 W1 O +ATOM 21709 H1 TIP3X6407 27.839 15.075 24.892 1.00 0.00 W1 H +ATOM 21710 H2 TIP3X6407 29.203 14.477 25.161 1.00 0.00 W1 H +ATOM 21711 OH2 TIP3X6408 20.722 13.826 24.241 1.00 0.00 W1 O +ATOM 21712 H1 TIP3X6408 21.078 14.675 23.977 1.00 0.00 W1 H +ATOM 21713 H2 TIP3X6408 19.787 13.886 24.045 1.00 0.00 W1 H +ATOM 21714 OH2 TIP3X6409 25.564 5.719 23.142 1.00 0.00 W1 O +ATOM 21715 H1 TIP3X6409 25.486 4.909 22.638 1.00 0.00 W1 H +ATOM 21716 H2 TIP3X6409 26.506 5.858 23.230 1.00 0.00 W1 H +ATOM 21717 OH2 TIP3X6410 21.587 1.816 25.504 1.00 0.00 W1 O +ATOM 21718 H1 TIP3X6410 21.844 1.079 26.057 1.00 0.00 W1 H +ATOM 21719 H2 TIP3X6410 20.910 1.460 24.929 1.00 0.00 W1 H +ATOM 21720 OH2 TIP3X6411 29.830 2.821 21.927 1.00 0.00 W1 O +ATOM 21721 H1 TIP3X6411 29.523 3.159 22.768 1.00 0.00 W1 H +ATOM 21722 H2 TIP3X6411 29.898 1.875 22.059 1.00 0.00 W1 H +ATOM 21723 OH2 TIP3X6412 28.428 4.016 23.881 1.00 0.00 W1 O +ATOM 21724 H1 TIP3X6412 29.003 3.788 24.612 1.00 0.00 W1 H +ATOM 21725 H2 TIP3X6412 27.553 3.761 24.176 1.00 0.00 W1 H +ATOM 21726 OH2 TIP3X6413 21.474 5.141 25.252 1.00 0.00 W1 O +ATOM 21727 H1 TIP3X6413 21.978 4.438 25.664 1.00 0.00 W1 H +ATOM 21728 H2 TIP3X6413 22.132 5.783 24.986 1.00 0.00 W1 H +ATOM 21729 OH2 TIP3X6414 28.951 6.189 22.150 1.00 0.00 W1 O +ATOM 21730 H1 TIP3X6414 28.992 5.289 22.474 1.00 0.00 W1 H +ATOM 21731 H2 TIP3X6414 28.833 6.722 22.936 1.00 0.00 W1 H +ATOM 21732 OH2 TIP3X6415 27.636 2.832 20.018 1.00 0.00 W1 O +ATOM 21733 H1 TIP3X6415 28.461 3.017 20.467 1.00 0.00 W1 H +ATOM 21734 H2 TIP3X6415 27.712 3.287 19.179 1.00 0.00 W1 H +ATOM 21735 OH2 TIP3X6416 23.818 8.804 26.090 1.00 0.00 W1 O +ATOM 21736 H1 TIP3X6416 24.695 8.826 25.707 1.00 0.00 W1 H +ATOM 21737 H2 TIP3X6416 23.553 9.722 26.136 1.00 0.00 W1 H +ATOM 21738 OH2 TIP3X6417 22.969 11.352 25.900 1.00 0.00 W1 O +ATOM 21739 H1 TIP3X6417 22.944 11.579 24.970 1.00 0.00 W1 H +ATOM 21740 H2 TIP3X6417 22.049 11.298 26.158 1.00 0.00 W1 H +ATOM 21741 OH2 TIP3X6418 17.832 3.233 22.738 1.00 0.00 W1 O +ATOM 21742 H1 TIP3X6418 17.506 4.113 22.929 1.00 0.00 W1 H +ATOM 21743 H2 TIP3X6418 17.708 3.131 21.794 1.00 0.00 W1 H +ATOM 21744 OH2 TIP3X6419 19.988 6.791 22.750 1.00 0.00 W1 O +ATOM 21745 H1 TIP3X6419 19.305 6.341 22.253 1.00 0.00 W1 H +ATOM 21746 H2 TIP3X6419 20.473 6.087 23.182 1.00 0.00 W1 H +ATOM 21747 OH2 TIP3X6420 26.043 11.715 25.147 1.00 0.00 W1 O +ATOM 21748 H1 TIP3X6420 25.801 11.129 24.430 1.00 0.00 W1 H +ATOM 21749 H2 TIP3X6420 26.993 11.626 25.219 1.00 0.00 W1 H +ATOM 21750 OH2 TIP3X6421 30.341 15.350 21.927 1.00 0.00 W1 O +ATOM 21751 H1 TIP3X6421 30.336 14.882 22.762 1.00 0.00 W1 H +ATOM 21752 H2 TIP3X6421 29.461 15.221 21.574 1.00 0.00 W1 H +ATOM 21753 OH2 TIP3X6422 22.213 11.686 22.949 1.00 0.00 W1 O +ATOM 21754 H1 TIP3X6422 21.642 10.967 23.218 1.00 0.00 W1 H +ATOM 21755 H2 TIP3X6422 21.753 12.476 23.232 1.00 0.00 W1 H +ATOM 21756 OH2 TIP3X6423 24.435 2.138 27.520 1.00 0.00 W1 O +ATOM 21757 H1 TIP3X6423 23.692 2.617 27.887 1.00 0.00 W1 H +ATOM 21758 H2 TIP3X6423 24.054 1.326 27.185 1.00 0.00 W1 H +ATOM 21759 OH2 TIP3X6424 19.787 2.843 17.321 1.00 0.00 W1 O +ATOM 21760 H1 TIP3X6424 19.689 2.181 18.006 1.00 0.00 W1 H +ATOM 21761 H2 TIP3X6424 19.603 2.374 16.507 1.00 0.00 W1 H +ATOM 21762 OH2 TIP3X6425 30.680 3.764 25.511 1.00 0.00 W1 O +ATOM 21763 H1 TIP3X6425 31.199 4.433 25.063 1.00 0.00 W1 H +ATOM 21764 H2 TIP3X6425 31.122 3.640 26.351 1.00 0.00 W1 H +ATOM 21765 OH2 TIP3X6426 16.738 0.117 19.671 1.00 0.00 W1 O +ATOM 21766 H1 TIP3X6426 17.463 0.738 19.740 1.00 0.00 W1 H +ATOM 21767 H2 TIP3X6426 16.366 0.084 20.552 1.00 0.00 W1 H +ATOM 21768 OH2 TIP3X6427 22.004 6.353 29.657 1.00 0.00 W1 O +ATOM 21769 H1 TIP3X6427 22.868 6.751 29.556 1.00 0.00 W1 H +ATOM 21770 H2 TIP3X6427 22.156 5.416 29.534 1.00 0.00 W1 H +ATOM 21771 OH2 TIP3X6428 25.170 11.263 22.397 1.00 0.00 W1 O +ATOM 21772 H1 TIP3X6428 25.264 10.400 21.993 1.00 0.00 W1 H +ATOM 21773 H2 TIP3X6428 24.237 11.463 22.321 1.00 0.00 W1 H +ATOM 21774 OH2 TIP3X6429 23.782 9.547 19.928 1.00 0.00 W1 O +ATOM 21775 H1 TIP3X6429 23.218 8.933 20.397 1.00 0.00 W1 H +ATOM 21776 H2 TIP3X6429 23.308 10.378 19.956 1.00 0.00 W1 H +ATOM 21777 OH2 TIP3X6430 16.320 10.060 26.385 1.00 0.00 W1 O +ATOM 21778 H1 TIP3X6430 15.785 9.458 25.867 1.00 0.00 W1 H +ATOM 21779 H2 TIP3X6430 15.849 10.146 27.214 1.00 0.00 W1 H +ATOM 21780 OH2 TIP3X6431 27.616 9.081 20.752 1.00 0.00 W1 O +ATOM 21781 H1 TIP3X6431 27.560 8.166 20.476 1.00 0.00 W1 H +ATOM 21782 H2 TIP3X6431 27.444 9.583 19.956 1.00 0.00 W1 H +ATOM 21783 OH2 TIP3X6432 27.913 9.595 27.777 1.00 0.00 W1 O +ATOM 21784 H1 TIP3X6432 27.011 9.678 28.084 1.00 0.00 W1 H +ATOM 21785 H2 TIP3X6432 28.082 8.653 27.780 1.00 0.00 W1 H +ATOM 21786 OH2 TIP3X6433 30.280 7.554 25.582 1.00 0.00 W1 O +ATOM 21787 H1 TIP3X6433 30.942 6.873 25.463 1.00 0.00 W1 H +ATOM 21788 H2 TIP3X6433 29.564 7.115 26.041 1.00 0.00 W1 H +ATOM 21789 OH2 TIP3X6434 19.424 7.241 30.727 1.00 0.00 W1 O +ATOM 21790 H1 TIP3X6434 18.895 7.007 29.964 1.00 0.00 W1 H +ATOM 21791 H2 TIP3X6434 20.320 7.289 30.392 1.00 0.00 W1 H +ATOM 21792 OH2 TIP3X6435 20.335 10.447 26.288 1.00 0.00 W1 O +ATOM 21793 H1 TIP3X6435 20.290 9.892 27.067 1.00 0.00 W1 H +ATOM 21794 H2 TIP3X6435 19.702 11.145 26.454 1.00 0.00 W1 H +ATOM 21795 OH2 TIP3X6436 29.006 11.577 26.038 1.00 0.00 W1 O +ATOM 21796 H1 TIP3X6436 29.430 12.345 26.422 1.00 0.00 W1 H +ATOM 21797 H2 TIP3X6436 28.702 11.069 26.790 1.00 0.00 W1 H +ATOM 21798 OH2 TIP3X6437 27.094 13.553 27.863 1.00 0.00 W1 O +ATOM 21799 H1 TIP3X6437 26.387 12.924 27.720 1.00 0.00 W1 H +ATOM 21800 H2 TIP3X6437 27.423 13.747 26.985 1.00 0.00 W1 H +ATOM 21801 OH2 TIP3X6438 27.345 12.089 30.259 1.00 0.00 W1 O +ATOM 21802 H1 TIP3X6438 26.711 11.482 29.875 1.00 0.00 W1 H +ATOM 21803 H2 TIP3X6438 27.458 12.769 29.595 1.00 0.00 W1 H +ATOM 21804 OH2 TIP3X6439 30.955 13.997 24.326 1.00 0.00 W1 O +ATOM 21805 H1 TIP3X6439 31.633 13.838 24.982 1.00 0.00 W1 H +ATOM 21806 H2 TIP3X6439 30.721 13.126 24.007 1.00 0.00 W1 H +ATOM 21807 OH2 TIP3X6440 21.511 0.468 22.718 1.00 0.00 W1 O +ATOM 21808 H1 TIP3X6440 21.220 1.378 22.657 1.00 0.00 W1 H +ATOM 21809 H2 TIP3X6440 22.343 0.451 22.245 1.00 0.00 W1 H +ATOM 21810 OH2 TIP3X6441 23.635 10.415 16.373 1.00 0.00 W1 O +ATOM 21811 H1 TIP3X6441 22.940 9.793 16.587 1.00 0.00 W1 H +ATOM 21812 H2 TIP3X6441 23.618 11.051 17.088 1.00 0.00 W1 H +ATOM 21813 OH2 TIP3X6442 31.016 9.178 15.809 1.00 0.00 W1 O +ATOM 21814 H1 TIP3X6442 30.753 8.428 15.275 1.00 0.00 W1 H +ATOM 21815 H2 TIP3X6442 30.761 9.942 15.292 1.00 0.00 W1 H +ATOM 21816 OH2 TIP3X6443 16.964 12.875 15.526 1.00 0.00 W1 O +ATOM 21817 H1 TIP3X6443 17.409 12.326 16.172 1.00 0.00 W1 H +ATOM 21818 H2 TIP3X6443 16.067 12.541 15.505 1.00 0.00 W1 H +ATOM 21819 OH2 TIP3X6444 29.057 15.004 16.785 1.00 0.00 W1 O +ATOM 21820 H1 TIP3X6444 29.942 14.676 16.626 1.00 0.00 W1 H +ATOM 21821 H2 TIP3X6444 28.827 15.472 15.982 1.00 0.00 W1 H +ATOM 21822 OH2 TIP3X6445 30.449 10.666 28.862 1.00 0.00 W1 O +ATOM 21823 H1 TIP3X6445 30.340 11.615 28.921 1.00 0.00 W1 H +ATOM 21824 H2 TIP3X6445 29.557 10.321 28.852 1.00 0.00 W1 H +ATOM 21825 OH2 TIP3X6446 17.136 13.492 18.481 1.00 0.00 W1 O +ATOM 21826 H1 TIP3X6446 17.068 14.328 18.941 1.00 0.00 W1 H +ATOM 21827 H2 TIP3X6446 16.240 13.153 18.464 1.00 0.00 W1 H +ATOM 21828 OH2 TIP3X6447 29.716 11.985 16.125 1.00 0.00 W1 O +ATOM 21829 H1 TIP3X6447 29.747 11.905 17.079 1.00 0.00 W1 H +ATOM 21830 H2 TIP3X6447 28.883 12.422 15.948 1.00 0.00 W1 H +ATOM 21831 OH2 TIP3X6448 26.086 0.279 29.009 1.00 0.00 W1 O +ATOM 21832 H1 TIP3X6448 25.780 1.028 28.497 1.00 0.00 W1 H +ATOM 21833 H2 TIP3X6448 26.140 -0.438 28.377 1.00 0.00 W1 H +ATOM 21834 OH2 TIP3X6449 20.300 14.196 27.038 1.00 0.00 W1 O +ATOM 21835 H1 TIP3X6449 21.148 14.434 27.412 1.00 0.00 W1 H +ATOM 21836 H2 TIP3X6449 20.512 13.816 26.185 1.00 0.00 W1 H +ATOM 21837 OH2 TIP3X6450 18.766 2.214 30.389 1.00 0.00 W1 O +ATOM 21838 H1 TIP3X6450 17.889 2.304 30.763 1.00 0.00 W1 H +ATOM 21839 H2 TIP3X6450 18.829 2.927 29.752 1.00 0.00 W1 H +ATOM 21840 OH2 TIP3X6451 24.964 4.161 16.119 1.00 0.00 W1 O +ATOM 21841 H1 TIP3X6451 24.798 4.458 15.224 1.00 0.00 W1 H +ATOM 21842 H2 TIP3X6451 24.093 4.038 16.496 1.00 0.00 W1 H +ATOM 21843 OH2 TIP3X6452 30.361 11.922 19.167 1.00 0.00 W1 O +ATOM 21844 H1 TIP3X6452 30.934 11.185 19.380 1.00 0.00 W1 H +ATOM 21845 H2 TIP3X6452 30.030 12.221 20.014 1.00 0.00 W1 H +ATOM 21846 OH2 TIP3X6453 25.622 0.958 16.096 1.00 0.00 W1 O +ATOM 21847 H1 TIP3X6453 26.354 1.574 16.121 1.00 0.00 W1 H +ATOM 21848 H2 TIP3X6453 25.863 0.325 15.420 1.00 0.00 W1 H +ATOM 21849 OH2 TIP3X6454 30.154 1.051 26.361 1.00 0.00 W1 O +ATOM 21850 H1 TIP3X6454 30.646 0.422 26.889 1.00 0.00 W1 H +ATOM 21851 H2 TIP3X6454 30.755 1.294 25.656 1.00 0.00 W1 H +ATOM 21852 OH2 TIP3X6455 17.661 10.272 22.439 1.00 0.00 W1 O +ATOM 21853 H1 TIP3X6455 16.993 10.595 23.044 1.00 0.00 W1 H +ATOM 21854 H2 TIP3X6455 18.454 10.202 22.971 1.00 0.00 W1 H +ATOM 21855 OH2 TIP3X6456 22.658 11.691 29.549 1.00 0.00 W1 O +ATOM 21856 H1 TIP3X6456 22.882 11.313 30.400 1.00 0.00 W1 H +ATOM 21857 H2 TIP3X6456 22.052 11.062 29.159 1.00 0.00 W1 H +ATOM 21858 OH2 TIP3X6457 26.138 2.995 24.962 1.00 0.00 W1 O +ATOM 21859 H1 TIP3X6457 26.197 2.814 25.900 1.00 0.00 W1 H +ATOM 21860 H2 TIP3X6457 25.199 3.083 24.794 1.00 0.00 W1 H +ATOM 21861 OH2 TIP3X6458 22.329 3.652 29.141 1.00 0.00 W1 O +ATOM 21862 H1 TIP3X6458 21.462 3.582 28.741 1.00 0.00 W1 H +ATOM 21863 H2 TIP3X6458 22.274 3.112 29.929 1.00 0.00 W1 H +ATOM 21864 OH2 TIP3X6459 29.815 6.373 30.894 1.00 0.00 W1 O +ATOM 21865 H1 TIP3X6459 30.610 5.839 30.878 1.00 0.00 W1 H +ATOM 21866 H2 TIP3X6459 29.521 6.338 31.804 1.00 0.00 W1 H +ATOM 21867 OH2 TIP3X6460 18.000 0.239 26.813 1.00 0.00 W1 O +ATOM 21868 H1 TIP3X6460 17.775 0.693 26.000 1.00 0.00 W1 H +ATOM 21869 H2 TIP3X6460 18.830 -0.197 26.621 1.00 0.00 W1 H +ATOM 21870 OH2 TIP3X6461 24.095 0.697 21.894 1.00 0.00 W1 O +ATOM 21871 H1 TIP3X6461 24.577 1.211 21.247 1.00 0.00 W1 H +ATOM 21872 H2 TIP3X6461 24.439 0.991 22.738 1.00 0.00 W1 H +ATOM 21873 OH2 TIP3X6462 18.565 5.289 17.047 1.00 0.00 W1 O +ATOM 21874 H1 TIP3X6462 18.988 5.935 16.481 1.00 0.00 W1 H +ATOM 21875 H2 TIP3X6462 19.277 4.714 17.328 1.00 0.00 W1 H +ATOM 21876 OH2 TIP3X6463 19.090 5.945 26.358 1.00 0.00 W1 O +ATOM 21877 H1 TIP3X6463 19.005 6.737 26.890 1.00 0.00 W1 H +ATOM 21878 H2 TIP3X6463 20.005 5.941 26.078 1.00 0.00 W1 H +ATOM 21879 OH2 TIP3X6464 18.272 6.664 19.544 1.00 0.00 W1 O +ATOM 21880 H1 TIP3X6464 18.335 6.375 18.633 1.00 0.00 W1 H +ATOM 21881 H2 TIP3X6464 19.048 7.209 19.677 1.00 0.00 W1 H +ATOM 21882 OH2 TIP3X6465 27.293 3.233 17.304 1.00 0.00 W1 O +ATOM 21883 H1 TIP3X6465 26.585 3.722 16.884 1.00 0.00 W1 H +ATOM 21884 H2 TIP3X6465 28.018 3.277 16.680 1.00 0.00 W1 H +ATOM 21885 OH2 TIP3X6466 15.843 4.120 28.392 1.00 0.00 W1 O +ATOM 21886 H1 TIP3X6466 14.939 4.414 28.503 1.00 0.00 W1 H +ATOM 21887 H2 TIP3X6466 15.984 3.501 29.108 1.00 0.00 W1 H +ATOM 21888 OH2 TIP3X6467 16.987 0.957 24.374 1.00 0.00 W1 O +ATOM 21889 H1 TIP3X6467 17.094 0.256 23.732 1.00 0.00 W1 H +ATOM 21890 H2 TIP3X6467 17.122 1.763 23.875 1.00 0.00 W1 H +ATOM 21891 OH2 TIP3X6468 28.508 4.585 29.262 1.00 0.00 W1 O +ATOM 21892 H1 TIP3X6468 28.820 5.164 29.958 1.00 0.00 W1 H +ATOM 21893 H2 TIP3X6468 27.564 4.521 29.407 1.00 0.00 W1 H +ATOM 21894 OH2 TIP3X6469 25.551 4.591 29.209 1.00 0.00 W1 O +ATOM 21895 H1 TIP3X6469 25.192 5.159 28.528 1.00 0.00 W1 H +ATOM 21896 H2 TIP3X6469 25.214 3.721 28.998 1.00 0.00 W1 H +ATOM 21897 OH2 TIP3X6470 23.754 5.060 19.074 1.00 0.00 W1 O +ATOM 21898 H1 TIP3X6470 23.843 5.640 18.318 1.00 0.00 W1 H +ATOM 21899 H2 TIP3X6470 22.985 4.526 18.878 1.00 0.00 W1 H +ATOM 21900 OH2 TIP3X6471 22.057 4.392 16.762 1.00 0.00 W1 O +ATOM 21901 H1 TIP3X6471 21.620 4.584 15.932 1.00 0.00 W1 H +ATOM 21902 H2 TIP3X6471 21.650 3.581 17.065 1.00 0.00 W1 H +ATOM 21903 OH2 TIP3X6472 22.768 1.454 30.551 1.00 0.00 W1 O +ATOM 21904 H1 TIP3X6472 22.301 1.066 31.291 1.00 0.00 W1 H +ATOM 21905 H2 TIP3X6472 23.682 1.486 30.833 1.00 0.00 W1 H +ATOM 21906 OH2 TIP3X6473 28.331 6.798 27.232 1.00 0.00 W1 O +ATOM 21907 H1 TIP3X6473 28.350 6.149 27.935 1.00 0.00 W1 H +ATOM 21908 H2 TIP3X6473 27.496 6.647 26.788 1.00 0.00 W1 H +ATOM 21909 OH2 TIP3X6474 16.406 3.899 15.702 1.00 0.00 W1 O +ATOM 21910 H1 TIP3X6474 15.649 3.706 16.256 1.00 0.00 W1 H +ATOM 21911 H2 TIP3X6474 16.940 4.497 16.224 1.00 0.00 W1 H +ATOM 21912 OH2 TIP3X6475 16.324 15.392 16.189 1.00 0.00 W1 O +ATOM 21913 H1 TIP3X6475 16.740 14.645 16.618 1.00 0.00 W1 H +ATOM 21914 H2 TIP3X6475 16.337 16.086 16.848 1.00 0.00 W1 H +ATOM 21915 OH2 TIP3X6476 25.072 3.552 21.182 1.00 0.00 W1 O +ATOM 21916 H1 TIP3X6476 24.735 3.903 20.357 1.00 0.00 W1 H +ATOM 21917 H2 TIP3X6476 25.969 3.285 20.980 1.00 0.00 W1 H +ATOM 21918 OH2 TIP3X6477 20.528 2.863 22.926 1.00 0.00 W1 O +ATOM 21919 H1 TIP3X6477 19.585 2.815 22.767 1.00 0.00 W1 H +ATOM 21920 H2 TIP3X6477 20.667 3.737 23.289 1.00 0.00 W1 H +ATOM 21921 OH2 TIP3X6478 15.890 3.989 19.719 1.00 0.00 W1 O +ATOM 21922 H1 TIP3X6478 15.616 3.864 20.628 1.00 0.00 W1 H +ATOM 21923 H2 TIP3X6478 15.695 4.907 19.533 1.00 0.00 W1 H +ATOM 21924 OH2 TIP3X6479 19.890 3.316 27.779 1.00 0.00 W1 O +ATOM 21925 H1 TIP3X6479 19.912 2.510 27.264 1.00 0.00 W1 H +ATOM 21926 H2 TIP3X6479 19.496 3.964 27.195 1.00 0.00 W1 H +ATOM 21927 OH2 TIP3X6480 20.473 9.851 23.584 1.00 0.00 W1 O +ATOM 21928 H1 TIP3X6480 20.402 8.916 23.397 1.00 0.00 W1 H +ATOM 21929 H2 TIP3X6480 20.478 9.905 24.540 1.00 0.00 W1 H +ATOM 21930 OH2 TIP3X6481 24.662 6.870 28.147 1.00 0.00 W1 O +ATOM 21931 H1 TIP3X6481 25.074 7.701 28.383 1.00 0.00 W1 H +ATOM 21932 H2 TIP3X6481 24.113 7.081 27.392 1.00 0.00 W1 H +ATOM 21933 OH2 TIP3X6482 30.458 2.237 17.471 1.00 0.00 W1 O +ATOM 21934 H1 TIP3X6482 30.892 2.464 18.293 1.00 0.00 W1 H +ATOM 21935 H2 TIP3X6482 29.938 1.461 17.681 1.00 0.00 W1 H +ATOM 21936 OH2 TIP3X6483 21.612 8.197 16.649 1.00 0.00 W1 O +ATOM 21937 H1 TIP3X6483 21.323 8.075 17.554 1.00 0.00 W1 H +ATOM 21938 H2 TIP3X6483 22.301 7.543 16.528 1.00 0.00 W1 H +ATOM 21939 OH2 TIP3X6484 28.316 6.713 17.717 1.00 0.00 W1 O +ATOM 21940 H1 TIP3X6484 27.451 6.514 18.076 1.00 0.00 W1 H +ATOM 21941 H2 TIP3X6484 28.873 6.834 18.486 1.00 0.00 W1 H +ATOM 21942 OH2 TIP3X6485 23.149 6.967 24.188 1.00 0.00 W1 O +ATOM 21943 H1 TIP3X6485 23.246 7.764 24.709 1.00 0.00 W1 H +ATOM 21944 H2 TIP3X6485 24.023 6.577 24.179 1.00 0.00 W1 H +ATOM 21945 OH2 TIP3X6486 22.894 7.348 21.104 1.00 0.00 W1 O +ATOM 21946 H1 TIP3X6486 23.515 6.752 20.686 1.00 0.00 W1 H +ATOM 21947 H2 TIP3X6486 22.919 7.111 22.030 1.00 0.00 W1 H +ATOM 21948 OH2 TIP3X6487 25.789 8.964 30.039 1.00 0.00 W1 O +ATOM 21949 H1 TIP3X6487 25.111 9.248 30.653 1.00 0.00 W1 H +ATOM 21950 H2 TIP3X6487 26.587 8.923 30.566 1.00 0.00 W1 H +ATOM 21951 OH2 TIP3X6488 18.298 8.379 27.736 1.00 0.00 W1 O +ATOM 21952 H1 TIP3X6488 18.815 8.785 28.432 1.00 0.00 W1 H +ATOM 21953 H2 TIP3X6488 17.916 9.117 27.260 1.00 0.00 W1 H +ATOM 21954 OH2 TIP3X6489 17.205 6.342 29.357 1.00 0.00 W1 O +ATOM 21955 H1 TIP3X6489 17.001 5.502 28.945 1.00 0.00 W1 H +ATOM 21956 H2 TIP3X6489 17.081 6.987 28.662 1.00 0.00 W1 H +ATOM 21957 OH2 TIP3X6490 17.097 7.215 22.181 1.00 0.00 W1 O +ATOM 21958 H1 TIP3X6490 17.454 8.087 22.011 1.00 0.00 W1 H +ATOM 21959 H2 TIP3X6490 16.995 6.824 21.313 1.00 0.00 W1 H +ATOM 21960 OH2 TIP3X6491 27.856 9.480 16.367 1.00 0.00 W1 O +ATOM 21961 H1 TIP3X6491 28.562 9.978 15.955 1.00 0.00 W1 H +ATOM 21962 H2 TIP3X6491 28.305 8.849 16.931 1.00 0.00 W1 H +ATOM 21963 OH2 TIP3X6492 30.453 6.827 19.730 1.00 0.00 W1 O +ATOM 21964 H1 TIP3X6492 30.165 7.000 20.626 1.00 0.00 W1 H +ATOM 21965 H2 TIP3X6492 30.965 7.598 19.489 1.00 0.00 W1 H +ATOM 21966 OH2 TIP3X6493 16.950 5.944 24.452 1.00 0.00 W1 O +ATOM 21967 H1 TIP3X6493 17.045 6.622 23.783 1.00 0.00 W1 H +ATOM 21968 H2 TIP3X6493 17.609 6.163 25.111 1.00 0.00 W1 H +ATOM 21969 OH2 TIP3X6494 19.737 14.451 17.715 1.00 0.00 W1 O +ATOM 21970 H1 TIP3X6494 19.508 14.811 16.859 1.00 0.00 W1 H +ATOM 21971 H2 TIP3X6494 19.324 13.587 17.731 1.00 0.00 W1 H +ATOM 21972 OH2 TIP3X6495 18.512 9.684 16.214 1.00 0.00 W1 O +ATOM 21973 H1 TIP3X6495 17.696 9.394 15.805 1.00 0.00 W1 H +ATOM 21974 H2 TIP3X6495 19.044 8.890 16.275 1.00 0.00 W1 H +ATOM 21975 OH2 TIP3X6496 19.930 10.523 29.288 1.00 0.00 W1 O +ATOM 21976 H1 TIP3X6496 19.357 11.125 28.814 1.00 0.00 W1 H +ATOM 21977 H2 TIP3X6496 19.456 10.327 30.096 1.00 0.00 W1 H +ATOM 21978 OH2 TIP3X6497 23.006 15.266 26.979 1.00 0.00 W1 O +ATOM 21979 H1 TIP3X6497 23.324 14.972 27.833 1.00 0.00 W1 H +ATOM 21980 H2 TIP3X6497 23.439 14.689 26.350 1.00 0.00 W1 H +ATOM 21981 OH2 TIP3X6498 27.712 15.508 21.113 1.00 0.00 W1 O +ATOM 21982 H1 TIP3X6498 27.300 14.817 20.594 1.00 0.00 W1 H +ATOM 21983 H2 TIP3X6498 27.516 16.315 20.636 1.00 0.00 W1 H +ATOM 21984 OH2 TIP3X6499 24.290 12.190 18.365 1.00 0.00 W1 O +ATOM 21985 H1 TIP3X6499 24.549 12.976 17.883 1.00 0.00 W1 H +ATOM 21986 H2 TIP3X6499 23.721 12.514 19.063 1.00 0.00 W1 H +ATOM 21987 OH2 TIP3X6500 24.307 7.345 17.436 1.00 0.00 W1 O +ATOM 21988 H1 TIP3X6500 25.130 7.418 16.953 1.00 0.00 W1 H +ATOM 21989 H2 TIP3X6500 24.315 8.089 18.038 1.00 0.00 W1 H +ATOM 21990 OH2 TIP3X6501 27.709 2.068 27.227 1.00 0.00 W1 O +ATOM 21991 H1 TIP3X6501 28.514 1.838 26.763 1.00 0.00 W1 H +ATOM 21992 H2 TIP3X6501 27.999 2.621 27.952 1.00 0.00 W1 H +ATOM 21993 OH2 TIP3X6502 15.674 9.170 18.633 1.00 0.00 W1 O +ATOM 21994 H1 TIP3X6502 15.520 9.262 17.693 1.00 0.00 W1 H +ATOM 21995 H2 TIP3X6502 16.627 9.170 18.722 1.00 0.00 W1 H +ATOM 21996 OH2 TIP3X6503 26.436 8.758 25.229 1.00 0.00 W1 O +ATOM 21997 H1 TIP3X6503 26.981 9.419 25.655 1.00 0.00 W1 H +ATOM 21998 H2 TIP3X6503 26.895 8.557 24.414 1.00 0.00 W1 H +ATOM 21999 OH2 TIP3X6504 25.258 13.731 16.307 1.00 0.00 W1 O +ATOM 22000 H1 TIP3X6504 26.083 13.766 16.791 1.00 0.00 W1 H +ATOM 22001 H2 TIP3X6504 25.461 13.219 15.524 1.00 0.00 W1 H +ATOM 22002 OH2 TIP3X6505 25.250 11.519 27.958 1.00 0.00 W1 O +ATOM 22003 H1 TIP3X6505 24.429 11.766 28.384 1.00 0.00 W1 H +ATOM 22004 H2 TIP3X6505 25.021 11.423 27.033 1.00 0.00 W1 H +ATOM 22005 OH2 TIP3X6506 21.875 11.744 19.844 1.00 0.00 W1 O +ATOM 22006 H1 TIP3X6506 21.168 11.891 19.216 1.00 0.00 W1 H +ATOM 22007 H2 TIP3X6506 21.538 12.088 20.671 1.00 0.00 W1 H +ATOM 22008 OH2 TIP3X6507 18.440 12.656 28.555 1.00 0.00 W1 O +ATOM 22009 H1 TIP3X6507 19.174 13.267 28.491 1.00 0.00 W1 H +ATOM 22010 H2 TIP3X6507 18.128 12.750 29.455 1.00 0.00 W1 H +ATOM 22011 OH2 TIP3X6508 18.030 14.360 22.657 1.00 0.00 W1 O +ATOM 22012 H1 TIP3X6508 17.444 13.619 22.503 1.00 0.00 W1 H +ATOM 22013 H2 TIP3X6508 18.473 14.494 21.819 1.00 0.00 W1 H +ATOM 22014 OH2 TIP3X6509 26.384 0.374 23.738 1.00 0.00 W1 O +ATOM 22015 H1 TIP3X6509 26.716 0.298 22.843 1.00 0.00 W1 H +ATOM 22016 H2 TIP3X6509 26.339 1.316 23.899 1.00 0.00 W1 H +ATOM 22017 OH2 TIP3X6510 23.622 2.502 23.972 1.00 0.00 W1 O +ATOM 22018 H1 TIP3X6510 23.260 2.991 23.233 1.00 0.00 W1 H +ATOM 22019 H2 TIP3X6510 22.890 2.413 24.582 1.00 0.00 W1 H +ATOM 22020 OH2 TIP3X6511 22.341 0.487 17.900 1.00 0.00 W1 O +ATOM 22021 H1 TIP3X6511 23.196 0.232 18.245 1.00 0.00 W1 H +ATOM 22022 H2 TIP3X6511 21.822 -0.317 17.925 1.00 0.00 W1 H +ATOM 22023 OH2 TIP3X6512 25.092 0.331 18.944 1.00 0.00 W1 O +ATOM 22024 H1 TIP3X6512 25.548 -0.405 19.352 1.00 0.00 W1 H +ATOM 22025 H2 TIP3X6512 25.500 0.417 18.082 1.00 0.00 W1 H +ATOM 22026 OH2 TIP3X6513 19.732 14.909 30.398 1.00 0.00 W1 O +ATOM 22027 H1 TIP3X6513 19.481 15.666 29.869 1.00 0.00 W1 H +ATOM 22028 H2 TIP3X6513 20.643 14.740 30.159 1.00 0.00 W1 H +ATOM 22029 OH2 TIP3X6514 24.738 13.604 20.699 1.00 0.00 W1 O +ATOM 22030 H1 TIP3X6514 25.399 12.962 20.959 1.00 0.00 W1 H +ATOM 22031 H2 TIP3X6514 24.725 14.238 21.415 1.00 0.00 W1 H +ATOM 22032 OH2 TIP3X6515 22.478 14.506 29.608 1.00 0.00 W1 O +ATOM 22033 H1 TIP3X6515 22.695 13.614 29.879 1.00 0.00 W1 H +ATOM 22034 H2 TIP3X6515 23.085 15.060 30.098 1.00 0.00 W1 H +ATOM 22035 OH2 TIP3X6516 21.424 2.624 19.653 1.00 0.00 W1 O +ATOM 22036 H1 TIP3X6516 22.081 1.965 19.430 1.00 0.00 W1 H +ATOM 22037 H2 TIP3X6516 21.467 2.693 20.607 1.00 0.00 W1 H +ATOM 22038 OH2 TIP3X6517 16.137 0.963 29.109 1.00 0.00 W1 O +ATOM 22039 H1 TIP3X6517 16.886 0.767 28.545 1.00 0.00 W1 H +ATOM 22040 H2 TIP3X6517 16.346 0.537 29.940 1.00 0.00 W1 H +ATOM 22041 OH2 TIP3X6518 27.257 13.690 18.710 1.00 0.00 W1 O +ATOM 22042 H1 TIP3X6518 27.402 12.749 18.813 1.00 0.00 W1 H +ATOM 22043 H2 TIP3X6518 28.080 14.022 18.353 1.00 0.00 W1 H +ATOM 22044 OH2 TIP3X6519 28.925 0.456 29.937 1.00 0.00 W1 O +ATOM 22045 H1 TIP3X6519 28.311 0.530 29.207 1.00 0.00 W1 H +ATOM 22046 H2 TIP3X6519 29.694 0.951 29.656 1.00 0.00 W1 H +ATOM 22047 OH2 TIP3X6520 19.718 14.669 20.424 1.00 0.00 W1 O +ATOM 22048 H1 TIP3X6520 19.712 14.714 19.468 1.00 0.00 W1 H +ATOM 22049 H2 TIP3X6520 20.526 15.115 20.680 1.00 0.00 W1 H +ATOM 22050 OH2 TIP3X6521 30.627 13.608 28.373 1.00 0.00 W1 O +ATOM 22051 H1 TIP3X6521 29.905 14.159 28.674 1.00 0.00 W1 H +ATOM 22052 H2 TIP3X6521 31.415 14.107 28.587 1.00 0.00 W1 H +ATOM 22053 OH2 TIP3X6522 18.253 2.930 20.053 1.00 0.00 W1 O +ATOM 22054 H1 TIP3X6522 17.610 3.318 19.461 1.00 0.00 W1 H +ATOM 22055 H2 TIP3X6522 19.056 3.427 19.895 1.00 0.00 W1 H +ATOM 22056 OH2 TIP3X6523 19.682 11.529 17.785 1.00 0.00 W1 O +ATOM 22057 H1 TIP3X6523 19.643 10.901 17.063 1.00 0.00 W1 H +ATOM 22058 H2 TIP3X6523 18.962 11.275 18.363 1.00 0.00 W1 H +ATOM 22059 OH2 TIP3X6524 17.576 26.614 -26.806 1.00 0.00 W1 O +ATOM 22060 H1 TIP3X6524 17.759 26.538 -25.869 1.00 0.00 W1 H +ATOM 22061 H2 TIP3X6524 17.552 27.557 -26.970 1.00 0.00 W1 H +ATOM 22062 OH2 TIP3X6525 28.679 24.105 -23.068 1.00 0.00 W1 O +ATOM 22063 H1 TIP3X6525 28.914 24.370 -23.957 1.00 0.00 W1 H +ATOM 22064 H2 TIP3X6525 29.508 23.842 -22.669 1.00 0.00 W1 H +ATOM 22065 OH2 TIP3X6526 20.663 23.829 -27.089 1.00 0.00 W1 O +ATOM 22066 H1 TIP3X6526 20.693 24.738 -26.792 1.00 0.00 W1 H +ATOM 22067 H2 TIP3X6526 21.170 23.346 -26.437 1.00 0.00 W1 H +ATOM 22068 OH2 TIP3X6527 28.466 27.988 -24.946 1.00 0.00 W1 O +ATOM 22069 H1 TIP3X6527 28.191 28.478 -24.171 1.00 0.00 W1 H +ATOM 22070 H2 TIP3X6527 27.941 27.188 -24.922 1.00 0.00 W1 H +ATOM 22071 OH2 TIP3X6528 26.983 26.431 -27.903 1.00 0.00 W1 O +ATOM 22072 H1 TIP3X6528 27.145 26.203 -28.818 1.00 0.00 W1 H +ATOM 22073 H2 TIP3X6528 26.054 26.660 -27.873 1.00 0.00 W1 H +ATOM 22074 OH2 TIP3X6529 30.830 26.963 -23.118 1.00 0.00 W1 O +ATOM 22075 H1 TIP3X6529 30.278 27.046 -23.896 1.00 0.00 W1 H +ATOM 22076 H2 TIP3X6529 30.220 26.747 -22.413 1.00 0.00 W1 H +ATOM 22077 OH2 TIP3X6530 17.467 28.227 -20.667 1.00 0.00 W1 O +ATOM 22078 H1 TIP3X6530 17.873 28.431 -19.824 1.00 0.00 W1 H +ATOM 22079 H2 TIP3X6530 16.895 27.482 -20.484 1.00 0.00 W1 H +ATOM 22080 OH2 TIP3X6531 24.842 29.852 -21.441 1.00 0.00 W1 O +ATOM 22081 H1 TIP3X6531 25.143 28.952 -21.319 1.00 0.00 W1 H +ATOM 22082 H2 TIP3X6531 25.467 30.233 -22.058 1.00 0.00 W1 H +ATOM 22083 OH2 TIP3X6532 28.274 29.809 -21.561 1.00 0.00 W1 O +ATOM 22084 H1 TIP3X6532 27.839 30.632 -21.781 1.00 0.00 W1 H +ATOM 22085 H2 TIP3X6532 29.203 30.035 -21.512 1.00 0.00 W1 H +ATOM 22086 OH2 TIP3X6533 20.722 29.384 -22.432 1.00 0.00 W1 O +ATOM 22087 H1 TIP3X6533 21.078 30.233 -22.695 1.00 0.00 W1 H +ATOM 22088 H2 TIP3X6533 19.787 29.443 -22.628 1.00 0.00 W1 H +ATOM 22089 OH2 TIP3X6534 25.564 21.276 -23.530 1.00 0.00 W1 O +ATOM 22090 H1 TIP3X6534 25.486 20.466 -24.035 1.00 0.00 W1 H +ATOM 22091 H2 TIP3X6534 26.506 21.415 -23.443 1.00 0.00 W1 H +ATOM 22092 OH2 TIP3X6535 21.587 17.374 -21.168 1.00 0.00 W1 O +ATOM 22093 H1 TIP3X6535 21.844 16.636 -20.615 1.00 0.00 W1 H +ATOM 22094 H2 TIP3X6535 20.910 17.017 -21.744 1.00 0.00 W1 H +ATOM 22095 OH2 TIP3X6536 29.830 18.378 -24.745 1.00 0.00 W1 O +ATOM 22096 H1 TIP3X6536 29.523 18.716 -23.904 1.00 0.00 W1 H +ATOM 22097 H2 TIP3X6536 29.898 17.433 -24.614 1.00 0.00 W1 H +ATOM 22098 OH2 TIP3X6537 28.428 19.573 -22.791 1.00 0.00 W1 O +ATOM 22099 H1 TIP3X6537 29.003 19.345 -22.061 1.00 0.00 W1 H +ATOM 22100 H2 TIP3X6537 27.553 19.319 -22.496 1.00 0.00 W1 H +ATOM 22101 OH2 TIP3X6538 21.474 20.698 -21.420 1.00 0.00 W1 O +ATOM 22102 H1 TIP3X6538 21.978 19.996 -21.008 1.00 0.00 W1 H +ATOM 22103 H2 TIP3X6538 22.132 21.340 -21.687 1.00 0.00 W1 H +ATOM 22104 OH2 TIP3X6539 28.951 21.746 -24.523 1.00 0.00 W1 O +ATOM 22105 H1 TIP3X6539 28.992 20.847 -24.199 1.00 0.00 W1 H +ATOM 22106 H2 TIP3X6539 28.833 22.279 -23.736 1.00 0.00 W1 H +ATOM 22107 OH2 TIP3X6540 27.636 18.390 -26.654 1.00 0.00 W1 O +ATOM 22108 H1 TIP3X6540 28.461 18.574 -26.205 1.00 0.00 W1 H +ATOM 22109 H2 TIP3X6540 27.712 18.845 -27.493 1.00 0.00 W1 H +ATOM 22110 OH2 TIP3X6541 23.818 24.361 -20.583 1.00 0.00 W1 O +ATOM 22111 H1 TIP3X6541 24.695 24.383 -20.966 1.00 0.00 W1 H +ATOM 22112 H2 TIP3X6541 23.553 25.280 -20.537 1.00 0.00 W1 H +ATOM 22113 OH2 TIP3X6542 22.969 26.909 -20.773 1.00 0.00 W1 O +ATOM 22114 H1 TIP3X6542 22.944 27.136 -21.702 1.00 0.00 W1 H +ATOM 22115 H2 TIP3X6542 22.049 26.855 -20.514 1.00 0.00 W1 H +ATOM 22116 OH2 TIP3X6543 17.832 18.791 -23.935 1.00 0.00 W1 O +ATOM 22117 H1 TIP3X6543 17.506 19.670 -23.744 1.00 0.00 W1 H +ATOM 22118 H2 TIP3X6543 17.708 18.688 -24.878 1.00 0.00 W1 H +ATOM 22119 OH2 TIP3X6544 19.988 22.348 -23.922 1.00 0.00 W1 O +ATOM 22120 H1 TIP3X6544 19.305 21.898 -24.419 1.00 0.00 W1 H +ATOM 22121 H2 TIP3X6544 20.473 21.645 -23.490 1.00 0.00 W1 H +ATOM 22122 OH2 TIP3X6545 26.043 27.273 -21.526 1.00 0.00 W1 O +ATOM 22123 H1 TIP3X6545 25.801 26.686 -22.243 1.00 0.00 W1 H +ATOM 22124 H2 TIP3X6545 26.993 27.183 -21.453 1.00 0.00 W1 H +ATOM 22125 OH2 TIP3X6546 30.341 30.907 -24.745 1.00 0.00 W1 O +ATOM 22126 H1 TIP3X6546 30.336 30.439 -23.910 1.00 0.00 W1 H +ATOM 22127 H2 TIP3X6546 29.461 30.778 -25.098 1.00 0.00 W1 H +ATOM 22128 OH2 TIP3X6547 22.213 27.244 -23.723 1.00 0.00 W1 O +ATOM 22129 H1 TIP3X6547 21.642 26.524 -23.454 1.00 0.00 W1 H +ATOM 22130 H2 TIP3X6547 21.753 28.034 -23.441 1.00 0.00 W1 H +ATOM 22131 OH2 TIP3X6548 24.435 17.695 -19.153 1.00 0.00 W1 O +ATOM 22132 H1 TIP3X6548 23.692 18.175 -18.786 1.00 0.00 W1 H +ATOM 22133 H2 TIP3X6548 24.054 16.883 -19.487 1.00 0.00 W1 H +ATOM 22134 OH2 TIP3X6549 19.787 18.400 -29.351 1.00 0.00 W1 O +ATOM 22135 H1 TIP3X6549 19.689 17.738 -28.667 1.00 0.00 W1 H +ATOM 22136 H2 TIP3X6549 19.603 17.932 -30.166 1.00 0.00 W1 H +ATOM 22137 OH2 TIP3X6550 30.680 19.322 -21.162 1.00 0.00 W1 O +ATOM 22138 H1 TIP3X6550 31.199 19.991 -21.609 1.00 0.00 W1 H +ATOM 22139 H2 TIP3X6550 31.122 19.198 -20.322 1.00 0.00 W1 H +ATOM 22140 OH2 TIP3X6551 16.738 15.675 -27.002 1.00 0.00 W1 O +ATOM 22141 H1 TIP3X6551 17.463 16.296 -26.933 1.00 0.00 W1 H +ATOM 22142 H2 TIP3X6551 16.366 15.642 -26.120 1.00 0.00 W1 H +ATOM 22143 OH2 TIP3X6552 22.004 21.910 -17.015 1.00 0.00 W1 O +ATOM 22144 H1 TIP3X6552 22.868 22.309 -17.116 1.00 0.00 W1 H +ATOM 22145 H2 TIP3X6552 22.156 20.973 -17.138 1.00 0.00 W1 H +ATOM 22146 OH2 TIP3X6553 25.170 26.820 -24.276 1.00 0.00 W1 O +ATOM 22147 H1 TIP3X6553 25.264 25.957 -24.679 1.00 0.00 W1 H +ATOM 22148 H2 TIP3X6553 24.237 27.020 -24.352 1.00 0.00 W1 H +ATOM 22149 OH2 TIP3X6554 23.782 25.104 -26.745 1.00 0.00 W1 O +ATOM 22150 H1 TIP3X6554 23.218 24.490 -26.275 1.00 0.00 W1 H +ATOM 22151 H2 TIP3X6554 23.308 25.935 -26.716 1.00 0.00 W1 H +ATOM 22152 OH2 TIP3X6555 16.320 25.617 -20.288 1.00 0.00 W1 O +ATOM 22153 H1 TIP3X6555 15.785 25.016 -20.806 1.00 0.00 W1 H +ATOM 22154 H2 TIP3X6555 15.849 25.704 -19.459 1.00 0.00 W1 H +ATOM 22155 OH2 TIP3X6556 27.616 24.638 -25.920 1.00 0.00 W1 O +ATOM 22156 H1 TIP3X6556 27.560 23.723 -26.197 1.00 0.00 W1 H +ATOM 22157 H2 TIP3X6556 27.444 25.141 -26.716 1.00 0.00 W1 H +ATOM 22158 OH2 TIP3X6557 27.913 25.152 -18.896 1.00 0.00 W1 O +ATOM 22159 H1 TIP3X6557 27.011 25.236 -18.588 1.00 0.00 W1 H +ATOM 22160 H2 TIP3X6557 28.082 24.210 -18.892 1.00 0.00 W1 H +ATOM 22161 OH2 TIP3X6558 30.280 23.112 -21.090 1.00 0.00 W1 O +ATOM 22162 H1 TIP3X6558 30.942 22.431 -21.209 1.00 0.00 W1 H +ATOM 22163 H2 TIP3X6558 29.564 22.672 -20.631 1.00 0.00 W1 H +ATOM 22164 OH2 TIP3X6559 19.424 22.799 -15.946 1.00 0.00 W1 O +ATOM 22165 H1 TIP3X6559 18.895 22.565 -16.708 1.00 0.00 W1 H +ATOM 22166 H2 TIP3X6559 20.320 22.846 -16.280 1.00 0.00 W1 H +ATOM 22167 OH2 TIP3X6560 20.335 26.005 -20.384 1.00 0.00 W1 O +ATOM 22168 H1 TIP3X6560 20.290 25.450 -19.606 1.00 0.00 W1 H +ATOM 22169 H2 TIP3X6560 19.702 26.703 -20.218 1.00 0.00 W1 H +ATOM 22170 OH2 TIP3X6561 29.006 27.135 -20.635 1.00 0.00 W1 O +ATOM 22171 H1 TIP3X6561 29.430 27.903 -20.251 1.00 0.00 W1 H +ATOM 22172 H2 TIP3X6561 28.702 26.627 -19.882 1.00 0.00 W1 H +ATOM 22173 OH2 TIP3X6562 27.094 29.110 -18.810 1.00 0.00 W1 O +ATOM 22174 H1 TIP3X6562 26.387 28.481 -18.952 1.00 0.00 W1 H +ATOM 22175 H2 TIP3X6562 27.423 29.305 -19.687 1.00 0.00 W1 H +ATOM 22176 OH2 TIP3X6563 27.345 27.646 -16.413 1.00 0.00 W1 O +ATOM 22177 H1 TIP3X6563 26.711 27.040 -16.797 1.00 0.00 W1 H +ATOM 22178 H2 TIP3X6563 27.458 28.327 -17.077 1.00 0.00 W1 H +ATOM 22179 OH2 TIP3X6564 30.955 29.555 -22.347 1.00 0.00 W1 O +ATOM 22180 H1 TIP3X6564 31.633 29.396 -21.690 1.00 0.00 W1 H +ATOM 22181 H2 TIP3X6564 30.721 28.683 -22.666 1.00 0.00 W1 H +ATOM 22182 OH2 TIP3X6565 21.511 16.026 -23.954 1.00 0.00 W1 O +ATOM 22183 H1 TIP3X6565 21.220 16.935 -24.015 1.00 0.00 W1 H +ATOM 22184 H2 TIP3X6565 22.343 16.008 -24.427 1.00 0.00 W1 H +ATOM 22185 OH2 TIP3X6566 23.635 25.972 -30.300 1.00 0.00 W1 O +ATOM 22186 H1 TIP3X6566 22.940 25.350 -30.085 1.00 0.00 W1 H +ATOM 22187 H2 TIP3X6566 23.618 26.608 -29.585 1.00 0.00 W1 H +ATOM 22188 OH2 TIP3X6567 31.016 24.736 -30.863 1.00 0.00 W1 O +ATOM 22189 H1 TIP3X6567 30.753 23.986 -31.397 1.00 0.00 W1 H +ATOM 22190 H2 TIP3X6567 30.761 25.500 -31.381 1.00 0.00 W1 H +ATOM 22191 OH2 TIP3X6568 16.964 28.432 -31.146 1.00 0.00 W1 O +ATOM 22192 H1 TIP3X6568 17.409 27.883 -30.501 1.00 0.00 W1 H +ATOM 22193 H2 TIP3X6568 16.067 28.098 -31.167 1.00 0.00 W1 H +ATOM 22194 OH2 TIP3X6569 29.057 30.561 -29.888 1.00 0.00 W1 O +ATOM 22195 H1 TIP3X6569 29.942 30.233 -30.046 1.00 0.00 W1 H +ATOM 22196 H2 TIP3X6569 28.827 31.029 -30.690 1.00 0.00 W1 H +ATOM 22197 OH2 TIP3X6570 30.449 26.223 -17.810 1.00 0.00 W1 O +ATOM 22198 H1 TIP3X6570 30.340 27.172 -17.751 1.00 0.00 W1 H +ATOM 22199 H2 TIP3X6570 29.557 25.878 -17.820 1.00 0.00 W1 H +ATOM 22200 OH2 TIP3X6571 17.136 29.049 -28.191 1.00 0.00 W1 O +ATOM 22201 H1 TIP3X6571 17.068 29.885 -27.731 1.00 0.00 W1 H +ATOM 22202 H2 TIP3X6571 16.240 28.711 -28.208 1.00 0.00 W1 H +ATOM 22203 OH2 TIP3X6572 29.716 27.542 -30.547 1.00 0.00 W1 O +ATOM 22204 H1 TIP3X6572 29.747 27.462 -29.594 1.00 0.00 W1 H +ATOM 22205 H2 TIP3X6572 28.883 27.979 -30.724 1.00 0.00 W1 H +ATOM 22206 OH2 TIP3X6573 26.086 15.837 -17.663 1.00 0.00 W1 O +ATOM 22207 H1 TIP3X6573 25.780 16.585 -18.176 1.00 0.00 W1 H +ATOM 22208 H2 TIP3X6573 26.140 15.120 -18.295 1.00 0.00 W1 H +ATOM 22209 OH2 TIP3X6574 20.300 29.753 -19.634 1.00 0.00 W1 O +ATOM 22210 H1 TIP3X6574 21.148 29.991 -19.260 1.00 0.00 W1 H +ATOM 22211 H2 TIP3X6574 20.512 29.373 -20.487 1.00 0.00 W1 H +ATOM 22212 OH2 TIP3X6575 18.766 17.772 -16.284 1.00 0.00 W1 O +ATOM 22213 H1 TIP3X6575 17.889 17.861 -15.910 1.00 0.00 W1 H +ATOM 22214 H2 TIP3X6575 18.829 18.484 -16.920 1.00 0.00 W1 H +ATOM 22215 OH2 TIP3X6576 24.964 19.719 -30.553 1.00 0.00 W1 O +ATOM 22216 H1 TIP3X6576 24.798 20.016 -31.448 1.00 0.00 W1 H +ATOM 22217 H2 TIP3X6576 24.093 19.595 -30.176 1.00 0.00 W1 H +ATOM 22218 OH2 TIP3X6577 30.361 27.479 -27.505 1.00 0.00 W1 O +ATOM 22219 H1 TIP3X6577 30.934 26.742 -27.292 1.00 0.00 W1 H +ATOM 22220 H2 TIP3X6577 30.030 27.778 -26.658 1.00 0.00 W1 H +ATOM 22221 OH2 TIP3X6578 25.622 16.515 -30.576 1.00 0.00 W1 O +ATOM 22222 H1 TIP3X6578 26.354 17.131 -30.552 1.00 0.00 W1 H +ATOM 22223 H2 TIP3X6578 25.863 15.883 -31.253 1.00 0.00 W1 H +ATOM 22224 OH2 TIP3X6579 30.154 16.609 -20.311 1.00 0.00 W1 O +ATOM 22225 H1 TIP3X6579 30.646 15.979 -19.784 1.00 0.00 W1 H +ATOM 22226 H2 TIP3X6579 30.755 16.851 -21.016 1.00 0.00 W1 H +ATOM 22227 OH2 TIP3X6580 17.661 25.829 -24.233 1.00 0.00 W1 O +ATOM 22228 H1 TIP3X6580 16.993 26.153 -23.629 1.00 0.00 W1 H +ATOM 22229 H2 TIP3X6580 18.454 25.760 -23.701 1.00 0.00 W1 H +ATOM 22230 OH2 TIP3X6581 22.658 27.248 -17.123 1.00 0.00 W1 O +ATOM 22231 H1 TIP3X6581 22.882 26.870 -16.272 1.00 0.00 W1 H +ATOM 22232 H2 TIP3X6581 22.052 26.619 -17.513 1.00 0.00 W1 H +ATOM 22233 OH2 TIP3X6582 26.138 18.553 -21.710 1.00 0.00 W1 O +ATOM 22234 H1 TIP3X6582 26.197 18.371 -20.772 1.00 0.00 W1 H +ATOM 22235 H2 TIP3X6582 25.199 18.640 -21.879 1.00 0.00 W1 H +ATOM 22236 OH2 TIP3X6583 22.329 19.210 -17.531 1.00 0.00 W1 O +ATOM 22237 H1 TIP3X6583 21.462 19.140 -17.931 1.00 0.00 W1 H +ATOM 22238 H2 TIP3X6583 22.274 18.669 -16.743 1.00 0.00 W1 H +ATOM 22239 OH2 TIP3X6584 29.815 21.930 -15.778 1.00 0.00 W1 O +ATOM 22240 H1 TIP3X6584 30.610 21.397 -15.795 1.00 0.00 W1 H +ATOM 22241 H2 TIP3X6584 29.521 21.895 -14.868 1.00 0.00 W1 H +ATOM 22242 OH2 TIP3X6585 18.000 15.797 -19.860 1.00 0.00 W1 O +ATOM 22243 H1 TIP3X6585 17.775 16.250 -20.672 1.00 0.00 W1 H +ATOM 22244 H2 TIP3X6585 18.830 15.360 -20.051 1.00 0.00 W1 H +ATOM 22245 OH2 TIP3X6586 24.095 16.255 -24.778 1.00 0.00 W1 O +ATOM 22246 H1 TIP3X6586 24.577 16.769 -25.426 1.00 0.00 W1 H +ATOM 22247 H2 TIP3X6586 24.439 16.548 -23.934 1.00 0.00 W1 H +ATOM 22248 OH2 TIP3X6587 18.565 20.846 -29.625 1.00 0.00 W1 O +ATOM 22249 H1 TIP3X6587 18.988 21.492 -30.191 1.00 0.00 W1 H +ATOM 22250 H2 TIP3X6587 19.277 20.271 -29.344 1.00 0.00 W1 H +ATOM 22251 OH2 TIP3X6588 19.090 21.503 -20.314 1.00 0.00 W1 O +ATOM 22252 H1 TIP3X6588 19.005 22.294 -19.782 1.00 0.00 W1 H +ATOM 22253 H2 TIP3X6588 20.005 21.499 -20.595 1.00 0.00 W1 H +ATOM 22254 OH2 TIP3X6589 18.272 22.221 -27.129 1.00 0.00 W1 O +ATOM 22255 H1 TIP3X6589 18.335 21.932 -28.039 1.00 0.00 W1 H +ATOM 22256 H2 TIP3X6589 19.048 22.766 -26.996 1.00 0.00 W1 H +ATOM 22257 OH2 TIP3X6590 27.293 18.791 -29.369 1.00 0.00 W1 O +ATOM 22258 H1 TIP3X6590 26.585 19.279 -29.789 1.00 0.00 W1 H +ATOM 22259 H2 TIP3X6590 28.018 18.835 -29.992 1.00 0.00 W1 H +ATOM 22260 OH2 TIP3X6591 15.843 19.677 -18.281 1.00 0.00 W1 O +ATOM 22261 H1 TIP3X6591 14.939 19.971 -18.170 1.00 0.00 W1 H +ATOM 22262 H2 TIP3X6591 15.984 19.058 -17.564 1.00 0.00 W1 H +ATOM 22263 OH2 TIP3X6592 16.987 16.515 -22.298 1.00 0.00 W1 O +ATOM 22264 H1 TIP3X6592 17.094 15.813 -22.941 1.00 0.00 W1 H +ATOM 22265 H2 TIP3X6592 17.122 17.320 -22.797 1.00 0.00 W1 H +ATOM 22266 OH2 TIP3X6593 28.508 20.143 -17.411 1.00 0.00 W1 O +ATOM 22267 H1 TIP3X6593 28.820 20.721 -16.715 1.00 0.00 W1 H +ATOM 22268 H2 TIP3X6593 27.564 20.079 -17.265 1.00 0.00 W1 H +ATOM 22269 OH2 TIP3X6594 25.551 20.148 -17.464 1.00 0.00 W1 O +ATOM 22270 H1 TIP3X6594 25.192 20.717 -18.145 1.00 0.00 W1 H +ATOM 22271 H2 TIP3X6594 25.214 19.278 -17.675 1.00 0.00 W1 H +ATOM 22272 OH2 TIP3X6595 23.754 20.618 -27.598 1.00 0.00 W1 O +ATOM 22273 H1 TIP3X6595 23.843 21.197 -28.355 1.00 0.00 W1 H +ATOM 22274 H2 TIP3X6595 22.985 20.083 -27.795 1.00 0.00 W1 H +ATOM 22275 OH2 TIP3X6596 22.057 19.949 -29.911 1.00 0.00 W1 O +ATOM 22276 H1 TIP3X6596 21.620 20.142 -30.740 1.00 0.00 W1 H +ATOM 22277 H2 TIP3X6596 21.650 19.138 -29.607 1.00 0.00 W1 H +ATOM 22278 OH2 TIP3X6597 22.768 17.011 -16.122 1.00 0.00 W1 O +ATOM 22279 H1 TIP3X6597 22.301 16.624 -15.381 1.00 0.00 W1 H +ATOM 22280 H2 TIP3X6597 23.682 17.044 -15.839 1.00 0.00 W1 H +ATOM 22281 OH2 TIP3X6598 28.331 22.356 -19.440 1.00 0.00 W1 O +ATOM 22282 H1 TIP3X6598 28.350 21.706 -18.737 1.00 0.00 W1 H +ATOM 22283 H2 TIP3X6598 27.496 22.204 -19.884 1.00 0.00 W1 H +ATOM 22284 OH2 TIP3X6599 16.406 19.456 -30.971 1.00 0.00 W1 O +ATOM 22285 H1 TIP3X6599 15.649 19.264 -30.417 1.00 0.00 W1 H +ATOM 22286 H2 TIP3X6599 16.940 20.055 -30.448 1.00 0.00 W1 H +ATOM 22287 OH2 TIP3X6600 16.324 30.950 -30.484 1.00 0.00 W1 O +ATOM 22288 H1 TIP3X6600 16.740 30.202 -30.054 1.00 0.00 W1 H +ATOM 22289 H2 TIP3X6600 16.337 31.643 -29.824 1.00 0.00 W1 H +ATOM 22290 OH2 TIP3X6601 25.072 19.110 -25.491 1.00 0.00 W1 O +ATOM 22291 H1 TIP3X6601 24.735 19.460 -26.315 1.00 0.00 W1 H +ATOM 22292 H2 TIP3X6601 25.969 18.842 -25.692 1.00 0.00 W1 H +ATOM 22293 OH2 TIP3X6602 20.528 18.420 -23.747 1.00 0.00 W1 O +ATOM 22294 H1 TIP3X6602 19.585 18.373 -23.905 1.00 0.00 W1 H +ATOM 22295 H2 TIP3X6602 20.667 19.294 -23.383 1.00 0.00 W1 H +ATOM 22296 OH2 TIP3X6603 15.890 19.546 -26.953 1.00 0.00 W1 O +ATOM 22297 H1 TIP3X6603 15.616 19.422 -26.045 1.00 0.00 W1 H +ATOM 22298 H2 TIP3X6603 15.695 20.465 -27.139 1.00 0.00 W1 H +ATOM 22299 OH2 TIP3X6604 19.890 18.873 -18.893 1.00 0.00 W1 O +ATOM 22300 H1 TIP3X6604 19.912 18.067 -19.409 1.00 0.00 W1 H +ATOM 22301 H2 TIP3X6604 19.496 19.521 -19.477 1.00 0.00 W1 H +ATOM 22302 OH2 TIP3X6605 20.473 25.409 -23.088 1.00 0.00 W1 O +ATOM 22303 H1 TIP3X6605 20.402 24.473 -23.276 1.00 0.00 W1 H +ATOM 22304 H2 TIP3X6605 20.478 25.462 -22.132 1.00 0.00 W1 H +ATOM 22305 OH2 TIP3X6606 24.662 22.428 -18.526 1.00 0.00 W1 O +ATOM 22306 H1 TIP3X6606 25.074 23.259 -18.289 1.00 0.00 W1 H +ATOM 22307 H2 TIP3X6606 24.113 22.638 -19.280 1.00 0.00 W1 H +ATOM 22308 OH2 TIP3X6607 30.458 17.794 -29.201 1.00 0.00 W1 O +ATOM 22309 H1 TIP3X6607 30.892 18.021 -28.379 1.00 0.00 W1 H +ATOM 22310 H2 TIP3X6607 29.938 17.019 -28.992 1.00 0.00 W1 H +ATOM 22311 OH2 TIP3X6608 21.612 23.754 -30.023 1.00 0.00 W1 O +ATOM 22312 H1 TIP3X6608 21.323 23.632 -29.119 1.00 0.00 W1 H +ATOM 22313 H2 TIP3X6608 22.301 23.101 -30.144 1.00 0.00 W1 H +ATOM 22314 OH2 TIP3X6609 28.316 22.270 -28.955 1.00 0.00 W1 O +ATOM 22315 H1 TIP3X6609 27.451 22.071 -28.596 1.00 0.00 W1 H +ATOM 22316 H2 TIP3X6609 28.873 22.391 -28.186 1.00 0.00 W1 H +ATOM 22317 OH2 TIP3X6610 23.149 22.524 -22.485 1.00 0.00 W1 O +ATOM 22318 H1 TIP3X6610 23.246 23.321 -21.963 1.00 0.00 W1 H +ATOM 22319 H2 TIP3X6610 24.023 22.135 -22.493 1.00 0.00 W1 H +ATOM 22320 OH2 TIP3X6611 22.894 22.906 -25.569 1.00 0.00 W1 O +ATOM 22321 H1 TIP3X6611 23.515 22.310 -25.987 1.00 0.00 W1 H +ATOM 22322 H2 TIP3X6611 22.919 22.669 -24.642 1.00 0.00 W1 H +ATOM 22323 OH2 TIP3X6612 25.789 24.522 -16.633 1.00 0.00 W1 O +ATOM 22324 H1 TIP3X6612 25.111 24.806 -16.020 1.00 0.00 W1 H +ATOM 22325 H2 TIP3X6612 26.587 24.481 -16.106 1.00 0.00 W1 H +ATOM 22326 OH2 TIP3X6613 18.298 23.937 -18.937 1.00 0.00 W1 O +ATOM 22327 H1 TIP3X6613 18.815 24.343 -18.241 1.00 0.00 W1 H +ATOM 22328 H2 TIP3X6613 17.916 24.674 -19.412 1.00 0.00 W1 H +ATOM 22329 OH2 TIP3X6614 17.205 21.899 -17.315 1.00 0.00 W1 O +ATOM 22330 H1 TIP3X6614 17.001 21.060 -17.728 1.00 0.00 W1 H +ATOM 22331 H2 TIP3X6614 17.081 22.545 -18.011 1.00 0.00 W1 H +ATOM 22332 OH2 TIP3X6615 17.097 22.772 -24.492 1.00 0.00 W1 O +ATOM 22333 H1 TIP3X6615 17.454 23.645 -24.662 1.00 0.00 W1 H +ATOM 22334 H2 TIP3X6615 16.995 22.382 -25.360 1.00 0.00 W1 H +ATOM 22335 OH2 TIP3X6616 27.856 25.037 -30.305 1.00 0.00 W1 O +ATOM 22336 H1 TIP3X6616 28.562 25.536 -30.717 1.00 0.00 W1 H +ATOM 22337 H2 TIP3X6616 28.305 24.407 -29.742 1.00 0.00 W1 H +ATOM 22338 OH2 TIP3X6617 30.453 22.384 -26.943 1.00 0.00 W1 O +ATOM 22339 H1 TIP3X6617 30.165 22.557 -26.046 1.00 0.00 W1 H +ATOM 22340 H2 TIP3X6617 30.965 23.156 -27.183 1.00 0.00 W1 H +ATOM 22341 OH2 TIP3X6618 16.950 21.501 -22.221 1.00 0.00 W1 O +ATOM 22342 H1 TIP3X6618 17.045 22.179 -22.889 1.00 0.00 W1 H +ATOM 22343 H2 TIP3X6618 17.609 21.720 -21.561 1.00 0.00 W1 H +ATOM 22344 OH2 TIP3X6619 19.737 30.008 -28.957 1.00 0.00 W1 O +ATOM 22345 H1 TIP3X6619 19.508 30.368 -29.814 1.00 0.00 W1 H +ATOM 22346 H2 TIP3X6619 19.324 29.145 -28.941 1.00 0.00 W1 H +ATOM 22347 OH2 TIP3X6620 18.512 25.241 -30.459 1.00 0.00 W1 O +ATOM 22348 H1 TIP3X6620 17.696 24.952 -30.867 1.00 0.00 W1 H +ATOM 22349 H2 TIP3X6620 19.044 24.448 -30.397 1.00 0.00 W1 H +ATOM 22350 OH2 TIP3X6621 19.930 26.081 -17.384 1.00 0.00 W1 O +ATOM 22351 H1 TIP3X6621 19.357 26.683 -17.858 1.00 0.00 W1 H +ATOM 22352 H2 TIP3X6621 19.456 25.885 -16.576 1.00 0.00 W1 H +ATOM 22353 OH2 TIP3X6622 23.006 30.824 -19.693 1.00 0.00 W1 O +ATOM 22354 H1 TIP3X6622 23.324 30.530 -18.840 1.00 0.00 W1 H +ATOM 22355 H2 TIP3X6622 23.439 30.246 -20.322 1.00 0.00 W1 H +ATOM 22356 OH2 TIP3X6623 27.712 31.065 -25.560 1.00 0.00 W1 O +ATOM 22357 H1 TIP3X6623 27.300 30.374 -26.078 1.00 0.00 W1 H +ATOM 22358 H2 TIP3X6623 27.516 31.872 -26.036 1.00 0.00 W1 H +ATOM 22359 OH2 TIP3X6624 24.290 27.748 -28.308 1.00 0.00 W1 O +ATOM 22360 H1 TIP3X6624 24.549 28.533 -28.790 1.00 0.00 W1 H +ATOM 22361 H2 TIP3X6624 23.721 28.071 -27.610 1.00 0.00 W1 H +ATOM 22362 OH2 TIP3X6625 24.307 22.902 -29.236 1.00 0.00 W1 O +ATOM 22363 H1 TIP3X6625 25.130 22.975 -29.719 1.00 0.00 W1 H +ATOM 22364 H2 TIP3X6625 24.315 23.646 -28.635 1.00 0.00 W1 H +ATOM 22365 OH2 TIP3X6626 27.709 17.626 -19.445 1.00 0.00 W1 O +ATOM 22366 H1 TIP3X6626 28.514 17.395 -19.909 1.00 0.00 W1 H +ATOM 22367 H2 TIP3X6626 27.999 18.179 -18.720 1.00 0.00 W1 H +ATOM 22368 OH2 TIP3X6627 15.674 24.727 -28.039 1.00 0.00 W1 O +ATOM 22369 H1 TIP3X6627 15.520 24.819 -28.979 1.00 0.00 W1 H +ATOM 22370 H2 TIP3X6627 16.627 24.727 -27.950 1.00 0.00 W1 H +ATOM 22371 OH2 TIP3X6628 26.436 24.315 -21.443 1.00 0.00 W1 O +ATOM 22372 H1 TIP3X6628 26.981 24.977 -21.017 1.00 0.00 W1 H +ATOM 22373 H2 TIP3X6628 26.895 24.115 -22.259 1.00 0.00 W1 H +ATOM 22374 OH2 TIP3X6629 25.258 29.289 -30.366 1.00 0.00 W1 O +ATOM 22375 H1 TIP3X6629 26.083 29.324 -29.881 1.00 0.00 W1 H +ATOM 22376 H2 TIP3X6629 25.461 28.776 -31.148 1.00 0.00 W1 H +ATOM 22377 OH2 TIP3X6630 25.250 27.076 -18.715 1.00 0.00 W1 O +ATOM 22378 H1 TIP3X6630 24.429 27.323 -18.288 1.00 0.00 W1 H +ATOM 22379 H2 TIP3X6630 25.021 26.981 -19.639 1.00 0.00 W1 H +ATOM 22380 OH2 TIP3X6631 21.875 27.301 -26.828 1.00 0.00 W1 O +ATOM 22381 H1 TIP3X6631 21.168 27.448 -27.456 1.00 0.00 W1 H +ATOM 22382 H2 TIP3X6631 21.538 27.646 -26.001 1.00 0.00 W1 H +ATOM 22383 OH2 TIP3X6632 18.440 28.213 -18.117 1.00 0.00 W1 O +ATOM 22384 H1 TIP3X6632 19.174 28.824 -18.181 1.00 0.00 W1 H +ATOM 22385 H2 TIP3X6632 18.128 28.307 -17.217 1.00 0.00 W1 H +ATOM 22386 OH2 TIP3X6633 18.030 29.918 -24.015 1.00 0.00 W1 O +ATOM 22387 H1 TIP3X6633 17.444 29.177 -24.169 1.00 0.00 W1 H +ATOM 22388 H2 TIP3X6633 18.473 30.051 -24.853 1.00 0.00 W1 H +ATOM 22389 OH2 TIP3X6634 26.384 15.931 -22.935 1.00 0.00 W1 O +ATOM 22390 H1 TIP3X6634 26.716 15.856 -23.829 1.00 0.00 W1 H +ATOM 22391 H2 TIP3X6634 26.339 16.874 -22.774 1.00 0.00 W1 H +ATOM 22392 OH2 TIP3X6635 23.622 18.060 -22.700 1.00 0.00 W1 O +ATOM 22393 H1 TIP3X6635 23.260 18.549 -23.439 1.00 0.00 W1 H +ATOM 22394 H2 TIP3X6635 22.890 17.971 -22.090 1.00 0.00 W1 H +ATOM 22395 OH2 TIP3X6636 22.341 16.045 -28.772 1.00 0.00 W1 O +ATOM 22396 H1 TIP3X6636 23.196 15.789 -28.427 1.00 0.00 W1 H +ATOM 22397 H2 TIP3X6636 21.822 15.241 -28.747 1.00 0.00 W1 H +ATOM 22398 OH2 TIP3X6637 25.092 15.888 -27.729 1.00 0.00 W1 O +ATOM 22399 H1 TIP3X6637 25.548 15.152 -27.320 1.00 0.00 W1 H +ATOM 22400 H2 TIP3X6637 25.500 15.975 -28.590 1.00 0.00 W1 H +ATOM 22401 OH2 TIP3X6638 19.732 30.467 -16.274 1.00 0.00 W1 O +ATOM 22402 H1 TIP3X6638 19.481 31.224 -16.804 1.00 0.00 W1 H +ATOM 22403 H2 TIP3X6638 20.643 30.298 -16.513 1.00 0.00 W1 H +ATOM 22404 OH2 TIP3X6639 24.738 29.161 -25.974 1.00 0.00 W1 O +ATOM 22405 H1 TIP3X6639 25.399 28.519 -25.714 1.00 0.00 W1 H +ATOM 22406 H2 TIP3X6639 24.725 29.796 -25.257 1.00 0.00 W1 H +ATOM 22407 OH2 TIP3X6640 22.478 30.064 -17.064 1.00 0.00 W1 O +ATOM 22408 H1 TIP3X6640 22.695 29.171 -16.794 1.00 0.00 W1 H +ATOM 22409 H2 TIP3X6640 23.085 30.618 -16.575 1.00 0.00 W1 H +ATOM 22410 OH2 TIP3X6641 21.424 18.182 -27.020 1.00 0.00 W1 O +ATOM 22411 H1 TIP3X6641 22.081 17.523 -27.242 1.00 0.00 W1 H +ATOM 22412 H2 TIP3X6641 21.467 18.251 -26.066 1.00 0.00 W1 H +ATOM 22413 OH2 TIP3X6642 16.137 16.520 -17.564 1.00 0.00 W1 O +ATOM 22414 H1 TIP3X6642 16.886 16.325 -18.128 1.00 0.00 W1 H +ATOM 22415 H2 TIP3X6642 16.346 16.095 -16.732 1.00 0.00 W1 H +ATOM 22416 OH2 TIP3X6643 27.257 29.247 -27.962 1.00 0.00 W1 O +ATOM 22417 H1 TIP3X6643 27.402 28.307 -27.859 1.00 0.00 W1 H +ATOM 22418 H2 TIP3X6643 28.080 29.580 -28.319 1.00 0.00 W1 H +ATOM 22419 OH2 TIP3X6644 28.925 16.014 -16.735 1.00 0.00 W1 O +ATOM 22420 H1 TIP3X6644 28.311 16.088 -17.466 1.00 0.00 W1 H +ATOM 22421 H2 TIP3X6644 29.694 16.509 -17.017 1.00 0.00 W1 H +ATOM 22422 OH2 TIP3X6645 19.718 30.227 -26.249 1.00 0.00 W1 O +ATOM 22423 H1 TIP3X6645 19.712 30.272 -27.205 1.00 0.00 W1 H +ATOM 22424 H2 TIP3X6645 20.526 30.673 -25.993 1.00 0.00 W1 H +ATOM 22425 OH2 TIP3X6646 30.627 29.165 -18.299 1.00 0.00 W1 O +ATOM 22426 H1 TIP3X6646 29.905 29.716 -17.998 1.00 0.00 W1 H +ATOM 22427 H2 TIP3X6646 31.415 29.664 -18.085 1.00 0.00 W1 H +ATOM 22428 OH2 TIP3X6647 18.253 18.487 -26.619 1.00 0.00 W1 O +ATOM 22429 H1 TIP3X6647 17.610 18.876 -27.212 1.00 0.00 W1 H +ATOM 22430 H2 TIP3X6647 19.056 18.984 -26.777 1.00 0.00 W1 H +ATOM 22431 OH2 TIP3X6648 19.682 27.086 -28.888 1.00 0.00 W1 O +ATOM 22432 H1 TIP3X6648 19.643 26.458 -29.609 1.00 0.00 W1 H +ATOM 22433 H2 TIP3X6648 18.962 26.833 -28.310 1.00 0.00 W1 H +ATOM 22434 OH2 TIP3X6649 17.576 26.614 -11.248 1.00 0.00 W1 O +ATOM 22435 H1 TIP3X6649 17.759 26.538 -10.312 1.00 0.00 W1 H +ATOM 22436 H2 TIP3X6649 17.552 27.557 -11.413 1.00 0.00 W1 H +ATOM 22437 OH2 TIP3X6650 28.679 24.105 -7.510 1.00 0.00 W1 O +ATOM 22438 H1 TIP3X6650 28.914 24.370 -8.400 1.00 0.00 W1 H +ATOM 22439 H2 TIP3X6650 29.508 23.842 -7.111 1.00 0.00 W1 H +ATOM 22440 OH2 TIP3X6651 20.663 23.829 -11.532 1.00 0.00 W1 O +ATOM 22441 H1 TIP3X6651 20.693 24.738 -11.235 1.00 0.00 W1 H +ATOM 22442 H2 TIP3X6651 21.170 23.346 -10.880 1.00 0.00 W1 H +ATOM 22443 OH2 TIP3X6652 28.466 27.988 -9.388 1.00 0.00 W1 O +ATOM 22444 H1 TIP3X6652 28.191 28.478 -8.613 1.00 0.00 W1 H +ATOM 22445 H2 TIP3X6652 27.941 27.188 -9.365 1.00 0.00 W1 H +ATOM 22446 OH2 TIP3X6653 26.983 26.431 -12.345 1.00 0.00 W1 O +ATOM 22447 H1 TIP3X6653 27.145 26.203 -13.260 1.00 0.00 W1 H +ATOM 22448 H2 TIP3X6653 26.054 26.660 -12.315 1.00 0.00 W1 H +ATOM 22449 OH2 TIP3X6654 30.830 26.963 -7.561 1.00 0.00 W1 O +ATOM 22450 H1 TIP3X6654 30.278 27.046 -8.338 1.00 0.00 W1 H +ATOM 22451 H2 TIP3X6654 30.220 26.747 -6.856 1.00 0.00 W1 H +ATOM 22452 OH2 TIP3X6655 17.467 28.227 -5.110 1.00 0.00 W1 O +ATOM 22453 H1 TIP3X6655 17.873 28.431 -4.267 1.00 0.00 W1 H +ATOM 22454 H2 TIP3X6655 16.895 27.482 -4.927 1.00 0.00 W1 H +ATOM 22455 OH2 TIP3X6656 24.842 29.852 -5.884 1.00 0.00 W1 O +ATOM 22456 H1 TIP3X6656 25.143 28.952 -5.762 1.00 0.00 W1 H +ATOM 22457 H2 TIP3X6656 25.467 30.233 -6.501 1.00 0.00 W1 H +ATOM 22458 OH2 TIP3X6657 28.274 29.809 -6.004 1.00 0.00 W1 O +ATOM 22459 H1 TIP3X6657 27.839 30.632 -6.223 1.00 0.00 W1 H +ATOM 22460 H2 TIP3X6657 29.203 30.035 -5.954 1.00 0.00 W1 H +ATOM 22461 OH2 TIP3X6658 20.722 29.384 -6.874 1.00 0.00 W1 O +ATOM 22462 H1 TIP3X6658 21.078 30.233 -7.138 1.00 0.00 W1 H +ATOM 22463 H2 TIP3X6658 19.787 29.443 -7.070 1.00 0.00 W1 H +ATOM 22464 OH2 TIP3X6659 25.564 21.276 -7.973 1.00 0.00 W1 O +ATOM 22465 H1 TIP3X6659 25.486 20.466 -8.477 1.00 0.00 W1 H +ATOM 22466 H2 TIP3X6659 26.506 21.415 -7.885 1.00 0.00 W1 H +ATOM 22467 OH2 TIP3X6660 21.587 17.374 -5.611 1.00 0.00 W1 O +ATOM 22468 H1 TIP3X6660 21.844 16.636 -5.058 1.00 0.00 W1 H +ATOM 22469 H2 TIP3X6660 20.910 17.017 -6.186 1.00 0.00 W1 H +ATOM 22470 OH2 TIP3X6661 29.830 18.378 -9.188 1.00 0.00 W1 O +ATOM 22471 H1 TIP3X6661 29.523 18.716 -8.347 1.00 0.00 W1 H +ATOM 22472 H2 TIP3X6661 29.898 17.433 -9.056 1.00 0.00 W1 H +ATOM 22473 OH2 TIP3X6662 28.428 19.573 -7.234 1.00 0.00 W1 O +ATOM 22474 H1 TIP3X6662 29.003 19.345 -6.503 1.00 0.00 W1 H +ATOM 22475 H2 TIP3X6662 27.553 19.319 -6.939 1.00 0.00 W1 H +ATOM 22476 OH2 TIP3X6663 21.474 20.698 -5.863 1.00 0.00 W1 O +ATOM 22477 H1 TIP3X6663 21.978 19.996 -5.451 1.00 0.00 W1 H +ATOM 22478 H2 TIP3X6663 22.132 21.340 -6.129 1.00 0.00 W1 H +ATOM 22479 OH2 TIP3X6664 28.951 21.746 -8.965 1.00 0.00 W1 O +ATOM 22480 H1 TIP3X6664 28.992 20.847 -8.641 1.00 0.00 W1 H +ATOM 22481 H2 TIP3X6664 28.833 22.279 -8.179 1.00 0.00 W1 H +ATOM 22482 OH2 TIP3X6665 27.636 18.390 -11.097 1.00 0.00 W1 O +ATOM 22483 H1 TIP3X6665 28.461 18.574 -10.648 1.00 0.00 W1 H +ATOM 22484 H2 TIP3X6665 27.712 18.845 -11.936 1.00 0.00 W1 H +ATOM 22485 OH2 TIP3X6666 23.818 24.361 -5.025 1.00 0.00 W1 O +ATOM 22486 H1 TIP3X6666 24.695 24.383 -5.408 1.00 0.00 W1 H +ATOM 22487 H2 TIP3X6666 23.553 25.280 -4.979 1.00 0.00 W1 H +ATOM 22488 OH2 TIP3X6667 22.969 26.909 -5.215 1.00 0.00 W1 O +ATOM 22489 H1 TIP3X6667 22.944 27.136 -6.145 1.00 0.00 W1 H +ATOM 22490 H2 TIP3X6667 22.049 26.855 -4.957 1.00 0.00 W1 H +ATOM 22491 OH2 TIP3X6668 17.832 18.791 -8.377 1.00 0.00 W1 O +ATOM 22492 H1 TIP3X6668 17.506 19.670 -8.186 1.00 0.00 W1 H +ATOM 22493 H2 TIP3X6668 17.708 18.688 -9.321 1.00 0.00 W1 H +ATOM 22494 OH2 TIP3X6669 19.988 22.348 -8.365 1.00 0.00 W1 O +ATOM 22495 H1 TIP3X6669 19.305 21.898 -8.862 1.00 0.00 W1 H +ATOM 22496 H2 TIP3X6669 20.473 21.645 -7.933 1.00 0.00 W1 H +ATOM 22497 OH2 TIP3X6670 26.043 27.273 -5.968 1.00 0.00 W1 O +ATOM 22498 H1 TIP3X6670 25.801 26.686 -6.685 1.00 0.00 W1 H +ATOM 22499 H2 TIP3X6670 26.993 27.183 -5.896 1.00 0.00 W1 H +ATOM 22500 OH2 TIP3X6671 30.341 30.907 -9.188 1.00 0.00 W1 O +ATOM 22501 H1 TIP3X6671 30.336 30.439 -8.353 1.00 0.00 W1 H +ATOM 22502 H2 TIP3X6671 29.461 30.778 -9.541 1.00 0.00 W1 H +ATOM 22503 OH2 TIP3X6672 22.213 27.244 -8.166 1.00 0.00 W1 O +ATOM 22504 H1 TIP3X6672 21.642 26.524 -7.897 1.00 0.00 W1 H +ATOM 22505 H2 TIP3X6672 21.753 28.034 -7.883 1.00 0.00 W1 H +ATOM 22506 OH2 TIP3X6673 24.435 17.695 -3.595 1.00 0.00 W1 O +ATOM 22507 H1 TIP3X6673 23.692 18.175 -3.228 1.00 0.00 W1 H +ATOM 22508 H2 TIP3X6673 24.054 16.883 -3.930 1.00 0.00 W1 H +ATOM 22509 OH2 TIP3X6674 19.787 18.400 -13.794 1.00 0.00 W1 O +ATOM 22510 H1 TIP3X6674 19.689 17.738 -13.109 1.00 0.00 W1 H +ATOM 22511 H2 TIP3X6674 19.603 17.932 -14.608 1.00 0.00 W1 H +ATOM 22512 OH2 TIP3X6675 30.680 19.322 -5.604 1.00 0.00 W1 O +ATOM 22513 H1 TIP3X6675 31.199 19.991 -6.051 1.00 0.00 W1 H +ATOM 22514 H2 TIP3X6675 31.122 19.198 -4.764 1.00 0.00 W1 H +ATOM 22515 OH2 TIP3X6676 16.738 15.675 -11.444 1.00 0.00 W1 O +ATOM 22516 H1 TIP3X6676 17.463 16.296 -11.375 1.00 0.00 W1 H +ATOM 22517 H2 TIP3X6676 16.366 15.642 -10.563 1.00 0.00 W1 H +ATOM 22518 OH2 TIP3X6677 22.004 21.910 -1.458 1.00 0.00 W1 O +ATOM 22519 H1 TIP3X6677 22.868 22.309 -1.559 1.00 0.00 W1 H +ATOM 22520 H2 TIP3X6677 22.156 20.973 -1.580 1.00 0.00 W1 H +ATOM 22521 OH2 TIP3X6678 25.170 26.820 -8.718 1.00 0.00 W1 O +ATOM 22522 H1 TIP3X6678 25.264 25.957 -9.122 1.00 0.00 W1 H +ATOM 22523 H2 TIP3X6678 24.237 27.020 -8.794 1.00 0.00 W1 H +ATOM 22524 OH2 TIP3X6679 23.782 25.104 -11.187 1.00 0.00 W1 O +ATOM 22525 H1 TIP3X6679 23.218 24.490 -10.718 1.00 0.00 W1 H +ATOM 22526 H2 TIP3X6679 23.308 25.935 -11.159 1.00 0.00 W1 H +ATOM 22527 OH2 TIP3X6680 16.320 25.617 -4.730 1.00 0.00 W1 O +ATOM 22528 H1 TIP3X6680 15.785 25.016 -5.248 1.00 0.00 W1 H +ATOM 22529 H2 TIP3X6680 15.849 25.704 -3.901 1.00 0.00 W1 H +ATOM 22530 OH2 TIP3X6681 27.616 24.638 -10.363 1.00 0.00 W1 O +ATOM 22531 H1 TIP3X6681 27.560 23.723 -10.639 1.00 0.00 W1 H +ATOM 22532 H2 TIP3X6681 27.444 25.141 -11.159 1.00 0.00 W1 H +ATOM 22533 OH2 TIP3X6682 27.913 25.152 -3.338 1.00 0.00 W1 O +ATOM 22534 H1 TIP3X6682 27.011 25.236 -3.030 1.00 0.00 W1 H +ATOM 22535 H2 TIP3X6682 28.082 24.210 -3.335 1.00 0.00 W1 H +ATOM 22536 OH2 TIP3X6683 30.280 23.112 -5.533 1.00 0.00 W1 O +ATOM 22537 H1 TIP3X6683 30.942 22.431 -5.652 1.00 0.00 W1 H +ATOM 22538 H2 TIP3X6683 29.564 22.672 -5.074 1.00 0.00 W1 H +ATOM 22539 OH2 TIP3X6684 19.424 22.799 -0.388 1.00 0.00 W1 O +ATOM 22540 H1 TIP3X6684 18.895 22.565 -1.151 1.00 0.00 W1 H +ATOM 22541 H2 TIP3X6684 20.320 22.846 -0.723 1.00 0.00 W1 H +ATOM 22542 OH2 TIP3X6685 20.335 26.005 -4.827 1.00 0.00 W1 O +ATOM 22543 H1 TIP3X6685 20.290 25.450 -4.048 1.00 0.00 W1 H +ATOM 22544 H2 TIP3X6685 19.702 26.703 -4.661 1.00 0.00 W1 H +ATOM 22545 OH2 TIP3X6686 29.006 27.135 -5.077 1.00 0.00 W1 O +ATOM 22546 H1 TIP3X6686 29.430 27.903 -4.693 1.00 0.00 W1 H +ATOM 22547 H2 TIP3X6686 28.702 26.627 -4.325 1.00 0.00 W1 H +ATOM 22548 OH2 TIP3X6687 27.094 29.110 -3.252 1.00 0.00 W1 O +ATOM 22549 H1 TIP3X6687 26.387 28.481 -3.395 1.00 0.00 W1 H +ATOM 22550 H2 TIP3X6687 27.423 29.305 -4.130 1.00 0.00 W1 H +ATOM 22551 OH2 TIP3X6688 27.345 27.646 -0.856 1.00 0.00 W1 O +ATOM 22552 H1 TIP3X6688 26.711 27.040 -1.240 1.00 0.00 W1 H +ATOM 22553 H2 TIP3X6688 27.458 28.327 -1.520 1.00 0.00 W1 H +ATOM 22554 OH2 TIP3X6689 30.955 29.555 -6.789 1.00 0.00 W1 O +ATOM 22555 H1 TIP3X6689 31.633 29.396 -6.133 1.00 0.00 W1 H +ATOM 22556 H2 TIP3X6689 30.721 28.683 -7.108 1.00 0.00 W1 H +ATOM 22557 OH2 TIP3X6690 21.511 16.026 -8.397 1.00 0.00 W1 O +ATOM 22558 H1 TIP3X6690 21.220 16.935 -8.457 1.00 0.00 W1 H +ATOM 22559 H2 TIP3X6690 22.343 16.008 -8.870 1.00 0.00 W1 H +ATOM 22560 OH2 TIP3X6691 23.635 25.972 -14.742 1.00 0.00 W1 O +ATOM 22561 H1 TIP3X6691 22.940 25.350 -14.528 1.00 0.00 W1 H +ATOM 22562 H2 TIP3X6691 23.618 26.608 -14.027 1.00 0.00 W1 H +ATOM 22563 OH2 TIP3X6692 31.016 24.736 -15.306 1.00 0.00 W1 O +ATOM 22564 H1 TIP3X6692 30.753 23.986 -15.839 1.00 0.00 W1 H +ATOM 22565 H2 TIP3X6692 30.761 25.500 -15.823 1.00 0.00 W1 H +ATOM 22566 OH2 TIP3X6693 16.964 28.432 -15.589 1.00 0.00 W1 O +ATOM 22567 H1 TIP3X6693 17.409 27.883 -14.943 1.00 0.00 W1 H +ATOM 22568 H2 TIP3X6693 16.067 28.098 -15.610 1.00 0.00 W1 H +ATOM 22569 OH2 TIP3X6694 29.057 30.561 -14.330 1.00 0.00 W1 O +ATOM 22570 H1 TIP3X6694 29.942 30.233 -14.489 1.00 0.00 W1 H +ATOM 22571 H2 TIP3X6694 28.827 31.029 -15.133 1.00 0.00 W1 H +ATOM 22572 OH2 TIP3X6695 30.449 26.223 -2.253 1.00 0.00 W1 O +ATOM 22573 H1 TIP3X6695 30.340 27.172 -2.194 1.00 0.00 W1 H +ATOM 22574 H2 TIP3X6695 29.557 25.878 -2.263 1.00 0.00 W1 H +ATOM 22575 OH2 TIP3X6696 17.136 29.049 -12.634 1.00 0.00 W1 O +ATOM 22576 H1 TIP3X6696 17.068 29.885 -12.174 1.00 0.00 W1 H +ATOM 22577 H2 TIP3X6696 16.240 28.711 -12.651 1.00 0.00 W1 H +ATOM 22578 OH2 TIP3X6697 29.716 27.542 -14.990 1.00 0.00 W1 O +ATOM 22579 H1 TIP3X6697 29.747 27.462 -14.036 1.00 0.00 W1 H +ATOM 22580 H2 TIP3X6697 28.883 27.979 -15.166 1.00 0.00 W1 H +ATOM 22581 OH2 TIP3X6698 26.086 15.837 -2.106 1.00 0.00 W1 O +ATOM 22582 H1 TIP3X6698 25.780 16.585 -2.618 1.00 0.00 W1 H +ATOM 22583 H2 TIP3X6698 26.140 15.120 -2.738 1.00 0.00 W1 H +ATOM 22584 OH2 TIP3X6699 20.300 29.753 -4.077 1.00 0.00 W1 O +ATOM 22585 H1 TIP3X6699 21.148 29.991 -3.703 1.00 0.00 W1 H +ATOM 22586 H2 TIP3X6699 20.512 29.373 -4.930 1.00 0.00 W1 H +ATOM 22587 OH2 TIP3X6700 18.766 17.772 -0.726 1.00 0.00 W1 O +ATOM 22588 H1 TIP3X6700 17.889 17.861 -0.352 1.00 0.00 W1 H +ATOM 22589 H2 TIP3X6700 18.829 18.484 -1.363 1.00 0.00 W1 H +ATOM 22590 OH2 TIP3X6701 24.964 19.719 -14.996 1.00 0.00 W1 O +ATOM 22591 H1 TIP3X6701 24.798 20.016 -15.891 1.00 0.00 W1 H +ATOM 22592 H2 TIP3X6701 24.093 19.595 -14.619 1.00 0.00 W1 H +ATOM 22593 OH2 TIP3X6702 30.361 27.479 -11.948 1.00 0.00 W1 O +ATOM 22594 H1 TIP3X6702 30.934 26.742 -11.735 1.00 0.00 W1 H +ATOM 22595 H2 TIP3X6702 30.030 27.778 -11.101 1.00 0.00 W1 H +ATOM 22596 OH2 TIP3X6703 25.622 16.515 -15.019 1.00 0.00 W1 O +ATOM 22597 H1 TIP3X6703 26.354 17.131 -14.994 1.00 0.00 W1 H +ATOM 22598 H2 TIP3X6703 25.863 15.883 -15.695 1.00 0.00 W1 H +ATOM 22599 OH2 TIP3X6704 30.154 16.609 -4.754 1.00 0.00 W1 O +ATOM 22600 H1 TIP3X6704 30.646 15.979 -4.226 1.00 0.00 W1 H +ATOM 22601 H2 TIP3X6704 30.755 16.851 -5.459 1.00 0.00 W1 H +ATOM 22602 OH2 TIP3X6705 17.661 25.829 -8.676 1.00 0.00 W1 O +ATOM 22603 H1 TIP3X6705 16.993 26.153 -8.071 1.00 0.00 W1 H +ATOM 22604 H2 TIP3X6705 18.454 25.760 -8.144 1.00 0.00 W1 H +ATOM 22605 OH2 TIP3X6706 22.658 27.248 -1.565 1.00 0.00 W1 O +ATOM 22606 H1 TIP3X6706 22.882 26.870 -0.715 1.00 0.00 W1 H +ATOM 22607 H2 TIP3X6706 22.052 26.619 -1.956 1.00 0.00 W1 H +ATOM 22608 OH2 TIP3X6707 26.138 18.553 -6.153 1.00 0.00 W1 O +ATOM 22609 H1 TIP3X6707 26.197 18.371 -5.215 1.00 0.00 W1 H +ATOM 22610 H2 TIP3X6707 25.199 18.640 -6.321 1.00 0.00 W1 H +ATOM 22611 OH2 TIP3X6708 22.329 19.210 -1.974 1.00 0.00 W1 O +ATOM 22612 H1 TIP3X6708 21.462 19.140 -2.374 1.00 0.00 W1 H +ATOM 22613 H2 TIP3X6708 22.274 18.669 -1.186 1.00 0.00 W1 H +ATOM 22614 OH2 TIP3X6709 29.815 21.930 -0.221 1.00 0.00 W1 O +ATOM 22615 H1 TIP3X6709 30.610 21.397 -0.237 1.00 0.00 W1 H +ATOM 22616 H2 TIP3X6709 29.521 21.895 0.690 1.00 0.00 W1 H +ATOM 22617 OH2 TIP3X6710 18.000 15.797 -4.302 1.00 0.00 W1 O +ATOM 22618 H1 TIP3X6710 17.775 16.250 -5.115 1.00 0.00 W1 H +ATOM 22619 H2 TIP3X6710 18.830 15.360 -4.494 1.00 0.00 W1 H +ATOM 22620 OH2 TIP3X6711 24.095 16.255 -9.221 1.00 0.00 W1 O +ATOM 22621 H1 TIP3X6711 24.577 16.769 -9.868 1.00 0.00 W1 H +ATOM 22622 H2 TIP3X6711 24.439 16.548 -8.377 1.00 0.00 W1 H +ATOM 22623 OH2 TIP3X6712 18.565 20.846 -14.068 1.00 0.00 W1 O +ATOM 22624 H1 TIP3X6712 18.988 21.492 -14.634 1.00 0.00 W1 H +ATOM 22625 H2 TIP3X6712 19.277 20.271 -13.787 1.00 0.00 W1 H +ATOM 22626 OH2 TIP3X6713 19.090 21.503 -4.757 1.00 0.00 W1 O +ATOM 22627 H1 TIP3X6713 19.005 22.294 -4.225 1.00 0.00 W1 H +ATOM 22628 H2 TIP3X6713 20.005 21.499 -5.037 1.00 0.00 W1 H +ATOM 22629 OH2 TIP3X6714 18.272 22.221 -11.571 1.00 0.00 W1 O +ATOM 22630 H1 TIP3X6714 18.335 21.932 -12.482 1.00 0.00 W1 H +ATOM 22631 H2 TIP3X6714 19.048 22.766 -11.438 1.00 0.00 W1 H +ATOM 22632 OH2 TIP3X6715 27.293 18.791 -13.811 1.00 0.00 W1 O +ATOM 22633 H1 TIP3X6715 26.585 19.279 -14.231 1.00 0.00 W1 H +ATOM 22634 H2 TIP3X6715 28.018 18.835 -14.435 1.00 0.00 W1 H +ATOM 22635 OH2 TIP3X6716 15.843 19.677 -2.723 1.00 0.00 W1 O +ATOM 22636 H1 TIP3X6716 14.939 19.971 -2.612 1.00 0.00 W1 H +ATOM 22637 H2 TIP3X6716 15.984 19.058 -2.007 1.00 0.00 W1 H +ATOM 22638 OH2 TIP3X6717 16.987 16.515 -6.741 1.00 0.00 W1 O +ATOM 22639 H1 TIP3X6717 17.094 15.813 -7.383 1.00 0.00 W1 H +ATOM 22640 H2 TIP3X6717 17.122 17.320 -7.240 1.00 0.00 W1 H +ATOM 22641 OH2 TIP3X6718 28.508 20.143 -1.853 1.00 0.00 W1 O +ATOM 22642 H1 TIP3X6718 28.820 20.721 -1.157 1.00 0.00 W1 H +ATOM 22643 H2 TIP3X6718 27.564 20.079 -1.708 1.00 0.00 W1 H +ATOM 22644 OH2 TIP3X6719 25.551 20.148 -1.906 1.00 0.00 W1 O +ATOM 22645 H1 TIP3X6719 25.192 20.717 -2.587 1.00 0.00 W1 H +ATOM 22646 H2 TIP3X6719 25.214 19.278 -2.117 1.00 0.00 W1 H +ATOM 22647 OH2 TIP3X6720 23.754 20.618 -12.041 1.00 0.00 W1 O +ATOM 22648 H1 TIP3X6720 23.843 21.197 -12.797 1.00 0.00 W1 H +ATOM 22649 H2 TIP3X6720 22.985 20.083 -12.237 1.00 0.00 W1 H +ATOM 22650 OH2 TIP3X6721 22.057 19.949 -14.353 1.00 0.00 W1 O +ATOM 22651 H1 TIP3X6721 21.620 20.142 -15.183 1.00 0.00 W1 H +ATOM 22652 H2 TIP3X6721 21.650 19.138 -14.050 1.00 0.00 W1 H +ATOM 22653 OH2 TIP3X6722 22.768 17.011 -0.564 1.00 0.00 W1 O +ATOM 22654 H1 TIP3X6722 22.301 16.624 0.176 1.00 0.00 W1 H +ATOM 22655 H2 TIP3X6722 23.682 17.044 -0.282 1.00 0.00 W1 H +ATOM 22656 OH2 TIP3X6723 28.331 22.356 -3.883 1.00 0.00 W1 O +ATOM 22657 H1 TIP3X6723 28.350 21.706 -3.180 1.00 0.00 W1 H +ATOM 22658 H2 TIP3X6723 27.496 22.204 -4.327 1.00 0.00 W1 H +ATOM 22659 OH2 TIP3X6724 16.406 19.456 -15.413 1.00 0.00 W1 O +ATOM 22660 H1 TIP3X6724 15.649 19.264 -14.859 1.00 0.00 W1 H +ATOM 22661 H2 TIP3X6724 16.940 20.055 -14.891 1.00 0.00 W1 H +ATOM 22662 OH2 TIP3X6725 16.324 30.950 -14.926 1.00 0.00 W1 O +ATOM 22663 H1 TIP3X6725 16.740 30.202 -14.497 1.00 0.00 W1 H +ATOM 22664 H2 TIP3X6725 16.337 31.643 -14.267 1.00 0.00 W1 H +ATOM 22665 OH2 TIP3X6726 25.072 19.110 -9.933 1.00 0.00 W1 O +ATOM 22666 H1 TIP3X6726 24.735 19.460 -10.758 1.00 0.00 W1 H +ATOM 22667 H2 TIP3X6726 25.969 18.842 -10.135 1.00 0.00 W1 H +ATOM 22668 OH2 TIP3X6727 20.528 18.420 -8.189 1.00 0.00 W1 O +ATOM 22669 H1 TIP3X6727 19.585 18.373 -8.348 1.00 0.00 W1 H +ATOM 22670 H2 TIP3X6727 20.667 19.294 -7.826 1.00 0.00 W1 H +ATOM 22671 OH2 TIP3X6728 15.890 19.546 -11.396 1.00 0.00 W1 O +ATOM 22672 H1 TIP3X6728 15.616 19.422 -10.487 1.00 0.00 W1 H +ATOM 22673 H2 TIP3X6728 15.695 20.465 -11.582 1.00 0.00 W1 H +ATOM 22674 OH2 TIP3X6729 19.890 18.873 -3.335 1.00 0.00 W1 O +ATOM 22675 H1 TIP3X6729 19.912 18.067 -3.851 1.00 0.00 W1 H +ATOM 22676 H2 TIP3X6729 19.496 19.521 -3.920 1.00 0.00 W1 H +ATOM 22677 OH2 TIP3X6730 20.473 25.409 -7.531 1.00 0.00 W1 O +ATOM 22678 H1 TIP3X6730 20.402 24.473 -7.718 1.00 0.00 W1 H +ATOM 22679 H2 TIP3X6730 20.478 25.462 -6.575 1.00 0.00 W1 H +ATOM 22680 OH2 TIP3X6731 24.662 22.428 -2.968 1.00 0.00 W1 O +ATOM 22681 H1 TIP3X6731 25.074 23.259 -2.732 1.00 0.00 W1 H +ATOM 22682 H2 TIP3X6731 24.113 22.638 -3.723 1.00 0.00 W1 H +ATOM 22683 OH2 TIP3X6732 30.458 17.794 -13.644 1.00 0.00 W1 O +ATOM 22684 H1 TIP3X6732 30.892 18.021 -12.822 1.00 0.00 W1 H +ATOM 22685 H2 TIP3X6732 29.938 17.019 -13.434 1.00 0.00 W1 H +ATOM 22686 OH2 TIP3X6733 21.612 23.754 -14.466 1.00 0.00 W1 O +ATOM 22687 H1 TIP3X6733 21.323 23.632 -13.561 1.00 0.00 W1 H +ATOM 22688 H2 TIP3X6733 22.301 23.101 -14.587 1.00 0.00 W1 H +ATOM 22689 OH2 TIP3X6734 28.316 22.270 -13.398 1.00 0.00 W1 O +ATOM 22690 H1 TIP3X6734 27.451 22.071 -13.039 1.00 0.00 W1 H +ATOM 22691 H2 TIP3X6734 28.873 22.391 -12.629 1.00 0.00 W1 H +ATOM 22692 OH2 TIP3X6735 23.149 22.524 -6.927 1.00 0.00 W1 O +ATOM 22693 H1 TIP3X6735 23.246 23.321 -6.406 1.00 0.00 W1 H +ATOM 22694 H2 TIP3X6735 24.023 22.135 -6.936 1.00 0.00 W1 H +ATOM 22695 OH2 TIP3X6736 22.894 22.906 -10.011 1.00 0.00 W1 O +ATOM 22696 H1 TIP3X6736 23.515 22.310 -10.429 1.00 0.00 W1 H +ATOM 22697 H2 TIP3X6736 22.919 22.669 -9.084 1.00 0.00 W1 H +ATOM 22698 OH2 TIP3X6737 25.789 24.522 -1.075 1.00 0.00 W1 O +ATOM 22699 H1 TIP3X6737 25.111 24.806 -0.462 1.00 0.00 W1 H +ATOM 22700 H2 TIP3X6737 26.587 24.481 -0.549 1.00 0.00 W1 H +ATOM 22701 OH2 TIP3X6738 18.298 23.937 -3.379 1.00 0.00 W1 O +ATOM 22702 H1 TIP3X6738 18.815 24.343 -2.683 1.00 0.00 W1 H +ATOM 22703 H2 TIP3X6738 17.916 24.674 -3.855 1.00 0.00 W1 H +ATOM 22704 OH2 TIP3X6739 17.205 21.899 -1.758 1.00 0.00 W1 O +ATOM 22705 H1 TIP3X6739 17.001 21.060 -2.170 1.00 0.00 W1 H +ATOM 22706 H2 TIP3X6739 17.081 22.545 -2.453 1.00 0.00 W1 H +ATOM 22707 OH2 TIP3X6740 17.097 22.772 -8.934 1.00 0.00 W1 O +ATOM 22708 H1 TIP3X6740 17.454 23.645 -9.104 1.00 0.00 W1 H +ATOM 22709 H2 TIP3X6740 16.995 22.382 -9.802 1.00 0.00 W1 H +ATOM 22710 OH2 TIP3X6741 27.856 25.037 -14.748 1.00 0.00 W1 O +ATOM 22711 H1 TIP3X6741 28.562 25.536 -15.160 1.00 0.00 W1 H +ATOM 22712 H2 TIP3X6741 28.305 24.407 -14.184 1.00 0.00 W1 H +ATOM 22713 OH2 TIP3X6742 30.453 22.384 -11.385 1.00 0.00 W1 O +ATOM 22714 H1 TIP3X6742 30.165 22.557 -10.489 1.00 0.00 W1 H +ATOM 22715 H2 TIP3X6742 30.965 23.156 -11.626 1.00 0.00 W1 H +ATOM 22716 OH2 TIP3X6743 16.950 21.501 -6.663 1.00 0.00 W1 O +ATOM 22717 H1 TIP3X6743 17.045 22.179 -7.332 1.00 0.00 W1 H +ATOM 22718 H2 TIP3X6743 17.609 21.720 -6.004 1.00 0.00 W1 H +ATOM 22719 OH2 TIP3X6744 19.737 30.008 -13.399 1.00 0.00 W1 O +ATOM 22720 H1 TIP3X6744 19.508 30.368 -14.256 1.00 0.00 W1 H +ATOM 22721 H2 TIP3X6744 19.324 29.145 -13.383 1.00 0.00 W1 H +ATOM 22722 OH2 TIP3X6745 18.512 25.241 -14.901 1.00 0.00 W1 O +ATOM 22723 H1 TIP3X6745 17.696 24.952 -15.310 1.00 0.00 W1 H +ATOM 22724 H2 TIP3X6745 19.044 24.448 -14.840 1.00 0.00 W1 H +ATOM 22725 OH2 TIP3X6746 19.930 26.081 -1.826 1.00 0.00 W1 O +ATOM 22726 H1 TIP3X6746 19.357 26.683 -2.301 1.00 0.00 W1 H +ATOM 22727 H2 TIP3X6746 19.456 25.885 -1.018 1.00 0.00 W1 H +ATOM 22728 OH2 TIP3X6747 23.006 30.824 -4.136 1.00 0.00 W1 O +ATOM 22729 H1 TIP3X6747 23.324 30.530 -3.282 1.00 0.00 W1 H +ATOM 22730 H2 TIP3X6747 23.439 30.246 -4.765 1.00 0.00 W1 H +ATOM 22731 OH2 TIP3X6748 27.712 31.065 -10.002 1.00 0.00 W1 O +ATOM 22732 H1 TIP3X6748 27.300 30.374 -10.521 1.00 0.00 W1 H +ATOM 22733 H2 TIP3X6748 27.516 31.872 -10.479 1.00 0.00 W1 H +ATOM 22734 OH2 TIP3X6749 24.290 27.748 -12.750 1.00 0.00 W1 O +ATOM 22735 H1 TIP3X6749 24.549 28.533 -13.232 1.00 0.00 W1 H +ATOM 22736 H2 TIP3X6749 23.721 28.071 -12.052 1.00 0.00 W1 H +ATOM 22737 OH2 TIP3X6750 24.307 22.902 -13.679 1.00 0.00 W1 O +ATOM 22738 H1 TIP3X6750 25.130 22.975 -14.162 1.00 0.00 W1 H +ATOM 22739 H2 TIP3X6750 24.315 23.646 -13.077 1.00 0.00 W1 H +ATOM 22740 OH2 TIP3X6751 27.709 17.626 -3.888 1.00 0.00 W1 O +ATOM 22741 H1 TIP3X6751 28.514 17.395 -4.351 1.00 0.00 W1 H +ATOM 22742 H2 TIP3X6751 27.999 18.179 -3.163 1.00 0.00 W1 H +ATOM 22743 OH2 TIP3X6752 15.674 24.727 -12.482 1.00 0.00 W1 O +ATOM 22744 H1 TIP3X6752 15.520 24.819 -13.422 1.00 0.00 W1 H +ATOM 22745 H2 TIP3X6752 16.627 24.727 -12.393 1.00 0.00 W1 H +ATOM 22746 OH2 TIP3X6753 26.436 24.315 -5.886 1.00 0.00 W1 O +ATOM 22747 H1 TIP3X6753 26.981 24.977 -5.460 1.00 0.00 W1 H +ATOM 22748 H2 TIP3X6753 26.895 24.115 -6.701 1.00 0.00 W1 H +ATOM 22749 OH2 TIP3X6754 25.258 29.289 -14.808 1.00 0.00 W1 O +ATOM 22750 H1 TIP3X6754 26.083 29.324 -14.324 1.00 0.00 W1 H +ATOM 22751 H2 TIP3X6754 25.461 28.776 -15.591 1.00 0.00 W1 H +ATOM 22752 OH2 TIP3X6755 25.250 27.076 -3.157 1.00 0.00 W1 O +ATOM 22753 H1 TIP3X6755 24.429 27.323 -2.731 1.00 0.00 W1 H +ATOM 22754 H2 TIP3X6755 25.021 26.981 -4.082 1.00 0.00 W1 H +ATOM 22755 OH2 TIP3X6756 21.875 27.301 -11.271 1.00 0.00 W1 O +ATOM 22756 H1 TIP3X6756 21.168 27.448 -11.899 1.00 0.00 W1 H +ATOM 22757 H2 TIP3X6756 21.538 27.646 -10.444 1.00 0.00 W1 H +ATOM 22758 OH2 TIP3X6757 18.440 28.213 -2.559 1.00 0.00 W1 O +ATOM 22759 H1 TIP3X6757 19.174 28.824 -2.624 1.00 0.00 W1 H +ATOM 22760 H2 TIP3X6757 18.128 28.307 -1.660 1.00 0.00 W1 H +ATOM 22761 OH2 TIP3X6758 18.030 29.918 -8.458 1.00 0.00 W1 O +ATOM 22762 H1 TIP3X6758 17.444 29.177 -8.611 1.00 0.00 W1 H +ATOM 22763 H2 TIP3X6758 18.473 30.051 -9.296 1.00 0.00 W1 H +ATOM 22764 OH2 TIP3X6759 26.384 15.931 -7.377 1.00 0.00 W1 O +ATOM 22765 H1 TIP3X6759 26.716 15.856 -8.272 1.00 0.00 W1 H +ATOM 22766 H2 TIP3X6759 26.339 16.874 -7.216 1.00 0.00 W1 H +ATOM 22767 OH2 TIP3X6760 23.622 18.060 -7.143 1.00 0.00 W1 O +ATOM 22768 H1 TIP3X6760 23.260 18.549 -7.882 1.00 0.00 W1 H +ATOM 22769 H2 TIP3X6760 22.890 17.971 -6.533 1.00 0.00 W1 H +ATOM 22770 OH2 TIP3X6761 22.341 16.045 -13.215 1.00 0.00 W1 O +ATOM 22771 H1 TIP3X6761 23.196 15.789 -12.869 1.00 0.00 W1 H +ATOM 22772 H2 TIP3X6761 21.822 15.241 -13.190 1.00 0.00 W1 H +ATOM 22773 OH2 TIP3X6762 25.092 15.888 -12.171 1.00 0.00 W1 O +ATOM 22774 H1 TIP3X6762 25.548 15.152 -11.763 1.00 0.00 W1 H +ATOM 22775 H2 TIP3X6762 25.500 15.975 -13.033 1.00 0.00 W1 H +ATOM 22776 OH2 TIP3X6763 19.732 30.467 -0.717 1.00 0.00 W1 O +ATOM 22777 H1 TIP3X6763 19.481 31.224 -1.246 1.00 0.00 W1 H +ATOM 22778 H2 TIP3X6763 20.643 30.298 -0.956 1.00 0.00 W1 H +ATOM 22779 OH2 TIP3X6764 24.738 29.161 -10.416 1.00 0.00 W1 O +ATOM 22780 H1 TIP3X6764 25.399 28.519 -10.156 1.00 0.00 W1 H +ATOM 22781 H2 TIP3X6764 24.725 29.796 -9.700 1.00 0.00 W1 H +ATOM 22782 OH2 TIP3X6765 22.478 30.064 -1.507 1.00 0.00 W1 O +ATOM 22783 H1 TIP3X6765 22.695 29.171 -1.236 1.00 0.00 W1 H +ATOM 22784 H2 TIP3X6765 23.085 30.618 -1.017 1.00 0.00 W1 H +ATOM 22785 OH2 TIP3X6766 21.424 18.182 -11.462 1.00 0.00 W1 O +ATOM 22786 H1 TIP3X6766 22.081 17.523 -11.685 1.00 0.00 W1 H +ATOM 22787 H2 TIP3X6766 21.467 18.251 -10.508 1.00 0.00 W1 H +ATOM 22788 OH2 TIP3X6767 16.137 16.520 -2.006 1.00 0.00 W1 O +ATOM 22789 H1 TIP3X6767 16.886 16.325 -2.570 1.00 0.00 W1 H +ATOM 22790 H2 TIP3X6767 16.346 16.095 -1.175 1.00 0.00 W1 H +ATOM 22791 OH2 TIP3X6768 27.257 29.247 -12.405 1.00 0.00 W1 O +ATOM 22792 H1 TIP3X6768 27.402 28.307 -12.302 1.00 0.00 W1 H +ATOM 22793 H2 TIP3X6768 28.080 29.580 -12.762 1.00 0.00 W1 H +ATOM 22794 OH2 TIP3X6769 28.925 16.014 -1.178 1.00 0.00 W1 O +ATOM 22795 H1 TIP3X6769 28.311 16.088 -1.908 1.00 0.00 W1 H +ATOM 22796 H2 TIP3X6769 29.694 16.509 -1.459 1.00 0.00 W1 H +ATOM 22797 OH2 TIP3X6770 19.718 30.227 -10.691 1.00 0.00 W1 O +ATOM 22798 H1 TIP3X6770 19.712 30.272 -11.647 1.00 0.00 W1 H +ATOM 22799 H2 TIP3X6770 20.526 30.673 -10.435 1.00 0.00 W1 H +ATOM 22800 OH2 TIP3X6771 30.627 29.165 -2.742 1.00 0.00 W1 O +ATOM 22801 H1 TIP3X6771 29.905 29.716 -2.441 1.00 0.00 W1 H +ATOM 22802 H2 TIP3X6771 31.415 29.664 -2.528 1.00 0.00 W1 H +ATOM 22803 OH2 TIP3X6772 18.253 18.487 -11.062 1.00 0.00 W1 O +ATOM 22804 H1 TIP3X6772 17.610 18.876 -11.654 1.00 0.00 W1 H +ATOM 22805 H2 TIP3X6772 19.056 18.984 -11.220 1.00 0.00 W1 H +ATOM 22806 OH2 TIP3X6773 19.682 27.086 -13.330 1.00 0.00 W1 O +ATOM 22807 H1 TIP3X6773 19.643 26.458 -14.052 1.00 0.00 W1 H +ATOM 22808 H2 TIP3X6773 18.962 26.833 -12.752 1.00 0.00 W1 H +ATOM 22809 OH2 TIP3X6774 17.576 26.614 4.309 1.00 0.00 W1 O +ATOM 22810 H1 TIP3X6774 17.759 26.538 5.246 1.00 0.00 W1 H +ATOM 22811 H2 TIP3X6774 17.552 27.557 4.145 1.00 0.00 W1 H +ATOM 22812 OH2 TIP3X6775 28.679 24.105 8.047 1.00 0.00 W1 O +ATOM 22813 H1 TIP3X6775 28.914 24.370 7.158 1.00 0.00 W1 H +ATOM 22814 H2 TIP3X6775 29.508 23.842 8.446 1.00 0.00 W1 H +ATOM 22815 OH2 TIP3X6776 20.663 23.829 4.026 1.00 0.00 W1 O +ATOM 22816 H1 TIP3X6776 20.693 24.738 4.323 1.00 0.00 W1 H +ATOM 22817 H2 TIP3X6776 21.170 23.346 4.678 1.00 0.00 W1 H +ATOM 22818 OH2 TIP3X6777 28.466 27.988 6.169 1.00 0.00 W1 O +ATOM 22819 H1 TIP3X6777 28.191 28.478 6.944 1.00 0.00 W1 H +ATOM 22820 H2 TIP3X6777 27.941 27.188 6.192 1.00 0.00 W1 H +ATOM 22821 OH2 TIP3X6778 26.983 26.431 3.212 1.00 0.00 W1 O +ATOM 22822 H1 TIP3X6778 27.145 26.203 2.297 1.00 0.00 W1 H +ATOM 22823 H2 TIP3X6778 26.054 26.660 3.242 1.00 0.00 W1 H +ATOM 22824 OH2 TIP3X6779 30.830 26.963 7.997 1.00 0.00 W1 O +ATOM 22825 H1 TIP3X6779 30.278 27.046 7.219 1.00 0.00 W1 H +ATOM 22826 H2 TIP3X6779 30.220 26.747 8.702 1.00 0.00 W1 H +ATOM 22827 OH2 TIP3X6780 17.467 28.227 10.448 1.00 0.00 W1 O +ATOM 22828 H1 TIP3X6780 17.873 28.431 11.291 1.00 0.00 W1 H +ATOM 22829 H2 TIP3X6780 16.895 27.482 10.630 1.00 0.00 W1 H +ATOM 22830 OH2 TIP3X6781 24.842 29.852 9.674 1.00 0.00 W1 O +ATOM 22831 H1 TIP3X6781 25.143 28.952 9.796 1.00 0.00 W1 H +ATOM 22832 H2 TIP3X6781 25.467 30.233 9.057 1.00 0.00 W1 H +ATOM 22833 OH2 TIP3X6782 28.274 29.809 9.554 1.00 0.00 W1 O +ATOM 22834 H1 TIP3X6782 27.839 30.632 9.334 1.00 0.00 W1 H +ATOM 22835 H2 TIP3X6782 29.203 30.035 9.603 1.00 0.00 W1 H +ATOM 22836 OH2 TIP3X6783 20.722 29.384 8.683 1.00 0.00 W1 O +ATOM 22837 H1 TIP3X6783 21.078 30.233 8.420 1.00 0.00 W1 H +ATOM 22838 H2 TIP3X6783 19.787 29.443 8.487 1.00 0.00 W1 H +ATOM 22839 OH2 TIP3X6784 25.564 21.276 7.585 1.00 0.00 W1 O +ATOM 22840 H1 TIP3X6784 25.486 20.466 7.080 1.00 0.00 W1 H +ATOM 22841 H2 TIP3X6784 26.506 21.415 7.672 1.00 0.00 W1 H +ATOM 22842 OH2 TIP3X6785 21.587 17.374 9.947 1.00 0.00 W1 O +ATOM 22843 H1 TIP3X6785 21.844 16.636 10.500 1.00 0.00 W1 H +ATOM 22844 H2 TIP3X6785 20.910 17.017 9.371 1.00 0.00 W1 H +ATOM 22845 OH2 TIP3X6786 29.830 18.378 6.370 1.00 0.00 W1 O +ATOM 22846 H1 TIP3X6786 29.523 18.716 7.211 1.00 0.00 W1 H +ATOM 22847 H2 TIP3X6786 29.898 17.433 6.501 1.00 0.00 W1 H +ATOM 22848 OH2 TIP3X6787 28.428 19.573 8.324 1.00 0.00 W1 O +ATOM 22849 H1 TIP3X6787 29.003 19.345 9.054 1.00 0.00 W1 H +ATOM 22850 H2 TIP3X6787 27.553 19.319 8.618 1.00 0.00 W1 H +ATOM 22851 OH2 TIP3X6788 21.474 20.698 9.695 1.00 0.00 W1 O +ATOM 22852 H1 TIP3X6788 21.978 19.996 10.107 1.00 0.00 W1 H +ATOM 22853 H2 TIP3X6788 22.132 21.340 9.428 1.00 0.00 W1 H +ATOM 22854 OH2 TIP3X6789 28.951 21.746 6.592 1.00 0.00 W1 O +ATOM 22855 H1 TIP3X6789 28.992 20.847 6.916 1.00 0.00 W1 H +ATOM 22856 H2 TIP3X6789 28.833 22.279 7.379 1.00 0.00 W1 H +ATOM 22857 OH2 TIP3X6790 27.636 18.390 4.461 1.00 0.00 W1 O +ATOM 22858 H1 TIP3X6790 28.461 18.574 4.910 1.00 0.00 W1 H +ATOM 22859 H2 TIP3X6790 27.712 18.845 3.622 1.00 0.00 W1 H +ATOM 22860 OH2 TIP3X6791 23.818 24.361 10.532 1.00 0.00 W1 O +ATOM 22861 H1 TIP3X6791 24.695 24.383 10.149 1.00 0.00 W1 H +ATOM 22862 H2 TIP3X6791 23.553 25.280 10.578 1.00 0.00 W1 H +ATOM 22863 OH2 TIP3X6792 22.969 26.909 10.342 1.00 0.00 W1 O +ATOM 22864 H1 TIP3X6792 22.944 27.136 9.413 1.00 0.00 W1 H +ATOM 22865 H2 TIP3X6792 22.049 26.855 10.601 1.00 0.00 W1 H +ATOM 22866 OH2 TIP3X6793 17.832 18.791 7.180 1.00 0.00 W1 O +ATOM 22867 H1 TIP3X6793 17.506 19.670 7.371 1.00 0.00 W1 H +ATOM 22868 H2 TIP3X6793 17.708 18.688 6.237 1.00 0.00 W1 H +ATOM 22869 OH2 TIP3X6794 19.988 22.348 7.193 1.00 0.00 W1 O +ATOM 22870 H1 TIP3X6794 19.305 21.898 6.696 1.00 0.00 W1 H +ATOM 22871 H2 TIP3X6794 20.473 21.645 7.624 1.00 0.00 W1 H +ATOM 22872 OH2 TIP3X6795 26.043 27.273 9.589 1.00 0.00 W1 O +ATOM 22873 H1 TIP3X6795 25.801 26.686 8.872 1.00 0.00 W1 H +ATOM 22874 H2 TIP3X6795 26.993 27.183 9.662 1.00 0.00 W1 H +ATOM 22875 OH2 TIP3X6796 30.341 30.907 6.370 1.00 0.00 W1 O +ATOM 22876 H1 TIP3X6796 30.336 30.439 7.205 1.00 0.00 W1 H +ATOM 22877 H2 TIP3X6796 29.461 30.778 6.017 1.00 0.00 W1 H +ATOM 22878 OH2 TIP3X6797 22.213 27.244 7.392 1.00 0.00 W1 O +ATOM 22879 H1 TIP3X6797 21.642 26.524 7.661 1.00 0.00 W1 H +ATOM 22880 H2 TIP3X6797 21.753 28.034 7.674 1.00 0.00 W1 H +ATOM 22881 OH2 TIP3X6798 24.435 17.695 11.962 1.00 0.00 W1 O +ATOM 22882 H1 TIP3X6798 23.692 18.175 12.329 1.00 0.00 W1 H +ATOM 22883 H2 TIP3X6798 24.054 16.883 11.628 1.00 0.00 W1 H +ATOM 22884 OH2 TIP3X6799 19.787 18.400 1.764 1.00 0.00 W1 O +ATOM 22885 H1 TIP3X6799 19.689 17.738 2.448 1.00 0.00 W1 H +ATOM 22886 H2 TIP3X6799 19.603 17.932 0.949 1.00 0.00 W1 H +ATOM 22887 OH2 TIP3X6800 30.680 19.322 9.953 1.00 0.00 W1 O +ATOM 22888 H1 TIP3X6800 31.199 19.991 9.506 1.00 0.00 W1 H +ATOM 22889 H2 TIP3X6800 31.122 19.198 10.793 1.00 0.00 W1 H +ATOM 22890 OH2 TIP3X6801 16.738 15.675 4.113 1.00 0.00 W1 O +ATOM 22891 H1 TIP3X6801 17.463 16.296 4.182 1.00 0.00 W1 H +ATOM 22892 H2 TIP3X6801 16.366 15.642 4.995 1.00 0.00 W1 H +ATOM 22893 OH2 TIP3X6802 22.004 21.910 14.100 1.00 0.00 W1 O +ATOM 22894 H1 TIP3X6802 22.868 22.309 13.998 1.00 0.00 W1 H +ATOM 22895 H2 TIP3X6802 22.156 20.973 13.977 1.00 0.00 W1 H +ATOM 22896 OH2 TIP3X6803 25.170 26.820 6.839 1.00 0.00 W1 O +ATOM 22897 H1 TIP3X6803 25.264 25.957 6.436 1.00 0.00 W1 H +ATOM 22898 H2 TIP3X6803 24.237 27.020 6.763 1.00 0.00 W1 H +ATOM 22899 OH2 TIP3X6804 23.782 25.104 4.370 1.00 0.00 W1 O +ATOM 22900 H1 TIP3X6804 23.218 24.490 4.840 1.00 0.00 W1 H +ATOM 22901 H2 TIP3X6804 23.308 25.935 4.398 1.00 0.00 W1 H +ATOM 22902 OH2 TIP3X6805 16.320 25.617 10.827 1.00 0.00 W1 O +ATOM 22903 H1 TIP3X6805 15.785 25.016 10.309 1.00 0.00 W1 H +ATOM 22904 H2 TIP3X6805 15.849 25.704 11.656 1.00 0.00 W1 H +ATOM 22905 OH2 TIP3X6806 27.616 24.638 5.195 1.00 0.00 W1 O +ATOM 22906 H1 TIP3X6806 27.560 23.723 4.918 1.00 0.00 W1 H +ATOM 22907 H2 TIP3X6806 27.444 25.141 4.399 1.00 0.00 W1 H +ATOM 22908 OH2 TIP3X6807 27.913 25.152 12.219 1.00 0.00 W1 O +ATOM 22909 H1 TIP3X6807 27.011 25.236 12.527 1.00 0.00 W1 H +ATOM 22910 H2 TIP3X6807 28.082 24.210 12.223 1.00 0.00 W1 H +ATOM 22911 OH2 TIP3X6808 30.280 23.112 10.025 1.00 0.00 W1 O +ATOM 22912 H1 TIP3X6808 30.942 22.431 9.906 1.00 0.00 W1 H +ATOM 22913 H2 TIP3X6808 29.564 22.672 10.484 1.00 0.00 W1 H +ATOM 22914 OH2 TIP3X6809 19.424 22.799 15.169 1.00 0.00 W1 O +ATOM 22915 H1 TIP3X6809 18.895 22.565 14.407 1.00 0.00 W1 H +ATOM 22916 H2 TIP3X6809 20.320 22.846 14.835 1.00 0.00 W1 H +ATOM 22917 OH2 TIP3X6810 20.335 26.005 10.731 1.00 0.00 W1 O +ATOM 22918 H1 TIP3X6810 20.290 25.450 11.509 1.00 0.00 W1 H +ATOM 22919 H2 TIP3X6810 19.702 26.703 10.897 1.00 0.00 W1 H +ATOM 22920 OH2 TIP3X6811 29.006 27.135 10.480 1.00 0.00 W1 O +ATOM 22921 H1 TIP3X6811 29.430 27.903 10.864 1.00 0.00 W1 H +ATOM 22922 H2 TIP3X6811 28.702 26.627 11.233 1.00 0.00 W1 H +ATOM 22923 OH2 TIP3X6812 27.094 29.110 12.305 1.00 0.00 W1 O +ATOM 22924 H1 TIP3X6812 26.387 28.481 12.163 1.00 0.00 W1 H +ATOM 22925 H2 TIP3X6812 27.423 29.305 11.428 1.00 0.00 W1 H +ATOM 22926 OH2 TIP3X6813 27.345 27.646 14.702 1.00 0.00 W1 O +ATOM 22927 H1 TIP3X6813 26.711 27.040 14.318 1.00 0.00 W1 H +ATOM 22928 H2 TIP3X6813 27.458 28.327 14.038 1.00 0.00 W1 H +ATOM 22929 OH2 TIP3X6814 30.955 29.555 8.768 1.00 0.00 W1 O +ATOM 22930 H1 TIP3X6814 31.633 29.396 9.425 1.00 0.00 W1 H +ATOM 22931 H2 TIP3X6814 30.721 28.683 8.449 1.00 0.00 W1 H +ATOM 22932 OH2 TIP3X6815 21.511 16.026 7.161 1.00 0.00 W1 O +ATOM 22933 H1 TIP3X6815 21.220 16.935 7.100 1.00 0.00 W1 H +ATOM 22934 H2 TIP3X6815 22.343 16.008 6.688 1.00 0.00 W1 H +ATOM 22935 OH2 TIP3X6816 23.635 25.972 0.815 1.00 0.00 W1 O +ATOM 22936 H1 TIP3X6816 22.940 25.350 1.030 1.00 0.00 W1 H +ATOM 22937 H2 TIP3X6816 23.618 26.608 1.530 1.00 0.00 W1 H +ATOM 22938 OH2 TIP3X6817 31.016 24.736 0.252 1.00 0.00 W1 O +ATOM 22939 H1 TIP3X6817 30.753 23.986 -0.282 1.00 0.00 W1 H +ATOM 22940 H2 TIP3X6817 30.761 25.500 -0.266 1.00 0.00 W1 H +ATOM 22941 OH2 TIP3X6818 16.964 28.432 -0.031 1.00 0.00 W1 O +ATOM 22942 H1 TIP3X6818 17.409 27.883 0.614 1.00 0.00 W1 H +ATOM 22943 H2 TIP3X6818 16.067 28.098 -0.053 1.00 0.00 W1 H +ATOM 22944 OH2 TIP3X6819 29.057 30.561 1.227 1.00 0.00 W1 O +ATOM 22945 H1 TIP3X6819 29.942 30.233 1.069 1.00 0.00 W1 H +ATOM 22946 H2 TIP3X6819 28.827 31.029 0.425 1.00 0.00 W1 H +ATOM 22947 OH2 TIP3X6820 30.449 26.223 13.305 1.00 0.00 W1 O +ATOM 22948 H1 TIP3X6820 30.340 27.172 13.364 1.00 0.00 W1 H +ATOM 22949 H2 TIP3X6820 29.557 25.878 13.294 1.00 0.00 W1 H +ATOM 22950 OH2 TIP3X6821 17.136 29.049 2.923 1.00 0.00 W1 O +ATOM 22951 H1 TIP3X6821 17.068 29.885 3.384 1.00 0.00 W1 H +ATOM 22952 H2 TIP3X6821 16.240 28.711 2.907 1.00 0.00 W1 H +ATOM 22953 OH2 TIP3X6822 29.716 27.542 0.568 1.00 0.00 W1 O +ATOM 22954 H1 TIP3X6822 29.747 27.462 1.521 1.00 0.00 W1 H +ATOM 22955 H2 TIP3X6822 28.883 27.979 0.391 1.00 0.00 W1 H +ATOM 22956 OH2 TIP3X6823 26.086 15.837 13.452 1.00 0.00 W1 O +ATOM 22957 H1 TIP3X6823 25.780 16.585 12.939 1.00 0.00 W1 H +ATOM 22958 H2 TIP3X6823 26.140 15.120 12.820 1.00 0.00 W1 H +ATOM 22959 OH2 TIP3X6824 20.300 29.753 11.481 1.00 0.00 W1 O +ATOM 22960 H1 TIP3X6824 21.148 29.991 11.854 1.00 0.00 W1 H +ATOM 22961 H2 TIP3X6824 20.512 29.373 10.628 1.00 0.00 W1 H +ATOM 22962 OH2 TIP3X6825 18.766 17.772 14.831 1.00 0.00 W1 O +ATOM 22963 H1 TIP3X6825 17.889 17.861 15.205 1.00 0.00 W1 H +ATOM 22964 H2 TIP3X6825 18.829 18.484 14.195 1.00 0.00 W1 H +ATOM 22965 OH2 TIP3X6826 24.964 19.719 0.562 1.00 0.00 W1 O +ATOM 22966 H1 TIP3X6826 24.798 20.016 -0.333 1.00 0.00 W1 H +ATOM 22967 H2 TIP3X6826 24.093 19.595 0.939 1.00 0.00 W1 H +ATOM 22968 OH2 TIP3X6827 30.361 27.479 3.610 1.00 0.00 W1 O +ATOM 22969 H1 TIP3X6827 30.934 26.742 3.823 1.00 0.00 W1 H +ATOM 22970 H2 TIP3X6827 30.030 27.778 4.457 1.00 0.00 W1 H +ATOM 22971 OH2 TIP3X6828 25.622 16.515 0.539 1.00 0.00 W1 O +ATOM 22972 H1 TIP3X6828 26.354 17.131 0.563 1.00 0.00 W1 H +ATOM 22973 H2 TIP3X6828 25.863 15.883 -0.138 1.00 0.00 W1 H +ATOM 22974 OH2 TIP3X6829 30.154 16.609 10.804 1.00 0.00 W1 O +ATOM 22975 H1 TIP3X6829 30.646 15.979 11.331 1.00 0.00 W1 H +ATOM 22976 H2 TIP3X6829 30.755 16.851 10.098 1.00 0.00 W1 H +ATOM 22977 OH2 TIP3X6830 17.661 25.829 6.882 1.00 0.00 W1 O +ATOM 22978 H1 TIP3X6830 16.993 26.153 7.486 1.00 0.00 W1 H +ATOM 22979 H2 TIP3X6830 18.454 25.760 7.414 1.00 0.00 W1 H +ATOM 22980 OH2 TIP3X6831 22.658 27.248 13.992 1.00 0.00 W1 O +ATOM 22981 H1 TIP3X6831 22.882 26.870 14.843 1.00 0.00 W1 H +ATOM 22982 H2 TIP3X6831 22.052 26.619 13.602 1.00 0.00 W1 H +ATOM 22983 OH2 TIP3X6832 26.138 18.553 9.405 1.00 0.00 W1 O +ATOM 22984 H1 TIP3X6832 26.197 18.371 10.343 1.00 0.00 W1 H +ATOM 22985 H2 TIP3X6832 25.199 18.640 9.236 1.00 0.00 W1 H +ATOM 22986 OH2 TIP3X6833 22.329 19.210 13.584 1.00 0.00 W1 O +ATOM 22987 H1 TIP3X6833 21.462 19.140 13.184 1.00 0.00 W1 H +ATOM 22988 H2 TIP3X6833 22.274 18.669 14.372 1.00 0.00 W1 H +ATOM 22989 OH2 TIP3X6834 29.815 21.930 15.337 1.00 0.00 W1 O +ATOM 22990 H1 TIP3X6834 30.610 21.397 15.320 1.00 0.00 W1 H +ATOM 22991 H2 TIP3X6834 29.521 21.895 16.247 1.00 0.00 W1 H +ATOM 22992 OH2 TIP3X6835 18.000 15.797 11.255 1.00 0.00 W1 O +ATOM 22993 H1 TIP3X6835 17.775 16.250 10.443 1.00 0.00 W1 H +ATOM 22994 H2 TIP3X6835 18.830 15.360 11.064 1.00 0.00 W1 H +ATOM 22995 OH2 TIP3X6836 24.095 16.255 6.337 1.00 0.00 W1 O +ATOM 22996 H1 TIP3X6836 24.577 16.769 5.689 1.00 0.00 W1 H +ATOM 22997 H2 TIP3X6836 24.439 16.548 7.181 1.00 0.00 W1 H +ATOM 22998 OH2 TIP3X6837 18.565 20.846 1.490 1.00 0.00 W1 O +ATOM 22999 H1 TIP3X6837 18.988 21.492 0.924 1.00 0.00 W1 H +ATOM 23000 H2 TIP3X6837 19.277 20.271 1.771 1.00 0.00 W1 H +ATOM 23001 OH2 TIP3X6838 19.090 21.503 10.801 1.00 0.00 W1 O +ATOM 23002 H1 TIP3X6838 19.005 22.294 11.333 1.00 0.00 W1 H +ATOM 23003 H2 TIP3X6838 20.005 21.499 10.520 1.00 0.00 W1 H +ATOM 23004 OH2 TIP3X6839 18.272 22.221 3.986 1.00 0.00 W1 O +ATOM 23005 H1 TIP3X6839 18.335 21.932 3.076 1.00 0.00 W1 H +ATOM 23006 H2 TIP3X6839 19.048 22.766 4.119 1.00 0.00 W1 H +ATOM 23007 OH2 TIP3X6840 27.293 18.791 1.746 1.00 0.00 W1 O +ATOM 23008 H1 TIP3X6840 26.585 19.279 1.326 1.00 0.00 W1 H +ATOM 23009 H2 TIP3X6840 28.018 18.835 1.123 1.00 0.00 W1 H +ATOM 23010 OH2 TIP3X6841 15.843 19.677 12.834 1.00 0.00 W1 O +ATOM 23011 H1 TIP3X6841 14.939 19.971 12.945 1.00 0.00 W1 H +ATOM 23012 H2 TIP3X6841 15.984 19.058 13.551 1.00 0.00 W1 H +ATOM 23013 OH2 TIP3X6842 16.987 16.515 8.817 1.00 0.00 W1 O +ATOM 23014 H1 TIP3X6842 17.094 15.813 8.174 1.00 0.00 W1 H +ATOM 23015 H2 TIP3X6842 17.122 17.320 8.318 1.00 0.00 W1 H +ATOM 23016 OH2 TIP3X6843 28.508 20.143 13.704 1.00 0.00 W1 O +ATOM 23017 H1 TIP3X6843 28.820 20.721 14.400 1.00 0.00 W1 H +ATOM 23018 H2 TIP3X6843 27.564 20.079 13.849 1.00 0.00 W1 H +ATOM 23019 OH2 TIP3X6844 25.551 20.148 13.651 1.00 0.00 W1 O +ATOM 23020 H1 TIP3X6844 25.192 20.717 12.970 1.00 0.00 W1 H +ATOM 23021 H2 TIP3X6844 25.214 19.278 13.440 1.00 0.00 W1 H +ATOM 23022 OH2 TIP3X6845 23.754 20.618 3.517 1.00 0.00 W1 O +ATOM 23023 H1 TIP3X6845 23.843 21.197 2.760 1.00 0.00 W1 H +ATOM 23024 H2 TIP3X6845 22.985 20.083 3.320 1.00 0.00 W1 H +ATOM 23025 OH2 TIP3X6846 22.057 19.949 1.204 1.00 0.00 W1 O +ATOM 23026 H1 TIP3X6846 21.620 20.142 0.375 1.00 0.00 W1 H +ATOM 23027 H2 TIP3X6846 21.650 19.138 1.508 1.00 0.00 W1 H +ATOM 23028 OH2 TIP3X6847 22.768 17.011 14.993 1.00 0.00 W1 O +ATOM 23029 H1 TIP3X6847 22.301 16.624 15.734 1.00 0.00 W1 H +ATOM 23030 H2 TIP3X6847 23.682 17.044 15.276 1.00 0.00 W1 H +ATOM 23031 OH2 TIP3X6848 28.331 22.356 11.675 1.00 0.00 W1 O +ATOM 23032 H1 TIP3X6848 28.350 21.706 12.378 1.00 0.00 W1 H +ATOM 23033 H2 TIP3X6848 27.496 22.204 11.231 1.00 0.00 W1 H +ATOM 23034 OH2 TIP3X6849 16.406 19.456 0.144 1.00 0.00 W1 O +ATOM 23035 H1 TIP3X6849 15.649 19.264 0.698 1.00 0.00 W1 H +ATOM 23036 H2 TIP3X6849 16.940 20.055 0.667 1.00 0.00 W1 H +ATOM 23037 OH2 TIP3X6850 16.324 30.950 0.631 1.00 0.00 W1 O +ATOM 23038 H1 TIP3X6850 16.740 30.202 1.060 1.00 0.00 W1 H +ATOM 23039 H2 TIP3X6850 16.337 31.643 1.291 1.00 0.00 W1 H +ATOM 23040 OH2 TIP3X6851 25.072 19.110 5.624 1.00 0.00 W1 O +ATOM 23041 H1 TIP3X6851 24.735 19.460 4.800 1.00 0.00 W1 H +ATOM 23042 H2 TIP3X6851 25.969 18.842 5.423 1.00 0.00 W1 H +ATOM 23043 OH2 TIP3X6852 20.528 18.420 7.368 1.00 0.00 W1 O +ATOM 23044 H1 TIP3X6852 19.585 18.373 7.209 1.00 0.00 W1 H +ATOM 23045 H2 TIP3X6852 20.667 19.294 7.732 1.00 0.00 W1 H +ATOM 23046 OH2 TIP3X6853 15.890 19.546 4.162 1.00 0.00 W1 O +ATOM 23047 H1 TIP3X6853 15.616 19.422 5.070 1.00 0.00 W1 H +ATOM 23048 H2 TIP3X6853 15.695 20.465 3.976 1.00 0.00 W1 H +ATOM 23049 OH2 TIP3X6854 19.890 18.873 12.222 1.00 0.00 W1 O +ATOM 23050 H1 TIP3X6854 19.912 18.067 11.706 1.00 0.00 W1 H +ATOM 23051 H2 TIP3X6854 19.496 19.521 11.638 1.00 0.00 W1 H +ATOM 23052 OH2 TIP3X6855 20.473 25.409 8.027 1.00 0.00 W1 O +ATOM 23053 H1 TIP3X6855 20.402 24.473 7.839 1.00 0.00 W1 H +ATOM 23054 H2 TIP3X6855 20.478 25.462 8.983 1.00 0.00 W1 H +ATOM 23055 OH2 TIP3X6856 24.662 22.428 12.589 1.00 0.00 W1 O +ATOM 23056 H1 TIP3X6856 25.074 23.259 12.826 1.00 0.00 W1 H +ATOM 23057 H2 TIP3X6856 24.113 22.638 11.835 1.00 0.00 W1 H +ATOM 23058 OH2 TIP3X6857 30.458 17.794 1.914 1.00 0.00 W1 O +ATOM 23059 H1 TIP3X6857 30.892 18.021 2.736 1.00 0.00 W1 H +ATOM 23060 H2 TIP3X6857 29.938 17.019 2.123 1.00 0.00 W1 H +ATOM 23061 OH2 TIP3X6858 21.612 23.754 1.092 1.00 0.00 W1 O +ATOM 23062 H1 TIP3X6858 21.323 23.632 1.996 1.00 0.00 W1 H +ATOM 23063 H2 TIP3X6858 22.301 23.101 0.970 1.00 0.00 W1 H +ATOM 23064 OH2 TIP3X6859 28.316 22.270 2.160 1.00 0.00 W1 O +ATOM 23065 H1 TIP3X6859 27.451 22.071 2.519 1.00 0.00 W1 H +ATOM 23066 H2 TIP3X6859 28.873 22.391 2.929 1.00 0.00 W1 H +ATOM 23067 OH2 TIP3X6860 23.149 22.524 8.630 1.00 0.00 W1 O +ATOM 23068 H1 TIP3X6860 23.246 23.321 9.152 1.00 0.00 W1 H +ATOM 23069 H2 TIP3X6860 24.023 22.135 8.622 1.00 0.00 W1 H +ATOM 23070 OH2 TIP3X6861 22.894 22.906 5.546 1.00 0.00 W1 O +ATOM 23071 H1 TIP3X6861 23.515 22.310 5.128 1.00 0.00 W1 H +ATOM 23072 H2 TIP3X6861 22.919 22.669 6.473 1.00 0.00 W1 H +ATOM 23073 OH2 TIP3X6862 25.789 24.522 14.482 1.00 0.00 W1 O +ATOM 23074 H1 TIP3X6862 25.111 24.806 15.095 1.00 0.00 W1 H +ATOM 23075 H2 TIP3X6862 26.587 24.481 15.009 1.00 0.00 W1 H +ATOM 23076 OH2 TIP3X6863 18.298 23.937 12.178 1.00 0.00 W1 O +ATOM 23077 H1 TIP3X6863 18.815 24.343 12.874 1.00 0.00 W1 H +ATOM 23078 H2 TIP3X6863 17.916 24.674 11.703 1.00 0.00 W1 H +ATOM 23079 OH2 TIP3X6864 17.205 21.899 13.800 1.00 0.00 W1 O +ATOM 23080 H1 TIP3X6864 17.001 21.060 13.387 1.00 0.00 W1 H +ATOM 23081 H2 TIP3X6864 17.081 22.545 13.104 1.00 0.00 W1 H +ATOM 23082 OH2 TIP3X6865 17.097 22.772 6.623 1.00 0.00 W1 O +ATOM 23083 H1 TIP3X6865 17.454 23.645 6.453 1.00 0.00 W1 H +ATOM 23084 H2 TIP3X6865 16.995 22.382 5.755 1.00 0.00 W1 H +ATOM 23085 OH2 TIP3X6866 27.856 25.037 0.810 1.00 0.00 W1 O +ATOM 23086 H1 TIP3X6866 28.562 25.536 0.398 1.00 0.00 W1 H +ATOM 23087 H2 TIP3X6866 28.305 24.407 1.373 1.00 0.00 W1 H +ATOM 23088 OH2 TIP3X6867 30.453 22.384 4.172 1.00 0.00 W1 O +ATOM 23089 H1 TIP3X6867 30.165 22.557 5.069 1.00 0.00 W1 H +ATOM 23090 H2 TIP3X6867 30.965 23.156 3.932 1.00 0.00 W1 H +ATOM 23091 OH2 TIP3X6868 16.950 21.501 8.894 1.00 0.00 W1 O +ATOM 23092 H1 TIP3X6868 17.045 22.179 8.226 1.00 0.00 W1 H +ATOM 23093 H2 TIP3X6868 17.609 21.720 9.553 1.00 0.00 W1 H +ATOM 23094 OH2 TIP3X6869 19.737 30.008 2.158 1.00 0.00 W1 O +ATOM 23095 H1 TIP3X6869 19.508 30.368 1.301 1.00 0.00 W1 H +ATOM 23096 H2 TIP3X6869 19.324 29.145 2.174 1.00 0.00 W1 H +ATOM 23097 OH2 TIP3X6870 18.512 25.241 0.656 1.00 0.00 W1 O +ATOM 23098 H1 TIP3X6870 17.696 24.952 0.248 1.00 0.00 W1 H +ATOM 23099 H2 TIP3X6870 19.044 24.448 0.718 1.00 0.00 W1 H +ATOM 23100 OH2 TIP3X6871 19.930 26.081 13.731 1.00 0.00 W1 O +ATOM 23101 H1 TIP3X6871 19.357 26.683 13.257 1.00 0.00 W1 H +ATOM 23102 H2 TIP3X6871 19.456 25.885 14.539 1.00 0.00 W1 H +ATOM 23103 OH2 TIP3X6872 23.006 30.824 11.422 1.00 0.00 W1 O +ATOM 23104 H1 TIP3X6872 23.324 30.530 12.275 1.00 0.00 W1 H +ATOM 23105 H2 TIP3X6872 23.439 30.246 10.793 1.00 0.00 W1 H +ATOM 23106 OH2 TIP3X6873 27.712 31.065 5.555 1.00 0.00 W1 O +ATOM 23107 H1 TIP3X6873 27.300 30.374 5.037 1.00 0.00 W1 H +ATOM 23108 H2 TIP3X6873 27.516 31.872 5.079 1.00 0.00 W1 H +ATOM 23109 OH2 TIP3X6874 24.290 27.748 2.807 1.00 0.00 W1 O +ATOM 23110 H1 TIP3X6874 24.549 28.533 2.325 1.00 0.00 W1 H +ATOM 23111 H2 TIP3X6874 23.721 28.071 3.505 1.00 0.00 W1 H +ATOM 23112 OH2 TIP3X6875 24.307 22.902 1.878 1.00 0.00 W1 O +ATOM 23113 H1 TIP3X6875 25.130 22.975 1.396 1.00 0.00 W1 H +ATOM 23114 H2 TIP3X6875 24.315 23.646 2.480 1.00 0.00 W1 H +ATOM 23115 OH2 TIP3X6876 27.709 17.626 11.670 1.00 0.00 W1 O +ATOM 23116 H1 TIP3X6876 28.514 17.395 11.206 1.00 0.00 W1 H +ATOM 23117 H2 TIP3X6876 27.999 18.179 12.395 1.00 0.00 W1 H +ATOM 23118 OH2 TIP3X6877 15.674 24.727 3.076 1.00 0.00 W1 O +ATOM 23119 H1 TIP3X6877 15.520 24.819 2.136 1.00 0.00 W1 H +ATOM 23120 H2 TIP3X6877 16.627 24.727 3.165 1.00 0.00 W1 H +ATOM 23121 OH2 TIP3X6878 26.436 24.315 9.672 1.00 0.00 W1 O +ATOM 23122 H1 TIP3X6878 26.981 24.977 10.098 1.00 0.00 W1 H +ATOM 23123 H2 TIP3X6878 26.895 24.115 8.856 1.00 0.00 W1 H +ATOM 23124 OH2 TIP3X6879 25.258 29.289 0.749 1.00 0.00 W1 O +ATOM 23125 H1 TIP3X6879 26.083 29.324 1.234 1.00 0.00 W1 H +ATOM 23126 H2 TIP3X6879 25.461 28.776 -0.033 1.00 0.00 W1 H +ATOM 23127 OH2 TIP3X6880 25.250 27.076 12.400 1.00 0.00 W1 O +ATOM 23128 H1 TIP3X6880 24.429 27.323 12.826 1.00 0.00 W1 H +ATOM 23129 H2 TIP3X6880 25.021 26.981 11.476 1.00 0.00 W1 H +ATOM 23130 OH2 TIP3X6881 21.875 27.301 4.287 1.00 0.00 W1 O +ATOM 23131 H1 TIP3X6881 21.168 27.448 3.659 1.00 0.00 W1 H +ATOM 23132 H2 TIP3X6881 21.538 27.646 5.114 1.00 0.00 W1 H +ATOM 23133 OH2 TIP3X6882 18.440 28.213 12.998 1.00 0.00 W1 O +ATOM 23134 H1 TIP3X6882 19.174 28.824 12.933 1.00 0.00 W1 H +ATOM 23135 H2 TIP3X6882 18.128 28.307 13.898 1.00 0.00 W1 H +ATOM 23136 OH2 TIP3X6883 18.030 29.918 7.100 1.00 0.00 W1 O +ATOM 23137 H1 TIP3X6883 17.444 29.177 6.946 1.00 0.00 W1 H +ATOM 23138 H2 TIP3X6883 18.473 30.051 6.261 1.00 0.00 W1 H +ATOM 23139 OH2 TIP3X6884 26.384 15.931 8.180 1.00 0.00 W1 O +ATOM 23140 H1 TIP3X6884 26.716 15.856 7.286 1.00 0.00 W1 H +ATOM 23141 H2 TIP3X6884 26.339 16.874 8.341 1.00 0.00 W1 H +ATOM 23142 OH2 TIP3X6885 23.622 18.060 8.415 1.00 0.00 W1 O +ATOM 23143 H1 TIP3X6885 23.260 18.549 7.676 1.00 0.00 W1 H +ATOM 23144 H2 TIP3X6885 22.890 17.971 9.025 1.00 0.00 W1 H +ATOM 23145 OH2 TIP3X6886 22.341 16.045 2.343 1.00 0.00 W1 O +ATOM 23146 H1 TIP3X6886 23.196 15.789 2.688 1.00 0.00 W1 H +ATOM 23147 H2 TIP3X6886 21.822 15.241 2.368 1.00 0.00 W1 H +ATOM 23148 OH2 TIP3X6887 25.092 15.888 3.386 1.00 0.00 W1 O +ATOM 23149 H1 TIP3X6887 25.548 15.152 3.795 1.00 0.00 W1 H +ATOM 23150 H2 TIP3X6887 25.500 15.975 2.524 1.00 0.00 W1 H +ATOM 23151 OH2 TIP3X6888 19.732 30.467 14.841 1.00 0.00 W1 O +ATOM 23152 H1 TIP3X6888 19.481 31.224 14.311 1.00 0.00 W1 H +ATOM 23153 H2 TIP3X6888 20.643 30.298 14.602 1.00 0.00 W1 H +ATOM 23154 OH2 TIP3X6889 24.738 29.161 5.141 1.00 0.00 W1 O +ATOM 23155 H1 TIP3X6889 25.399 28.519 5.401 1.00 0.00 W1 H +ATOM 23156 H2 TIP3X6889 24.725 29.796 5.858 1.00 0.00 W1 H +ATOM 23157 OH2 TIP3X6890 22.478 30.064 14.051 1.00 0.00 W1 O +ATOM 23158 H1 TIP3X6890 22.695 29.171 14.321 1.00 0.00 W1 H +ATOM 23159 H2 TIP3X6890 23.085 30.618 14.540 1.00 0.00 W1 H +ATOM 23160 OH2 TIP3X6891 21.424 18.182 4.095 1.00 0.00 W1 O +ATOM 23161 H1 TIP3X6891 22.081 17.523 3.873 1.00 0.00 W1 H +ATOM 23162 H2 TIP3X6891 21.467 18.251 5.049 1.00 0.00 W1 H +ATOM 23163 OH2 TIP3X6892 16.137 16.520 13.551 1.00 0.00 W1 O +ATOM 23164 H1 TIP3X6892 16.886 16.325 12.987 1.00 0.00 W1 H +ATOM 23165 H2 TIP3X6892 16.346 16.095 14.383 1.00 0.00 W1 H +ATOM 23166 OH2 TIP3X6893 27.257 29.247 3.153 1.00 0.00 W1 O +ATOM 23167 H1 TIP3X6893 27.402 28.307 3.256 1.00 0.00 W1 H +ATOM 23168 H2 TIP3X6893 28.080 29.580 2.795 1.00 0.00 W1 H +ATOM 23169 OH2 TIP3X6894 28.925 16.014 14.380 1.00 0.00 W1 O +ATOM 23170 H1 TIP3X6894 28.311 16.088 13.649 1.00 0.00 W1 H +ATOM 23171 H2 TIP3X6894 29.694 16.509 14.098 1.00 0.00 W1 H +ATOM 23172 OH2 TIP3X6895 19.718 30.227 4.866 1.00 0.00 W1 O +ATOM 23173 H1 TIP3X6895 19.712 30.272 3.910 1.00 0.00 W1 H +ATOM 23174 H2 TIP3X6895 20.526 30.673 5.122 1.00 0.00 W1 H +ATOM 23175 OH2 TIP3X6896 30.627 29.165 12.816 1.00 0.00 W1 O +ATOM 23176 H1 TIP3X6896 29.905 29.716 13.117 1.00 0.00 W1 H +ATOM 23177 H2 TIP3X6896 31.415 29.664 13.030 1.00 0.00 W1 H +ATOM 23178 OH2 TIP3X6897 18.253 18.487 4.496 1.00 0.00 W1 O +ATOM 23179 H1 TIP3X6897 17.610 18.876 3.903 1.00 0.00 W1 H +ATOM 23180 H2 TIP3X6897 19.056 18.984 4.338 1.00 0.00 W1 H +ATOM 23181 OH2 TIP3X6898 19.682 27.086 2.227 1.00 0.00 W1 O +ATOM 23182 H1 TIP3X6898 19.643 26.458 1.506 1.00 0.00 W1 H +ATOM 23183 H2 TIP3X6898 18.962 26.833 2.805 1.00 0.00 W1 H +ATOM 23184 OH2 TIP3X6899 17.576 26.614 19.866 1.00 0.00 W1 O +ATOM 23185 H1 TIP3X6899 17.759 26.538 20.803 1.00 0.00 W1 H +ATOM 23186 H2 TIP3X6899 17.552 27.557 19.702 1.00 0.00 W1 H +ATOM 23187 OH2 TIP3X6900 28.679 24.105 23.605 1.00 0.00 W1 O +ATOM 23188 H1 TIP3X6900 28.914 24.370 22.715 1.00 0.00 W1 H +ATOM 23189 H2 TIP3X6900 29.508 23.842 24.003 1.00 0.00 W1 H +ATOM 23190 OH2 TIP3X6901 20.663 23.829 19.583 1.00 0.00 W1 O +ATOM 23191 H1 TIP3X6901 20.693 24.738 19.880 1.00 0.00 W1 H +ATOM 23192 H2 TIP3X6901 21.170 23.346 20.235 1.00 0.00 W1 H +ATOM 23193 OH2 TIP3X6902 28.466 27.988 21.727 1.00 0.00 W1 O +ATOM 23194 H1 TIP3X6902 28.191 28.478 22.502 1.00 0.00 W1 H +ATOM 23195 H2 TIP3X6902 27.941 27.188 21.750 1.00 0.00 W1 H +ATOM 23196 OH2 TIP3X6903 26.983 26.431 18.770 1.00 0.00 W1 O +ATOM 23197 H1 TIP3X6903 27.145 26.203 17.855 1.00 0.00 W1 H +ATOM 23198 H2 TIP3X6903 26.054 26.660 18.799 1.00 0.00 W1 H +ATOM 23199 OH2 TIP3X6904 30.830 26.963 23.554 1.00 0.00 W1 O +ATOM 23200 H1 TIP3X6904 30.278 27.046 22.777 1.00 0.00 W1 H +ATOM 23201 H2 TIP3X6904 30.220 26.747 24.259 1.00 0.00 W1 H +ATOM 23202 OH2 TIP3X6905 17.467 28.227 26.005 1.00 0.00 W1 O +ATOM 23203 H1 TIP3X6905 17.873 28.431 26.848 1.00 0.00 W1 H +ATOM 23204 H2 TIP3X6905 16.895 27.482 26.188 1.00 0.00 W1 H +ATOM 23205 OH2 TIP3X6906 24.842 29.852 25.231 1.00 0.00 W1 O +ATOM 23206 H1 TIP3X6906 25.143 28.952 25.353 1.00 0.00 W1 H +ATOM 23207 H2 TIP3X6906 25.467 30.233 24.614 1.00 0.00 W1 H +ATOM 23208 OH2 TIP3X6907 28.274 29.809 25.111 1.00 0.00 W1 O +ATOM 23209 H1 TIP3X6907 27.839 30.632 24.892 1.00 0.00 W1 H +ATOM 23210 H2 TIP3X6907 29.203 30.035 25.161 1.00 0.00 W1 H +ATOM 23211 OH2 TIP3X6908 20.722 29.384 24.241 1.00 0.00 W1 O +ATOM 23212 H1 TIP3X6908 21.078 30.233 23.977 1.00 0.00 W1 H +ATOM 23213 H2 TIP3X6908 19.787 29.443 24.045 1.00 0.00 W1 H +ATOM 23214 OH2 TIP3X6909 25.564 21.276 23.142 1.00 0.00 W1 O +ATOM 23215 H1 TIP3X6909 25.486 20.466 22.638 1.00 0.00 W1 H +ATOM 23216 H2 TIP3X6909 26.506 21.415 23.230 1.00 0.00 W1 H +ATOM 23217 OH2 TIP3X6910 21.587 17.374 25.504 1.00 0.00 W1 O +ATOM 23218 H1 TIP3X6910 21.844 16.636 26.057 1.00 0.00 W1 H +ATOM 23219 H2 TIP3X6910 20.910 17.017 24.929 1.00 0.00 W1 H +ATOM 23220 OH2 TIP3X6911 29.830 18.378 21.927 1.00 0.00 W1 O +ATOM 23221 H1 TIP3X6911 29.523 18.716 22.768 1.00 0.00 W1 H +ATOM 23222 H2 TIP3X6911 29.898 17.433 22.059 1.00 0.00 W1 H +ATOM 23223 OH2 TIP3X6912 28.428 19.573 23.881 1.00 0.00 W1 O +ATOM 23224 H1 TIP3X6912 29.003 19.345 24.612 1.00 0.00 W1 H +ATOM 23225 H2 TIP3X6912 27.553 19.319 24.176 1.00 0.00 W1 H +ATOM 23226 OH2 TIP3X6913 21.474 20.698 25.252 1.00 0.00 W1 O +ATOM 23227 H1 TIP3X6913 21.978 19.996 25.664 1.00 0.00 W1 H +ATOM 23228 H2 TIP3X6913 22.132 21.340 24.986 1.00 0.00 W1 H +ATOM 23229 OH2 TIP3X6914 28.951 21.746 22.150 1.00 0.00 W1 O +ATOM 23230 H1 TIP3X6914 28.992 20.847 22.474 1.00 0.00 W1 H +ATOM 23231 H2 TIP3X6914 28.833 22.279 22.936 1.00 0.00 W1 H +ATOM 23232 OH2 TIP3X6915 27.636 18.390 20.018 1.00 0.00 W1 O +ATOM 23233 H1 TIP3X6915 28.461 18.574 20.467 1.00 0.00 W1 H +ATOM 23234 H2 TIP3X6915 27.712 18.845 19.179 1.00 0.00 W1 H +ATOM 23235 OH2 TIP3X6916 23.818 24.361 26.090 1.00 0.00 W1 O +ATOM 23236 H1 TIP3X6916 24.695 24.383 25.707 1.00 0.00 W1 H +ATOM 23237 H2 TIP3X6916 23.553 25.280 26.136 1.00 0.00 W1 H +ATOM 23238 OH2 TIP3X6917 22.969 26.909 25.900 1.00 0.00 W1 O +ATOM 23239 H1 TIP3X6917 22.944 27.136 24.970 1.00 0.00 W1 H +ATOM 23240 H2 TIP3X6917 22.049 26.855 26.158 1.00 0.00 W1 H +ATOM 23241 OH2 TIP3X6918 17.832 18.791 22.738 1.00 0.00 W1 O +ATOM 23242 H1 TIP3X6918 17.506 19.670 22.929 1.00 0.00 W1 H +ATOM 23243 H2 TIP3X6918 17.708 18.688 21.794 1.00 0.00 W1 H +ATOM 23244 OH2 TIP3X6919 19.988 22.348 22.750 1.00 0.00 W1 O +ATOM 23245 H1 TIP3X6919 19.305 21.898 22.253 1.00 0.00 W1 H +ATOM 23246 H2 TIP3X6919 20.473 21.645 23.182 1.00 0.00 W1 H +ATOM 23247 OH2 TIP3X6920 26.043 27.273 25.147 1.00 0.00 W1 O +ATOM 23248 H1 TIP3X6920 25.801 26.686 24.430 1.00 0.00 W1 H +ATOM 23249 H2 TIP3X6920 26.993 27.183 25.219 1.00 0.00 W1 H +ATOM 23250 OH2 TIP3X6921 30.341 30.907 21.927 1.00 0.00 W1 O +ATOM 23251 H1 TIP3X6921 30.336 30.439 22.762 1.00 0.00 W1 H +ATOM 23252 H2 TIP3X6921 29.461 30.778 21.574 1.00 0.00 W1 H +ATOM 23253 OH2 TIP3X6922 22.213 27.244 22.949 1.00 0.00 W1 O +ATOM 23254 H1 TIP3X6922 21.642 26.524 23.218 1.00 0.00 W1 H +ATOM 23255 H2 TIP3X6922 21.753 28.034 23.232 1.00 0.00 W1 H +ATOM 23256 OH2 TIP3X6923 24.435 17.695 27.520 1.00 0.00 W1 O +ATOM 23257 H1 TIP3X6923 23.692 18.175 27.887 1.00 0.00 W1 H +ATOM 23258 H2 TIP3X6923 24.054 16.883 27.185 1.00 0.00 W1 H +ATOM 23259 OH2 TIP3X6924 19.787 18.400 17.321 1.00 0.00 W1 O +ATOM 23260 H1 TIP3X6924 19.689 17.738 18.006 1.00 0.00 W1 H +ATOM 23261 H2 TIP3X6924 19.603 17.932 16.507 1.00 0.00 W1 H +ATOM 23262 OH2 TIP3X6925 30.680 19.322 25.511 1.00 0.00 W1 O +ATOM 23263 H1 TIP3X6925 31.199 19.991 25.063 1.00 0.00 W1 H +ATOM 23264 H2 TIP3X6925 31.122 19.198 26.351 1.00 0.00 W1 H +ATOM 23265 OH2 TIP3X6926 16.738 15.675 19.671 1.00 0.00 W1 O +ATOM 23266 H1 TIP3X6926 17.463 16.296 19.740 1.00 0.00 W1 H +ATOM 23267 H2 TIP3X6926 16.366 15.642 20.552 1.00 0.00 W1 H +ATOM 23268 OH2 TIP3X6927 22.004 21.910 29.657 1.00 0.00 W1 O +ATOM 23269 H1 TIP3X6927 22.868 22.309 29.556 1.00 0.00 W1 H +ATOM 23270 H2 TIP3X6927 22.156 20.973 29.534 1.00 0.00 W1 H +ATOM 23271 OH2 TIP3X6928 25.170 26.820 22.397 1.00 0.00 W1 O +ATOM 23272 H1 TIP3X6928 25.264 25.957 21.993 1.00 0.00 W1 H +ATOM 23273 H2 TIP3X6928 24.237 27.020 22.321 1.00 0.00 W1 H +ATOM 23274 OH2 TIP3X6929 23.782 25.104 19.928 1.00 0.00 W1 O +ATOM 23275 H1 TIP3X6929 23.218 24.490 20.397 1.00 0.00 W1 H +ATOM 23276 H2 TIP3X6929 23.308 25.935 19.956 1.00 0.00 W1 H +ATOM 23277 OH2 TIP3X6930 16.320 25.617 26.385 1.00 0.00 W1 O +ATOM 23278 H1 TIP3X6930 15.785 25.016 25.867 1.00 0.00 W1 H +ATOM 23279 H2 TIP3X6930 15.849 25.704 27.214 1.00 0.00 W1 H +ATOM 23280 OH2 TIP3X6931 27.616 24.638 20.752 1.00 0.00 W1 O +ATOM 23281 H1 TIP3X6931 27.560 23.723 20.476 1.00 0.00 W1 H +ATOM 23282 H2 TIP3X6931 27.444 25.141 19.956 1.00 0.00 W1 H +ATOM 23283 OH2 TIP3X6932 27.913 25.152 27.777 1.00 0.00 W1 O +ATOM 23284 H1 TIP3X6932 27.011 25.236 28.084 1.00 0.00 W1 H +ATOM 23285 H2 TIP3X6932 28.082 24.210 27.780 1.00 0.00 W1 H +ATOM 23286 OH2 TIP3X6933 30.280 23.112 25.582 1.00 0.00 W1 O +ATOM 23287 H1 TIP3X6933 30.942 22.431 25.463 1.00 0.00 W1 H +ATOM 23288 H2 TIP3X6933 29.564 22.672 26.041 1.00 0.00 W1 H +ATOM 23289 OH2 TIP3X6934 19.424 22.799 30.727 1.00 0.00 W1 O +ATOM 23290 H1 TIP3X6934 18.895 22.565 29.964 1.00 0.00 W1 H +ATOM 23291 H2 TIP3X6934 20.320 22.846 30.392 1.00 0.00 W1 H +ATOM 23292 OH2 TIP3X6935 20.335 26.005 26.288 1.00 0.00 W1 O +ATOM 23293 H1 TIP3X6935 20.290 25.450 27.067 1.00 0.00 W1 H +ATOM 23294 H2 TIP3X6935 19.702 26.703 26.454 1.00 0.00 W1 H +ATOM 23295 OH2 TIP3X6936 29.006 27.135 26.038 1.00 0.00 W1 O +ATOM 23296 H1 TIP3X6936 29.430 27.903 26.422 1.00 0.00 W1 H +ATOM 23297 H2 TIP3X6936 28.702 26.627 26.790 1.00 0.00 W1 H +ATOM 23298 OH2 TIP3X6937 27.094 29.110 27.863 1.00 0.00 W1 O +ATOM 23299 H1 TIP3X6937 26.387 28.481 27.720 1.00 0.00 W1 H +ATOM 23300 H2 TIP3X6937 27.423 29.305 26.985 1.00 0.00 W1 H +ATOM 23301 OH2 TIP3X6938 27.345 27.646 30.259 1.00 0.00 W1 O +ATOM 23302 H1 TIP3X6938 26.711 27.040 29.875 1.00 0.00 W1 H +ATOM 23303 H2 TIP3X6938 27.458 28.327 29.595 1.00 0.00 W1 H +ATOM 23304 OH2 TIP3X6939 30.955 29.555 24.326 1.00 0.00 W1 O +ATOM 23305 H1 TIP3X6939 31.633 29.396 24.982 1.00 0.00 W1 H +ATOM 23306 H2 TIP3X6939 30.721 28.683 24.007 1.00 0.00 W1 H +ATOM 23307 OH2 TIP3X6940 21.511 16.026 22.718 1.00 0.00 W1 O +ATOM 23308 H1 TIP3X6940 21.220 16.935 22.657 1.00 0.00 W1 H +ATOM 23309 H2 TIP3X6940 22.343 16.008 22.245 1.00 0.00 W1 H +ATOM 23310 OH2 TIP3X6941 23.635 25.972 16.373 1.00 0.00 W1 O +ATOM 23311 H1 TIP3X6941 22.940 25.350 16.587 1.00 0.00 W1 H +ATOM 23312 H2 TIP3X6941 23.618 26.608 17.088 1.00 0.00 W1 H +ATOM 23313 OH2 TIP3X6942 31.016 24.736 15.809 1.00 0.00 W1 O +ATOM 23314 H1 TIP3X6942 30.753 23.986 15.275 1.00 0.00 W1 H +ATOM 23315 H2 TIP3X6942 30.761 25.500 15.292 1.00 0.00 W1 H +ATOM 23316 OH2 TIP3X6943 16.964 28.432 15.526 1.00 0.00 W1 O +ATOM 23317 H1 TIP3X6943 17.409 27.883 16.172 1.00 0.00 W1 H +ATOM 23318 H2 TIP3X6943 16.067 28.098 15.505 1.00 0.00 W1 H +ATOM 23319 OH2 TIP3X6944 29.057 30.561 16.785 1.00 0.00 W1 O +ATOM 23320 H1 TIP3X6944 29.942 30.233 16.626 1.00 0.00 W1 H +ATOM 23321 H2 TIP3X6944 28.827 31.029 15.982 1.00 0.00 W1 H +ATOM 23322 OH2 TIP3X6945 30.449 26.223 28.862 1.00 0.00 W1 O +ATOM 23323 H1 TIP3X6945 30.340 27.172 28.921 1.00 0.00 W1 H +ATOM 23324 H2 TIP3X6945 29.557 25.878 28.852 1.00 0.00 W1 H +ATOM 23325 OH2 TIP3X6946 17.136 29.049 18.481 1.00 0.00 W1 O +ATOM 23326 H1 TIP3X6946 17.068 29.885 18.941 1.00 0.00 W1 H +ATOM 23327 H2 TIP3X6946 16.240 28.711 18.464 1.00 0.00 W1 H +ATOM 23328 OH2 TIP3X6947 29.716 27.542 16.125 1.00 0.00 W1 O +ATOM 23329 H1 TIP3X6947 29.747 27.462 17.079 1.00 0.00 W1 H +ATOM 23330 H2 TIP3X6947 28.883 27.979 15.948 1.00 0.00 W1 H +ATOM 23331 OH2 TIP3X6948 26.086 15.837 29.009 1.00 0.00 W1 O +ATOM 23332 H1 TIP3X6948 25.780 16.585 28.497 1.00 0.00 W1 H +ATOM 23333 H2 TIP3X6948 26.140 15.120 28.377 1.00 0.00 W1 H +ATOM 23334 OH2 TIP3X6949 20.300 29.753 27.038 1.00 0.00 W1 O +ATOM 23335 H1 TIP3X6949 21.148 29.991 27.412 1.00 0.00 W1 H +ATOM 23336 H2 TIP3X6949 20.512 29.373 26.185 1.00 0.00 W1 H +ATOM 23337 OH2 TIP3X6950 18.766 17.772 30.389 1.00 0.00 W1 O +ATOM 23338 H1 TIP3X6950 17.889 17.861 30.763 1.00 0.00 W1 H +ATOM 23339 H2 TIP3X6950 18.829 18.484 29.752 1.00 0.00 W1 H +ATOM 23340 OH2 TIP3X6951 24.964 19.719 16.119 1.00 0.00 W1 O +ATOM 23341 H1 TIP3X6951 24.798 20.016 15.224 1.00 0.00 W1 H +ATOM 23342 H2 TIP3X6951 24.093 19.595 16.496 1.00 0.00 W1 H +ATOM 23343 OH2 TIP3X6952 30.361 27.479 19.167 1.00 0.00 W1 O +ATOM 23344 H1 TIP3X6952 30.934 26.742 19.380 1.00 0.00 W1 H +ATOM 23345 H2 TIP3X6952 30.030 27.778 20.014 1.00 0.00 W1 H +ATOM 23346 OH2 TIP3X6953 25.622 16.515 16.096 1.00 0.00 W1 O +ATOM 23347 H1 TIP3X6953 26.354 17.131 16.121 1.00 0.00 W1 H +ATOM 23348 H2 TIP3X6953 25.863 15.883 15.420 1.00 0.00 W1 H +ATOM 23349 OH2 TIP3X6954 30.154 16.609 26.361 1.00 0.00 W1 O +ATOM 23350 H1 TIP3X6954 30.646 15.979 26.889 1.00 0.00 W1 H +ATOM 23351 H2 TIP3X6954 30.755 16.851 25.656 1.00 0.00 W1 H +ATOM 23352 OH2 TIP3X6955 17.661 25.829 22.439 1.00 0.00 W1 O +ATOM 23353 H1 TIP3X6955 16.993 26.153 23.044 1.00 0.00 W1 H +ATOM 23354 H2 TIP3X6955 18.454 25.760 22.971 1.00 0.00 W1 H +ATOM 23355 OH2 TIP3X6956 22.658 27.248 29.549 1.00 0.00 W1 O +ATOM 23356 H1 TIP3X6956 22.882 26.870 30.400 1.00 0.00 W1 H +ATOM 23357 H2 TIP3X6956 22.052 26.619 29.159 1.00 0.00 W1 H +ATOM 23358 OH2 TIP3X6957 26.138 18.553 24.962 1.00 0.00 W1 O +ATOM 23359 H1 TIP3X6957 26.197 18.371 25.900 1.00 0.00 W1 H +ATOM 23360 H2 TIP3X6957 25.199 18.640 24.794 1.00 0.00 W1 H +ATOM 23361 OH2 TIP3X6958 22.329 19.210 29.141 1.00 0.00 W1 O +ATOM 23362 H1 TIP3X6958 21.462 19.140 28.741 1.00 0.00 W1 H +ATOM 23363 H2 TIP3X6958 22.274 18.669 29.929 1.00 0.00 W1 H +ATOM 23364 OH2 TIP3X6959 29.815 21.930 30.894 1.00 0.00 W1 O +ATOM 23365 H1 TIP3X6959 30.610 21.397 30.878 1.00 0.00 W1 H +ATOM 23366 H2 TIP3X6959 29.521 21.895 31.804 1.00 0.00 W1 H +ATOM 23367 OH2 TIP3X6960 18.000 15.797 26.813 1.00 0.00 W1 O +ATOM 23368 H1 TIP3X6960 17.775 16.250 26.000 1.00 0.00 W1 H +ATOM 23369 H2 TIP3X6960 18.830 15.360 26.621 1.00 0.00 W1 H +ATOM 23370 OH2 TIP3X6961 24.095 16.255 21.894 1.00 0.00 W1 O +ATOM 23371 H1 TIP3X6961 24.577 16.769 21.247 1.00 0.00 W1 H +ATOM 23372 H2 TIP3X6961 24.439 16.548 22.738 1.00 0.00 W1 H +ATOM 23373 OH2 TIP3X6962 18.565 20.846 17.047 1.00 0.00 W1 O +ATOM 23374 H1 TIP3X6962 18.988 21.492 16.481 1.00 0.00 W1 H +ATOM 23375 H2 TIP3X6962 19.277 20.271 17.328 1.00 0.00 W1 H +ATOM 23376 OH2 TIP3X6963 19.090 21.503 26.358 1.00 0.00 W1 O +ATOM 23377 H1 TIP3X6963 19.005 22.294 26.890 1.00 0.00 W1 H +ATOM 23378 H2 TIP3X6963 20.005 21.499 26.078 1.00 0.00 W1 H +ATOM 23379 OH2 TIP3X6964 18.272 22.221 19.544 1.00 0.00 W1 O +ATOM 23380 H1 TIP3X6964 18.335 21.932 18.633 1.00 0.00 W1 H +ATOM 23381 H2 TIP3X6964 19.048 22.766 19.677 1.00 0.00 W1 H +ATOM 23382 OH2 TIP3X6965 27.293 18.791 17.304 1.00 0.00 W1 O +ATOM 23383 H1 TIP3X6965 26.585 19.279 16.884 1.00 0.00 W1 H +ATOM 23384 H2 TIP3X6965 28.018 18.835 16.680 1.00 0.00 W1 H +ATOM 23385 OH2 TIP3X6966 15.843 19.677 28.392 1.00 0.00 W1 O +ATOM 23386 H1 TIP3X6966 14.939 19.971 28.503 1.00 0.00 W1 H +ATOM 23387 H2 TIP3X6966 15.984 19.058 29.108 1.00 0.00 W1 H +ATOM 23388 OH2 TIP3X6967 16.987 16.515 24.374 1.00 0.00 W1 O +ATOM 23389 H1 TIP3X6967 17.094 15.813 23.732 1.00 0.00 W1 H +ATOM 23390 H2 TIP3X6967 17.122 17.320 23.875 1.00 0.00 W1 H +ATOM 23391 OH2 TIP3X6968 28.508 20.143 29.262 1.00 0.00 W1 O +ATOM 23392 H1 TIP3X6968 28.820 20.721 29.958 1.00 0.00 W1 H +ATOM 23393 H2 TIP3X6968 27.564 20.079 29.407 1.00 0.00 W1 H +ATOM 23394 OH2 TIP3X6969 25.551 20.148 29.209 1.00 0.00 W1 O +ATOM 23395 H1 TIP3X6969 25.192 20.717 28.528 1.00 0.00 W1 H +ATOM 23396 H2 TIP3X6969 25.214 19.278 28.998 1.00 0.00 W1 H +ATOM 23397 OH2 TIP3X6970 23.754 20.618 19.074 1.00 0.00 W1 O +ATOM 23398 H1 TIP3X6970 23.843 21.197 18.318 1.00 0.00 W1 H +ATOM 23399 H2 TIP3X6970 22.985 20.083 18.878 1.00 0.00 W1 H +ATOM 23400 OH2 TIP3X6971 22.057 19.949 16.762 1.00 0.00 W1 O +ATOM 23401 H1 TIP3X6971 21.620 20.142 15.932 1.00 0.00 W1 H +ATOM 23402 H2 TIP3X6971 21.650 19.138 17.065 1.00 0.00 W1 H +ATOM 23403 OH2 TIP3X6972 22.768 17.011 30.551 1.00 0.00 W1 O +ATOM 23404 H1 TIP3X6972 22.301 16.624 31.291 1.00 0.00 W1 H +ATOM 23405 H2 TIP3X6972 23.682 17.044 30.833 1.00 0.00 W1 H +ATOM 23406 OH2 TIP3X6973 28.331 22.356 27.232 1.00 0.00 W1 O +ATOM 23407 H1 TIP3X6973 28.350 21.706 27.935 1.00 0.00 W1 H +ATOM 23408 H2 TIP3X6973 27.496 22.204 26.788 1.00 0.00 W1 H +ATOM 23409 OH2 TIP3X6974 16.406 19.456 15.702 1.00 0.00 W1 O +ATOM 23410 H1 TIP3X6974 15.649 19.264 16.256 1.00 0.00 W1 H +ATOM 23411 H2 TIP3X6974 16.940 20.055 16.224 1.00 0.00 W1 H +ATOM 23412 OH2 TIP3X6975 16.324 30.950 16.189 1.00 0.00 W1 O +ATOM 23413 H1 TIP3X6975 16.740 30.202 16.618 1.00 0.00 W1 H +ATOM 23414 H2 TIP3X6975 16.337 31.643 16.848 1.00 0.00 W1 H +ATOM 23415 OH2 TIP3X6976 25.072 19.110 21.182 1.00 0.00 W1 O +ATOM 23416 H1 TIP3X6976 24.735 19.460 20.357 1.00 0.00 W1 H +ATOM 23417 H2 TIP3X6976 25.969 18.842 20.980 1.00 0.00 W1 H +ATOM 23418 OH2 TIP3X6977 20.528 18.420 22.926 1.00 0.00 W1 O +ATOM 23419 H1 TIP3X6977 19.585 18.373 22.767 1.00 0.00 W1 H +ATOM 23420 H2 TIP3X6977 20.667 19.294 23.289 1.00 0.00 W1 H +ATOM 23421 OH2 TIP3X6978 15.890 19.546 19.719 1.00 0.00 W1 O +ATOM 23422 H1 TIP3X6978 15.616 19.422 20.628 1.00 0.00 W1 H +ATOM 23423 H2 TIP3X6978 15.695 20.465 19.533 1.00 0.00 W1 H +ATOM 23424 OH2 TIP3X6979 19.890 18.873 27.779 1.00 0.00 W1 O +ATOM 23425 H1 TIP3X6979 19.912 18.067 27.264 1.00 0.00 W1 H +ATOM 23426 H2 TIP3X6979 19.496 19.521 27.195 1.00 0.00 W1 H +ATOM 23427 OH2 TIP3X6980 20.473 25.409 23.584 1.00 0.00 W1 O +ATOM 23428 H1 TIP3X6980 20.402 24.473 23.397 1.00 0.00 W1 H +ATOM 23429 H2 TIP3X6980 20.478 25.462 24.540 1.00 0.00 W1 H +ATOM 23430 OH2 TIP3X6981 24.662 22.428 28.147 1.00 0.00 W1 O +ATOM 23431 H1 TIP3X6981 25.074 23.259 28.383 1.00 0.00 W1 H +ATOM 23432 H2 TIP3X6981 24.113 22.638 27.392 1.00 0.00 W1 H +ATOM 23433 OH2 TIP3X6982 30.458 17.794 17.471 1.00 0.00 W1 O +ATOM 23434 H1 TIP3X6982 30.892 18.021 18.293 1.00 0.00 W1 H +ATOM 23435 H2 TIP3X6982 29.938 17.019 17.681 1.00 0.00 W1 H +ATOM 23436 OH2 TIP3X6983 21.612 23.754 16.649 1.00 0.00 W1 O +ATOM 23437 H1 TIP3X6983 21.323 23.632 17.554 1.00 0.00 W1 H +ATOM 23438 H2 TIP3X6983 22.301 23.101 16.528 1.00 0.00 W1 H +ATOM 23439 OH2 TIP3X6984 28.316 22.270 17.717 1.00 0.00 W1 O +ATOM 23440 H1 TIP3X6984 27.451 22.071 18.076 1.00 0.00 W1 H +ATOM 23441 H2 TIP3X6984 28.873 22.391 18.486 1.00 0.00 W1 H +ATOM 23442 OH2 TIP3X6985 23.149 22.524 24.188 1.00 0.00 W1 O +ATOM 23443 H1 TIP3X6985 23.246 23.321 24.709 1.00 0.00 W1 H +ATOM 23444 H2 TIP3X6985 24.023 22.135 24.179 1.00 0.00 W1 H +ATOM 23445 OH2 TIP3X6986 22.894 22.906 21.104 1.00 0.00 W1 O +ATOM 23446 H1 TIP3X6986 23.515 22.310 20.686 1.00 0.00 W1 H +ATOM 23447 H2 TIP3X6986 22.919 22.669 22.030 1.00 0.00 W1 H +ATOM 23448 OH2 TIP3X6987 25.789 24.522 30.039 1.00 0.00 W1 O +ATOM 23449 H1 TIP3X6987 25.111 24.806 30.653 1.00 0.00 W1 H +ATOM 23450 H2 TIP3X6987 26.587 24.481 30.566 1.00 0.00 W1 H +ATOM 23451 OH2 TIP3X6988 18.298 23.937 27.736 1.00 0.00 W1 O +ATOM 23452 H1 TIP3X6988 18.815 24.343 28.432 1.00 0.00 W1 H +ATOM 23453 H2 TIP3X6988 17.916 24.674 27.260 1.00 0.00 W1 H +ATOM 23454 OH2 TIP3X6989 17.205 21.899 29.357 1.00 0.00 W1 O +ATOM 23455 H1 TIP3X6989 17.001 21.060 28.945 1.00 0.00 W1 H +ATOM 23456 H2 TIP3X6989 17.081 22.545 28.662 1.00 0.00 W1 H +ATOM 23457 OH2 TIP3X6990 17.097 22.772 22.181 1.00 0.00 W1 O +ATOM 23458 H1 TIP3X6990 17.454 23.645 22.011 1.00 0.00 W1 H +ATOM 23459 H2 TIP3X6990 16.995 22.382 21.313 1.00 0.00 W1 H +ATOM 23460 OH2 TIP3X6991 27.856 25.037 16.367 1.00 0.00 W1 O +ATOM 23461 H1 TIP3X6991 28.562 25.536 15.955 1.00 0.00 W1 H +ATOM 23462 H2 TIP3X6991 28.305 24.407 16.931 1.00 0.00 W1 H +ATOM 23463 OH2 TIP3X6992 30.453 22.384 19.730 1.00 0.00 W1 O +ATOM 23464 H1 TIP3X6992 30.165 22.557 20.626 1.00 0.00 W1 H +ATOM 23465 H2 TIP3X6992 30.965 23.156 19.489 1.00 0.00 W1 H +ATOM 23466 OH2 TIP3X6993 16.950 21.501 24.452 1.00 0.00 W1 O +ATOM 23467 H1 TIP3X6993 17.045 22.179 23.783 1.00 0.00 W1 H +ATOM 23468 H2 TIP3X6993 17.609 21.720 25.111 1.00 0.00 W1 H +ATOM 23469 OH2 TIP3X6994 19.737 30.008 17.715 1.00 0.00 W1 O +ATOM 23470 H1 TIP3X6994 19.508 30.368 16.859 1.00 0.00 W1 H +ATOM 23471 H2 TIP3X6994 19.324 29.145 17.731 1.00 0.00 W1 H +ATOM 23472 OH2 TIP3X6995 18.512 25.241 16.214 1.00 0.00 W1 O +ATOM 23473 H1 TIP3X6995 17.696 24.952 15.805 1.00 0.00 W1 H +ATOM 23474 H2 TIP3X6995 19.044 24.448 16.275 1.00 0.00 W1 H +ATOM 23475 OH2 TIP3X6996 19.930 26.081 29.288 1.00 0.00 W1 O +ATOM 23476 H1 TIP3X6996 19.357 26.683 28.814 1.00 0.00 W1 H +ATOM 23477 H2 TIP3X6996 19.456 25.885 30.096 1.00 0.00 W1 H +ATOM 23478 OH2 TIP3X6997 23.006 30.824 26.979 1.00 0.00 W1 O +ATOM 23479 H1 TIP3X6997 23.324 30.530 27.833 1.00 0.00 W1 H +ATOM 23480 H2 TIP3X6997 23.439 30.246 26.350 1.00 0.00 W1 H +ATOM 23481 OH2 TIP3X6998 27.712 31.065 21.113 1.00 0.00 W1 O +ATOM 23482 H1 TIP3X6998 27.300 30.374 20.594 1.00 0.00 W1 H +ATOM 23483 H2 TIP3X6998 27.516 31.872 20.636 1.00 0.00 W1 H +ATOM 23484 OH2 TIP3X6999 24.290 27.748 18.365 1.00 0.00 W1 O +ATOM 23485 H1 TIP3X6999 24.549 28.533 17.883 1.00 0.00 W1 H +ATOM 23486 H2 TIP3X6999 23.721 28.071 19.063 1.00 0.00 W1 H +ATOM 23487 OH2 TIP3X7000 24.307 22.902 17.436 1.00 0.00 W1 O +ATOM 23488 H1 TIP3X7000 25.130 22.975 16.953 1.00 0.00 W1 H +ATOM 23489 H2 TIP3X7000 24.315 23.646 18.038 1.00 0.00 W1 H +ATOM 23490 OH2 TIP3X7001 27.709 17.626 27.227 1.00 0.00 W1 O +ATOM 23491 H1 TIP3X7001 28.514 17.395 26.763 1.00 0.00 W1 H +ATOM 23492 H2 TIP3X7001 27.999 18.179 27.952 1.00 0.00 W1 H +ATOM 23493 OH2 TIP3X7002 15.674 24.727 18.633 1.00 0.00 W1 O +ATOM 23494 H1 TIP3X7002 15.520 24.819 17.693 1.00 0.00 W1 H +ATOM 23495 H2 TIP3X7002 16.627 24.727 18.722 1.00 0.00 W1 H +ATOM 23496 OH2 TIP3X7003 26.436 24.315 25.229 1.00 0.00 W1 O +ATOM 23497 H1 TIP3X7003 26.981 24.977 25.655 1.00 0.00 W1 H +ATOM 23498 H2 TIP3X7003 26.895 24.115 24.414 1.00 0.00 W1 H +ATOM 23499 OH2 TIP3X7004 25.258 29.289 16.307 1.00 0.00 W1 O +ATOM 23500 H1 TIP3X7004 26.083 29.324 16.791 1.00 0.00 W1 H +ATOM 23501 H2 TIP3X7004 25.461 28.776 15.524 1.00 0.00 W1 H +ATOM 23502 OH2 TIP3X7005 25.250 27.076 27.958 1.00 0.00 W1 O +ATOM 23503 H1 TIP3X7005 24.429 27.323 28.384 1.00 0.00 W1 H +ATOM 23504 H2 TIP3X7005 25.021 26.981 27.033 1.00 0.00 W1 H +ATOM 23505 OH2 TIP3X7006 21.875 27.301 19.844 1.00 0.00 W1 O +ATOM 23506 H1 TIP3X7006 21.168 27.448 19.216 1.00 0.00 W1 H +ATOM 23507 H2 TIP3X7006 21.538 27.646 20.671 1.00 0.00 W1 H +ATOM 23508 OH2 TIP3X7007 18.440 28.213 28.555 1.00 0.00 W1 O +ATOM 23509 H1 TIP3X7007 19.174 28.824 28.491 1.00 0.00 W1 H +ATOM 23510 H2 TIP3X7007 18.128 28.307 29.455 1.00 0.00 W1 H +ATOM 23511 OH2 TIP3X7008 18.030 29.918 22.657 1.00 0.00 W1 O +ATOM 23512 H1 TIP3X7008 17.444 29.177 22.503 1.00 0.00 W1 H +ATOM 23513 H2 TIP3X7008 18.473 30.051 21.819 1.00 0.00 W1 H +ATOM 23514 OH2 TIP3X7009 26.384 15.931 23.738 1.00 0.00 W1 O +ATOM 23515 H1 TIP3X7009 26.716 15.856 22.843 1.00 0.00 W1 H +ATOM 23516 H2 TIP3X7009 26.339 16.874 23.899 1.00 0.00 W1 H +ATOM 23517 OH2 TIP3X7010 23.622 18.060 23.972 1.00 0.00 W1 O +ATOM 23518 H1 TIP3X7010 23.260 18.549 23.233 1.00 0.00 W1 H +ATOM 23519 H2 TIP3X7010 22.890 17.971 24.582 1.00 0.00 W1 H +ATOM 23520 OH2 TIP3X7011 22.341 16.045 17.900 1.00 0.00 W1 O +ATOM 23521 H1 TIP3X7011 23.196 15.789 18.245 1.00 0.00 W1 H +ATOM 23522 H2 TIP3X7011 21.822 15.241 17.925 1.00 0.00 W1 H +ATOM 23523 OH2 TIP3X7012 25.092 15.888 18.944 1.00 0.00 W1 O +ATOM 23524 H1 TIP3X7012 25.548 15.152 19.352 1.00 0.00 W1 H +ATOM 23525 H2 TIP3X7012 25.500 15.975 18.082 1.00 0.00 W1 H +ATOM 23526 OH2 TIP3X7013 19.732 30.467 30.398 1.00 0.00 W1 O +ATOM 23527 H1 TIP3X7013 19.481 31.224 29.869 1.00 0.00 W1 H +ATOM 23528 H2 TIP3X7013 20.643 30.298 30.159 1.00 0.00 W1 H +ATOM 23529 OH2 TIP3X7014 24.738 29.161 20.699 1.00 0.00 W1 O +ATOM 23530 H1 TIP3X7014 25.399 28.519 20.959 1.00 0.00 W1 H +ATOM 23531 H2 TIP3X7014 24.725 29.796 21.415 1.00 0.00 W1 H +ATOM 23532 OH2 TIP3X7015 22.478 30.064 29.608 1.00 0.00 W1 O +ATOM 23533 H1 TIP3X7015 22.695 29.171 29.879 1.00 0.00 W1 H +ATOM 23534 H2 TIP3X7015 23.085 30.618 30.098 1.00 0.00 W1 H +ATOM 23535 OH2 TIP3X7016 21.424 18.182 19.653 1.00 0.00 W1 O +ATOM 23536 H1 TIP3X7016 22.081 17.523 19.430 1.00 0.00 W1 H +ATOM 23537 H2 TIP3X7016 21.467 18.251 20.607 1.00 0.00 W1 H +ATOM 23538 OH2 TIP3X7017 16.137 16.520 29.109 1.00 0.00 W1 O +ATOM 23539 H1 TIP3X7017 16.886 16.325 28.545 1.00 0.00 W1 H +ATOM 23540 H2 TIP3X7017 16.346 16.095 29.940 1.00 0.00 W1 H +ATOM 23541 OH2 TIP3X7018 27.257 29.247 18.710 1.00 0.00 W1 O +ATOM 23542 H1 TIP3X7018 27.402 28.307 18.813 1.00 0.00 W1 H +ATOM 23543 H2 TIP3X7018 28.080 29.580 18.353 1.00 0.00 W1 H +ATOM 23544 OH2 TIP3X7019 28.925 16.014 29.937 1.00 0.00 W1 O +ATOM 23545 H1 TIP3X7019 28.311 16.088 29.207 1.00 0.00 W1 H +ATOM 23546 H2 TIP3X7019 29.694 16.509 29.656 1.00 0.00 W1 H +ATOM 23547 OH2 TIP3X7020 19.718 30.227 20.424 1.00 0.00 W1 O +ATOM 23548 H1 TIP3X7020 19.712 30.272 19.468 1.00 0.00 W1 H +ATOM 23549 H2 TIP3X7020 20.526 30.673 20.680 1.00 0.00 W1 H +ATOM 23550 OH2 TIP3X7021 30.627 29.165 28.373 1.00 0.00 W1 O +ATOM 23551 H1 TIP3X7021 29.905 29.716 28.674 1.00 0.00 W1 H +ATOM 23552 H2 TIP3X7021 31.415 29.664 28.587 1.00 0.00 W1 H +ATOM 23553 OH2 TIP3X7022 18.253 18.487 20.053 1.00 0.00 W1 O +ATOM 23554 H1 TIP3X7022 17.610 18.876 19.461 1.00 0.00 W1 H +ATOM 23555 H2 TIP3X7022 19.056 18.984 19.895 1.00 0.00 W1 H +ATOM 23556 OH2 TIP3X7023 19.682 27.086 17.785 1.00 0.00 W1 O +ATOM 23557 H1 TIP3X7023 19.643 26.458 17.063 1.00 0.00 W1 H +ATOM 23558 H2 TIP3X7023 18.962 26.833 18.363 1.00 0.00 W1 H +END diff --git a/wrappers/python/tests/systems/5dhfr_cube.psf b/wrappers/python/tests/systems/5dhfr_cube.psf new file mode 100644 index 0000000000000000000000000000000000000000..84cd23aa988ada41c464ca535b4f50fa0c8ab528 --- /dev/null +++ b/wrappers/python/tests/systems/5dhfr_cube.psf @@ -0,0 +1,38101 @@ +PSF + + 7 !NTITLE + REMARKS original generated structure x-plor psf file + REMARKS 2 patches were applied to the molecule. + REMARKS topology 5dhfr_cube_autopsf-temp.top + REMARKS segment P1 { first NTER; last CTER; auto angles dihedrals } + REMARKS segment W1 { first NONE; last NONE; auto angles dihedrals } + REMARKS patch NTER P1:1 + REMARKS patch CTER P1:159 + + 23558 !NATOM + 1 P1 1 MET N NH3 -0.300000 14.0070 0 + 2 P1 1 MET HT1 HC 0.330000 1.0080 0 + 3 P1 1 MET HT2 HC 0.330000 1.0080 0 + 4 P1 1 MET HT3 HC 0.330000 1.0080 0 + 5 P1 1 MET CA CT1 0.210000 12.0110 0 + 6 P1 1 MET HA HB 0.100000 1.0080 0 + 7 P1 1 MET CB CT2 -0.180000 12.0110 0 + 8 P1 1 MET HB1 HA 0.090000 1.0080 0 + 9 P1 1 MET HB2 HA 0.090000 1.0080 0 + 10 P1 1 MET CG CT2 -0.140000 12.0110 0 + 11 P1 1 MET HG1 HA 0.090000 1.0080 0 + 12 P1 1 MET HG2 HA 0.090000 1.0080 0 + 13 P1 1 MET SD S -0.090000 32.0600 0 + 14 P1 1 MET CE CT3 -0.220000 12.0110 0 + 15 P1 1 MET HE1 HA 0.090000 1.0080 0 + 16 P1 1 MET HE2 HA 0.090000 1.0080 0 + 17 P1 1 MET HE3 HA 0.090000 1.0080 0 + 18 P1 1 MET C C 0.510000 12.0110 0 + 19 P1 1 MET O O -0.510000 15.9990 0 + 20 P1 2 ILE N NH1 -0.470000 14.0070 0 + 21 P1 2 ILE HN H 0.310000 1.0080 0 + 22 P1 2 ILE CA CT1 0.070000 12.0110 0 + 23 P1 2 ILE HA HB 0.090000 1.0080 0 + 24 P1 2 ILE CB CT1 -0.090000 12.0110 0 + 25 P1 2 ILE HB HA 0.090000 1.0080 0 + 26 P1 2 ILE CG2 CT3 -0.270000 12.0110 0 + 27 P1 2 ILE HG21 HA 0.090000 1.0080 0 + 28 P1 2 ILE HG22 HA 0.090000 1.0080 0 + 29 P1 2 ILE HG23 HA 0.090000 1.0080 0 + 30 P1 2 ILE CG1 CT2 -0.180000 12.0110 0 + 31 P1 2 ILE HG11 HA 0.090000 1.0080 0 + 32 P1 2 ILE HG12 HA 0.090000 1.0080 0 + 33 P1 2 ILE CD CT3 -0.270000 12.0110 0 + 34 P1 2 ILE HD1 HA 0.090000 1.0080 0 + 35 P1 2 ILE HD2 HA 0.090000 1.0080 0 + 36 P1 2 ILE HD3 HA 0.090000 1.0080 0 + 37 P1 2 ILE C C 0.510000 12.0110 0 + 38 P1 2 ILE O O -0.510000 15.9990 0 + 39 P1 3 SER N NH1 -0.470000 14.0070 0 + 40 P1 3 SER HN H 0.310000 1.0080 0 + 41 P1 3 SER CA CT1 0.070000 12.0110 0 + 42 P1 3 SER HA HB 0.090000 1.0080 0 + 43 P1 3 SER CB CT2 0.050000 12.0110 0 + 44 P1 3 SER HB1 HA 0.090000 1.0080 0 + 45 P1 3 SER HB2 HA 0.090000 1.0080 0 + 46 P1 3 SER OG OH1 -0.660000 15.9990 0 + 47 P1 3 SER HG1 H 0.430000 1.0080 0 + 48 P1 3 SER C C 0.510000 12.0110 0 + 49 P1 3 SER O O -0.510000 15.9990 0 + 50 P1 4 LEU N NH1 -0.470000 14.0070 0 + 51 P1 4 LEU HN H 0.310000 1.0080 0 + 52 P1 4 LEU CA CT1 0.070000 12.0110 0 + 53 P1 4 LEU HA HB 0.090000 1.0080 0 + 54 P1 4 LEU CB CT2 -0.180000 12.0110 0 + 55 P1 4 LEU HB1 HA 0.090000 1.0080 0 + 56 P1 4 LEU HB2 HA 0.090000 1.0080 0 + 57 P1 4 LEU CG CT1 -0.090000 12.0110 0 + 58 P1 4 LEU HG HA 0.090000 1.0080 0 + 59 P1 4 LEU CD1 CT3 -0.270000 12.0110 0 + 60 P1 4 LEU HD11 HA 0.090000 1.0080 0 + 61 P1 4 LEU HD12 HA 0.090000 1.0080 0 + 62 P1 4 LEU HD13 HA 0.090000 1.0080 0 + 63 P1 4 LEU CD2 CT3 -0.270000 12.0110 0 + 64 P1 4 LEU HD21 HA 0.090000 1.0080 0 + 65 P1 4 LEU HD22 HA 0.090000 1.0080 0 + 66 P1 4 LEU HD23 HA 0.090000 1.0080 0 + 67 P1 4 LEU C C 0.510000 12.0110 0 + 68 P1 4 LEU O O -0.510000 15.9990 0 + 69 P1 5 ILE N NH1 -0.470000 14.0070 0 + 70 P1 5 ILE HN H 0.310000 1.0080 0 + 71 P1 5 ILE CA CT1 0.070000 12.0110 0 + 72 P1 5 ILE HA HB 0.090000 1.0080 0 + 73 P1 5 ILE CB CT1 -0.090000 12.0110 0 + 74 P1 5 ILE HB HA 0.090000 1.0080 0 + 75 P1 5 ILE CG2 CT3 -0.270000 12.0110 0 + 76 P1 5 ILE HG21 HA 0.090000 1.0080 0 + 77 P1 5 ILE HG22 HA 0.090000 1.0080 0 + 78 P1 5 ILE HG23 HA 0.090000 1.0080 0 + 79 P1 5 ILE CG1 CT2 -0.180000 12.0110 0 + 80 P1 5 ILE HG11 HA 0.090000 1.0080 0 + 81 P1 5 ILE HG12 HA 0.090000 1.0080 0 + 82 P1 5 ILE CD CT3 -0.270000 12.0110 0 + 83 P1 5 ILE HD1 HA 0.090000 1.0080 0 + 84 P1 5 ILE HD2 HA 0.090000 1.0080 0 + 85 P1 5 ILE HD3 HA 0.090000 1.0080 0 + 86 P1 5 ILE C C 0.510000 12.0110 0 + 87 P1 5 ILE O O -0.510000 15.9990 0 + 88 P1 6 ALA N NH1 -0.470000 14.0070 0 + 89 P1 6 ALA HN H 0.310000 1.0080 0 + 90 P1 6 ALA CA CT1 0.070000 12.0110 0 + 91 P1 6 ALA HA HB 0.090000 1.0080 0 + 92 P1 6 ALA CB CT3 -0.270000 12.0110 0 + 93 P1 6 ALA HB1 HA 0.090000 1.0080 0 + 94 P1 6 ALA HB2 HA 0.090000 1.0080 0 + 95 P1 6 ALA HB3 HA 0.090000 1.0080 0 + 96 P1 6 ALA C C 0.510000 12.0110 0 + 97 P1 6 ALA O O -0.510000 15.9990 0 + 98 P1 7 ALA N NH1 -0.470000 14.0070 0 + 99 P1 7 ALA HN H 0.310000 1.0080 0 + 100 P1 7 ALA CA CT1 0.070000 12.0110 0 + 101 P1 7 ALA HA HB 0.090000 1.0080 0 + 102 P1 7 ALA CB CT3 -0.270000 12.0110 0 + 103 P1 7 ALA HB1 HA 0.090000 1.0080 0 + 104 P1 7 ALA HB2 HA 0.090000 1.0080 0 + 105 P1 7 ALA HB3 HA 0.090000 1.0080 0 + 106 P1 7 ALA C C 0.510000 12.0110 0 + 107 P1 7 ALA O O -0.510000 15.9990 0 + 108 P1 8 LEU N NH1 -0.470000 14.0070 0 + 109 P1 8 LEU HN H 0.310000 1.0080 0 + 110 P1 8 LEU CA CT1 0.070000 12.0110 0 + 111 P1 8 LEU HA HB 0.090000 1.0080 0 + 112 P1 8 LEU CB CT2 -0.180000 12.0110 0 + 113 P1 8 LEU HB1 HA 0.090000 1.0080 0 + 114 P1 8 LEU HB2 HA 0.090000 1.0080 0 + 115 P1 8 LEU CG CT1 -0.090000 12.0110 0 + 116 P1 8 LEU HG HA 0.090000 1.0080 0 + 117 P1 8 LEU CD1 CT3 -0.270000 12.0110 0 + 118 P1 8 LEU HD11 HA 0.090000 1.0080 0 + 119 P1 8 LEU HD12 HA 0.090000 1.0080 0 + 120 P1 8 LEU HD13 HA 0.090000 1.0080 0 + 121 P1 8 LEU CD2 CT3 -0.270000 12.0110 0 + 122 P1 8 LEU HD21 HA 0.090000 1.0080 0 + 123 P1 8 LEU HD22 HA 0.090000 1.0080 0 + 124 P1 8 LEU HD23 HA 0.090000 1.0080 0 + 125 P1 8 LEU C C 0.510000 12.0110 0 + 126 P1 8 LEU O O -0.510000 15.9990 0 + 127 P1 9 ALA N NH1 -0.470000 14.0070 0 + 128 P1 9 ALA HN H 0.310000 1.0080 0 + 129 P1 9 ALA CA CT1 0.070000 12.0110 0 + 130 P1 9 ALA HA HB 0.090000 1.0080 0 + 131 P1 9 ALA CB CT3 -0.270000 12.0110 0 + 132 P1 9 ALA HB1 HA 0.090000 1.0080 0 + 133 P1 9 ALA HB2 HA 0.090000 1.0080 0 + 134 P1 9 ALA HB3 HA 0.090000 1.0080 0 + 135 P1 9 ALA C C 0.510000 12.0110 0 + 136 P1 9 ALA O O -0.510000 15.9990 0 + 137 P1 10 VAL N NH1 -0.470000 14.0070 0 + 138 P1 10 VAL HN H 0.310000 1.0080 0 + 139 P1 10 VAL CA CT1 0.070000 12.0110 0 + 140 P1 10 VAL HA HB 0.090000 1.0080 0 + 141 P1 10 VAL CB CT1 -0.090000 12.0110 0 + 142 P1 10 VAL HB HA 0.090000 1.0080 0 + 143 P1 10 VAL CG1 CT3 -0.270000 12.0110 0 + 144 P1 10 VAL HG11 HA 0.090000 1.0080 0 + 145 P1 10 VAL HG12 HA 0.090000 1.0080 0 + 146 P1 10 VAL HG13 HA 0.090000 1.0080 0 + 147 P1 10 VAL CG2 CT3 -0.270000 12.0110 0 + 148 P1 10 VAL HG21 HA 0.090000 1.0080 0 + 149 P1 10 VAL HG22 HA 0.090000 1.0080 0 + 150 P1 10 VAL HG23 HA 0.090000 1.0080 0 + 151 P1 10 VAL C C 0.510000 12.0110 0 + 152 P1 10 VAL O O -0.510000 15.9990 0 + 153 P1 11 ASP N NH1 -0.470000 14.0070 0 + 154 P1 11 ASP HN H 0.310000 1.0080 0 + 155 P1 11 ASP CA CT1 0.070000 12.0110 0 + 156 P1 11 ASP HA HB 0.090000 1.0080 0 + 157 P1 11 ASP CB CT2 -0.280000 12.0110 0 + 158 P1 11 ASP HB1 HA 0.090000 1.0080 0 + 159 P1 11 ASP HB2 HA 0.090000 1.0080 0 + 160 P1 11 ASP CG CC 0.620000 12.0110 0 + 161 P1 11 ASP OD1 OC -0.760000 15.9990 0 + 162 P1 11 ASP OD2 OC -0.760000 15.9990 0 + 163 P1 11 ASP C C 0.510000 12.0110 0 + 164 P1 11 ASP O O -0.510000 15.9990 0 + 165 P1 12 ARG N NH1 -0.470000 14.0070 0 + 166 P1 12 ARG HN H 0.310000 1.0080 0 + 167 P1 12 ARG CA CT1 0.070000 12.0110 0 + 168 P1 12 ARG HA HB 0.090000 1.0080 0 + 169 P1 12 ARG CB CT2 -0.180000 12.0110 0 + 170 P1 12 ARG HB1 HA 0.090000 1.0080 0 + 171 P1 12 ARG HB2 HA 0.090000 1.0080 0 + 172 P1 12 ARG CG CT2 -0.180000 12.0110 0 + 173 P1 12 ARG HG1 HA 0.090000 1.0080 0 + 174 P1 12 ARG HG2 HA 0.090000 1.0080 0 + 175 P1 12 ARG CD CT2 0.200000 12.0110 0 + 176 P1 12 ARG HD1 HA 0.090000 1.0080 0 + 177 P1 12 ARG HD2 HA 0.090000 1.0080 0 + 178 P1 12 ARG NE NC2 -0.700000 14.0070 0 + 179 P1 12 ARG HE HC 0.440000 1.0080 0 + 180 P1 12 ARG CZ C 0.640000 12.0110 0 + 181 P1 12 ARG NH1 NC2 -0.800000 14.0070 0 + 182 P1 12 ARG HH11 HC 0.460000 1.0080 0 + 183 P1 12 ARG HH12 HC 0.460000 1.0080 0 + 184 P1 12 ARG NH2 NC2 -0.800000 14.0070 0 + 185 P1 12 ARG HH21 HC 0.460000 1.0080 0 + 186 P1 12 ARG HH22 HC 0.460000 1.0080 0 + 187 P1 12 ARG C C 0.510000 12.0110 0 + 188 P1 12 ARG O O -0.510000 15.9990 0 + 189 P1 13 VAL N NH1 -0.470000 14.0070 0 + 190 P1 13 VAL HN H 0.310000 1.0080 0 + 191 P1 13 VAL CA CT1 0.070000 12.0110 0 + 192 P1 13 VAL HA HB 0.090000 1.0080 0 + 193 P1 13 VAL CB CT1 -0.090000 12.0110 0 + 194 P1 13 VAL HB HA 0.090000 1.0080 0 + 195 P1 13 VAL CG1 CT3 -0.270000 12.0110 0 + 196 P1 13 VAL HG11 HA 0.090000 1.0080 0 + 197 P1 13 VAL HG12 HA 0.090000 1.0080 0 + 198 P1 13 VAL HG13 HA 0.090000 1.0080 0 + 199 P1 13 VAL CG2 CT3 -0.270000 12.0110 0 + 200 P1 13 VAL HG21 HA 0.090000 1.0080 0 + 201 P1 13 VAL HG22 HA 0.090000 1.0080 0 + 202 P1 13 VAL HG23 HA 0.090000 1.0080 0 + 203 P1 13 VAL C C 0.510000 12.0110 0 + 204 P1 13 VAL O O -0.510000 15.9990 0 + 205 P1 14 ILE N NH1 -0.470000 14.0070 0 + 206 P1 14 ILE HN H 0.310000 1.0080 0 + 207 P1 14 ILE CA CT1 0.070000 12.0110 0 + 208 P1 14 ILE HA HB 0.090000 1.0080 0 + 209 P1 14 ILE CB CT1 -0.090000 12.0110 0 + 210 P1 14 ILE HB HA 0.090000 1.0080 0 + 211 P1 14 ILE CG2 CT3 -0.270000 12.0110 0 + 212 P1 14 ILE HG21 HA 0.090000 1.0080 0 + 213 P1 14 ILE HG22 HA 0.090000 1.0080 0 + 214 P1 14 ILE HG23 HA 0.090000 1.0080 0 + 215 P1 14 ILE CG1 CT2 -0.180000 12.0110 0 + 216 P1 14 ILE HG11 HA 0.090000 1.0080 0 + 217 P1 14 ILE HG12 HA 0.090000 1.0080 0 + 218 P1 14 ILE CD CT3 -0.270000 12.0110 0 + 219 P1 14 ILE HD1 HA 0.090000 1.0080 0 + 220 P1 14 ILE HD2 HA 0.090000 1.0080 0 + 221 P1 14 ILE HD3 HA 0.090000 1.0080 0 + 222 P1 14 ILE C C 0.510000 12.0110 0 + 223 P1 14 ILE O O -0.510000 15.9990 0 + 224 P1 15 GLY N NH1 -0.470000 14.0070 0 + 225 P1 15 GLY HN H 0.310000 1.0080 0 + 226 P1 15 GLY CA CT2 -0.020000 12.0110 0 + 227 P1 15 GLY HA1 HB 0.090000 1.0080 0 + 228 P1 15 GLY HA2 HB 0.090000 1.0080 0 + 229 P1 15 GLY C C 0.510000 12.0110 0 + 230 P1 15 GLY O O -0.510000 15.9990 0 + 231 P1 16 MET N NH1 -0.470000 14.0070 0 + 232 P1 16 MET HN H 0.310000 1.0080 0 + 233 P1 16 MET CA CT1 0.070000 12.0110 0 + 234 P1 16 MET HA HB 0.090000 1.0080 0 + 235 P1 16 MET CB CT2 -0.180000 12.0110 0 + 236 P1 16 MET HB1 HA 0.090000 1.0080 0 + 237 P1 16 MET HB2 HA 0.090000 1.0080 0 + 238 P1 16 MET CG CT2 -0.140000 12.0110 0 + 239 P1 16 MET HG1 HA 0.090000 1.0080 0 + 240 P1 16 MET HG2 HA 0.090000 1.0080 0 + 241 P1 16 MET SD S -0.090000 32.0600 0 + 242 P1 16 MET CE CT3 -0.220000 12.0110 0 + 243 P1 16 MET HE1 HA 0.090000 1.0080 0 + 244 P1 16 MET HE2 HA 0.090000 1.0080 0 + 245 P1 16 MET HE3 HA 0.090000 1.0080 0 + 246 P1 16 MET C C 0.510000 12.0110 0 + 247 P1 16 MET O O -0.510000 15.9990 0 + 248 P1 17 GLU N NH1 -0.470000 14.0070 0 + 249 P1 17 GLU HN H 0.310000 1.0080 0 + 250 P1 17 GLU CA CT1 0.070000 12.0110 0 + 251 P1 17 GLU HA HB 0.090000 1.0080 0 + 252 P1 17 GLU CB CT2 -0.180000 12.0110 0 + 253 P1 17 GLU HB1 HA 0.090000 1.0080 0 + 254 P1 17 GLU HB2 HA 0.090000 1.0080 0 + 255 P1 17 GLU CG CT2 -0.280000 12.0110 0 + 256 P1 17 GLU HG1 HA 0.090000 1.0080 0 + 257 P1 17 GLU HG2 HA 0.090000 1.0080 0 + 258 P1 17 GLU CD CC 0.620000 12.0110 0 + 259 P1 17 GLU OE1 OC -0.760000 15.9990 0 + 260 P1 17 GLU OE2 OC -0.760000 15.9990 0 + 261 P1 17 GLU C C 0.510000 12.0110 0 + 262 P1 17 GLU O O -0.510000 15.9990 0 + 263 P1 18 ASN N NH1 -0.470000 14.0070 0 + 264 P1 18 ASN HN H 0.310000 1.0080 0 + 265 P1 18 ASN CA CT1 0.070000 12.0110 0 + 266 P1 18 ASN HA HB 0.090000 1.0080 0 + 267 P1 18 ASN CB CT2 -0.180000 12.0110 0 + 268 P1 18 ASN HB1 HA 0.090000 1.0080 0 + 269 P1 18 ASN HB2 HA 0.090000 1.0080 0 + 270 P1 18 ASN CG CC 0.550000 12.0110 0 + 271 P1 18 ASN OD1 O -0.550000 15.9990 0 + 272 P1 18 ASN ND2 NH2 -0.620000 14.0070 0 + 273 P1 18 ASN HD21 H 0.320000 1.0080 0 + 274 P1 18 ASN HD22 H 0.300000 1.0080 0 + 275 P1 18 ASN C C 0.510000 12.0110 0 + 276 P1 18 ASN O O -0.510000 15.9990 0 + 277 P1 19 ALA N NH1 -0.470000 14.0070 0 + 278 P1 19 ALA HN H 0.310000 1.0080 0 + 279 P1 19 ALA CA CT1 0.070000 12.0110 0 + 280 P1 19 ALA HA HB 0.090000 1.0080 0 + 281 P1 19 ALA CB CT3 -0.270000 12.0110 0 + 282 P1 19 ALA HB1 HA 0.090000 1.0080 0 + 283 P1 19 ALA HB2 HA 0.090000 1.0080 0 + 284 P1 19 ALA HB3 HA 0.090000 1.0080 0 + 285 P1 19 ALA C C 0.510000 12.0110 0 + 286 P1 19 ALA O O -0.510000 15.9990 0 + 287 P1 20 MET N NH1 -0.470000 14.0070 0 + 288 P1 20 MET HN H 0.310000 1.0080 0 + 289 P1 20 MET CA CT1 0.070000 12.0110 0 + 290 P1 20 MET HA HB 0.090000 1.0080 0 + 291 P1 20 MET CB CT2 -0.180000 12.0110 0 + 292 P1 20 MET HB1 HA 0.090000 1.0080 0 + 293 P1 20 MET HB2 HA 0.090000 1.0080 0 + 294 P1 20 MET CG CT2 -0.140000 12.0110 0 + 295 P1 20 MET HG1 HA 0.090000 1.0080 0 + 296 P1 20 MET HG2 HA 0.090000 1.0080 0 + 297 P1 20 MET SD S -0.090000 32.0600 0 + 298 P1 20 MET CE CT3 -0.220000 12.0110 0 + 299 P1 20 MET HE1 HA 0.090000 1.0080 0 + 300 P1 20 MET HE2 HA 0.090000 1.0080 0 + 301 P1 20 MET HE3 HA 0.090000 1.0080 0 + 302 P1 20 MET C C 0.510000 12.0110 0 + 303 P1 20 MET O O -0.510000 15.9990 0 + 304 P1 21 PRO N N -0.290000 14.0070 0 + 305 P1 21 PRO CD CP3 0.000000 12.0110 0 + 306 P1 21 PRO HD1 HA 0.090000 1.0080 0 + 307 P1 21 PRO HD2 HA 0.090000 1.0080 0 + 308 P1 21 PRO CA CP1 0.020000 12.0110 0 + 309 P1 21 PRO HA HB 0.090000 1.0080 0 + 310 P1 21 PRO CB CP2 -0.180000 12.0110 0 + 311 P1 21 PRO HB1 HA 0.090000 1.0080 0 + 312 P1 21 PRO HB2 HA 0.090000 1.0080 0 + 313 P1 21 PRO CG CP2 -0.180000 12.0110 0 + 314 P1 21 PRO HG1 HA 0.090000 1.0080 0 + 315 P1 21 PRO HG2 HA 0.090000 1.0080 0 + 316 P1 21 PRO C C 0.510000 12.0110 0 + 317 P1 21 PRO O O -0.510000 15.9990 0 + 318 P1 22 TRP N NH1 -0.470000 14.0070 0 + 319 P1 22 TRP HN H 0.310000 1.0080 0 + 320 P1 22 TRP CA CT1 0.070000 12.0110 0 + 321 P1 22 TRP HA HB 0.090000 1.0080 0 + 322 P1 22 TRP CB CT2 -0.180000 12.0110 0 + 323 P1 22 TRP HB1 HA 0.090000 1.0080 0 + 324 P1 22 TRP HB2 HA 0.090000 1.0080 0 + 325 P1 22 TRP CG CY -0.030000 12.0110 0 + 326 P1 22 TRP CD1 CA 0.035000 12.0110 0 + 327 P1 22 TRP HD1 HP 0.115000 1.0080 0 + 328 P1 22 TRP NE1 NY -0.610000 14.0070 0 + 329 P1 22 TRP HE1 H 0.380000 1.0080 0 + 330 P1 22 TRP CE2 CPT 0.130000 12.0110 0 + 331 P1 22 TRP CD2 CPT -0.020000 12.0110 0 + 332 P1 22 TRP CE3 CA -0.115000 12.0110 0 + 333 P1 22 TRP HE3 HP 0.115000 1.0080 0 + 334 P1 22 TRP CZ3 CA -0.115000 12.0110 0 + 335 P1 22 TRP HZ3 HP 0.115000 1.0080 0 + 336 P1 22 TRP CZ2 CA -0.115000 12.0110 0 + 337 P1 22 TRP HZ2 HP 0.115000 1.0080 0 + 338 P1 22 TRP CH2 CA -0.115000 12.0110 0 + 339 P1 22 TRP HH2 HP 0.115000 1.0080 0 + 340 P1 22 TRP C C 0.510000 12.0110 0 + 341 P1 22 TRP O O -0.510000 15.9990 0 + 342 P1 23 ASN N NH1 -0.470000 14.0070 0 + 343 P1 23 ASN HN H 0.310000 1.0080 0 + 344 P1 23 ASN CA CT1 0.070000 12.0110 0 + 345 P1 23 ASN HA HB 0.090000 1.0080 0 + 346 P1 23 ASN CB CT2 -0.180000 12.0110 0 + 347 P1 23 ASN HB1 HA 0.090000 1.0080 0 + 348 P1 23 ASN HB2 HA 0.090000 1.0080 0 + 349 P1 23 ASN CG CC 0.550000 12.0110 0 + 350 P1 23 ASN OD1 O -0.550000 15.9990 0 + 351 P1 23 ASN ND2 NH2 -0.620000 14.0070 0 + 352 P1 23 ASN HD21 H 0.320000 1.0080 0 + 353 P1 23 ASN HD22 H 0.300000 1.0080 0 + 354 P1 23 ASN C C 0.510000 12.0110 0 + 355 P1 23 ASN O O -0.510000 15.9990 0 + 356 P1 24 LEU N NH1 -0.470000 14.0070 0 + 357 P1 24 LEU HN H 0.310000 1.0080 0 + 358 P1 24 LEU CA CT1 0.070000 12.0110 0 + 359 P1 24 LEU HA HB 0.090000 1.0080 0 + 360 P1 24 LEU CB CT2 -0.180000 12.0110 0 + 361 P1 24 LEU HB1 HA 0.090000 1.0080 0 + 362 P1 24 LEU HB2 HA 0.090000 1.0080 0 + 363 P1 24 LEU CG CT1 -0.090000 12.0110 0 + 364 P1 24 LEU HG HA 0.090000 1.0080 0 + 365 P1 24 LEU CD1 CT3 -0.270000 12.0110 0 + 366 P1 24 LEU HD11 HA 0.090000 1.0080 0 + 367 P1 24 LEU HD12 HA 0.090000 1.0080 0 + 368 P1 24 LEU HD13 HA 0.090000 1.0080 0 + 369 P1 24 LEU CD2 CT3 -0.270000 12.0110 0 + 370 P1 24 LEU HD21 HA 0.090000 1.0080 0 + 371 P1 24 LEU HD22 HA 0.090000 1.0080 0 + 372 P1 24 LEU HD23 HA 0.090000 1.0080 0 + 373 P1 24 LEU C C 0.510000 12.0110 0 + 374 P1 24 LEU O O -0.510000 15.9990 0 + 375 P1 25 PRO N N -0.290000 14.0070 0 + 376 P1 25 PRO CD CP3 0.000000 12.0110 0 + 377 P1 25 PRO HD1 HA 0.090000 1.0080 0 + 378 P1 25 PRO HD2 HA 0.090000 1.0080 0 + 379 P1 25 PRO CA CP1 0.020000 12.0110 0 + 380 P1 25 PRO HA HB 0.090000 1.0080 0 + 381 P1 25 PRO CB CP2 -0.180000 12.0110 0 + 382 P1 25 PRO HB1 HA 0.090000 1.0080 0 + 383 P1 25 PRO HB2 HA 0.090000 1.0080 0 + 384 P1 25 PRO CG CP2 -0.180000 12.0110 0 + 385 P1 25 PRO HG1 HA 0.090000 1.0080 0 + 386 P1 25 PRO HG2 HA 0.090000 1.0080 0 + 387 P1 25 PRO C C 0.510000 12.0110 0 + 388 P1 25 PRO O O -0.510000 15.9990 0 + 389 P1 26 ALA N NH1 -0.470000 14.0070 0 + 390 P1 26 ALA HN H 0.310000 1.0080 0 + 391 P1 26 ALA CA CT1 0.070000 12.0110 0 + 392 P1 26 ALA HA HB 0.090000 1.0080 0 + 393 P1 26 ALA CB CT3 -0.270000 12.0110 0 + 394 P1 26 ALA HB1 HA 0.090000 1.0080 0 + 395 P1 26 ALA HB2 HA 0.090000 1.0080 0 + 396 P1 26 ALA HB3 HA 0.090000 1.0080 0 + 397 P1 26 ALA C C 0.510000 12.0110 0 + 398 P1 26 ALA O O -0.510000 15.9990 0 + 399 P1 27 ASP N NH1 -0.470000 14.0070 0 + 400 P1 27 ASP HN H 0.310000 1.0080 0 + 401 P1 27 ASP CA CT1 0.070000 12.0110 0 + 402 P1 27 ASP HA HB 0.090000 1.0080 0 + 403 P1 27 ASP CB CT2 -0.280000 12.0110 0 + 404 P1 27 ASP HB1 HA 0.090000 1.0080 0 + 405 P1 27 ASP HB2 HA 0.090000 1.0080 0 + 406 P1 27 ASP CG CC 0.620000 12.0110 0 + 407 P1 27 ASP OD1 OC -0.760000 15.9990 0 + 408 P1 27 ASP OD2 OC -0.760000 15.9990 0 + 409 P1 27 ASP C C 0.510000 12.0110 0 + 410 P1 27 ASP O O -0.510000 15.9990 0 + 411 P1 28 LEU N NH1 -0.470000 14.0070 0 + 412 P1 28 LEU HN H 0.310000 1.0080 0 + 413 P1 28 LEU CA CT1 0.070000 12.0110 0 + 414 P1 28 LEU HA HB 0.090000 1.0080 0 + 415 P1 28 LEU CB CT2 -0.180000 12.0110 0 + 416 P1 28 LEU HB1 HA 0.090000 1.0080 0 + 417 P1 28 LEU HB2 HA 0.090000 1.0080 0 + 418 P1 28 LEU CG CT1 -0.090000 12.0110 0 + 419 P1 28 LEU HG HA 0.090000 1.0080 0 + 420 P1 28 LEU CD1 CT3 -0.270000 12.0110 0 + 421 P1 28 LEU HD11 HA 0.090000 1.0080 0 + 422 P1 28 LEU HD12 HA 0.090000 1.0080 0 + 423 P1 28 LEU HD13 HA 0.090000 1.0080 0 + 424 P1 28 LEU CD2 CT3 -0.270000 12.0110 0 + 425 P1 28 LEU HD21 HA 0.090000 1.0080 0 + 426 P1 28 LEU HD22 HA 0.090000 1.0080 0 + 427 P1 28 LEU HD23 HA 0.090000 1.0080 0 + 428 P1 28 LEU C C 0.510000 12.0110 0 + 429 P1 28 LEU O O -0.510000 15.9990 0 + 430 P1 29 ALA N NH1 -0.470000 14.0070 0 + 431 P1 29 ALA HN H 0.310000 1.0080 0 + 432 P1 29 ALA CA CT1 0.070000 12.0110 0 + 433 P1 29 ALA HA HB 0.090000 1.0080 0 + 434 P1 29 ALA CB CT3 -0.270000 12.0110 0 + 435 P1 29 ALA HB1 HA 0.090000 1.0080 0 + 436 P1 29 ALA HB2 HA 0.090000 1.0080 0 + 437 P1 29 ALA HB3 HA 0.090000 1.0080 0 + 438 P1 29 ALA C C 0.510000 12.0110 0 + 439 P1 29 ALA O O -0.510000 15.9990 0 + 440 P1 30 TRP N NH1 -0.470000 14.0070 0 + 441 P1 30 TRP HN H 0.310000 1.0080 0 + 442 P1 30 TRP CA CT1 0.070000 12.0110 0 + 443 P1 30 TRP HA HB 0.090000 1.0080 0 + 444 P1 30 TRP CB CT2 -0.180000 12.0110 0 + 445 P1 30 TRP HB1 HA 0.090000 1.0080 0 + 446 P1 30 TRP HB2 HA 0.090000 1.0080 0 + 447 P1 30 TRP CG CY -0.030000 12.0110 0 + 448 P1 30 TRP CD1 CA 0.035000 12.0110 0 + 449 P1 30 TRP HD1 HP 0.115000 1.0080 0 + 450 P1 30 TRP NE1 NY -0.610000 14.0070 0 + 451 P1 30 TRP HE1 H 0.380000 1.0080 0 + 452 P1 30 TRP CE2 CPT 0.130000 12.0110 0 + 453 P1 30 TRP CD2 CPT -0.020000 12.0110 0 + 454 P1 30 TRP CE3 CA -0.115000 12.0110 0 + 455 P1 30 TRP HE3 HP 0.115000 1.0080 0 + 456 P1 30 TRP CZ3 CA -0.115000 12.0110 0 + 457 P1 30 TRP HZ3 HP 0.115000 1.0080 0 + 458 P1 30 TRP CZ2 CA -0.115000 12.0110 0 + 459 P1 30 TRP HZ2 HP 0.115000 1.0080 0 + 460 P1 30 TRP CH2 CA -0.115000 12.0110 0 + 461 P1 30 TRP HH2 HP 0.115000 1.0080 0 + 462 P1 30 TRP C C 0.510000 12.0110 0 + 463 P1 30 TRP O O -0.510000 15.9990 0 + 464 P1 31 PHE N NH1 -0.470000 14.0070 0 + 465 P1 31 PHE HN H 0.310000 1.0080 0 + 466 P1 31 PHE CA CT1 0.070000 12.0110 0 + 467 P1 31 PHE HA HB 0.090000 1.0080 0 + 468 P1 31 PHE CB CT2 -0.180000 12.0110 0 + 469 P1 31 PHE HB1 HA 0.090000 1.0080 0 + 470 P1 31 PHE HB2 HA 0.090000 1.0080 0 + 471 P1 31 PHE CG CA 0.000000 12.0110 0 + 472 P1 31 PHE CD1 CA -0.115000 12.0110 0 + 473 P1 31 PHE HD1 HP 0.115000 1.0080 0 + 474 P1 31 PHE CE1 CA -0.115000 12.0110 0 + 475 P1 31 PHE HE1 HP 0.115000 1.0080 0 + 476 P1 31 PHE CZ CA -0.115000 12.0110 0 + 477 P1 31 PHE HZ HP 0.115000 1.0080 0 + 478 P1 31 PHE CD2 CA -0.115000 12.0110 0 + 479 P1 31 PHE HD2 HP 0.115000 1.0080 0 + 480 P1 31 PHE CE2 CA -0.115000 12.0110 0 + 481 P1 31 PHE HE2 HP 0.115000 1.0080 0 + 482 P1 31 PHE C C 0.510000 12.0110 0 + 483 P1 31 PHE O O -0.510000 15.9990 0 + 484 P1 32 LYS N NH1 -0.470000 14.0070 0 + 485 P1 32 LYS HN H 0.310000 1.0080 0 + 486 P1 32 LYS CA CT1 0.070000 12.0110 0 + 487 P1 32 LYS HA HB 0.090000 1.0080 0 + 488 P1 32 LYS CB CT2 -0.180000 12.0110 0 + 489 P1 32 LYS HB1 HA 0.090000 1.0080 0 + 490 P1 32 LYS HB2 HA 0.090000 1.0080 0 + 491 P1 32 LYS CG CT2 -0.180000 12.0110 0 + 492 P1 32 LYS HG1 HA 0.090000 1.0080 0 + 493 P1 32 LYS HG2 HA 0.090000 1.0080 0 + 494 P1 32 LYS CD CT2 -0.180000 12.0110 0 + 495 P1 32 LYS HD1 HA 0.090000 1.0080 0 + 496 P1 32 LYS HD2 HA 0.090000 1.0080 0 + 497 P1 32 LYS CE CT2 0.210000 12.0110 0 + 498 P1 32 LYS HE1 HA 0.050000 1.0080 0 + 499 P1 32 LYS HE2 HA 0.050000 1.0080 0 + 500 P1 32 LYS NZ NH3 -0.300000 14.0070 0 + 501 P1 32 LYS HZ1 HC 0.330000 1.0080 0 + 502 P1 32 LYS HZ2 HC 0.330000 1.0080 0 + 503 P1 32 LYS HZ3 HC 0.330000 1.0080 0 + 504 P1 32 LYS C C 0.510000 12.0110 0 + 505 P1 32 LYS O O -0.510000 15.9990 0 + 506 P1 33 ARG N NH1 -0.470000 14.0070 0 + 507 P1 33 ARG HN H 0.310000 1.0080 0 + 508 P1 33 ARG CA CT1 0.070000 12.0110 0 + 509 P1 33 ARG HA HB 0.090000 1.0080 0 + 510 P1 33 ARG CB CT2 -0.180000 12.0110 0 + 511 P1 33 ARG HB1 HA 0.090000 1.0080 0 + 512 P1 33 ARG HB2 HA 0.090000 1.0080 0 + 513 P1 33 ARG CG CT2 -0.180000 12.0110 0 + 514 P1 33 ARG HG1 HA 0.090000 1.0080 0 + 515 P1 33 ARG HG2 HA 0.090000 1.0080 0 + 516 P1 33 ARG CD CT2 0.200000 12.0110 0 + 517 P1 33 ARG HD1 HA 0.090000 1.0080 0 + 518 P1 33 ARG HD2 HA 0.090000 1.0080 0 + 519 P1 33 ARG NE NC2 -0.700000 14.0070 0 + 520 P1 33 ARG HE HC 0.440000 1.0080 0 + 521 P1 33 ARG CZ C 0.640000 12.0110 0 + 522 P1 33 ARG NH1 NC2 -0.800000 14.0070 0 + 523 P1 33 ARG HH11 HC 0.460000 1.0080 0 + 524 P1 33 ARG HH12 HC 0.460000 1.0080 0 + 525 P1 33 ARG NH2 NC2 -0.800000 14.0070 0 + 526 P1 33 ARG HH21 HC 0.460000 1.0080 0 + 527 P1 33 ARG HH22 HC 0.460000 1.0080 0 + 528 P1 33 ARG C C 0.510000 12.0110 0 + 529 P1 33 ARG O O -0.510000 15.9990 0 + 530 P1 34 ASN N NH1 -0.470000 14.0070 0 + 531 P1 34 ASN HN H 0.310000 1.0080 0 + 532 P1 34 ASN CA CT1 0.070000 12.0110 0 + 533 P1 34 ASN HA HB 0.090000 1.0080 0 + 534 P1 34 ASN CB CT2 -0.180000 12.0110 0 + 535 P1 34 ASN HB1 HA 0.090000 1.0080 0 + 536 P1 34 ASN HB2 HA 0.090000 1.0080 0 + 537 P1 34 ASN CG CC 0.550000 12.0110 0 + 538 P1 34 ASN OD1 O -0.550000 15.9990 0 + 539 P1 34 ASN ND2 NH2 -0.620000 14.0070 0 + 540 P1 34 ASN HD21 H 0.320000 1.0080 0 + 541 P1 34 ASN HD22 H 0.300000 1.0080 0 + 542 P1 34 ASN C C 0.510000 12.0110 0 + 543 P1 34 ASN O O -0.510000 15.9990 0 + 544 P1 35 THR N NH1 -0.470000 14.0070 0 + 545 P1 35 THR HN H 0.310000 1.0080 0 + 546 P1 35 THR CA CT1 0.070000 12.0110 0 + 547 P1 35 THR HA HB 0.090000 1.0080 0 + 548 P1 35 THR CB CT1 0.140000 12.0110 0 + 549 P1 35 THR HB HA 0.090000 1.0080 0 + 550 P1 35 THR OG1 OH1 -0.660000 15.9990 0 + 551 P1 35 THR HG1 H 0.430000 1.0080 0 + 552 P1 35 THR CG2 CT3 -0.270000 12.0110 0 + 553 P1 35 THR HG21 HA 0.090000 1.0080 0 + 554 P1 35 THR HG22 HA 0.090000 1.0080 0 + 555 P1 35 THR HG23 HA 0.090000 1.0080 0 + 556 P1 35 THR C C 0.510000 12.0110 0 + 557 P1 35 THR O O -0.510000 15.9990 0 + 558 P1 36 LEU N NH1 -0.470000 14.0070 0 + 559 P1 36 LEU HN H 0.310000 1.0080 0 + 560 P1 36 LEU CA CT1 0.070000 12.0110 0 + 561 P1 36 LEU HA HB 0.090000 1.0080 0 + 562 P1 36 LEU CB CT2 -0.180000 12.0110 0 + 563 P1 36 LEU HB1 HA 0.090000 1.0080 0 + 564 P1 36 LEU HB2 HA 0.090000 1.0080 0 + 565 P1 36 LEU CG CT1 -0.090000 12.0110 0 + 566 P1 36 LEU HG HA 0.090000 1.0080 0 + 567 P1 36 LEU CD1 CT3 -0.270000 12.0110 0 + 568 P1 36 LEU HD11 HA 0.090000 1.0080 0 + 569 P1 36 LEU HD12 HA 0.090000 1.0080 0 + 570 P1 36 LEU HD13 HA 0.090000 1.0080 0 + 571 P1 36 LEU CD2 CT3 -0.270000 12.0110 0 + 572 P1 36 LEU HD21 HA 0.090000 1.0080 0 + 573 P1 36 LEU HD22 HA 0.090000 1.0080 0 + 574 P1 36 LEU HD23 HA 0.090000 1.0080 0 + 575 P1 36 LEU C C 0.510000 12.0110 0 + 576 P1 36 LEU O O -0.510000 15.9990 0 + 577 P1 37 ASP N NH1 -0.470000 14.0070 0 + 578 P1 37 ASP HN H 0.310000 1.0080 0 + 579 P1 37 ASP CA CT1 0.070000 12.0110 0 + 580 P1 37 ASP HA HB 0.090000 1.0080 0 + 581 P1 37 ASP CB CT2 -0.280000 12.0110 0 + 582 P1 37 ASP HB1 HA 0.090000 1.0080 0 + 583 P1 37 ASP HB2 HA 0.090000 1.0080 0 + 584 P1 37 ASP CG CC 0.620000 12.0110 0 + 585 P1 37 ASP OD1 OC -0.760000 15.9990 0 + 586 P1 37 ASP OD2 OC -0.760000 15.9990 0 + 587 P1 37 ASP C C 0.510000 12.0110 0 + 588 P1 37 ASP O O -0.510000 15.9990 0 + 589 P1 38 LYS N NH1 -0.470000 14.0070 0 + 590 P1 38 LYS HN H 0.310000 1.0080 0 + 591 P1 38 LYS CA CT1 0.070000 12.0110 0 + 592 P1 38 LYS HA HB 0.090000 1.0080 0 + 593 P1 38 LYS CB CT2 -0.180000 12.0110 0 + 594 P1 38 LYS HB1 HA 0.090000 1.0080 0 + 595 P1 38 LYS HB2 HA 0.090000 1.0080 0 + 596 P1 38 LYS CG CT2 -0.180000 12.0110 0 + 597 P1 38 LYS HG1 HA 0.090000 1.0080 0 + 598 P1 38 LYS HG2 HA 0.090000 1.0080 0 + 599 P1 38 LYS CD CT2 -0.180000 12.0110 0 + 600 P1 38 LYS HD1 HA 0.090000 1.0080 0 + 601 P1 38 LYS HD2 HA 0.090000 1.0080 0 + 602 P1 38 LYS CE CT2 0.210000 12.0110 0 + 603 P1 38 LYS HE1 HA 0.050000 1.0080 0 + 604 P1 38 LYS HE2 HA 0.050000 1.0080 0 + 605 P1 38 LYS NZ NH3 -0.300000 14.0070 0 + 606 P1 38 LYS HZ1 HC 0.330000 1.0080 0 + 607 P1 38 LYS HZ2 HC 0.330000 1.0080 0 + 608 P1 38 LYS HZ3 HC 0.330000 1.0080 0 + 609 P1 38 LYS C C 0.510000 12.0110 0 + 610 P1 38 LYS O O -0.510000 15.9990 0 + 611 P1 39 PRO N N -0.290000 14.0070 0 + 612 P1 39 PRO CD CP3 0.000000 12.0110 0 + 613 P1 39 PRO HD1 HA 0.090000 1.0080 0 + 614 P1 39 PRO HD2 HA 0.090000 1.0080 0 + 615 P1 39 PRO CA CP1 0.020000 12.0110 0 + 616 P1 39 PRO HA HB 0.090000 1.0080 0 + 617 P1 39 PRO CB CP2 -0.180000 12.0110 0 + 618 P1 39 PRO HB1 HA 0.090000 1.0080 0 + 619 P1 39 PRO HB2 HA 0.090000 1.0080 0 + 620 P1 39 PRO CG CP2 -0.180000 12.0110 0 + 621 P1 39 PRO HG1 HA 0.090000 1.0080 0 + 622 P1 39 PRO HG2 HA 0.090000 1.0080 0 + 623 P1 39 PRO C C 0.510000 12.0110 0 + 624 P1 39 PRO O O -0.510000 15.9990 0 + 625 P1 40 VAL N NH1 -0.470000 14.0070 0 + 626 P1 40 VAL HN H 0.310000 1.0080 0 + 627 P1 40 VAL CA CT1 0.070000 12.0110 0 + 628 P1 40 VAL HA HB 0.090000 1.0080 0 + 629 P1 40 VAL CB CT1 -0.090000 12.0110 0 + 630 P1 40 VAL HB HA 0.090000 1.0080 0 + 631 P1 40 VAL CG1 CT3 -0.270000 12.0110 0 + 632 P1 40 VAL HG11 HA 0.090000 1.0080 0 + 633 P1 40 VAL HG12 HA 0.090000 1.0080 0 + 634 P1 40 VAL HG13 HA 0.090000 1.0080 0 + 635 P1 40 VAL CG2 CT3 -0.270000 12.0110 0 + 636 P1 40 VAL HG21 HA 0.090000 1.0080 0 + 637 P1 40 VAL HG22 HA 0.090000 1.0080 0 + 638 P1 40 VAL HG23 HA 0.090000 1.0080 0 + 639 P1 40 VAL C C 0.510000 12.0110 0 + 640 P1 40 VAL O O -0.510000 15.9990 0 + 641 P1 41 ILE N NH1 -0.470000 14.0070 0 + 642 P1 41 ILE HN H 0.310000 1.0080 0 + 643 P1 41 ILE CA CT1 0.070000 12.0110 0 + 644 P1 41 ILE HA HB 0.090000 1.0080 0 + 645 P1 41 ILE CB CT1 -0.090000 12.0110 0 + 646 P1 41 ILE HB HA 0.090000 1.0080 0 + 647 P1 41 ILE CG2 CT3 -0.270000 12.0110 0 + 648 P1 41 ILE HG21 HA 0.090000 1.0080 0 + 649 P1 41 ILE HG22 HA 0.090000 1.0080 0 + 650 P1 41 ILE HG23 HA 0.090000 1.0080 0 + 651 P1 41 ILE CG1 CT2 -0.180000 12.0110 0 + 652 P1 41 ILE HG11 HA 0.090000 1.0080 0 + 653 P1 41 ILE HG12 HA 0.090000 1.0080 0 + 654 P1 41 ILE CD CT3 -0.270000 12.0110 0 + 655 P1 41 ILE HD1 HA 0.090000 1.0080 0 + 656 P1 41 ILE HD2 HA 0.090000 1.0080 0 + 657 P1 41 ILE HD3 HA 0.090000 1.0080 0 + 658 P1 41 ILE C C 0.510000 12.0110 0 + 659 P1 41 ILE O O -0.510000 15.9990 0 + 660 P1 42 MET N NH1 -0.470000 14.0070 0 + 661 P1 42 MET HN H 0.310000 1.0080 0 + 662 P1 42 MET CA CT1 0.070000 12.0110 0 + 663 P1 42 MET HA HB 0.090000 1.0080 0 + 664 P1 42 MET CB CT2 -0.180000 12.0110 0 + 665 P1 42 MET HB1 HA 0.090000 1.0080 0 + 666 P1 42 MET HB2 HA 0.090000 1.0080 0 + 667 P1 42 MET CG CT2 -0.140000 12.0110 0 + 668 P1 42 MET HG1 HA 0.090000 1.0080 0 + 669 P1 42 MET HG2 HA 0.090000 1.0080 0 + 670 P1 42 MET SD S -0.090000 32.0600 0 + 671 P1 42 MET CE CT3 -0.220000 12.0110 0 + 672 P1 42 MET HE1 HA 0.090000 1.0080 0 + 673 P1 42 MET HE2 HA 0.090000 1.0080 0 + 674 P1 42 MET HE3 HA 0.090000 1.0080 0 + 675 P1 42 MET C C 0.510000 12.0110 0 + 676 P1 42 MET O O -0.510000 15.9990 0 + 677 P1 43 GLY N NH1 -0.470000 14.0070 0 + 678 P1 43 GLY HN H 0.310000 1.0080 0 + 679 P1 43 GLY CA CT2 -0.020000 12.0110 0 + 680 P1 43 GLY HA1 HB 0.090000 1.0080 0 + 681 P1 43 GLY HA2 HB 0.090000 1.0080 0 + 682 P1 43 GLY C C 0.510000 12.0110 0 + 683 P1 43 GLY O O -0.510000 15.9990 0 + 684 P1 44 ARG N NH1 -0.470000 14.0070 0 + 685 P1 44 ARG HN H 0.310000 1.0080 0 + 686 P1 44 ARG CA CT1 0.070000 12.0110 0 + 687 P1 44 ARG HA HB 0.090000 1.0080 0 + 688 P1 44 ARG CB CT2 -0.180000 12.0110 0 + 689 P1 44 ARG HB1 HA 0.090000 1.0080 0 + 690 P1 44 ARG HB2 HA 0.090000 1.0080 0 + 691 P1 44 ARG CG CT2 -0.180000 12.0110 0 + 692 P1 44 ARG HG1 HA 0.090000 1.0080 0 + 693 P1 44 ARG HG2 HA 0.090000 1.0080 0 + 694 P1 44 ARG CD CT2 0.200000 12.0110 0 + 695 P1 44 ARG HD1 HA 0.090000 1.0080 0 + 696 P1 44 ARG HD2 HA 0.090000 1.0080 0 + 697 P1 44 ARG NE NC2 -0.700000 14.0070 0 + 698 P1 44 ARG HE HC 0.440000 1.0080 0 + 699 P1 44 ARG CZ C 0.640000 12.0110 0 + 700 P1 44 ARG NH1 NC2 -0.800000 14.0070 0 + 701 P1 44 ARG HH11 HC 0.460000 1.0080 0 + 702 P1 44 ARG HH12 HC 0.460000 1.0080 0 + 703 P1 44 ARG NH2 NC2 -0.800000 14.0070 0 + 704 P1 44 ARG HH21 HC 0.460000 1.0080 0 + 705 P1 44 ARG HH22 HC 0.460000 1.0080 0 + 706 P1 44 ARG C C 0.510000 12.0110 0 + 707 P1 44 ARG O O -0.510000 15.9990 0 + 708 P1 45 HSD N NH1 -0.470000 14.0070 0 + 709 P1 45 HSD HN H 0.310000 1.0080 0 + 710 P1 45 HSD CA CT1 0.070000 12.0110 0 + 711 P1 45 HSD HA HB 0.090000 1.0080 0 + 712 P1 45 HSD CB CT2 -0.090000 12.0110 0 + 713 P1 45 HSD HB1 HA 0.090000 1.0080 0 + 714 P1 45 HSD HB2 HA 0.090000 1.0080 0 + 715 P1 45 HSD ND1 NR1 -0.360000 14.0070 0 + 716 P1 45 HSD HD1 H 0.320000 1.0080 0 + 717 P1 45 HSD CG CPH1 -0.050000 12.0110 0 + 718 P1 45 HSD CE1 CPH2 0.250000 12.0110 0 + 719 P1 45 HSD HE1 HR1 0.130000 1.0080 0 + 720 P1 45 HSD NE2 NR2 -0.700000 14.0070 0 + 721 P1 45 HSD CD2 CPH1 0.220000 12.0110 0 + 722 P1 45 HSD HD2 HR3 0.100000 1.0080 0 + 723 P1 45 HSD C C 0.510000 12.0110 0 + 724 P1 45 HSD O O -0.510000 15.9990 0 + 725 P1 46 THR N NH1 -0.470000 14.0070 0 + 726 P1 46 THR HN H 0.310000 1.0080 0 + 727 P1 46 THR CA CT1 0.070000 12.0110 0 + 728 P1 46 THR HA HB 0.090000 1.0080 0 + 729 P1 46 THR CB CT1 0.140000 12.0110 0 + 730 P1 46 THR HB HA 0.090000 1.0080 0 + 731 P1 46 THR OG1 OH1 -0.660000 15.9990 0 + 732 P1 46 THR HG1 H 0.430000 1.0080 0 + 733 P1 46 THR CG2 CT3 -0.270000 12.0110 0 + 734 P1 46 THR HG21 HA 0.090000 1.0080 0 + 735 P1 46 THR HG22 HA 0.090000 1.0080 0 + 736 P1 46 THR HG23 HA 0.090000 1.0080 0 + 737 P1 46 THR C C 0.510000 12.0110 0 + 738 P1 46 THR O O -0.510000 15.9990 0 + 739 P1 47 TRP N NH1 -0.470000 14.0070 0 + 740 P1 47 TRP HN H 0.310000 1.0080 0 + 741 P1 47 TRP CA CT1 0.070000 12.0110 0 + 742 P1 47 TRP HA HB 0.090000 1.0080 0 + 743 P1 47 TRP CB CT2 -0.180000 12.0110 0 + 744 P1 47 TRP HB1 HA 0.090000 1.0080 0 + 745 P1 47 TRP HB2 HA 0.090000 1.0080 0 + 746 P1 47 TRP CG CY -0.030000 12.0110 0 + 747 P1 47 TRP CD1 CA 0.035000 12.0110 0 + 748 P1 47 TRP HD1 HP 0.115000 1.0080 0 + 749 P1 47 TRP NE1 NY -0.610000 14.0070 0 + 750 P1 47 TRP HE1 H 0.380000 1.0080 0 + 751 P1 47 TRP CE2 CPT 0.130000 12.0110 0 + 752 P1 47 TRP CD2 CPT -0.020000 12.0110 0 + 753 P1 47 TRP CE3 CA -0.115000 12.0110 0 + 754 P1 47 TRP HE3 HP 0.115000 1.0080 0 + 755 P1 47 TRP CZ3 CA -0.115000 12.0110 0 + 756 P1 47 TRP HZ3 HP 0.115000 1.0080 0 + 757 P1 47 TRP CZ2 CA -0.115000 12.0110 0 + 758 P1 47 TRP HZ2 HP 0.115000 1.0080 0 + 759 P1 47 TRP CH2 CA -0.115000 12.0110 0 + 760 P1 47 TRP HH2 HP 0.115000 1.0080 0 + 761 P1 47 TRP C C 0.510000 12.0110 0 + 762 P1 47 TRP O O -0.510000 15.9990 0 + 763 P1 48 GLU N NH1 -0.470000 14.0070 0 + 764 P1 48 GLU HN H 0.310000 1.0080 0 + 765 P1 48 GLU CA CT1 0.070000 12.0110 0 + 766 P1 48 GLU HA HB 0.090000 1.0080 0 + 767 P1 48 GLU CB CT2 -0.180000 12.0110 0 + 768 P1 48 GLU HB1 HA 0.090000 1.0080 0 + 769 P1 48 GLU HB2 HA 0.090000 1.0080 0 + 770 P1 48 GLU CG CT2 -0.280000 12.0110 0 + 771 P1 48 GLU HG1 HA 0.090000 1.0080 0 + 772 P1 48 GLU HG2 HA 0.090000 1.0080 0 + 773 P1 48 GLU CD CC 0.620000 12.0110 0 + 774 P1 48 GLU OE1 OC -0.760000 15.9990 0 + 775 P1 48 GLU OE2 OC -0.760000 15.9990 0 + 776 P1 48 GLU C C 0.510000 12.0110 0 + 777 P1 48 GLU O O -0.510000 15.9990 0 + 778 P1 49 SER N NH1 -0.470000 14.0070 0 + 779 P1 49 SER HN H 0.310000 1.0080 0 + 780 P1 49 SER CA CT1 0.070000 12.0110 0 + 781 P1 49 SER HA HB 0.090000 1.0080 0 + 782 P1 49 SER CB CT2 0.050000 12.0110 0 + 783 P1 49 SER HB1 HA 0.090000 1.0080 0 + 784 P1 49 SER HB2 HA 0.090000 1.0080 0 + 785 P1 49 SER OG OH1 -0.660000 15.9990 0 + 786 P1 49 SER HG1 H 0.430000 1.0080 0 + 787 P1 49 SER C C 0.510000 12.0110 0 + 788 P1 49 SER O O -0.510000 15.9990 0 + 789 P1 50 ILE N NH1 -0.470000 14.0070 0 + 790 P1 50 ILE HN H 0.310000 1.0080 0 + 791 P1 50 ILE CA CT1 0.070000 12.0110 0 + 792 P1 50 ILE HA HB 0.090000 1.0080 0 + 793 P1 50 ILE CB CT1 -0.090000 12.0110 0 + 794 P1 50 ILE HB HA 0.090000 1.0080 0 + 795 P1 50 ILE CG2 CT3 -0.270000 12.0110 0 + 796 P1 50 ILE HG21 HA 0.090000 1.0080 0 + 797 P1 50 ILE HG22 HA 0.090000 1.0080 0 + 798 P1 50 ILE HG23 HA 0.090000 1.0080 0 + 799 P1 50 ILE CG1 CT2 -0.180000 12.0110 0 + 800 P1 50 ILE HG11 HA 0.090000 1.0080 0 + 801 P1 50 ILE HG12 HA 0.090000 1.0080 0 + 802 P1 50 ILE CD CT3 -0.270000 12.0110 0 + 803 P1 50 ILE HD1 HA 0.090000 1.0080 0 + 804 P1 50 ILE HD2 HA 0.090000 1.0080 0 + 805 P1 50 ILE HD3 HA 0.090000 1.0080 0 + 806 P1 50 ILE C C 0.510000 12.0110 0 + 807 P1 50 ILE O O -0.510000 15.9990 0 + 808 P1 51 GLY N NH1 -0.470000 14.0070 0 + 809 P1 51 GLY HN H 0.310000 1.0080 0 + 810 P1 51 GLY CA CT2 -0.020000 12.0110 0 + 811 P1 51 GLY HA1 HB 0.090000 1.0080 0 + 812 P1 51 GLY HA2 HB 0.090000 1.0080 0 + 813 P1 51 GLY C C 0.510000 12.0110 0 + 814 P1 51 GLY O O -0.510000 15.9990 0 + 815 P1 52 ARG N NH1 -0.470000 14.0070 0 + 816 P1 52 ARG HN H 0.310000 1.0080 0 + 817 P1 52 ARG CA CT1 0.070000 12.0110 0 + 818 P1 52 ARG HA HB 0.090000 1.0080 0 + 819 P1 52 ARG CB CT2 -0.180000 12.0110 0 + 820 P1 52 ARG HB1 HA 0.090000 1.0080 0 + 821 P1 52 ARG HB2 HA 0.090000 1.0080 0 + 822 P1 52 ARG CG CT2 -0.180000 12.0110 0 + 823 P1 52 ARG HG1 HA 0.090000 1.0080 0 + 824 P1 52 ARG HG2 HA 0.090000 1.0080 0 + 825 P1 52 ARG CD CT2 0.200000 12.0110 0 + 826 P1 52 ARG HD1 HA 0.090000 1.0080 0 + 827 P1 52 ARG HD2 HA 0.090000 1.0080 0 + 828 P1 52 ARG NE NC2 -0.700000 14.0070 0 + 829 P1 52 ARG HE HC 0.440000 1.0080 0 + 830 P1 52 ARG CZ C 0.640000 12.0110 0 + 831 P1 52 ARG NH1 NC2 -0.800000 14.0070 0 + 832 P1 52 ARG HH11 HC 0.460000 1.0080 0 + 833 P1 52 ARG HH12 HC 0.460000 1.0080 0 + 834 P1 52 ARG NH2 NC2 -0.800000 14.0070 0 + 835 P1 52 ARG HH21 HC 0.460000 1.0080 0 + 836 P1 52 ARG HH22 HC 0.460000 1.0080 0 + 837 P1 52 ARG C C 0.510000 12.0110 0 + 838 P1 52 ARG O O -0.510000 15.9990 0 + 839 P1 53 PRO N N -0.290000 14.0070 0 + 840 P1 53 PRO CD CP3 0.000000 12.0110 0 + 841 P1 53 PRO HD1 HA 0.090000 1.0080 0 + 842 P1 53 PRO HD2 HA 0.090000 1.0080 0 + 843 P1 53 PRO CA CP1 0.020000 12.0110 0 + 844 P1 53 PRO HA HB 0.090000 1.0080 0 + 845 P1 53 PRO CB CP2 -0.180000 12.0110 0 + 846 P1 53 PRO HB1 HA 0.090000 1.0080 0 + 847 P1 53 PRO HB2 HA 0.090000 1.0080 0 + 848 P1 53 PRO CG CP2 -0.180000 12.0110 0 + 849 P1 53 PRO HG1 HA 0.090000 1.0080 0 + 850 P1 53 PRO HG2 HA 0.090000 1.0080 0 + 851 P1 53 PRO C C 0.510000 12.0110 0 + 852 P1 53 PRO O O -0.510000 15.9990 0 + 853 P1 54 LEU N NH1 -0.470000 14.0070 0 + 854 P1 54 LEU HN H 0.310000 1.0080 0 + 855 P1 54 LEU CA CT1 0.070000 12.0110 0 + 856 P1 54 LEU HA HB 0.090000 1.0080 0 + 857 P1 54 LEU CB CT2 -0.180000 12.0110 0 + 858 P1 54 LEU HB1 HA 0.090000 1.0080 0 + 859 P1 54 LEU HB2 HA 0.090000 1.0080 0 + 860 P1 54 LEU CG CT1 -0.090000 12.0110 0 + 861 P1 54 LEU HG HA 0.090000 1.0080 0 + 862 P1 54 LEU CD1 CT3 -0.270000 12.0110 0 + 863 P1 54 LEU HD11 HA 0.090000 1.0080 0 + 864 P1 54 LEU HD12 HA 0.090000 1.0080 0 + 865 P1 54 LEU HD13 HA 0.090000 1.0080 0 + 866 P1 54 LEU CD2 CT3 -0.270000 12.0110 0 + 867 P1 54 LEU HD21 HA 0.090000 1.0080 0 + 868 P1 54 LEU HD22 HA 0.090000 1.0080 0 + 869 P1 54 LEU HD23 HA 0.090000 1.0080 0 + 870 P1 54 LEU C C 0.510000 12.0110 0 + 871 P1 54 LEU O O -0.510000 15.9990 0 + 872 P1 55 PRO N N -0.290000 14.0070 0 + 873 P1 55 PRO CD CP3 0.000000 12.0110 0 + 874 P1 55 PRO HD1 HA 0.090000 1.0080 0 + 875 P1 55 PRO HD2 HA 0.090000 1.0080 0 + 876 P1 55 PRO CA CP1 0.020000 12.0110 0 + 877 P1 55 PRO HA HB 0.090000 1.0080 0 + 878 P1 55 PRO CB CP2 -0.180000 12.0110 0 + 879 P1 55 PRO HB1 HA 0.090000 1.0080 0 + 880 P1 55 PRO HB2 HA 0.090000 1.0080 0 + 881 P1 55 PRO CG CP2 -0.180000 12.0110 0 + 882 P1 55 PRO HG1 HA 0.090000 1.0080 0 + 883 P1 55 PRO HG2 HA 0.090000 1.0080 0 + 884 P1 55 PRO C C 0.510000 12.0110 0 + 885 P1 55 PRO O O -0.510000 15.9990 0 + 886 P1 56 GLY N NH1 -0.470000 14.0070 0 + 887 P1 56 GLY HN H 0.310000 1.0080 0 + 888 P1 56 GLY CA CT2 -0.020000 12.0110 0 + 889 P1 56 GLY HA1 HB 0.090000 1.0080 0 + 890 P1 56 GLY HA2 HB 0.090000 1.0080 0 + 891 P1 56 GLY C C 0.510000 12.0110 0 + 892 P1 56 GLY O O -0.510000 15.9990 0 + 893 P1 57 ARG N NH1 -0.470000 14.0070 0 + 894 P1 57 ARG HN H 0.310000 1.0080 0 + 895 P1 57 ARG CA CT1 0.070000 12.0110 0 + 896 P1 57 ARG HA HB 0.090000 1.0080 0 + 897 P1 57 ARG CB CT2 -0.180000 12.0110 0 + 898 P1 57 ARG HB1 HA 0.090000 1.0080 0 + 899 P1 57 ARG HB2 HA 0.090000 1.0080 0 + 900 P1 57 ARG CG CT2 -0.180000 12.0110 0 + 901 P1 57 ARG HG1 HA 0.090000 1.0080 0 + 902 P1 57 ARG HG2 HA 0.090000 1.0080 0 + 903 P1 57 ARG CD CT2 0.200000 12.0110 0 + 904 P1 57 ARG HD1 HA 0.090000 1.0080 0 + 905 P1 57 ARG HD2 HA 0.090000 1.0080 0 + 906 P1 57 ARG NE NC2 -0.700000 14.0070 0 + 907 P1 57 ARG HE HC 0.440000 1.0080 0 + 908 P1 57 ARG CZ C 0.640000 12.0110 0 + 909 P1 57 ARG NH1 NC2 -0.800000 14.0070 0 + 910 P1 57 ARG HH11 HC 0.460000 1.0080 0 + 911 P1 57 ARG HH12 HC 0.460000 1.0080 0 + 912 P1 57 ARG NH2 NC2 -0.800000 14.0070 0 + 913 P1 57 ARG HH21 HC 0.460000 1.0080 0 + 914 P1 57 ARG HH22 HC 0.460000 1.0080 0 + 915 P1 57 ARG C C 0.510000 12.0110 0 + 916 P1 57 ARG O O -0.510000 15.9990 0 + 917 P1 58 LYS N NH1 -0.470000 14.0070 0 + 918 P1 58 LYS HN H 0.310000 1.0080 0 + 919 P1 58 LYS CA CT1 0.070000 12.0110 0 + 920 P1 58 LYS HA HB 0.090000 1.0080 0 + 921 P1 58 LYS CB CT2 -0.180000 12.0110 0 + 922 P1 58 LYS HB1 HA 0.090000 1.0080 0 + 923 P1 58 LYS HB2 HA 0.090000 1.0080 0 + 924 P1 58 LYS CG CT2 -0.180000 12.0110 0 + 925 P1 58 LYS HG1 HA 0.090000 1.0080 0 + 926 P1 58 LYS HG2 HA 0.090000 1.0080 0 + 927 P1 58 LYS CD CT2 -0.180000 12.0110 0 + 928 P1 58 LYS HD1 HA 0.090000 1.0080 0 + 929 P1 58 LYS HD2 HA 0.090000 1.0080 0 + 930 P1 58 LYS CE CT2 0.210000 12.0110 0 + 931 P1 58 LYS HE1 HA 0.050000 1.0080 0 + 932 P1 58 LYS HE2 HA 0.050000 1.0080 0 + 933 P1 58 LYS NZ NH3 -0.300000 14.0070 0 + 934 P1 58 LYS HZ1 HC 0.330000 1.0080 0 + 935 P1 58 LYS HZ2 HC 0.330000 1.0080 0 + 936 P1 58 LYS HZ3 HC 0.330000 1.0080 0 + 937 P1 58 LYS C C 0.510000 12.0110 0 + 938 P1 58 LYS O O -0.510000 15.9990 0 + 939 P1 59 ASN N NH1 -0.470000 14.0070 0 + 940 P1 59 ASN HN H 0.310000 1.0080 0 + 941 P1 59 ASN CA CT1 0.070000 12.0110 0 + 942 P1 59 ASN HA HB 0.090000 1.0080 0 + 943 P1 59 ASN CB CT2 -0.180000 12.0110 0 + 944 P1 59 ASN HB1 HA 0.090000 1.0080 0 + 945 P1 59 ASN HB2 HA 0.090000 1.0080 0 + 946 P1 59 ASN CG CC 0.550000 12.0110 0 + 947 P1 59 ASN OD1 O -0.550000 15.9990 0 + 948 P1 59 ASN ND2 NH2 -0.620000 14.0070 0 + 949 P1 59 ASN HD21 H 0.320000 1.0080 0 + 950 P1 59 ASN HD22 H 0.300000 1.0080 0 + 951 P1 59 ASN C C 0.510000 12.0110 0 + 952 P1 59 ASN O O -0.510000 15.9990 0 + 953 P1 60 ILE N NH1 -0.470000 14.0070 0 + 954 P1 60 ILE HN H 0.310000 1.0080 0 + 955 P1 60 ILE CA CT1 0.070000 12.0110 0 + 956 P1 60 ILE HA HB 0.090000 1.0080 0 + 957 P1 60 ILE CB CT1 -0.090000 12.0110 0 + 958 P1 60 ILE HB HA 0.090000 1.0080 0 + 959 P1 60 ILE CG2 CT3 -0.270000 12.0110 0 + 960 P1 60 ILE HG21 HA 0.090000 1.0080 0 + 961 P1 60 ILE HG22 HA 0.090000 1.0080 0 + 962 P1 60 ILE HG23 HA 0.090000 1.0080 0 + 963 P1 60 ILE CG1 CT2 -0.180000 12.0110 0 + 964 P1 60 ILE HG11 HA 0.090000 1.0080 0 + 965 P1 60 ILE HG12 HA 0.090000 1.0080 0 + 966 P1 60 ILE CD CT3 -0.270000 12.0110 0 + 967 P1 60 ILE HD1 HA 0.090000 1.0080 0 + 968 P1 60 ILE HD2 HA 0.090000 1.0080 0 + 969 P1 60 ILE HD3 HA 0.090000 1.0080 0 + 970 P1 60 ILE C C 0.510000 12.0110 0 + 971 P1 60 ILE O O -0.510000 15.9990 0 + 972 P1 61 ILE N NH1 -0.470000 14.0070 0 + 973 P1 61 ILE HN H 0.310000 1.0080 0 + 974 P1 61 ILE CA CT1 0.070000 12.0110 0 + 975 P1 61 ILE HA HB 0.090000 1.0080 0 + 976 P1 61 ILE CB CT1 -0.090000 12.0110 0 + 977 P1 61 ILE HB HA 0.090000 1.0080 0 + 978 P1 61 ILE CG2 CT3 -0.270000 12.0110 0 + 979 P1 61 ILE HG21 HA 0.090000 1.0080 0 + 980 P1 61 ILE HG22 HA 0.090000 1.0080 0 + 981 P1 61 ILE HG23 HA 0.090000 1.0080 0 + 982 P1 61 ILE CG1 CT2 -0.180000 12.0110 0 + 983 P1 61 ILE HG11 HA 0.090000 1.0080 0 + 984 P1 61 ILE HG12 HA 0.090000 1.0080 0 + 985 P1 61 ILE CD CT3 -0.270000 12.0110 0 + 986 P1 61 ILE HD1 HA 0.090000 1.0080 0 + 987 P1 61 ILE HD2 HA 0.090000 1.0080 0 + 988 P1 61 ILE HD3 HA 0.090000 1.0080 0 + 989 P1 61 ILE C C 0.510000 12.0110 0 + 990 P1 61 ILE O O -0.510000 15.9990 0 + 991 P1 62 LEU N NH1 -0.470000 14.0070 0 + 992 P1 62 LEU HN H 0.310000 1.0080 0 + 993 P1 62 LEU CA CT1 0.070000 12.0110 0 + 994 P1 62 LEU HA HB 0.090000 1.0080 0 + 995 P1 62 LEU CB CT2 -0.180000 12.0110 0 + 996 P1 62 LEU HB1 HA 0.090000 1.0080 0 + 997 P1 62 LEU HB2 HA 0.090000 1.0080 0 + 998 P1 62 LEU CG CT1 -0.090000 12.0110 0 + 999 P1 62 LEU HG HA 0.090000 1.0080 0 + 1000 P1 62 LEU CD1 CT3 -0.270000 12.0110 0 + 1001 P1 62 LEU HD11 HA 0.090000 1.0080 0 + 1002 P1 62 LEU HD12 HA 0.090000 1.0080 0 + 1003 P1 62 LEU HD13 HA 0.090000 1.0080 0 + 1004 P1 62 LEU CD2 CT3 -0.270000 12.0110 0 + 1005 P1 62 LEU HD21 HA 0.090000 1.0080 0 + 1006 P1 62 LEU HD22 HA 0.090000 1.0080 0 + 1007 P1 62 LEU HD23 HA 0.090000 1.0080 0 + 1008 P1 62 LEU C C 0.510000 12.0110 0 + 1009 P1 62 LEU O O -0.510000 15.9990 0 + 1010 P1 63 SER N NH1 -0.470000 14.0070 0 + 1011 P1 63 SER HN H 0.310000 1.0080 0 + 1012 P1 63 SER CA CT1 0.070000 12.0110 0 + 1013 P1 63 SER HA HB 0.090000 1.0080 0 + 1014 P1 63 SER CB CT2 0.050000 12.0110 0 + 1015 P1 63 SER HB1 HA 0.090000 1.0080 0 + 1016 P1 63 SER HB2 HA 0.090000 1.0080 0 + 1017 P1 63 SER OG OH1 -0.660000 15.9990 0 + 1018 P1 63 SER HG1 H 0.430000 1.0080 0 + 1019 P1 63 SER C C 0.510000 12.0110 0 + 1020 P1 63 SER O O -0.510000 15.9990 0 + 1021 P1 64 SER N NH1 -0.470000 14.0070 0 + 1022 P1 64 SER HN H 0.310000 1.0080 0 + 1023 P1 64 SER CA CT1 0.070000 12.0110 0 + 1024 P1 64 SER HA HB 0.090000 1.0080 0 + 1025 P1 64 SER CB CT2 0.050000 12.0110 0 + 1026 P1 64 SER HB1 HA 0.090000 1.0080 0 + 1027 P1 64 SER HB2 HA 0.090000 1.0080 0 + 1028 P1 64 SER OG OH1 -0.660000 15.9990 0 + 1029 P1 64 SER HG1 H 0.430000 1.0080 0 + 1030 P1 64 SER C C 0.510000 12.0110 0 + 1031 P1 64 SER O O -0.510000 15.9990 0 + 1032 P1 65 GLN N NH1 -0.470000 14.0070 0 + 1033 P1 65 GLN HN H 0.310000 1.0080 0 + 1034 P1 65 GLN CA CT1 0.070000 12.0110 0 + 1035 P1 65 GLN HA HB 0.090000 1.0080 0 + 1036 P1 65 GLN CB CT2 -0.180000 12.0110 0 + 1037 P1 65 GLN HB1 HA 0.090000 1.0080 0 + 1038 P1 65 GLN HB2 HA 0.090000 1.0080 0 + 1039 P1 65 GLN CG CT2 -0.180000 12.0110 0 + 1040 P1 65 GLN HG1 HA 0.090000 1.0080 0 + 1041 P1 65 GLN HG2 HA 0.090000 1.0080 0 + 1042 P1 65 GLN CD CC 0.550000 12.0110 0 + 1043 P1 65 GLN OE1 O -0.550000 15.9990 0 + 1044 P1 65 GLN NE2 NH2 -0.620000 14.0070 0 + 1045 P1 65 GLN HE21 H 0.320000 1.0080 0 + 1046 P1 65 GLN HE22 H 0.300000 1.0080 0 + 1047 P1 65 GLN C C 0.510000 12.0110 0 + 1048 P1 65 GLN O O -0.510000 15.9990 0 + 1049 P1 66 PRO N N -0.290000 14.0070 0 + 1050 P1 66 PRO CD CP3 0.000000 12.0110 0 + 1051 P1 66 PRO HD1 HA 0.090000 1.0080 0 + 1052 P1 66 PRO HD2 HA 0.090000 1.0080 0 + 1053 P1 66 PRO CA CP1 0.020000 12.0110 0 + 1054 P1 66 PRO HA HB 0.090000 1.0080 0 + 1055 P1 66 PRO CB CP2 -0.180000 12.0110 0 + 1056 P1 66 PRO HB1 HA 0.090000 1.0080 0 + 1057 P1 66 PRO HB2 HA 0.090000 1.0080 0 + 1058 P1 66 PRO CG CP2 -0.180000 12.0110 0 + 1059 P1 66 PRO HG1 HA 0.090000 1.0080 0 + 1060 P1 66 PRO HG2 HA 0.090000 1.0080 0 + 1061 P1 66 PRO C C 0.510000 12.0110 0 + 1062 P1 66 PRO O O -0.510000 15.9990 0 + 1063 P1 67 GLY N NH1 -0.470000 14.0070 0 + 1064 P1 67 GLY HN H 0.310000 1.0080 0 + 1065 P1 67 GLY CA CT2 -0.020000 12.0110 0 + 1066 P1 67 GLY HA1 HB 0.090000 1.0080 0 + 1067 P1 67 GLY HA2 HB 0.090000 1.0080 0 + 1068 P1 67 GLY C C 0.510000 12.0110 0 + 1069 P1 67 GLY O O -0.510000 15.9990 0 + 1070 P1 68 THR N NH1 -0.470000 14.0070 0 + 1071 P1 68 THR HN H 0.310000 1.0080 0 + 1072 P1 68 THR CA CT1 0.070000 12.0110 0 + 1073 P1 68 THR HA HB 0.090000 1.0080 0 + 1074 P1 68 THR CB CT1 0.140000 12.0110 0 + 1075 P1 68 THR HB HA 0.090000 1.0080 0 + 1076 P1 68 THR OG1 OH1 -0.660000 15.9990 0 + 1077 P1 68 THR HG1 H 0.430000 1.0080 0 + 1078 P1 68 THR CG2 CT3 -0.270000 12.0110 0 + 1079 P1 68 THR HG21 HA 0.090000 1.0080 0 + 1080 P1 68 THR HG22 HA 0.090000 1.0080 0 + 1081 P1 68 THR HG23 HA 0.090000 1.0080 0 + 1082 P1 68 THR C C 0.510000 12.0110 0 + 1083 P1 68 THR O O -0.510000 15.9990 0 + 1084 P1 69 ASP N NH1 -0.470000 14.0070 0 + 1085 P1 69 ASP HN H 0.310000 1.0080 0 + 1086 P1 69 ASP CA CT1 0.070000 12.0110 0 + 1087 P1 69 ASP HA HB 0.090000 1.0080 0 + 1088 P1 69 ASP CB CT2 -0.280000 12.0110 0 + 1089 P1 69 ASP HB1 HA 0.090000 1.0080 0 + 1090 P1 69 ASP HB2 HA 0.090000 1.0080 0 + 1091 P1 69 ASP CG CC 0.620000 12.0110 0 + 1092 P1 69 ASP OD1 OC -0.760000 15.9990 0 + 1093 P1 69 ASP OD2 OC -0.760000 15.9990 0 + 1094 P1 69 ASP C C 0.510000 12.0110 0 + 1095 P1 69 ASP O O -0.510000 15.9990 0 + 1096 P1 70 ASP N NH1 -0.470000 14.0070 0 + 1097 P1 70 ASP HN H 0.310000 1.0080 0 + 1098 P1 70 ASP CA CT1 0.070000 12.0110 0 + 1099 P1 70 ASP HA HB 0.090000 1.0080 0 + 1100 P1 70 ASP CB CT2 -0.280000 12.0110 0 + 1101 P1 70 ASP HB1 HA 0.090000 1.0080 0 + 1102 P1 70 ASP HB2 HA 0.090000 1.0080 0 + 1103 P1 70 ASP CG CC 0.620000 12.0110 0 + 1104 P1 70 ASP OD1 OC -0.760000 15.9990 0 + 1105 P1 70 ASP OD2 OC -0.760000 15.9990 0 + 1106 P1 70 ASP C C 0.510000 12.0110 0 + 1107 P1 70 ASP O O -0.510000 15.9990 0 + 1108 P1 71 ARG N NH1 -0.470000 14.0070 0 + 1109 P1 71 ARG HN H 0.310000 1.0080 0 + 1110 P1 71 ARG CA CT1 0.070000 12.0110 0 + 1111 P1 71 ARG HA HB 0.090000 1.0080 0 + 1112 P1 71 ARG CB CT2 -0.180000 12.0110 0 + 1113 P1 71 ARG HB1 HA 0.090000 1.0080 0 + 1114 P1 71 ARG HB2 HA 0.090000 1.0080 0 + 1115 P1 71 ARG CG CT2 -0.180000 12.0110 0 + 1116 P1 71 ARG HG1 HA 0.090000 1.0080 0 + 1117 P1 71 ARG HG2 HA 0.090000 1.0080 0 + 1118 P1 71 ARG CD CT2 0.200000 12.0110 0 + 1119 P1 71 ARG HD1 HA 0.090000 1.0080 0 + 1120 P1 71 ARG HD2 HA 0.090000 1.0080 0 + 1121 P1 71 ARG NE NC2 -0.700000 14.0070 0 + 1122 P1 71 ARG HE HC 0.440000 1.0080 0 + 1123 P1 71 ARG CZ C 0.640000 12.0110 0 + 1124 P1 71 ARG NH1 NC2 -0.800000 14.0070 0 + 1125 P1 71 ARG HH11 HC 0.460000 1.0080 0 + 1126 P1 71 ARG HH12 HC 0.460000 1.0080 0 + 1127 P1 71 ARG NH2 NC2 -0.800000 14.0070 0 + 1128 P1 71 ARG HH21 HC 0.460000 1.0080 0 + 1129 P1 71 ARG HH22 HC 0.460000 1.0080 0 + 1130 P1 71 ARG C C 0.510000 12.0110 0 + 1131 P1 71 ARG O O -0.510000 15.9990 0 + 1132 P1 72 VAL N NH1 -0.470000 14.0070 0 + 1133 P1 72 VAL HN H 0.310000 1.0080 0 + 1134 P1 72 VAL CA CT1 0.070000 12.0110 0 + 1135 P1 72 VAL HA HB 0.090000 1.0080 0 + 1136 P1 72 VAL CB CT1 -0.090000 12.0110 0 + 1137 P1 72 VAL HB HA 0.090000 1.0080 0 + 1138 P1 72 VAL CG1 CT3 -0.270000 12.0110 0 + 1139 P1 72 VAL HG11 HA 0.090000 1.0080 0 + 1140 P1 72 VAL HG12 HA 0.090000 1.0080 0 + 1141 P1 72 VAL HG13 HA 0.090000 1.0080 0 + 1142 P1 72 VAL CG2 CT3 -0.270000 12.0110 0 + 1143 P1 72 VAL HG21 HA 0.090000 1.0080 0 + 1144 P1 72 VAL HG22 HA 0.090000 1.0080 0 + 1145 P1 72 VAL HG23 HA 0.090000 1.0080 0 + 1146 P1 72 VAL C C 0.510000 12.0110 0 + 1147 P1 72 VAL O O -0.510000 15.9990 0 + 1148 P1 73 THR N NH1 -0.470000 14.0070 0 + 1149 P1 73 THR HN H 0.310000 1.0080 0 + 1150 P1 73 THR CA CT1 0.070000 12.0110 0 + 1151 P1 73 THR HA HB 0.090000 1.0080 0 + 1152 P1 73 THR CB CT1 0.140000 12.0110 0 + 1153 P1 73 THR HB HA 0.090000 1.0080 0 + 1154 P1 73 THR OG1 OH1 -0.660000 15.9990 0 + 1155 P1 73 THR HG1 H 0.430000 1.0080 0 + 1156 P1 73 THR CG2 CT3 -0.270000 12.0110 0 + 1157 P1 73 THR HG21 HA 0.090000 1.0080 0 + 1158 P1 73 THR HG22 HA 0.090000 1.0080 0 + 1159 P1 73 THR HG23 HA 0.090000 1.0080 0 + 1160 P1 73 THR C C 0.510000 12.0110 0 + 1161 P1 73 THR O O -0.510000 15.9990 0 + 1162 P1 74 TRP N NH1 -0.470000 14.0070 0 + 1163 P1 74 TRP HN H 0.310000 1.0080 0 + 1164 P1 74 TRP CA CT1 0.070000 12.0110 0 + 1165 P1 74 TRP HA HB 0.090000 1.0080 0 + 1166 P1 74 TRP CB CT2 -0.180000 12.0110 0 + 1167 P1 74 TRP HB1 HA 0.090000 1.0080 0 + 1168 P1 74 TRP HB2 HA 0.090000 1.0080 0 + 1169 P1 74 TRP CG CY -0.030000 12.0110 0 + 1170 P1 74 TRP CD1 CA 0.035000 12.0110 0 + 1171 P1 74 TRP HD1 HP 0.115000 1.0080 0 + 1172 P1 74 TRP NE1 NY -0.610000 14.0070 0 + 1173 P1 74 TRP HE1 H 0.380000 1.0080 0 + 1174 P1 74 TRP CE2 CPT 0.130000 12.0110 0 + 1175 P1 74 TRP CD2 CPT -0.020000 12.0110 0 + 1176 P1 74 TRP CE3 CA -0.115000 12.0110 0 + 1177 P1 74 TRP HE3 HP 0.115000 1.0080 0 + 1178 P1 74 TRP CZ3 CA -0.115000 12.0110 0 + 1179 P1 74 TRP HZ3 HP 0.115000 1.0080 0 + 1180 P1 74 TRP CZ2 CA -0.115000 12.0110 0 + 1181 P1 74 TRP HZ2 HP 0.115000 1.0080 0 + 1182 P1 74 TRP CH2 CA -0.115000 12.0110 0 + 1183 P1 74 TRP HH2 HP 0.115000 1.0080 0 + 1184 P1 74 TRP C C 0.510000 12.0110 0 + 1185 P1 74 TRP O O -0.510000 15.9990 0 + 1186 P1 75 VAL N NH1 -0.470000 14.0070 0 + 1187 P1 75 VAL HN H 0.310000 1.0080 0 + 1188 P1 75 VAL CA CT1 0.070000 12.0110 0 + 1189 P1 75 VAL HA HB 0.090000 1.0080 0 + 1190 P1 75 VAL CB CT1 -0.090000 12.0110 0 + 1191 P1 75 VAL HB HA 0.090000 1.0080 0 + 1192 P1 75 VAL CG1 CT3 -0.270000 12.0110 0 + 1193 P1 75 VAL HG11 HA 0.090000 1.0080 0 + 1194 P1 75 VAL HG12 HA 0.090000 1.0080 0 + 1195 P1 75 VAL HG13 HA 0.090000 1.0080 0 + 1196 P1 75 VAL CG2 CT3 -0.270000 12.0110 0 + 1197 P1 75 VAL HG21 HA 0.090000 1.0080 0 + 1198 P1 75 VAL HG22 HA 0.090000 1.0080 0 + 1199 P1 75 VAL HG23 HA 0.090000 1.0080 0 + 1200 P1 75 VAL C C 0.510000 12.0110 0 + 1201 P1 75 VAL O O -0.510000 15.9990 0 + 1202 P1 76 LYS N NH1 -0.470000 14.0070 0 + 1203 P1 76 LYS HN H 0.310000 1.0080 0 + 1204 P1 76 LYS CA CT1 0.070000 12.0110 0 + 1205 P1 76 LYS HA HB 0.090000 1.0080 0 + 1206 P1 76 LYS CB CT2 -0.180000 12.0110 0 + 1207 P1 76 LYS HB1 HA 0.090000 1.0080 0 + 1208 P1 76 LYS HB2 HA 0.090000 1.0080 0 + 1209 P1 76 LYS CG CT2 -0.180000 12.0110 0 + 1210 P1 76 LYS HG1 HA 0.090000 1.0080 0 + 1211 P1 76 LYS HG2 HA 0.090000 1.0080 0 + 1212 P1 76 LYS CD CT2 -0.180000 12.0110 0 + 1213 P1 76 LYS HD1 HA 0.090000 1.0080 0 + 1214 P1 76 LYS HD2 HA 0.090000 1.0080 0 + 1215 P1 76 LYS CE CT2 0.210000 12.0110 0 + 1216 P1 76 LYS HE1 HA 0.050000 1.0080 0 + 1217 P1 76 LYS HE2 HA 0.050000 1.0080 0 + 1218 P1 76 LYS NZ NH3 -0.300000 14.0070 0 + 1219 P1 76 LYS HZ1 HC 0.330000 1.0080 0 + 1220 P1 76 LYS HZ2 HC 0.330000 1.0080 0 + 1221 P1 76 LYS HZ3 HC 0.330000 1.0080 0 + 1222 P1 76 LYS C C 0.510000 12.0110 0 + 1223 P1 76 LYS O O -0.510000 15.9990 0 + 1224 P1 77 SER N NH1 -0.470000 14.0070 0 + 1225 P1 77 SER HN H 0.310000 1.0080 0 + 1226 P1 77 SER CA CT1 0.070000 12.0110 0 + 1227 P1 77 SER HA HB 0.090000 1.0080 0 + 1228 P1 77 SER CB CT2 0.050000 12.0110 0 + 1229 P1 77 SER HB1 HA 0.090000 1.0080 0 + 1230 P1 77 SER HB2 HA 0.090000 1.0080 0 + 1231 P1 77 SER OG OH1 -0.660000 15.9990 0 + 1232 P1 77 SER HG1 H 0.430000 1.0080 0 + 1233 P1 77 SER C C 0.510000 12.0110 0 + 1234 P1 77 SER O O -0.510000 15.9990 0 + 1235 P1 78 VAL N NH1 -0.470000 14.0070 0 + 1236 P1 78 VAL HN H 0.310000 1.0080 0 + 1237 P1 78 VAL CA CT1 0.070000 12.0110 0 + 1238 P1 78 VAL HA HB 0.090000 1.0080 0 + 1239 P1 78 VAL CB CT1 -0.090000 12.0110 0 + 1240 P1 78 VAL HB HA 0.090000 1.0080 0 + 1241 P1 78 VAL CG1 CT3 -0.270000 12.0110 0 + 1242 P1 78 VAL HG11 HA 0.090000 1.0080 0 + 1243 P1 78 VAL HG12 HA 0.090000 1.0080 0 + 1244 P1 78 VAL HG13 HA 0.090000 1.0080 0 + 1245 P1 78 VAL CG2 CT3 -0.270000 12.0110 0 + 1246 P1 78 VAL HG21 HA 0.090000 1.0080 0 + 1247 P1 78 VAL HG22 HA 0.090000 1.0080 0 + 1248 P1 78 VAL HG23 HA 0.090000 1.0080 0 + 1249 P1 78 VAL C C 0.510000 12.0110 0 + 1250 P1 78 VAL O O -0.510000 15.9990 0 + 1251 P1 79 ASP N NH1 -0.470000 14.0070 0 + 1252 P1 79 ASP HN H 0.310000 1.0080 0 + 1253 P1 79 ASP CA CT1 0.070000 12.0110 0 + 1254 P1 79 ASP HA HB 0.090000 1.0080 0 + 1255 P1 79 ASP CB CT2 -0.280000 12.0110 0 + 1256 P1 79 ASP HB1 HA 0.090000 1.0080 0 + 1257 P1 79 ASP HB2 HA 0.090000 1.0080 0 + 1258 P1 79 ASP CG CC 0.620000 12.0110 0 + 1259 P1 79 ASP OD1 OC -0.760000 15.9990 0 + 1260 P1 79 ASP OD2 OC -0.760000 15.9990 0 + 1261 P1 79 ASP C C 0.510000 12.0110 0 + 1262 P1 79 ASP O O -0.510000 15.9990 0 + 1263 P1 80 GLU N NH1 -0.470000 14.0070 0 + 1264 P1 80 GLU HN H 0.310000 1.0080 0 + 1265 P1 80 GLU CA CT1 0.070000 12.0110 0 + 1266 P1 80 GLU HA HB 0.090000 1.0080 0 + 1267 P1 80 GLU CB CT2 -0.180000 12.0110 0 + 1268 P1 80 GLU HB1 HA 0.090000 1.0080 0 + 1269 P1 80 GLU HB2 HA 0.090000 1.0080 0 + 1270 P1 80 GLU CG CT2 -0.280000 12.0110 0 + 1271 P1 80 GLU HG1 HA 0.090000 1.0080 0 + 1272 P1 80 GLU HG2 HA 0.090000 1.0080 0 + 1273 P1 80 GLU CD CC 0.620000 12.0110 0 + 1274 P1 80 GLU OE1 OC -0.760000 15.9990 0 + 1275 P1 80 GLU OE2 OC -0.760000 15.9990 0 + 1276 P1 80 GLU C C 0.510000 12.0110 0 + 1277 P1 80 GLU O O -0.510000 15.9990 0 + 1278 P1 81 ALA N NH1 -0.470000 14.0070 0 + 1279 P1 81 ALA HN H 0.310000 1.0080 0 + 1280 P1 81 ALA CA CT1 0.070000 12.0110 0 + 1281 P1 81 ALA HA HB 0.090000 1.0080 0 + 1282 P1 81 ALA CB CT3 -0.270000 12.0110 0 + 1283 P1 81 ALA HB1 HA 0.090000 1.0080 0 + 1284 P1 81 ALA HB2 HA 0.090000 1.0080 0 + 1285 P1 81 ALA HB3 HA 0.090000 1.0080 0 + 1286 P1 81 ALA C C 0.510000 12.0110 0 + 1287 P1 81 ALA O O -0.510000 15.9990 0 + 1288 P1 82 ILE N NH1 -0.470000 14.0070 0 + 1289 P1 82 ILE HN H 0.310000 1.0080 0 + 1290 P1 82 ILE CA CT1 0.070000 12.0110 0 + 1291 P1 82 ILE HA HB 0.090000 1.0080 0 + 1292 P1 82 ILE CB CT1 -0.090000 12.0110 0 + 1293 P1 82 ILE HB HA 0.090000 1.0080 0 + 1294 P1 82 ILE CG2 CT3 -0.270000 12.0110 0 + 1295 P1 82 ILE HG21 HA 0.090000 1.0080 0 + 1296 P1 82 ILE HG22 HA 0.090000 1.0080 0 + 1297 P1 82 ILE HG23 HA 0.090000 1.0080 0 + 1298 P1 82 ILE CG1 CT2 -0.180000 12.0110 0 + 1299 P1 82 ILE HG11 HA 0.090000 1.0080 0 + 1300 P1 82 ILE HG12 HA 0.090000 1.0080 0 + 1301 P1 82 ILE CD CT3 -0.270000 12.0110 0 + 1302 P1 82 ILE HD1 HA 0.090000 1.0080 0 + 1303 P1 82 ILE HD2 HA 0.090000 1.0080 0 + 1304 P1 82 ILE HD3 HA 0.090000 1.0080 0 + 1305 P1 82 ILE C C 0.510000 12.0110 0 + 1306 P1 82 ILE O O -0.510000 15.9990 0 + 1307 P1 83 ALA N NH1 -0.470000 14.0070 0 + 1308 P1 83 ALA HN H 0.310000 1.0080 0 + 1309 P1 83 ALA CA CT1 0.070000 12.0110 0 + 1310 P1 83 ALA HA HB 0.090000 1.0080 0 + 1311 P1 83 ALA CB CT3 -0.270000 12.0110 0 + 1312 P1 83 ALA HB1 HA 0.090000 1.0080 0 + 1313 P1 83 ALA HB2 HA 0.090000 1.0080 0 + 1314 P1 83 ALA HB3 HA 0.090000 1.0080 0 + 1315 P1 83 ALA C C 0.510000 12.0110 0 + 1316 P1 83 ALA O O -0.510000 15.9990 0 + 1317 P1 84 ALA N NH1 -0.470000 14.0070 0 + 1318 P1 84 ALA HN H 0.310000 1.0080 0 + 1319 P1 84 ALA CA CT1 0.070000 12.0110 0 + 1320 P1 84 ALA HA HB 0.090000 1.0080 0 + 1321 P1 84 ALA CB CT3 -0.270000 12.0110 0 + 1322 P1 84 ALA HB1 HA 0.090000 1.0080 0 + 1323 P1 84 ALA HB2 HA 0.090000 1.0080 0 + 1324 P1 84 ALA HB3 HA 0.090000 1.0080 0 + 1325 P1 84 ALA C C 0.510000 12.0110 0 + 1326 P1 84 ALA O O -0.510000 15.9990 0 + 1327 P1 85 CYS N NH1 -0.470000 14.0070 0 + 1328 P1 85 CYS HN H 0.310000 1.0080 0 + 1329 P1 85 CYS CA CT1 0.070000 12.0110 0 + 1330 P1 85 CYS HA HB 0.090000 1.0080 0 + 1331 P1 85 CYS CB CT2 -0.110000 12.0110 0 + 1332 P1 85 CYS HB1 HA 0.090000 1.0080 0 + 1333 P1 85 CYS HB2 HA 0.090000 1.0080 0 + 1334 P1 85 CYS SG S -0.230000 32.0600 0 + 1335 P1 85 CYS HG1 HS 0.160000 1.0080 0 + 1336 P1 85 CYS C C 0.510000 12.0110 0 + 1337 P1 85 CYS O O -0.510000 15.9990 0 + 1338 P1 86 GLY N NH1 -0.470000 14.0070 0 + 1339 P1 86 GLY HN H 0.310000 1.0080 0 + 1340 P1 86 GLY CA CT2 -0.020000 12.0110 0 + 1341 P1 86 GLY HA1 HB 0.090000 1.0080 0 + 1342 P1 86 GLY HA2 HB 0.090000 1.0080 0 + 1343 P1 86 GLY C C 0.510000 12.0110 0 + 1344 P1 86 GLY O O -0.510000 15.9990 0 + 1345 P1 87 ASP N NH1 -0.470000 14.0070 0 + 1346 P1 87 ASP HN H 0.310000 1.0080 0 + 1347 P1 87 ASP CA CT1 0.070000 12.0110 0 + 1348 P1 87 ASP HA HB 0.090000 1.0080 0 + 1349 P1 87 ASP CB CT2 -0.280000 12.0110 0 + 1350 P1 87 ASP HB1 HA 0.090000 1.0080 0 + 1351 P1 87 ASP HB2 HA 0.090000 1.0080 0 + 1352 P1 87 ASP CG CC 0.620000 12.0110 0 + 1353 P1 87 ASP OD1 OC -0.760000 15.9990 0 + 1354 P1 87 ASP OD2 OC -0.760000 15.9990 0 + 1355 P1 87 ASP C C 0.510000 12.0110 0 + 1356 P1 87 ASP O O -0.510000 15.9990 0 + 1357 P1 88 VAL N NH1 -0.470000 14.0070 0 + 1358 P1 88 VAL HN H 0.310000 1.0080 0 + 1359 P1 88 VAL CA CT1 0.070000 12.0110 0 + 1360 P1 88 VAL HA HB 0.090000 1.0080 0 + 1361 P1 88 VAL CB CT1 -0.090000 12.0110 0 + 1362 P1 88 VAL HB HA 0.090000 1.0080 0 + 1363 P1 88 VAL CG1 CT3 -0.270000 12.0110 0 + 1364 P1 88 VAL HG11 HA 0.090000 1.0080 0 + 1365 P1 88 VAL HG12 HA 0.090000 1.0080 0 + 1366 P1 88 VAL HG13 HA 0.090000 1.0080 0 + 1367 P1 88 VAL CG2 CT3 -0.270000 12.0110 0 + 1368 P1 88 VAL HG21 HA 0.090000 1.0080 0 + 1369 P1 88 VAL HG22 HA 0.090000 1.0080 0 + 1370 P1 88 VAL HG23 HA 0.090000 1.0080 0 + 1371 P1 88 VAL C C 0.510000 12.0110 0 + 1372 P1 88 VAL O O -0.510000 15.9990 0 + 1373 P1 89 PRO N N -0.290000 14.0070 0 + 1374 P1 89 PRO CD CP3 0.000000 12.0110 0 + 1375 P1 89 PRO HD1 HA 0.090000 1.0080 0 + 1376 P1 89 PRO HD2 HA 0.090000 1.0080 0 + 1377 P1 89 PRO CA CP1 0.020000 12.0110 0 + 1378 P1 89 PRO HA HB 0.090000 1.0080 0 + 1379 P1 89 PRO CB CP2 -0.180000 12.0110 0 + 1380 P1 89 PRO HB1 HA 0.090000 1.0080 0 + 1381 P1 89 PRO HB2 HA 0.090000 1.0080 0 + 1382 P1 89 PRO CG CP2 -0.180000 12.0110 0 + 1383 P1 89 PRO HG1 HA 0.090000 1.0080 0 + 1384 P1 89 PRO HG2 HA 0.090000 1.0080 0 + 1385 P1 89 PRO C C 0.510000 12.0110 0 + 1386 P1 89 PRO O O -0.510000 15.9990 0 + 1387 P1 90 GLU N NH1 -0.470000 14.0070 0 + 1388 P1 90 GLU HN H 0.310000 1.0080 0 + 1389 P1 90 GLU CA CT1 0.070000 12.0110 0 + 1390 P1 90 GLU HA HB 0.090000 1.0080 0 + 1391 P1 90 GLU CB CT2 -0.180000 12.0110 0 + 1392 P1 90 GLU HB1 HA 0.090000 1.0080 0 + 1393 P1 90 GLU HB2 HA 0.090000 1.0080 0 + 1394 P1 90 GLU CG CT2 -0.280000 12.0110 0 + 1395 P1 90 GLU HG1 HA 0.090000 1.0080 0 + 1396 P1 90 GLU HG2 HA 0.090000 1.0080 0 + 1397 P1 90 GLU CD CC 0.620000 12.0110 0 + 1398 P1 90 GLU OE1 OC -0.760000 15.9990 0 + 1399 P1 90 GLU OE2 OC -0.760000 15.9990 0 + 1400 P1 90 GLU C C 0.510000 12.0110 0 + 1401 P1 90 GLU O O -0.510000 15.9990 0 + 1402 P1 91 ILE N NH1 -0.470000 14.0070 0 + 1403 P1 91 ILE HN H 0.310000 1.0080 0 + 1404 P1 91 ILE CA CT1 0.070000 12.0110 0 + 1405 P1 91 ILE HA HB 0.090000 1.0080 0 + 1406 P1 91 ILE CB CT1 -0.090000 12.0110 0 + 1407 P1 91 ILE HB HA 0.090000 1.0080 0 + 1408 P1 91 ILE CG2 CT3 -0.270000 12.0110 0 + 1409 P1 91 ILE HG21 HA 0.090000 1.0080 0 + 1410 P1 91 ILE HG22 HA 0.090000 1.0080 0 + 1411 P1 91 ILE HG23 HA 0.090000 1.0080 0 + 1412 P1 91 ILE CG1 CT2 -0.180000 12.0110 0 + 1413 P1 91 ILE HG11 HA 0.090000 1.0080 0 + 1414 P1 91 ILE HG12 HA 0.090000 1.0080 0 + 1415 P1 91 ILE CD CT3 -0.270000 12.0110 0 + 1416 P1 91 ILE HD1 HA 0.090000 1.0080 0 + 1417 P1 91 ILE HD2 HA 0.090000 1.0080 0 + 1418 P1 91 ILE HD3 HA 0.090000 1.0080 0 + 1419 P1 91 ILE C C 0.510000 12.0110 0 + 1420 P1 91 ILE O O -0.510000 15.9990 0 + 1421 P1 92 MET N NH1 -0.470000 14.0070 0 + 1422 P1 92 MET HN H 0.310000 1.0080 0 + 1423 P1 92 MET CA CT1 0.070000 12.0110 0 + 1424 P1 92 MET HA HB 0.090000 1.0080 0 + 1425 P1 92 MET CB CT2 -0.180000 12.0110 0 + 1426 P1 92 MET HB1 HA 0.090000 1.0080 0 + 1427 P1 92 MET HB2 HA 0.090000 1.0080 0 + 1428 P1 92 MET CG CT2 -0.140000 12.0110 0 + 1429 P1 92 MET HG1 HA 0.090000 1.0080 0 + 1430 P1 92 MET HG2 HA 0.090000 1.0080 0 + 1431 P1 92 MET SD S -0.090000 32.0600 0 + 1432 P1 92 MET CE CT3 -0.220000 12.0110 0 + 1433 P1 92 MET HE1 HA 0.090000 1.0080 0 + 1434 P1 92 MET HE2 HA 0.090000 1.0080 0 + 1435 P1 92 MET HE3 HA 0.090000 1.0080 0 + 1436 P1 92 MET C C 0.510000 12.0110 0 + 1437 P1 92 MET O O -0.510000 15.9990 0 + 1438 P1 93 VAL N NH1 -0.470000 14.0070 0 + 1439 P1 93 VAL HN H 0.310000 1.0080 0 + 1440 P1 93 VAL CA CT1 0.070000 12.0110 0 + 1441 P1 93 VAL HA HB 0.090000 1.0080 0 + 1442 P1 93 VAL CB CT1 -0.090000 12.0110 0 + 1443 P1 93 VAL HB HA 0.090000 1.0080 0 + 1444 P1 93 VAL CG1 CT3 -0.270000 12.0110 0 + 1445 P1 93 VAL HG11 HA 0.090000 1.0080 0 + 1446 P1 93 VAL HG12 HA 0.090000 1.0080 0 + 1447 P1 93 VAL HG13 HA 0.090000 1.0080 0 + 1448 P1 93 VAL CG2 CT3 -0.270000 12.0110 0 + 1449 P1 93 VAL HG21 HA 0.090000 1.0080 0 + 1450 P1 93 VAL HG22 HA 0.090000 1.0080 0 + 1451 P1 93 VAL HG23 HA 0.090000 1.0080 0 + 1452 P1 93 VAL C C 0.510000 12.0110 0 + 1453 P1 93 VAL O O -0.510000 15.9990 0 + 1454 P1 94 ILE N NH1 -0.470000 14.0070 0 + 1455 P1 94 ILE HN H 0.310000 1.0080 0 + 1456 P1 94 ILE CA CT1 0.070000 12.0110 0 + 1457 P1 94 ILE HA HB 0.090000 1.0080 0 + 1458 P1 94 ILE CB CT1 -0.090000 12.0110 0 + 1459 P1 94 ILE HB HA 0.090000 1.0080 0 + 1460 P1 94 ILE CG2 CT3 -0.270000 12.0110 0 + 1461 P1 94 ILE HG21 HA 0.090000 1.0080 0 + 1462 P1 94 ILE HG22 HA 0.090000 1.0080 0 + 1463 P1 94 ILE HG23 HA 0.090000 1.0080 0 + 1464 P1 94 ILE CG1 CT2 -0.180000 12.0110 0 + 1465 P1 94 ILE HG11 HA 0.090000 1.0080 0 + 1466 P1 94 ILE HG12 HA 0.090000 1.0080 0 + 1467 P1 94 ILE CD CT3 -0.270000 12.0110 0 + 1468 P1 94 ILE HD1 HA 0.090000 1.0080 0 + 1469 P1 94 ILE HD2 HA 0.090000 1.0080 0 + 1470 P1 94 ILE HD3 HA 0.090000 1.0080 0 + 1471 P1 94 ILE C C 0.510000 12.0110 0 + 1472 P1 94 ILE O O -0.510000 15.9990 0 + 1473 P1 95 GLY N NH1 -0.470000 14.0070 0 + 1474 P1 95 GLY HN H 0.310000 1.0080 0 + 1475 P1 95 GLY CA CT2 -0.020000 12.0110 0 + 1476 P1 95 GLY HA1 HB 0.090000 1.0080 0 + 1477 P1 95 GLY HA2 HB 0.090000 1.0080 0 + 1478 P1 95 GLY C C 0.510000 12.0110 0 + 1479 P1 95 GLY O O -0.510000 15.9990 0 + 1480 P1 96 GLY N NH1 -0.470000 14.0070 0 + 1481 P1 96 GLY HN H 0.310000 1.0080 0 + 1482 P1 96 GLY CA CT2 -0.020000 12.0110 0 + 1483 P1 96 GLY HA1 HB 0.090000 1.0080 0 + 1484 P1 96 GLY HA2 HB 0.090000 1.0080 0 + 1485 P1 96 GLY C C 0.510000 12.0110 0 + 1486 P1 96 GLY O O -0.510000 15.9990 0 + 1487 P1 97 GLY N NH1 -0.470000 14.0070 0 + 1488 P1 97 GLY HN H 0.310000 1.0080 0 + 1489 P1 97 GLY CA CT2 -0.020000 12.0110 0 + 1490 P1 97 GLY HA1 HB 0.090000 1.0080 0 + 1491 P1 97 GLY HA2 HB 0.090000 1.0080 0 + 1492 P1 97 GLY C C 0.510000 12.0110 0 + 1493 P1 97 GLY O O -0.510000 15.9990 0 + 1494 P1 98 ARG N NH1 -0.470000 14.0070 0 + 1495 P1 98 ARG HN H 0.310000 1.0080 0 + 1496 P1 98 ARG CA CT1 0.070000 12.0110 0 + 1497 P1 98 ARG HA HB 0.090000 1.0080 0 + 1498 P1 98 ARG CB CT2 -0.180000 12.0110 0 + 1499 P1 98 ARG HB1 HA 0.090000 1.0080 0 + 1500 P1 98 ARG HB2 HA 0.090000 1.0080 0 + 1501 P1 98 ARG CG CT2 -0.180000 12.0110 0 + 1502 P1 98 ARG HG1 HA 0.090000 1.0080 0 + 1503 P1 98 ARG HG2 HA 0.090000 1.0080 0 + 1504 P1 98 ARG CD CT2 0.200000 12.0110 0 + 1505 P1 98 ARG HD1 HA 0.090000 1.0080 0 + 1506 P1 98 ARG HD2 HA 0.090000 1.0080 0 + 1507 P1 98 ARG NE NC2 -0.700000 14.0070 0 + 1508 P1 98 ARG HE HC 0.440000 1.0080 0 + 1509 P1 98 ARG CZ C 0.640000 12.0110 0 + 1510 P1 98 ARG NH1 NC2 -0.800000 14.0070 0 + 1511 P1 98 ARG HH11 HC 0.460000 1.0080 0 + 1512 P1 98 ARG HH12 HC 0.460000 1.0080 0 + 1513 P1 98 ARG NH2 NC2 -0.800000 14.0070 0 + 1514 P1 98 ARG HH21 HC 0.460000 1.0080 0 + 1515 P1 98 ARG HH22 HC 0.460000 1.0080 0 + 1516 P1 98 ARG C C 0.510000 12.0110 0 + 1517 P1 98 ARG O O -0.510000 15.9990 0 + 1518 P1 99 VAL N NH1 -0.470000 14.0070 0 + 1519 P1 99 VAL HN H 0.310000 1.0080 0 + 1520 P1 99 VAL CA CT1 0.070000 12.0110 0 + 1521 P1 99 VAL HA HB 0.090000 1.0080 0 + 1522 P1 99 VAL CB CT1 -0.090000 12.0110 0 + 1523 P1 99 VAL HB HA 0.090000 1.0080 0 + 1524 P1 99 VAL CG1 CT3 -0.270000 12.0110 0 + 1525 P1 99 VAL HG11 HA 0.090000 1.0080 0 + 1526 P1 99 VAL HG12 HA 0.090000 1.0080 0 + 1527 P1 99 VAL HG13 HA 0.090000 1.0080 0 + 1528 P1 99 VAL CG2 CT3 -0.270000 12.0110 0 + 1529 P1 99 VAL HG21 HA 0.090000 1.0080 0 + 1530 P1 99 VAL HG22 HA 0.090000 1.0080 0 + 1531 P1 99 VAL HG23 HA 0.090000 1.0080 0 + 1532 P1 99 VAL C C 0.510000 12.0110 0 + 1533 P1 99 VAL O O -0.510000 15.9990 0 + 1534 P1 100 TYR N NH1 -0.470000 14.0070 0 + 1535 P1 100 TYR HN H 0.310000 1.0080 0 + 1536 P1 100 TYR CA CT1 0.070000 12.0110 0 + 1537 P1 100 TYR HA HB 0.090000 1.0080 0 + 1538 P1 100 TYR CB CT2 -0.180000 12.0110 0 + 1539 P1 100 TYR HB1 HA 0.090000 1.0080 0 + 1540 P1 100 TYR HB2 HA 0.090000 1.0080 0 + 1541 P1 100 TYR CG CA 0.000000 12.0110 0 + 1542 P1 100 TYR CD1 CA -0.115000 12.0110 0 + 1543 P1 100 TYR HD1 HP 0.115000 1.0080 0 + 1544 P1 100 TYR CE1 CA -0.115000 12.0110 0 + 1545 P1 100 TYR HE1 HP 0.115000 1.0080 0 + 1546 P1 100 TYR CZ CA 0.110000 12.0110 0 + 1547 P1 100 TYR OH OH1 -0.540000 15.9990 0 + 1548 P1 100 TYR HH H 0.430000 1.0080 0 + 1549 P1 100 TYR CD2 CA -0.115000 12.0110 0 + 1550 P1 100 TYR HD2 HP 0.115000 1.0080 0 + 1551 P1 100 TYR CE2 CA -0.115000 12.0110 0 + 1552 P1 100 TYR HE2 HP 0.115000 1.0080 0 + 1553 P1 100 TYR C C 0.510000 12.0110 0 + 1554 P1 100 TYR O O -0.510000 15.9990 0 + 1555 P1 101 GLU N NH1 -0.470000 14.0070 0 + 1556 P1 101 GLU HN H 0.310000 1.0080 0 + 1557 P1 101 GLU CA CT1 0.070000 12.0110 0 + 1558 P1 101 GLU HA HB 0.090000 1.0080 0 + 1559 P1 101 GLU CB CT2 -0.180000 12.0110 0 + 1560 P1 101 GLU HB1 HA 0.090000 1.0080 0 + 1561 P1 101 GLU HB2 HA 0.090000 1.0080 0 + 1562 P1 101 GLU CG CT2 -0.280000 12.0110 0 + 1563 P1 101 GLU HG1 HA 0.090000 1.0080 0 + 1564 P1 101 GLU HG2 HA 0.090000 1.0080 0 + 1565 P1 101 GLU CD CC 0.620000 12.0110 0 + 1566 P1 101 GLU OE1 OC -0.760000 15.9990 0 + 1567 P1 101 GLU OE2 OC -0.760000 15.9990 0 + 1568 P1 101 GLU C C 0.510000 12.0110 0 + 1569 P1 101 GLU O O -0.510000 15.9990 0 + 1570 P1 102 GLN N NH1 -0.470000 14.0070 0 + 1571 P1 102 GLN HN H 0.310000 1.0080 0 + 1572 P1 102 GLN CA CT1 0.070000 12.0110 0 + 1573 P1 102 GLN HA HB 0.090000 1.0080 0 + 1574 P1 102 GLN CB CT2 -0.180000 12.0110 0 + 1575 P1 102 GLN HB1 HA 0.090000 1.0080 0 + 1576 P1 102 GLN HB2 HA 0.090000 1.0080 0 + 1577 P1 102 GLN CG CT2 -0.180000 12.0110 0 + 1578 P1 102 GLN HG1 HA 0.090000 1.0080 0 + 1579 P1 102 GLN HG2 HA 0.090000 1.0080 0 + 1580 P1 102 GLN CD CC 0.550000 12.0110 0 + 1581 P1 102 GLN OE1 O -0.550000 15.9990 0 + 1582 P1 102 GLN NE2 NH2 -0.620000 14.0070 0 + 1583 P1 102 GLN HE21 H 0.320000 1.0080 0 + 1584 P1 102 GLN HE22 H 0.300000 1.0080 0 + 1585 P1 102 GLN C C 0.510000 12.0110 0 + 1586 P1 102 GLN O O -0.510000 15.9990 0 + 1587 P1 103 PHE N NH1 -0.470000 14.0070 0 + 1588 P1 103 PHE HN H 0.310000 1.0080 0 + 1589 P1 103 PHE CA CT1 0.070000 12.0110 0 + 1590 P1 103 PHE HA HB 0.090000 1.0080 0 + 1591 P1 103 PHE CB CT2 -0.180000 12.0110 0 + 1592 P1 103 PHE HB1 HA 0.090000 1.0080 0 + 1593 P1 103 PHE HB2 HA 0.090000 1.0080 0 + 1594 P1 103 PHE CG CA 0.000000 12.0110 0 + 1595 P1 103 PHE CD1 CA -0.115000 12.0110 0 + 1596 P1 103 PHE HD1 HP 0.115000 1.0080 0 + 1597 P1 103 PHE CE1 CA -0.115000 12.0110 0 + 1598 P1 103 PHE HE1 HP 0.115000 1.0080 0 + 1599 P1 103 PHE CZ CA -0.115000 12.0110 0 + 1600 P1 103 PHE HZ HP 0.115000 1.0080 0 + 1601 P1 103 PHE CD2 CA -0.115000 12.0110 0 + 1602 P1 103 PHE HD2 HP 0.115000 1.0080 0 + 1603 P1 103 PHE CE2 CA -0.115000 12.0110 0 + 1604 P1 103 PHE HE2 HP 0.115000 1.0080 0 + 1605 P1 103 PHE C C 0.510000 12.0110 0 + 1606 P1 103 PHE O O -0.510000 15.9990 0 + 1607 P1 104 LEU N NH1 -0.470000 14.0070 0 + 1608 P1 104 LEU HN H 0.310000 1.0080 0 + 1609 P1 104 LEU CA CT1 0.070000 12.0110 0 + 1610 P1 104 LEU HA HB 0.090000 1.0080 0 + 1611 P1 104 LEU CB CT2 -0.180000 12.0110 0 + 1612 P1 104 LEU HB1 HA 0.090000 1.0080 0 + 1613 P1 104 LEU HB2 HA 0.090000 1.0080 0 + 1614 P1 104 LEU CG CT1 -0.090000 12.0110 0 + 1615 P1 104 LEU HG HA 0.090000 1.0080 0 + 1616 P1 104 LEU CD1 CT3 -0.270000 12.0110 0 + 1617 P1 104 LEU HD11 HA 0.090000 1.0080 0 + 1618 P1 104 LEU HD12 HA 0.090000 1.0080 0 + 1619 P1 104 LEU HD13 HA 0.090000 1.0080 0 + 1620 P1 104 LEU CD2 CT3 -0.270000 12.0110 0 + 1621 P1 104 LEU HD21 HA 0.090000 1.0080 0 + 1622 P1 104 LEU HD22 HA 0.090000 1.0080 0 + 1623 P1 104 LEU HD23 HA 0.090000 1.0080 0 + 1624 P1 104 LEU C C 0.510000 12.0110 0 + 1625 P1 104 LEU O O -0.510000 15.9990 0 + 1626 P1 105 PRO N N -0.290000 14.0070 0 + 1627 P1 105 PRO CD CP3 0.000000 12.0110 0 + 1628 P1 105 PRO HD1 HA 0.090000 1.0080 0 + 1629 P1 105 PRO HD2 HA 0.090000 1.0080 0 + 1630 P1 105 PRO CA CP1 0.020000 12.0110 0 + 1631 P1 105 PRO HA HB 0.090000 1.0080 0 + 1632 P1 105 PRO CB CP2 -0.180000 12.0110 0 + 1633 P1 105 PRO HB1 HA 0.090000 1.0080 0 + 1634 P1 105 PRO HB2 HA 0.090000 1.0080 0 + 1635 P1 105 PRO CG CP2 -0.180000 12.0110 0 + 1636 P1 105 PRO HG1 HA 0.090000 1.0080 0 + 1637 P1 105 PRO HG2 HA 0.090000 1.0080 0 + 1638 P1 105 PRO C C 0.510000 12.0110 0 + 1639 P1 105 PRO O O -0.510000 15.9990 0 + 1640 P1 106 LYS N NH1 -0.470000 14.0070 0 + 1641 P1 106 LYS HN H 0.310000 1.0080 0 + 1642 P1 106 LYS CA CT1 0.070000 12.0110 0 + 1643 P1 106 LYS HA HB 0.090000 1.0080 0 + 1644 P1 106 LYS CB CT2 -0.180000 12.0110 0 + 1645 P1 106 LYS HB1 HA 0.090000 1.0080 0 + 1646 P1 106 LYS HB2 HA 0.090000 1.0080 0 + 1647 P1 106 LYS CG CT2 -0.180000 12.0110 0 + 1648 P1 106 LYS HG1 HA 0.090000 1.0080 0 + 1649 P1 106 LYS HG2 HA 0.090000 1.0080 0 + 1650 P1 106 LYS CD CT2 -0.180000 12.0110 0 + 1651 P1 106 LYS HD1 HA 0.090000 1.0080 0 + 1652 P1 106 LYS HD2 HA 0.090000 1.0080 0 + 1653 P1 106 LYS CE CT2 0.210000 12.0110 0 + 1654 P1 106 LYS HE1 HA 0.050000 1.0080 0 + 1655 P1 106 LYS HE2 HA 0.050000 1.0080 0 + 1656 P1 106 LYS NZ NH3 -0.300000 14.0070 0 + 1657 P1 106 LYS HZ1 HC 0.330000 1.0080 0 + 1658 P1 106 LYS HZ2 HC 0.330000 1.0080 0 + 1659 P1 106 LYS HZ3 HC 0.330000 1.0080 0 + 1660 P1 106 LYS C C 0.510000 12.0110 0 + 1661 P1 106 LYS O O -0.510000 15.9990 0 + 1662 P1 107 ALA N NH1 -0.470000 14.0070 0 + 1663 P1 107 ALA HN H 0.310000 1.0080 0 + 1664 P1 107 ALA CA CT1 0.070000 12.0110 0 + 1665 P1 107 ALA HA HB 0.090000 1.0080 0 + 1666 P1 107 ALA CB CT3 -0.270000 12.0110 0 + 1667 P1 107 ALA HB1 HA 0.090000 1.0080 0 + 1668 P1 107 ALA HB2 HA 0.090000 1.0080 0 + 1669 P1 107 ALA HB3 HA 0.090000 1.0080 0 + 1670 P1 107 ALA C C 0.510000 12.0110 0 + 1671 P1 107 ALA O O -0.510000 15.9990 0 + 1672 P1 108 GLN N NH1 -0.470000 14.0070 0 + 1673 P1 108 GLN HN H 0.310000 1.0080 0 + 1674 P1 108 GLN CA CT1 0.070000 12.0110 0 + 1675 P1 108 GLN HA HB 0.090000 1.0080 0 + 1676 P1 108 GLN CB CT2 -0.180000 12.0110 0 + 1677 P1 108 GLN HB1 HA 0.090000 1.0080 0 + 1678 P1 108 GLN HB2 HA 0.090000 1.0080 0 + 1679 P1 108 GLN CG CT2 -0.180000 12.0110 0 + 1680 P1 108 GLN HG1 HA 0.090000 1.0080 0 + 1681 P1 108 GLN HG2 HA 0.090000 1.0080 0 + 1682 P1 108 GLN CD CC 0.550000 12.0110 0 + 1683 P1 108 GLN OE1 O -0.550000 15.9990 0 + 1684 P1 108 GLN NE2 NH2 -0.620000 14.0070 0 + 1685 P1 108 GLN HE21 H 0.320000 1.0080 0 + 1686 P1 108 GLN HE22 H 0.300000 1.0080 0 + 1687 P1 108 GLN C C 0.510000 12.0110 0 + 1688 P1 108 GLN O O -0.510000 15.9990 0 + 1689 P1 109 LYS N NH1 -0.470000 14.0070 0 + 1690 P1 109 LYS HN H 0.310000 1.0080 0 + 1691 P1 109 LYS CA CT1 0.070000 12.0110 0 + 1692 P1 109 LYS HA HB 0.090000 1.0080 0 + 1693 P1 109 LYS CB CT2 -0.180000 12.0110 0 + 1694 P1 109 LYS HB1 HA 0.090000 1.0080 0 + 1695 P1 109 LYS HB2 HA 0.090000 1.0080 0 + 1696 P1 109 LYS CG CT2 -0.180000 12.0110 0 + 1697 P1 109 LYS HG1 HA 0.090000 1.0080 0 + 1698 P1 109 LYS HG2 HA 0.090000 1.0080 0 + 1699 P1 109 LYS CD CT2 -0.180000 12.0110 0 + 1700 P1 109 LYS HD1 HA 0.090000 1.0080 0 + 1701 P1 109 LYS HD2 HA 0.090000 1.0080 0 + 1702 P1 109 LYS CE CT2 0.210000 12.0110 0 + 1703 P1 109 LYS HE1 HA 0.050000 1.0080 0 + 1704 P1 109 LYS HE2 HA 0.050000 1.0080 0 + 1705 P1 109 LYS NZ NH3 -0.300000 14.0070 0 + 1706 P1 109 LYS HZ1 HC 0.330000 1.0080 0 + 1707 P1 109 LYS HZ2 HC 0.330000 1.0080 0 + 1708 P1 109 LYS HZ3 HC 0.330000 1.0080 0 + 1709 P1 109 LYS C C 0.510000 12.0110 0 + 1710 P1 109 LYS O O -0.510000 15.9990 0 + 1711 P1 110 LEU N NH1 -0.470000 14.0070 0 + 1712 P1 110 LEU HN H 0.310000 1.0080 0 + 1713 P1 110 LEU CA CT1 0.070000 12.0110 0 + 1714 P1 110 LEU HA HB 0.090000 1.0080 0 + 1715 P1 110 LEU CB CT2 -0.180000 12.0110 0 + 1716 P1 110 LEU HB1 HA 0.090000 1.0080 0 + 1717 P1 110 LEU HB2 HA 0.090000 1.0080 0 + 1718 P1 110 LEU CG CT1 -0.090000 12.0110 0 + 1719 P1 110 LEU HG HA 0.090000 1.0080 0 + 1720 P1 110 LEU CD1 CT3 -0.270000 12.0110 0 + 1721 P1 110 LEU HD11 HA 0.090000 1.0080 0 + 1722 P1 110 LEU HD12 HA 0.090000 1.0080 0 + 1723 P1 110 LEU HD13 HA 0.090000 1.0080 0 + 1724 P1 110 LEU CD2 CT3 -0.270000 12.0110 0 + 1725 P1 110 LEU HD21 HA 0.090000 1.0080 0 + 1726 P1 110 LEU HD22 HA 0.090000 1.0080 0 + 1727 P1 110 LEU HD23 HA 0.090000 1.0080 0 + 1728 P1 110 LEU C C 0.510000 12.0110 0 + 1729 P1 110 LEU O O -0.510000 15.9990 0 + 1730 P1 111 TYR N NH1 -0.470000 14.0070 0 + 1731 P1 111 TYR HN H 0.310000 1.0080 0 + 1732 P1 111 TYR CA CT1 0.070000 12.0110 0 + 1733 P1 111 TYR HA HB 0.090000 1.0080 0 + 1734 P1 111 TYR CB CT2 -0.180000 12.0110 0 + 1735 P1 111 TYR HB1 HA 0.090000 1.0080 0 + 1736 P1 111 TYR HB2 HA 0.090000 1.0080 0 + 1737 P1 111 TYR CG CA 0.000000 12.0110 0 + 1738 P1 111 TYR CD1 CA -0.115000 12.0110 0 + 1739 P1 111 TYR HD1 HP 0.115000 1.0080 0 + 1740 P1 111 TYR CE1 CA -0.115000 12.0110 0 + 1741 P1 111 TYR HE1 HP 0.115000 1.0080 0 + 1742 P1 111 TYR CZ CA 0.110000 12.0110 0 + 1743 P1 111 TYR OH OH1 -0.540000 15.9990 0 + 1744 P1 111 TYR HH H 0.430000 1.0080 0 + 1745 P1 111 TYR CD2 CA -0.115000 12.0110 0 + 1746 P1 111 TYR HD2 HP 0.115000 1.0080 0 + 1747 P1 111 TYR CE2 CA -0.115000 12.0110 0 + 1748 P1 111 TYR HE2 HP 0.115000 1.0080 0 + 1749 P1 111 TYR C C 0.510000 12.0110 0 + 1750 P1 111 TYR O O -0.510000 15.9990 0 + 1751 P1 112 LEU N NH1 -0.470000 14.0070 0 + 1752 P1 112 LEU HN H 0.310000 1.0080 0 + 1753 P1 112 LEU CA CT1 0.070000 12.0110 0 + 1754 P1 112 LEU HA HB 0.090000 1.0080 0 + 1755 P1 112 LEU CB CT2 -0.180000 12.0110 0 + 1756 P1 112 LEU HB1 HA 0.090000 1.0080 0 + 1757 P1 112 LEU HB2 HA 0.090000 1.0080 0 + 1758 P1 112 LEU CG CT1 -0.090000 12.0110 0 + 1759 P1 112 LEU HG HA 0.090000 1.0080 0 + 1760 P1 112 LEU CD1 CT3 -0.270000 12.0110 0 + 1761 P1 112 LEU HD11 HA 0.090000 1.0080 0 + 1762 P1 112 LEU HD12 HA 0.090000 1.0080 0 + 1763 P1 112 LEU HD13 HA 0.090000 1.0080 0 + 1764 P1 112 LEU CD2 CT3 -0.270000 12.0110 0 + 1765 P1 112 LEU HD21 HA 0.090000 1.0080 0 + 1766 P1 112 LEU HD22 HA 0.090000 1.0080 0 + 1767 P1 112 LEU HD23 HA 0.090000 1.0080 0 + 1768 P1 112 LEU C C 0.510000 12.0110 0 + 1769 P1 112 LEU O O -0.510000 15.9990 0 + 1770 P1 113 THR N NH1 -0.470000 14.0070 0 + 1771 P1 113 THR HN H 0.310000 1.0080 0 + 1772 P1 113 THR CA CT1 0.070000 12.0110 0 + 1773 P1 113 THR HA HB 0.090000 1.0080 0 + 1774 P1 113 THR CB CT1 0.140000 12.0110 0 + 1775 P1 113 THR HB HA 0.090000 1.0080 0 + 1776 P1 113 THR OG1 OH1 -0.660000 15.9990 0 + 1777 P1 113 THR HG1 H 0.430000 1.0080 0 + 1778 P1 113 THR CG2 CT3 -0.270000 12.0110 0 + 1779 P1 113 THR HG21 HA 0.090000 1.0080 0 + 1780 P1 113 THR HG22 HA 0.090000 1.0080 0 + 1781 P1 113 THR HG23 HA 0.090000 1.0080 0 + 1782 P1 113 THR C C 0.510000 12.0110 0 + 1783 P1 113 THR O O -0.510000 15.9990 0 + 1784 P1 114 HSD N NH1 -0.470000 14.0070 0 + 1785 P1 114 HSD HN H 0.310000 1.0080 0 + 1786 P1 114 HSD CA CT1 0.070000 12.0110 0 + 1787 P1 114 HSD HA HB 0.090000 1.0080 0 + 1788 P1 114 HSD CB CT2 -0.090000 12.0110 0 + 1789 P1 114 HSD HB1 HA 0.090000 1.0080 0 + 1790 P1 114 HSD HB2 HA 0.090000 1.0080 0 + 1791 P1 114 HSD ND1 NR1 -0.360000 14.0070 0 + 1792 P1 114 HSD HD1 H 0.320000 1.0080 0 + 1793 P1 114 HSD CG CPH1 -0.050000 12.0110 0 + 1794 P1 114 HSD CE1 CPH2 0.250000 12.0110 0 + 1795 P1 114 HSD HE1 HR1 0.130000 1.0080 0 + 1796 P1 114 HSD NE2 NR2 -0.700000 14.0070 0 + 1797 P1 114 HSD CD2 CPH1 0.220000 12.0110 0 + 1798 P1 114 HSD HD2 HR3 0.100000 1.0080 0 + 1799 P1 114 HSD C C 0.510000 12.0110 0 + 1800 P1 114 HSD O O -0.510000 15.9990 0 + 1801 P1 115 ILE N NH1 -0.470000 14.0070 0 + 1802 P1 115 ILE HN H 0.310000 1.0080 0 + 1803 P1 115 ILE CA CT1 0.070000 12.0110 0 + 1804 P1 115 ILE HA HB 0.090000 1.0080 0 + 1805 P1 115 ILE CB CT1 -0.090000 12.0110 0 + 1806 P1 115 ILE HB HA 0.090000 1.0080 0 + 1807 P1 115 ILE CG2 CT3 -0.270000 12.0110 0 + 1808 P1 115 ILE HG21 HA 0.090000 1.0080 0 + 1809 P1 115 ILE HG22 HA 0.090000 1.0080 0 + 1810 P1 115 ILE HG23 HA 0.090000 1.0080 0 + 1811 P1 115 ILE CG1 CT2 -0.180000 12.0110 0 + 1812 P1 115 ILE HG11 HA 0.090000 1.0080 0 + 1813 P1 115 ILE HG12 HA 0.090000 1.0080 0 + 1814 P1 115 ILE CD CT3 -0.270000 12.0110 0 + 1815 P1 115 ILE HD1 HA 0.090000 1.0080 0 + 1816 P1 115 ILE HD2 HA 0.090000 1.0080 0 + 1817 P1 115 ILE HD3 HA 0.090000 1.0080 0 + 1818 P1 115 ILE C C 0.510000 12.0110 0 + 1819 P1 115 ILE O O -0.510000 15.9990 0 + 1820 P1 116 ASP N NH1 -0.470000 14.0070 0 + 1821 P1 116 ASP HN H 0.310000 1.0080 0 + 1822 P1 116 ASP CA CT1 0.070000 12.0110 0 + 1823 P1 116 ASP HA HB 0.090000 1.0080 0 + 1824 P1 116 ASP CB CT2 -0.280000 12.0110 0 + 1825 P1 116 ASP HB1 HA 0.090000 1.0080 0 + 1826 P1 116 ASP HB2 HA 0.090000 1.0080 0 + 1827 P1 116 ASP CG CC 0.620000 12.0110 0 + 1828 P1 116 ASP OD1 OC -0.760000 15.9990 0 + 1829 P1 116 ASP OD2 OC -0.760000 15.9990 0 + 1830 P1 116 ASP C C 0.510000 12.0110 0 + 1831 P1 116 ASP O O -0.510000 15.9990 0 + 1832 P1 117 ALA N NH1 -0.470000 14.0070 0 + 1833 P1 117 ALA HN H 0.310000 1.0080 0 + 1834 P1 117 ALA CA CT1 0.070000 12.0110 0 + 1835 P1 117 ALA HA HB 0.090000 1.0080 0 + 1836 P1 117 ALA CB CT3 -0.270000 12.0110 0 + 1837 P1 117 ALA HB1 HA 0.090000 1.0080 0 + 1838 P1 117 ALA HB2 HA 0.090000 1.0080 0 + 1839 P1 117 ALA HB3 HA 0.090000 1.0080 0 + 1840 P1 117 ALA C C 0.510000 12.0110 0 + 1841 P1 117 ALA O O -0.510000 15.9990 0 + 1842 P1 118 GLU N NH1 -0.470000 14.0070 0 + 1843 P1 118 GLU HN H 0.310000 1.0080 0 + 1844 P1 118 GLU CA CT1 0.070000 12.0110 0 + 1845 P1 118 GLU HA HB 0.090000 1.0080 0 + 1846 P1 118 GLU CB CT2 -0.180000 12.0110 0 + 1847 P1 118 GLU HB1 HA 0.090000 1.0080 0 + 1848 P1 118 GLU HB2 HA 0.090000 1.0080 0 + 1849 P1 118 GLU CG CT2 -0.280000 12.0110 0 + 1850 P1 118 GLU HG1 HA 0.090000 1.0080 0 + 1851 P1 118 GLU HG2 HA 0.090000 1.0080 0 + 1852 P1 118 GLU CD CC 0.620000 12.0110 0 + 1853 P1 118 GLU OE1 OC -0.760000 15.9990 0 + 1854 P1 118 GLU OE2 OC -0.760000 15.9990 0 + 1855 P1 118 GLU C C 0.510000 12.0110 0 + 1856 P1 118 GLU O O -0.510000 15.9990 0 + 1857 P1 119 VAL N NH1 -0.470000 14.0070 0 + 1858 P1 119 VAL HN H 0.310000 1.0080 0 + 1859 P1 119 VAL CA CT1 0.070000 12.0110 0 + 1860 P1 119 VAL HA HB 0.090000 1.0080 0 + 1861 P1 119 VAL CB CT1 -0.090000 12.0110 0 + 1862 P1 119 VAL HB HA 0.090000 1.0080 0 + 1863 P1 119 VAL CG1 CT3 -0.270000 12.0110 0 + 1864 P1 119 VAL HG11 HA 0.090000 1.0080 0 + 1865 P1 119 VAL HG12 HA 0.090000 1.0080 0 + 1866 P1 119 VAL HG13 HA 0.090000 1.0080 0 + 1867 P1 119 VAL CG2 CT3 -0.270000 12.0110 0 + 1868 P1 119 VAL HG21 HA 0.090000 1.0080 0 + 1869 P1 119 VAL HG22 HA 0.090000 1.0080 0 + 1870 P1 119 VAL HG23 HA 0.090000 1.0080 0 + 1871 P1 119 VAL C C 0.510000 12.0110 0 + 1872 P1 119 VAL O O -0.510000 15.9990 0 + 1873 P1 120 GLU N NH1 -0.470000 14.0070 0 + 1874 P1 120 GLU HN H 0.310000 1.0080 0 + 1875 P1 120 GLU CA CT1 0.070000 12.0110 0 + 1876 P1 120 GLU HA HB 0.090000 1.0080 0 + 1877 P1 120 GLU CB CT2 -0.180000 12.0110 0 + 1878 P1 120 GLU HB1 HA 0.090000 1.0080 0 + 1879 P1 120 GLU HB2 HA 0.090000 1.0080 0 + 1880 P1 120 GLU CG CT2 -0.280000 12.0110 0 + 1881 P1 120 GLU HG1 HA 0.090000 1.0080 0 + 1882 P1 120 GLU HG2 HA 0.090000 1.0080 0 + 1883 P1 120 GLU CD CC 0.620000 12.0110 0 + 1884 P1 120 GLU OE1 OC -0.760000 15.9990 0 + 1885 P1 120 GLU OE2 OC -0.760000 15.9990 0 + 1886 P1 120 GLU C C 0.510000 12.0110 0 + 1887 P1 120 GLU O O -0.510000 15.9990 0 + 1888 P1 121 GLY N NH1 -0.470000 14.0070 0 + 1889 P1 121 GLY HN H 0.310000 1.0080 0 + 1890 P1 121 GLY CA CT2 -0.020000 12.0110 0 + 1891 P1 121 GLY HA1 HB 0.090000 1.0080 0 + 1892 P1 121 GLY HA2 HB 0.090000 1.0080 0 + 1893 P1 121 GLY C C 0.510000 12.0110 0 + 1894 P1 121 GLY O O -0.510000 15.9990 0 + 1895 P1 122 ASP N NH1 -0.470000 14.0070 0 + 1896 P1 122 ASP HN H 0.310000 1.0080 0 + 1897 P1 122 ASP CA CT1 0.070000 12.0110 0 + 1898 P1 122 ASP HA HB 0.090000 1.0080 0 + 1899 P1 122 ASP CB CT2 -0.280000 12.0110 0 + 1900 P1 122 ASP HB1 HA 0.090000 1.0080 0 + 1901 P1 122 ASP HB2 HA 0.090000 1.0080 0 + 1902 P1 122 ASP CG CC 0.620000 12.0110 0 + 1903 P1 122 ASP OD1 OC -0.760000 15.9990 0 + 1904 P1 122 ASP OD2 OC -0.760000 15.9990 0 + 1905 P1 122 ASP C C 0.510000 12.0110 0 + 1906 P1 122 ASP O O -0.510000 15.9990 0 + 1907 P1 123 THR N NH1 -0.470000 14.0070 0 + 1908 P1 123 THR HN H 0.310000 1.0080 0 + 1909 P1 123 THR CA CT1 0.070000 12.0110 0 + 1910 P1 123 THR HA HB 0.090000 1.0080 0 + 1911 P1 123 THR CB CT1 0.140000 12.0110 0 + 1912 P1 123 THR HB HA 0.090000 1.0080 0 + 1913 P1 123 THR OG1 OH1 -0.660000 15.9990 0 + 1914 P1 123 THR HG1 H 0.430000 1.0080 0 + 1915 P1 123 THR CG2 CT3 -0.270000 12.0110 0 + 1916 P1 123 THR HG21 HA 0.090000 1.0080 0 + 1917 P1 123 THR HG22 HA 0.090000 1.0080 0 + 1918 P1 123 THR HG23 HA 0.090000 1.0080 0 + 1919 P1 123 THR C C 0.510000 12.0110 0 + 1920 P1 123 THR O O -0.510000 15.9990 0 + 1921 P1 124 HSD N NH1 -0.470000 14.0070 0 + 1922 P1 124 HSD HN H 0.310000 1.0080 0 + 1923 P1 124 HSD CA CT1 0.070000 12.0110 0 + 1924 P1 124 HSD HA HB 0.090000 1.0080 0 + 1925 P1 124 HSD CB CT2 -0.090000 12.0110 0 + 1926 P1 124 HSD HB1 HA 0.090000 1.0080 0 + 1927 P1 124 HSD HB2 HA 0.090000 1.0080 0 + 1928 P1 124 HSD ND1 NR1 -0.360000 14.0070 0 + 1929 P1 124 HSD HD1 H 0.320000 1.0080 0 + 1930 P1 124 HSD CG CPH1 -0.050000 12.0110 0 + 1931 P1 124 HSD CE1 CPH2 0.250000 12.0110 0 + 1932 P1 124 HSD HE1 HR1 0.130000 1.0080 0 + 1933 P1 124 HSD NE2 NR2 -0.700000 14.0070 0 + 1934 P1 124 HSD CD2 CPH1 0.220000 12.0110 0 + 1935 P1 124 HSD HD2 HR3 0.100000 1.0080 0 + 1936 P1 124 HSD C C 0.510000 12.0110 0 + 1937 P1 124 HSD O O -0.510000 15.9990 0 + 1938 P1 125 PHE N NH1 -0.470000 14.0070 0 + 1939 P1 125 PHE HN H 0.310000 1.0080 0 + 1940 P1 125 PHE CA CT1 0.070000 12.0110 0 + 1941 P1 125 PHE HA HB 0.090000 1.0080 0 + 1942 P1 125 PHE CB CT2 -0.180000 12.0110 0 + 1943 P1 125 PHE HB1 HA 0.090000 1.0080 0 + 1944 P1 125 PHE HB2 HA 0.090000 1.0080 0 + 1945 P1 125 PHE CG CA 0.000000 12.0110 0 + 1946 P1 125 PHE CD1 CA -0.115000 12.0110 0 + 1947 P1 125 PHE HD1 HP 0.115000 1.0080 0 + 1948 P1 125 PHE CE1 CA -0.115000 12.0110 0 + 1949 P1 125 PHE HE1 HP 0.115000 1.0080 0 + 1950 P1 125 PHE CZ CA -0.115000 12.0110 0 + 1951 P1 125 PHE HZ HP 0.115000 1.0080 0 + 1952 P1 125 PHE CD2 CA -0.115000 12.0110 0 + 1953 P1 125 PHE HD2 HP 0.115000 1.0080 0 + 1954 P1 125 PHE CE2 CA -0.115000 12.0110 0 + 1955 P1 125 PHE HE2 HP 0.115000 1.0080 0 + 1956 P1 125 PHE C C 0.510000 12.0110 0 + 1957 P1 125 PHE O O -0.510000 15.9990 0 + 1958 P1 126 PRO N N -0.290000 14.0070 0 + 1959 P1 126 PRO CD CP3 0.000000 12.0110 0 + 1960 P1 126 PRO HD1 HA 0.090000 1.0080 0 + 1961 P1 126 PRO HD2 HA 0.090000 1.0080 0 + 1962 P1 126 PRO CA CP1 0.020000 12.0110 0 + 1963 P1 126 PRO HA HB 0.090000 1.0080 0 + 1964 P1 126 PRO CB CP2 -0.180000 12.0110 0 + 1965 P1 126 PRO HB1 HA 0.090000 1.0080 0 + 1966 P1 126 PRO HB2 HA 0.090000 1.0080 0 + 1967 P1 126 PRO CG CP2 -0.180000 12.0110 0 + 1968 P1 126 PRO HG1 HA 0.090000 1.0080 0 + 1969 P1 126 PRO HG2 HA 0.090000 1.0080 0 + 1970 P1 126 PRO C C 0.510000 12.0110 0 + 1971 P1 126 PRO O O -0.510000 15.9990 0 + 1972 P1 127 ASP N NH1 -0.470000 14.0070 0 + 1973 P1 127 ASP HN H 0.310000 1.0080 0 + 1974 P1 127 ASP CA CT1 0.070000 12.0110 0 + 1975 P1 127 ASP HA HB 0.090000 1.0080 0 + 1976 P1 127 ASP CB CT2 -0.280000 12.0110 0 + 1977 P1 127 ASP HB1 HA 0.090000 1.0080 0 + 1978 P1 127 ASP HB2 HA 0.090000 1.0080 0 + 1979 P1 127 ASP CG CC 0.620000 12.0110 0 + 1980 P1 127 ASP OD1 OC -0.760000 15.9990 0 + 1981 P1 127 ASP OD2 OC -0.760000 15.9990 0 + 1982 P1 127 ASP C C 0.510000 12.0110 0 + 1983 P1 127 ASP O O -0.510000 15.9990 0 + 1984 P1 128 TYR N NH1 -0.470000 14.0070 0 + 1985 P1 128 TYR HN H 0.310000 1.0080 0 + 1986 P1 128 TYR CA CT1 0.070000 12.0110 0 + 1987 P1 128 TYR HA HB 0.090000 1.0080 0 + 1988 P1 128 TYR CB CT2 -0.180000 12.0110 0 + 1989 P1 128 TYR HB1 HA 0.090000 1.0080 0 + 1990 P1 128 TYR HB2 HA 0.090000 1.0080 0 + 1991 P1 128 TYR CG CA 0.000000 12.0110 0 + 1992 P1 128 TYR CD1 CA -0.115000 12.0110 0 + 1993 P1 128 TYR HD1 HP 0.115000 1.0080 0 + 1994 P1 128 TYR CE1 CA -0.115000 12.0110 0 + 1995 P1 128 TYR HE1 HP 0.115000 1.0080 0 + 1996 P1 128 TYR CZ CA 0.110000 12.0110 0 + 1997 P1 128 TYR OH OH1 -0.540000 15.9990 0 + 1998 P1 128 TYR HH H 0.430000 1.0080 0 + 1999 P1 128 TYR CD2 CA -0.115000 12.0110 0 + 2000 P1 128 TYR HD2 HP 0.115000 1.0080 0 + 2001 P1 128 TYR CE2 CA -0.115000 12.0110 0 + 2002 P1 128 TYR HE2 HP 0.115000 1.0080 0 + 2003 P1 128 TYR C C 0.510000 12.0110 0 + 2004 P1 128 TYR O O -0.510000 15.9990 0 + 2005 P1 129 GLU N NH1 -0.470000 14.0070 0 + 2006 P1 129 GLU HN H 0.310000 1.0080 0 + 2007 P1 129 GLU CA CT1 0.070000 12.0110 0 + 2008 P1 129 GLU HA HB 0.090000 1.0080 0 + 2009 P1 129 GLU CB CT2 -0.180000 12.0110 0 + 2010 P1 129 GLU HB1 HA 0.090000 1.0080 0 + 2011 P1 129 GLU HB2 HA 0.090000 1.0080 0 + 2012 P1 129 GLU CG CT2 -0.280000 12.0110 0 + 2013 P1 129 GLU HG1 HA 0.090000 1.0080 0 + 2014 P1 129 GLU HG2 HA 0.090000 1.0080 0 + 2015 P1 129 GLU CD CC 0.620000 12.0110 0 + 2016 P1 129 GLU OE1 OC -0.760000 15.9990 0 + 2017 P1 129 GLU OE2 OC -0.760000 15.9990 0 + 2018 P1 129 GLU C C 0.510000 12.0110 0 + 2019 P1 129 GLU O O -0.510000 15.9990 0 + 2020 P1 130 PRO N N -0.290000 14.0070 0 + 2021 P1 130 PRO CD CP3 0.000000 12.0110 0 + 2022 P1 130 PRO HD1 HA 0.090000 1.0080 0 + 2023 P1 130 PRO HD2 HA 0.090000 1.0080 0 + 2024 P1 130 PRO CA CP1 0.020000 12.0110 0 + 2025 P1 130 PRO HA HB 0.090000 1.0080 0 + 2026 P1 130 PRO CB CP2 -0.180000 12.0110 0 + 2027 P1 130 PRO HB1 HA 0.090000 1.0080 0 + 2028 P1 130 PRO HB2 HA 0.090000 1.0080 0 + 2029 P1 130 PRO CG CP2 -0.180000 12.0110 0 + 2030 P1 130 PRO HG1 HA 0.090000 1.0080 0 + 2031 P1 130 PRO HG2 HA 0.090000 1.0080 0 + 2032 P1 130 PRO C C 0.510000 12.0110 0 + 2033 P1 130 PRO O O -0.510000 15.9990 0 + 2034 P1 131 ASP N NH1 -0.470000 14.0070 0 + 2035 P1 131 ASP HN H 0.310000 1.0080 0 + 2036 P1 131 ASP CA CT1 0.070000 12.0110 0 + 2037 P1 131 ASP HA HB 0.090000 1.0080 0 + 2038 P1 131 ASP CB CT2 -0.280000 12.0110 0 + 2039 P1 131 ASP HB1 HA 0.090000 1.0080 0 + 2040 P1 131 ASP HB2 HA 0.090000 1.0080 0 + 2041 P1 131 ASP CG CC 0.620000 12.0110 0 + 2042 P1 131 ASP OD1 OC -0.760000 15.9990 0 + 2043 P1 131 ASP OD2 OC -0.760000 15.9990 0 + 2044 P1 131 ASP C C 0.510000 12.0110 0 + 2045 P1 131 ASP O O -0.510000 15.9990 0 + 2046 P1 132 ASP N NH1 -0.470000 14.0070 0 + 2047 P1 132 ASP HN H 0.310000 1.0080 0 + 2048 P1 132 ASP CA CT1 0.070000 12.0110 0 + 2049 P1 132 ASP HA HB 0.090000 1.0080 0 + 2050 P1 132 ASP CB CT2 -0.280000 12.0110 0 + 2051 P1 132 ASP HB1 HA 0.090000 1.0080 0 + 2052 P1 132 ASP HB2 HA 0.090000 1.0080 0 + 2053 P1 132 ASP CG CC 0.620000 12.0110 0 + 2054 P1 132 ASP OD1 OC -0.760000 15.9990 0 + 2055 P1 132 ASP OD2 OC -0.760000 15.9990 0 + 2056 P1 132 ASP C C 0.510000 12.0110 0 + 2057 P1 132 ASP O O -0.510000 15.9990 0 + 2058 P1 133 TRP N NH1 -0.470000 14.0070 0 + 2059 P1 133 TRP HN H 0.310000 1.0080 0 + 2060 P1 133 TRP CA CT1 0.070000 12.0110 0 + 2061 P1 133 TRP HA HB 0.090000 1.0080 0 + 2062 P1 133 TRP CB CT2 -0.180000 12.0110 0 + 2063 P1 133 TRP HB1 HA 0.090000 1.0080 0 + 2064 P1 133 TRP HB2 HA 0.090000 1.0080 0 + 2065 P1 133 TRP CG CY -0.030000 12.0110 0 + 2066 P1 133 TRP CD1 CA 0.035000 12.0110 0 + 2067 P1 133 TRP HD1 HP 0.115000 1.0080 0 + 2068 P1 133 TRP NE1 NY -0.610000 14.0070 0 + 2069 P1 133 TRP HE1 H 0.380000 1.0080 0 + 2070 P1 133 TRP CE2 CPT 0.130000 12.0110 0 + 2071 P1 133 TRP CD2 CPT -0.020000 12.0110 0 + 2072 P1 133 TRP CE3 CA -0.115000 12.0110 0 + 2073 P1 133 TRP HE3 HP 0.115000 1.0080 0 + 2074 P1 133 TRP CZ3 CA -0.115000 12.0110 0 + 2075 P1 133 TRP HZ3 HP 0.115000 1.0080 0 + 2076 P1 133 TRP CZ2 CA -0.115000 12.0110 0 + 2077 P1 133 TRP HZ2 HP 0.115000 1.0080 0 + 2078 P1 133 TRP CH2 CA -0.115000 12.0110 0 + 2079 P1 133 TRP HH2 HP 0.115000 1.0080 0 + 2080 P1 133 TRP C C 0.510000 12.0110 0 + 2081 P1 133 TRP O O -0.510000 15.9990 0 + 2082 P1 134 GLU N NH1 -0.470000 14.0070 0 + 2083 P1 134 GLU HN H 0.310000 1.0080 0 + 2084 P1 134 GLU CA CT1 0.070000 12.0110 0 + 2085 P1 134 GLU HA HB 0.090000 1.0080 0 + 2086 P1 134 GLU CB CT2 -0.180000 12.0110 0 + 2087 P1 134 GLU HB1 HA 0.090000 1.0080 0 + 2088 P1 134 GLU HB2 HA 0.090000 1.0080 0 + 2089 P1 134 GLU CG CT2 -0.280000 12.0110 0 + 2090 P1 134 GLU HG1 HA 0.090000 1.0080 0 + 2091 P1 134 GLU HG2 HA 0.090000 1.0080 0 + 2092 P1 134 GLU CD CC 0.620000 12.0110 0 + 2093 P1 134 GLU OE1 OC -0.760000 15.9990 0 + 2094 P1 134 GLU OE2 OC -0.760000 15.9990 0 + 2095 P1 134 GLU C C 0.510000 12.0110 0 + 2096 P1 134 GLU O O -0.510000 15.9990 0 + 2097 P1 135 SER N NH1 -0.470000 14.0070 0 + 2098 P1 135 SER HN H 0.310000 1.0080 0 + 2099 P1 135 SER CA CT1 0.070000 12.0110 0 + 2100 P1 135 SER HA HB 0.090000 1.0080 0 + 2101 P1 135 SER CB CT2 0.050000 12.0110 0 + 2102 P1 135 SER HB1 HA 0.090000 1.0080 0 + 2103 P1 135 SER HB2 HA 0.090000 1.0080 0 + 2104 P1 135 SER OG OH1 -0.660000 15.9990 0 + 2105 P1 135 SER HG1 H 0.430000 1.0080 0 + 2106 P1 135 SER C C 0.510000 12.0110 0 + 2107 P1 135 SER O O -0.510000 15.9990 0 + 2108 P1 136 VAL N NH1 -0.470000 14.0070 0 + 2109 P1 136 VAL HN H 0.310000 1.0080 0 + 2110 P1 136 VAL CA CT1 0.070000 12.0110 0 + 2111 P1 136 VAL HA HB 0.090000 1.0080 0 + 2112 P1 136 VAL CB CT1 -0.090000 12.0110 0 + 2113 P1 136 VAL HB HA 0.090000 1.0080 0 + 2114 P1 136 VAL CG1 CT3 -0.270000 12.0110 0 + 2115 P1 136 VAL HG11 HA 0.090000 1.0080 0 + 2116 P1 136 VAL HG12 HA 0.090000 1.0080 0 + 2117 P1 136 VAL HG13 HA 0.090000 1.0080 0 + 2118 P1 136 VAL CG2 CT3 -0.270000 12.0110 0 + 2119 P1 136 VAL HG21 HA 0.090000 1.0080 0 + 2120 P1 136 VAL HG22 HA 0.090000 1.0080 0 + 2121 P1 136 VAL HG23 HA 0.090000 1.0080 0 + 2122 P1 136 VAL C C 0.510000 12.0110 0 + 2123 P1 136 VAL O O -0.510000 15.9990 0 + 2124 P1 137 PHE N NH1 -0.470000 14.0070 0 + 2125 P1 137 PHE HN H 0.310000 1.0080 0 + 2126 P1 137 PHE CA CT1 0.070000 12.0110 0 + 2127 P1 137 PHE HA HB 0.090000 1.0080 0 + 2128 P1 137 PHE CB CT2 -0.180000 12.0110 0 + 2129 P1 137 PHE HB1 HA 0.090000 1.0080 0 + 2130 P1 137 PHE HB2 HA 0.090000 1.0080 0 + 2131 P1 137 PHE CG CA 0.000000 12.0110 0 + 2132 P1 137 PHE CD1 CA -0.115000 12.0110 0 + 2133 P1 137 PHE HD1 HP 0.115000 1.0080 0 + 2134 P1 137 PHE CE1 CA -0.115000 12.0110 0 + 2135 P1 137 PHE HE1 HP 0.115000 1.0080 0 + 2136 P1 137 PHE CZ CA -0.115000 12.0110 0 + 2137 P1 137 PHE HZ HP 0.115000 1.0080 0 + 2138 P1 137 PHE CD2 CA -0.115000 12.0110 0 + 2139 P1 137 PHE HD2 HP 0.115000 1.0080 0 + 2140 P1 137 PHE CE2 CA -0.115000 12.0110 0 + 2141 P1 137 PHE HE2 HP 0.115000 1.0080 0 + 2142 P1 137 PHE C C 0.510000 12.0110 0 + 2143 P1 137 PHE O O -0.510000 15.9990 0 + 2144 P1 138 SER N NH1 -0.470000 14.0070 0 + 2145 P1 138 SER HN H 0.310000 1.0080 0 + 2146 P1 138 SER CA CT1 0.070000 12.0110 0 + 2147 P1 138 SER HA HB 0.090000 1.0080 0 + 2148 P1 138 SER CB CT2 0.050000 12.0110 0 + 2149 P1 138 SER HB1 HA 0.090000 1.0080 0 + 2150 P1 138 SER HB2 HA 0.090000 1.0080 0 + 2151 P1 138 SER OG OH1 -0.660000 15.9990 0 + 2152 P1 138 SER HG1 H 0.430000 1.0080 0 + 2153 P1 138 SER C C 0.510000 12.0110 0 + 2154 P1 138 SER O O -0.510000 15.9990 0 + 2155 P1 139 GLU N NH1 -0.470000 14.0070 0 + 2156 P1 139 GLU HN H 0.310000 1.0080 0 + 2157 P1 139 GLU CA CT1 0.070000 12.0110 0 + 2158 P1 139 GLU HA HB 0.090000 1.0080 0 + 2159 P1 139 GLU CB CT2 -0.180000 12.0110 0 + 2160 P1 139 GLU HB1 HA 0.090000 1.0080 0 + 2161 P1 139 GLU HB2 HA 0.090000 1.0080 0 + 2162 P1 139 GLU CG CT2 -0.280000 12.0110 0 + 2163 P1 139 GLU HG1 HA 0.090000 1.0080 0 + 2164 P1 139 GLU HG2 HA 0.090000 1.0080 0 + 2165 P1 139 GLU CD CC 0.620000 12.0110 0 + 2166 P1 139 GLU OE1 OC -0.760000 15.9990 0 + 2167 P1 139 GLU OE2 OC -0.760000 15.9990 0 + 2168 P1 139 GLU C C 0.510000 12.0110 0 + 2169 P1 139 GLU O O -0.510000 15.9990 0 + 2170 P1 140 PHE N NH1 -0.470000 14.0070 0 + 2171 P1 140 PHE HN H 0.310000 1.0080 0 + 2172 P1 140 PHE CA CT1 0.070000 12.0110 0 + 2173 P1 140 PHE HA HB 0.090000 1.0080 0 + 2174 P1 140 PHE CB CT2 -0.180000 12.0110 0 + 2175 P1 140 PHE HB1 HA 0.090000 1.0080 0 + 2176 P1 140 PHE HB2 HA 0.090000 1.0080 0 + 2177 P1 140 PHE CG CA 0.000000 12.0110 0 + 2178 P1 140 PHE CD1 CA -0.115000 12.0110 0 + 2179 P1 140 PHE HD1 HP 0.115000 1.0080 0 + 2180 P1 140 PHE CE1 CA -0.115000 12.0110 0 + 2181 P1 140 PHE HE1 HP 0.115000 1.0080 0 + 2182 P1 140 PHE CZ CA -0.115000 12.0110 0 + 2183 P1 140 PHE HZ HP 0.115000 1.0080 0 + 2184 P1 140 PHE CD2 CA -0.115000 12.0110 0 + 2185 P1 140 PHE HD2 HP 0.115000 1.0080 0 + 2186 P1 140 PHE CE2 CA -0.115000 12.0110 0 + 2187 P1 140 PHE HE2 HP 0.115000 1.0080 0 + 2188 P1 140 PHE C C 0.510000 12.0110 0 + 2189 P1 140 PHE O O -0.510000 15.9990 0 + 2190 P1 141 HSD N NH1 -0.470000 14.0070 0 + 2191 P1 141 HSD HN H 0.310000 1.0080 0 + 2192 P1 141 HSD CA CT1 0.070000 12.0110 0 + 2193 P1 141 HSD HA HB 0.090000 1.0080 0 + 2194 P1 141 HSD CB CT2 -0.090000 12.0110 0 + 2195 P1 141 HSD HB1 HA 0.090000 1.0080 0 + 2196 P1 141 HSD HB2 HA 0.090000 1.0080 0 + 2197 P1 141 HSD ND1 NR1 -0.360000 14.0070 0 + 2198 P1 141 HSD HD1 H 0.320000 1.0080 0 + 2199 P1 141 HSD CG CPH1 -0.050000 12.0110 0 + 2200 P1 141 HSD CE1 CPH2 0.250000 12.0110 0 + 2201 P1 141 HSD HE1 HR1 0.130000 1.0080 0 + 2202 P1 141 HSD NE2 NR2 -0.700000 14.0070 0 + 2203 P1 141 HSD CD2 CPH1 0.220000 12.0110 0 + 2204 P1 141 HSD HD2 HR3 0.100000 1.0080 0 + 2205 P1 141 HSD C C 0.510000 12.0110 0 + 2206 P1 141 HSD O O -0.510000 15.9990 0 + 2207 P1 142 ASP N NH1 -0.470000 14.0070 0 + 2208 P1 142 ASP HN H 0.310000 1.0080 0 + 2209 P1 142 ASP CA CT1 0.070000 12.0110 0 + 2210 P1 142 ASP HA HB 0.090000 1.0080 0 + 2211 P1 142 ASP CB CT2 -0.280000 12.0110 0 + 2212 P1 142 ASP HB1 HA 0.090000 1.0080 0 + 2213 P1 142 ASP HB2 HA 0.090000 1.0080 0 + 2214 P1 142 ASP CG CC 0.620000 12.0110 0 + 2215 P1 142 ASP OD1 OC -0.760000 15.9990 0 + 2216 P1 142 ASP OD2 OC -0.760000 15.9990 0 + 2217 P1 142 ASP C C 0.510000 12.0110 0 + 2218 P1 142 ASP O O -0.510000 15.9990 0 + 2219 P1 143 ALA N NH1 -0.470000 14.0070 0 + 2220 P1 143 ALA HN H 0.310000 1.0080 0 + 2221 P1 143 ALA CA CT1 0.070000 12.0110 0 + 2222 P1 143 ALA HA HB 0.090000 1.0080 0 + 2223 P1 143 ALA CB CT3 -0.270000 12.0110 0 + 2224 P1 143 ALA HB1 HA 0.090000 1.0080 0 + 2225 P1 143 ALA HB2 HA 0.090000 1.0080 0 + 2226 P1 143 ALA HB3 HA 0.090000 1.0080 0 + 2227 P1 143 ALA C C 0.510000 12.0110 0 + 2228 P1 143 ALA O O -0.510000 15.9990 0 + 2229 P1 144 ASP N NH1 -0.470000 14.0070 0 + 2230 P1 144 ASP HN H 0.310000 1.0080 0 + 2231 P1 144 ASP CA CT1 0.070000 12.0110 0 + 2232 P1 144 ASP HA HB 0.090000 1.0080 0 + 2233 P1 144 ASP CB CT2 -0.280000 12.0110 0 + 2234 P1 144 ASP HB1 HA 0.090000 1.0080 0 + 2235 P1 144 ASP HB2 HA 0.090000 1.0080 0 + 2236 P1 144 ASP CG CC 0.620000 12.0110 0 + 2237 P1 144 ASP OD1 OC -0.760000 15.9990 0 + 2238 P1 144 ASP OD2 OC -0.760000 15.9990 0 + 2239 P1 144 ASP C C 0.510000 12.0110 0 + 2240 P1 144 ASP O O -0.510000 15.9990 0 + 2241 P1 145 ALA N NH1 -0.470000 14.0070 0 + 2242 P1 145 ALA HN H 0.310000 1.0080 0 + 2243 P1 145 ALA CA CT1 0.070000 12.0110 0 + 2244 P1 145 ALA HA HB 0.090000 1.0080 0 + 2245 P1 145 ALA CB CT3 -0.270000 12.0110 0 + 2246 P1 145 ALA HB1 HA 0.090000 1.0080 0 + 2247 P1 145 ALA HB2 HA 0.090000 1.0080 0 + 2248 P1 145 ALA HB3 HA 0.090000 1.0080 0 + 2249 P1 145 ALA C C 0.510000 12.0110 0 + 2250 P1 145 ALA O O -0.510000 15.9990 0 + 2251 P1 146 GLN N NH1 -0.470000 14.0070 0 + 2252 P1 146 GLN HN H 0.310000 1.0080 0 + 2253 P1 146 GLN CA CT1 0.070000 12.0110 0 + 2254 P1 146 GLN HA HB 0.090000 1.0080 0 + 2255 P1 146 GLN CB CT2 -0.180000 12.0110 0 + 2256 P1 146 GLN HB1 HA 0.090000 1.0080 0 + 2257 P1 146 GLN HB2 HA 0.090000 1.0080 0 + 2258 P1 146 GLN CG CT2 -0.180000 12.0110 0 + 2259 P1 146 GLN HG1 HA 0.090000 1.0080 0 + 2260 P1 146 GLN HG2 HA 0.090000 1.0080 0 + 2261 P1 146 GLN CD CC 0.550000 12.0110 0 + 2262 P1 146 GLN OE1 O -0.550000 15.9990 0 + 2263 P1 146 GLN NE2 NH2 -0.620000 14.0070 0 + 2264 P1 146 GLN HE21 H 0.320000 1.0080 0 + 2265 P1 146 GLN HE22 H 0.300000 1.0080 0 + 2266 P1 146 GLN C C 0.510000 12.0110 0 + 2267 P1 146 GLN O O -0.510000 15.9990 0 + 2268 P1 147 ASN N NH1 -0.470000 14.0070 0 + 2269 P1 147 ASN HN H 0.310000 1.0080 0 + 2270 P1 147 ASN CA CT1 0.070000 12.0110 0 + 2271 P1 147 ASN HA HB 0.090000 1.0080 0 + 2272 P1 147 ASN CB CT2 -0.180000 12.0110 0 + 2273 P1 147 ASN HB1 HA 0.090000 1.0080 0 + 2274 P1 147 ASN HB2 HA 0.090000 1.0080 0 + 2275 P1 147 ASN CG CC 0.550000 12.0110 0 + 2276 P1 147 ASN OD1 O -0.550000 15.9990 0 + 2277 P1 147 ASN ND2 NH2 -0.620000 14.0070 0 + 2278 P1 147 ASN HD21 H 0.320000 1.0080 0 + 2279 P1 147 ASN HD22 H 0.300000 1.0080 0 + 2280 P1 147 ASN C C 0.510000 12.0110 0 + 2281 P1 147 ASN O O -0.510000 15.9990 0 + 2282 P1 148 SER N NH1 -0.470000 14.0070 0 + 2283 P1 148 SER HN H 0.310000 1.0080 0 + 2284 P1 148 SER CA CT1 0.070000 12.0110 0 + 2285 P1 148 SER HA HB 0.090000 1.0080 0 + 2286 P1 148 SER CB CT2 0.050000 12.0110 0 + 2287 P1 148 SER HB1 HA 0.090000 1.0080 0 + 2288 P1 148 SER HB2 HA 0.090000 1.0080 0 + 2289 P1 148 SER OG OH1 -0.660000 15.9990 0 + 2290 P1 148 SER HG1 H 0.430000 1.0080 0 + 2291 P1 148 SER C C 0.510000 12.0110 0 + 2292 P1 148 SER O O -0.510000 15.9990 0 + 2293 P1 149 HSD N NH1 -0.470000 14.0070 0 + 2294 P1 149 HSD HN H 0.310000 1.0080 0 + 2295 P1 149 HSD CA CT1 0.070000 12.0110 0 + 2296 P1 149 HSD HA HB 0.090000 1.0080 0 + 2297 P1 149 HSD CB CT2 -0.090000 12.0110 0 + 2298 P1 149 HSD HB1 HA 0.090000 1.0080 0 + 2299 P1 149 HSD HB2 HA 0.090000 1.0080 0 + 2300 P1 149 HSD ND1 NR1 -0.360000 14.0070 0 + 2301 P1 149 HSD HD1 H 0.320000 1.0080 0 + 2302 P1 149 HSD CG CPH1 -0.050000 12.0110 0 + 2303 P1 149 HSD CE1 CPH2 0.250000 12.0110 0 + 2304 P1 149 HSD HE1 HR1 0.130000 1.0080 0 + 2305 P1 149 HSD NE2 NR2 -0.700000 14.0070 0 + 2306 P1 149 HSD CD2 CPH1 0.220000 12.0110 0 + 2307 P1 149 HSD HD2 HR3 0.100000 1.0080 0 + 2308 P1 149 HSD C C 0.510000 12.0110 0 + 2309 P1 149 HSD O O -0.510000 15.9990 0 + 2310 P1 150 SER N NH1 -0.470000 14.0070 0 + 2311 P1 150 SER HN H 0.310000 1.0080 0 + 2312 P1 150 SER CA CT1 0.070000 12.0110 0 + 2313 P1 150 SER HA HB 0.090000 1.0080 0 + 2314 P1 150 SER CB CT2 0.050000 12.0110 0 + 2315 P1 150 SER HB1 HA 0.090000 1.0080 0 + 2316 P1 150 SER HB2 HA 0.090000 1.0080 0 + 2317 P1 150 SER OG OH1 -0.660000 15.9990 0 + 2318 P1 150 SER HG1 H 0.430000 1.0080 0 + 2319 P1 150 SER C C 0.510000 12.0110 0 + 2320 P1 150 SER O O -0.510000 15.9990 0 + 2321 P1 151 TYR N NH1 -0.470000 14.0070 0 + 2322 P1 151 TYR HN H 0.310000 1.0080 0 + 2323 P1 151 TYR CA CT1 0.070000 12.0110 0 + 2324 P1 151 TYR HA HB 0.090000 1.0080 0 + 2325 P1 151 TYR CB CT2 -0.180000 12.0110 0 + 2326 P1 151 TYR HB1 HA 0.090000 1.0080 0 + 2327 P1 151 TYR HB2 HA 0.090000 1.0080 0 + 2328 P1 151 TYR CG CA 0.000000 12.0110 0 + 2329 P1 151 TYR CD1 CA -0.115000 12.0110 0 + 2330 P1 151 TYR HD1 HP 0.115000 1.0080 0 + 2331 P1 151 TYR CE1 CA -0.115000 12.0110 0 + 2332 P1 151 TYR HE1 HP 0.115000 1.0080 0 + 2333 P1 151 TYR CZ CA 0.110000 12.0110 0 + 2334 P1 151 TYR OH OH1 -0.540000 15.9990 0 + 2335 P1 151 TYR HH H 0.430000 1.0080 0 + 2336 P1 151 TYR CD2 CA -0.115000 12.0110 0 + 2337 P1 151 TYR HD2 HP 0.115000 1.0080 0 + 2338 P1 151 TYR CE2 CA -0.115000 12.0110 0 + 2339 P1 151 TYR HE2 HP 0.115000 1.0080 0 + 2340 P1 151 TYR C C 0.510000 12.0110 0 + 2341 P1 151 TYR O O -0.510000 15.9990 0 + 2342 P1 152 CYS N NH1 -0.470000 14.0070 0 + 2343 P1 152 CYS HN H 0.310000 1.0080 0 + 2344 P1 152 CYS CA CT1 0.070000 12.0110 0 + 2345 P1 152 CYS HA HB 0.090000 1.0080 0 + 2346 P1 152 CYS CB CT2 -0.110000 12.0110 0 + 2347 P1 152 CYS HB1 HA 0.090000 1.0080 0 + 2348 P1 152 CYS HB2 HA 0.090000 1.0080 0 + 2349 P1 152 CYS SG S -0.230000 32.0600 0 + 2350 P1 152 CYS HG1 HS 0.160000 1.0080 0 + 2351 P1 152 CYS C C 0.510000 12.0110 0 + 2352 P1 152 CYS O O -0.510000 15.9990 0 + 2353 P1 153 PHE N NH1 -0.470000 14.0070 0 + 2354 P1 153 PHE HN H 0.310000 1.0080 0 + 2355 P1 153 PHE CA CT1 0.070000 12.0110 0 + 2356 P1 153 PHE HA HB 0.090000 1.0080 0 + 2357 P1 153 PHE CB CT2 -0.180000 12.0110 0 + 2358 P1 153 PHE HB1 HA 0.090000 1.0080 0 + 2359 P1 153 PHE HB2 HA 0.090000 1.0080 0 + 2360 P1 153 PHE CG CA 0.000000 12.0110 0 + 2361 P1 153 PHE CD1 CA -0.115000 12.0110 0 + 2362 P1 153 PHE HD1 HP 0.115000 1.0080 0 + 2363 P1 153 PHE CE1 CA -0.115000 12.0110 0 + 2364 P1 153 PHE HE1 HP 0.115000 1.0080 0 + 2365 P1 153 PHE CZ CA -0.115000 12.0110 0 + 2366 P1 153 PHE HZ HP 0.115000 1.0080 0 + 2367 P1 153 PHE CD2 CA -0.115000 12.0110 0 + 2368 P1 153 PHE HD2 HP 0.115000 1.0080 0 + 2369 P1 153 PHE CE2 CA -0.115000 12.0110 0 + 2370 P1 153 PHE HE2 HP 0.115000 1.0080 0 + 2371 P1 153 PHE C C 0.510000 12.0110 0 + 2372 P1 153 PHE O O -0.510000 15.9990 0 + 2373 P1 154 GLU N NH1 -0.470000 14.0070 0 + 2374 P1 154 GLU HN H 0.310000 1.0080 0 + 2375 P1 154 GLU CA CT1 0.070000 12.0110 0 + 2376 P1 154 GLU HA HB 0.090000 1.0080 0 + 2377 P1 154 GLU CB CT2 -0.180000 12.0110 0 + 2378 P1 154 GLU HB1 HA 0.090000 1.0080 0 + 2379 P1 154 GLU HB2 HA 0.090000 1.0080 0 + 2380 P1 154 GLU CG CT2 -0.280000 12.0110 0 + 2381 P1 154 GLU HG1 HA 0.090000 1.0080 0 + 2382 P1 154 GLU HG2 HA 0.090000 1.0080 0 + 2383 P1 154 GLU CD CC 0.620000 12.0110 0 + 2384 P1 154 GLU OE1 OC -0.760000 15.9990 0 + 2385 P1 154 GLU OE2 OC -0.760000 15.9990 0 + 2386 P1 154 GLU C C 0.510000 12.0110 0 + 2387 P1 154 GLU O O -0.510000 15.9990 0 + 2388 P1 155 ILE N NH1 -0.470000 14.0070 0 + 2389 P1 155 ILE HN H 0.310000 1.0080 0 + 2390 P1 155 ILE CA CT1 0.070000 12.0110 0 + 2391 P1 155 ILE HA HB 0.090000 1.0080 0 + 2392 P1 155 ILE CB CT1 -0.090000 12.0110 0 + 2393 P1 155 ILE HB HA 0.090000 1.0080 0 + 2394 P1 155 ILE CG2 CT3 -0.270000 12.0110 0 + 2395 P1 155 ILE HG21 HA 0.090000 1.0080 0 + 2396 P1 155 ILE HG22 HA 0.090000 1.0080 0 + 2397 P1 155 ILE HG23 HA 0.090000 1.0080 0 + 2398 P1 155 ILE CG1 CT2 -0.180000 12.0110 0 + 2399 P1 155 ILE HG11 HA 0.090000 1.0080 0 + 2400 P1 155 ILE HG12 HA 0.090000 1.0080 0 + 2401 P1 155 ILE CD CT3 -0.270000 12.0110 0 + 2402 P1 155 ILE HD1 HA 0.090000 1.0080 0 + 2403 P1 155 ILE HD2 HA 0.090000 1.0080 0 + 2404 P1 155 ILE HD3 HA 0.090000 1.0080 0 + 2405 P1 155 ILE C C 0.510000 12.0110 0 + 2406 P1 155 ILE O O -0.510000 15.9990 0 + 2407 P1 156 LEU N NH1 -0.470000 14.0070 0 + 2408 P1 156 LEU HN H 0.310000 1.0080 0 + 2409 P1 156 LEU CA CT1 0.070000 12.0110 0 + 2410 P1 156 LEU HA HB 0.090000 1.0080 0 + 2411 P1 156 LEU CB CT2 -0.180000 12.0110 0 + 2412 P1 156 LEU HB1 HA 0.090000 1.0080 0 + 2413 P1 156 LEU HB2 HA 0.090000 1.0080 0 + 2414 P1 156 LEU CG CT1 -0.090000 12.0110 0 + 2415 P1 156 LEU HG HA 0.090000 1.0080 0 + 2416 P1 156 LEU CD1 CT3 -0.270000 12.0110 0 + 2417 P1 156 LEU HD11 HA 0.090000 1.0080 0 + 2418 P1 156 LEU HD12 HA 0.090000 1.0080 0 + 2419 P1 156 LEU HD13 HA 0.090000 1.0080 0 + 2420 P1 156 LEU CD2 CT3 -0.270000 12.0110 0 + 2421 P1 156 LEU HD21 HA 0.090000 1.0080 0 + 2422 P1 156 LEU HD22 HA 0.090000 1.0080 0 + 2423 P1 156 LEU HD23 HA 0.090000 1.0080 0 + 2424 P1 156 LEU C C 0.510000 12.0110 0 + 2425 P1 156 LEU O O -0.510000 15.9990 0 + 2426 P1 157 GLU N NH1 -0.470000 14.0070 0 + 2427 P1 157 GLU HN H 0.310000 1.0080 0 + 2428 P1 157 GLU CA CT1 0.070000 12.0110 0 + 2429 P1 157 GLU HA HB 0.090000 1.0080 0 + 2430 P1 157 GLU CB CT2 -0.180000 12.0110 0 + 2431 P1 157 GLU HB1 HA 0.090000 1.0080 0 + 2432 P1 157 GLU HB2 HA 0.090000 1.0080 0 + 2433 P1 157 GLU CG CT2 -0.280000 12.0110 0 + 2434 P1 157 GLU HG1 HA 0.090000 1.0080 0 + 2435 P1 157 GLU HG2 HA 0.090000 1.0080 0 + 2436 P1 157 GLU CD CC 0.620000 12.0110 0 + 2437 P1 157 GLU OE1 OC -0.760000 15.9990 0 + 2438 P1 157 GLU OE2 OC -0.760000 15.9990 0 + 2439 P1 157 GLU C C 0.510000 12.0110 0 + 2440 P1 157 GLU O O -0.510000 15.9990 0 + 2441 P1 158 ARG N NH1 -0.470000 14.0070 0 + 2442 P1 158 ARG HN H 0.310000 1.0080 0 + 2443 P1 158 ARG CA CT1 0.070000 12.0110 0 + 2444 P1 158 ARG HA HB 0.090000 1.0080 0 + 2445 P1 158 ARG CB CT2 -0.180000 12.0110 0 + 2446 P1 158 ARG HB1 HA 0.090000 1.0080 0 + 2447 P1 158 ARG HB2 HA 0.090000 1.0080 0 + 2448 P1 158 ARG CG CT2 -0.180000 12.0110 0 + 2449 P1 158 ARG HG1 HA 0.090000 1.0080 0 + 2450 P1 158 ARG HG2 HA 0.090000 1.0080 0 + 2451 P1 158 ARG CD CT2 0.200000 12.0110 0 + 2452 P1 158 ARG HD1 HA 0.090000 1.0080 0 + 2453 P1 158 ARG HD2 HA 0.090000 1.0080 0 + 2454 P1 158 ARG NE NC2 -0.700000 14.0070 0 + 2455 P1 158 ARG HE HC 0.440000 1.0080 0 + 2456 P1 158 ARG CZ C 0.640000 12.0110 0 + 2457 P1 158 ARG NH1 NC2 -0.800000 14.0070 0 + 2458 P1 158 ARG HH11 HC 0.460000 1.0080 0 + 2459 P1 158 ARG HH12 HC 0.460000 1.0080 0 + 2460 P1 158 ARG NH2 NC2 -0.800000 14.0070 0 + 2461 P1 158 ARG HH21 HC 0.460000 1.0080 0 + 2462 P1 158 ARG HH22 HC 0.460000 1.0080 0 + 2463 P1 158 ARG C C 0.510000 12.0110 0 + 2464 P1 158 ARG O O -0.510000 15.9990 0 + 2465 P1 159 ARG C CC 0.340000 12.0110 0 + 2466 P1 159 ARG OT1 OC -0.670000 15.9990 0 + 2467 P1 159 ARG OT2 OC -0.670000 15.9990 0 + 2468 P1 159 ARG N NH1 -0.470000 14.0070 0 + 2469 P1 159 ARG HN H 0.310000 1.0080 0 + 2470 P1 159 ARG CA CT1 0.070000 12.0110 0 + 2471 P1 159 ARG HA HB 0.090000 1.0080 0 + 2472 P1 159 ARG CB CT2 -0.180000 12.0110 0 + 2473 P1 159 ARG HB1 HA 0.090000 1.0080 0 + 2474 P1 159 ARG HB2 HA 0.090000 1.0080 0 + 2475 P1 159 ARG CG CT2 -0.180000 12.0110 0 + 2476 P1 159 ARG HG1 HA 0.090000 1.0080 0 + 2477 P1 159 ARG HG2 HA 0.090000 1.0080 0 + 2478 P1 159 ARG CD CT2 0.200000 12.0110 0 + 2479 P1 159 ARG HD1 HA 0.090000 1.0080 0 + 2480 P1 159 ARG HD2 HA 0.090000 1.0080 0 + 2481 P1 159 ARG NE NC2 -0.700000 14.0070 0 + 2482 P1 159 ARG HE HC 0.440000 1.0080 0 + 2483 P1 159 ARG CZ C 0.640000 12.0110 0 + 2484 P1 159 ARG NH1 NC2 -0.800000 14.0070 0 + 2485 P1 159 ARG HH11 HC 0.460000 1.0080 0 + 2486 P1 159 ARG HH12 HC 0.460000 1.0080 0 + 2487 P1 159 ARG NH2 NC2 -0.800000 14.0070 0 + 2488 P1 159 ARG HH21 HC 0.460000 1.0080 0 + 2489 P1 159 ARG HH22 HC 0.460000 1.0080 0 + 2490 W1 1 TIP3 OH2 OT -0.834000 15.9994 0 + 2491 W1 1 TIP3 H1 HT 0.417000 1.0080 0 + 2492 W1 1 TIP3 H2 HT 0.417000 1.0080 0 + 2493 W1 2 TIP3 OH2 OT -0.834000 15.9994 0 + 2494 W1 2 TIP3 H1 HT 0.417000 1.0080 0 + 2495 W1 2 TIP3 H2 HT 0.417000 1.0080 0 + 2496 W1 3 TIP3 OH2 OT -0.834000 15.9994 0 + 2497 W1 3 TIP3 H1 HT 0.417000 1.0080 0 + 2498 W1 3 TIP3 H2 HT 0.417000 1.0080 0 + 2499 W1 4 TIP3 OH2 OT -0.834000 15.9994 0 + 2500 W1 4 TIP3 H1 HT 0.417000 1.0080 0 + 2501 W1 4 TIP3 H2 HT 0.417000 1.0080 0 + 2502 W1 5 TIP3 OH2 OT -0.834000 15.9994 0 + 2503 W1 5 TIP3 H1 HT 0.417000 1.0080 0 + 2504 W1 5 TIP3 H2 HT 0.417000 1.0080 0 + 2505 W1 6 TIP3 OH2 OT -0.834000 15.9994 0 + 2506 W1 6 TIP3 H1 HT 0.417000 1.0080 0 + 2507 W1 6 TIP3 H2 HT 0.417000 1.0080 0 + 2508 W1 7 TIP3 OH2 OT -0.834000 15.9994 0 + 2509 W1 7 TIP3 H1 HT 0.417000 1.0080 0 + 2510 W1 7 TIP3 H2 HT 0.417000 1.0080 0 + 2511 W1 8 TIP3 OH2 OT -0.834000 15.9994 0 + 2512 W1 8 TIP3 H1 HT 0.417000 1.0080 0 + 2513 W1 8 TIP3 H2 HT 0.417000 1.0080 0 + 2514 W1 9 TIP3 OH2 OT -0.834000 15.9994 0 + 2515 W1 9 TIP3 H1 HT 0.417000 1.0080 0 + 2516 W1 9 TIP3 H2 HT 0.417000 1.0080 0 + 2517 W1 10 TIP3 OH2 OT -0.834000 15.9994 0 + 2518 W1 10 TIP3 H1 HT 0.417000 1.0080 0 + 2519 W1 10 TIP3 H2 HT 0.417000 1.0080 0 + 2520 W1 11 TIP3 OH2 OT -0.834000 15.9994 0 + 2521 W1 11 TIP3 H1 HT 0.417000 1.0080 0 + 2522 W1 11 TIP3 H2 HT 0.417000 1.0080 0 + 2523 W1 12 TIP3 OH2 OT -0.834000 15.9994 0 + 2524 W1 12 TIP3 H1 HT 0.417000 1.0080 0 + 2525 W1 12 TIP3 H2 HT 0.417000 1.0080 0 + 2526 W1 13 TIP3 OH2 OT -0.834000 15.9994 0 + 2527 W1 13 TIP3 H1 HT 0.417000 1.0080 0 + 2528 W1 13 TIP3 H2 HT 0.417000 1.0080 0 + 2529 W1 14 TIP3 OH2 OT -0.834000 15.9994 0 + 2530 W1 14 TIP3 H1 HT 0.417000 1.0080 0 + 2531 W1 14 TIP3 H2 HT 0.417000 1.0080 0 + 2532 W1 15 TIP3 OH2 OT -0.834000 15.9994 0 + 2533 W1 15 TIP3 H1 HT 0.417000 1.0080 0 + 2534 W1 15 TIP3 H2 HT 0.417000 1.0080 0 + 2535 W1 16 TIP3 OH2 OT -0.834000 15.9994 0 + 2536 W1 16 TIP3 H1 HT 0.417000 1.0080 0 + 2537 W1 16 TIP3 H2 HT 0.417000 1.0080 0 + 2538 W1 17 TIP3 OH2 OT -0.834000 15.9994 0 + 2539 W1 17 TIP3 H1 HT 0.417000 1.0080 0 + 2540 W1 17 TIP3 H2 HT 0.417000 1.0080 0 + 2541 W1 18 TIP3 OH2 OT -0.834000 15.9994 0 + 2542 W1 18 TIP3 H1 HT 0.417000 1.0080 0 + 2543 W1 18 TIP3 H2 HT 0.417000 1.0080 0 + 2544 W1 19 TIP3 OH2 OT -0.834000 15.9994 0 + 2545 W1 19 TIP3 H1 HT 0.417000 1.0080 0 + 2546 W1 19 TIP3 H2 HT 0.417000 1.0080 0 + 2547 W1 20 TIP3 OH2 OT -0.834000 15.9994 0 + 2548 W1 20 TIP3 H1 HT 0.417000 1.0080 0 + 2549 W1 20 TIP3 H2 HT 0.417000 1.0080 0 + 2550 W1 21 TIP3 OH2 OT -0.834000 15.9994 0 + 2551 W1 21 TIP3 H1 HT 0.417000 1.0080 0 + 2552 W1 21 TIP3 H2 HT 0.417000 1.0080 0 + 2553 W1 22 TIP3 OH2 OT -0.834000 15.9994 0 + 2554 W1 22 TIP3 H1 HT 0.417000 1.0080 0 + 2555 W1 22 TIP3 H2 HT 0.417000 1.0080 0 + 2556 W1 23 TIP3 OH2 OT -0.834000 15.9994 0 + 2557 W1 23 TIP3 H1 HT 0.417000 1.0080 0 + 2558 W1 23 TIP3 H2 HT 0.417000 1.0080 0 + 2559 W1 24 TIP3 OH2 OT -0.834000 15.9994 0 + 2560 W1 24 TIP3 H1 HT 0.417000 1.0080 0 + 2561 W1 24 TIP3 H2 HT 0.417000 1.0080 0 + 2562 W1 25 TIP3 OH2 OT -0.834000 15.9994 0 + 2563 W1 25 TIP3 H1 HT 0.417000 1.0080 0 + 2564 W1 25 TIP3 H2 HT 0.417000 1.0080 0 + 2565 W1 26 TIP3 OH2 OT -0.834000 15.9994 0 + 2566 W1 26 TIP3 H1 HT 0.417000 1.0080 0 + 2567 W1 26 TIP3 H2 HT 0.417000 1.0080 0 + 2568 W1 27 TIP3 OH2 OT -0.834000 15.9994 0 + 2569 W1 27 TIP3 H1 HT 0.417000 1.0080 0 + 2570 W1 27 TIP3 H2 HT 0.417000 1.0080 0 + 2571 W1 28 TIP3 OH2 OT -0.834000 15.9994 0 + 2572 W1 28 TIP3 H1 HT 0.417000 1.0080 0 + 2573 W1 28 TIP3 H2 HT 0.417000 1.0080 0 + 2574 W1 29 TIP3 OH2 OT -0.834000 15.9994 0 + 2575 W1 29 TIP3 H1 HT 0.417000 1.0080 0 + 2576 W1 29 TIP3 H2 HT 0.417000 1.0080 0 + 2577 W1 30 TIP3 OH2 OT -0.834000 15.9994 0 + 2578 W1 30 TIP3 H1 HT 0.417000 1.0080 0 + 2579 W1 30 TIP3 H2 HT 0.417000 1.0080 0 + 2580 W1 31 TIP3 OH2 OT -0.834000 15.9994 0 + 2581 W1 31 TIP3 H1 HT 0.417000 1.0080 0 + 2582 W1 31 TIP3 H2 HT 0.417000 1.0080 0 + 2583 W1 32 TIP3 OH2 OT -0.834000 15.9994 0 + 2584 W1 32 TIP3 H1 HT 0.417000 1.0080 0 + 2585 W1 32 TIP3 H2 HT 0.417000 1.0080 0 + 2586 W1 33 TIP3 OH2 OT -0.834000 15.9994 0 + 2587 W1 33 TIP3 H1 HT 0.417000 1.0080 0 + 2588 W1 33 TIP3 H2 HT 0.417000 1.0080 0 + 2589 W1 34 TIP3 OH2 OT -0.834000 15.9994 0 + 2590 W1 34 TIP3 H1 HT 0.417000 1.0080 0 + 2591 W1 34 TIP3 H2 HT 0.417000 1.0080 0 + 2592 W1 35 TIP3 OH2 OT -0.834000 15.9994 0 + 2593 W1 35 TIP3 H1 HT 0.417000 1.0080 0 + 2594 W1 35 TIP3 H2 HT 0.417000 1.0080 0 + 2595 W1 36 TIP3 OH2 OT -0.834000 15.9994 0 + 2596 W1 36 TIP3 H1 HT 0.417000 1.0080 0 + 2597 W1 36 TIP3 H2 HT 0.417000 1.0080 0 + 2598 W1 37 TIP3 OH2 OT -0.834000 15.9994 0 + 2599 W1 37 TIP3 H1 HT 0.417000 1.0080 0 + 2600 W1 37 TIP3 H2 HT 0.417000 1.0080 0 + 2601 W1 38 TIP3 OH2 OT -0.834000 15.9994 0 + 2602 W1 38 TIP3 H1 HT 0.417000 1.0080 0 + 2603 W1 38 TIP3 H2 HT 0.417000 1.0080 0 + 2604 W1 39 TIP3 OH2 OT -0.834000 15.9994 0 + 2605 W1 39 TIP3 H1 HT 0.417000 1.0080 0 + 2606 W1 39 TIP3 H2 HT 0.417000 1.0080 0 + 2607 W1 40 TIP3 OH2 OT -0.834000 15.9994 0 + 2608 W1 40 TIP3 H1 HT 0.417000 1.0080 0 + 2609 W1 40 TIP3 H2 HT 0.417000 1.0080 0 + 2610 W1 41 TIP3 OH2 OT -0.834000 15.9994 0 + 2611 W1 41 TIP3 H1 HT 0.417000 1.0080 0 + 2612 W1 41 TIP3 H2 HT 0.417000 1.0080 0 + 2613 W1 42 TIP3 OH2 OT -0.834000 15.9994 0 + 2614 W1 42 TIP3 H1 HT 0.417000 1.0080 0 + 2615 W1 42 TIP3 H2 HT 0.417000 1.0080 0 + 2616 W1 43 TIP3 OH2 OT -0.834000 15.9994 0 + 2617 W1 43 TIP3 H1 HT 0.417000 1.0080 0 + 2618 W1 43 TIP3 H2 HT 0.417000 1.0080 0 + 2619 W1 44 TIP3 OH2 OT -0.834000 15.9994 0 + 2620 W1 44 TIP3 H1 HT 0.417000 1.0080 0 + 2621 W1 44 TIP3 H2 HT 0.417000 1.0080 0 + 2622 W1 45 TIP3 OH2 OT -0.834000 15.9994 0 + 2623 W1 45 TIP3 H1 HT 0.417000 1.0080 0 + 2624 W1 45 TIP3 H2 HT 0.417000 1.0080 0 + 2625 W1 46 TIP3 OH2 OT -0.834000 15.9994 0 + 2626 W1 46 TIP3 H1 HT 0.417000 1.0080 0 + 2627 W1 46 TIP3 H2 HT 0.417000 1.0080 0 + 2628 W1 47 TIP3 OH2 OT -0.834000 15.9994 0 + 2629 W1 47 TIP3 H1 HT 0.417000 1.0080 0 + 2630 W1 47 TIP3 H2 HT 0.417000 1.0080 0 + 2631 W1 48 TIP3 OH2 OT -0.834000 15.9994 0 + 2632 W1 48 TIP3 H1 HT 0.417000 1.0080 0 + 2633 W1 48 TIP3 H2 HT 0.417000 1.0080 0 + 2634 W1 49 TIP3 OH2 OT -0.834000 15.9994 0 + 2635 W1 49 TIP3 H1 HT 0.417000 1.0080 0 + 2636 W1 49 TIP3 H2 HT 0.417000 1.0080 0 + 2637 W1 50 TIP3 OH2 OT -0.834000 15.9994 0 + 2638 W1 50 TIP3 H1 HT 0.417000 1.0080 0 + 2639 W1 50 TIP3 H2 HT 0.417000 1.0080 0 + 2640 W1 51 TIP3 OH2 OT -0.834000 15.9994 0 + 2641 W1 51 TIP3 H1 HT 0.417000 1.0080 0 + 2642 W1 51 TIP3 H2 HT 0.417000 1.0080 0 + 2643 W1 52 TIP3 OH2 OT -0.834000 15.9994 0 + 2644 W1 52 TIP3 H1 HT 0.417000 1.0080 0 + 2645 W1 52 TIP3 H2 HT 0.417000 1.0080 0 + 2646 W1 53 TIP3 OH2 OT -0.834000 15.9994 0 + 2647 W1 53 TIP3 H1 HT 0.417000 1.0080 0 + 2648 W1 53 TIP3 H2 HT 0.417000 1.0080 0 + 2649 W1 54 TIP3 OH2 OT -0.834000 15.9994 0 + 2650 W1 54 TIP3 H1 HT 0.417000 1.0080 0 + 2651 W1 54 TIP3 H2 HT 0.417000 1.0080 0 + 2652 W1 55 TIP3 OH2 OT -0.834000 15.9994 0 + 2653 W1 55 TIP3 H1 HT 0.417000 1.0080 0 + 2654 W1 55 TIP3 H2 HT 0.417000 1.0080 0 + 2655 W1 56 TIP3 OH2 OT -0.834000 15.9994 0 + 2656 W1 56 TIP3 H1 HT 0.417000 1.0080 0 + 2657 W1 56 TIP3 H2 HT 0.417000 1.0080 0 + 2658 W1 57 TIP3 OH2 OT -0.834000 15.9994 0 + 2659 W1 57 TIP3 H1 HT 0.417000 1.0080 0 + 2660 W1 57 TIP3 H2 HT 0.417000 1.0080 0 + 2661 W1 58 TIP3 OH2 OT -0.834000 15.9994 0 + 2662 W1 58 TIP3 H1 HT 0.417000 1.0080 0 + 2663 W1 58 TIP3 H2 HT 0.417000 1.0080 0 + 2664 W1 59 TIP3 OH2 OT -0.834000 15.9994 0 + 2665 W1 59 TIP3 H1 HT 0.417000 1.0080 0 + 2666 W1 59 TIP3 H2 HT 0.417000 1.0080 0 + 2667 W1 60 TIP3 OH2 OT -0.834000 15.9994 0 + 2668 W1 60 TIP3 H1 HT 0.417000 1.0080 0 + 2669 W1 60 TIP3 H2 HT 0.417000 1.0080 0 + 2670 W1 61 TIP3 OH2 OT -0.834000 15.9994 0 + 2671 W1 61 TIP3 H1 HT 0.417000 1.0080 0 + 2672 W1 61 TIP3 H2 HT 0.417000 1.0080 0 + 2673 W1 62 TIP3 OH2 OT -0.834000 15.9994 0 + 2674 W1 62 TIP3 H1 HT 0.417000 1.0080 0 + 2675 W1 62 TIP3 H2 HT 0.417000 1.0080 0 + 2676 W1 63 TIP3 OH2 OT -0.834000 15.9994 0 + 2677 W1 63 TIP3 H1 HT 0.417000 1.0080 0 + 2678 W1 63 TIP3 H2 HT 0.417000 1.0080 0 + 2679 W1 64 TIP3 OH2 OT -0.834000 15.9994 0 + 2680 W1 64 TIP3 H1 HT 0.417000 1.0080 0 + 2681 W1 64 TIP3 H2 HT 0.417000 1.0080 0 + 2682 W1 65 TIP3 OH2 OT -0.834000 15.9994 0 + 2683 W1 65 TIP3 H1 HT 0.417000 1.0080 0 + 2684 W1 65 TIP3 H2 HT 0.417000 1.0080 0 + 2685 W1 66 TIP3 OH2 OT -0.834000 15.9994 0 + 2686 W1 66 TIP3 H1 HT 0.417000 1.0080 0 + 2687 W1 66 TIP3 H2 HT 0.417000 1.0080 0 + 2688 W1 67 TIP3 OH2 OT -0.834000 15.9994 0 + 2689 W1 67 TIP3 H1 HT 0.417000 1.0080 0 + 2690 W1 67 TIP3 H2 HT 0.417000 1.0080 0 + 2691 W1 68 TIP3 OH2 OT -0.834000 15.9994 0 + 2692 W1 68 TIP3 H1 HT 0.417000 1.0080 0 + 2693 W1 68 TIP3 H2 HT 0.417000 1.0080 0 + 2694 W1 69 TIP3 OH2 OT -0.834000 15.9994 0 + 2695 W1 69 TIP3 H1 HT 0.417000 1.0080 0 + 2696 W1 69 TIP3 H2 HT 0.417000 1.0080 0 + 2697 W1 70 TIP3 OH2 OT -0.834000 15.9994 0 + 2698 W1 70 TIP3 H1 HT 0.417000 1.0080 0 + 2699 W1 70 TIP3 H2 HT 0.417000 1.0080 0 + 2700 W1 71 TIP3 OH2 OT -0.834000 15.9994 0 + 2701 W1 71 TIP3 H1 HT 0.417000 1.0080 0 + 2702 W1 71 TIP3 H2 HT 0.417000 1.0080 0 + 2703 W1 72 TIP3 OH2 OT -0.834000 15.9994 0 + 2704 W1 72 TIP3 H1 HT 0.417000 1.0080 0 + 2705 W1 72 TIP3 H2 HT 0.417000 1.0080 0 + 2706 W1 73 TIP3 OH2 OT -0.834000 15.9994 0 + 2707 W1 73 TIP3 H1 HT 0.417000 1.0080 0 + 2708 W1 73 TIP3 H2 HT 0.417000 1.0080 0 + 2709 W1 74 TIP3 OH2 OT -0.834000 15.9994 0 + 2710 W1 74 TIP3 H1 HT 0.417000 1.0080 0 + 2711 W1 74 TIP3 H2 HT 0.417000 1.0080 0 + 2712 W1 75 TIP3 OH2 OT -0.834000 15.9994 0 + 2713 W1 75 TIP3 H1 HT 0.417000 1.0080 0 + 2714 W1 75 TIP3 H2 HT 0.417000 1.0080 0 + 2715 W1 76 TIP3 OH2 OT -0.834000 15.9994 0 + 2716 W1 76 TIP3 H1 HT 0.417000 1.0080 0 + 2717 W1 76 TIP3 H2 HT 0.417000 1.0080 0 + 2718 W1 77 TIP3 OH2 OT -0.834000 15.9994 0 + 2719 W1 77 TIP3 H1 HT 0.417000 1.0080 0 + 2720 W1 77 TIP3 H2 HT 0.417000 1.0080 0 + 2721 W1 78 TIP3 OH2 OT -0.834000 15.9994 0 + 2722 W1 78 TIP3 H1 HT 0.417000 1.0080 0 + 2723 W1 78 TIP3 H2 HT 0.417000 1.0080 0 + 2724 W1 79 TIP3 OH2 OT -0.834000 15.9994 0 + 2725 W1 79 TIP3 H1 HT 0.417000 1.0080 0 + 2726 W1 79 TIP3 H2 HT 0.417000 1.0080 0 + 2727 W1 80 TIP3 OH2 OT -0.834000 15.9994 0 + 2728 W1 80 TIP3 H1 HT 0.417000 1.0080 0 + 2729 W1 80 TIP3 H2 HT 0.417000 1.0080 0 + 2730 W1 81 TIP3 OH2 OT -0.834000 15.9994 0 + 2731 W1 81 TIP3 H1 HT 0.417000 1.0080 0 + 2732 W1 81 TIP3 H2 HT 0.417000 1.0080 0 + 2733 W1 82 TIP3 OH2 OT -0.834000 15.9994 0 + 2734 W1 82 TIP3 H1 HT 0.417000 1.0080 0 + 2735 W1 82 TIP3 H2 HT 0.417000 1.0080 0 + 2736 W1 83 TIP3 OH2 OT -0.834000 15.9994 0 + 2737 W1 83 TIP3 H1 HT 0.417000 1.0080 0 + 2738 W1 83 TIP3 H2 HT 0.417000 1.0080 0 + 2739 W1 84 TIP3 OH2 OT -0.834000 15.9994 0 + 2740 W1 84 TIP3 H1 HT 0.417000 1.0080 0 + 2741 W1 84 TIP3 H2 HT 0.417000 1.0080 0 + 2742 W1 85 TIP3 OH2 OT -0.834000 15.9994 0 + 2743 W1 85 TIP3 H1 HT 0.417000 1.0080 0 + 2744 W1 85 TIP3 H2 HT 0.417000 1.0080 0 + 2745 W1 86 TIP3 OH2 OT -0.834000 15.9994 0 + 2746 W1 86 TIP3 H1 HT 0.417000 1.0080 0 + 2747 W1 86 TIP3 H2 HT 0.417000 1.0080 0 + 2748 W1 87 TIP3 OH2 OT -0.834000 15.9994 0 + 2749 W1 87 TIP3 H1 HT 0.417000 1.0080 0 + 2750 W1 87 TIP3 H2 HT 0.417000 1.0080 0 + 2751 W1 88 TIP3 OH2 OT -0.834000 15.9994 0 + 2752 W1 88 TIP3 H1 HT 0.417000 1.0080 0 + 2753 W1 88 TIP3 H2 HT 0.417000 1.0080 0 + 2754 W1 89 TIP3 OH2 OT -0.834000 15.9994 0 + 2755 W1 89 TIP3 H1 HT 0.417000 1.0080 0 + 2756 W1 89 TIP3 H2 HT 0.417000 1.0080 0 + 2757 W1 90 TIP3 OH2 OT -0.834000 15.9994 0 + 2758 W1 90 TIP3 H1 HT 0.417000 1.0080 0 + 2759 W1 90 TIP3 H2 HT 0.417000 1.0080 0 + 2760 W1 91 TIP3 OH2 OT -0.834000 15.9994 0 + 2761 W1 91 TIP3 H1 HT 0.417000 1.0080 0 + 2762 W1 91 TIP3 H2 HT 0.417000 1.0080 0 + 2763 W1 92 TIP3 OH2 OT -0.834000 15.9994 0 + 2764 W1 92 TIP3 H1 HT 0.417000 1.0080 0 + 2765 W1 92 TIP3 H2 HT 0.417000 1.0080 0 + 2766 W1 93 TIP3 OH2 OT -0.834000 15.9994 0 + 2767 W1 93 TIP3 H1 HT 0.417000 1.0080 0 + 2768 W1 93 TIP3 H2 HT 0.417000 1.0080 0 + 2769 W1 94 TIP3 OH2 OT -0.834000 15.9994 0 + 2770 W1 94 TIP3 H1 HT 0.417000 1.0080 0 + 2771 W1 94 TIP3 H2 HT 0.417000 1.0080 0 + 2772 W1 95 TIP3 OH2 OT -0.834000 15.9994 0 + 2773 W1 95 TIP3 H1 HT 0.417000 1.0080 0 + 2774 W1 95 TIP3 H2 HT 0.417000 1.0080 0 + 2775 W1 96 TIP3 OH2 OT -0.834000 15.9994 0 + 2776 W1 96 TIP3 H1 HT 0.417000 1.0080 0 + 2777 W1 96 TIP3 H2 HT 0.417000 1.0080 0 + 2778 W1 97 TIP3 OH2 OT -0.834000 15.9994 0 + 2779 W1 97 TIP3 H1 HT 0.417000 1.0080 0 + 2780 W1 97 TIP3 H2 HT 0.417000 1.0080 0 + 2781 W1 98 TIP3 OH2 OT -0.834000 15.9994 0 + 2782 W1 98 TIP3 H1 HT 0.417000 1.0080 0 + 2783 W1 98 TIP3 H2 HT 0.417000 1.0080 0 + 2784 W1 99 TIP3 OH2 OT -0.834000 15.9994 0 + 2785 W1 99 TIP3 H1 HT 0.417000 1.0080 0 + 2786 W1 99 TIP3 H2 HT 0.417000 1.0080 0 + 2787 W1 100 TIP3 OH2 OT -0.834000 15.9994 0 + 2788 W1 100 TIP3 H1 HT 0.417000 1.0080 0 + 2789 W1 100 TIP3 H2 HT 0.417000 1.0080 0 + 2790 W1 101 TIP3 OH2 OT -0.834000 15.9994 0 + 2791 W1 101 TIP3 H1 HT 0.417000 1.0080 0 + 2792 W1 101 TIP3 H2 HT 0.417000 1.0080 0 + 2793 W1 102 TIP3 OH2 OT -0.834000 15.9994 0 + 2794 W1 102 TIP3 H1 HT 0.417000 1.0080 0 + 2795 W1 102 TIP3 H2 HT 0.417000 1.0080 0 + 2796 W1 103 TIP3 OH2 OT -0.834000 15.9994 0 + 2797 W1 103 TIP3 H1 HT 0.417000 1.0080 0 + 2798 W1 103 TIP3 H2 HT 0.417000 1.0080 0 + 2799 W1 104 TIP3 OH2 OT -0.834000 15.9994 0 + 2800 W1 104 TIP3 H1 HT 0.417000 1.0080 0 + 2801 W1 104 TIP3 H2 HT 0.417000 1.0080 0 + 2802 W1 105 TIP3 OH2 OT -0.834000 15.9994 0 + 2803 W1 105 TIP3 H1 HT 0.417000 1.0080 0 + 2804 W1 105 TIP3 H2 HT 0.417000 1.0080 0 + 2805 W1 106 TIP3 OH2 OT -0.834000 15.9994 0 + 2806 W1 106 TIP3 H1 HT 0.417000 1.0080 0 + 2807 W1 106 TIP3 H2 HT 0.417000 1.0080 0 + 2808 W1 107 TIP3 OH2 OT -0.834000 15.9994 0 + 2809 W1 107 TIP3 H1 HT 0.417000 1.0080 0 + 2810 W1 107 TIP3 H2 HT 0.417000 1.0080 0 + 2811 W1 108 TIP3 OH2 OT -0.834000 15.9994 0 + 2812 W1 108 TIP3 H1 HT 0.417000 1.0080 0 + 2813 W1 108 TIP3 H2 HT 0.417000 1.0080 0 + 2814 W1 109 TIP3 OH2 OT -0.834000 15.9994 0 + 2815 W1 109 TIP3 H1 HT 0.417000 1.0080 0 + 2816 W1 109 TIP3 H2 HT 0.417000 1.0080 0 + 2817 W1 110 TIP3 OH2 OT -0.834000 15.9994 0 + 2818 W1 110 TIP3 H1 HT 0.417000 1.0080 0 + 2819 W1 110 TIP3 H2 HT 0.417000 1.0080 0 + 2820 W1 111 TIP3 OH2 OT -0.834000 15.9994 0 + 2821 W1 111 TIP3 H1 HT 0.417000 1.0080 0 + 2822 W1 111 TIP3 H2 HT 0.417000 1.0080 0 + 2823 W1 112 TIP3 OH2 OT -0.834000 15.9994 0 + 2824 W1 112 TIP3 H1 HT 0.417000 1.0080 0 + 2825 W1 112 TIP3 H2 HT 0.417000 1.0080 0 + 2826 W1 113 TIP3 OH2 OT -0.834000 15.9994 0 + 2827 W1 113 TIP3 H1 HT 0.417000 1.0080 0 + 2828 W1 113 TIP3 H2 HT 0.417000 1.0080 0 + 2829 W1 114 TIP3 OH2 OT -0.834000 15.9994 0 + 2830 W1 114 TIP3 H1 HT 0.417000 1.0080 0 + 2831 W1 114 TIP3 H2 HT 0.417000 1.0080 0 + 2832 W1 115 TIP3 OH2 OT -0.834000 15.9994 0 + 2833 W1 115 TIP3 H1 HT 0.417000 1.0080 0 + 2834 W1 115 TIP3 H2 HT 0.417000 1.0080 0 + 2835 W1 116 TIP3 OH2 OT -0.834000 15.9994 0 + 2836 W1 116 TIP3 H1 HT 0.417000 1.0080 0 + 2837 W1 116 TIP3 H2 HT 0.417000 1.0080 0 + 2838 W1 117 TIP3 OH2 OT -0.834000 15.9994 0 + 2839 W1 117 TIP3 H1 HT 0.417000 1.0080 0 + 2840 W1 117 TIP3 H2 HT 0.417000 1.0080 0 + 2841 W1 118 TIP3 OH2 OT -0.834000 15.9994 0 + 2842 W1 118 TIP3 H1 HT 0.417000 1.0080 0 + 2843 W1 118 TIP3 H2 HT 0.417000 1.0080 0 + 2844 W1 119 TIP3 OH2 OT -0.834000 15.9994 0 + 2845 W1 119 TIP3 H1 HT 0.417000 1.0080 0 + 2846 W1 119 TIP3 H2 HT 0.417000 1.0080 0 + 2847 W1 120 TIP3 OH2 OT -0.834000 15.9994 0 + 2848 W1 120 TIP3 H1 HT 0.417000 1.0080 0 + 2849 W1 120 TIP3 H2 HT 0.417000 1.0080 0 + 2850 W1 121 TIP3 OH2 OT -0.834000 15.9994 0 + 2851 W1 121 TIP3 H1 HT 0.417000 1.0080 0 + 2852 W1 121 TIP3 H2 HT 0.417000 1.0080 0 + 2853 W1 122 TIP3 OH2 OT -0.834000 15.9994 0 + 2854 W1 122 TIP3 H1 HT 0.417000 1.0080 0 + 2855 W1 122 TIP3 H2 HT 0.417000 1.0080 0 + 2856 W1 123 TIP3 OH2 OT -0.834000 15.9994 0 + 2857 W1 123 TIP3 H1 HT 0.417000 1.0080 0 + 2858 W1 123 TIP3 H2 HT 0.417000 1.0080 0 + 2859 W1 124 TIP3 OH2 OT -0.834000 15.9994 0 + 2860 W1 124 TIP3 H1 HT 0.417000 1.0080 0 + 2861 W1 124 TIP3 H2 HT 0.417000 1.0080 0 + 2862 W1 125 TIP3 OH2 OT -0.834000 15.9994 0 + 2863 W1 125 TIP3 H1 HT 0.417000 1.0080 0 + 2864 W1 125 TIP3 H2 HT 0.417000 1.0080 0 + 2865 W1 126 TIP3 OH2 OT -0.834000 15.9994 0 + 2866 W1 126 TIP3 H1 HT 0.417000 1.0080 0 + 2867 W1 126 TIP3 H2 HT 0.417000 1.0080 0 + 2868 W1 127 TIP3 OH2 OT -0.834000 15.9994 0 + 2869 W1 127 TIP3 H1 HT 0.417000 1.0080 0 + 2870 W1 127 TIP3 H2 HT 0.417000 1.0080 0 + 2871 W1 128 TIP3 OH2 OT -0.834000 15.9994 0 + 2872 W1 128 TIP3 H1 HT 0.417000 1.0080 0 + 2873 W1 128 TIP3 H2 HT 0.417000 1.0080 0 + 2874 W1 129 TIP3 OH2 OT -0.834000 15.9994 0 + 2875 W1 129 TIP3 H1 HT 0.417000 1.0080 0 + 2876 W1 129 TIP3 H2 HT 0.417000 1.0080 0 + 2877 W1 130 TIP3 OH2 OT -0.834000 15.9994 0 + 2878 W1 130 TIP3 H1 HT 0.417000 1.0080 0 + 2879 W1 130 TIP3 H2 HT 0.417000 1.0080 0 + 2880 W1 131 TIP3 OH2 OT -0.834000 15.9994 0 + 2881 W1 131 TIP3 H1 HT 0.417000 1.0080 0 + 2882 W1 131 TIP3 H2 HT 0.417000 1.0080 0 + 2883 W1 132 TIP3 OH2 OT -0.834000 15.9994 0 + 2884 W1 132 TIP3 H1 HT 0.417000 1.0080 0 + 2885 W1 132 TIP3 H2 HT 0.417000 1.0080 0 + 2886 W1 133 TIP3 OH2 OT -0.834000 15.9994 0 + 2887 W1 133 TIP3 H1 HT 0.417000 1.0080 0 + 2888 W1 133 TIP3 H2 HT 0.417000 1.0080 0 + 2889 W1 134 TIP3 OH2 OT -0.834000 15.9994 0 + 2890 W1 134 TIP3 H1 HT 0.417000 1.0080 0 + 2891 W1 134 TIP3 H2 HT 0.417000 1.0080 0 + 2892 W1 135 TIP3 OH2 OT -0.834000 15.9994 0 + 2893 W1 135 TIP3 H1 HT 0.417000 1.0080 0 + 2894 W1 135 TIP3 H2 HT 0.417000 1.0080 0 + 2895 W1 136 TIP3 OH2 OT -0.834000 15.9994 0 + 2896 W1 136 TIP3 H1 HT 0.417000 1.0080 0 + 2897 W1 136 TIP3 H2 HT 0.417000 1.0080 0 + 2898 W1 137 TIP3 OH2 OT -0.834000 15.9994 0 + 2899 W1 137 TIP3 H1 HT 0.417000 1.0080 0 + 2900 W1 137 TIP3 H2 HT 0.417000 1.0080 0 + 2901 W1 138 TIP3 OH2 OT -0.834000 15.9994 0 + 2902 W1 138 TIP3 H1 HT 0.417000 1.0080 0 + 2903 W1 138 TIP3 H2 HT 0.417000 1.0080 0 + 2904 W1 139 TIP3 OH2 OT -0.834000 15.9994 0 + 2905 W1 139 TIP3 H1 HT 0.417000 1.0080 0 + 2906 W1 139 TIP3 H2 HT 0.417000 1.0080 0 + 2907 W1 140 TIP3 OH2 OT -0.834000 15.9994 0 + 2908 W1 140 TIP3 H1 HT 0.417000 1.0080 0 + 2909 W1 140 TIP3 H2 HT 0.417000 1.0080 0 + 2910 W1 141 TIP3 OH2 OT -0.834000 15.9994 0 + 2911 W1 141 TIP3 H1 HT 0.417000 1.0080 0 + 2912 W1 141 TIP3 H2 HT 0.417000 1.0080 0 + 2913 W1 142 TIP3 OH2 OT -0.834000 15.9994 0 + 2914 W1 142 TIP3 H1 HT 0.417000 1.0080 0 + 2915 W1 142 TIP3 H2 HT 0.417000 1.0080 0 + 2916 W1 143 TIP3 OH2 OT -0.834000 15.9994 0 + 2917 W1 143 TIP3 H1 HT 0.417000 1.0080 0 + 2918 W1 143 TIP3 H2 HT 0.417000 1.0080 0 + 2919 W1 144 TIP3 OH2 OT -0.834000 15.9994 0 + 2920 W1 144 TIP3 H1 HT 0.417000 1.0080 0 + 2921 W1 144 TIP3 H2 HT 0.417000 1.0080 0 + 2922 W1 145 TIP3 OH2 OT -0.834000 15.9994 0 + 2923 W1 145 TIP3 H1 HT 0.417000 1.0080 0 + 2924 W1 145 TIP3 H2 HT 0.417000 1.0080 0 + 2925 W1 146 TIP3 OH2 OT -0.834000 15.9994 0 + 2926 W1 146 TIP3 H1 HT 0.417000 1.0080 0 + 2927 W1 146 TIP3 H2 HT 0.417000 1.0080 0 + 2928 W1 147 TIP3 OH2 OT -0.834000 15.9994 0 + 2929 W1 147 TIP3 H1 HT 0.417000 1.0080 0 + 2930 W1 147 TIP3 H2 HT 0.417000 1.0080 0 + 2931 W1 148 TIP3 OH2 OT -0.834000 15.9994 0 + 2932 W1 148 TIP3 H1 HT 0.417000 1.0080 0 + 2933 W1 148 TIP3 H2 HT 0.417000 1.0080 0 + 2934 W1 149 TIP3 OH2 OT -0.834000 15.9994 0 + 2935 W1 149 TIP3 H1 HT 0.417000 1.0080 0 + 2936 W1 149 TIP3 H2 HT 0.417000 1.0080 0 + 2937 W1 150 TIP3 OH2 OT -0.834000 15.9994 0 + 2938 W1 150 TIP3 H1 HT 0.417000 1.0080 0 + 2939 W1 150 TIP3 H2 HT 0.417000 1.0080 0 + 2940 W1 151 TIP3 OH2 OT -0.834000 15.9994 0 + 2941 W1 151 TIP3 H1 HT 0.417000 1.0080 0 + 2942 W1 151 TIP3 H2 HT 0.417000 1.0080 0 + 2943 W1 152 TIP3 OH2 OT -0.834000 15.9994 0 + 2944 W1 152 TIP3 H1 HT 0.417000 1.0080 0 + 2945 W1 152 TIP3 H2 HT 0.417000 1.0080 0 + 2946 W1 153 TIP3 OH2 OT -0.834000 15.9994 0 + 2947 W1 153 TIP3 H1 HT 0.417000 1.0080 0 + 2948 W1 153 TIP3 H2 HT 0.417000 1.0080 0 + 2949 W1 154 TIP3 OH2 OT -0.834000 15.9994 0 + 2950 W1 154 TIP3 H1 HT 0.417000 1.0080 0 + 2951 W1 154 TIP3 H2 HT 0.417000 1.0080 0 + 2952 W1 155 TIP3 OH2 OT -0.834000 15.9994 0 + 2953 W1 155 TIP3 H1 HT 0.417000 1.0080 0 + 2954 W1 155 TIP3 H2 HT 0.417000 1.0080 0 + 2955 W1 156 TIP3 OH2 OT -0.834000 15.9994 0 + 2956 W1 156 TIP3 H1 HT 0.417000 1.0080 0 + 2957 W1 156 TIP3 H2 HT 0.417000 1.0080 0 + 2958 W1 157 TIP3 OH2 OT -0.834000 15.9994 0 + 2959 W1 157 TIP3 H1 HT 0.417000 1.0080 0 + 2960 W1 157 TIP3 H2 HT 0.417000 1.0080 0 + 2961 W1 158 TIP3 OH2 OT -0.834000 15.9994 0 + 2962 W1 158 TIP3 H1 HT 0.417000 1.0080 0 + 2963 W1 158 TIP3 H2 HT 0.417000 1.0080 0 + 2964 W1 159 TIP3 OH2 OT -0.834000 15.9994 0 + 2965 W1 159 TIP3 H1 HT 0.417000 1.0080 0 + 2966 W1 159 TIP3 H2 HT 0.417000 1.0080 0 + 2967 W1 160 TIP3 OH2 OT -0.834000 15.9994 0 + 2968 W1 160 TIP3 H1 HT 0.417000 1.0080 0 + 2969 W1 160 TIP3 H2 HT 0.417000 1.0080 0 + 2970 W1 161 TIP3 OH2 OT -0.834000 15.9994 0 + 2971 W1 161 TIP3 H1 HT 0.417000 1.0080 0 + 2972 W1 161 TIP3 H2 HT 0.417000 1.0080 0 + 2973 W1 162 TIP3 OH2 OT -0.834000 15.9994 0 + 2974 W1 162 TIP3 H1 HT 0.417000 1.0080 0 + 2975 W1 162 TIP3 H2 HT 0.417000 1.0080 0 + 2976 W1 163 TIP3 OH2 OT -0.834000 15.9994 0 + 2977 W1 163 TIP3 H1 HT 0.417000 1.0080 0 + 2978 W1 163 TIP3 H2 HT 0.417000 1.0080 0 + 2979 W1 164 TIP3 OH2 OT -0.834000 15.9994 0 + 2980 W1 164 TIP3 H1 HT 0.417000 1.0080 0 + 2981 W1 164 TIP3 H2 HT 0.417000 1.0080 0 + 2982 W1 165 TIP3 OH2 OT -0.834000 15.9994 0 + 2983 W1 165 TIP3 H1 HT 0.417000 1.0080 0 + 2984 W1 165 TIP3 H2 HT 0.417000 1.0080 0 + 2985 W1 166 TIP3 OH2 OT -0.834000 15.9994 0 + 2986 W1 166 TIP3 H1 HT 0.417000 1.0080 0 + 2987 W1 166 TIP3 H2 HT 0.417000 1.0080 0 + 2988 W1 167 TIP3 OH2 OT -0.834000 15.9994 0 + 2989 W1 167 TIP3 H1 HT 0.417000 1.0080 0 + 2990 W1 167 TIP3 H2 HT 0.417000 1.0080 0 + 2991 W1 168 TIP3 OH2 OT -0.834000 15.9994 0 + 2992 W1 168 TIP3 H1 HT 0.417000 1.0080 0 + 2993 W1 168 TIP3 H2 HT 0.417000 1.0080 0 + 2994 W1 169 TIP3 OH2 OT -0.834000 15.9994 0 + 2995 W1 169 TIP3 H1 HT 0.417000 1.0080 0 + 2996 W1 169 TIP3 H2 HT 0.417000 1.0080 0 + 2997 W1 170 TIP3 OH2 OT -0.834000 15.9994 0 + 2998 W1 170 TIP3 H1 HT 0.417000 1.0080 0 + 2999 W1 170 TIP3 H2 HT 0.417000 1.0080 0 + 3000 W1 171 TIP3 OH2 OT -0.834000 15.9994 0 + 3001 W1 171 TIP3 H1 HT 0.417000 1.0080 0 + 3002 W1 171 TIP3 H2 HT 0.417000 1.0080 0 + 3003 W1 172 TIP3 OH2 OT -0.834000 15.9994 0 + 3004 W1 172 TIP3 H1 HT 0.417000 1.0080 0 + 3005 W1 172 TIP3 H2 HT 0.417000 1.0080 0 + 3006 W1 173 TIP3 OH2 OT -0.834000 15.9994 0 + 3007 W1 173 TIP3 H1 HT 0.417000 1.0080 0 + 3008 W1 173 TIP3 H2 HT 0.417000 1.0080 0 + 3009 W1 174 TIP3 OH2 OT -0.834000 15.9994 0 + 3010 W1 174 TIP3 H1 HT 0.417000 1.0080 0 + 3011 W1 174 TIP3 H2 HT 0.417000 1.0080 0 + 3012 W1 175 TIP3 OH2 OT -0.834000 15.9994 0 + 3013 W1 175 TIP3 H1 HT 0.417000 1.0080 0 + 3014 W1 175 TIP3 H2 HT 0.417000 1.0080 0 + 3015 W1 176 TIP3 OH2 OT -0.834000 15.9994 0 + 3016 W1 176 TIP3 H1 HT 0.417000 1.0080 0 + 3017 W1 176 TIP3 H2 HT 0.417000 1.0080 0 + 3018 W1 177 TIP3 OH2 OT -0.834000 15.9994 0 + 3019 W1 177 TIP3 H1 HT 0.417000 1.0080 0 + 3020 W1 177 TIP3 H2 HT 0.417000 1.0080 0 + 3021 W1 178 TIP3 OH2 OT -0.834000 15.9994 0 + 3022 W1 178 TIP3 H1 HT 0.417000 1.0080 0 + 3023 W1 178 TIP3 H2 HT 0.417000 1.0080 0 + 3024 W1 179 TIP3 OH2 OT -0.834000 15.9994 0 + 3025 W1 179 TIP3 H1 HT 0.417000 1.0080 0 + 3026 W1 179 TIP3 H2 HT 0.417000 1.0080 0 + 3027 W1 180 TIP3 OH2 OT -0.834000 15.9994 0 + 3028 W1 180 TIP3 H1 HT 0.417000 1.0080 0 + 3029 W1 180 TIP3 H2 HT 0.417000 1.0080 0 + 3030 W1 181 TIP3 OH2 OT -0.834000 15.9994 0 + 3031 W1 181 TIP3 H1 HT 0.417000 1.0080 0 + 3032 W1 181 TIP3 H2 HT 0.417000 1.0080 0 + 3033 W1 182 TIP3 OH2 OT -0.834000 15.9994 0 + 3034 W1 182 TIP3 H1 HT 0.417000 1.0080 0 + 3035 W1 182 TIP3 H2 HT 0.417000 1.0080 0 + 3036 W1 183 TIP3 OH2 OT -0.834000 15.9994 0 + 3037 W1 183 TIP3 H1 HT 0.417000 1.0080 0 + 3038 W1 183 TIP3 H2 HT 0.417000 1.0080 0 + 3039 W1 184 TIP3 OH2 OT -0.834000 15.9994 0 + 3040 W1 184 TIP3 H1 HT 0.417000 1.0080 0 + 3041 W1 184 TIP3 H2 HT 0.417000 1.0080 0 + 3042 W1 185 TIP3 OH2 OT -0.834000 15.9994 0 + 3043 W1 185 TIP3 H1 HT 0.417000 1.0080 0 + 3044 W1 185 TIP3 H2 HT 0.417000 1.0080 0 + 3045 W1 186 TIP3 OH2 OT -0.834000 15.9994 0 + 3046 W1 186 TIP3 H1 HT 0.417000 1.0080 0 + 3047 W1 186 TIP3 H2 HT 0.417000 1.0080 0 + 3048 W1 187 TIP3 OH2 OT -0.834000 15.9994 0 + 3049 W1 187 TIP3 H1 HT 0.417000 1.0080 0 + 3050 W1 187 TIP3 H2 HT 0.417000 1.0080 0 + 3051 W1 188 TIP3 OH2 OT -0.834000 15.9994 0 + 3052 W1 188 TIP3 H1 HT 0.417000 1.0080 0 + 3053 W1 188 TIP3 H2 HT 0.417000 1.0080 0 + 3054 W1 189 TIP3 OH2 OT -0.834000 15.9994 0 + 3055 W1 189 TIP3 H1 HT 0.417000 1.0080 0 + 3056 W1 189 TIP3 H2 HT 0.417000 1.0080 0 + 3057 W1 190 TIP3 OH2 OT -0.834000 15.9994 0 + 3058 W1 190 TIP3 H1 HT 0.417000 1.0080 0 + 3059 W1 190 TIP3 H2 HT 0.417000 1.0080 0 + 3060 W1 191 TIP3 OH2 OT -0.834000 15.9994 0 + 3061 W1 191 TIP3 H1 HT 0.417000 1.0080 0 + 3062 W1 191 TIP3 H2 HT 0.417000 1.0080 0 + 3063 W1 192 TIP3 OH2 OT -0.834000 15.9994 0 + 3064 W1 192 TIP3 H1 HT 0.417000 1.0080 0 + 3065 W1 192 TIP3 H2 HT 0.417000 1.0080 0 + 3066 W1 193 TIP3 OH2 OT -0.834000 15.9994 0 + 3067 W1 193 TIP3 H1 HT 0.417000 1.0080 0 + 3068 W1 193 TIP3 H2 HT 0.417000 1.0080 0 + 3069 W1 194 TIP3 OH2 OT -0.834000 15.9994 0 + 3070 W1 194 TIP3 H1 HT 0.417000 1.0080 0 + 3071 W1 194 TIP3 H2 HT 0.417000 1.0080 0 + 3072 W1 195 TIP3 OH2 OT -0.834000 15.9994 0 + 3073 W1 195 TIP3 H1 HT 0.417000 1.0080 0 + 3074 W1 195 TIP3 H2 HT 0.417000 1.0080 0 + 3075 W1 196 TIP3 OH2 OT -0.834000 15.9994 0 + 3076 W1 196 TIP3 H1 HT 0.417000 1.0080 0 + 3077 W1 196 TIP3 H2 HT 0.417000 1.0080 0 + 3078 W1 197 TIP3 OH2 OT -0.834000 15.9994 0 + 3079 W1 197 TIP3 H1 HT 0.417000 1.0080 0 + 3080 W1 197 TIP3 H2 HT 0.417000 1.0080 0 + 3081 W1 198 TIP3 OH2 OT -0.834000 15.9994 0 + 3082 W1 198 TIP3 H1 HT 0.417000 1.0080 0 + 3083 W1 198 TIP3 H2 HT 0.417000 1.0080 0 + 3084 W1 199 TIP3 OH2 OT -0.834000 15.9994 0 + 3085 W1 199 TIP3 H1 HT 0.417000 1.0080 0 + 3086 W1 199 TIP3 H2 HT 0.417000 1.0080 0 + 3087 W1 200 TIP3 OH2 OT -0.834000 15.9994 0 + 3088 W1 200 TIP3 H1 HT 0.417000 1.0080 0 + 3089 W1 200 TIP3 H2 HT 0.417000 1.0080 0 + 3090 W1 201 TIP3 OH2 OT -0.834000 15.9994 0 + 3091 W1 201 TIP3 H1 HT 0.417000 1.0080 0 + 3092 W1 201 TIP3 H2 HT 0.417000 1.0080 0 + 3093 W1 202 TIP3 OH2 OT -0.834000 15.9994 0 + 3094 W1 202 TIP3 H1 HT 0.417000 1.0080 0 + 3095 W1 202 TIP3 H2 HT 0.417000 1.0080 0 + 3096 W1 203 TIP3 OH2 OT -0.834000 15.9994 0 + 3097 W1 203 TIP3 H1 HT 0.417000 1.0080 0 + 3098 W1 203 TIP3 H2 HT 0.417000 1.0080 0 + 3099 W1 204 TIP3 OH2 OT -0.834000 15.9994 0 + 3100 W1 204 TIP3 H1 HT 0.417000 1.0080 0 + 3101 W1 204 TIP3 H2 HT 0.417000 1.0080 0 + 3102 W1 205 TIP3 OH2 OT -0.834000 15.9994 0 + 3103 W1 205 TIP3 H1 HT 0.417000 1.0080 0 + 3104 W1 205 TIP3 H2 HT 0.417000 1.0080 0 + 3105 W1 206 TIP3 OH2 OT -0.834000 15.9994 0 + 3106 W1 206 TIP3 H1 HT 0.417000 1.0080 0 + 3107 W1 206 TIP3 H2 HT 0.417000 1.0080 0 + 3108 W1 207 TIP3 OH2 OT -0.834000 15.9994 0 + 3109 W1 207 TIP3 H1 HT 0.417000 1.0080 0 + 3110 W1 207 TIP3 H2 HT 0.417000 1.0080 0 + 3111 W1 208 TIP3 OH2 OT -0.834000 15.9994 0 + 3112 W1 208 TIP3 H1 HT 0.417000 1.0080 0 + 3113 W1 208 TIP3 H2 HT 0.417000 1.0080 0 + 3114 W1 209 TIP3 OH2 OT -0.834000 15.9994 0 + 3115 W1 209 TIP3 H1 HT 0.417000 1.0080 0 + 3116 W1 209 TIP3 H2 HT 0.417000 1.0080 0 + 3117 W1 210 TIP3 OH2 OT -0.834000 15.9994 0 + 3118 W1 210 TIP3 H1 HT 0.417000 1.0080 0 + 3119 W1 210 TIP3 H2 HT 0.417000 1.0080 0 + 3120 W1 211 TIP3 OH2 OT -0.834000 15.9994 0 + 3121 W1 211 TIP3 H1 HT 0.417000 1.0080 0 + 3122 W1 211 TIP3 H2 HT 0.417000 1.0080 0 + 3123 W1 212 TIP3 OH2 OT -0.834000 15.9994 0 + 3124 W1 212 TIP3 H1 HT 0.417000 1.0080 0 + 3125 W1 212 TIP3 H2 HT 0.417000 1.0080 0 + 3126 W1 213 TIP3 OH2 OT -0.834000 15.9994 0 + 3127 W1 213 TIP3 H1 HT 0.417000 1.0080 0 + 3128 W1 213 TIP3 H2 HT 0.417000 1.0080 0 + 3129 W1 214 TIP3 OH2 OT -0.834000 15.9994 0 + 3130 W1 214 TIP3 H1 HT 0.417000 1.0080 0 + 3131 W1 214 TIP3 H2 HT 0.417000 1.0080 0 + 3132 W1 215 TIP3 OH2 OT -0.834000 15.9994 0 + 3133 W1 215 TIP3 H1 HT 0.417000 1.0080 0 + 3134 W1 215 TIP3 H2 HT 0.417000 1.0080 0 + 3135 W1 216 TIP3 OH2 OT -0.834000 15.9994 0 + 3136 W1 216 TIP3 H1 HT 0.417000 1.0080 0 + 3137 W1 216 TIP3 H2 HT 0.417000 1.0080 0 + 3138 W1 217 TIP3 OH2 OT -0.834000 15.9994 0 + 3139 W1 217 TIP3 H1 HT 0.417000 1.0080 0 + 3140 W1 217 TIP3 H2 HT 0.417000 1.0080 0 + 3141 W1 218 TIP3 OH2 OT -0.834000 15.9994 0 + 3142 W1 218 TIP3 H1 HT 0.417000 1.0080 0 + 3143 W1 218 TIP3 H2 HT 0.417000 1.0080 0 + 3144 W1 219 TIP3 OH2 OT -0.834000 15.9994 0 + 3145 W1 219 TIP3 H1 HT 0.417000 1.0080 0 + 3146 W1 219 TIP3 H2 HT 0.417000 1.0080 0 + 3147 W1 220 TIP3 OH2 OT -0.834000 15.9994 0 + 3148 W1 220 TIP3 H1 HT 0.417000 1.0080 0 + 3149 W1 220 TIP3 H2 HT 0.417000 1.0080 0 + 3150 W1 221 TIP3 OH2 OT -0.834000 15.9994 0 + 3151 W1 221 TIP3 H1 HT 0.417000 1.0080 0 + 3152 W1 221 TIP3 H2 HT 0.417000 1.0080 0 + 3153 W1 222 TIP3 OH2 OT -0.834000 15.9994 0 + 3154 W1 222 TIP3 H1 HT 0.417000 1.0080 0 + 3155 W1 222 TIP3 H2 HT 0.417000 1.0080 0 + 3156 W1 223 TIP3 OH2 OT -0.834000 15.9994 0 + 3157 W1 223 TIP3 H1 HT 0.417000 1.0080 0 + 3158 W1 223 TIP3 H2 HT 0.417000 1.0080 0 + 3159 W1 224 TIP3 OH2 OT -0.834000 15.9994 0 + 3160 W1 224 TIP3 H1 HT 0.417000 1.0080 0 + 3161 W1 224 TIP3 H2 HT 0.417000 1.0080 0 + 3162 W1 225 TIP3 OH2 OT -0.834000 15.9994 0 + 3163 W1 225 TIP3 H1 HT 0.417000 1.0080 0 + 3164 W1 225 TIP3 H2 HT 0.417000 1.0080 0 + 3165 W1 226 TIP3 OH2 OT -0.834000 15.9994 0 + 3166 W1 226 TIP3 H1 HT 0.417000 1.0080 0 + 3167 W1 226 TIP3 H2 HT 0.417000 1.0080 0 + 3168 W1 227 TIP3 OH2 OT -0.834000 15.9994 0 + 3169 W1 227 TIP3 H1 HT 0.417000 1.0080 0 + 3170 W1 227 TIP3 H2 HT 0.417000 1.0080 0 + 3171 W1 228 TIP3 OH2 OT -0.834000 15.9994 0 + 3172 W1 228 TIP3 H1 HT 0.417000 1.0080 0 + 3173 W1 228 TIP3 H2 HT 0.417000 1.0080 0 + 3174 W1 229 TIP3 OH2 OT -0.834000 15.9994 0 + 3175 W1 229 TIP3 H1 HT 0.417000 1.0080 0 + 3176 W1 229 TIP3 H2 HT 0.417000 1.0080 0 + 3177 W1 230 TIP3 OH2 OT -0.834000 15.9994 0 + 3178 W1 230 TIP3 H1 HT 0.417000 1.0080 0 + 3179 W1 230 TIP3 H2 HT 0.417000 1.0080 0 + 3180 W1 231 TIP3 OH2 OT -0.834000 15.9994 0 + 3181 W1 231 TIP3 H1 HT 0.417000 1.0080 0 + 3182 W1 231 TIP3 H2 HT 0.417000 1.0080 0 + 3183 W1 232 TIP3 OH2 OT -0.834000 15.9994 0 + 3184 W1 232 TIP3 H1 HT 0.417000 1.0080 0 + 3185 W1 232 TIP3 H2 HT 0.417000 1.0080 0 + 3186 W1 233 TIP3 OH2 OT -0.834000 15.9994 0 + 3187 W1 233 TIP3 H1 HT 0.417000 1.0080 0 + 3188 W1 233 TIP3 H2 HT 0.417000 1.0080 0 + 3189 W1 234 TIP3 OH2 OT -0.834000 15.9994 0 + 3190 W1 234 TIP3 H1 HT 0.417000 1.0080 0 + 3191 W1 234 TIP3 H2 HT 0.417000 1.0080 0 + 3192 W1 235 TIP3 OH2 OT -0.834000 15.9994 0 + 3193 W1 235 TIP3 H1 HT 0.417000 1.0080 0 + 3194 W1 235 TIP3 H2 HT 0.417000 1.0080 0 + 3195 W1 236 TIP3 OH2 OT -0.834000 15.9994 0 + 3196 W1 236 TIP3 H1 HT 0.417000 1.0080 0 + 3197 W1 236 TIP3 H2 HT 0.417000 1.0080 0 + 3198 W1 237 TIP3 OH2 OT -0.834000 15.9994 0 + 3199 W1 237 TIP3 H1 HT 0.417000 1.0080 0 + 3200 W1 237 TIP3 H2 HT 0.417000 1.0080 0 + 3201 W1 238 TIP3 OH2 OT -0.834000 15.9994 0 + 3202 W1 238 TIP3 H1 HT 0.417000 1.0080 0 + 3203 W1 238 TIP3 H2 HT 0.417000 1.0080 0 + 3204 W1 239 TIP3 OH2 OT -0.834000 15.9994 0 + 3205 W1 239 TIP3 H1 HT 0.417000 1.0080 0 + 3206 W1 239 TIP3 H2 HT 0.417000 1.0080 0 + 3207 W1 240 TIP3 OH2 OT -0.834000 15.9994 0 + 3208 W1 240 TIP3 H1 HT 0.417000 1.0080 0 + 3209 W1 240 TIP3 H2 HT 0.417000 1.0080 0 + 3210 W1 241 TIP3 OH2 OT -0.834000 15.9994 0 + 3211 W1 241 TIP3 H1 HT 0.417000 1.0080 0 + 3212 W1 241 TIP3 H2 HT 0.417000 1.0080 0 + 3213 W1 242 TIP3 OH2 OT -0.834000 15.9994 0 + 3214 W1 242 TIP3 H1 HT 0.417000 1.0080 0 + 3215 W1 242 TIP3 H2 HT 0.417000 1.0080 0 + 3216 W1 243 TIP3 OH2 OT -0.834000 15.9994 0 + 3217 W1 243 TIP3 H1 HT 0.417000 1.0080 0 + 3218 W1 243 TIP3 H2 HT 0.417000 1.0080 0 + 3219 W1 244 TIP3 OH2 OT -0.834000 15.9994 0 + 3220 W1 244 TIP3 H1 HT 0.417000 1.0080 0 + 3221 W1 244 TIP3 H2 HT 0.417000 1.0080 0 + 3222 W1 245 TIP3 OH2 OT -0.834000 15.9994 0 + 3223 W1 245 TIP3 H1 HT 0.417000 1.0080 0 + 3224 W1 245 TIP3 H2 HT 0.417000 1.0080 0 + 3225 W1 246 TIP3 OH2 OT -0.834000 15.9994 0 + 3226 W1 246 TIP3 H1 HT 0.417000 1.0080 0 + 3227 W1 246 TIP3 H2 HT 0.417000 1.0080 0 + 3228 W1 247 TIP3 OH2 OT -0.834000 15.9994 0 + 3229 W1 247 TIP3 H1 HT 0.417000 1.0080 0 + 3230 W1 247 TIP3 H2 HT 0.417000 1.0080 0 + 3231 W1 248 TIP3 OH2 OT -0.834000 15.9994 0 + 3232 W1 248 TIP3 H1 HT 0.417000 1.0080 0 + 3233 W1 248 TIP3 H2 HT 0.417000 1.0080 0 + 3234 W1 249 TIP3 OH2 OT -0.834000 15.9994 0 + 3235 W1 249 TIP3 H1 HT 0.417000 1.0080 0 + 3236 W1 249 TIP3 H2 HT 0.417000 1.0080 0 + 3237 W1 250 TIP3 OH2 OT -0.834000 15.9994 0 + 3238 W1 250 TIP3 H1 HT 0.417000 1.0080 0 + 3239 W1 250 TIP3 H2 HT 0.417000 1.0080 0 + 3240 W1 251 TIP3 OH2 OT -0.834000 15.9994 0 + 3241 W1 251 TIP3 H1 HT 0.417000 1.0080 0 + 3242 W1 251 TIP3 H2 HT 0.417000 1.0080 0 + 3243 W1 252 TIP3 OH2 OT -0.834000 15.9994 0 + 3244 W1 252 TIP3 H1 HT 0.417000 1.0080 0 + 3245 W1 252 TIP3 H2 HT 0.417000 1.0080 0 + 3246 W1 253 TIP3 OH2 OT -0.834000 15.9994 0 + 3247 W1 253 TIP3 H1 HT 0.417000 1.0080 0 + 3248 W1 253 TIP3 H2 HT 0.417000 1.0080 0 + 3249 W1 254 TIP3 OH2 OT -0.834000 15.9994 0 + 3250 W1 254 TIP3 H1 HT 0.417000 1.0080 0 + 3251 W1 254 TIP3 H2 HT 0.417000 1.0080 0 + 3252 W1 255 TIP3 OH2 OT -0.834000 15.9994 0 + 3253 W1 255 TIP3 H1 HT 0.417000 1.0080 0 + 3254 W1 255 TIP3 H2 HT 0.417000 1.0080 0 + 3255 W1 256 TIP3 OH2 OT -0.834000 15.9994 0 + 3256 W1 256 TIP3 H1 HT 0.417000 1.0080 0 + 3257 W1 256 TIP3 H2 HT 0.417000 1.0080 0 + 3258 W1 257 TIP3 OH2 OT -0.834000 15.9994 0 + 3259 W1 257 TIP3 H1 HT 0.417000 1.0080 0 + 3260 W1 257 TIP3 H2 HT 0.417000 1.0080 0 + 3261 W1 258 TIP3 OH2 OT -0.834000 15.9994 0 + 3262 W1 258 TIP3 H1 HT 0.417000 1.0080 0 + 3263 W1 258 TIP3 H2 HT 0.417000 1.0080 0 + 3264 W1 259 TIP3 OH2 OT -0.834000 15.9994 0 + 3265 W1 259 TIP3 H1 HT 0.417000 1.0080 0 + 3266 W1 259 TIP3 H2 HT 0.417000 1.0080 0 + 3267 W1 260 TIP3 OH2 OT -0.834000 15.9994 0 + 3268 W1 260 TIP3 H1 HT 0.417000 1.0080 0 + 3269 W1 260 TIP3 H2 HT 0.417000 1.0080 0 + 3270 W1 261 TIP3 OH2 OT -0.834000 15.9994 0 + 3271 W1 261 TIP3 H1 HT 0.417000 1.0080 0 + 3272 W1 261 TIP3 H2 HT 0.417000 1.0080 0 + 3273 W1 262 TIP3 OH2 OT -0.834000 15.9994 0 + 3274 W1 262 TIP3 H1 HT 0.417000 1.0080 0 + 3275 W1 262 TIP3 H2 HT 0.417000 1.0080 0 + 3276 W1 263 TIP3 OH2 OT -0.834000 15.9994 0 + 3277 W1 263 TIP3 H1 HT 0.417000 1.0080 0 + 3278 W1 263 TIP3 H2 HT 0.417000 1.0080 0 + 3279 W1 264 TIP3 OH2 OT -0.834000 15.9994 0 + 3280 W1 264 TIP3 H1 HT 0.417000 1.0080 0 + 3281 W1 264 TIP3 H2 HT 0.417000 1.0080 0 + 3282 W1 265 TIP3 OH2 OT -0.834000 15.9994 0 + 3283 W1 265 TIP3 H1 HT 0.417000 1.0080 0 + 3284 W1 265 TIP3 H2 HT 0.417000 1.0080 0 + 3285 W1 266 TIP3 OH2 OT -0.834000 15.9994 0 + 3286 W1 266 TIP3 H1 HT 0.417000 1.0080 0 + 3287 W1 266 TIP3 H2 HT 0.417000 1.0080 0 + 3288 W1 267 TIP3 OH2 OT -0.834000 15.9994 0 + 3289 W1 267 TIP3 H1 HT 0.417000 1.0080 0 + 3290 W1 267 TIP3 H2 HT 0.417000 1.0080 0 + 3291 W1 268 TIP3 OH2 OT -0.834000 15.9994 0 + 3292 W1 268 TIP3 H1 HT 0.417000 1.0080 0 + 3293 W1 268 TIP3 H2 HT 0.417000 1.0080 0 + 3294 W1 269 TIP3 OH2 OT -0.834000 15.9994 0 + 3295 W1 269 TIP3 H1 HT 0.417000 1.0080 0 + 3296 W1 269 TIP3 H2 HT 0.417000 1.0080 0 + 3297 W1 270 TIP3 OH2 OT -0.834000 15.9994 0 + 3298 W1 270 TIP3 H1 HT 0.417000 1.0080 0 + 3299 W1 270 TIP3 H2 HT 0.417000 1.0080 0 + 3300 W1 271 TIP3 OH2 OT -0.834000 15.9994 0 + 3301 W1 271 TIP3 H1 HT 0.417000 1.0080 0 + 3302 W1 271 TIP3 H2 HT 0.417000 1.0080 0 + 3303 W1 272 TIP3 OH2 OT -0.834000 15.9994 0 + 3304 W1 272 TIP3 H1 HT 0.417000 1.0080 0 + 3305 W1 272 TIP3 H2 HT 0.417000 1.0080 0 + 3306 W1 273 TIP3 OH2 OT -0.834000 15.9994 0 + 3307 W1 273 TIP3 H1 HT 0.417000 1.0080 0 + 3308 W1 273 TIP3 H2 HT 0.417000 1.0080 0 + 3309 W1 274 TIP3 OH2 OT -0.834000 15.9994 0 + 3310 W1 274 TIP3 H1 HT 0.417000 1.0080 0 + 3311 W1 274 TIP3 H2 HT 0.417000 1.0080 0 + 3312 W1 275 TIP3 OH2 OT -0.834000 15.9994 0 + 3313 W1 275 TIP3 H1 HT 0.417000 1.0080 0 + 3314 W1 275 TIP3 H2 HT 0.417000 1.0080 0 + 3315 W1 276 TIP3 OH2 OT -0.834000 15.9994 0 + 3316 W1 276 TIP3 H1 HT 0.417000 1.0080 0 + 3317 W1 276 TIP3 H2 HT 0.417000 1.0080 0 + 3318 W1 277 TIP3 OH2 OT -0.834000 15.9994 0 + 3319 W1 277 TIP3 H1 HT 0.417000 1.0080 0 + 3320 W1 277 TIP3 H2 HT 0.417000 1.0080 0 + 3321 W1 278 TIP3 OH2 OT -0.834000 15.9994 0 + 3322 W1 278 TIP3 H1 HT 0.417000 1.0080 0 + 3323 W1 278 TIP3 H2 HT 0.417000 1.0080 0 + 3324 W1 279 TIP3 OH2 OT -0.834000 15.9994 0 + 3325 W1 279 TIP3 H1 HT 0.417000 1.0080 0 + 3326 W1 279 TIP3 H2 HT 0.417000 1.0080 0 + 3327 W1 280 TIP3 OH2 OT -0.834000 15.9994 0 + 3328 W1 280 TIP3 H1 HT 0.417000 1.0080 0 + 3329 W1 280 TIP3 H2 HT 0.417000 1.0080 0 + 3330 W1 281 TIP3 OH2 OT -0.834000 15.9994 0 + 3331 W1 281 TIP3 H1 HT 0.417000 1.0080 0 + 3332 W1 281 TIP3 H2 HT 0.417000 1.0080 0 + 3333 W1 282 TIP3 OH2 OT -0.834000 15.9994 0 + 3334 W1 282 TIP3 H1 HT 0.417000 1.0080 0 + 3335 W1 282 TIP3 H2 HT 0.417000 1.0080 0 + 3336 W1 283 TIP3 OH2 OT -0.834000 15.9994 0 + 3337 W1 283 TIP3 H1 HT 0.417000 1.0080 0 + 3338 W1 283 TIP3 H2 HT 0.417000 1.0080 0 + 3339 W1 284 TIP3 OH2 OT -0.834000 15.9994 0 + 3340 W1 284 TIP3 H1 HT 0.417000 1.0080 0 + 3341 W1 284 TIP3 H2 HT 0.417000 1.0080 0 + 3342 W1 285 TIP3 OH2 OT -0.834000 15.9994 0 + 3343 W1 285 TIP3 H1 HT 0.417000 1.0080 0 + 3344 W1 285 TIP3 H2 HT 0.417000 1.0080 0 + 3345 W1 286 TIP3 OH2 OT -0.834000 15.9994 0 + 3346 W1 286 TIP3 H1 HT 0.417000 1.0080 0 + 3347 W1 286 TIP3 H2 HT 0.417000 1.0080 0 + 3348 W1 287 TIP3 OH2 OT -0.834000 15.9994 0 + 3349 W1 287 TIP3 H1 HT 0.417000 1.0080 0 + 3350 W1 287 TIP3 H2 HT 0.417000 1.0080 0 + 3351 W1 288 TIP3 OH2 OT -0.834000 15.9994 0 + 3352 W1 288 TIP3 H1 HT 0.417000 1.0080 0 + 3353 W1 288 TIP3 H2 HT 0.417000 1.0080 0 + 3354 W1 289 TIP3 OH2 OT -0.834000 15.9994 0 + 3355 W1 289 TIP3 H1 HT 0.417000 1.0080 0 + 3356 W1 289 TIP3 H2 HT 0.417000 1.0080 0 + 3357 W1 290 TIP3 OH2 OT -0.834000 15.9994 0 + 3358 W1 290 TIP3 H1 HT 0.417000 1.0080 0 + 3359 W1 290 TIP3 H2 HT 0.417000 1.0080 0 + 3360 W1 291 TIP3 OH2 OT -0.834000 15.9994 0 + 3361 W1 291 TIP3 H1 HT 0.417000 1.0080 0 + 3362 W1 291 TIP3 H2 HT 0.417000 1.0080 0 + 3363 W1 292 TIP3 OH2 OT -0.834000 15.9994 0 + 3364 W1 292 TIP3 H1 HT 0.417000 1.0080 0 + 3365 W1 292 TIP3 H2 HT 0.417000 1.0080 0 + 3366 W1 293 TIP3 OH2 OT -0.834000 15.9994 0 + 3367 W1 293 TIP3 H1 HT 0.417000 1.0080 0 + 3368 W1 293 TIP3 H2 HT 0.417000 1.0080 0 + 3369 W1 294 TIP3 OH2 OT -0.834000 15.9994 0 + 3370 W1 294 TIP3 H1 HT 0.417000 1.0080 0 + 3371 W1 294 TIP3 H2 HT 0.417000 1.0080 0 + 3372 W1 295 TIP3 OH2 OT -0.834000 15.9994 0 + 3373 W1 295 TIP3 H1 HT 0.417000 1.0080 0 + 3374 W1 295 TIP3 H2 HT 0.417000 1.0080 0 + 3375 W1 296 TIP3 OH2 OT -0.834000 15.9994 0 + 3376 W1 296 TIP3 H1 HT 0.417000 1.0080 0 + 3377 W1 296 TIP3 H2 HT 0.417000 1.0080 0 + 3378 W1 297 TIP3 OH2 OT -0.834000 15.9994 0 + 3379 W1 297 TIP3 H1 HT 0.417000 1.0080 0 + 3380 W1 297 TIP3 H2 HT 0.417000 1.0080 0 + 3381 W1 298 TIP3 OH2 OT -0.834000 15.9994 0 + 3382 W1 298 TIP3 H1 HT 0.417000 1.0080 0 + 3383 W1 298 TIP3 H2 HT 0.417000 1.0080 0 + 3384 W1 299 TIP3 OH2 OT -0.834000 15.9994 0 + 3385 W1 299 TIP3 H1 HT 0.417000 1.0080 0 + 3386 W1 299 TIP3 H2 HT 0.417000 1.0080 0 + 3387 W1 300 TIP3 OH2 OT -0.834000 15.9994 0 + 3388 W1 300 TIP3 H1 HT 0.417000 1.0080 0 + 3389 W1 300 TIP3 H2 HT 0.417000 1.0080 0 + 3390 W1 301 TIP3 OH2 OT -0.834000 15.9994 0 + 3391 W1 301 TIP3 H1 HT 0.417000 1.0080 0 + 3392 W1 301 TIP3 H2 HT 0.417000 1.0080 0 + 3393 W1 302 TIP3 OH2 OT -0.834000 15.9994 0 + 3394 W1 302 TIP3 H1 HT 0.417000 1.0080 0 + 3395 W1 302 TIP3 H2 HT 0.417000 1.0080 0 + 3396 W1 303 TIP3 OH2 OT -0.834000 15.9994 0 + 3397 W1 303 TIP3 H1 HT 0.417000 1.0080 0 + 3398 W1 303 TIP3 H2 HT 0.417000 1.0080 0 + 3399 W1 304 TIP3 OH2 OT -0.834000 15.9994 0 + 3400 W1 304 TIP3 H1 HT 0.417000 1.0080 0 + 3401 W1 304 TIP3 H2 HT 0.417000 1.0080 0 + 3402 W1 305 TIP3 OH2 OT -0.834000 15.9994 0 + 3403 W1 305 TIP3 H1 HT 0.417000 1.0080 0 + 3404 W1 305 TIP3 H2 HT 0.417000 1.0080 0 + 3405 W1 306 TIP3 OH2 OT -0.834000 15.9994 0 + 3406 W1 306 TIP3 H1 HT 0.417000 1.0080 0 + 3407 W1 306 TIP3 H2 HT 0.417000 1.0080 0 + 3408 W1 307 TIP3 OH2 OT -0.834000 15.9994 0 + 3409 W1 307 TIP3 H1 HT 0.417000 1.0080 0 + 3410 W1 307 TIP3 H2 HT 0.417000 1.0080 0 + 3411 W1 308 TIP3 OH2 OT -0.834000 15.9994 0 + 3412 W1 308 TIP3 H1 HT 0.417000 1.0080 0 + 3413 W1 308 TIP3 H2 HT 0.417000 1.0080 0 + 3414 W1 309 TIP3 OH2 OT -0.834000 15.9994 0 + 3415 W1 309 TIP3 H1 HT 0.417000 1.0080 0 + 3416 W1 309 TIP3 H2 HT 0.417000 1.0080 0 + 3417 W1 310 TIP3 OH2 OT -0.834000 15.9994 0 + 3418 W1 310 TIP3 H1 HT 0.417000 1.0080 0 + 3419 W1 310 TIP3 H2 HT 0.417000 1.0080 0 + 3420 W1 311 TIP3 OH2 OT -0.834000 15.9994 0 + 3421 W1 311 TIP3 H1 HT 0.417000 1.0080 0 + 3422 W1 311 TIP3 H2 HT 0.417000 1.0080 0 + 3423 W1 312 TIP3 OH2 OT -0.834000 15.9994 0 + 3424 W1 312 TIP3 H1 HT 0.417000 1.0080 0 + 3425 W1 312 TIP3 H2 HT 0.417000 1.0080 0 + 3426 W1 313 TIP3 OH2 OT -0.834000 15.9994 0 + 3427 W1 313 TIP3 H1 HT 0.417000 1.0080 0 + 3428 W1 313 TIP3 H2 HT 0.417000 1.0080 0 + 3429 W1 314 TIP3 OH2 OT -0.834000 15.9994 0 + 3430 W1 314 TIP3 H1 HT 0.417000 1.0080 0 + 3431 W1 314 TIP3 H2 HT 0.417000 1.0080 0 + 3432 W1 315 TIP3 OH2 OT -0.834000 15.9994 0 + 3433 W1 315 TIP3 H1 HT 0.417000 1.0080 0 + 3434 W1 315 TIP3 H2 HT 0.417000 1.0080 0 + 3435 W1 316 TIP3 OH2 OT -0.834000 15.9994 0 + 3436 W1 316 TIP3 H1 HT 0.417000 1.0080 0 + 3437 W1 316 TIP3 H2 HT 0.417000 1.0080 0 + 3438 W1 317 TIP3 OH2 OT -0.834000 15.9994 0 + 3439 W1 317 TIP3 H1 HT 0.417000 1.0080 0 + 3440 W1 317 TIP3 H2 HT 0.417000 1.0080 0 + 3441 W1 318 TIP3 OH2 OT -0.834000 15.9994 0 + 3442 W1 318 TIP3 H1 HT 0.417000 1.0080 0 + 3443 W1 318 TIP3 H2 HT 0.417000 1.0080 0 + 3444 W1 319 TIP3 OH2 OT -0.834000 15.9994 0 + 3445 W1 319 TIP3 H1 HT 0.417000 1.0080 0 + 3446 W1 319 TIP3 H2 HT 0.417000 1.0080 0 + 3447 W1 320 TIP3 OH2 OT -0.834000 15.9994 0 + 3448 W1 320 TIP3 H1 HT 0.417000 1.0080 0 + 3449 W1 320 TIP3 H2 HT 0.417000 1.0080 0 + 3450 W1 321 TIP3 OH2 OT -0.834000 15.9994 0 + 3451 W1 321 TIP3 H1 HT 0.417000 1.0080 0 + 3452 W1 321 TIP3 H2 HT 0.417000 1.0080 0 + 3453 W1 322 TIP3 OH2 OT -0.834000 15.9994 0 + 3454 W1 322 TIP3 H1 HT 0.417000 1.0080 0 + 3455 W1 322 TIP3 H2 HT 0.417000 1.0080 0 + 3456 W1 323 TIP3 OH2 OT -0.834000 15.9994 0 + 3457 W1 323 TIP3 H1 HT 0.417000 1.0080 0 + 3458 W1 323 TIP3 H2 HT 0.417000 1.0080 0 + 3459 W1 324 TIP3 OH2 OT -0.834000 15.9994 0 + 3460 W1 324 TIP3 H1 HT 0.417000 1.0080 0 + 3461 W1 324 TIP3 H2 HT 0.417000 1.0080 0 + 3462 W1 325 TIP3 OH2 OT -0.834000 15.9994 0 + 3463 W1 325 TIP3 H1 HT 0.417000 1.0080 0 + 3464 W1 325 TIP3 H2 HT 0.417000 1.0080 0 + 3465 W1 326 TIP3 OH2 OT -0.834000 15.9994 0 + 3466 W1 326 TIP3 H1 HT 0.417000 1.0080 0 + 3467 W1 326 TIP3 H2 HT 0.417000 1.0080 0 + 3468 W1 327 TIP3 OH2 OT -0.834000 15.9994 0 + 3469 W1 327 TIP3 H1 HT 0.417000 1.0080 0 + 3470 W1 327 TIP3 H2 HT 0.417000 1.0080 0 + 3471 W1 328 TIP3 OH2 OT -0.834000 15.9994 0 + 3472 W1 328 TIP3 H1 HT 0.417000 1.0080 0 + 3473 W1 328 TIP3 H2 HT 0.417000 1.0080 0 + 3474 W1 329 TIP3 OH2 OT -0.834000 15.9994 0 + 3475 W1 329 TIP3 H1 HT 0.417000 1.0080 0 + 3476 W1 329 TIP3 H2 HT 0.417000 1.0080 0 + 3477 W1 330 TIP3 OH2 OT -0.834000 15.9994 0 + 3478 W1 330 TIP3 H1 HT 0.417000 1.0080 0 + 3479 W1 330 TIP3 H2 HT 0.417000 1.0080 0 + 3480 W1 331 TIP3 OH2 OT -0.834000 15.9994 0 + 3481 W1 331 TIP3 H1 HT 0.417000 1.0080 0 + 3482 W1 331 TIP3 H2 HT 0.417000 1.0080 0 + 3483 W1 332 TIP3 OH2 OT -0.834000 15.9994 0 + 3484 W1 332 TIP3 H1 HT 0.417000 1.0080 0 + 3485 W1 332 TIP3 H2 HT 0.417000 1.0080 0 + 3486 W1 333 TIP3 OH2 OT -0.834000 15.9994 0 + 3487 W1 333 TIP3 H1 HT 0.417000 1.0080 0 + 3488 W1 333 TIP3 H2 HT 0.417000 1.0080 0 + 3489 W1 334 TIP3 OH2 OT -0.834000 15.9994 0 + 3490 W1 334 TIP3 H1 HT 0.417000 1.0080 0 + 3491 W1 334 TIP3 H2 HT 0.417000 1.0080 0 + 3492 W1 335 TIP3 OH2 OT -0.834000 15.9994 0 + 3493 W1 335 TIP3 H1 HT 0.417000 1.0080 0 + 3494 W1 335 TIP3 H2 HT 0.417000 1.0080 0 + 3495 W1 336 TIP3 OH2 OT -0.834000 15.9994 0 + 3496 W1 336 TIP3 H1 HT 0.417000 1.0080 0 + 3497 W1 336 TIP3 H2 HT 0.417000 1.0080 0 + 3498 W1 337 TIP3 OH2 OT -0.834000 15.9994 0 + 3499 W1 337 TIP3 H1 HT 0.417000 1.0080 0 + 3500 W1 337 TIP3 H2 HT 0.417000 1.0080 0 + 3501 W1 338 TIP3 OH2 OT -0.834000 15.9994 0 + 3502 W1 338 TIP3 H1 HT 0.417000 1.0080 0 + 3503 W1 338 TIP3 H2 HT 0.417000 1.0080 0 + 3504 W1 339 TIP3 OH2 OT -0.834000 15.9994 0 + 3505 W1 339 TIP3 H1 HT 0.417000 1.0080 0 + 3506 W1 339 TIP3 H2 HT 0.417000 1.0080 0 + 3507 W1 340 TIP3 OH2 OT -0.834000 15.9994 0 + 3508 W1 340 TIP3 H1 HT 0.417000 1.0080 0 + 3509 W1 340 TIP3 H2 HT 0.417000 1.0080 0 + 3510 W1 341 TIP3 OH2 OT -0.834000 15.9994 0 + 3511 W1 341 TIP3 H1 HT 0.417000 1.0080 0 + 3512 W1 341 TIP3 H2 HT 0.417000 1.0080 0 + 3513 W1 342 TIP3 OH2 OT -0.834000 15.9994 0 + 3514 W1 342 TIP3 H1 HT 0.417000 1.0080 0 + 3515 W1 342 TIP3 H2 HT 0.417000 1.0080 0 + 3516 W1 343 TIP3 OH2 OT -0.834000 15.9994 0 + 3517 W1 343 TIP3 H1 HT 0.417000 1.0080 0 + 3518 W1 343 TIP3 H2 HT 0.417000 1.0080 0 + 3519 W1 344 TIP3 OH2 OT -0.834000 15.9994 0 + 3520 W1 344 TIP3 H1 HT 0.417000 1.0080 0 + 3521 W1 344 TIP3 H2 HT 0.417000 1.0080 0 + 3522 W1 345 TIP3 OH2 OT -0.834000 15.9994 0 + 3523 W1 345 TIP3 H1 HT 0.417000 1.0080 0 + 3524 W1 345 TIP3 H2 HT 0.417000 1.0080 0 + 3525 W1 346 TIP3 OH2 OT -0.834000 15.9994 0 + 3526 W1 346 TIP3 H1 HT 0.417000 1.0080 0 + 3527 W1 346 TIP3 H2 HT 0.417000 1.0080 0 + 3528 W1 347 TIP3 OH2 OT -0.834000 15.9994 0 + 3529 W1 347 TIP3 H1 HT 0.417000 1.0080 0 + 3530 W1 347 TIP3 H2 HT 0.417000 1.0080 0 + 3531 W1 348 TIP3 OH2 OT -0.834000 15.9994 0 + 3532 W1 348 TIP3 H1 HT 0.417000 1.0080 0 + 3533 W1 348 TIP3 H2 HT 0.417000 1.0080 0 + 3534 W1 349 TIP3 OH2 OT -0.834000 15.9994 0 + 3535 W1 349 TIP3 H1 HT 0.417000 1.0080 0 + 3536 W1 349 TIP3 H2 HT 0.417000 1.0080 0 + 3537 W1 350 TIP3 OH2 OT -0.834000 15.9994 0 + 3538 W1 350 TIP3 H1 HT 0.417000 1.0080 0 + 3539 W1 350 TIP3 H2 HT 0.417000 1.0080 0 + 3540 W1 351 TIP3 OH2 OT -0.834000 15.9994 0 + 3541 W1 351 TIP3 H1 HT 0.417000 1.0080 0 + 3542 W1 351 TIP3 H2 HT 0.417000 1.0080 0 + 3543 W1 352 TIP3 OH2 OT -0.834000 15.9994 0 + 3544 W1 352 TIP3 H1 HT 0.417000 1.0080 0 + 3545 W1 352 TIP3 H2 HT 0.417000 1.0080 0 + 3546 W1 353 TIP3 OH2 OT -0.834000 15.9994 0 + 3547 W1 353 TIP3 H1 HT 0.417000 1.0080 0 + 3548 W1 353 TIP3 H2 HT 0.417000 1.0080 0 + 3549 W1 354 TIP3 OH2 OT -0.834000 15.9994 0 + 3550 W1 354 TIP3 H1 HT 0.417000 1.0080 0 + 3551 W1 354 TIP3 H2 HT 0.417000 1.0080 0 + 3552 W1 355 TIP3 OH2 OT -0.834000 15.9994 0 + 3553 W1 355 TIP3 H1 HT 0.417000 1.0080 0 + 3554 W1 355 TIP3 H2 HT 0.417000 1.0080 0 + 3555 W1 356 TIP3 OH2 OT -0.834000 15.9994 0 + 3556 W1 356 TIP3 H1 HT 0.417000 1.0080 0 + 3557 W1 356 TIP3 H2 HT 0.417000 1.0080 0 + 3558 W1 357 TIP3 OH2 OT -0.834000 15.9994 0 + 3559 W1 357 TIP3 H1 HT 0.417000 1.0080 0 + 3560 W1 357 TIP3 H2 HT 0.417000 1.0080 0 + 3561 W1 358 TIP3 OH2 OT -0.834000 15.9994 0 + 3562 W1 358 TIP3 H1 HT 0.417000 1.0080 0 + 3563 W1 358 TIP3 H2 HT 0.417000 1.0080 0 + 3564 W1 359 TIP3 OH2 OT -0.834000 15.9994 0 + 3565 W1 359 TIP3 H1 HT 0.417000 1.0080 0 + 3566 W1 359 TIP3 H2 HT 0.417000 1.0080 0 + 3567 W1 360 TIP3 OH2 OT -0.834000 15.9994 0 + 3568 W1 360 TIP3 H1 HT 0.417000 1.0080 0 + 3569 W1 360 TIP3 H2 HT 0.417000 1.0080 0 + 3570 W1 361 TIP3 OH2 OT -0.834000 15.9994 0 + 3571 W1 361 TIP3 H1 HT 0.417000 1.0080 0 + 3572 W1 361 TIP3 H2 HT 0.417000 1.0080 0 + 3573 W1 362 TIP3 OH2 OT -0.834000 15.9994 0 + 3574 W1 362 TIP3 H1 HT 0.417000 1.0080 0 + 3575 W1 362 TIP3 H2 HT 0.417000 1.0080 0 + 3576 W1 363 TIP3 OH2 OT -0.834000 15.9994 0 + 3577 W1 363 TIP3 H1 HT 0.417000 1.0080 0 + 3578 W1 363 TIP3 H2 HT 0.417000 1.0080 0 + 3579 W1 364 TIP3 OH2 OT -0.834000 15.9994 0 + 3580 W1 364 TIP3 H1 HT 0.417000 1.0080 0 + 3581 W1 364 TIP3 H2 HT 0.417000 1.0080 0 + 3582 W1 365 TIP3 OH2 OT -0.834000 15.9994 0 + 3583 W1 365 TIP3 H1 HT 0.417000 1.0080 0 + 3584 W1 365 TIP3 H2 HT 0.417000 1.0080 0 + 3585 W1 366 TIP3 OH2 OT -0.834000 15.9994 0 + 3586 W1 366 TIP3 H1 HT 0.417000 1.0080 0 + 3587 W1 366 TIP3 H2 HT 0.417000 1.0080 0 + 3588 W1 367 TIP3 OH2 OT -0.834000 15.9994 0 + 3589 W1 367 TIP3 H1 HT 0.417000 1.0080 0 + 3590 W1 367 TIP3 H2 HT 0.417000 1.0080 0 + 3591 W1 368 TIP3 OH2 OT -0.834000 15.9994 0 + 3592 W1 368 TIP3 H1 HT 0.417000 1.0080 0 + 3593 W1 368 TIP3 H2 HT 0.417000 1.0080 0 + 3594 W1 369 TIP3 OH2 OT -0.834000 15.9994 0 + 3595 W1 369 TIP3 H1 HT 0.417000 1.0080 0 + 3596 W1 369 TIP3 H2 HT 0.417000 1.0080 0 + 3597 W1 370 TIP3 OH2 OT -0.834000 15.9994 0 + 3598 W1 370 TIP3 H1 HT 0.417000 1.0080 0 + 3599 W1 370 TIP3 H2 HT 0.417000 1.0080 0 + 3600 W1 371 TIP3 OH2 OT -0.834000 15.9994 0 + 3601 W1 371 TIP3 H1 HT 0.417000 1.0080 0 + 3602 W1 371 TIP3 H2 HT 0.417000 1.0080 0 + 3603 W1 372 TIP3 OH2 OT -0.834000 15.9994 0 + 3604 W1 372 TIP3 H1 HT 0.417000 1.0080 0 + 3605 W1 372 TIP3 H2 HT 0.417000 1.0080 0 + 3606 W1 373 TIP3 OH2 OT -0.834000 15.9994 0 + 3607 W1 373 TIP3 H1 HT 0.417000 1.0080 0 + 3608 W1 373 TIP3 H2 HT 0.417000 1.0080 0 + 3609 W1 374 TIP3 OH2 OT -0.834000 15.9994 0 + 3610 W1 374 TIP3 H1 HT 0.417000 1.0080 0 + 3611 W1 374 TIP3 H2 HT 0.417000 1.0080 0 + 3612 W1 375 TIP3 OH2 OT -0.834000 15.9994 0 + 3613 W1 375 TIP3 H1 HT 0.417000 1.0080 0 + 3614 W1 375 TIP3 H2 HT 0.417000 1.0080 0 + 3615 W1 376 TIP3 OH2 OT -0.834000 15.9994 0 + 3616 W1 376 TIP3 H1 HT 0.417000 1.0080 0 + 3617 W1 376 TIP3 H2 HT 0.417000 1.0080 0 + 3618 W1 377 TIP3 OH2 OT -0.834000 15.9994 0 + 3619 W1 377 TIP3 H1 HT 0.417000 1.0080 0 + 3620 W1 377 TIP3 H2 HT 0.417000 1.0080 0 + 3621 W1 378 TIP3 OH2 OT -0.834000 15.9994 0 + 3622 W1 378 TIP3 H1 HT 0.417000 1.0080 0 + 3623 W1 378 TIP3 H2 HT 0.417000 1.0080 0 + 3624 W1 379 TIP3 OH2 OT -0.834000 15.9994 0 + 3625 W1 379 TIP3 H1 HT 0.417000 1.0080 0 + 3626 W1 379 TIP3 H2 HT 0.417000 1.0080 0 + 3627 W1 380 TIP3 OH2 OT -0.834000 15.9994 0 + 3628 W1 380 TIP3 H1 HT 0.417000 1.0080 0 + 3629 W1 380 TIP3 H2 HT 0.417000 1.0080 0 + 3630 W1 381 TIP3 OH2 OT -0.834000 15.9994 0 + 3631 W1 381 TIP3 H1 HT 0.417000 1.0080 0 + 3632 W1 381 TIP3 H2 HT 0.417000 1.0080 0 + 3633 W1 382 TIP3 OH2 OT -0.834000 15.9994 0 + 3634 W1 382 TIP3 H1 HT 0.417000 1.0080 0 + 3635 W1 382 TIP3 H2 HT 0.417000 1.0080 0 + 3636 W1 383 TIP3 OH2 OT -0.834000 15.9994 0 + 3637 W1 383 TIP3 H1 HT 0.417000 1.0080 0 + 3638 W1 383 TIP3 H2 HT 0.417000 1.0080 0 + 3639 W1 384 TIP3 OH2 OT -0.834000 15.9994 0 + 3640 W1 384 TIP3 H1 HT 0.417000 1.0080 0 + 3641 W1 384 TIP3 H2 HT 0.417000 1.0080 0 + 3642 W1 385 TIP3 OH2 OT -0.834000 15.9994 0 + 3643 W1 385 TIP3 H1 HT 0.417000 1.0080 0 + 3644 W1 385 TIP3 H2 HT 0.417000 1.0080 0 + 3645 W1 386 TIP3 OH2 OT -0.834000 15.9994 0 + 3646 W1 386 TIP3 H1 HT 0.417000 1.0080 0 + 3647 W1 386 TIP3 H2 HT 0.417000 1.0080 0 + 3648 W1 387 TIP3 OH2 OT -0.834000 15.9994 0 + 3649 W1 387 TIP3 H1 HT 0.417000 1.0080 0 + 3650 W1 387 TIP3 H2 HT 0.417000 1.0080 0 + 3651 W1 388 TIP3 OH2 OT -0.834000 15.9994 0 + 3652 W1 388 TIP3 H1 HT 0.417000 1.0080 0 + 3653 W1 388 TIP3 H2 HT 0.417000 1.0080 0 + 3654 W1 389 TIP3 OH2 OT -0.834000 15.9994 0 + 3655 W1 389 TIP3 H1 HT 0.417000 1.0080 0 + 3656 W1 389 TIP3 H2 HT 0.417000 1.0080 0 + 3657 W1 390 TIP3 OH2 OT -0.834000 15.9994 0 + 3658 W1 390 TIP3 H1 HT 0.417000 1.0080 0 + 3659 W1 390 TIP3 H2 HT 0.417000 1.0080 0 + 3660 W1 391 TIP3 OH2 OT -0.834000 15.9994 0 + 3661 W1 391 TIP3 H1 HT 0.417000 1.0080 0 + 3662 W1 391 TIP3 H2 HT 0.417000 1.0080 0 + 3663 W1 392 TIP3 OH2 OT -0.834000 15.9994 0 + 3664 W1 392 TIP3 H1 HT 0.417000 1.0080 0 + 3665 W1 392 TIP3 H2 HT 0.417000 1.0080 0 + 3666 W1 393 TIP3 OH2 OT -0.834000 15.9994 0 + 3667 W1 393 TIP3 H1 HT 0.417000 1.0080 0 + 3668 W1 393 TIP3 H2 HT 0.417000 1.0080 0 + 3669 W1 394 TIP3 OH2 OT -0.834000 15.9994 0 + 3670 W1 394 TIP3 H1 HT 0.417000 1.0080 0 + 3671 W1 394 TIP3 H2 HT 0.417000 1.0080 0 + 3672 W1 395 TIP3 OH2 OT -0.834000 15.9994 0 + 3673 W1 395 TIP3 H1 HT 0.417000 1.0080 0 + 3674 W1 395 TIP3 H2 HT 0.417000 1.0080 0 + 3675 W1 396 TIP3 OH2 OT -0.834000 15.9994 0 + 3676 W1 396 TIP3 H1 HT 0.417000 1.0080 0 + 3677 W1 396 TIP3 H2 HT 0.417000 1.0080 0 + 3678 W1 397 TIP3 OH2 OT -0.834000 15.9994 0 + 3679 W1 397 TIP3 H1 HT 0.417000 1.0080 0 + 3680 W1 397 TIP3 H2 HT 0.417000 1.0080 0 + 3681 W1 398 TIP3 OH2 OT -0.834000 15.9994 0 + 3682 W1 398 TIP3 H1 HT 0.417000 1.0080 0 + 3683 W1 398 TIP3 H2 HT 0.417000 1.0080 0 + 3684 W1 399 TIP3 OH2 OT -0.834000 15.9994 0 + 3685 W1 399 TIP3 H1 HT 0.417000 1.0080 0 + 3686 W1 399 TIP3 H2 HT 0.417000 1.0080 0 + 3687 W1 400 TIP3 OH2 OT -0.834000 15.9994 0 + 3688 W1 400 TIP3 H1 HT 0.417000 1.0080 0 + 3689 W1 400 TIP3 H2 HT 0.417000 1.0080 0 + 3690 W1 401 TIP3 OH2 OT -0.834000 15.9994 0 + 3691 W1 401 TIP3 H1 HT 0.417000 1.0080 0 + 3692 W1 401 TIP3 H2 HT 0.417000 1.0080 0 + 3693 W1 402 TIP3 OH2 OT -0.834000 15.9994 0 + 3694 W1 402 TIP3 H1 HT 0.417000 1.0080 0 + 3695 W1 402 TIP3 H2 HT 0.417000 1.0080 0 + 3696 W1 403 TIP3 OH2 OT -0.834000 15.9994 0 + 3697 W1 403 TIP3 H1 HT 0.417000 1.0080 0 + 3698 W1 403 TIP3 H2 HT 0.417000 1.0080 0 + 3699 W1 404 TIP3 OH2 OT -0.834000 15.9994 0 + 3700 W1 404 TIP3 H1 HT 0.417000 1.0080 0 + 3701 W1 404 TIP3 H2 HT 0.417000 1.0080 0 + 3702 W1 405 TIP3 OH2 OT -0.834000 15.9994 0 + 3703 W1 405 TIP3 H1 HT 0.417000 1.0080 0 + 3704 W1 405 TIP3 H2 HT 0.417000 1.0080 0 + 3705 W1 406 TIP3 OH2 OT -0.834000 15.9994 0 + 3706 W1 406 TIP3 H1 HT 0.417000 1.0080 0 + 3707 W1 406 TIP3 H2 HT 0.417000 1.0080 0 + 3708 W1 407 TIP3 OH2 OT -0.834000 15.9994 0 + 3709 W1 407 TIP3 H1 HT 0.417000 1.0080 0 + 3710 W1 407 TIP3 H2 HT 0.417000 1.0080 0 + 3711 W1 408 TIP3 OH2 OT -0.834000 15.9994 0 + 3712 W1 408 TIP3 H1 HT 0.417000 1.0080 0 + 3713 W1 408 TIP3 H2 HT 0.417000 1.0080 0 + 3714 W1 409 TIP3 OH2 OT -0.834000 15.9994 0 + 3715 W1 409 TIP3 H1 HT 0.417000 1.0080 0 + 3716 W1 409 TIP3 H2 HT 0.417000 1.0080 0 + 3717 W1 410 TIP3 OH2 OT -0.834000 15.9994 0 + 3718 W1 410 TIP3 H1 HT 0.417000 1.0080 0 + 3719 W1 410 TIP3 H2 HT 0.417000 1.0080 0 + 3720 W1 411 TIP3 OH2 OT -0.834000 15.9994 0 + 3721 W1 411 TIP3 H1 HT 0.417000 1.0080 0 + 3722 W1 411 TIP3 H2 HT 0.417000 1.0080 0 + 3723 W1 412 TIP3 OH2 OT -0.834000 15.9994 0 + 3724 W1 412 TIP3 H1 HT 0.417000 1.0080 0 + 3725 W1 412 TIP3 H2 HT 0.417000 1.0080 0 + 3726 W1 413 TIP3 OH2 OT -0.834000 15.9994 0 + 3727 W1 413 TIP3 H1 HT 0.417000 1.0080 0 + 3728 W1 413 TIP3 H2 HT 0.417000 1.0080 0 + 3729 W1 414 TIP3 OH2 OT -0.834000 15.9994 0 + 3730 W1 414 TIP3 H1 HT 0.417000 1.0080 0 + 3731 W1 414 TIP3 H2 HT 0.417000 1.0080 0 + 3732 W1 415 TIP3 OH2 OT -0.834000 15.9994 0 + 3733 W1 415 TIP3 H1 HT 0.417000 1.0080 0 + 3734 W1 415 TIP3 H2 HT 0.417000 1.0080 0 + 3735 W1 416 TIP3 OH2 OT -0.834000 15.9994 0 + 3736 W1 416 TIP3 H1 HT 0.417000 1.0080 0 + 3737 W1 416 TIP3 H2 HT 0.417000 1.0080 0 + 3738 W1 417 TIP3 OH2 OT -0.834000 15.9994 0 + 3739 W1 417 TIP3 H1 HT 0.417000 1.0080 0 + 3740 W1 417 TIP3 H2 HT 0.417000 1.0080 0 + 3741 W1 418 TIP3 OH2 OT -0.834000 15.9994 0 + 3742 W1 418 TIP3 H1 HT 0.417000 1.0080 0 + 3743 W1 418 TIP3 H2 HT 0.417000 1.0080 0 + 3744 W1 419 TIP3 OH2 OT -0.834000 15.9994 0 + 3745 W1 419 TIP3 H1 HT 0.417000 1.0080 0 + 3746 W1 419 TIP3 H2 HT 0.417000 1.0080 0 + 3747 W1 420 TIP3 OH2 OT -0.834000 15.9994 0 + 3748 W1 420 TIP3 H1 HT 0.417000 1.0080 0 + 3749 W1 420 TIP3 H2 HT 0.417000 1.0080 0 + 3750 W1 421 TIP3 OH2 OT -0.834000 15.9994 0 + 3751 W1 421 TIP3 H1 HT 0.417000 1.0080 0 + 3752 W1 421 TIP3 H2 HT 0.417000 1.0080 0 + 3753 W1 422 TIP3 OH2 OT -0.834000 15.9994 0 + 3754 W1 422 TIP3 H1 HT 0.417000 1.0080 0 + 3755 W1 422 TIP3 H2 HT 0.417000 1.0080 0 + 3756 W1 423 TIP3 OH2 OT -0.834000 15.9994 0 + 3757 W1 423 TIP3 H1 HT 0.417000 1.0080 0 + 3758 W1 423 TIP3 H2 HT 0.417000 1.0080 0 + 3759 W1 424 TIP3 OH2 OT -0.834000 15.9994 0 + 3760 W1 424 TIP3 H1 HT 0.417000 1.0080 0 + 3761 W1 424 TIP3 H2 HT 0.417000 1.0080 0 + 3762 W1 425 TIP3 OH2 OT -0.834000 15.9994 0 + 3763 W1 425 TIP3 H1 HT 0.417000 1.0080 0 + 3764 W1 425 TIP3 H2 HT 0.417000 1.0080 0 + 3765 W1 426 TIP3 OH2 OT -0.834000 15.9994 0 + 3766 W1 426 TIP3 H1 HT 0.417000 1.0080 0 + 3767 W1 426 TIP3 H2 HT 0.417000 1.0080 0 + 3768 W1 427 TIP3 OH2 OT -0.834000 15.9994 0 + 3769 W1 427 TIP3 H1 HT 0.417000 1.0080 0 + 3770 W1 427 TIP3 H2 HT 0.417000 1.0080 0 + 3771 W1 428 TIP3 OH2 OT -0.834000 15.9994 0 + 3772 W1 428 TIP3 H1 HT 0.417000 1.0080 0 + 3773 W1 428 TIP3 H2 HT 0.417000 1.0080 0 + 3774 W1 429 TIP3 OH2 OT -0.834000 15.9994 0 + 3775 W1 429 TIP3 H1 HT 0.417000 1.0080 0 + 3776 W1 429 TIP3 H2 HT 0.417000 1.0080 0 + 3777 W1 430 TIP3 OH2 OT -0.834000 15.9994 0 + 3778 W1 430 TIP3 H1 HT 0.417000 1.0080 0 + 3779 W1 430 TIP3 H2 HT 0.417000 1.0080 0 + 3780 W1 431 TIP3 OH2 OT -0.834000 15.9994 0 + 3781 W1 431 TIP3 H1 HT 0.417000 1.0080 0 + 3782 W1 431 TIP3 H2 HT 0.417000 1.0080 0 + 3783 W1 432 TIP3 OH2 OT -0.834000 15.9994 0 + 3784 W1 432 TIP3 H1 HT 0.417000 1.0080 0 + 3785 W1 432 TIP3 H2 HT 0.417000 1.0080 0 + 3786 W1 433 TIP3 OH2 OT -0.834000 15.9994 0 + 3787 W1 433 TIP3 H1 HT 0.417000 1.0080 0 + 3788 W1 433 TIP3 H2 HT 0.417000 1.0080 0 + 3789 W1 434 TIP3 OH2 OT -0.834000 15.9994 0 + 3790 W1 434 TIP3 H1 HT 0.417000 1.0080 0 + 3791 W1 434 TIP3 H2 HT 0.417000 1.0080 0 + 3792 W1 435 TIP3 OH2 OT -0.834000 15.9994 0 + 3793 W1 435 TIP3 H1 HT 0.417000 1.0080 0 + 3794 W1 435 TIP3 H2 HT 0.417000 1.0080 0 + 3795 W1 436 TIP3 OH2 OT -0.834000 15.9994 0 + 3796 W1 436 TIP3 H1 HT 0.417000 1.0080 0 + 3797 W1 436 TIP3 H2 HT 0.417000 1.0080 0 + 3798 W1 437 TIP3 OH2 OT -0.834000 15.9994 0 + 3799 W1 437 TIP3 H1 HT 0.417000 1.0080 0 + 3800 W1 437 TIP3 H2 HT 0.417000 1.0080 0 + 3801 W1 438 TIP3 OH2 OT -0.834000 15.9994 0 + 3802 W1 438 TIP3 H1 HT 0.417000 1.0080 0 + 3803 W1 438 TIP3 H2 HT 0.417000 1.0080 0 + 3804 W1 439 TIP3 OH2 OT -0.834000 15.9994 0 + 3805 W1 439 TIP3 H1 HT 0.417000 1.0080 0 + 3806 W1 439 TIP3 H2 HT 0.417000 1.0080 0 + 3807 W1 440 TIP3 OH2 OT -0.834000 15.9994 0 + 3808 W1 440 TIP3 H1 HT 0.417000 1.0080 0 + 3809 W1 440 TIP3 H2 HT 0.417000 1.0080 0 + 3810 W1 441 TIP3 OH2 OT -0.834000 15.9994 0 + 3811 W1 441 TIP3 H1 HT 0.417000 1.0080 0 + 3812 W1 441 TIP3 H2 HT 0.417000 1.0080 0 + 3813 W1 442 TIP3 OH2 OT -0.834000 15.9994 0 + 3814 W1 442 TIP3 H1 HT 0.417000 1.0080 0 + 3815 W1 442 TIP3 H2 HT 0.417000 1.0080 0 + 3816 W1 443 TIP3 OH2 OT -0.834000 15.9994 0 + 3817 W1 443 TIP3 H1 HT 0.417000 1.0080 0 + 3818 W1 443 TIP3 H2 HT 0.417000 1.0080 0 + 3819 W1 444 TIP3 OH2 OT -0.834000 15.9994 0 + 3820 W1 444 TIP3 H1 HT 0.417000 1.0080 0 + 3821 W1 444 TIP3 H2 HT 0.417000 1.0080 0 + 3822 W1 445 TIP3 OH2 OT -0.834000 15.9994 0 + 3823 W1 445 TIP3 H1 HT 0.417000 1.0080 0 + 3824 W1 445 TIP3 H2 HT 0.417000 1.0080 0 + 3825 W1 446 TIP3 OH2 OT -0.834000 15.9994 0 + 3826 W1 446 TIP3 H1 HT 0.417000 1.0080 0 + 3827 W1 446 TIP3 H2 HT 0.417000 1.0080 0 + 3828 W1 447 TIP3 OH2 OT -0.834000 15.9994 0 + 3829 W1 447 TIP3 H1 HT 0.417000 1.0080 0 + 3830 W1 447 TIP3 H2 HT 0.417000 1.0080 0 + 3831 W1 448 TIP3 OH2 OT -0.834000 15.9994 0 + 3832 W1 448 TIP3 H1 HT 0.417000 1.0080 0 + 3833 W1 448 TIP3 H2 HT 0.417000 1.0080 0 + 3834 W1 449 TIP3 OH2 OT -0.834000 15.9994 0 + 3835 W1 449 TIP3 H1 HT 0.417000 1.0080 0 + 3836 W1 449 TIP3 H2 HT 0.417000 1.0080 0 + 3837 W1 450 TIP3 OH2 OT -0.834000 15.9994 0 + 3838 W1 450 TIP3 H1 HT 0.417000 1.0080 0 + 3839 W1 450 TIP3 H2 HT 0.417000 1.0080 0 + 3840 W1 451 TIP3 OH2 OT -0.834000 15.9994 0 + 3841 W1 451 TIP3 H1 HT 0.417000 1.0080 0 + 3842 W1 451 TIP3 H2 HT 0.417000 1.0080 0 + 3843 W1 452 TIP3 OH2 OT -0.834000 15.9994 0 + 3844 W1 452 TIP3 H1 HT 0.417000 1.0080 0 + 3845 W1 452 TIP3 H2 HT 0.417000 1.0080 0 + 3846 W1 453 TIP3 OH2 OT -0.834000 15.9994 0 + 3847 W1 453 TIP3 H1 HT 0.417000 1.0080 0 + 3848 W1 453 TIP3 H2 HT 0.417000 1.0080 0 + 3849 W1 454 TIP3 OH2 OT -0.834000 15.9994 0 + 3850 W1 454 TIP3 H1 HT 0.417000 1.0080 0 + 3851 W1 454 TIP3 H2 HT 0.417000 1.0080 0 + 3852 W1 455 TIP3 OH2 OT -0.834000 15.9994 0 + 3853 W1 455 TIP3 H1 HT 0.417000 1.0080 0 + 3854 W1 455 TIP3 H2 HT 0.417000 1.0080 0 + 3855 W1 456 TIP3 OH2 OT -0.834000 15.9994 0 + 3856 W1 456 TIP3 H1 HT 0.417000 1.0080 0 + 3857 W1 456 TIP3 H2 HT 0.417000 1.0080 0 + 3858 W1 457 TIP3 OH2 OT -0.834000 15.9994 0 + 3859 W1 457 TIP3 H1 HT 0.417000 1.0080 0 + 3860 W1 457 TIP3 H2 HT 0.417000 1.0080 0 + 3861 W1 458 TIP3 OH2 OT -0.834000 15.9994 0 + 3862 W1 458 TIP3 H1 HT 0.417000 1.0080 0 + 3863 W1 458 TIP3 H2 HT 0.417000 1.0080 0 + 3864 W1 459 TIP3 OH2 OT -0.834000 15.9994 0 + 3865 W1 459 TIP3 H1 HT 0.417000 1.0080 0 + 3866 W1 459 TIP3 H2 HT 0.417000 1.0080 0 + 3867 W1 460 TIP3 OH2 OT -0.834000 15.9994 0 + 3868 W1 460 TIP3 H1 HT 0.417000 1.0080 0 + 3869 W1 460 TIP3 H2 HT 0.417000 1.0080 0 + 3870 W1 461 TIP3 OH2 OT -0.834000 15.9994 0 + 3871 W1 461 TIP3 H1 HT 0.417000 1.0080 0 + 3872 W1 461 TIP3 H2 HT 0.417000 1.0080 0 + 3873 W1 462 TIP3 OH2 OT -0.834000 15.9994 0 + 3874 W1 462 TIP3 H1 HT 0.417000 1.0080 0 + 3875 W1 462 TIP3 H2 HT 0.417000 1.0080 0 + 3876 W1 463 TIP3 OH2 OT -0.834000 15.9994 0 + 3877 W1 463 TIP3 H1 HT 0.417000 1.0080 0 + 3878 W1 463 TIP3 H2 HT 0.417000 1.0080 0 + 3879 W1 464 TIP3 OH2 OT -0.834000 15.9994 0 + 3880 W1 464 TIP3 H1 HT 0.417000 1.0080 0 + 3881 W1 464 TIP3 H2 HT 0.417000 1.0080 0 + 3882 W1 465 TIP3 OH2 OT -0.834000 15.9994 0 + 3883 W1 465 TIP3 H1 HT 0.417000 1.0080 0 + 3884 W1 465 TIP3 H2 HT 0.417000 1.0080 0 + 3885 W1 466 TIP3 OH2 OT -0.834000 15.9994 0 + 3886 W1 466 TIP3 H1 HT 0.417000 1.0080 0 + 3887 W1 466 TIP3 H2 HT 0.417000 1.0080 0 + 3888 W1 467 TIP3 OH2 OT -0.834000 15.9994 0 + 3889 W1 467 TIP3 H1 HT 0.417000 1.0080 0 + 3890 W1 467 TIP3 H2 HT 0.417000 1.0080 0 + 3891 W1 468 TIP3 OH2 OT -0.834000 15.9994 0 + 3892 W1 468 TIP3 H1 HT 0.417000 1.0080 0 + 3893 W1 468 TIP3 H2 HT 0.417000 1.0080 0 + 3894 W1 469 TIP3 OH2 OT -0.834000 15.9994 0 + 3895 W1 469 TIP3 H1 HT 0.417000 1.0080 0 + 3896 W1 469 TIP3 H2 HT 0.417000 1.0080 0 + 3897 W1 470 TIP3 OH2 OT -0.834000 15.9994 0 + 3898 W1 470 TIP3 H1 HT 0.417000 1.0080 0 + 3899 W1 470 TIP3 H2 HT 0.417000 1.0080 0 + 3900 W1 471 TIP3 OH2 OT -0.834000 15.9994 0 + 3901 W1 471 TIP3 H1 HT 0.417000 1.0080 0 + 3902 W1 471 TIP3 H2 HT 0.417000 1.0080 0 + 3903 W1 472 TIP3 OH2 OT -0.834000 15.9994 0 + 3904 W1 472 TIP3 H1 HT 0.417000 1.0080 0 + 3905 W1 472 TIP3 H2 HT 0.417000 1.0080 0 + 3906 W1 473 TIP3 OH2 OT -0.834000 15.9994 0 + 3907 W1 473 TIP3 H1 HT 0.417000 1.0080 0 + 3908 W1 473 TIP3 H2 HT 0.417000 1.0080 0 + 3909 W1 474 TIP3 OH2 OT -0.834000 15.9994 0 + 3910 W1 474 TIP3 H1 HT 0.417000 1.0080 0 + 3911 W1 474 TIP3 H2 HT 0.417000 1.0080 0 + 3912 W1 475 TIP3 OH2 OT -0.834000 15.9994 0 + 3913 W1 475 TIP3 H1 HT 0.417000 1.0080 0 + 3914 W1 475 TIP3 H2 HT 0.417000 1.0080 0 + 3915 W1 476 TIP3 OH2 OT -0.834000 15.9994 0 + 3916 W1 476 TIP3 H1 HT 0.417000 1.0080 0 + 3917 W1 476 TIP3 H2 HT 0.417000 1.0080 0 + 3918 W1 477 TIP3 OH2 OT -0.834000 15.9994 0 + 3919 W1 477 TIP3 H1 HT 0.417000 1.0080 0 + 3920 W1 477 TIP3 H2 HT 0.417000 1.0080 0 + 3921 W1 478 TIP3 OH2 OT -0.834000 15.9994 0 + 3922 W1 478 TIP3 H1 HT 0.417000 1.0080 0 + 3923 W1 478 TIP3 H2 HT 0.417000 1.0080 0 + 3924 W1 479 TIP3 OH2 OT -0.834000 15.9994 0 + 3925 W1 479 TIP3 H1 HT 0.417000 1.0080 0 + 3926 W1 479 TIP3 H2 HT 0.417000 1.0080 0 + 3927 W1 480 TIP3 OH2 OT -0.834000 15.9994 0 + 3928 W1 480 TIP3 H1 HT 0.417000 1.0080 0 + 3929 W1 480 TIP3 H2 HT 0.417000 1.0080 0 + 3930 W1 481 TIP3 OH2 OT -0.834000 15.9994 0 + 3931 W1 481 TIP3 H1 HT 0.417000 1.0080 0 + 3932 W1 481 TIP3 H2 HT 0.417000 1.0080 0 + 3933 W1 482 TIP3 OH2 OT -0.834000 15.9994 0 + 3934 W1 482 TIP3 H1 HT 0.417000 1.0080 0 + 3935 W1 482 TIP3 H2 HT 0.417000 1.0080 0 + 3936 W1 483 TIP3 OH2 OT -0.834000 15.9994 0 + 3937 W1 483 TIP3 H1 HT 0.417000 1.0080 0 + 3938 W1 483 TIP3 H2 HT 0.417000 1.0080 0 + 3939 W1 484 TIP3 OH2 OT -0.834000 15.9994 0 + 3940 W1 484 TIP3 H1 HT 0.417000 1.0080 0 + 3941 W1 484 TIP3 H2 HT 0.417000 1.0080 0 + 3942 W1 485 TIP3 OH2 OT -0.834000 15.9994 0 + 3943 W1 485 TIP3 H1 HT 0.417000 1.0080 0 + 3944 W1 485 TIP3 H2 HT 0.417000 1.0080 0 + 3945 W1 486 TIP3 OH2 OT -0.834000 15.9994 0 + 3946 W1 486 TIP3 H1 HT 0.417000 1.0080 0 + 3947 W1 486 TIP3 H2 HT 0.417000 1.0080 0 + 3948 W1 487 TIP3 OH2 OT -0.834000 15.9994 0 + 3949 W1 487 TIP3 H1 HT 0.417000 1.0080 0 + 3950 W1 487 TIP3 H2 HT 0.417000 1.0080 0 + 3951 W1 488 TIP3 OH2 OT -0.834000 15.9994 0 + 3952 W1 488 TIP3 H1 HT 0.417000 1.0080 0 + 3953 W1 488 TIP3 H2 HT 0.417000 1.0080 0 + 3954 W1 489 TIP3 OH2 OT -0.834000 15.9994 0 + 3955 W1 489 TIP3 H1 HT 0.417000 1.0080 0 + 3956 W1 489 TIP3 H2 HT 0.417000 1.0080 0 + 3957 W1 490 TIP3 OH2 OT -0.834000 15.9994 0 + 3958 W1 490 TIP3 H1 HT 0.417000 1.0080 0 + 3959 W1 490 TIP3 H2 HT 0.417000 1.0080 0 + 3960 W1 491 TIP3 OH2 OT -0.834000 15.9994 0 + 3961 W1 491 TIP3 H1 HT 0.417000 1.0080 0 + 3962 W1 491 TIP3 H2 HT 0.417000 1.0080 0 + 3963 W1 492 TIP3 OH2 OT -0.834000 15.9994 0 + 3964 W1 492 TIP3 H1 HT 0.417000 1.0080 0 + 3965 W1 492 TIP3 H2 HT 0.417000 1.0080 0 + 3966 W1 493 TIP3 OH2 OT -0.834000 15.9994 0 + 3967 W1 493 TIP3 H1 HT 0.417000 1.0080 0 + 3968 W1 493 TIP3 H2 HT 0.417000 1.0080 0 + 3969 W1 494 TIP3 OH2 OT -0.834000 15.9994 0 + 3970 W1 494 TIP3 H1 HT 0.417000 1.0080 0 + 3971 W1 494 TIP3 H2 HT 0.417000 1.0080 0 + 3972 W1 495 TIP3 OH2 OT -0.834000 15.9994 0 + 3973 W1 495 TIP3 H1 HT 0.417000 1.0080 0 + 3974 W1 495 TIP3 H2 HT 0.417000 1.0080 0 + 3975 W1 496 TIP3 OH2 OT -0.834000 15.9994 0 + 3976 W1 496 TIP3 H1 HT 0.417000 1.0080 0 + 3977 W1 496 TIP3 H2 HT 0.417000 1.0080 0 + 3978 W1 497 TIP3 OH2 OT -0.834000 15.9994 0 + 3979 W1 497 TIP3 H1 HT 0.417000 1.0080 0 + 3980 W1 497 TIP3 H2 HT 0.417000 1.0080 0 + 3981 W1 498 TIP3 OH2 OT -0.834000 15.9994 0 + 3982 W1 498 TIP3 H1 HT 0.417000 1.0080 0 + 3983 W1 498 TIP3 H2 HT 0.417000 1.0080 0 + 3984 W1 499 TIP3 OH2 OT -0.834000 15.9994 0 + 3985 W1 499 TIP3 H1 HT 0.417000 1.0080 0 + 3986 W1 499 TIP3 H2 HT 0.417000 1.0080 0 + 3987 W1 500 TIP3 OH2 OT -0.834000 15.9994 0 + 3988 W1 500 TIP3 H1 HT 0.417000 1.0080 0 + 3989 W1 500 TIP3 H2 HT 0.417000 1.0080 0 + 3990 W1 501 TIP3 OH2 OT -0.834000 15.9994 0 + 3991 W1 501 TIP3 H1 HT 0.417000 1.0080 0 + 3992 W1 501 TIP3 H2 HT 0.417000 1.0080 0 + 3993 W1 502 TIP3 OH2 OT -0.834000 15.9994 0 + 3994 W1 502 TIP3 H1 HT 0.417000 1.0080 0 + 3995 W1 502 TIP3 H2 HT 0.417000 1.0080 0 + 3996 W1 503 TIP3 OH2 OT -0.834000 15.9994 0 + 3997 W1 503 TIP3 H1 HT 0.417000 1.0080 0 + 3998 W1 503 TIP3 H2 HT 0.417000 1.0080 0 + 3999 W1 504 TIP3 OH2 OT -0.834000 15.9994 0 + 4000 W1 504 TIP3 H1 HT 0.417000 1.0080 0 + 4001 W1 504 TIP3 H2 HT 0.417000 1.0080 0 + 4002 W1 505 TIP3 OH2 OT -0.834000 15.9994 0 + 4003 W1 505 TIP3 H1 HT 0.417000 1.0080 0 + 4004 W1 505 TIP3 H2 HT 0.417000 1.0080 0 + 4005 W1 506 TIP3 OH2 OT -0.834000 15.9994 0 + 4006 W1 506 TIP3 H1 HT 0.417000 1.0080 0 + 4007 W1 506 TIP3 H2 HT 0.417000 1.0080 0 + 4008 W1 507 TIP3 OH2 OT -0.834000 15.9994 0 + 4009 W1 507 TIP3 H1 HT 0.417000 1.0080 0 + 4010 W1 507 TIP3 H2 HT 0.417000 1.0080 0 + 4011 W1 508 TIP3 OH2 OT -0.834000 15.9994 0 + 4012 W1 508 TIP3 H1 HT 0.417000 1.0080 0 + 4013 W1 508 TIP3 H2 HT 0.417000 1.0080 0 + 4014 W1 509 TIP3 OH2 OT -0.834000 15.9994 0 + 4015 W1 509 TIP3 H1 HT 0.417000 1.0080 0 + 4016 W1 509 TIP3 H2 HT 0.417000 1.0080 0 + 4017 W1 510 TIP3 OH2 OT -0.834000 15.9994 0 + 4018 W1 510 TIP3 H1 HT 0.417000 1.0080 0 + 4019 W1 510 TIP3 H2 HT 0.417000 1.0080 0 + 4020 W1 511 TIP3 OH2 OT -0.834000 15.9994 0 + 4021 W1 511 TIP3 H1 HT 0.417000 1.0080 0 + 4022 W1 511 TIP3 H2 HT 0.417000 1.0080 0 + 4023 W1 512 TIP3 OH2 OT -0.834000 15.9994 0 + 4024 W1 512 TIP3 H1 HT 0.417000 1.0080 0 + 4025 W1 512 TIP3 H2 HT 0.417000 1.0080 0 + 4026 W1 513 TIP3 OH2 OT -0.834000 15.9994 0 + 4027 W1 513 TIP3 H1 HT 0.417000 1.0080 0 + 4028 W1 513 TIP3 H2 HT 0.417000 1.0080 0 + 4029 W1 514 TIP3 OH2 OT -0.834000 15.9994 0 + 4030 W1 514 TIP3 H1 HT 0.417000 1.0080 0 + 4031 W1 514 TIP3 H2 HT 0.417000 1.0080 0 + 4032 W1 515 TIP3 OH2 OT -0.834000 15.9994 0 + 4033 W1 515 TIP3 H1 HT 0.417000 1.0080 0 + 4034 W1 515 TIP3 H2 HT 0.417000 1.0080 0 + 4035 W1 516 TIP3 OH2 OT -0.834000 15.9994 0 + 4036 W1 516 TIP3 H1 HT 0.417000 1.0080 0 + 4037 W1 516 TIP3 H2 HT 0.417000 1.0080 0 + 4038 W1 517 TIP3 OH2 OT -0.834000 15.9994 0 + 4039 W1 517 TIP3 H1 HT 0.417000 1.0080 0 + 4040 W1 517 TIP3 H2 HT 0.417000 1.0080 0 + 4041 W1 518 TIP3 OH2 OT -0.834000 15.9994 0 + 4042 W1 518 TIP3 H1 HT 0.417000 1.0080 0 + 4043 W1 518 TIP3 H2 HT 0.417000 1.0080 0 + 4044 W1 519 TIP3 OH2 OT -0.834000 15.9994 0 + 4045 W1 519 TIP3 H1 HT 0.417000 1.0080 0 + 4046 W1 519 TIP3 H2 HT 0.417000 1.0080 0 + 4047 W1 520 TIP3 OH2 OT -0.834000 15.9994 0 + 4048 W1 520 TIP3 H1 HT 0.417000 1.0080 0 + 4049 W1 520 TIP3 H2 HT 0.417000 1.0080 0 + 4050 W1 521 TIP3 OH2 OT -0.834000 15.9994 0 + 4051 W1 521 TIP3 H1 HT 0.417000 1.0080 0 + 4052 W1 521 TIP3 H2 HT 0.417000 1.0080 0 + 4053 W1 522 TIP3 OH2 OT -0.834000 15.9994 0 + 4054 W1 522 TIP3 H1 HT 0.417000 1.0080 0 + 4055 W1 522 TIP3 H2 HT 0.417000 1.0080 0 + 4056 W1 523 TIP3 OH2 OT -0.834000 15.9994 0 + 4057 W1 523 TIP3 H1 HT 0.417000 1.0080 0 + 4058 W1 523 TIP3 H2 HT 0.417000 1.0080 0 + 4059 W1 524 TIP3 OH2 OT -0.834000 15.9994 0 + 4060 W1 524 TIP3 H1 HT 0.417000 1.0080 0 + 4061 W1 524 TIP3 H2 HT 0.417000 1.0080 0 + 4062 W1 525 TIP3 OH2 OT -0.834000 15.9994 0 + 4063 W1 525 TIP3 H1 HT 0.417000 1.0080 0 + 4064 W1 525 TIP3 H2 HT 0.417000 1.0080 0 + 4065 W1 526 TIP3 OH2 OT -0.834000 15.9994 0 + 4066 W1 526 TIP3 H1 HT 0.417000 1.0080 0 + 4067 W1 526 TIP3 H2 HT 0.417000 1.0080 0 + 4068 W1 527 TIP3 OH2 OT -0.834000 15.9994 0 + 4069 W1 527 TIP3 H1 HT 0.417000 1.0080 0 + 4070 W1 527 TIP3 H2 HT 0.417000 1.0080 0 + 4071 W1 528 TIP3 OH2 OT -0.834000 15.9994 0 + 4072 W1 528 TIP3 H1 HT 0.417000 1.0080 0 + 4073 W1 528 TIP3 H2 HT 0.417000 1.0080 0 + 4074 W1 529 TIP3 OH2 OT -0.834000 15.9994 0 + 4075 W1 529 TIP3 H1 HT 0.417000 1.0080 0 + 4076 W1 529 TIP3 H2 HT 0.417000 1.0080 0 + 4077 W1 530 TIP3 OH2 OT -0.834000 15.9994 0 + 4078 W1 530 TIP3 H1 HT 0.417000 1.0080 0 + 4079 W1 530 TIP3 H2 HT 0.417000 1.0080 0 + 4080 W1 531 TIP3 OH2 OT -0.834000 15.9994 0 + 4081 W1 531 TIP3 H1 HT 0.417000 1.0080 0 + 4082 W1 531 TIP3 H2 HT 0.417000 1.0080 0 + 4083 W1 532 TIP3 OH2 OT -0.834000 15.9994 0 + 4084 W1 532 TIP3 H1 HT 0.417000 1.0080 0 + 4085 W1 532 TIP3 H2 HT 0.417000 1.0080 0 + 4086 W1 533 TIP3 OH2 OT -0.834000 15.9994 0 + 4087 W1 533 TIP3 H1 HT 0.417000 1.0080 0 + 4088 W1 533 TIP3 H2 HT 0.417000 1.0080 0 + 4089 W1 534 TIP3 OH2 OT -0.834000 15.9994 0 + 4090 W1 534 TIP3 H1 HT 0.417000 1.0080 0 + 4091 W1 534 TIP3 H2 HT 0.417000 1.0080 0 + 4092 W1 535 TIP3 OH2 OT -0.834000 15.9994 0 + 4093 W1 535 TIP3 H1 HT 0.417000 1.0080 0 + 4094 W1 535 TIP3 H2 HT 0.417000 1.0080 0 + 4095 W1 536 TIP3 OH2 OT -0.834000 15.9994 0 + 4096 W1 536 TIP3 H1 HT 0.417000 1.0080 0 + 4097 W1 536 TIP3 H2 HT 0.417000 1.0080 0 + 4098 W1 537 TIP3 OH2 OT -0.834000 15.9994 0 + 4099 W1 537 TIP3 H1 HT 0.417000 1.0080 0 + 4100 W1 537 TIP3 H2 HT 0.417000 1.0080 0 + 4101 W1 538 TIP3 OH2 OT -0.834000 15.9994 0 + 4102 W1 538 TIP3 H1 HT 0.417000 1.0080 0 + 4103 W1 538 TIP3 H2 HT 0.417000 1.0080 0 + 4104 W1 539 TIP3 OH2 OT -0.834000 15.9994 0 + 4105 W1 539 TIP3 H1 HT 0.417000 1.0080 0 + 4106 W1 539 TIP3 H2 HT 0.417000 1.0080 0 + 4107 W1 540 TIP3 OH2 OT -0.834000 15.9994 0 + 4108 W1 540 TIP3 H1 HT 0.417000 1.0080 0 + 4109 W1 540 TIP3 H2 HT 0.417000 1.0080 0 + 4110 W1 541 TIP3 OH2 OT -0.834000 15.9994 0 + 4111 W1 541 TIP3 H1 HT 0.417000 1.0080 0 + 4112 W1 541 TIP3 H2 HT 0.417000 1.0080 0 + 4113 W1 542 TIP3 OH2 OT -0.834000 15.9994 0 + 4114 W1 542 TIP3 H1 HT 0.417000 1.0080 0 + 4115 W1 542 TIP3 H2 HT 0.417000 1.0080 0 + 4116 W1 543 TIP3 OH2 OT -0.834000 15.9994 0 + 4117 W1 543 TIP3 H1 HT 0.417000 1.0080 0 + 4118 W1 543 TIP3 H2 HT 0.417000 1.0080 0 + 4119 W1 544 TIP3 OH2 OT -0.834000 15.9994 0 + 4120 W1 544 TIP3 H1 HT 0.417000 1.0080 0 + 4121 W1 544 TIP3 H2 HT 0.417000 1.0080 0 + 4122 W1 545 TIP3 OH2 OT -0.834000 15.9994 0 + 4123 W1 545 TIP3 H1 HT 0.417000 1.0080 0 + 4124 W1 545 TIP3 H2 HT 0.417000 1.0080 0 + 4125 W1 546 TIP3 OH2 OT -0.834000 15.9994 0 + 4126 W1 546 TIP3 H1 HT 0.417000 1.0080 0 + 4127 W1 546 TIP3 H2 HT 0.417000 1.0080 0 + 4128 W1 547 TIP3 OH2 OT -0.834000 15.9994 0 + 4129 W1 547 TIP3 H1 HT 0.417000 1.0080 0 + 4130 W1 547 TIP3 H2 HT 0.417000 1.0080 0 + 4131 W1 548 TIP3 OH2 OT -0.834000 15.9994 0 + 4132 W1 548 TIP3 H1 HT 0.417000 1.0080 0 + 4133 W1 548 TIP3 H2 HT 0.417000 1.0080 0 + 4134 W1 549 TIP3 OH2 OT -0.834000 15.9994 0 + 4135 W1 549 TIP3 H1 HT 0.417000 1.0080 0 + 4136 W1 549 TIP3 H2 HT 0.417000 1.0080 0 + 4137 W1 550 TIP3 OH2 OT -0.834000 15.9994 0 + 4138 W1 550 TIP3 H1 HT 0.417000 1.0080 0 + 4139 W1 550 TIP3 H2 HT 0.417000 1.0080 0 + 4140 W1 551 TIP3 OH2 OT -0.834000 15.9994 0 + 4141 W1 551 TIP3 H1 HT 0.417000 1.0080 0 + 4142 W1 551 TIP3 H2 HT 0.417000 1.0080 0 + 4143 W1 552 TIP3 OH2 OT -0.834000 15.9994 0 + 4144 W1 552 TIP3 H1 HT 0.417000 1.0080 0 + 4145 W1 552 TIP3 H2 HT 0.417000 1.0080 0 + 4146 W1 553 TIP3 OH2 OT -0.834000 15.9994 0 + 4147 W1 553 TIP3 H1 HT 0.417000 1.0080 0 + 4148 W1 553 TIP3 H2 HT 0.417000 1.0080 0 + 4149 W1 554 TIP3 OH2 OT -0.834000 15.9994 0 + 4150 W1 554 TIP3 H1 HT 0.417000 1.0080 0 + 4151 W1 554 TIP3 H2 HT 0.417000 1.0080 0 + 4152 W1 555 TIP3 OH2 OT -0.834000 15.9994 0 + 4153 W1 555 TIP3 H1 HT 0.417000 1.0080 0 + 4154 W1 555 TIP3 H2 HT 0.417000 1.0080 0 + 4155 W1 556 TIP3 OH2 OT -0.834000 15.9994 0 + 4156 W1 556 TIP3 H1 HT 0.417000 1.0080 0 + 4157 W1 556 TIP3 H2 HT 0.417000 1.0080 0 + 4158 W1 557 TIP3 OH2 OT -0.834000 15.9994 0 + 4159 W1 557 TIP3 H1 HT 0.417000 1.0080 0 + 4160 W1 557 TIP3 H2 HT 0.417000 1.0080 0 + 4161 W1 558 TIP3 OH2 OT -0.834000 15.9994 0 + 4162 W1 558 TIP3 H1 HT 0.417000 1.0080 0 + 4163 W1 558 TIP3 H2 HT 0.417000 1.0080 0 + 4164 W1 559 TIP3 OH2 OT -0.834000 15.9994 0 + 4165 W1 559 TIP3 H1 HT 0.417000 1.0080 0 + 4166 W1 559 TIP3 H2 HT 0.417000 1.0080 0 + 4167 W1 560 TIP3 OH2 OT -0.834000 15.9994 0 + 4168 W1 560 TIP3 H1 HT 0.417000 1.0080 0 + 4169 W1 560 TIP3 H2 HT 0.417000 1.0080 0 + 4170 W1 561 TIP3 OH2 OT -0.834000 15.9994 0 + 4171 W1 561 TIP3 H1 HT 0.417000 1.0080 0 + 4172 W1 561 TIP3 H2 HT 0.417000 1.0080 0 + 4173 W1 562 TIP3 OH2 OT -0.834000 15.9994 0 + 4174 W1 562 TIP3 H1 HT 0.417000 1.0080 0 + 4175 W1 562 TIP3 H2 HT 0.417000 1.0080 0 + 4176 W1 563 TIP3 OH2 OT -0.834000 15.9994 0 + 4177 W1 563 TIP3 H1 HT 0.417000 1.0080 0 + 4178 W1 563 TIP3 H2 HT 0.417000 1.0080 0 + 4179 W1 564 TIP3 OH2 OT -0.834000 15.9994 0 + 4180 W1 564 TIP3 H1 HT 0.417000 1.0080 0 + 4181 W1 564 TIP3 H2 HT 0.417000 1.0080 0 + 4182 W1 565 TIP3 OH2 OT -0.834000 15.9994 0 + 4183 W1 565 TIP3 H1 HT 0.417000 1.0080 0 + 4184 W1 565 TIP3 H2 HT 0.417000 1.0080 0 + 4185 W1 566 TIP3 OH2 OT -0.834000 15.9994 0 + 4186 W1 566 TIP3 H1 HT 0.417000 1.0080 0 + 4187 W1 566 TIP3 H2 HT 0.417000 1.0080 0 + 4188 W1 567 TIP3 OH2 OT -0.834000 15.9994 0 + 4189 W1 567 TIP3 H1 HT 0.417000 1.0080 0 + 4190 W1 567 TIP3 H2 HT 0.417000 1.0080 0 + 4191 W1 568 TIP3 OH2 OT -0.834000 15.9994 0 + 4192 W1 568 TIP3 H1 HT 0.417000 1.0080 0 + 4193 W1 568 TIP3 H2 HT 0.417000 1.0080 0 + 4194 W1 569 TIP3 OH2 OT -0.834000 15.9994 0 + 4195 W1 569 TIP3 H1 HT 0.417000 1.0080 0 + 4196 W1 569 TIP3 H2 HT 0.417000 1.0080 0 + 4197 W1 570 TIP3 OH2 OT -0.834000 15.9994 0 + 4198 W1 570 TIP3 H1 HT 0.417000 1.0080 0 + 4199 W1 570 TIP3 H2 HT 0.417000 1.0080 0 + 4200 W1 571 TIP3 OH2 OT -0.834000 15.9994 0 + 4201 W1 571 TIP3 H1 HT 0.417000 1.0080 0 + 4202 W1 571 TIP3 H2 HT 0.417000 1.0080 0 + 4203 W1 572 TIP3 OH2 OT -0.834000 15.9994 0 + 4204 W1 572 TIP3 H1 HT 0.417000 1.0080 0 + 4205 W1 572 TIP3 H2 HT 0.417000 1.0080 0 + 4206 W1 573 TIP3 OH2 OT -0.834000 15.9994 0 + 4207 W1 573 TIP3 H1 HT 0.417000 1.0080 0 + 4208 W1 573 TIP3 H2 HT 0.417000 1.0080 0 + 4209 W1 574 TIP3 OH2 OT -0.834000 15.9994 0 + 4210 W1 574 TIP3 H1 HT 0.417000 1.0080 0 + 4211 W1 574 TIP3 H2 HT 0.417000 1.0080 0 + 4212 W1 575 TIP3 OH2 OT -0.834000 15.9994 0 + 4213 W1 575 TIP3 H1 HT 0.417000 1.0080 0 + 4214 W1 575 TIP3 H2 HT 0.417000 1.0080 0 + 4215 W1 576 TIP3 OH2 OT -0.834000 15.9994 0 + 4216 W1 576 TIP3 H1 HT 0.417000 1.0080 0 + 4217 W1 576 TIP3 H2 HT 0.417000 1.0080 0 + 4218 W1 577 TIP3 OH2 OT -0.834000 15.9994 0 + 4219 W1 577 TIP3 H1 HT 0.417000 1.0080 0 + 4220 W1 577 TIP3 H2 HT 0.417000 1.0080 0 + 4221 W1 578 TIP3 OH2 OT -0.834000 15.9994 0 + 4222 W1 578 TIP3 H1 HT 0.417000 1.0080 0 + 4223 W1 578 TIP3 H2 HT 0.417000 1.0080 0 + 4224 W1 579 TIP3 OH2 OT -0.834000 15.9994 0 + 4225 W1 579 TIP3 H1 HT 0.417000 1.0080 0 + 4226 W1 579 TIP3 H2 HT 0.417000 1.0080 0 + 4227 W1 580 TIP3 OH2 OT -0.834000 15.9994 0 + 4228 W1 580 TIP3 H1 HT 0.417000 1.0080 0 + 4229 W1 580 TIP3 H2 HT 0.417000 1.0080 0 + 4230 W1 581 TIP3 OH2 OT -0.834000 15.9994 0 + 4231 W1 581 TIP3 H1 HT 0.417000 1.0080 0 + 4232 W1 581 TIP3 H2 HT 0.417000 1.0080 0 + 4233 W1 582 TIP3 OH2 OT -0.834000 15.9994 0 + 4234 W1 582 TIP3 H1 HT 0.417000 1.0080 0 + 4235 W1 582 TIP3 H2 HT 0.417000 1.0080 0 + 4236 W1 583 TIP3 OH2 OT -0.834000 15.9994 0 + 4237 W1 583 TIP3 H1 HT 0.417000 1.0080 0 + 4238 W1 583 TIP3 H2 HT 0.417000 1.0080 0 + 4239 W1 584 TIP3 OH2 OT -0.834000 15.9994 0 + 4240 W1 584 TIP3 H1 HT 0.417000 1.0080 0 + 4241 W1 584 TIP3 H2 HT 0.417000 1.0080 0 + 4242 W1 585 TIP3 OH2 OT -0.834000 15.9994 0 + 4243 W1 585 TIP3 H1 HT 0.417000 1.0080 0 + 4244 W1 585 TIP3 H2 HT 0.417000 1.0080 0 + 4245 W1 586 TIP3 OH2 OT -0.834000 15.9994 0 + 4246 W1 586 TIP3 H1 HT 0.417000 1.0080 0 + 4247 W1 586 TIP3 H2 HT 0.417000 1.0080 0 + 4248 W1 587 TIP3 OH2 OT -0.834000 15.9994 0 + 4249 W1 587 TIP3 H1 HT 0.417000 1.0080 0 + 4250 W1 587 TIP3 H2 HT 0.417000 1.0080 0 + 4251 W1 588 TIP3 OH2 OT -0.834000 15.9994 0 + 4252 W1 588 TIP3 H1 HT 0.417000 1.0080 0 + 4253 W1 588 TIP3 H2 HT 0.417000 1.0080 0 + 4254 W1 589 TIP3 OH2 OT -0.834000 15.9994 0 + 4255 W1 589 TIP3 H1 HT 0.417000 1.0080 0 + 4256 W1 589 TIP3 H2 HT 0.417000 1.0080 0 + 4257 W1 590 TIP3 OH2 OT -0.834000 15.9994 0 + 4258 W1 590 TIP3 H1 HT 0.417000 1.0080 0 + 4259 W1 590 TIP3 H2 HT 0.417000 1.0080 0 + 4260 W1 591 TIP3 OH2 OT -0.834000 15.9994 0 + 4261 W1 591 TIP3 H1 HT 0.417000 1.0080 0 + 4262 W1 591 TIP3 H2 HT 0.417000 1.0080 0 + 4263 W1 592 TIP3 OH2 OT -0.834000 15.9994 0 + 4264 W1 592 TIP3 H1 HT 0.417000 1.0080 0 + 4265 W1 592 TIP3 H2 HT 0.417000 1.0080 0 + 4266 W1 593 TIP3 OH2 OT -0.834000 15.9994 0 + 4267 W1 593 TIP3 H1 HT 0.417000 1.0080 0 + 4268 W1 593 TIP3 H2 HT 0.417000 1.0080 0 + 4269 W1 594 TIP3 OH2 OT -0.834000 15.9994 0 + 4270 W1 594 TIP3 H1 HT 0.417000 1.0080 0 + 4271 W1 594 TIP3 H2 HT 0.417000 1.0080 0 + 4272 W1 595 TIP3 OH2 OT -0.834000 15.9994 0 + 4273 W1 595 TIP3 H1 HT 0.417000 1.0080 0 + 4274 W1 595 TIP3 H2 HT 0.417000 1.0080 0 + 4275 W1 596 TIP3 OH2 OT -0.834000 15.9994 0 + 4276 W1 596 TIP3 H1 HT 0.417000 1.0080 0 + 4277 W1 596 TIP3 H2 HT 0.417000 1.0080 0 + 4278 W1 597 TIP3 OH2 OT -0.834000 15.9994 0 + 4279 W1 597 TIP3 H1 HT 0.417000 1.0080 0 + 4280 W1 597 TIP3 H2 HT 0.417000 1.0080 0 + 4281 W1 598 TIP3 OH2 OT -0.834000 15.9994 0 + 4282 W1 598 TIP3 H1 HT 0.417000 1.0080 0 + 4283 W1 598 TIP3 H2 HT 0.417000 1.0080 0 + 4284 W1 599 TIP3 OH2 OT -0.834000 15.9994 0 + 4285 W1 599 TIP3 H1 HT 0.417000 1.0080 0 + 4286 W1 599 TIP3 H2 HT 0.417000 1.0080 0 + 4287 W1 600 TIP3 OH2 OT -0.834000 15.9994 0 + 4288 W1 600 TIP3 H1 HT 0.417000 1.0080 0 + 4289 W1 600 TIP3 H2 HT 0.417000 1.0080 0 + 4290 W1 601 TIP3 OH2 OT -0.834000 15.9994 0 + 4291 W1 601 TIP3 H1 HT 0.417000 1.0080 0 + 4292 W1 601 TIP3 H2 HT 0.417000 1.0080 0 + 4293 W1 602 TIP3 OH2 OT -0.834000 15.9994 0 + 4294 W1 602 TIP3 H1 HT 0.417000 1.0080 0 + 4295 W1 602 TIP3 H2 HT 0.417000 1.0080 0 + 4296 W1 603 TIP3 OH2 OT -0.834000 15.9994 0 + 4297 W1 603 TIP3 H1 HT 0.417000 1.0080 0 + 4298 W1 603 TIP3 H2 HT 0.417000 1.0080 0 + 4299 W1 604 TIP3 OH2 OT -0.834000 15.9994 0 + 4300 W1 604 TIP3 H1 HT 0.417000 1.0080 0 + 4301 W1 604 TIP3 H2 HT 0.417000 1.0080 0 + 4302 W1 605 TIP3 OH2 OT -0.834000 15.9994 0 + 4303 W1 605 TIP3 H1 HT 0.417000 1.0080 0 + 4304 W1 605 TIP3 H2 HT 0.417000 1.0080 0 + 4305 W1 606 TIP3 OH2 OT -0.834000 15.9994 0 + 4306 W1 606 TIP3 H1 HT 0.417000 1.0080 0 + 4307 W1 606 TIP3 H2 HT 0.417000 1.0080 0 + 4308 W1 607 TIP3 OH2 OT -0.834000 15.9994 0 + 4309 W1 607 TIP3 H1 HT 0.417000 1.0080 0 + 4310 W1 607 TIP3 H2 HT 0.417000 1.0080 0 + 4311 W1 608 TIP3 OH2 OT -0.834000 15.9994 0 + 4312 W1 608 TIP3 H1 HT 0.417000 1.0080 0 + 4313 W1 608 TIP3 H2 HT 0.417000 1.0080 0 + 4314 W1 609 TIP3 OH2 OT -0.834000 15.9994 0 + 4315 W1 609 TIP3 H1 HT 0.417000 1.0080 0 + 4316 W1 609 TIP3 H2 HT 0.417000 1.0080 0 + 4317 W1 610 TIP3 OH2 OT -0.834000 15.9994 0 + 4318 W1 610 TIP3 H1 HT 0.417000 1.0080 0 + 4319 W1 610 TIP3 H2 HT 0.417000 1.0080 0 + 4320 W1 611 TIP3 OH2 OT -0.834000 15.9994 0 + 4321 W1 611 TIP3 H1 HT 0.417000 1.0080 0 + 4322 W1 611 TIP3 H2 HT 0.417000 1.0080 0 + 4323 W1 612 TIP3 OH2 OT -0.834000 15.9994 0 + 4324 W1 612 TIP3 H1 HT 0.417000 1.0080 0 + 4325 W1 612 TIP3 H2 HT 0.417000 1.0080 0 + 4326 W1 613 TIP3 OH2 OT -0.834000 15.9994 0 + 4327 W1 613 TIP3 H1 HT 0.417000 1.0080 0 + 4328 W1 613 TIP3 H2 HT 0.417000 1.0080 0 + 4329 W1 614 TIP3 OH2 OT -0.834000 15.9994 0 + 4330 W1 614 TIP3 H1 HT 0.417000 1.0080 0 + 4331 W1 614 TIP3 H2 HT 0.417000 1.0080 0 + 4332 W1 615 TIP3 OH2 OT -0.834000 15.9994 0 + 4333 W1 615 TIP3 H1 HT 0.417000 1.0080 0 + 4334 W1 615 TIP3 H2 HT 0.417000 1.0080 0 + 4335 W1 616 TIP3 OH2 OT -0.834000 15.9994 0 + 4336 W1 616 TIP3 H1 HT 0.417000 1.0080 0 + 4337 W1 616 TIP3 H2 HT 0.417000 1.0080 0 + 4338 W1 617 TIP3 OH2 OT -0.834000 15.9994 0 + 4339 W1 617 TIP3 H1 HT 0.417000 1.0080 0 + 4340 W1 617 TIP3 H2 HT 0.417000 1.0080 0 + 4341 W1 618 TIP3 OH2 OT -0.834000 15.9994 0 + 4342 W1 618 TIP3 H1 HT 0.417000 1.0080 0 + 4343 W1 618 TIP3 H2 HT 0.417000 1.0080 0 + 4344 W1 619 TIP3 OH2 OT -0.834000 15.9994 0 + 4345 W1 619 TIP3 H1 HT 0.417000 1.0080 0 + 4346 W1 619 TIP3 H2 HT 0.417000 1.0080 0 + 4347 W1 620 TIP3 OH2 OT -0.834000 15.9994 0 + 4348 W1 620 TIP3 H1 HT 0.417000 1.0080 0 + 4349 W1 620 TIP3 H2 HT 0.417000 1.0080 0 + 4350 W1 621 TIP3 OH2 OT -0.834000 15.9994 0 + 4351 W1 621 TIP3 H1 HT 0.417000 1.0080 0 + 4352 W1 621 TIP3 H2 HT 0.417000 1.0080 0 + 4353 W1 622 TIP3 OH2 OT -0.834000 15.9994 0 + 4354 W1 622 TIP3 H1 HT 0.417000 1.0080 0 + 4355 W1 622 TIP3 H2 HT 0.417000 1.0080 0 + 4356 W1 623 TIP3 OH2 OT -0.834000 15.9994 0 + 4357 W1 623 TIP3 H1 HT 0.417000 1.0080 0 + 4358 W1 623 TIP3 H2 HT 0.417000 1.0080 0 + 4359 W1 624 TIP3 OH2 OT -0.834000 15.9994 0 + 4360 W1 624 TIP3 H1 HT 0.417000 1.0080 0 + 4361 W1 624 TIP3 H2 HT 0.417000 1.0080 0 + 4362 W1 625 TIP3 OH2 OT -0.834000 15.9994 0 + 4363 W1 625 TIP3 H1 HT 0.417000 1.0080 0 + 4364 W1 625 TIP3 H2 HT 0.417000 1.0080 0 + 4365 W1 626 TIP3 OH2 OT -0.834000 15.9994 0 + 4366 W1 626 TIP3 H1 HT 0.417000 1.0080 0 + 4367 W1 626 TIP3 H2 HT 0.417000 1.0080 0 + 4368 W1 627 TIP3 OH2 OT -0.834000 15.9994 0 + 4369 W1 627 TIP3 H1 HT 0.417000 1.0080 0 + 4370 W1 627 TIP3 H2 HT 0.417000 1.0080 0 + 4371 W1 628 TIP3 OH2 OT -0.834000 15.9994 0 + 4372 W1 628 TIP3 H1 HT 0.417000 1.0080 0 + 4373 W1 628 TIP3 H2 HT 0.417000 1.0080 0 + 4374 W1 629 TIP3 OH2 OT -0.834000 15.9994 0 + 4375 W1 629 TIP3 H1 HT 0.417000 1.0080 0 + 4376 W1 629 TIP3 H2 HT 0.417000 1.0080 0 + 4377 W1 630 TIP3 OH2 OT -0.834000 15.9994 0 + 4378 W1 630 TIP3 H1 HT 0.417000 1.0080 0 + 4379 W1 630 TIP3 H2 HT 0.417000 1.0080 0 + 4380 W1 631 TIP3 OH2 OT -0.834000 15.9994 0 + 4381 W1 631 TIP3 H1 HT 0.417000 1.0080 0 + 4382 W1 631 TIP3 H2 HT 0.417000 1.0080 0 + 4383 W1 632 TIP3 OH2 OT -0.834000 15.9994 0 + 4384 W1 632 TIP3 H1 HT 0.417000 1.0080 0 + 4385 W1 632 TIP3 H2 HT 0.417000 1.0080 0 + 4386 W1 633 TIP3 OH2 OT -0.834000 15.9994 0 + 4387 W1 633 TIP3 H1 HT 0.417000 1.0080 0 + 4388 W1 633 TIP3 H2 HT 0.417000 1.0080 0 + 4389 W1 634 TIP3 OH2 OT -0.834000 15.9994 0 + 4390 W1 634 TIP3 H1 HT 0.417000 1.0080 0 + 4391 W1 634 TIP3 H2 HT 0.417000 1.0080 0 + 4392 W1 635 TIP3 OH2 OT -0.834000 15.9994 0 + 4393 W1 635 TIP3 H1 HT 0.417000 1.0080 0 + 4394 W1 635 TIP3 H2 HT 0.417000 1.0080 0 + 4395 W1 636 TIP3 OH2 OT -0.834000 15.9994 0 + 4396 W1 636 TIP3 H1 HT 0.417000 1.0080 0 + 4397 W1 636 TIP3 H2 HT 0.417000 1.0080 0 + 4398 W1 637 TIP3 OH2 OT -0.834000 15.9994 0 + 4399 W1 637 TIP3 H1 HT 0.417000 1.0080 0 + 4400 W1 637 TIP3 H2 HT 0.417000 1.0080 0 + 4401 W1 638 TIP3 OH2 OT -0.834000 15.9994 0 + 4402 W1 638 TIP3 H1 HT 0.417000 1.0080 0 + 4403 W1 638 TIP3 H2 HT 0.417000 1.0080 0 + 4404 W1 639 TIP3 OH2 OT -0.834000 15.9994 0 + 4405 W1 639 TIP3 H1 HT 0.417000 1.0080 0 + 4406 W1 639 TIP3 H2 HT 0.417000 1.0080 0 + 4407 W1 640 TIP3 OH2 OT -0.834000 15.9994 0 + 4408 W1 640 TIP3 H1 HT 0.417000 1.0080 0 + 4409 W1 640 TIP3 H2 HT 0.417000 1.0080 0 + 4410 W1 641 TIP3 OH2 OT -0.834000 15.9994 0 + 4411 W1 641 TIP3 H1 HT 0.417000 1.0080 0 + 4412 W1 641 TIP3 H2 HT 0.417000 1.0080 0 + 4413 W1 642 TIP3 OH2 OT -0.834000 15.9994 0 + 4414 W1 642 TIP3 H1 HT 0.417000 1.0080 0 + 4415 W1 642 TIP3 H2 HT 0.417000 1.0080 0 + 4416 W1 643 TIP3 OH2 OT -0.834000 15.9994 0 + 4417 W1 643 TIP3 H1 HT 0.417000 1.0080 0 + 4418 W1 643 TIP3 H2 HT 0.417000 1.0080 0 + 4419 W1 644 TIP3 OH2 OT -0.834000 15.9994 0 + 4420 W1 644 TIP3 H1 HT 0.417000 1.0080 0 + 4421 W1 644 TIP3 H2 HT 0.417000 1.0080 0 + 4422 W1 645 TIP3 OH2 OT -0.834000 15.9994 0 + 4423 W1 645 TIP3 H1 HT 0.417000 1.0080 0 + 4424 W1 645 TIP3 H2 HT 0.417000 1.0080 0 + 4425 W1 646 TIP3 OH2 OT -0.834000 15.9994 0 + 4426 W1 646 TIP3 H1 HT 0.417000 1.0080 0 + 4427 W1 646 TIP3 H2 HT 0.417000 1.0080 0 + 4428 W1 647 TIP3 OH2 OT -0.834000 15.9994 0 + 4429 W1 647 TIP3 H1 HT 0.417000 1.0080 0 + 4430 W1 647 TIP3 H2 HT 0.417000 1.0080 0 + 4431 W1 648 TIP3 OH2 OT -0.834000 15.9994 0 + 4432 W1 648 TIP3 H1 HT 0.417000 1.0080 0 + 4433 W1 648 TIP3 H2 HT 0.417000 1.0080 0 + 4434 W1 649 TIP3 OH2 OT -0.834000 15.9994 0 + 4435 W1 649 TIP3 H1 HT 0.417000 1.0080 0 + 4436 W1 649 TIP3 H2 HT 0.417000 1.0080 0 + 4437 W1 650 TIP3 OH2 OT -0.834000 15.9994 0 + 4438 W1 650 TIP3 H1 HT 0.417000 1.0080 0 + 4439 W1 650 TIP3 H2 HT 0.417000 1.0080 0 + 4440 W1 651 TIP3 OH2 OT -0.834000 15.9994 0 + 4441 W1 651 TIP3 H1 HT 0.417000 1.0080 0 + 4442 W1 651 TIP3 H2 HT 0.417000 1.0080 0 + 4443 W1 652 TIP3 OH2 OT -0.834000 15.9994 0 + 4444 W1 652 TIP3 H1 HT 0.417000 1.0080 0 + 4445 W1 652 TIP3 H2 HT 0.417000 1.0080 0 + 4446 W1 653 TIP3 OH2 OT -0.834000 15.9994 0 + 4447 W1 653 TIP3 H1 HT 0.417000 1.0080 0 + 4448 W1 653 TIP3 H2 HT 0.417000 1.0080 0 + 4449 W1 654 TIP3 OH2 OT -0.834000 15.9994 0 + 4450 W1 654 TIP3 H1 HT 0.417000 1.0080 0 + 4451 W1 654 TIP3 H2 HT 0.417000 1.0080 0 + 4452 W1 655 TIP3 OH2 OT -0.834000 15.9994 0 + 4453 W1 655 TIP3 H1 HT 0.417000 1.0080 0 + 4454 W1 655 TIP3 H2 HT 0.417000 1.0080 0 + 4455 W1 656 TIP3 OH2 OT -0.834000 15.9994 0 + 4456 W1 656 TIP3 H1 HT 0.417000 1.0080 0 + 4457 W1 656 TIP3 H2 HT 0.417000 1.0080 0 + 4458 W1 657 TIP3 OH2 OT -0.834000 15.9994 0 + 4459 W1 657 TIP3 H1 HT 0.417000 1.0080 0 + 4460 W1 657 TIP3 H2 HT 0.417000 1.0080 0 + 4461 W1 658 TIP3 OH2 OT -0.834000 15.9994 0 + 4462 W1 658 TIP3 H1 HT 0.417000 1.0080 0 + 4463 W1 658 TIP3 H2 HT 0.417000 1.0080 0 + 4464 W1 659 TIP3 OH2 OT -0.834000 15.9994 0 + 4465 W1 659 TIP3 H1 HT 0.417000 1.0080 0 + 4466 W1 659 TIP3 H2 HT 0.417000 1.0080 0 + 4467 W1 660 TIP3 OH2 OT -0.834000 15.9994 0 + 4468 W1 660 TIP3 H1 HT 0.417000 1.0080 0 + 4469 W1 660 TIP3 H2 HT 0.417000 1.0080 0 + 4470 W1 661 TIP3 OH2 OT -0.834000 15.9994 0 + 4471 W1 661 TIP3 H1 HT 0.417000 1.0080 0 + 4472 W1 661 TIP3 H2 HT 0.417000 1.0080 0 + 4473 W1 662 TIP3 OH2 OT -0.834000 15.9994 0 + 4474 W1 662 TIP3 H1 HT 0.417000 1.0080 0 + 4475 W1 662 TIP3 H2 HT 0.417000 1.0080 0 + 4476 W1 663 TIP3 OH2 OT -0.834000 15.9994 0 + 4477 W1 663 TIP3 H1 HT 0.417000 1.0080 0 + 4478 W1 663 TIP3 H2 HT 0.417000 1.0080 0 + 4479 W1 664 TIP3 OH2 OT -0.834000 15.9994 0 + 4480 W1 664 TIP3 H1 HT 0.417000 1.0080 0 + 4481 W1 664 TIP3 H2 HT 0.417000 1.0080 0 + 4482 W1 665 TIP3 OH2 OT -0.834000 15.9994 0 + 4483 W1 665 TIP3 H1 HT 0.417000 1.0080 0 + 4484 W1 665 TIP3 H2 HT 0.417000 1.0080 0 + 4485 W1 666 TIP3 OH2 OT -0.834000 15.9994 0 + 4486 W1 666 TIP3 H1 HT 0.417000 1.0080 0 + 4487 W1 666 TIP3 H2 HT 0.417000 1.0080 0 + 4488 W1 667 TIP3 OH2 OT -0.834000 15.9994 0 + 4489 W1 667 TIP3 H1 HT 0.417000 1.0080 0 + 4490 W1 667 TIP3 H2 HT 0.417000 1.0080 0 + 4491 W1 668 TIP3 OH2 OT -0.834000 15.9994 0 + 4492 W1 668 TIP3 H1 HT 0.417000 1.0080 0 + 4493 W1 668 TIP3 H2 HT 0.417000 1.0080 0 + 4494 W1 669 TIP3 OH2 OT -0.834000 15.9994 0 + 4495 W1 669 TIP3 H1 HT 0.417000 1.0080 0 + 4496 W1 669 TIP3 H2 HT 0.417000 1.0080 0 + 4497 W1 670 TIP3 OH2 OT -0.834000 15.9994 0 + 4498 W1 670 TIP3 H1 HT 0.417000 1.0080 0 + 4499 W1 670 TIP3 H2 HT 0.417000 1.0080 0 + 4500 W1 671 TIP3 OH2 OT -0.834000 15.9994 0 + 4501 W1 671 TIP3 H1 HT 0.417000 1.0080 0 + 4502 W1 671 TIP3 H2 HT 0.417000 1.0080 0 + 4503 W1 672 TIP3 OH2 OT -0.834000 15.9994 0 + 4504 W1 672 TIP3 H1 HT 0.417000 1.0080 0 + 4505 W1 672 TIP3 H2 HT 0.417000 1.0080 0 + 4506 W1 673 TIP3 OH2 OT -0.834000 15.9994 0 + 4507 W1 673 TIP3 H1 HT 0.417000 1.0080 0 + 4508 W1 673 TIP3 H2 HT 0.417000 1.0080 0 + 4509 W1 674 TIP3 OH2 OT -0.834000 15.9994 0 + 4510 W1 674 TIP3 H1 HT 0.417000 1.0080 0 + 4511 W1 674 TIP3 H2 HT 0.417000 1.0080 0 + 4512 W1 675 TIP3 OH2 OT -0.834000 15.9994 0 + 4513 W1 675 TIP3 H1 HT 0.417000 1.0080 0 + 4514 W1 675 TIP3 H2 HT 0.417000 1.0080 0 + 4515 W1 676 TIP3 OH2 OT -0.834000 15.9994 0 + 4516 W1 676 TIP3 H1 HT 0.417000 1.0080 0 + 4517 W1 676 TIP3 H2 HT 0.417000 1.0080 0 + 4518 W1 677 TIP3 OH2 OT -0.834000 15.9994 0 + 4519 W1 677 TIP3 H1 HT 0.417000 1.0080 0 + 4520 W1 677 TIP3 H2 HT 0.417000 1.0080 0 + 4521 W1 678 TIP3 OH2 OT -0.834000 15.9994 0 + 4522 W1 678 TIP3 H1 HT 0.417000 1.0080 0 + 4523 W1 678 TIP3 H2 HT 0.417000 1.0080 0 + 4524 W1 679 TIP3 OH2 OT -0.834000 15.9994 0 + 4525 W1 679 TIP3 H1 HT 0.417000 1.0080 0 + 4526 W1 679 TIP3 H2 HT 0.417000 1.0080 0 + 4527 W1 680 TIP3 OH2 OT -0.834000 15.9994 0 + 4528 W1 680 TIP3 H1 HT 0.417000 1.0080 0 + 4529 W1 680 TIP3 H2 HT 0.417000 1.0080 0 + 4530 W1 681 TIP3 OH2 OT -0.834000 15.9994 0 + 4531 W1 681 TIP3 H1 HT 0.417000 1.0080 0 + 4532 W1 681 TIP3 H2 HT 0.417000 1.0080 0 + 4533 W1 682 TIP3 OH2 OT -0.834000 15.9994 0 + 4534 W1 682 TIP3 H1 HT 0.417000 1.0080 0 + 4535 W1 682 TIP3 H2 HT 0.417000 1.0080 0 + 4536 W1 683 TIP3 OH2 OT -0.834000 15.9994 0 + 4537 W1 683 TIP3 H1 HT 0.417000 1.0080 0 + 4538 W1 683 TIP3 H2 HT 0.417000 1.0080 0 + 4539 W1 684 TIP3 OH2 OT -0.834000 15.9994 0 + 4540 W1 684 TIP3 H1 HT 0.417000 1.0080 0 + 4541 W1 684 TIP3 H2 HT 0.417000 1.0080 0 + 4542 W1 685 TIP3 OH2 OT -0.834000 15.9994 0 + 4543 W1 685 TIP3 H1 HT 0.417000 1.0080 0 + 4544 W1 685 TIP3 H2 HT 0.417000 1.0080 0 + 4545 W1 686 TIP3 OH2 OT -0.834000 15.9994 0 + 4546 W1 686 TIP3 H1 HT 0.417000 1.0080 0 + 4547 W1 686 TIP3 H2 HT 0.417000 1.0080 0 + 4548 W1 687 TIP3 OH2 OT -0.834000 15.9994 0 + 4549 W1 687 TIP3 H1 HT 0.417000 1.0080 0 + 4550 W1 687 TIP3 H2 HT 0.417000 1.0080 0 + 4551 W1 688 TIP3 OH2 OT -0.834000 15.9994 0 + 4552 W1 688 TIP3 H1 HT 0.417000 1.0080 0 + 4553 W1 688 TIP3 H2 HT 0.417000 1.0080 0 + 4554 W1 689 TIP3 OH2 OT -0.834000 15.9994 0 + 4555 W1 689 TIP3 H1 HT 0.417000 1.0080 0 + 4556 W1 689 TIP3 H2 HT 0.417000 1.0080 0 + 4557 W1 690 TIP3 OH2 OT -0.834000 15.9994 0 + 4558 W1 690 TIP3 H1 HT 0.417000 1.0080 0 + 4559 W1 690 TIP3 H2 HT 0.417000 1.0080 0 + 4560 W1 691 TIP3 OH2 OT -0.834000 15.9994 0 + 4561 W1 691 TIP3 H1 HT 0.417000 1.0080 0 + 4562 W1 691 TIP3 H2 HT 0.417000 1.0080 0 + 4563 W1 692 TIP3 OH2 OT -0.834000 15.9994 0 + 4564 W1 692 TIP3 H1 HT 0.417000 1.0080 0 + 4565 W1 692 TIP3 H2 HT 0.417000 1.0080 0 + 4566 W1 693 TIP3 OH2 OT -0.834000 15.9994 0 + 4567 W1 693 TIP3 H1 HT 0.417000 1.0080 0 + 4568 W1 693 TIP3 H2 HT 0.417000 1.0080 0 + 4569 W1 694 TIP3 OH2 OT -0.834000 15.9994 0 + 4570 W1 694 TIP3 H1 HT 0.417000 1.0080 0 + 4571 W1 694 TIP3 H2 HT 0.417000 1.0080 0 + 4572 W1 695 TIP3 OH2 OT -0.834000 15.9994 0 + 4573 W1 695 TIP3 H1 HT 0.417000 1.0080 0 + 4574 W1 695 TIP3 H2 HT 0.417000 1.0080 0 + 4575 W1 696 TIP3 OH2 OT -0.834000 15.9994 0 + 4576 W1 696 TIP3 H1 HT 0.417000 1.0080 0 + 4577 W1 696 TIP3 H2 HT 0.417000 1.0080 0 + 4578 W1 697 TIP3 OH2 OT -0.834000 15.9994 0 + 4579 W1 697 TIP3 H1 HT 0.417000 1.0080 0 + 4580 W1 697 TIP3 H2 HT 0.417000 1.0080 0 + 4581 W1 698 TIP3 OH2 OT -0.834000 15.9994 0 + 4582 W1 698 TIP3 H1 HT 0.417000 1.0080 0 + 4583 W1 698 TIP3 H2 HT 0.417000 1.0080 0 + 4584 W1 699 TIP3 OH2 OT -0.834000 15.9994 0 + 4585 W1 699 TIP3 H1 HT 0.417000 1.0080 0 + 4586 W1 699 TIP3 H2 HT 0.417000 1.0080 0 + 4587 W1 700 TIP3 OH2 OT -0.834000 15.9994 0 + 4588 W1 700 TIP3 H1 HT 0.417000 1.0080 0 + 4589 W1 700 TIP3 H2 HT 0.417000 1.0080 0 + 4590 W1 701 TIP3 OH2 OT -0.834000 15.9994 0 + 4591 W1 701 TIP3 H1 HT 0.417000 1.0080 0 + 4592 W1 701 TIP3 H2 HT 0.417000 1.0080 0 + 4593 W1 702 TIP3 OH2 OT -0.834000 15.9994 0 + 4594 W1 702 TIP3 H1 HT 0.417000 1.0080 0 + 4595 W1 702 TIP3 H2 HT 0.417000 1.0080 0 + 4596 W1 703 TIP3 OH2 OT -0.834000 15.9994 0 + 4597 W1 703 TIP3 H1 HT 0.417000 1.0080 0 + 4598 W1 703 TIP3 H2 HT 0.417000 1.0080 0 + 4599 W1 704 TIP3 OH2 OT -0.834000 15.9994 0 + 4600 W1 704 TIP3 H1 HT 0.417000 1.0080 0 + 4601 W1 704 TIP3 H2 HT 0.417000 1.0080 0 + 4602 W1 705 TIP3 OH2 OT -0.834000 15.9994 0 + 4603 W1 705 TIP3 H1 HT 0.417000 1.0080 0 + 4604 W1 705 TIP3 H2 HT 0.417000 1.0080 0 + 4605 W1 706 TIP3 OH2 OT -0.834000 15.9994 0 + 4606 W1 706 TIP3 H1 HT 0.417000 1.0080 0 + 4607 W1 706 TIP3 H2 HT 0.417000 1.0080 0 + 4608 W1 707 TIP3 OH2 OT -0.834000 15.9994 0 + 4609 W1 707 TIP3 H1 HT 0.417000 1.0080 0 + 4610 W1 707 TIP3 H2 HT 0.417000 1.0080 0 + 4611 W1 708 TIP3 OH2 OT -0.834000 15.9994 0 + 4612 W1 708 TIP3 H1 HT 0.417000 1.0080 0 + 4613 W1 708 TIP3 H2 HT 0.417000 1.0080 0 + 4614 W1 709 TIP3 OH2 OT -0.834000 15.9994 0 + 4615 W1 709 TIP3 H1 HT 0.417000 1.0080 0 + 4616 W1 709 TIP3 H2 HT 0.417000 1.0080 0 + 4617 W1 710 TIP3 OH2 OT -0.834000 15.9994 0 + 4618 W1 710 TIP3 H1 HT 0.417000 1.0080 0 + 4619 W1 710 TIP3 H2 HT 0.417000 1.0080 0 + 4620 W1 711 TIP3 OH2 OT -0.834000 15.9994 0 + 4621 W1 711 TIP3 H1 HT 0.417000 1.0080 0 + 4622 W1 711 TIP3 H2 HT 0.417000 1.0080 0 + 4623 W1 712 TIP3 OH2 OT -0.834000 15.9994 0 + 4624 W1 712 TIP3 H1 HT 0.417000 1.0080 0 + 4625 W1 712 TIP3 H2 HT 0.417000 1.0080 0 + 4626 W1 713 TIP3 OH2 OT -0.834000 15.9994 0 + 4627 W1 713 TIP3 H1 HT 0.417000 1.0080 0 + 4628 W1 713 TIP3 H2 HT 0.417000 1.0080 0 + 4629 W1 714 TIP3 OH2 OT -0.834000 15.9994 0 + 4630 W1 714 TIP3 H1 HT 0.417000 1.0080 0 + 4631 W1 714 TIP3 H2 HT 0.417000 1.0080 0 + 4632 W1 715 TIP3 OH2 OT -0.834000 15.9994 0 + 4633 W1 715 TIP3 H1 HT 0.417000 1.0080 0 + 4634 W1 715 TIP3 H2 HT 0.417000 1.0080 0 + 4635 W1 716 TIP3 OH2 OT -0.834000 15.9994 0 + 4636 W1 716 TIP3 H1 HT 0.417000 1.0080 0 + 4637 W1 716 TIP3 H2 HT 0.417000 1.0080 0 + 4638 W1 717 TIP3 OH2 OT -0.834000 15.9994 0 + 4639 W1 717 TIP3 H1 HT 0.417000 1.0080 0 + 4640 W1 717 TIP3 H2 HT 0.417000 1.0080 0 + 4641 W1 718 TIP3 OH2 OT -0.834000 15.9994 0 + 4642 W1 718 TIP3 H1 HT 0.417000 1.0080 0 + 4643 W1 718 TIP3 H2 HT 0.417000 1.0080 0 + 4644 W1 719 TIP3 OH2 OT -0.834000 15.9994 0 + 4645 W1 719 TIP3 H1 HT 0.417000 1.0080 0 + 4646 W1 719 TIP3 H2 HT 0.417000 1.0080 0 + 4647 W1 720 TIP3 OH2 OT -0.834000 15.9994 0 + 4648 W1 720 TIP3 H1 HT 0.417000 1.0080 0 + 4649 W1 720 TIP3 H2 HT 0.417000 1.0080 0 + 4650 W1 721 TIP3 OH2 OT -0.834000 15.9994 0 + 4651 W1 721 TIP3 H1 HT 0.417000 1.0080 0 + 4652 W1 721 TIP3 H2 HT 0.417000 1.0080 0 + 4653 W1 722 TIP3 OH2 OT -0.834000 15.9994 0 + 4654 W1 722 TIP3 H1 HT 0.417000 1.0080 0 + 4655 W1 722 TIP3 H2 HT 0.417000 1.0080 0 + 4656 W1 723 TIP3 OH2 OT -0.834000 15.9994 0 + 4657 W1 723 TIP3 H1 HT 0.417000 1.0080 0 + 4658 W1 723 TIP3 H2 HT 0.417000 1.0080 0 + 4659 W1 724 TIP3 OH2 OT -0.834000 15.9994 0 + 4660 W1 724 TIP3 H1 HT 0.417000 1.0080 0 + 4661 W1 724 TIP3 H2 HT 0.417000 1.0080 0 + 4662 W1 725 TIP3 OH2 OT -0.834000 15.9994 0 + 4663 W1 725 TIP3 H1 HT 0.417000 1.0080 0 + 4664 W1 725 TIP3 H2 HT 0.417000 1.0080 0 + 4665 W1 726 TIP3 OH2 OT -0.834000 15.9994 0 + 4666 W1 726 TIP3 H1 HT 0.417000 1.0080 0 + 4667 W1 726 TIP3 H2 HT 0.417000 1.0080 0 + 4668 W1 727 TIP3 OH2 OT -0.834000 15.9994 0 + 4669 W1 727 TIP3 H1 HT 0.417000 1.0080 0 + 4670 W1 727 TIP3 H2 HT 0.417000 1.0080 0 + 4671 W1 728 TIP3 OH2 OT -0.834000 15.9994 0 + 4672 W1 728 TIP3 H1 HT 0.417000 1.0080 0 + 4673 W1 728 TIP3 H2 HT 0.417000 1.0080 0 + 4674 W1 729 TIP3 OH2 OT -0.834000 15.9994 0 + 4675 W1 729 TIP3 H1 HT 0.417000 1.0080 0 + 4676 W1 729 TIP3 H2 HT 0.417000 1.0080 0 + 4677 W1 730 TIP3 OH2 OT -0.834000 15.9994 0 + 4678 W1 730 TIP3 H1 HT 0.417000 1.0080 0 + 4679 W1 730 TIP3 H2 HT 0.417000 1.0080 0 + 4680 W1 731 TIP3 OH2 OT -0.834000 15.9994 0 + 4681 W1 731 TIP3 H1 HT 0.417000 1.0080 0 + 4682 W1 731 TIP3 H2 HT 0.417000 1.0080 0 + 4683 W1 732 TIP3 OH2 OT -0.834000 15.9994 0 + 4684 W1 732 TIP3 H1 HT 0.417000 1.0080 0 + 4685 W1 732 TIP3 H2 HT 0.417000 1.0080 0 + 4686 W1 733 TIP3 OH2 OT -0.834000 15.9994 0 + 4687 W1 733 TIP3 H1 HT 0.417000 1.0080 0 + 4688 W1 733 TIP3 H2 HT 0.417000 1.0080 0 + 4689 W1 734 TIP3 OH2 OT -0.834000 15.9994 0 + 4690 W1 734 TIP3 H1 HT 0.417000 1.0080 0 + 4691 W1 734 TIP3 H2 HT 0.417000 1.0080 0 + 4692 W1 735 TIP3 OH2 OT -0.834000 15.9994 0 + 4693 W1 735 TIP3 H1 HT 0.417000 1.0080 0 + 4694 W1 735 TIP3 H2 HT 0.417000 1.0080 0 + 4695 W1 736 TIP3 OH2 OT -0.834000 15.9994 0 + 4696 W1 736 TIP3 H1 HT 0.417000 1.0080 0 + 4697 W1 736 TIP3 H2 HT 0.417000 1.0080 0 + 4698 W1 737 TIP3 OH2 OT -0.834000 15.9994 0 + 4699 W1 737 TIP3 H1 HT 0.417000 1.0080 0 + 4700 W1 737 TIP3 H2 HT 0.417000 1.0080 0 + 4701 W1 738 TIP3 OH2 OT -0.834000 15.9994 0 + 4702 W1 738 TIP3 H1 HT 0.417000 1.0080 0 + 4703 W1 738 TIP3 H2 HT 0.417000 1.0080 0 + 4704 W1 739 TIP3 OH2 OT -0.834000 15.9994 0 + 4705 W1 739 TIP3 H1 HT 0.417000 1.0080 0 + 4706 W1 739 TIP3 H2 HT 0.417000 1.0080 0 + 4707 W1 740 TIP3 OH2 OT -0.834000 15.9994 0 + 4708 W1 740 TIP3 H1 HT 0.417000 1.0080 0 + 4709 W1 740 TIP3 H2 HT 0.417000 1.0080 0 + 4710 W1 741 TIP3 OH2 OT -0.834000 15.9994 0 + 4711 W1 741 TIP3 H1 HT 0.417000 1.0080 0 + 4712 W1 741 TIP3 H2 HT 0.417000 1.0080 0 + 4713 W1 742 TIP3 OH2 OT -0.834000 15.9994 0 + 4714 W1 742 TIP3 H1 HT 0.417000 1.0080 0 + 4715 W1 742 TIP3 H2 HT 0.417000 1.0080 0 + 4716 W1 743 TIP3 OH2 OT -0.834000 15.9994 0 + 4717 W1 743 TIP3 H1 HT 0.417000 1.0080 0 + 4718 W1 743 TIP3 H2 HT 0.417000 1.0080 0 + 4719 W1 744 TIP3 OH2 OT -0.834000 15.9994 0 + 4720 W1 744 TIP3 H1 HT 0.417000 1.0080 0 + 4721 W1 744 TIP3 H2 HT 0.417000 1.0080 0 + 4722 W1 745 TIP3 OH2 OT -0.834000 15.9994 0 + 4723 W1 745 TIP3 H1 HT 0.417000 1.0080 0 + 4724 W1 745 TIP3 H2 HT 0.417000 1.0080 0 + 4725 W1 746 TIP3 OH2 OT -0.834000 15.9994 0 + 4726 W1 746 TIP3 H1 HT 0.417000 1.0080 0 + 4727 W1 746 TIP3 H2 HT 0.417000 1.0080 0 + 4728 W1 747 TIP3 OH2 OT -0.834000 15.9994 0 + 4729 W1 747 TIP3 H1 HT 0.417000 1.0080 0 + 4730 W1 747 TIP3 H2 HT 0.417000 1.0080 0 + 4731 W1 748 TIP3 OH2 OT -0.834000 15.9994 0 + 4732 W1 748 TIP3 H1 HT 0.417000 1.0080 0 + 4733 W1 748 TIP3 H2 HT 0.417000 1.0080 0 + 4734 W1 749 TIP3 OH2 OT -0.834000 15.9994 0 + 4735 W1 749 TIP3 H1 HT 0.417000 1.0080 0 + 4736 W1 749 TIP3 H2 HT 0.417000 1.0080 0 + 4737 W1 750 TIP3 OH2 OT -0.834000 15.9994 0 + 4738 W1 750 TIP3 H1 HT 0.417000 1.0080 0 + 4739 W1 750 TIP3 H2 HT 0.417000 1.0080 0 + 4740 W1 751 TIP3 OH2 OT -0.834000 15.9994 0 + 4741 W1 751 TIP3 H1 HT 0.417000 1.0080 0 + 4742 W1 751 TIP3 H2 HT 0.417000 1.0080 0 + 4743 W1 752 TIP3 OH2 OT -0.834000 15.9994 0 + 4744 W1 752 TIP3 H1 HT 0.417000 1.0080 0 + 4745 W1 752 TIP3 H2 HT 0.417000 1.0080 0 + 4746 W1 753 TIP3 OH2 OT -0.834000 15.9994 0 + 4747 W1 753 TIP3 H1 HT 0.417000 1.0080 0 + 4748 W1 753 TIP3 H2 HT 0.417000 1.0080 0 + 4749 W1 754 TIP3 OH2 OT -0.834000 15.9994 0 + 4750 W1 754 TIP3 H1 HT 0.417000 1.0080 0 + 4751 W1 754 TIP3 H2 HT 0.417000 1.0080 0 + 4752 W1 755 TIP3 OH2 OT -0.834000 15.9994 0 + 4753 W1 755 TIP3 H1 HT 0.417000 1.0080 0 + 4754 W1 755 TIP3 H2 HT 0.417000 1.0080 0 + 4755 W1 756 TIP3 OH2 OT -0.834000 15.9994 0 + 4756 W1 756 TIP3 H1 HT 0.417000 1.0080 0 + 4757 W1 756 TIP3 H2 HT 0.417000 1.0080 0 + 4758 W1 757 TIP3 OH2 OT -0.834000 15.9994 0 + 4759 W1 757 TIP3 H1 HT 0.417000 1.0080 0 + 4760 W1 757 TIP3 H2 HT 0.417000 1.0080 0 + 4761 W1 758 TIP3 OH2 OT -0.834000 15.9994 0 + 4762 W1 758 TIP3 H1 HT 0.417000 1.0080 0 + 4763 W1 758 TIP3 H2 HT 0.417000 1.0080 0 + 4764 W1 759 TIP3 OH2 OT -0.834000 15.9994 0 + 4765 W1 759 TIP3 H1 HT 0.417000 1.0080 0 + 4766 W1 759 TIP3 H2 HT 0.417000 1.0080 0 + 4767 W1 760 TIP3 OH2 OT -0.834000 15.9994 0 + 4768 W1 760 TIP3 H1 HT 0.417000 1.0080 0 + 4769 W1 760 TIP3 H2 HT 0.417000 1.0080 0 + 4770 W1 761 TIP3 OH2 OT -0.834000 15.9994 0 + 4771 W1 761 TIP3 H1 HT 0.417000 1.0080 0 + 4772 W1 761 TIP3 H2 HT 0.417000 1.0080 0 + 4773 W1 762 TIP3 OH2 OT -0.834000 15.9994 0 + 4774 W1 762 TIP3 H1 HT 0.417000 1.0080 0 + 4775 W1 762 TIP3 H2 HT 0.417000 1.0080 0 + 4776 W1 763 TIP3 OH2 OT -0.834000 15.9994 0 + 4777 W1 763 TIP3 H1 HT 0.417000 1.0080 0 + 4778 W1 763 TIP3 H2 HT 0.417000 1.0080 0 + 4779 W1 764 TIP3 OH2 OT -0.834000 15.9994 0 + 4780 W1 764 TIP3 H1 HT 0.417000 1.0080 0 + 4781 W1 764 TIP3 H2 HT 0.417000 1.0080 0 + 4782 W1 765 TIP3 OH2 OT -0.834000 15.9994 0 + 4783 W1 765 TIP3 H1 HT 0.417000 1.0080 0 + 4784 W1 765 TIP3 H2 HT 0.417000 1.0080 0 + 4785 W1 766 TIP3 OH2 OT -0.834000 15.9994 0 + 4786 W1 766 TIP3 H1 HT 0.417000 1.0080 0 + 4787 W1 766 TIP3 H2 HT 0.417000 1.0080 0 + 4788 W1 767 TIP3 OH2 OT -0.834000 15.9994 0 + 4789 W1 767 TIP3 H1 HT 0.417000 1.0080 0 + 4790 W1 767 TIP3 H2 HT 0.417000 1.0080 0 + 4791 W1 768 TIP3 OH2 OT -0.834000 15.9994 0 + 4792 W1 768 TIP3 H1 HT 0.417000 1.0080 0 + 4793 W1 768 TIP3 H2 HT 0.417000 1.0080 0 + 4794 W1 769 TIP3 OH2 OT -0.834000 15.9994 0 + 4795 W1 769 TIP3 H1 HT 0.417000 1.0080 0 + 4796 W1 769 TIP3 H2 HT 0.417000 1.0080 0 + 4797 W1 770 TIP3 OH2 OT -0.834000 15.9994 0 + 4798 W1 770 TIP3 H1 HT 0.417000 1.0080 0 + 4799 W1 770 TIP3 H2 HT 0.417000 1.0080 0 + 4800 W1 771 TIP3 OH2 OT -0.834000 15.9994 0 + 4801 W1 771 TIP3 H1 HT 0.417000 1.0080 0 + 4802 W1 771 TIP3 H2 HT 0.417000 1.0080 0 + 4803 W1 772 TIP3 OH2 OT -0.834000 15.9994 0 + 4804 W1 772 TIP3 H1 HT 0.417000 1.0080 0 + 4805 W1 772 TIP3 H2 HT 0.417000 1.0080 0 + 4806 W1 773 TIP3 OH2 OT -0.834000 15.9994 0 + 4807 W1 773 TIP3 H1 HT 0.417000 1.0080 0 + 4808 W1 773 TIP3 H2 HT 0.417000 1.0080 0 + 4809 W1 774 TIP3 OH2 OT -0.834000 15.9994 0 + 4810 W1 774 TIP3 H1 HT 0.417000 1.0080 0 + 4811 W1 774 TIP3 H2 HT 0.417000 1.0080 0 + 4812 W1 775 TIP3 OH2 OT -0.834000 15.9994 0 + 4813 W1 775 TIP3 H1 HT 0.417000 1.0080 0 + 4814 W1 775 TIP3 H2 HT 0.417000 1.0080 0 + 4815 W1 776 TIP3 OH2 OT -0.834000 15.9994 0 + 4816 W1 776 TIP3 H1 HT 0.417000 1.0080 0 + 4817 W1 776 TIP3 H2 HT 0.417000 1.0080 0 + 4818 W1 777 TIP3 OH2 OT -0.834000 15.9994 0 + 4819 W1 777 TIP3 H1 HT 0.417000 1.0080 0 + 4820 W1 777 TIP3 H2 HT 0.417000 1.0080 0 + 4821 W1 778 TIP3 OH2 OT -0.834000 15.9994 0 + 4822 W1 778 TIP3 H1 HT 0.417000 1.0080 0 + 4823 W1 778 TIP3 H2 HT 0.417000 1.0080 0 + 4824 W1 779 TIP3 OH2 OT -0.834000 15.9994 0 + 4825 W1 779 TIP3 H1 HT 0.417000 1.0080 0 + 4826 W1 779 TIP3 H2 HT 0.417000 1.0080 0 + 4827 W1 780 TIP3 OH2 OT -0.834000 15.9994 0 + 4828 W1 780 TIP3 H1 HT 0.417000 1.0080 0 + 4829 W1 780 TIP3 H2 HT 0.417000 1.0080 0 + 4830 W1 781 TIP3 OH2 OT -0.834000 15.9994 0 + 4831 W1 781 TIP3 H1 HT 0.417000 1.0080 0 + 4832 W1 781 TIP3 H2 HT 0.417000 1.0080 0 + 4833 W1 782 TIP3 OH2 OT -0.834000 15.9994 0 + 4834 W1 782 TIP3 H1 HT 0.417000 1.0080 0 + 4835 W1 782 TIP3 H2 HT 0.417000 1.0080 0 + 4836 W1 783 TIP3 OH2 OT -0.834000 15.9994 0 + 4837 W1 783 TIP3 H1 HT 0.417000 1.0080 0 + 4838 W1 783 TIP3 H2 HT 0.417000 1.0080 0 + 4839 W1 784 TIP3 OH2 OT -0.834000 15.9994 0 + 4840 W1 784 TIP3 H1 HT 0.417000 1.0080 0 + 4841 W1 784 TIP3 H2 HT 0.417000 1.0080 0 + 4842 W1 785 TIP3 OH2 OT -0.834000 15.9994 0 + 4843 W1 785 TIP3 H1 HT 0.417000 1.0080 0 + 4844 W1 785 TIP3 H2 HT 0.417000 1.0080 0 + 4845 W1 786 TIP3 OH2 OT -0.834000 15.9994 0 + 4846 W1 786 TIP3 H1 HT 0.417000 1.0080 0 + 4847 W1 786 TIP3 H2 HT 0.417000 1.0080 0 + 4848 W1 787 TIP3 OH2 OT -0.834000 15.9994 0 + 4849 W1 787 TIP3 H1 HT 0.417000 1.0080 0 + 4850 W1 787 TIP3 H2 HT 0.417000 1.0080 0 + 4851 W1 788 TIP3 OH2 OT -0.834000 15.9994 0 + 4852 W1 788 TIP3 H1 HT 0.417000 1.0080 0 + 4853 W1 788 TIP3 H2 HT 0.417000 1.0080 0 + 4854 W1 789 TIP3 OH2 OT -0.834000 15.9994 0 + 4855 W1 789 TIP3 H1 HT 0.417000 1.0080 0 + 4856 W1 789 TIP3 H2 HT 0.417000 1.0080 0 + 4857 W1 790 TIP3 OH2 OT -0.834000 15.9994 0 + 4858 W1 790 TIP3 H1 HT 0.417000 1.0080 0 + 4859 W1 790 TIP3 H2 HT 0.417000 1.0080 0 + 4860 W1 791 TIP3 OH2 OT -0.834000 15.9994 0 + 4861 W1 791 TIP3 H1 HT 0.417000 1.0080 0 + 4862 W1 791 TIP3 H2 HT 0.417000 1.0080 0 + 4863 W1 792 TIP3 OH2 OT -0.834000 15.9994 0 + 4864 W1 792 TIP3 H1 HT 0.417000 1.0080 0 + 4865 W1 792 TIP3 H2 HT 0.417000 1.0080 0 + 4866 W1 793 TIP3 OH2 OT -0.834000 15.9994 0 + 4867 W1 793 TIP3 H1 HT 0.417000 1.0080 0 + 4868 W1 793 TIP3 H2 HT 0.417000 1.0080 0 + 4869 W1 794 TIP3 OH2 OT -0.834000 15.9994 0 + 4870 W1 794 TIP3 H1 HT 0.417000 1.0080 0 + 4871 W1 794 TIP3 H2 HT 0.417000 1.0080 0 + 4872 W1 795 TIP3 OH2 OT -0.834000 15.9994 0 + 4873 W1 795 TIP3 H1 HT 0.417000 1.0080 0 + 4874 W1 795 TIP3 H2 HT 0.417000 1.0080 0 + 4875 W1 796 TIP3 OH2 OT -0.834000 15.9994 0 + 4876 W1 796 TIP3 H1 HT 0.417000 1.0080 0 + 4877 W1 796 TIP3 H2 HT 0.417000 1.0080 0 + 4878 W1 797 TIP3 OH2 OT -0.834000 15.9994 0 + 4879 W1 797 TIP3 H1 HT 0.417000 1.0080 0 + 4880 W1 797 TIP3 H2 HT 0.417000 1.0080 0 + 4881 W1 798 TIP3 OH2 OT -0.834000 15.9994 0 + 4882 W1 798 TIP3 H1 HT 0.417000 1.0080 0 + 4883 W1 798 TIP3 H2 HT 0.417000 1.0080 0 + 4884 W1 799 TIP3 OH2 OT -0.834000 15.9994 0 + 4885 W1 799 TIP3 H1 HT 0.417000 1.0080 0 + 4886 W1 799 TIP3 H2 HT 0.417000 1.0080 0 + 4887 W1 800 TIP3 OH2 OT -0.834000 15.9994 0 + 4888 W1 800 TIP3 H1 HT 0.417000 1.0080 0 + 4889 W1 800 TIP3 H2 HT 0.417000 1.0080 0 + 4890 W1 801 TIP3 OH2 OT -0.834000 15.9994 0 + 4891 W1 801 TIP3 H1 HT 0.417000 1.0080 0 + 4892 W1 801 TIP3 H2 HT 0.417000 1.0080 0 + 4893 W1 802 TIP3 OH2 OT -0.834000 15.9994 0 + 4894 W1 802 TIP3 H1 HT 0.417000 1.0080 0 + 4895 W1 802 TIP3 H2 HT 0.417000 1.0080 0 + 4896 W1 803 TIP3 OH2 OT -0.834000 15.9994 0 + 4897 W1 803 TIP3 H1 HT 0.417000 1.0080 0 + 4898 W1 803 TIP3 H2 HT 0.417000 1.0080 0 + 4899 W1 804 TIP3 OH2 OT -0.834000 15.9994 0 + 4900 W1 804 TIP3 H1 HT 0.417000 1.0080 0 + 4901 W1 804 TIP3 H2 HT 0.417000 1.0080 0 + 4902 W1 805 TIP3 OH2 OT -0.834000 15.9994 0 + 4903 W1 805 TIP3 H1 HT 0.417000 1.0080 0 + 4904 W1 805 TIP3 H2 HT 0.417000 1.0080 0 + 4905 W1 806 TIP3 OH2 OT -0.834000 15.9994 0 + 4906 W1 806 TIP3 H1 HT 0.417000 1.0080 0 + 4907 W1 806 TIP3 H2 HT 0.417000 1.0080 0 + 4908 W1 807 TIP3 OH2 OT -0.834000 15.9994 0 + 4909 W1 807 TIP3 H1 HT 0.417000 1.0080 0 + 4910 W1 807 TIP3 H2 HT 0.417000 1.0080 0 + 4911 W1 808 TIP3 OH2 OT -0.834000 15.9994 0 + 4912 W1 808 TIP3 H1 HT 0.417000 1.0080 0 + 4913 W1 808 TIP3 H2 HT 0.417000 1.0080 0 + 4914 W1 809 TIP3 OH2 OT -0.834000 15.9994 0 + 4915 W1 809 TIP3 H1 HT 0.417000 1.0080 0 + 4916 W1 809 TIP3 H2 HT 0.417000 1.0080 0 + 4917 W1 810 TIP3 OH2 OT -0.834000 15.9994 0 + 4918 W1 810 TIP3 H1 HT 0.417000 1.0080 0 + 4919 W1 810 TIP3 H2 HT 0.417000 1.0080 0 + 4920 W1 811 TIP3 OH2 OT -0.834000 15.9994 0 + 4921 W1 811 TIP3 H1 HT 0.417000 1.0080 0 + 4922 W1 811 TIP3 H2 HT 0.417000 1.0080 0 + 4923 W1 812 TIP3 OH2 OT -0.834000 15.9994 0 + 4924 W1 812 TIP3 H1 HT 0.417000 1.0080 0 + 4925 W1 812 TIP3 H2 HT 0.417000 1.0080 0 + 4926 W1 813 TIP3 OH2 OT -0.834000 15.9994 0 + 4927 W1 813 TIP3 H1 HT 0.417000 1.0080 0 + 4928 W1 813 TIP3 H2 HT 0.417000 1.0080 0 + 4929 W1 814 TIP3 OH2 OT -0.834000 15.9994 0 + 4930 W1 814 TIP3 H1 HT 0.417000 1.0080 0 + 4931 W1 814 TIP3 H2 HT 0.417000 1.0080 0 + 4932 W1 815 TIP3 OH2 OT -0.834000 15.9994 0 + 4933 W1 815 TIP3 H1 HT 0.417000 1.0080 0 + 4934 W1 815 TIP3 H2 HT 0.417000 1.0080 0 + 4935 W1 816 TIP3 OH2 OT -0.834000 15.9994 0 + 4936 W1 816 TIP3 H1 HT 0.417000 1.0080 0 + 4937 W1 816 TIP3 H2 HT 0.417000 1.0080 0 + 4938 W1 817 TIP3 OH2 OT -0.834000 15.9994 0 + 4939 W1 817 TIP3 H1 HT 0.417000 1.0080 0 + 4940 W1 817 TIP3 H2 HT 0.417000 1.0080 0 + 4941 W1 818 TIP3 OH2 OT -0.834000 15.9994 0 + 4942 W1 818 TIP3 H1 HT 0.417000 1.0080 0 + 4943 W1 818 TIP3 H2 HT 0.417000 1.0080 0 + 4944 W1 819 TIP3 OH2 OT -0.834000 15.9994 0 + 4945 W1 819 TIP3 H1 HT 0.417000 1.0080 0 + 4946 W1 819 TIP3 H2 HT 0.417000 1.0080 0 + 4947 W1 820 TIP3 OH2 OT -0.834000 15.9994 0 + 4948 W1 820 TIP3 H1 HT 0.417000 1.0080 0 + 4949 W1 820 TIP3 H2 HT 0.417000 1.0080 0 + 4950 W1 821 TIP3 OH2 OT -0.834000 15.9994 0 + 4951 W1 821 TIP3 H1 HT 0.417000 1.0080 0 + 4952 W1 821 TIP3 H2 HT 0.417000 1.0080 0 + 4953 W1 822 TIP3 OH2 OT -0.834000 15.9994 0 + 4954 W1 822 TIP3 H1 HT 0.417000 1.0080 0 + 4955 W1 822 TIP3 H2 HT 0.417000 1.0080 0 + 4956 W1 823 TIP3 OH2 OT -0.834000 15.9994 0 + 4957 W1 823 TIP3 H1 HT 0.417000 1.0080 0 + 4958 W1 823 TIP3 H2 HT 0.417000 1.0080 0 + 4959 W1 824 TIP3 OH2 OT -0.834000 15.9994 0 + 4960 W1 824 TIP3 H1 HT 0.417000 1.0080 0 + 4961 W1 824 TIP3 H2 HT 0.417000 1.0080 0 + 4962 W1 825 TIP3 OH2 OT -0.834000 15.9994 0 + 4963 W1 825 TIP3 H1 HT 0.417000 1.0080 0 + 4964 W1 825 TIP3 H2 HT 0.417000 1.0080 0 + 4965 W1 826 TIP3 OH2 OT -0.834000 15.9994 0 + 4966 W1 826 TIP3 H1 HT 0.417000 1.0080 0 + 4967 W1 826 TIP3 H2 HT 0.417000 1.0080 0 + 4968 W1 827 TIP3 OH2 OT -0.834000 15.9994 0 + 4969 W1 827 TIP3 H1 HT 0.417000 1.0080 0 + 4970 W1 827 TIP3 H2 HT 0.417000 1.0080 0 + 4971 W1 828 TIP3 OH2 OT -0.834000 15.9994 0 + 4972 W1 828 TIP3 H1 HT 0.417000 1.0080 0 + 4973 W1 828 TIP3 H2 HT 0.417000 1.0080 0 + 4974 W1 829 TIP3 OH2 OT -0.834000 15.9994 0 + 4975 W1 829 TIP3 H1 HT 0.417000 1.0080 0 + 4976 W1 829 TIP3 H2 HT 0.417000 1.0080 0 + 4977 W1 830 TIP3 OH2 OT -0.834000 15.9994 0 + 4978 W1 830 TIP3 H1 HT 0.417000 1.0080 0 + 4979 W1 830 TIP3 H2 HT 0.417000 1.0080 0 + 4980 W1 831 TIP3 OH2 OT -0.834000 15.9994 0 + 4981 W1 831 TIP3 H1 HT 0.417000 1.0080 0 + 4982 W1 831 TIP3 H2 HT 0.417000 1.0080 0 + 4983 W1 832 TIP3 OH2 OT -0.834000 15.9994 0 + 4984 W1 832 TIP3 H1 HT 0.417000 1.0080 0 + 4985 W1 832 TIP3 H2 HT 0.417000 1.0080 0 + 4986 W1 833 TIP3 OH2 OT -0.834000 15.9994 0 + 4987 W1 833 TIP3 H1 HT 0.417000 1.0080 0 + 4988 W1 833 TIP3 H2 HT 0.417000 1.0080 0 + 4989 W1 834 TIP3 OH2 OT -0.834000 15.9994 0 + 4990 W1 834 TIP3 H1 HT 0.417000 1.0080 0 + 4991 W1 834 TIP3 H2 HT 0.417000 1.0080 0 + 4992 W1 835 TIP3 OH2 OT -0.834000 15.9994 0 + 4993 W1 835 TIP3 H1 HT 0.417000 1.0080 0 + 4994 W1 835 TIP3 H2 HT 0.417000 1.0080 0 + 4995 W1 836 TIP3 OH2 OT -0.834000 15.9994 0 + 4996 W1 836 TIP3 H1 HT 0.417000 1.0080 0 + 4997 W1 836 TIP3 H2 HT 0.417000 1.0080 0 + 4998 W1 837 TIP3 OH2 OT -0.834000 15.9994 0 + 4999 W1 837 TIP3 H1 HT 0.417000 1.0080 0 + 5000 W1 837 TIP3 H2 HT 0.417000 1.0080 0 + 5001 W1 838 TIP3 OH2 OT -0.834000 15.9994 0 + 5002 W1 838 TIP3 H1 HT 0.417000 1.0080 0 + 5003 W1 838 TIP3 H2 HT 0.417000 1.0080 0 + 5004 W1 839 TIP3 OH2 OT -0.834000 15.9994 0 + 5005 W1 839 TIP3 H1 HT 0.417000 1.0080 0 + 5006 W1 839 TIP3 H2 HT 0.417000 1.0080 0 + 5007 W1 840 TIP3 OH2 OT -0.834000 15.9994 0 + 5008 W1 840 TIP3 H1 HT 0.417000 1.0080 0 + 5009 W1 840 TIP3 H2 HT 0.417000 1.0080 0 + 5010 W1 841 TIP3 OH2 OT -0.834000 15.9994 0 + 5011 W1 841 TIP3 H1 HT 0.417000 1.0080 0 + 5012 W1 841 TIP3 H2 HT 0.417000 1.0080 0 + 5013 W1 842 TIP3 OH2 OT -0.834000 15.9994 0 + 5014 W1 842 TIP3 H1 HT 0.417000 1.0080 0 + 5015 W1 842 TIP3 H2 HT 0.417000 1.0080 0 + 5016 W1 843 TIP3 OH2 OT -0.834000 15.9994 0 + 5017 W1 843 TIP3 H1 HT 0.417000 1.0080 0 + 5018 W1 843 TIP3 H2 HT 0.417000 1.0080 0 + 5019 W1 844 TIP3 OH2 OT -0.834000 15.9994 0 + 5020 W1 844 TIP3 H1 HT 0.417000 1.0080 0 + 5021 W1 844 TIP3 H2 HT 0.417000 1.0080 0 + 5022 W1 845 TIP3 OH2 OT -0.834000 15.9994 0 + 5023 W1 845 TIP3 H1 HT 0.417000 1.0080 0 + 5024 W1 845 TIP3 H2 HT 0.417000 1.0080 0 + 5025 W1 846 TIP3 OH2 OT -0.834000 15.9994 0 + 5026 W1 846 TIP3 H1 HT 0.417000 1.0080 0 + 5027 W1 846 TIP3 H2 HT 0.417000 1.0080 0 + 5028 W1 847 TIP3 OH2 OT -0.834000 15.9994 0 + 5029 W1 847 TIP3 H1 HT 0.417000 1.0080 0 + 5030 W1 847 TIP3 H2 HT 0.417000 1.0080 0 + 5031 W1 848 TIP3 OH2 OT -0.834000 15.9994 0 + 5032 W1 848 TIP3 H1 HT 0.417000 1.0080 0 + 5033 W1 848 TIP3 H2 HT 0.417000 1.0080 0 + 5034 W1 849 TIP3 OH2 OT -0.834000 15.9994 0 + 5035 W1 849 TIP3 H1 HT 0.417000 1.0080 0 + 5036 W1 849 TIP3 H2 HT 0.417000 1.0080 0 + 5037 W1 850 TIP3 OH2 OT -0.834000 15.9994 0 + 5038 W1 850 TIP3 H1 HT 0.417000 1.0080 0 + 5039 W1 850 TIP3 H2 HT 0.417000 1.0080 0 + 5040 W1 851 TIP3 OH2 OT -0.834000 15.9994 0 + 5041 W1 851 TIP3 H1 HT 0.417000 1.0080 0 + 5042 W1 851 TIP3 H2 HT 0.417000 1.0080 0 + 5043 W1 852 TIP3 OH2 OT -0.834000 15.9994 0 + 5044 W1 852 TIP3 H1 HT 0.417000 1.0080 0 + 5045 W1 852 TIP3 H2 HT 0.417000 1.0080 0 + 5046 W1 853 TIP3 OH2 OT -0.834000 15.9994 0 + 5047 W1 853 TIP3 H1 HT 0.417000 1.0080 0 + 5048 W1 853 TIP3 H2 HT 0.417000 1.0080 0 + 5049 W1 854 TIP3 OH2 OT -0.834000 15.9994 0 + 5050 W1 854 TIP3 H1 HT 0.417000 1.0080 0 + 5051 W1 854 TIP3 H2 HT 0.417000 1.0080 0 + 5052 W1 855 TIP3 OH2 OT -0.834000 15.9994 0 + 5053 W1 855 TIP3 H1 HT 0.417000 1.0080 0 + 5054 W1 855 TIP3 H2 HT 0.417000 1.0080 0 + 5055 W1 856 TIP3 OH2 OT -0.834000 15.9994 0 + 5056 W1 856 TIP3 H1 HT 0.417000 1.0080 0 + 5057 W1 856 TIP3 H2 HT 0.417000 1.0080 0 + 5058 W1 857 TIP3 OH2 OT -0.834000 15.9994 0 + 5059 W1 857 TIP3 H1 HT 0.417000 1.0080 0 + 5060 W1 857 TIP3 H2 HT 0.417000 1.0080 0 + 5061 W1 858 TIP3 OH2 OT -0.834000 15.9994 0 + 5062 W1 858 TIP3 H1 HT 0.417000 1.0080 0 + 5063 W1 858 TIP3 H2 HT 0.417000 1.0080 0 + 5064 W1 859 TIP3 OH2 OT -0.834000 15.9994 0 + 5065 W1 859 TIP3 H1 HT 0.417000 1.0080 0 + 5066 W1 859 TIP3 H2 HT 0.417000 1.0080 0 + 5067 W1 860 TIP3 OH2 OT -0.834000 15.9994 0 + 5068 W1 860 TIP3 H1 HT 0.417000 1.0080 0 + 5069 W1 860 TIP3 H2 HT 0.417000 1.0080 0 + 5070 W1 861 TIP3 OH2 OT -0.834000 15.9994 0 + 5071 W1 861 TIP3 H1 HT 0.417000 1.0080 0 + 5072 W1 861 TIP3 H2 HT 0.417000 1.0080 0 + 5073 W1 862 TIP3 OH2 OT -0.834000 15.9994 0 + 5074 W1 862 TIP3 H1 HT 0.417000 1.0080 0 + 5075 W1 862 TIP3 H2 HT 0.417000 1.0080 0 + 5076 W1 863 TIP3 OH2 OT -0.834000 15.9994 0 + 5077 W1 863 TIP3 H1 HT 0.417000 1.0080 0 + 5078 W1 863 TIP3 H2 HT 0.417000 1.0080 0 + 5079 W1 864 TIP3 OH2 OT -0.834000 15.9994 0 + 5080 W1 864 TIP3 H1 HT 0.417000 1.0080 0 + 5081 W1 864 TIP3 H2 HT 0.417000 1.0080 0 + 5082 W1 865 TIP3 OH2 OT -0.834000 15.9994 0 + 5083 W1 865 TIP3 H1 HT 0.417000 1.0080 0 + 5084 W1 865 TIP3 H2 HT 0.417000 1.0080 0 + 5085 W1 866 TIP3 OH2 OT -0.834000 15.9994 0 + 5086 W1 866 TIP3 H1 HT 0.417000 1.0080 0 + 5087 W1 866 TIP3 H2 HT 0.417000 1.0080 0 + 5088 W1 867 TIP3 OH2 OT -0.834000 15.9994 0 + 5089 W1 867 TIP3 H1 HT 0.417000 1.0080 0 + 5090 W1 867 TIP3 H2 HT 0.417000 1.0080 0 + 5091 W1 868 TIP3 OH2 OT -0.834000 15.9994 0 + 5092 W1 868 TIP3 H1 HT 0.417000 1.0080 0 + 5093 W1 868 TIP3 H2 HT 0.417000 1.0080 0 + 5094 W1 869 TIP3 OH2 OT -0.834000 15.9994 0 + 5095 W1 869 TIP3 H1 HT 0.417000 1.0080 0 + 5096 W1 869 TIP3 H2 HT 0.417000 1.0080 0 + 5097 W1 870 TIP3 OH2 OT -0.834000 15.9994 0 + 5098 W1 870 TIP3 H1 HT 0.417000 1.0080 0 + 5099 W1 870 TIP3 H2 HT 0.417000 1.0080 0 + 5100 W1 871 TIP3 OH2 OT -0.834000 15.9994 0 + 5101 W1 871 TIP3 H1 HT 0.417000 1.0080 0 + 5102 W1 871 TIP3 H2 HT 0.417000 1.0080 0 + 5103 W1 872 TIP3 OH2 OT -0.834000 15.9994 0 + 5104 W1 872 TIP3 H1 HT 0.417000 1.0080 0 + 5105 W1 872 TIP3 H2 HT 0.417000 1.0080 0 + 5106 W1 873 TIP3 OH2 OT -0.834000 15.9994 0 + 5107 W1 873 TIP3 H1 HT 0.417000 1.0080 0 + 5108 W1 873 TIP3 H2 HT 0.417000 1.0080 0 + 5109 W1 874 TIP3 OH2 OT -0.834000 15.9994 0 + 5110 W1 874 TIP3 H1 HT 0.417000 1.0080 0 + 5111 W1 874 TIP3 H2 HT 0.417000 1.0080 0 + 5112 W1 875 TIP3 OH2 OT -0.834000 15.9994 0 + 5113 W1 875 TIP3 H1 HT 0.417000 1.0080 0 + 5114 W1 875 TIP3 H2 HT 0.417000 1.0080 0 + 5115 W1 876 TIP3 OH2 OT -0.834000 15.9994 0 + 5116 W1 876 TIP3 H1 HT 0.417000 1.0080 0 + 5117 W1 876 TIP3 H2 HT 0.417000 1.0080 0 + 5118 W1 877 TIP3 OH2 OT -0.834000 15.9994 0 + 5119 W1 877 TIP3 H1 HT 0.417000 1.0080 0 + 5120 W1 877 TIP3 H2 HT 0.417000 1.0080 0 + 5121 W1 878 TIP3 OH2 OT -0.834000 15.9994 0 + 5122 W1 878 TIP3 H1 HT 0.417000 1.0080 0 + 5123 W1 878 TIP3 H2 HT 0.417000 1.0080 0 + 5124 W1 879 TIP3 OH2 OT -0.834000 15.9994 0 + 5125 W1 879 TIP3 H1 HT 0.417000 1.0080 0 + 5126 W1 879 TIP3 H2 HT 0.417000 1.0080 0 + 5127 W1 880 TIP3 OH2 OT -0.834000 15.9994 0 + 5128 W1 880 TIP3 H1 HT 0.417000 1.0080 0 + 5129 W1 880 TIP3 H2 HT 0.417000 1.0080 0 + 5130 W1 881 TIP3 OH2 OT -0.834000 15.9994 0 + 5131 W1 881 TIP3 H1 HT 0.417000 1.0080 0 + 5132 W1 881 TIP3 H2 HT 0.417000 1.0080 0 + 5133 W1 882 TIP3 OH2 OT -0.834000 15.9994 0 + 5134 W1 882 TIP3 H1 HT 0.417000 1.0080 0 + 5135 W1 882 TIP3 H2 HT 0.417000 1.0080 0 + 5136 W1 883 TIP3 OH2 OT -0.834000 15.9994 0 + 5137 W1 883 TIP3 H1 HT 0.417000 1.0080 0 + 5138 W1 883 TIP3 H2 HT 0.417000 1.0080 0 + 5139 W1 884 TIP3 OH2 OT -0.834000 15.9994 0 + 5140 W1 884 TIP3 H1 HT 0.417000 1.0080 0 + 5141 W1 884 TIP3 H2 HT 0.417000 1.0080 0 + 5142 W1 885 TIP3 OH2 OT -0.834000 15.9994 0 + 5143 W1 885 TIP3 H1 HT 0.417000 1.0080 0 + 5144 W1 885 TIP3 H2 HT 0.417000 1.0080 0 + 5145 W1 886 TIP3 OH2 OT -0.834000 15.9994 0 + 5146 W1 886 TIP3 H1 HT 0.417000 1.0080 0 + 5147 W1 886 TIP3 H2 HT 0.417000 1.0080 0 + 5148 W1 887 TIP3 OH2 OT -0.834000 15.9994 0 + 5149 W1 887 TIP3 H1 HT 0.417000 1.0080 0 + 5150 W1 887 TIP3 H2 HT 0.417000 1.0080 0 + 5151 W1 888 TIP3 OH2 OT -0.834000 15.9994 0 + 5152 W1 888 TIP3 H1 HT 0.417000 1.0080 0 + 5153 W1 888 TIP3 H2 HT 0.417000 1.0080 0 + 5154 W1 889 TIP3 OH2 OT -0.834000 15.9994 0 + 5155 W1 889 TIP3 H1 HT 0.417000 1.0080 0 + 5156 W1 889 TIP3 H2 HT 0.417000 1.0080 0 + 5157 W1 890 TIP3 OH2 OT -0.834000 15.9994 0 + 5158 W1 890 TIP3 H1 HT 0.417000 1.0080 0 + 5159 W1 890 TIP3 H2 HT 0.417000 1.0080 0 + 5160 W1 891 TIP3 OH2 OT -0.834000 15.9994 0 + 5161 W1 891 TIP3 H1 HT 0.417000 1.0080 0 + 5162 W1 891 TIP3 H2 HT 0.417000 1.0080 0 + 5163 W1 892 TIP3 OH2 OT -0.834000 15.9994 0 + 5164 W1 892 TIP3 H1 HT 0.417000 1.0080 0 + 5165 W1 892 TIP3 H2 HT 0.417000 1.0080 0 + 5166 W1 893 TIP3 OH2 OT -0.834000 15.9994 0 + 5167 W1 893 TIP3 H1 HT 0.417000 1.0080 0 + 5168 W1 893 TIP3 H2 HT 0.417000 1.0080 0 + 5169 W1 894 TIP3 OH2 OT -0.834000 15.9994 0 + 5170 W1 894 TIP3 H1 HT 0.417000 1.0080 0 + 5171 W1 894 TIP3 H2 HT 0.417000 1.0080 0 + 5172 W1 895 TIP3 OH2 OT -0.834000 15.9994 0 + 5173 W1 895 TIP3 H1 HT 0.417000 1.0080 0 + 5174 W1 895 TIP3 H2 HT 0.417000 1.0080 0 + 5175 W1 896 TIP3 OH2 OT -0.834000 15.9994 0 + 5176 W1 896 TIP3 H1 HT 0.417000 1.0080 0 + 5177 W1 896 TIP3 H2 HT 0.417000 1.0080 0 + 5178 W1 897 TIP3 OH2 OT -0.834000 15.9994 0 + 5179 W1 897 TIP3 H1 HT 0.417000 1.0080 0 + 5180 W1 897 TIP3 H2 HT 0.417000 1.0080 0 + 5181 W1 898 TIP3 OH2 OT -0.834000 15.9994 0 + 5182 W1 898 TIP3 H1 HT 0.417000 1.0080 0 + 5183 W1 898 TIP3 H2 HT 0.417000 1.0080 0 + 5184 W1 899 TIP3 OH2 OT -0.834000 15.9994 0 + 5185 W1 899 TIP3 H1 HT 0.417000 1.0080 0 + 5186 W1 899 TIP3 H2 HT 0.417000 1.0080 0 + 5187 W1 900 TIP3 OH2 OT -0.834000 15.9994 0 + 5188 W1 900 TIP3 H1 HT 0.417000 1.0080 0 + 5189 W1 900 TIP3 H2 HT 0.417000 1.0080 0 + 5190 W1 901 TIP3 OH2 OT -0.834000 15.9994 0 + 5191 W1 901 TIP3 H1 HT 0.417000 1.0080 0 + 5192 W1 901 TIP3 H2 HT 0.417000 1.0080 0 + 5193 W1 902 TIP3 OH2 OT -0.834000 15.9994 0 + 5194 W1 902 TIP3 H1 HT 0.417000 1.0080 0 + 5195 W1 902 TIP3 H2 HT 0.417000 1.0080 0 + 5196 W1 903 TIP3 OH2 OT -0.834000 15.9994 0 + 5197 W1 903 TIP3 H1 HT 0.417000 1.0080 0 + 5198 W1 903 TIP3 H2 HT 0.417000 1.0080 0 + 5199 W1 904 TIP3 OH2 OT -0.834000 15.9994 0 + 5200 W1 904 TIP3 H1 HT 0.417000 1.0080 0 + 5201 W1 904 TIP3 H2 HT 0.417000 1.0080 0 + 5202 W1 905 TIP3 OH2 OT -0.834000 15.9994 0 + 5203 W1 905 TIP3 H1 HT 0.417000 1.0080 0 + 5204 W1 905 TIP3 H2 HT 0.417000 1.0080 0 + 5205 W1 906 TIP3 OH2 OT -0.834000 15.9994 0 + 5206 W1 906 TIP3 H1 HT 0.417000 1.0080 0 + 5207 W1 906 TIP3 H2 HT 0.417000 1.0080 0 + 5208 W1 907 TIP3 OH2 OT -0.834000 15.9994 0 + 5209 W1 907 TIP3 H1 HT 0.417000 1.0080 0 + 5210 W1 907 TIP3 H2 HT 0.417000 1.0080 0 + 5211 W1 908 TIP3 OH2 OT -0.834000 15.9994 0 + 5212 W1 908 TIP3 H1 HT 0.417000 1.0080 0 + 5213 W1 908 TIP3 H2 HT 0.417000 1.0080 0 + 5214 W1 909 TIP3 OH2 OT -0.834000 15.9994 0 + 5215 W1 909 TIP3 H1 HT 0.417000 1.0080 0 + 5216 W1 909 TIP3 H2 HT 0.417000 1.0080 0 + 5217 W1 910 TIP3 OH2 OT -0.834000 15.9994 0 + 5218 W1 910 TIP3 H1 HT 0.417000 1.0080 0 + 5219 W1 910 TIP3 H2 HT 0.417000 1.0080 0 + 5220 W1 911 TIP3 OH2 OT -0.834000 15.9994 0 + 5221 W1 911 TIP3 H1 HT 0.417000 1.0080 0 + 5222 W1 911 TIP3 H2 HT 0.417000 1.0080 0 + 5223 W1 912 TIP3 OH2 OT -0.834000 15.9994 0 + 5224 W1 912 TIP3 H1 HT 0.417000 1.0080 0 + 5225 W1 912 TIP3 H2 HT 0.417000 1.0080 0 + 5226 W1 913 TIP3 OH2 OT -0.834000 15.9994 0 + 5227 W1 913 TIP3 H1 HT 0.417000 1.0080 0 + 5228 W1 913 TIP3 H2 HT 0.417000 1.0080 0 + 5229 W1 914 TIP3 OH2 OT -0.834000 15.9994 0 + 5230 W1 914 TIP3 H1 HT 0.417000 1.0080 0 + 5231 W1 914 TIP3 H2 HT 0.417000 1.0080 0 + 5232 W1 915 TIP3 OH2 OT -0.834000 15.9994 0 + 5233 W1 915 TIP3 H1 HT 0.417000 1.0080 0 + 5234 W1 915 TIP3 H2 HT 0.417000 1.0080 0 + 5235 W1 916 TIP3 OH2 OT -0.834000 15.9994 0 + 5236 W1 916 TIP3 H1 HT 0.417000 1.0080 0 + 5237 W1 916 TIP3 H2 HT 0.417000 1.0080 0 + 5238 W1 917 TIP3 OH2 OT -0.834000 15.9994 0 + 5239 W1 917 TIP3 H1 HT 0.417000 1.0080 0 + 5240 W1 917 TIP3 H2 HT 0.417000 1.0080 0 + 5241 W1 918 TIP3 OH2 OT -0.834000 15.9994 0 + 5242 W1 918 TIP3 H1 HT 0.417000 1.0080 0 + 5243 W1 918 TIP3 H2 HT 0.417000 1.0080 0 + 5244 W1 919 TIP3 OH2 OT -0.834000 15.9994 0 + 5245 W1 919 TIP3 H1 HT 0.417000 1.0080 0 + 5246 W1 919 TIP3 H2 HT 0.417000 1.0080 0 + 5247 W1 920 TIP3 OH2 OT -0.834000 15.9994 0 + 5248 W1 920 TIP3 H1 HT 0.417000 1.0080 0 + 5249 W1 920 TIP3 H2 HT 0.417000 1.0080 0 + 5250 W1 921 TIP3 OH2 OT -0.834000 15.9994 0 + 5251 W1 921 TIP3 H1 HT 0.417000 1.0080 0 + 5252 W1 921 TIP3 H2 HT 0.417000 1.0080 0 + 5253 W1 922 TIP3 OH2 OT -0.834000 15.9994 0 + 5254 W1 922 TIP3 H1 HT 0.417000 1.0080 0 + 5255 W1 922 TIP3 H2 HT 0.417000 1.0080 0 + 5256 W1 923 TIP3 OH2 OT -0.834000 15.9994 0 + 5257 W1 923 TIP3 H1 HT 0.417000 1.0080 0 + 5258 W1 923 TIP3 H2 HT 0.417000 1.0080 0 + 5259 W1 924 TIP3 OH2 OT -0.834000 15.9994 0 + 5260 W1 924 TIP3 H1 HT 0.417000 1.0080 0 + 5261 W1 924 TIP3 H2 HT 0.417000 1.0080 0 + 5262 W1 925 TIP3 OH2 OT -0.834000 15.9994 0 + 5263 W1 925 TIP3 H1 HT 0.417000 1.0080 0 + 5264 W1 925 TIP3 H2 HT 0.417000 1.0080 0 + 5265 W1 926 TIP3 OH2 OT -0.834000 15.9994 0 + 5266 W1 926 TIP3 H1 HT 0.417000 1.0080 0 + 5267 W1 926 TIP3 H2 HT 0.417000 1.0080 0 + 5268 W1 927 TIP3 OH2 OT -0.834000 15.9994 0 + 5269 W1 927 TIP3 H1 HT 0.417000 1.0080 0 + 5270 W1 927 TIP3 H2 HT 0.417000 1.0080 0 + 5271 W1 928 TIP3 OH2 OT -0.834000 15.9994 0 + 5272 W1 928 TIP3 H1 HT 0.417000 1.0080 0 + 5273 W1 928 TIP3 H2 HT 0.417000 1.0080 0 + 5274 W1 929 TIP3 OH2 OT -0.834000 15.9994 0 + 5275 W1 929 TIP3 H1 HT 0.417000 1.0080 0 + 5276 W1 929 TIP3 H2 HT 0.417000 1.0080 0 + 5277 W1 930 TIP3 OH2 OT -0.834000 15.9994 0 + 5278 W1 930 TIP3 H1 HT 0.417000 1.0080 0 + 5279 W1 930 TIP3 H2 HT 0.417000 1.0080 0 + 5280 W1 931 TIP3 OH2 OT -0.834000 15.9994 0 + 5281 W1 931 TIP3 H1 HT 0.417000 1.0080 0 + 5282 W1 931 TIP3 H2 HT 0.417000 1.0080 0 + 5283 W1 932 TIP3 OH2 OT -0.834000 15.9994 0 + 5284 W1 932 TIP3 H1 HT 0.417000 1.0080 0 + 5285 W1 932 TIP3 H2 HT 0.417000 1.0080 0 + 5286 W1 933 TIP3 OH2 OT -0.834000 15.9994 0 + 5287 W1 933 TIP3 H1 HT 0.417000 1.0080 0 + 5288 W1 933 TIP3 H2 HT 0.417000 1.0080 0 + 5289 W1 934 TIP3 OH2 OT -0.834000 15.9994 0 + 5290 W1 934 TIP3 H1 HT 0.417000 1.0080 0 + 5291 W1 934 TIP3 H2 HT 0.417000 1.0080 0 + 5292 W1 935 TIP3 OH2 OT -0.834000 15.9994 0 + 5293 W1 935 TIP3 H1 HT 0.417000 1.0080 0 + 5294 W1 935 TIP3 H2 HT 0.417000 1.0080 0 + 5295 W1 936 TIP3 OH2 OT -0.834000 15.9994 0 + 5296 W1 936 TIP3 H1 HT 0.417000 1.0080 0 + 5297 W1 936 TIP3 H2 HT 0.417000 1.0080 0 + 5298 W1 937 TIP3 OH2 OT -0.834000 15.9994 0 + 5299 W1 937 TIP3 H1 HT 0.417000 1.0080 0 + 5300 W1 937 TIP3 H2 HT 0.417000 1.0080 0 + 5301 W1 938 TIP3 OH2 OT -0.834000 15.9994 0 + 5302 W1 938 TIP3 H1 HT 0.417000 1.0080 0 + 5303 W1 938 TIP3 H2 HT 0.417000 1.0080 0 + 5304 W1 939 TIP3 OH2 OT -0.834000 15.9994 0 + 5305 W1 939 TIP3 H1 HT 0.417000 1.0080 0 + 5306 W1 939 TIP3 H2 HT 0.417000 1.0080 0 + 5307 W1 940 TIP3 OH2 OT -0.834000 15.9994 0 + 5308 W1 940 TIP3 H1 HT 0.417000 1.0080 0 + 5309 W1 940 TIP3 H2 HT 0.417000 1.0080 0 + 5310 W1 941 TIP3 OH2 OT -0.834000 15.9994 0 + 5311 W1 941 TIP3 H1 HT 0.417000 1.0080 0 + 5312 W1 941 TIP3 H2 HT 0.417000 1.0080 0 + 5313 W1 942 TIP3 OH2 OT -0.834000 15.9994 0 + 5314 W1 942 TIP3 H1 HT 0.417000 1.0080 0 + 5315 W1 942 TIP3 H2 HT 0.417000 1.0080 0 + 5316 W1 943 TIP3 OH2 OT -0.834000 15.9994 0 + 5317 W1 943 TIP3 H1 HT 0.417000 1.0080 0 + 5318 W1 943 TIP3 H2 HT 0.417000 1.0080 0 + 5319 W1 944 TIP3 OH2 OT -0.834000 15.9994 0 + 5320 W1 944 TIP3 H1 HT 0.417000 1.0080 0 + 5321 W1 944 TIP3 H2 HT 0.417000 1.0080 0 + 5322 W1 945 TIP3 OH2 OT -0.834000 15.9994 0 + 5323 W1 945 TIP3 H1 HT 0.417000 1.0080 0 + 5324 W1 945 TIP3 H2 HT 0.417000 1.0080 0 + 5325 W1 946 TIP3 OH2 OT -0.834000 15.9994 0 + 5326 W1 946 TIP3 H1 HT 0.417000 1.0080 0 + 5327 W1 946 TIP3 H2 HT 0.417000 1.0080 0 + 5328 W1 947 TIP3 OH2 OT -0.834000 15.9994 0 + 5329 W1 947 TIP3 H1 HT 0.417000 1.0080 0 + 5330 W1 947 TIP3 H2 HT 0.417000 1.0080 0 + 5331 W1 948 TIP3 OH2 OT -0.834000 15.9994 0 + 5332 W1 948 TIP3 H1 HT 0.417000 1.0080 0 + 5333 W1 948 TIP3 H2 HT 0.417000 1.0080 0 + 5334 W1 949 TIP3 OH2 OT -0.834000 15.9994 0 + 5335 W1 949 TIP3 H1 HT 0.417000 1.0080 0 + 5336 W1 949 TIP3 H2 HT 0.417000 1.0080 0 + 5337 W1 950 TIP3 OH2 OT -0.834000 15.9994 0 + 5338 W1 950 TIP3 H1 HT 0.417000 1.0080 0 + 5339 W1 950 TIP3 H2 HT 0.417000 1.0080 0 + 5340 W1 951 TIP3 OH2 OT -0.834000 15.9994 0 + 5341 W1 951 TIP3 H1 HT 0.417000 1.0080 0 + 5342 W1 951 TIP3 H2 HT 0.417000 1.0080 0 + 5343 W1 952 TIP3 OH2 OT -0.834000 15.9994 0 + 5344 W1 952 TIP3 H1 HT 0.417000 1.0080 0 + 5345 W1 952 TIP3 H2 HT 0.417000 1.0080 0 + 5346 W1 953 TIP3 OH2 OT -0.834000 15.9994 0 + 5347 W1 953 TIP3 H1 HT 0.417000 1.0080 0 + 5348 W1 953 TIP3 H2 HT 0.417000 1.0080 0 + 5349 W1 954 TIP3 OH2 OT -0.834000 15.9994 0 + 5350 W1 954 TIP3 H1 HT 0.417000 1.0080 0 + 5351 W1 954 TIP3 H2 HT 0.417000 1.0080 0 + 5352 W1 955 TIP3 OH2 OT -0.834000 15.9994 0 + 5353 W1 955 TIP3 H1 HT 0.417000 1.0080 0 + 5354 W1 955 TIP3 H2 HT 0.417000 1.0080 0 + 5355 W1 956 TIP3 OH2 OT -0.834000 15.9994 0 + 5356 W1 956 TIP3 H1 HT 0.417000 1.0080 0 + 5357 W1 956 TIP3 H2 HT 0.417000 1.0080 0 + 5358 W1 957 TIP3 OH2 OT -0.834000 15.9994 0 + 5359 W1 957 TIP3 H1 HT 0.417000 1.0080 0 + 5360 W1 957 TIP3 H2 HT 0.417000 1.0080 0 + 5361 W1 958 TIP3 OH2 OT -0.834000 15.9994 0 + 5362 W1 958 TIP3 H1 HT 0.417000 1.0080 0 + 5363 W1 958 TIP3 H2 HT 0.417000 1.0080 0 + 5364 W1 959 TIP3 OH2 OT -0.834000 15.9994 0 + 5365 W1 959 TIP3 H1 HT 0.417000 1.0080 0 + 5366 W1 959 TIP3 H2 HT 0.417000 1.0080 0 + 5367 W1 960 TIP3 OH2 OT -0.834000 15.9994 0 + 5368 W1 960 TIP3 H1 HT 0.417000 1.0080 0 + 5369 W1 960 TIP3 H2 HT 0.417000 1.0080 0 + 5370 W1 961 TIP3 OH2 OT -0.834000 15.9994 0 + 5371 W1 961 TIP3 H1 HT 0.417000 1.0080 0 + 5372 W1 961 TIP3 H2 HT 0.417000 1.0080 0 + 5373 W1 962 TIP3 OH2 OT -0.834000 15.9994 0 + 5374 W1 962 TIP3 H1 HT 0.417000 1.0080 0 + 5375 W1 962 TIP3 H2 HT 0.417000 1.0080 0 + 5376 W1 963 TIP3 OH2 OT -0.834000 15.9994 0 + 5377 W1 963 TIP3 H1 HT 0.417000 1.0080 0 + 5378 W1 963 TIP3 H2 HT 0.417000 1.0080 0 + 5379 W1 964 TIP3 OH2 OT -0.834000 15.9994 0 + 5380 W1 964 TIP3 H1 HT 0.417000 1.0080 0 + 5381 W1 964 TIP3 H2 HT 0.417000 1.0080 0 + 5382 W1 965 TIP3 OH2 OT -0.834000 15.9994 0 + 5383 W1 965 TIP3 H1 HT 0.417000 1.0080 0 + 5384 W1 965 TIP3 H2 HT 0.417000 1.0080 0 + 5385 W1 966 TIP3 OH2 OT -0.834000 15.9994 0 + 5386 W1 966 TIP3 H1 HT 0.417000 1.0080 0 + 5387 W1 966 TIP3 H2 HT 0.417000 1.0080 0 + 5388 W1 967 TIP3 OH2 OT -0.834000 15.9994 0 + 5389 W1 967 TIP3 H1 HT 0.417000 1.0080 0 + 5390 W1 967 TIP3 H2 HT 0.417000 1.0080 0 + 5391 W1 968 TIP3 OH2 OT -0.834000 15.9994 0 + 5392 W1 968 TIP3 H1 HT 0.417000 1.0080 0 + 5393 W1 968 TIP3 H2 HT 0.417000 1.0080 0 + 5394 W1 969 TIP3 OH2 OT -0.834000 15.9994 0 + 5395 W1 969 TIP3 H1 HT 0.417000 1.0080 0 + 5396 W1 969 TIP3 H2 HT 0.417000 1.0080 0 + 5397 W1 970 TIP3 OH2 OT -0.834000 15.9994 0 + 5398 W1 970 TIP3 H1 HT 0.417000 1.0080 0 + 5399 W1 970 TIP3 H2 HT 0.417000 1.0080 0 + 5400 W1 971 TIP3 OH2 OT -0.834000 15.9994 0 + 5401 W1 971 TIP3 H1 HT 0.417000 1.0080 0 + 5402 W1 971 TIP3 H2 HT 0.417000 1.0080 0 + 5403 W1 972 TIP3 OH2 OT -0.834000 15.9994 0 + 5404 W1 972 TIP3 H1 HT 0.417000 1.0080 0 + 5405 W1 972 TIP3 H2 HT 0.417000 1.0080 0 + 5406 W1 973 TIP3 OH2 OT -0.834000 15.9994 0 + 5407 W1 973 TIP3 H1 HT 0.417000 1.0080 0 + 5408 W1 973 TIP3 H2 HT 0.417000 1.0080 0 + 5409 W1 974 TIP3 OH2 OT -0.834000 15.9994 0 + 5410 W1 974 TIP3 H1 HT 0.417000 1.0080 0 + 5411 W1 974 TIP3 H2 HT 0.417000 1.0080 0 + 5412 W1 975 TIP3 OH2 OT -0.834000 15.9994 0 + 5413 W1 975 TIP3 H1 HT 0.417000 1.0080 0 + 5414 W1 975 TIP3 H2 HT 0.417000 1.0080 0 + 5415 W1 976 TIP3 OH2 OT -0.834000 15.9994 0 + 5416 W1 976 TIP3 H1 HT 0.417000 1.0080 0 + 5417 W1 976 TIP3 H2 HT 0.417000 1.0080 0 + 5418 W1 977 TIP3 OH2 OT -0.834000 15.9994 0 + 5419 W1 977 TIP3 H1 HT 0.417000 1.0080 0 + 5420 W1 977 TIP3 H2 HT 0.417000 1.0080 0 + 5421 W1 978 TIP3 OH2 OT -0.834000 15.9994 0 + 5422 W1 978 TIP3 H1 HT 0.417000 1.0080 0 + 5423 W1 978 TIP3 H2 HT 0.417000 1.0080 0 + 5424 W1 979 TIP3 OH2 OT -0.834000 15.9994 0 + 5425 W1 979 TIP3 H1 HT 0.417000 1.0080 0 + 5426 W1 979 TIP3 H2 HT 0.417000 1.0080 0 + 5427 W1 980 TIP3 OH2 OT -0.834000 15.9994 0 + 5428 W1 980 TIP3 H1 HT 0.417000 1.0080 0 + 5429 W1 980 TIP3 H2 HT 0.417000 1.0080 0 + 5430 W1 981 TIP3 OH2 OT -0.834000 15.9994 0 + 5431 W1 981 TIP3 H1 HT 0.417000 1.0080 0 + 5432 W1 981 TIP3 H2 HT 0.417000 1.0080 0 + 5433 W1 982 TIP3 OH2 OT -0.834000 15.9994 0 + 5434 W1 982 TIP3 H1 HT 0.417000 1.0080 0 + 5435 W1 982 TIP3 H2 HT 0.417000 1.0080 0 + 5436 W1 983 TIP3 OH2 OT -0.834000 15.9994 0 + 5437 W1 983 TIP3 H1 HT 0.417000 1.0080 0 + 5438 W1 983 TIP3 H2 HT 0.417000 1.0080 0 + 5439 W1 984 TIP3 OH2 OT -0.834000 15.9994 0 + 5440 W1 984 TIP3 H1 HT 0.417000 1.0080 0 + 5441 W1 984 TIP3 H2 HT 0.417000 1.0080 0 + 5442 W1 985 TIP3 OH2 OT -0.834000 15.9994 0 + 5443 W1 985 TIP3 H1 HT 0.417000 1.0080 0 + 5444 W1 985 TIP3 H2 HT 0.417000 1.0080 0 + 5445 W1 986 TIP3 OH2 OT -0.834000 15.9994 0 + 5446 W1 986 TIP3 H1 HT 0.417000 1.0080 0 + 5447 W1 986 TIP3 H2 HT 0.417000 1.0080 0 + 5448 W1 987 TIP3 OH2 OT -0.834000 15.9994 0 + 5449 W1 987 TIP3 H1 HT 0.417000 1.0080 0 + 5450 W1 987 TIP3 H2 HT 0.417000 1.0080 0 + 5451 W1 988 TIP3 OH2 OT -0.834000 15.9994 0 + 5452 W1 988 TIP3 H1 HT 0.417000 1.0080 0 + 5453 W1 988 TIP3 H2 HT 0.417000 1.0080 0 + 5454 W1 989 TIP3 OH2 OT -0.834000 15.9994 0 + 5455 W1 989 TIP3 H1 HT 0.417000 1.0080 0 + 5456 W1 989 TIP3 H2 HT 0.417000 1.0080 0 + 5457 W1 990 TIP3 OH2 OT -0.834000 15.9994 0 + 5458 W1 990 TIP3 H1 HT 0.417000 1.0080 0 + 5459 W1 990 TIP3 H2 HT 0.417000 1.0080 0 + 5460 W1 991 TIP3 OH2 OT -0.834000 15.9994 0 + 5461 W1 991 TIP3 H1 HT 0.417000 1.0080 0 + 5462 W1 991 TIP3 H2 HT 0.417000 1.0080 0 + 5463 W1 992 TIP3 OH2 OT -0.834000 15.9994 0 + 5464 W1 992 TIP3 H1 HT 0.417000 1.0080 0 + 5465 W1 992 TIP3 H2 HT 0.417000 1.0080 0 + 5466 W1 993 TIP3 OH2 OT -0.834000 15.9994 0 + 5467 W1 993 TIP3 H1 HT 0.417000 1.0080 0 + 5468 W1 993 TIP3 H2 HT 0.417000 1.0080 0 + 5469 W1 994 TIP3 OH2 OT -0.834000 15.9994 0 + 5470 W1 994 TIP3 H1 HT 0.417000 1.0080 0 + 5471 W1 994 TIP3 H2 HT 0.417000 1.0080 0 + 5472 W1 995 TIP3 OH2 OT -0.834000 15.9994 0 + 5473 W1 995 TIP3 H1 HT 0.417000 1.0080 0 + 5474 W1 995 TIP3 H2 HT 0.417000 1.0080 0 + 5475 W1 996 TIP3 OH2 OT -0.834000 15.9994 0 + 5476 W1 996 TIP3 H1 HT 0.417000 1.0080 0 + 5477 W1 996 TIP3 H2 HT 0.417000 1.0080 0 + 5478 W1 997 TIP3 OH2 OT -0.834000 15.9994 0 + 5479 W1 997 TIP3 H1 HT 0.417000 1.0080 0 + 5480 W1 997 TIP3 H2 HT 0.417000 1.0080 0 + 5481 W1 998 TIP3 OH2 OT -0.834000 15.9994 0 + 5482 W1 998 TIP3 H1 HT 0.417000 1.0080 0 + 5483 W1 998 TIP3 H2 HT 0.417000 1.0080 0 + 5484 W1 999 TIP3 OH2 OT -0.834000 15.9994 0 + 5485 W1 999 TIP3 H1 HT 0.417000 1.0080 0 + 5486 W1 999 TIP3 H2 HT 0.417000 1.0080 0 + 5487 W1 1000 TIP3 OH2 OT -0.834000 15.9994 0 + 5488 W1 1000 TIP3 H1 HT 0.417000 1.0080 0 + 5489 W1 1000 TIP3 H2 HT 0.417000 1.0080 0 + 5490 W1 1001 TIP3 OH2 OT -0.834000 15.9994 0 + 5491 W1 1001 TIP3 H1 HT 0.417000 1.0080 0 + 5492 W1 1001 TIP3 H2 HT 0.417000 1.0080 0 + 5493 W1 1002 TIP3 OH2 OT -0.834000 15.9994 0 + 5494 W1 1002 TIP3 H1 HT 0.417000 1.0080 0 + 5495 W1 1002 TIP3 H2 HT 0.417000 1.0080 0 + 5496 W1 1003 TIP3 OH2 OT -0.834000 15.9994 0 + 5497 W1 1003 TIP3 H1 HT 0.417000 1.0080 0 + 5498 W1 1003 TIP3 H2 HT 0.417000 1.0080 0 + 5499 W1 1004 TIP3 OH2 OT -0.834000 15.9994 0 + 5500 W1 1004 TIP3 H1 HT 0.417000 1.0080 0 + 5501 W1 1004 TIP3 H2 HT 0.417000 1.0080 0 + 5502 W1 1005 TIP3 OH2 OT -0.834000 15.9994 0 + 5503 W1 1005 TIP3 H1 HT 0.417000 1.0080 0 + 5504 W1 1005 TIP3 H2 HT 0.417000 1.0080 0 + 5505 W1 1006 TIP3 OH2 OT -0.834000 15.9994 0 + 5506 W1 1006 TIP3 H1 HT 0.417000 1.0080 0 + 5507 W1 1006 TIP3 H2 HT 0.417000 1.0080 0 + 5508 W1 1007 TIP3 OH2 OT -0.834000 15.9994 0 + 5509 W1 1007 TIP3 H1 HT 0.417000 1.0080 0 + 5510 W1 1007 TIP3 H2 HT 0.417000 1.0080 0 + 5511 W1 1008 TIP3 OH2 OT -0.834000 15.9994 0 + 5512 W1 1008 TIP3 H1 HT 0.417000 1.0080 0 + 5513 W1 1008 TIP3 H2 HT 0.417000 1.0080 0 + 5514 W1 1009 TIP3 OH2 OT -0.834000 15.9994 0 + 5515 W1 1009 TIP3 H1 HT 0.417000 1.0080 0 + 5516 W1 1009 TIP3 H2 HT 0.417000 1.0080 0 + 5517 W1 1010 TIP3 OH2 OT -0.834000 15.9994 0 + 5518 W1 1010 TIP3 H1 HT 0.417000 1.0080 0 + 5519 W1 1010 TIP3 H2 HT 0.417000 1.0080 0 + 5520 W1 1011 TIP3 OH2 OT -0.834000 15.9994 0 + 5521 W1 1011 TIP3 H1 HT 0.417000 1.0080 0 + 5522 W1 1011 TIP3 H2 HT 0.417000 1.0080 0 + 5523 W1 1012 TIP3 OH2 OT -0.834000 15.9994 0 + 5524 W1 1012 TIP3 H1 HT 0.417000 1.0080 0 + 5525 W1 1012 TIP3 H2 HT 0.417000 1.0080 0 + 5526 W1 1013 TIP3 OH2 OT -0.834000 15.9994 0 + 5527 W1 1013 TIP3 H1 HT 0.417000 1.0080 0 + 5528 W1 1013 TIP3 H2 HT 0.417000 1.0080 0 + 5529 W1 1014 TIP3 OH2 OT -0.834000 15.9994 0 + 5530 W1 1014 TIP3 H1 HT 0.417000 1.0080 0 + 5531 W1 1014 TIP3 H2 HT 0.417000 1.0080 0 + 5532 W1 1015 TIP3 OH2 OT -0.834000 15.9994 0 + 5533 W1 1015 TIP3 H1 HT 0.417000 1.0080 0 + 5534 W1 1015 TIP3 H2 HT 0.417000 1.0080 0 + 5535 W1 1016 TIP3 OH2 OT -0.834000 15.9994 0 + 5536 W1 1016 TIP3 H1 HT 0.417000 1.0080 0 + 5537 W1 1016 TIP3 H2 HT 0.417000 1.0080 0 + 5538 W1 1017 TIP3 OH2 OT -0.834000 15.9994 0 + 5539 W1 1017 TIP3 H1 HT 0.417000 1.0080 0 + 5540 W1 1017 TIP3 H2 HT 0.417000 1.0080 0 + 5541 W1 1018 TIP3 OH2 OT -0.834000 15.9994 0 + 5542 W1 1018 TIP3 H1 HT 0.417000 1.0080 0 + 5543 W1 1018 TIP3 H2 HT 0.417000 1.0080 0 + 5544 W1 1019 TIP3 OH2 OT -0.834000 15.9994 0 + 5545 W1 1019 TIP3 H1 HT 0.417000 1.0080 0 + 5546 W1 1019 TIP3 H2 HT 0.417000 1.0080 0 + 5547 W1 1020 TIP3 OH2 OT -0.834000 15.9994 0 + 5548 W1 1020 TIP3 H1 HT 0.417000 1.0080 0 + 5549 W1 1020 TIP3 H2 HT 0.417000 1.0080 0 + 5550 W1 1021 TIP3 OH2 OT -0.834000 15.9994 0 + 5551 W1 1021 TIP3 H1 HT 0.417000 1.0080 0 + 5552 W1 1021 TIP3 H2 HT 0.417000 1.0080 0 + 5553 W1 1022 TIP3 OH2 OT -0.834000 15.9994 0 + 5554 W1 1022 TIP3 H1 HT 0.417000 1.0080 0 + 5555 W1 1022 TIP3 H2 HT 0.417000 1.0080 0 + 5556 W1 1023 TIP3 OH2 OT -0.834000 15.9994 0 + 5557 W1 1023 TIP3 H1 HT 0.417000 1.0080 0 + 5558 W1 1023 TIP3 H2 HT 0.417000 1.0080 0 + 5559 W1 1024 TIP3 OH2 OT -0.834000 15.9994 0 + 5560 W1 1024 TIP3 H1 HT 0.417000 1.0080 0 + 5561 W1 1024 TIP3 H2 HT 0.417000 1.0080 0 + 5562 W1 1025 TIP3 OH2 OT -0.834000 15.9994 0 + 5563 W1 1025 TIP3 H1 HT 0.417000 1.0080 0 + 5564 W1 1025 TIP3 H2 HT 0.417000 1.0080 0 + 5565 W1 1026 TIP3 OH2 OT -0.834000 15.9994 0 + 5566 W1 1026 TIP3 H1 HT 0.417000 1.0080 0 + 5567 W1 1026 TIP3 H2 HT 0.417000 1.0080 0 + 5568 W1 1027 TIP3 OH2 OT -0.834000 15.9994 0 + 5569 W1 1027 TIP3 H1 HT 0.417000 1.0080 0 + 5570 W1 1027 TIP3 H2 HT 0.417000 1.0080 0 + 5571 W1 1028 TIP3 OH2 OT -0.834000 15.9994 0 + 5572 W1 1028 TIP3 H1 HT 0.417000 1.0080 0 + 5573 W1 1028 TIP3 H2 HT 0.417000 1.0080 0 + 5574 W1 1029 TIP3 OH2 OT -0.834000 15.9994 0 + 5575 W1 1029 TIP3 H1 HT 0.417000 1.0080 0 + 5576 W1 1029 TIP3 H2 HT 0.417000 1.0080 0 + 5577 W1 1030 TIP3 OH2 OT -0.834000 15.9994 0 + 5578 W1 1030 TIP3 H1 HT 0.417000 1.0080 0 + 5579 W1 1030 TIP3 H2 HT 0.417000 1.0080 0 + 5580 W1 1031 TIP3 OH2 OT -0.834000 15.9994 0 + 5581 W1 1031 TIP3 H1 HT 0.417000 1.0080 0 + 5582 W1 1031 TIP3 H2 HT 0.417000 1.0080 0 + 5583 W1 1032 TIP3 OH2 OT -0.834000 15.9994 0 + 5584 W1 1032 TIP3 H1 HT 0.417000 1.0080 0 + 5585 W1 1032 TIP3 H2 HT 0.417000 1.0080 0 + 5586 W1 1033 TIP3 OH2 OT -0.834000 15.9994 0 + 5587 W1 1033 TIP3 H1 HT 0.417000 1.0080 0 + 5588 W1 1033 TIP3 H2 HT 0.417000 1.0080 0 + 5589 W1 1034 TIP3 OH2 OT -0.834000 15.9994 0 + 5590 W1 1034 TIP3 H1 HT 0.417000 1.0080 0 + 5591 W1 1034 TIP3 H2 HT 0.417000 1.0080 0 + 5592 W1 1035 TIP3 OH2 OT -0.834000 15.9994 0 + 5593 W1 1035 TIP3 H1 HT 0.417000 1.0080 0 + 5594 W1 1035 TIP3 H2 HT 0.417000 1.0080 0 + 5595 W1 1036 TIP3 OH2 OT -0.834000 15.9994 0 + 5596 W1 1036 TIP3 H1 HT 0.417000 1.0080 0 + 5597 W1 1036 TIP3 H2 HT 0.417000 1.0080 0 + 5598 W1 1037 TIP3 OH2 OT -0.834000 15.9994 0 + 5599 W1 1037 TIP3 H1 HT 0.417000 1.0080 0 + 5600 W1 1037 TIP3 H2 HT 0.417000 1.0080 0 + 5601 W1 1038 TIP3 OH2 OT -0.834000 15.9994 0 + 5602 W1 1038 TIP3 H1 HT 0.417000 1.0080 0 + 5603 W1 1038 TIP3 H2 HT 0.417000 1.0080 0 + 5604 W1 1039 TIP3 OH2 OT -0.834000 15.9994 0 + 5605 W1 1039 TIP3 H1 HT 0.417000 1.0080 0 + 5606 W1 1039 TIP3 H2 HT 0.417000 1.0080 0 + 5607 W1 1040 TIP3 OH2 OT -0.834000 15.9994 0 + 5608 W1 1040 TIP3 H1 HT 0.417000 1.0080 0 + 5609 W1 1040 TIP3 H2 HT 0.417000 1.0080 0 + 5610 W1 1041 TIP3 OH2 OT -0.834000 15.9994 0 + 5611 W1 1041 TIP3 H1 HT 0.417000 1.0080 0 + 5612 W1 1041 TIP3 H2 HT 0.417000 1.0080 0 + 5613 W1 1042 TIP3 OH2 OT -0.834000 15.9994 0 + 5614 W1 1042 TIP3 H1 HT 0.417000 1.0080 0 + 5615 W1 1042 TIP3 H2 HT 0.417000 1.0080 0 + 5616 W1 1043 TIP3 OH2 OT -0.834000 15.9994 0 + 5617 W1 1043 TIP3 H1 HT 0.417000 1.0080 0 + 5618 W1 1043 TIP3 H2 HT 0.417000 1.0080 0 + 5619 W1 1044 TIP3 OH2 OT -0.834000 15.9994 0 + 5620 W1 1044 TIP3 H1 HT 0.417000 1.0080 0 + 5621 W1 1044 TIP3 H2 HT 0.417000 1.0080 0 + 5622 W1 1045 TIP3 OH2 OT -0.834000 15.9994 0 + 5623 W1 1045 TIP3 H1 HT 0.417000 1.0080 0 + 5624 W1 1045 TIP3 H2 HT 0.417000 1.0080 0 + 5625 W1 1046 TIP3 OH2 OT -0.834000 15.9994 0 + 5626 W1 1046 TIP3 H1 HT 0.417000 1.0080 0 + 5627 W1 1046 TIP3 H2 HT 0.417000 1.0080 0 + 5628 W1 1047 TIP3 OH2 OT -0.834000 15.9994 0 + 5629 W1 1047 TIP3 H1 HT 0.417000 1.0080 0 + 5630 W1 1047 TIP3 H2 HT 0.417000 1.0080 0 + 5631 W1 1048 TIP3 OH2 OT -0.834000 15.9994 0 + 5632 W1 1048 TIP3 H1 HT 0.417000 1.0080 0 + 5633 W1 1048 TIP3 H2 HT 0.417000 1.0080 0 + 5634 W1 1049 TIP3 OH2 OT -0.834000 15.9994 0 + 5635 W1 1049 TIP3 H1 HT 0.417000 1.0080 0 + 5636 W1 1049 TIP3 H2 HT 0.417000 1.0080 0 + 5637 W1 1050 TIP3 OH2 OT -0.834000 15.9994 0 + 5638 W1 1050 TIP3 H1 HT 0.417000 1.0080 0 + 5639 W1 1050 TIP3 H2 HT 0.417000 1.0080 0 + 5640 W1 1051 TIP3 OH2 OT -0.834000 15.9994 0 + 5641 W1 1051 TIP3 H1 HT 0.417000 1.0080 0 + 5642 W1 1051 TIP3 H2 HT 0.417000 1.0080 0 + 5643 W1 1052 TIP3 OH2 OT -0.834000 15.9994 0 + 5644 W1 1052 TIP3 H1 HT 0.417000 1.0080 0 + 5645 W1 1052 TIP3 H2 HT 0.417000 1.0080 0 + 5646 W1 1053 TIP3 OH2 OT -0.834000 15.9994 0 + 5647 W1 1053 TIP3 H1 HT 0.417000 1.0080 0 + 5648 W1 1053 TIP3 H2 HT 0.417000 1.0080 0 + 5649 W1 1054 TIP3 OH2 OT -0.834000 15.9994 0 + 5650 W1 1054 TIP3 H1 HT 0.417000 1.0080 0 + 5651 W1 1054 TIP3 H2 HT 0.417000 1.0080 0 + 5652 W1 1055 TIP3 OH2 OT -0.834000 15.9994 0 + 5653 W1 1055 TIP3 H1 HT 0.417000 1.0080 0 + 5654 W1 1055 TIP3 H2 HT 0.417000 1.0080 0 + 5655 W1 1056 TIP3 OH2 OT -0.834000 15.9994 0 + 5656 W1 1056 TIP3 H1 HT 0.417000 1.0080 0 + 5657 W1 1056 TIP3 H2 HT 0.417000 1.0080 0 + 5658 W1 1057 TIP3 OH2 OT -0.834000 15.9994 0 + 5659 W1 1057 TIP3 H1 HT 0.417000 1.0080 0 + 5660 W1 1057 TIP3 H2 HT 0.417000 1.0080 0 + 5661 W1 1058 TIP3 OH2 OT -0.834000 15.9994 0 + 5662 W1 1058 TIP3 H1 HT 0.417000 1.0080 0 + 5663 W1 1058 TIP3 H2 HT 0.417000 1.0080 0 + 5664 W1 1059 TIP3 OH2 OT -0.834000 15.9994 0 + 5665 W1 1059 TIP3 H1 HT 0.417000 1.0080 0 + 5666 W1 1059 TIP3 H2 HT 0.417000 1.0080 0 + 5667 W1 1060 TIP3 OH2 OT -0.834000 15.9994 0 + 5668 W1 1060 TIP3 H1 HT 0.417000 1.0080 0 + 5669 W1 1060 TIP3 H2 HT 0.417000 1.0080 0 + 5670 W1 1061 TIP3 OH2 OT -0.834000 15.9994 0 + 5671 W1 1061 TIP3 H1 HT 0.417000 1.0080 0 + 5672 W1 1061 TIP3 H2 HT 0.417000 1.0080 0 + 5673 W1 1062 TIP3 OH2 OT -0.834000 15.9994 0 + 5674 W1 1062 TIP3 H1 HT 0.417000 1.0080 0 + 5675 W1 1062 TIP3 H2 HT 0.417000 1.0080 0 + 5676 W1 1063 TIP3 OH2 OT -0.834000 15.9994 0 + 5677 W1 1063 TIP3 H1 HT 0.417000 1.0080 0 + 5678 W1 1063 TIP3 H2 HT 0.417000 1.0080 0 + 5679 W1 1064 TIP3 OH2 OT -0.834000 15.9994 0 + 5680 W1 1064 TIP3 H1 HT 0.417000 1.0080 0 + 5681 W1 1064 TIP3 H2 HT 0.417000 1.0080 0 + 5682 W1 1065 TIP3 OH2 OT -0.834000 15.9994 0 + 5683 W1 1065 TIP3 H1 HT 0.417000 1.0080 0 + 5684 W1 1065 TIP3 H2 HT 0.417000 1.0080 0 + 5685 W1 1066 TIP3 OH2 OT -0.834000 15.9994 0 + 5686 W1 1066 TIP3 H1 HT 0.417000 1.0080 0 + 5687 W1 1066 TIP3 H2 HT 0.417000 1.0080 0 + 5688 W1 1067 TIP3 OH2 OT -0.834000 15.9994 0 + 5689 W1 1067 TIP3 H1 HT 0.417000 1.0080 0 + 5690 W1 1067 TIP3 H2 HT 0.417000 1.0080 0 + 5691 W1 1068 TIP3 OH2 OT -0.834000 15.9994 0 + 5692 W1 1068 TIP3 H1 HT 0.417000 1.0080 0 + 5693 W1 1068 TIP3 H2 HT 0.417000 1.0080 0 + 5694 W1 1069 TIP3 OH2 OT -0.834000 15.9994 0 + 5695 W1 1069 TIP3 H1 HT 0.417000 1.0080 0 + 5696 W1 1069 TIP3 H2 HT 0.417000 1.0080 0 + 5697 W1 1070 TIP3 OH2 OT -0.834000 15.9994 0 + 5698 W1 1070 TIP3 H1 HT 0.417000 1.0080 0 + 5699 W1 1070 TIP3 H2 HT 0.417000 1.0080 0 + 5700 W1 1071 TIP3 OH2 OT -0.834000 15.9994 0 + 5701 W1 1071 TIP3 H1 HT 0.417000 1.0080 0 + 5702 W1 1071 TIP3 H2 HT 0.417000 1.0080 0 + 5703 W1 1072 TIP3 OH2 OT -0.834000 15.9994 0 + 5704 W1 1072 TIP3 H1 HT 0.417000 1.0080 0 + 5705 W1 1072 TIP3 H2 HT 0.417000 1.0080 0 + 5706 W1 1073 TIP3 OH2 OT -0.834000 15.9994 0 + 5707 W1 1073 TIP3 H1 HT 0.417000 1.0080 0 + 5708 W1 1073 TIP3 H2 HT 0.417000 1.0080 0 + 5709 W1 1074 TIP3 OH2 OT -0.834000 15.9994 0 + 5710 W1 1074 TIP3 H1 HT 0.417000 1.0080 0 + 5711 W1 1074 TIP3 H2 HT 0.417000 1.0080 0 + 5712 W1 1075 TIP3 OH2 OT -0.834000 15.9994 0 + 5713 W1 1075 TIP3 H1 HT 0.417000 1.0080 0 + 5714 W1 1075 TIP3 H2 HT 0.417000 1.0080 0 + 5715 W1 1076 TIP3 OH2 OT -0.834000 15.9994 0 + 5716 W1 1076 TIP3 H1 HT 0.417000 1.0080 0 + 5717 W1 1076 TIP3 H2 HT 0.417000 1.0080 0 + 5718 W1 1077 TIP3 OH2 OT -0.834000 15.9994 0 + 5719 W1 1077 TIP3 H1 HT 0.417000 1.0080 0 + 5720 W1 1077 TIP3 H2 HT 0.417000 1.0080 0 + 5721 W1 1078 TIP3 OH2 OT -0.834000 15.9994 0 + 5722 W1 1078 TIP3 H1 HT 0.417000 1.0080 0 + 5723 W1 1078 TIP3 H2 HT 0.417000 1.0080 0 + 5724 W1 1079 TIP3 OH2 OT -0.834000 15.9994 0 + 5725 W1 1079 TIP3 H1 HT 0.417000 1.0080 0 + 5726 W1 1079 TIP3 H2 HT 0.417000 1.0080 0 + 5727 W1 1080 TIP3 OH2 OT -0.834000 15.9994 0 + 5728 W1 1080 TIP3 H1 HT 0.417000 1.0080 0 + 5729 W1 1080 TIP3 H2 HT 0.417000 1.0080 0 + 5730 W1 1081 TIP3 OH2 OT -0.834000 15.9994 0 + 5731 W1 1081 TIP3 H1 HT 0.417000 1.0080 0 + 5732 W1 1081 TIP3 H2 HT 0.417000 1.0080 0 + 5733 W1 1082 TIP3 OH2 OT -0.834000 15.9994 0 + 5734 W1 1082 TIP3 H1 HT 0.417000 1.0080 0 + 5735 W1 1082 TIP3 H2 HT 0.417000 1.0080 0 + 5736 W1 1083 TIP3 OH2 OT -0.834000 15.9994 0 + 5737 W1 1083 TIP3 H1 HT 0.417000 1.0080 0 + 5738 W1 1083 TIP3 H2 HT 0.417000 1.0080 0 + 5739 W1 1084 TIP3 OH2 OT -0.834000 15.9994 0 + 5740 W1 1084 TIP3 H1 HT 0.417000 1.0080 0 + 5741 W1 1084 TIP3 H2 HT 0.417000 1.0080 0 + 5742 W1 1085 TIP3 OH2 OT -0.834000 15.9994 0 + 5743 W1 1085 TIP3 H1 HT 0.417000 1.0080 0 + 5744 W1 1085 TIP3 H2 HT 0.417000 1.0080 0 + 5745 W1 1086 TIP3 OH2 OT -0.834000 15.9994 0 + 5746 W1 1086 TIP3 H1 HT 0.417000 1.0080 0 + 5747 W1 1086 TIP3 H2 HT 0.417000 1.0080 0 + 5748 W1 1087 TIP3 OH2 OT -0.834000 15.9994 0 + 5749 W1 1087 TIP3 H1 HT 0.417000 1.0080 0 + 5750 W1 1087 TIP3 H2 HT 0.417000 1.0080 0 + 5751 W1 1088 TIP3 OH2 OT -0.834000 15.9994 0 + 5752 W1 1088 TIP3 H1 HT 0.417000 1.0080 0 + 5753 W1 1088 TIP3 H2 HT 0.417000 1.0080 0 + 5754 W1 1089 TIP3 OH2 OT -0.834000 15.9994 0 + 5755 W1 1089 TIP3 H1 HT 0.417000 1.0080 0 + 5756 W1 1089 TIP3 H2 HT 0.417000 1.0080 0 + 5757 W1 1090 TIP3 OH2 OT -0.834000 15.9994 0 + 5758 W1 1090 TIP3 H1 HT 0.417000 1.0080 0 + 5759 W1 1090 TIP3 H2 HT 0.417000 1.0080 0 + 5760 W1 1091 TIP3 OH2 OT -0.834000 15.9994 0 + 5761 W1 1091 TIP3 H1 HT 0.417000 1.0080 0 + 5762 W1 1091 TIP3 H2 HT 0.417000 1.0080 0 + 5763 W1 1092 TIP3 OH2 OT -0.834000 15.9994 0 + 5764 W1 1092 TIP3 H1 HT 0.417000 1.0080 0 + 5765 W1 1092 TIP3 H2 HT 0.417000 1.0080 0 + 5766 W1 1093 TIP3 OH2 OT -0.834000 15.9994 0 + 5767 W1 1093 TIP3 H1 HT 0.417000 1.0080 0 + 5768 W1 1093 TIP3 H2 HT 0.417000 1.0080 0 + 5769 W1 1094 TIP3 OH2 OT -0.834000 15.9994 0 + 5770 W1 1094 TIP3 H1 HT 0.417000 1.0080 0 + 5771 W1 1094 TIP3 H2 HT 0.417000 1.0080 0 + 5772 W1 1095 TIP3 OH2 OT -0.834000 15.9994 0 + 5773 W1 1095 TIP3 H1 HT 0.417000 1.0080 0 + 5774 W1 1095 TIP3 H2 HT 0.417000 1.0080 0 + 5775 W1 1096 TIP3 OH2 OT -0.834000 15.9994 0 + 5776 W1 1096 TIP3 H1 HT 0.417000 1.0080 0 + 5777 W1 1096 TIP3 H2 HT 0.417000 1.0080 0 + 5778 W1 1097 TIP3 OH2 OT -0.834000 15.9994 0 + 5779 W1 1097 TIP3 H1 HT 0.417000 1.0080 0 + 5780 W1 1097 TIP3 H2 HT 0.417000 1.0080 0 + 5781 W1 1098 TIP3 OH2 OT -0.834000 15.9994 0 + 5782 W1 1098 TIP3 H1 HT 0.417000 1.0080 0 + 5783 W1 1098 TIP3 H2 HT 0.417000 1.0080 0 + 5784 W1 1099 TIP3 OH2 OT -0.834000 15.9994 0 + 5785 W1 1099 TIP3 H1 HT 0.417000 1.0080 0 + 5786 W1 1099 TIP3 H2 HT 0.417000 1.0080 0 + 5787 W1 1100 TIP3 OH2 OT -0.834000 15.9994 0 + 5788 W1 1100 TIP3 H1 HT 0.417000 1.0080 0 + 5789 W1 1100 TIP3 H2 HT 0.417000 1.0080 0 + 5790 W1 1101 TIP3 OH2 OT -0.834000 15.9994 0 + 5791 W1 1101 TIP3 H1 HT 0.417000 1.0080 0 + 5792 W1 1101 TIP3 H2 HT 0.417000 1.0080 0 + 5793 W1 1102 TIP3 OH2 OT -0.834000 15.9994 0 + 5794 W1 1102 TIP3 H1 HT 0.417000 1.0080 0 + 5795 W1 1102 TIP3 H2 HT 0.417000 1.0080 0 + 5796 W1 1103 TIP3 OH2 OT -0.834000 15.9994 0 + 5797 W1 1103 TIP3 H1 HT 0.417000 1.0080 0 + 5798 W1 1103 TIP3 H2 HT 0.417000 1.0080 0 + 5799 W1 1104 TIP3 OH2 OT -0.834000 15.9994 0 + 5800 W1 1104 TIP3 H1 HT 0.417000 1.0080 0 + 5801 W1 1104 TIP3 H2 HT 0.417000 1.0080 0 + 5802 W1 1105 TIP3 OH2 OT -0.834000 15.9994 0 + 5803 W1 1105 TIP3 H1 HT 0.417000 1.0080 0 + 5804 W1 1105 TIP3 H2 HT 0.417000 1.0080 0 + 5805 W1 1106 TIP3 OH2 OT -0.834000 15.9994 0 + 5806 W1 1106 TIP3 H1 HT 0.417000 1.0080 0 + 5807 W1 1106 TIP3 H2 HT 0.417000 1.0080 0 + 5808 W1 1107 TIP3 OH2 OT -0.834000 15.9994 0 + 5809 W1 1107 TIP3 H1 HT 0.417000 1.0080 0 + 5810 W1 1107 TIP3 H2 HT 0.417000 1.0080 0 + 5811 W1 1108 TIP3 OH2 OT -0.834000 15.9994 0 + 5812 W1 1108 TIP3 H1 HT 0.417000 1.0080 0 + 5813 W1 1108 TIP3 H2 HT 0.417000 1.0080 0 + 5814 W1 1109 TIP3 OH2 OT -0.834000 15.9994 0 + 5815 W1 1109 TIP3 H1 HT 0.417000 1.0080 0 + 5816 W1 1109 TIP3 H2 HT 0.417000 1.0080 0 + 5817 W1 1110 TIP3 OH2 OT -0.834000 15.9994 0 + 5818 W1 1110 TIP3 H1 HT 0.417000 1.0080 0 + 5819 W1 1110 TIP3 H2 HT 0.417000 1.0080 0 + 5820 W1 1111 TIP3 OH2 OT -0.834000 15.9994 0 + 5821 W1 1111 TIP3 H1 HT 0.417000 1.0080 0 + 5822 W1 1111 TIP3 H2 HT 0.417000 1.0080 0 + 5823 W1 1112 TIP3 OH2 OT -0.834000 15.9994 0 + 5824 W1 1112 TIP3 H1 HT 0.417000 1.0080 0 + 5825 W1 1112 TIP3 H2 HT 0.417000 1.0080 0 + 5826 W1 1113 TIP3 OH2 OT -0.834000 15.9994 0 + 5827 W1 1113 TIP3 H1 HT 0.417000 1.0080 0 + 5828 W1 1113 TIP3 H2 HT 0.417000 1.0080 0 + 5829 W1 1114 TIP3 OH2 OT -0.834000 15.9994 0 + 5830 W1 1114 TIP3 H1 HT 0.417000 1.0080 0 + 5831 W1 1114 TIP3 H2 HT 0.417000 1.0080 0 + 5832 W1 1115 TIP3 OH2 OT -0.834000 15.9994 0 + 5833 W1 1115 TIP3 H1 HT 0.417000 1.0080 0 + 5834 W1 1115 TIP3 H2 HT 0.417000 1.0080 0 + 5835 W1 1116 TIP3 OH2 OT -0.834000 15.9994 0 + 5836 W1 1116 TIP3 H1 HT 0.417000 1.0080 0 + 5837 W1 1116 TIP3 H2 HT 0.417000 1.0080 0 + 5838 W1 1117 TIP3 OH2 OT -0.834000 15.9994 0 + 5839 W1 1117 TIP3 H1 HT 0.417000 1.0080 0 + 5840 W1 1117 TIP3 H2 HT 0.417000 1.0080 0 + 5841 W1 1118 TIP3 OH2 OT -0.834000 15.9994 0 + 5842 W1 1118 TIP3 H1 HT 0.417000 1.0080 0 + 5843 W1 1118 TIP3 H2 HT 0.417000 1.0080 0 + 5844 W1 1119 TIP3 OH2 OT -0.834000 15.9994 0 + 5845 W1 1119 TIP3 H1 HT 0.417000 1.0080 0 + 5846 W1 1119 TIP3 H2 HT 0.417000 1.0080 0 + 5847 W1 1120 TIP3 OH2 OT -0.834000 15.9994 0 + 5848 W1 1120 TIP3 H1 HT 0.417000 1.0080 0 + 5849 W1 1120 TIP3 H2 HT 0.417000 1.0080 0 + 5850 W1 1121 TIP3 OH2 OT -0.834000 15.9994 0 + 5851 W1 1121 TIP3 H1 HT 0.417000 1.0080 0 + 5852 W1 1121 TIP3 H2 HT 0.417000 1.0080 0 + 5853 W1 1122 TIP3 OH2 OT -0.834000 15.9994 0 + 5854 W1 1122 TIP3 H1 HT 0.417000 1.0080 0 + 5855 W1 1122 TIP3 H2 HT 0.417000 1.0080 0 + 5856 W1 1123 TIP3 OH2 OT -0.834000 15.9994 0 + 5857 W1 1123 TIP3 H1 HT 0.417000 1.0080 0 + 5858 W1 1123 TIP3 H2 HT 0.417000 1.0080 0 + 5859 W1 1124 TIP3 OH2 OT -0.834000 15.9994 0 + 5860 W1 1124 TIP3 H1 HT 0.417000 1.0080 0 + 5861 W1 1124 TIP3 H2 HT 0.417000 1.0080 0 + 5862 W1 1125 TIP3 OH2 OT -0.834000 15.9994 0 + 5863 W1 1125 TIP3 H1 HT 0.417000 1.0080 0 + 5864 W1 1125 TIP3 H2 HT 0.417000 1.0080 0 + 5865 W1 1126 TIP3 OH2 OT -0.834000 15.9994 0 + 5866 W1 1126 TIP3 H1 HT 0.417000 1.0080 0 + 5867 W1 1126 TIP3 H2 HT 0.417000 1.0080 0 + 5868 W1 1127 TIP3 OH2 OT -0.834000 15.9994 0 + 5869 W1 1127 TIP3 H1 HT 0.417000 1.0080 0 + 5870 W1 1127 TIP3 H2 HT 0.417000 1.0080 0 + 5871 W1 1128 TIP3 OH2 OT -0.834000 15.9994 0 + 5872 W1 1128 TIP3 H1 HT 0.417000 1.0080 0 + 5873 W1 1128 TIP3 H2 HT 0.417000 1.0080 0 + 5874 W1 1129 TIP3 OH2 OT -0.834000 15.9994 0 + 5875 W1 1129 TIP3 H1 HT 0.417000 1.0080 0 + 5876 W1 1129 TIP3 H2 HT 0.417000 1.0080 0 + 5877 W1 1130 TIP3 OH2 OT -0.834000 15.9994 0 + 5878 W1 1130 TIP3 H1 HT 0.417000 1.0080 0 + 5879 W1 1130 TIP3 H2 HT 0.417000 1.0080 0 + 5880 W1 1131 TIP3 OH2 OT -0.834000 15.9994 0 + 5881 W1 1131 TIP3 H1 HT 0.417000 1.0080 0 + 5882 W1 1131 TIP3 H2 HT 0.417000 1.0080 0 + 5883 W1 1132 TIP3 OH2 OT -0.834000 15.9994 0 + 5884 W1 1132 TIP3 H1 HT 0.417000 1.0080 0 + 5885 W1 1132 TIP3 H2 HT 0.417000 1.0080 0 + 5886 W1 1133 TIP3 OH2 OT -0.834000 15.9994 0 + 5887 W1 1133 TIP3 H1 HT 0.417000 1.0080 0 + 5888 W1 1133 TIP3 H2 HT 0.417000 1.0080 0 + 5889 W1 1134 TIP3 OH2 OT -0.834000 15.9994 0 + 5890 W1 1134 TIP3 H1 HT 0.417000 1.0080 0 + 5891 W1 1134 TIP3 H2 HT 0.417000 1.0080 0 + 5892 W1 1135 TIP3 OH2 OT -0.834000 15.9994 0 + 5893 W1 1135 TIP3 H1 HT 0.417000 1.0080 0 + 5894 W1 1135 TIP3 H2 HT 0.417000 1.0080 0 + 5895 W1 1136 TIP3 OH2 OT -0.834000 15.9994 0 + 5896 W1 1136 TIP3 H1 HT 0.417000 1.0080 0 + 5897 W1 1136 TIP3 H2 HT 0.417000 1.0080 0 + 5898 W1 1137 TIP3 OH2 OT -0.834000 15.9994 0 + 5899 W1 1137 TIP3 H1 HT 0.417000 1.0080 0 + 5900 W1 1137 TIP3 H2 HT 0.417000 1.0080 0 + 5901 W1 1138 TIP3 OH2 OT -0.834000 15.9994 0 + 5902 W1 1138 TIP3 H1 HT 0.417000 1.0080 0 + 5903 W1 1138 TIP3 H2 HT 0.417000 1.0080 0 + 5904 W1 1139 TIP3 OH2 OT -0.834000 15.9994 0 + 5905 W1 1139 TIP3 H1 HT 0.417000 1.0080 0 + 5906 W1 1139 TIP3 H2 HT 0.417000 1.0080 0 + 5907 W1 1140 TIP3 OH2 OT -0.834000 15.9994 0 + 5908 W1 1140 TIP3 H1 HT 0.417000 1.0080 0 + 5909 W1 1140 TIP3 H2 HT 0.417000 1.0080 0 + 5910 W1 1141 TIP3 OH2 OT -0.834000 15.9994 0 + 5911 W1 1141 TIP3 H1 HT 0.417000 1.0080 0 + 5912 W1 1141 TIP3 H2 HT 0.417000 1.0080 0 + 5913 W1 1142 TIP3 OH2 OT -0.834000 15.9994 0 + 5914 W1 1142 TIP3 H1 HT 0.417000 1.0080 0 + 5915 W1 1142 TIP3 H2 HT 0.417000 1.0080 0 + 5916 W1 1143 TIP3 OH2 OT -0.834000 15.9994 0 + 5917 W1 1143 TIP3 H1 HT 0.417000 1.0080 0 + 5918 W1 1143 TIP3 H2 HT 0.417000 1.0080 0 + 5919 W1 1144 TIP3 OH2 OT -0.834000 15.9994 0 + 5920 W1 1144 TIP3 H1 HT 0.417000 1.0080 0 + 5921 W1 1144 TIP3 H2 HT 0.417000 1.0080 0 + 5922 W1 1145 TIP3 OH2 OT -0.834000 15.9994 0 + 5923 W1 1145 TIP3 H1 HT 0.417000 1.0080 0 + 5924 W1 1145 TIP3 H2 HT 0.417000 1.0080 0 + 5925 W1 1146 TIP3 OH2 OT -0.834000 15.9994 0 + 5926 W1 1146 TIP3 H1 HT 0.417000 1.0080 0 + 5927 W1 1146 TIP3 H2 HT 0.417000 1.0080 0 + 5928 W1 1147 TIP3 OH2 OT -0.834000 15.9994 0 + 5929 W1 1147 TIP3 H1 HT 0.417000 1.0080 0 + 5930 W1 1147 TIP3 H2 HT 0.417000 1.0080 0 + 5931 W1 1148 TIP3 OH2 OT -0.834000 15.9994 0 + 5932 W1 1148 TIP3 H1 HT 0.417000 1.0080 0 + 5933 W1 1148 TIP3 H2 HT 0.417000 1.0080 0 + 5934 W1 1149 TIP3 OH2 OT -0.834000 15.9994 0 + 5935 W1 1149 TIP3 H1 HT 0.417000 1.0080 0 + 5936 W1 1149 TIP3 H2 HT 0.417000 1.0080 0 + 5937 W1 1150 TIP3 OH2 OT -0.834000 15.9994 0 + 5938 W1 1150 TIP3 H1 HT 0.417000 1.0080 0 + 5939 W1 1150 TIP3 H2 HT 0.417000 1.0080 0 + 5940 W1 1151 TIP3 OH2 OT -0.834000 15.9994 0 + 5941 W1 1151 TIP3 H1 HT 0.417000 1.0080 0 + 5942 W1 1151 TIP3 H2 HT 0.417000 1.0080 0 + 5943 W1 1152 TIP3 OH2 OT -0.834000 15.9994 0 + 5944 W1 1152 TIP3 H1 HT 0.417000 1.0080 0 + 5945 W1 1152 TIP3 H2 HT 0.417000 1.0080 0 + 5946 W1 1153 TIP3 OH2 OT -0.834000 15.9994 0 + 5947 W1 1153 TIP3 H1 HT 0.417000 1.0080 0 + 5948 W1 1153 TIP3 H2 HT 0.417000 1.0080 0 + 5949 W1 1154 TIP3 OH2 OT -0.834000 15.9994 0 + 5950 W1 1154 TIP3 H1 HT 0.417000 1.0080 0 + 5951 W1 1154 TIP3 H2 HT 0.417000 1.0080 0 + 5952 W1 1155 TIP3 OH2 OT -0.834000 15.9994 0 + 5953 W1 1155 TIP3 H1 HT 0.417000 1.0080 0 + 5954 W1 1155 TIP3 H2 HT 0.417000 1.0080 0 + 5955 W1 1156 TIP3 OH2 OT -0.834000 15.9994 0 + 5956 W1 1156 TIP3 H1 HT 0.417000 1.0080 0 + 5957 W1 1156 TIP3 H2 HT 0.417000 1.0080 0 + 5958 W1 1157 TIP3 OH2 OT -0.834000 15.9994 0 + 5959 W1 1157 TIP3 H1 HT 0.417000 1.0080 0 + 5960 W1 1157 TIP3 H2 HT 0.417000 1.0080 0 + 5961 W1 1158 TIP3 OH2 OT -0.834000 15.9994 0 + 5962 W1 1158 TIP3 H1 HT 0.417000 1.0080 0 + 5963 W1 1158 TIP3 H2 HT 0.417000 1.0080 0 + 5964 W1 1159 TIP3 OH2 OT -0.834000 15.9994 0 + 5965 W1 1159 TIP3 H1 HT 0.417000 1.0080 0 + 5966 W1 1159 TIP3 H2 HT 0.417000 1.0080 0 + 5967 W1 1160 TIP3 OH2 OT -0.834000 15.9994 0 + 5968 W1 1160 TIP3 H1 HT 0.417000 1.0080 0 + 5969 W1 1160 TIP3 H2 HT 0.417000 1.0080 0 + 5970 W1 1161 TIP3 OH2 OT -0.834000 15.9994 0 + 5971 W1 1161 TIP3 H1 HT 0.417000 1.0080 0 + 5972 W1 1161 TIP3 H2 HT 0.417000 1.0080 0 + 5973 W1 1162 TIP3 OH2 OT -0.834000 15.9994 0 + 5974 W1 1162 TIP3 H1 HT 0.417000 1.0080 0 + 5975 W1 1162 TIP3 H2 HT 0.417000 1.0080 0 + 5976 W1 1163 TIP3 OH2 OT -0.834000 15.9994 0 + 5977 W1 1163 TIP3 H1 HT 0.417000 1.0080 0 + 5978 W1 1163 TIP3 H2 HT 0.417000 1.0080 0 + 5979 W1 1164 TIP3 OH2 OT -0.834000 15.9994 0 + 5980 W1 1164 TIP3 H1 HT 0.417000 1.0080 0 + 5981 W1 1164 TIP3 H2 HT 0.417000 1.0080 0 + 5982 W1 1165 TIP3 OH2 OT -0.834000 15.9994 0 + 5983 W1 1165 TIP3 H1 HT 0.417000 1.0080 0 + 5984 W1 1165 TIP3 H2 HT 0.417000 1.0080 0 + 5985 W1 1166 TIP3 OH2 OT -0.834000 15.9994 0 + 5986 W1 1166 TIP3 H1 HT 0.417000 1.0080 0 + 5987 W1 1166 TIP3 H2 HT 0.417000 1.0080 0 + 5988 W1 1167 TIP3 OH2 OT -0.834000 15.9994 0 + 5989 W1 1167 TIP3 H1 HT 0.417000 1.0080 0 + 5990 W1 1167 TIP3 H2 HT 0.417000 1.0080 0 + 5991 W1 1168 TIP3 OH2 OT -0.834000 15.9994 0 + 5992 W1 1168 TIP3 H1 HT 0.417000 1.0080 0 + 5993 W1 1168 TIP3 H2 HT 0.417000 1.0080 0 + 5994 W1 1169 TIP3 OH2 OT -0.834000 15.9994 0 + 5995 W1 1169 TIP3 H1 HT 0.417000 1.0080 0 + 5996 W1 1169 TIP3 H2 HT 0.417000 1.0080 0 + 5997 W1 1170 TIP3 OH2 OT -0.834000 15.9994 0 + 5998 W1 1170 TIP3 H1 HT 0.417000 1.0080 0 + 5999 W1 1170 TIP3 H2 HT 0.417000 1.0080 0 + 6000 W1 1171 TIP3 OH2 OT -0.834000 15.9994 0 + 6001 W1 1171 TIP3 H1 HT 0.417000 1.0080 0 + 6002 W1 1171 TIP3 H2 HT 0.417000 1.0080 0 + 6003 W1 1172 TIP3 OH2 OT -0.834000 15.9994 0 + 6004 W1 1172 TIP3 H1 HT 0.417000 1.0080 0 + 6005 W1 1172 TIP3 H2 HT 0.417000 1.0080 0 + 6006 W1 1173 TIP3 OH2 OT -0.834000 15.9994 0 + 6007 W1 1173 TIP3 H1 HT 0.417000 1.0080 0 + 6008 W1 1173 TIP3 H2 HT 0.417000 1.0080 0 + 6009 W1 1174 TIP3 OH2 OT -0.834000 15.9994 0 + 6010 W1 1174 TIP3 H1 HT 0.417000 1.0080 0 + 6011 W1 1174 TIP3 H2 HT 0.417000 1.0080 0 + 6012 W1 1175 TIP3 OH2 OT -0.834000 15.9994 0 + 6013 W1 1175 TIP3 H1 HT 0.417000 1.0080 0 + 6014 W1 1175 TIP3 H2 HT 0.417000 1.0080 0 + 6015 W1 1176 TIP3 OH2 OT -0.834000 15.9994 0 + 6016 W1 1176 TIP3 H1 HT 0.417000 1.0080 0 + 6017 W1 1176 TIP3 H2 HT 0.417000 1.0080 0 + 6018 W1 1177 TIP3 OH2 OT -0.834000 15.9994 0 + 6019 W1 1177 TIP3 H1 HT 0.417000 1.0080 0 + 6020 W1 1177 TIP3 H2 HT 0.417000 1.0080 0 + 6021 W1 1178 TIP3 OH2 OT -0.834000 15.9994 0 + 6022 W1 1178 TIP3 H1 HT 0.417000 1.0080 0 + 6023 W1 1178 TIP3 H2 HT 0.417000 1.0080 0 + 6024 W1 1179 TIP3 OH2 OT -0.834000 15.9994 0 + 6025 W1 1179 TIP3 H1 HT 0.417000 1.0080 0 + 6026 W1 1179 TIP3 H2 HT 0.417000 1.0080 0 + 6027 W1 1180 TIP3 OH2 OT -0.834000 15.9994 0 + 6028 W1 1180 TIP3 H1 HT 0.417000 1.0080 0 + 6029 W1 1180 TIP3 H2 HT 0.417000 1.0080 0 + 6030 W1 1181 TIP3 OH2 OT -0.834000 15.9994 0 + 6031 W1 1181 TIP3 H1 HT 0.417000 1.0080 0 + 6032 W1 1181 TIP3 H2 HT 0.417000 1.0080 0 + 6033 W1 1182 TIP3 OH2 OT -0.834000 15.9994 0 + 6034 W1 1182 TIP3 H1 HT 0.417000 1.0080 0 + 6035 W1 1182 TIP3 H2 HT 0.417000 1.0080 0 + 6036 W1 1183 TIP3 OH2 OT -0.834000 15.9994 0 + 6037 W1 1183 TIP3 H1 HT 0.417000 1.0080 0 + 6038 W1 1183 TIP3 H2 HT 0.417000 1.0080 0 + 6039 W1 1184 TIP3 OH2 OT -0.834000 15.9994 0 + 6040 W1 1184 TIP3 H1 HT 0.417000 1.0080 0 + 6041 W1 1184 TIP3 H2 HT 0.417000 1.0080 0 + 6042 W1 1185 TIP3 OH2 OT -0.834000 15.9994 0 + 6043 W1 1185 TIP3 H1 HT 0.417000 1.0080 0 + 6044 W1 1185 TIP3 H2 HT 0.417000 1.0080 0 + 6045 W1 1186 TIP3 OH2 OT -0.834000 15.9994 0 + 6046 W1 1186 TIP3 H1 HT 0.417000 1.0080 0 + 6047 W1 1186 TIP3 H2 HT 0.417000 1.0080 0 + 6048 W1 1187 TIP3 OH2 OT -0.834000 15.9994 0 + 6049 W1 1187 TIP3 H1 HT 0.417000 1.0080 0 + 6050 W1 1187 TIP3 H2 HT 0.417000 1.0080 0 + 6051 W1 1188 TIP3 OH2 OT -0.834000 15.9994 0 + 6052 W1 1188 TIP3 H1 HT 0.417000 1.0080 0 + 6053 W1 1188 TIP3 H2 HT 0.417000 1.0080 0 + 6054 W1 1189 TIP3 OH2 OT -0.834000 15.9994 0 + 6055 W1 1189 TIP3 H1 HT 0.417000 1.0080 0 + 6056 W1 1189 TIP3 H2 HT 0.417000 1.0080 0 + 6057 W1 1190 TIP3 OH2 OT -0.834000 15.9994 0 + 6058 W1 1190 TIP3 H1 HT 0.417000 1.0080 0 + 6059 W1 1190 TIP3 H2 HT 0.417000 1.0080 0 + 6060 W1 1191 TIP3 OH2 OT -0.834000 15.9994 0 + 6061 W1 1191 TIP3 H1 HT 0.417000 1.0080 0 + 6062 W1 1191 TIP3 H2 HT 0.417000 1.0080 0 + 6063 W1 1192 TIP3 OH2 OT -0.834000 15.9994 0 + 6064 W1 1192 TIP3 H1 HT 0.417000 1.0080 0 + 6065 W1 1192 TIP3 H2 HT 0.417000 1.0080 0 + 6066 W1 1193 TIP3 OH2 OT -0.834000 15.9994 0 + 6067 W1 1193 TIP3 H1 HT 0.417000 1.0080 0 + 6068 W1 1193 TIP3 H2 HT 0.417000 1.0080 0 + 6069 W1 1194 TIP3 OH2 OT -0.834000 15.9994 0 + 6070 W1 1194 TIP3 H1 HT 0.417000 1.0080 0 + 6071 W1 1194 TIP3 H2 HT 0.417000 1.0080 0 + 6072 W1 1195 TIP3 OH2 OT -0.834000 15.9994 0 + 6073 W1 1195 TIP3 H1 HT 0.417000 1.0080 0 + 6074 W1 1195 TIP3 H2 HT 0.417000 1.0080 0 + 6075 W1 1196 TIP3 OH2 OT -0.834000 15.9994 0 + 6076 W1 1196 TIP3 H1 HT 0.417000 1.0080 0 + 6077 W1 1196 TIP3 H2 HT 0.417000 1.0080 0 + 6078 W1 1197 TIP3 OH2 OT -0.834000 15.9994 0 + 6079 W1 1197 TIP3 H1 HT 0.417000 1.0080 0 + 6080 W1 1197 TIP3 H2 HT 0.417000 1.0080 0 + 6081 W1 1198 TIP3 OH2 OT -0.834000 15.9994 0 + 6082 W1 1198 TIP3 H1 HT 0.417000 1.0080 0 + 6083 W1 1198 TIP3 H2 HT 0.417000 1.0080 0 + 6084 W1 1199 TIP3 OH2 OT -0.834000 15.9994 0 + 6085 W1 1199 TIP3 H1 HT 0.417000 1.0080 0 + 6086 W1 1199 TIP3 H2 HT 0.417000 1.0080 0 + 6087 W1 1200 TIP3 OH2 OT -0.834000 15.9994 0 + 6088 W1 1200 TIP3 H1 HT 0.417000 1.0080 0 + 6089 W1 1200 TIP3 H2 HT 0.417000 1.0080 0 + 6090 W1 1201 TIP3 OH2 OT -0.834000 15.9994 0 + 6091 W1 1201 TIP3 H1 HT 0.417000 1.0080 0 + 6092 W1 1201 TIP3 H2 HT 0.417000 1.0080 0 + 6093 W1 1202 TIP3 OH2 OT -0.834000 15.9994 0 + 6094 W1 1202 TIP3 H1 HT 0.417000 1.0080 0 + 6095 W1 1202 TIP3 H2 HT 0.417000 1.0080 0 + 6096 W1 1203 TIP3 OH2 OT -0.834000 15.9994 0 + 6097 W1 1203 TIP3 H1 HT 0.417000 1.0080 0 + 6098 W1 1203 TIP3 H2 HT 0.417000 1.0080 0 + 6099 W1 1204 TIP3 OH2 OT -0.834000 15.9994 0 + 6100 W1 1204 TIP3 H1 HT 0.417000 1.0080 0 + 6101 W1 1204 TIP3 H2 HT 0.417000 1.0080 0 + 6102 W1 1205 TIP3 OH2 OT -0.834000 15.9994 0 + 6103 W1 1205 TIP3 H1 HT 0.417000 1.0080 0 + 6104 W1 1205 TIP3 H2 HT 0.417000 1.0080 0 + 6105 W1 1206 TIP3 OH2 OT -0.834000 15.9994 0 + 6106 W1 1206 TIP3 H1 HT 0.417000 1.0080 0 + 6107 W1 1206 TIP3 H2 HT 0.417000 1.0080 0 + 6108 W1 1207 TIP3 OH2 OT -0.834000 15.9994 0 + 6109 W1 1207 TIP3 H1 HT 0.417000 1.0080 0 + 6110 W1 1207 TIP3 H2 HT 0.417000 1.0080 0 + 6111 W1 1208 TIP3 OH2 OT -0.834000 15.9994 0 + 6112 W1 1208 TIP3 H1 HT 0.417000 1.0080 0 + 6113 W1 1208 TIP3 H2 HT 0.417000 1.0080 0 + 6114 W1 1209 TIP3 OH2 OT -0.834000 15.9994 0 + 6115 W1 1209 TIP3 H1 HT 0.417000 1.0080 0 + 6116 W1 1209 TIP3 H2 HT 0.417000 1.0080 0 + 6117 W1 1210 TIP3 OH2 OT -0.834000 15.9994 0 + 6118 W1 1210 TIP3 H1 HT 0.417000 1.0080 0 + 6119 W1 1210 TIP3 H2 HT 0.417000 1.0080 0 + 6120 W1 1211 TIP3 OH2 OT -0.834000 15.9994 0 + 6121 W1 1211 TIP3 H1 HT 0.417000 1.0080 0 + 6122 W1 1211 TIP3 H2 HT 0.417000 1.0080 0 + 6123 W1 1212 TIP3 OH2 OT -0.834000 15.9994 0 + 6124 W1 1212 TIP3 H1 HT 0.417000 1.0080 0 + 6125 W1 1212 TIP3 H2 HT 0.417000 1.0080 0 + 6126 W1 1213 TIP3 OH2 OT -0.834000 15.9994 0 + 6127 W1 1213 TIP3 H1 HT 0.417000 1.0080 0 + 6128 W1 1213 TIP3 H2 HT 0.417000 1.0080 0 + 6129 W1 1214 TIP3 OH2 OT -0.834000 15.9994 0 + 6130 W1 1214 TIP3 H1 HT 0.417000 1.0080 0 + 6131 W1 1214 TIP3 H2 HT 0.417000 1.0080 0 + 6132 W1 1215 TIP3 OH2 OT -0.834000 15.9994 0 + 6133 W1 1215 TIP3 H1 HT 0.417000 1.0080 0 + 6134 W1 1215 TIP3 H2 HT 0.417000 1.0080 0 + 6135 W1 1216 TIP3 OH2 OT -0.834000 15.9994 0 + 6136 W1 1216 TIP3 H1 HT 0.417000 1.0080 0 + 6137 W1 1216 TIP3 H2 HT 0.417000 1.0080 0 + 6138 W1 1217 TIP3 OH2 OT -0.834000 15.9994 0 + 6139 W1 1217 TIP3 H1 HT 0.417000 1.0080 0 + 6140 W1 1217 TIP3 H2 HT 0.417000 1.0080 0 + 6141 W1 1218 TIP3 OH2 OT -0.834000 15.9994 0 + 6142 W1 1218 TIP3 H1 HT 0.417000 1.0080 0 + 6143 W1 1218 TIP3 H2 HT 0.417000 1.0080 0 + 6144 W1 1219 TIP3 OH2 OT -0.834000 15.9994 0 + 6145 W1 1219 TIP3 H1 HT 0.417000 1.0080 0 + 6146 W1 1219 TIP3 H2 HT 0.417000 1.0080 0 + 6147 W1 1220 TIP3 OH2 OT -0.834000 15.9994 0 + 6148 W1 1220 TIP3 H1 HT 0.417000 1.0080 0 + 6149 W1 1220 TIP3 H2 HT 0.417000 1.0080 0 + 6150 W1 1221 TIP3 OH2 OT -0.834000 15.9994 0 + 6151 W1 1221 TIP3 H1 HT 0.417000 1.0080 0 + 6152 W1 1221 TIP3 H2 HT 0.417000 1.0080 0 + 6153 W1 1222 TIP3 OH2 OT -0.834000 15.9994 0 + 6154 W1 1222 TIP3 H1 HT 0.417000 1.0080 0 + 6155 W1 1222 TIP3 H2 HT 0.417000 1.0080 0 + 6156 W1 1223 TIP3 OH2 OT -0.834000 15.9994 0 + 6157 W1 1223 TIP3 H1 HT 0.417000 1.0080 0 + 6158 W1 1223 TIP3 H2 HT 0.417000 1.0080 0 + 6159 W1 1224 TIP3 OH2 OT -0.834000 15.9994 0 + 6160 W1 1224 TIP3 H1 HT 0.417000 1.0080 0 + 6161 W1 1224 TIP3 H2 HT 0.417000 1.0080 0 + 6162 W1 1225 TIP3 OH2 OT -0.834000 15.9994 0 + 6163 W1 1225 TIP3 H1 HT 0.417000 1.0080 0 + 6164 W1 1225 TIP3 H2 HT 0.417000 1.0080 0 + 6165 W1 1226 TIP3 OH2 OT -0.834000 15.9994 0 + 6166 W1 1226 TIP3 H1 HT 0.417000 1.0080 0 + 6167 W1 1226 TIP3 H2 HT 0.417000 1.0080 0 + 6168 W1 1227 TIP3 OH2 OT -0.834000 15.9994 0 + 6169 W1 1227 TIP3 H1 HT 0.417000 1.0080 0 + 6170 W1 1227 TIP3 H2 HT 0.417000 1.0080 0 + 6171 W1 1228 TIP3 OH2 OT -0.834000 15.9994 0 + 6172 W1 1228 TIP3 H1 HT 0.417000 1.0080 0 + 6173 W1 1228 TIP3 H2 HT 0.417000 1.0080 0 + 6174 W1 1229 TIP3 OH2 OT -0.834000 15.9994 0 + 6175 W1 1229 TIP3 H1 HT 0.417000 1.0080 0 + 6176 W1 1229 TIP3 H2 HT 0.417000 1.0080 0 + 6177 W1 1230 TIP3 OH2 OT -0.834000 15.9994 0 + 6178 W1 1230 TIP3 H1 HT 0.417000 1.0080 0 + 6179 W1 1230 TIP3 H2 HT 0.417000 1.0080 0 + 6180 W1 1231 TIP3 OH2 OT -0.834000 15.9994 0 + 6181 W1 1231 TIP3 H1 HT 0.417000 1.0080 0 + 6182 W1 1231 TIP3 H2 HT 0.417000 1.0080 0 + 6183 W1 1232 TIP3 OH2 OT -0.834000 15.9994 0 + 6184 W1 1232 TIP3 H1 HT 0.417000 1.0080 0 + 6185 W1 1232 TIP3 H2 HT 0.417000 1.0080 0 + 6186 W1 1233 TIP3 OH2 OT -0.834000 15.9994 0 + 6187 W1 1233 TIP3 H1 HT 0.417000 1.0080 0 + 6188 W1 1233 TIP3 H2 HT 0.417000 1.0080 0 + 6189 W1 1234 TIP3 OH2 OT -0.834000 15.9994 0 + 6190 W1 1234 TIP3 H1 HT 0.417000 1.0080 0 + 6191 W1 1234 TIP3 H2 HT 0.417000 1.0080 0 + 6192 W1 1235 TIP3 OH2 OT -0.834000 15.9994 0 + 6193 W1 1235 TIP3 H1 HT 0.417000 1.0080 0 + 6194 W1 1235 TIP3 H2 HT 0.417000 1.0080 0 + 6195 W1 1236 TIP3 OH2 OT -0.834000 15.9994 0 + 6196 W1 1236 TIP3 H1 HT 0.417000 1.0080 0 + 6197 W1 1236 TIP3 H2 HT 0.417000 1.0080 0 + 6198 W1 1237 TIP3 OH2 OT -0.834000 15.9994 0 + 6199 W1 1237 TIP3 H1 HT 0.417000 1.0080 0 + 6200 W1 1237 TIP3 H2 HT 0.417000 1.0080 0 + 6201 W1 1238 TIP3 OH2 OT -0.834000 15.9994 0 + 6202 W1 1238 TIP3 H1 HT 0.417000 1.0080 0 + 6203 W1 1238 TIP3 H2 HT 0.417000 1.0080 0 + 6204 W1 1239 TIP3 OH2 OT -0.834000 15.9994 0 + 6205 W1 1239 TIP3 H1 HT 0.417000 1.0080 0 + 6206 W1 1239 TIP3 H2 HT 0.417000 1.0080 0 + 6207 W1 1240 TIP3 OH2 OT -0.834000 15.9994 0 + 6208 W1 1240 TIP3 H1 HT 0.417000 1.0080 0 + 6209 W1 1240 TIP3 H2 HT 0.417000 1.0080 0 + 6210 W1 1241 TIP3 OH2 OT -0.834000 15.9994 0 + 6211 W1 1241 TIP3 H1 HT 0.417000 1.0080 0 + 6212 W1 1241 TIP3 H2 HT 0.417000 1.0080 0 + 6213 W1 1242 TIP3 OH2 OT -0.834000 15.9994 0 + 6214 W1 1242 TIP3 H1 HT 0.417000 1.0080 0 + 6215 W1 1242 TIP3 H2 HT 0.417000 1.0080 0 + 6216 W1 1243 TIP3 OH2 OT -0.834000 15.9994 0 + 6217 W1 1243 TIP3 H1 HT 0.417000 1.0080 0 + 6218 W1 1243 TIP3 H2 HT 0.417000 1.0080 0 + 6219 W1 1244 TIP3 OH2 OT -0.834000 15.9994 0 + 6220 W1 1244 TIP3 H1 HT 0.417000 1.0080 0 + 6221 W1 1244 TIP3 H2 HT 0.417000 1.0080 0 + 6222 W1 1245 TIP3 OH2 OT -0.834000 15.9994 0 + 6223 W1 1245 TIP3 H1 HT 0.417000 1.0080 0 + 6224 W1 1245 TIP3 H2 HT 0.417000 1.0080 0 + 6225 W1 1246 TIP3 OH2 OT -0.834000 15.9994 0 + 6226 W1 1246 TIP3 H1 HT 0.417000 1.0080 0 + 6227 W1 1246 TIP3 H2 HT 0.417000 1.0080 0 + 6228 W1 1247 TIP3 OH2 OT -0.834000 15.9994 0 + 6229 W1 1247 TIP3 H1 HT 0.417000 1.0080 0 + 6230 W1 1247 TIP3 H2 HT 0.417000 1.0080 0 + 6231 W1 1248 TIP3 OH2 OT -0.834000 15.9994 0 + 6232 W1 1248 TIP3 H1 HT 0.417000 1.0080 0 + 6233 W1 1248 TIP3 H2 HT 0.417000 1.0080 0 + 6234 W1 1249 TIP3 OH2 OT -0.834000 15.9994 0 + 6235 W1 1249 TIP3 H1 HT 0.417000 1.0080 0 + 6236 W1 1249 TIP3 H2 HT 0.417000 1.0080 0 + 6237 W1 1250 TIP3 OH2 OT -0.834000 15.9994 0 + 6238 W1 1250 TIP3 H1 HT 0.417000 1.0080 0 + 6239 W1 1250 TIP3 H2 HT 0.417000 1.0080 0 + 6240 W1 1251 TIP3 OH2 OT -0.834000 15.9994 0 + 6241 W1 1251 TIP3 H1 HT 0.417000 1.0080 0 + 6242 W1 1251 TIP3 H2 HT 0.417000 1.0080 0 + 6243 W1 1252 TIP3 OH2 OT -0.834000 15.9994 0 + 6244 W1 1252 TIP3 H1 HT 0.417000 1.0080 0 + 6245 W1 1252 TIP3 H2 HT 0.417000 1.0080 0 + 6246 W1 1253 TIP3 OH2 OT -0.834000 15.9994 0 + 6247 W1 1253 TIP3 H1 HT 0.417000 1.0080 0 + 6248 W1 1253 TIP3 H2 HT 0.417000 1.0080 0 + 6249 W1 1254 TIP3 OH2 OT -0.834000 15.9994 0 + 6250 W1 1254 TIP3 H1 HT 0.417000 1.0080 0 + 6251 W1 1254 TIP3 H2 HT 0.417000 1.0080 0 + 6252 W1 1255 TIP3 OH2 OT -0.834000 15.9994 0 + 6253 W1 1255 TIP3 H1 HT 0.417000 1.0080 0 + 6254 W1 1255 TIP3 H2 HT 0.417000 1.0080 0 + 6255 W1 1256 TIP3 OH2 OT -0.834000 15.9994 0 + 6256 W1 1256 TIP3 H1 HT 0.417000 1.0080 0 + 6257 W1 1256 TIP3 H2 HT 0.417000 1.0080 0 + 6258 W1 1257 TIP3 OH2 OT -0.834000 15.9994 0 + 6259 W1 1257 TIP3 H1 HT 0.417000 1.0080 0 + 6260 W1 1257 TIP3 H2 HT 0.417000 1.0080 0 + 6261 W1 1258 TIP3 OH2 OT -0.834000 15.9994 0 + 6262 W1 1258 TIP3 H1 HT 0.417000 1.0080 0 + 6263 W1 1258 TIP3 H2 HT 0.417000 1.0080 0 + 6264 W1 1259 TIP3 OH2 OT -0.834000 15.9994 0 + 6265 W1 1259 TIP3 H1 HT 0.417000 1.0080 0 + 6266 W1 1259 TIP3 H2 HT 0.417000 1.0080 0 + 6267 W1 1260 TIP3 OH2 OT -0.834000 15.9994 0 + 6268 W1 1260 TIP3 H1 HT 0.417000 1.0080 0 + 6269 W1 1260 TIP3 H2 HT 0.417000 1.0080 0 + 6270 W1 1261 TIP3 OH2 OT -0.834000 15.9994 0 + 6271 W1 1261 TIP3 H1 HT 0.417000 1.0080 0 + 6272 W1 1261 TIP3 H2 HT 0.417000 1.0080 0 + 6273 W1 1262 TIP3 OH2 OT -0.834000 15.9994 0 + 6274 W1 1262 TIP3 H1 HT 0.417000 1.0080 0 + 6275 W1 1262 TIP3 H2 HT 0.417000 1.0080 0 + 6276 W1 1263 TIP3 OH2 OT -0.834000 15.9994 0 + 6277 W1 1263 TIP3 H1 HT 0.417000 1.0080 0 + 6278 W1 1263 TIP3 H2 HT 0.417000 1.0080 0 + 6279 W1 1264 TIP3 OH2 OT -0.834000 15.9994 0 + 6280 W1 1264 TIP3 H1 HT 0.417000 1.0080 0 + 6281 W1 1264 TIP3 H2 HT 0.417000 1.0080 0 + 6282 W1 1265 TIP3 OH2 OT -0.834000 15.9994 0 + 6283 W1 1265 TIP3 H1 HT 0.417000 1.0080 0 + 6284 W1 1265 TIP3 H2 HT 0.417000 1.0080 0 + 6285 W1 1266 TIP3 OH2 OT -0.834000 15.9994 0 + 6286 W1 1266 TIP3 H1 HT 0.417000 1.0080 0 + 6287 W1 1266 TIP3 H2 HT 0.417000 1.0080 0 + 6288 W1 1267 TIP3 OH2 OT -0.834000 15.9994 0 + 6289 W1 1267 TIP3 H1 HT 0.417000 1.0080 0 + 6290 W1 1267 TIP3 H2 HT 0.417000 1.0080 0 + 6291 W1 1268 TIP3 OH2 OT -0.834000 15.9994 0 + 6292 W1 1268 TIP3 H1 HT 0.417000 1.0080 0 + 6293 W1 1268 TIP3 H2 HT 0.417000 1.0080 0 + 6294 W1 1269 TIP3 OH2 OT -0.834000 15.9994 0 + 6295 W1 1269 TIP3 H1 HT 0.417000 1.0080 0 + 6296 W1 1269 TIP3 H2 HT 0.417000 1.0080 0 + 6297 W1 1270 TIP3 OH2 OT -0.834000 15.9994 0 + 6298 W1 1270 TIP3 H1 HT 0.417000 1.0080 0 + 6299 W1 1270 TIP3 H2 HT 0.417000 1.0080 0 + 6300 W1 1271 TIP3 OH2 OT -0.834000 15.9994 0 + 6301 W1 1271 TIP3 H1 HT 0.417000 1.0080 0 + 6302 W1 1271 TIP3 H2 HT 0.417000 1.0080 0 + 6303 W1 1272 TIP3 OH2 OT -0.834000 15.9994 0 + 6304 W1 1272 TIP3 H1 HT 0.417000 1.0080 0 + 6305 W1 1272 TIP3 H2 HT 0.417000 1.0080 0 + 6306 W1 1273 TIP3 OH2 OT -0.834000 15.9994 0 + 6307 W1 1273 TIP3 H1 HT 0.417000 1.0080 0 + 6308 W1 1273 TIP3 H2 HT 0.417000 1.0080 0 + 6309 W1 1274 TIP3 OH2 OT -0.834000 15.9994 0 + 6310 W1 1274 TIP3 H1 HT 0.417000 1.0080 0 + 6311 W1 1274 TIP3 H2 HT 0.417000 1.0080 0 + 6312 W1 1275 TIP3 OH2 OT -0.834000 15.9994 0 + 6313 W1 1275 TIP3 H1 HT 0.417000 1.0080 0 + 6314 W1 1275 TIP3 H2 HT 0.417000 1.0080 0 + 6315 W1 1276 TIP3 OH2 OT -0.834000 15.9994 0 + 6316 W1 1276 TIP3 H1 HT 0.417000 1.0080 0 + 6317 W1 1276 TIP3 H2 HT 0.417000 1.0080 0 + 6318 W1 1277 TIP3 OH2 OT -0.834000 15.9994 0 + 6319 W1 1277 TIP3 H1 HT 0.417000 1.0080 0 + 6320 W1 1277 TIP3 H2 HT 0.417000 1.0080 0 + 6321 W1 1278 TIP3 OH2 OT -0.834000 15.9994 0 + 6322 W1 1278 TIP3 H1 HT 0.417000 1.0080 0 + 6323 W1 1278 TIP3 H2 HT 0.417000 1.0080 0 + 6324 W1 1279 TIP3 OH2 OT -0.834000 15.9994 0 + 6325 W1 1279 TIP3 H1 HT 0.417000 1.0080 0 + 6326 W1 1279 TIP3 H2 HT 0.417000 1.0080 0 + 6327 W1 1280 TIP3 OH2 OT -0.834000 15.9994 0 + 6328 W1 1280 TIP3 H1 HT 0.417000 1.0080 0 + 6329 W1 1280 TIP3 H2 HT 0.417000 1.0080 0 + 6330 W1 1281 TIP3 OH2 OT -0.834000 15.9994 0 + 6331 W1 1281 TIP3 H1 HT 0.417000 1.0080 0 + 6332 W1 1281 TIP3 H2 HT 0.417000 1.0080 0 + 6333 W1 1282 TIP3 OH2 OT -0.834000 15.9994 0 + 6334 W1 1282 TIP3 H1 HT 0.417000 1.0080 0 + 6335 W1 1282 TIP3 H2 HT 0.417000 1.0080 0 + 6336 W1 1283 TIP3 OH2 OT -0.834000 15.9994 0 + 6337 W1 1283 TIP3 H1 HT 0.417000 1.0080 0 + 6338 W1 1283 TIP3 H2 HT 0.417000 1.0080 0 + 6339 W1 1284 TIP3 OH2 OT -0.834000 15.9994 0 + 6340 W1 1284 TIP3 H1 HT 0.417000 1.0080 0 + 6341 W1 1284 TIP3 H2 HT 0.417000 1.0080 0 + 6342 W1 1285 TIP3 OH2 OT -0.834000 15.9994 0 + 6343 W1 1285 TIP3 H1 HT 0.417000 1.0080 0 + 6344 W1 1285 TIP3 H2 HT 0.417000 1.0080 0 + 6345 W1 1286 TIP3 OH2 OT -0.834000 15.9994 0 + 6346 W1 1286 TIP3 H1 HT 0.417000 1.0080 0 + 6347 W1 1286 TIP3 H2 HT 0.417000 1.0080 0 + 6348 W1 1287 TIP3 OH2 OT -0.834000 15.9994 0 + 6349 W1 1287 TIP3 H1 HT 0.417000 1.0080 0 + 6350 W1 1287 TIP3 H2 HT 0.417000 1.0080 0 + 6351 W1 1288 TIP3 OH2 OT -0.834000 15.9994 0 + 6352 W1 1288 TIP3 H1 HT 0.417000 1.0080 0 + 6353 W1 1288 TIP3 H2 HT 0.417000 1.0080 0 + 6354 W1 1289 TIP3 OH2 OT -0.834000 15.9994 0 + 6355 W1 1289 TIP3 H1 HT 0.417000 1.0080 0 + 6356 W1 1289 TIP3 H2 HT 0.417000 1.0080 0 + 6357 W1 1290 TIP3 OH2 OT -0.834000 15.9994 0 + 6358 W1 1290 TIP3 H1 HT 0.417000 1.0080 0 + 6359 W1 1290 TIP3 H2 HT 0.417000 1.0080 0 + 6360 W1 1291 TIP3 OH2 OT -0.834000 15.9994 0 + 6361 W1 1291 TIP3 H1 HT 0.417000 1.0080 0 + 6362 W1 1291 TIP3 H2 HT 0.417000 1.0080 0 + 6363 W1 1292 TIP3 OH2 OT -0.834000 15.9994 0 + 6364 W1 1292 TIP3 H1 HT 0.417000 1.0080 0 + 6365 W1 1292 TIP3 H2 HT 0.417000 1.0080 0 + 6366 W1 1293 TIP3 OH2 OT -0.834000 15.9994 0 + 6367 W1 1293 TIP3 H1 HT 0.417000 1.0080 0 + 6368 W1 1293 TIP3 H2 HT 0.417000 1.0080 0 + 6369 W1 1294 TIP3 OH2 OT -0.834000 15.9994 0 + 6370 W1 1294 TIP3 H1 HT 0.417000 1.0080 0 + 6371 W1 1294 TIP3 H2 HT 0.417000 1.0080 0 + 6372 W1 1295 TIP3 OH2 OT -0.834000 15.9994 0 + 6373 W1 1295 TIP3 H1 HT 0.417000 1.0080 0 + 6374 W1 1295 TIP3 H2 HT 0.417000 1.0080 0 + 6375 W1 1296 TIP3 OH2 OT -0.834000 15.9994 0 + 6376 W1 1296 TIP3 H1 HT 0.417000 1.0080 0 + 6377 W1 1296 TIP3 H2 HT 0.417000 1.0080 0 + 6378 W1 1297 TIP3 OH2 OT -0.834000 15.9994 0 + 6379 W1 1297 TIP3 H1 HT 0.417000 1.0080 0 + 6380 W1 1297 TIP3 H2 HT 0.417000 1.0080 0 + 6381 W1 1298 TIP3 OH2 OT -0.834000 15.9994 0 + 6382 W1 1298 TIP3 H1 HT 0.417000 1.0080 0 + 6383 W1 1298 TIP3 H2 HT 0.417000 1.0080 0 + 6384 W1 1299 TIP3 OH2 OT -0.834000 15.9994 0 + 6385 W1 1299 TIP3 H1 HT 0.417000 1.0080 0 + 6386 W1 1299 TIP3 H2 HT 0.417000 1.0080 0 + 6387 W1 1300 TIP3 OH2 OT -0.834000 15.9994 0 + 6388 W1 1300 TIP3 H1 HT 0.417000 1.0080 0 + 6389 W1 1300 TIP3 H2 HT 0.417000 1.0080 0 + 6390 W1 1301 TIP3 OH2 OT -0.834000 15.9994 0 + 6391 W1 1301 TIP3 H1 HT 0.417000 1.0080 0 + 6392 W1 1301 TIP3 H2 HT 0.417000 1.0080 0 + 6393 W1 1302 TIP3 OH2 OT -0.834000 15.9994 0 + 6394 W1 1302 TIP3 H1 HT 0.417000 1.0080 0 + 6395 W1 1302 TIP3 H2 HT 0.417000 1.0080 0 + 6396 W1 1303 TIP3 OH2 OT -0.834000 15.9994 0 + 6397 W1 1303 TIP3 H1 HT 0.417000 1.0080 0 + 6398 W1 1303 TIP3 H2 HT 0.417000 1.0080 0 + 6399 W1 1304 TIP3 OH2 OT -0.834000 15.9994 0 + 6400 W1 1304 TIP3 H1 HT 0.417000 1.0080 0 + 6401 W1 1304 TIP3 H2 HT 0.417000 1.0080 0 + 6402 W1 1305 TIP3 OH2 OT -0.834000 15.9994 0 + 6403 W1 1305 TIP3 H1 HT 0.417000 1.0080 0 + 6404 W1 1305 TIP3 H2 HT 0.417000 1.0080 0 + 6405 W1 1306 TIP3 OH2 OT -0.834000 15.9994 0 + 6406 W1 1306 TIP3 H1 HT 0.417000 1.0080 0 + 6407 W1 1306 TIP3 H2 HT 0.417000 1.0080 0 + 6408 W1 1307 TIP3 OH2 OT -0.834000 15.9994 0 + 6409 W1 1307 TIP3 H1 HT 0.417000 1.0080 0 + 6410 W1 1307 TIP3 H2 HT 0.417000 1.0080 0 + 6411 W1 1308 TIP3 OH2 OT -0.834000 15.9994 0 + 6412 W1 1308 TIP3 H1 HT 0.417000 1.0080 0 + 6413 W1 1308 TIP3 H2 HT 0.417000 1.0080 0 + 6414 W1 1309 TIP3 OH2 OT -0.834000 15.9994 0 + 6415 W1 1309 TIP3 H1 HT 0.417000 1.0080 0 + 6416 W1 1309 TIP3 H2 HT 0.417000 1.0080 0 + 6417 W1 1310 TIP3 OH2 OT -0.834000 15.9994 0 + 6418 W1 1310 TIP3 H1 HT 0.417000 1.0080 0 + 6419 W1 1310 TIP3 H2 HT 0.417000 1.0080 0 + 6420 W1 1311 TIP3 OH2 OT -0.834000 15.9994 0 + 6421 W1 1311 TIP3 H1 HT 0.417000 1.0080 0 + 6422 W1 1311 TIP3 H2 HT 0.417000 1.0080 0 + 6423 W1 1312 TIP3 OH2 OT -0.834000 15.9994 0 + 6424 W1 1312 TIP3 H1 HT 0.417000 1.0080 0 + 6425 W1 1312 TIP3 H2 HT 0.417000 1.0080 0 + 6426 W1 1313 TIP3 OH2 OT -0.834000 15.9994 0 + 6427 W1 1313 TIP3 H1 HT 0.417000 1.0080 0 + 6428 W1 1313 TIP3 H2 HT 0.417000 1.0080 0 + 6429 W1 1314 TIP3 OH2 OT -0.834000 15.9994 0 + 6430 W1 1314 TIP3 H1 HT 0.417000 1.0080 0 + 6431 W1 1314 TIP3 H2 HT 0.417000 1.0080 0 + 6432 W1 1315 TIP3 OH2 OT -0.834000 15.9994 0 + 6433 W1 1315 TIP3 H1 HT 0.417000 1.0080 0 + 6434 W1 1315 TIP3 H2 HT 0.417000 1.0080 0 + 6435 W1 1316 TIP3 OH2 OT -0.834000 15.9994 0 + 6436 W1 1316 TIP3 H1 HT 0.417000 1.0080 0 + 6437 W1 1316 TIP3 H2 HT 0.417000 1.0080 0 + 6438 W1 1317 TIP3 OH2 OT -0.834000 15.9994 0 + 6439 W1 1317 TIP3 H1 HT 0.417000 1.0080 0 + 6440 W1 1317 TIP3 H2 HT 0.417000 1.0080 0 + 6441 W1 1318 TIP3 OH2 OT -0.834000 15.9994 0 + 6442 W1 1318 TIP3 H1 HT 0.417000 1.0080 0 + 6443 W1 1318 TIP3 H2 HT 0.417000 1.0080 0 + 6444 W1 1319 TIP3 OH2 OT -0.834000 15.9994 0 + 6445 W1 1319 TIP3 H1 HT 0.417000 1.0080 0 + 6446 W1 1319 TIP3 H2 HT 0.417000 1.0080 0 + 6447 W1 1320 TIP3 OH2 OT -0.834000 15.9994 0 + 6448 W1 1320 TIP3 H1 HT 0.417000 1.0080 0 + 6449 W1 1320 TIP3 H2 HT 0.417000 1.0080 0 + 6450 W1 1321 TIP3 OH2 OT -0.834000 15.9994 0 + 6451 W1 1321 TIP3 H1 HT 0.417000 1.0080 0 + 6452 W1 1321 TIP3 H2 HT 0.417000 1.0080 0 + 6453 W1 1322 TIP3 OH2 OT -0.834000 15.9994 0 + 6454 W1 1322 TIP3 H1 HT 0.417000 1.0080 0 + 6455 W1 1322 TIP3 H2 HT 0.417000 1.0080 0 + 6456 W1 1323 TIP3 OH2 OT -0.834000 15.9994 0 + 6457 W1 1323 TIP3 H1 HT 0.417000 1.0080 0 + 6458 W1 1323 TIP3 H2 HT 0.417000 1.0080 0 + 6459 W1 1324 TIP3 OH2 OT -0.834000 15.9994 0 + 6460 W1 1324 TIP3 H1 HT 0.417000 1.0080 0 + 6461 W1 1324 TIP3 H2 HT 0.417000 1.0080 0 + 6462 W1 1325 TIP3 OH2 OT -0.834000 15.9994 0 + 6463 W1 1325 TIP3 H1 HT 0.417000 1.0080 0 + 6464 W1 1325 TIP3 H2 HT 0.417000 1.0080 0 + 6465 W1 1326 TIP3 OH2 OT -0.834000 15.9994 0 + 6466 W1 1326 TIP3 H1 HT 0.417000 1.0080 0 + 6467 W1 1326 TIP3 H2 HT 0.417000 1.0080 0 + 6468 W1 1327 TIP3 OH2 OT -0.834000 15.9994 0 + 6469 W1 1327 TIP3 H1 HT 0.417000 1.0080 0 + 6470 W1 1327 TIP3 H2 HT 0.417000 1.0080 0 + 6471 W1 1328 TIP3 OH2 OT -0.834000 15.9994 0 + 6472 W1 1328 TIP3 H1 HT 0.417000 1.0080 0 + 6473 W1 1328 TIP3 H2 HT 0.417000 1.0080 0 + 6474 W1 1329 TIP3 OH2 OT -0.834000 15.9994 0 + 6475 W1 1329 TIP3 H1 HT 0.417000 1.0080 0 + 6476 W1 1329 TIP3 H2 HT 0.417000 1.0080 0 + 6477 W1 1330 TIP3 OH2 OT -0.834000 15.9994 0 + 6478 W1 1330 TIP3 H1 HT 0.417000 1.0080 0 + 6479 W1 1330 TIP3 H2 HT 0.417000 1.0080 0 + 6480 W1 1331 TIP3 OH2 OT -0.834000 15.9994 0 + 6481 W1 1331 TIP3 H1 HT 0.417000 1.0080 0 + 6482 W1 1331 TIP3 H2 HT 0.417000 1.0080 0 + 6483 W1 1332 TIP3 OH2 OT -0.834000 15.9994 0 + 6484 W1 1332 TIP3 H1 HT 0.417000 1.0080 0 + 6485 W1 1332 TIP3 H2 HT 0.417000 1.0080 0 + 6486 W1 1333 TIP3 OH2 OT -0.834000 15.9994 0 + 6487 W1 1333 TIP3 H1 HT 0.417000 1.0080 0 + 6488 W1 1333 TIP3 H2 HT 0.417000 1.0080 0 + 6489 W1 1334 TIP3 OH2 OT -0.834000 15.9994 0 + 6490 W1 1334 TIP3 H1 HT 0.417000 1.0080 0 + 6491 W1 1334 TIP3 H2 HT 0.417000 1.0080 0 + 6492 W1 1335 TIP3 OH2 OT -0.834000 15.9994 0 + 6493 W1 1335 TIP3 H1 HT 0.417000 1.0080 0 + 6494 W1 1335 TIP3 H2 HT 0.417000 1.0080 0 + 6495 W1 1336 TIP3 OH2 OT -0.834000 15.9994 0 + 6496 W1 1336 TIP3 H1 HT 0.417000 1.0080 0 + 6497 W1 1336 TIP3 H2 HT 0.417000 1.0080 0 + 6498 W1 1337 TIP3 OH2 OT -0.834000 15.9994 0 + 6499 W1 1337 TIP3 H1 HT 0.417000 1.0080 0 + 6500 W1 1337 TIP3 H2 HT 0.417000 1.0080 0 + 6501 W1 1338 TIP3 OH2 OT -0.834000 15.9994 0 + 6502 W1 1338 TIP3 H1 HT 0.417000 1.0080 0 + 6503 W1 1338 TIP3 H2 HT 0.417000 1.0080 0 + 6504 W1 1339 TIP3 OH2 OT -0.834000 15.9994 0 + 6505 W1 1339 TIP3 H1 HT 0.417000 1.0080 0 + 6506 W1 1339 TIP3 H2 HT 0.417000 1.0080 0 + 6507 W1 1340 TIP3 OH2 OT -0.834000 15.9994 0 + 6508 W1 1340 TIP3 H1 HT 0.417000 1.0080 0 + 6509 W1 1340 TIP3 H2 HT 0.417000 1.0080 0 + 6510 W1 1341 TIP3 OH2 OT -0.834000 15.9994 0 + 6511 W1 1341 TIP3 H1 HT 0.417000 1.0080 0 + 6512 W1 1341 TIP3 H2 HT 0.417000 1.0080 0 + 6513 W1 1342 TIP3 OH2 OT -0.834000 15.9994 0 + 6514 W1 1342 TIP3 H1 HT 0.417000 1.0080 0 + 6515 W1 1342 TIP3 H2 HT 0.417000 1.0080 0 + 6516 W1 1343 TIP3 OH2 OT -0.834000 15.9994 0 + 6517 W1 1343 TIP3 H1 HT 0.417000 1.0080 0 + 6518 W1 1343 TIP3 H2 HT 0.417000 1.0080 0 + 6519 W1 1344 TIP3 OH2 OT -0.834000 15.9994 0 + 6520 W1 1344 TIP3 H1 HT 0.417000 1.0080 0 + 6521 W1 1344 TIP3 H2 HT 0.417000 1.0080 0 + 6522 W1 1345 TIP3 OH2 OT -0.834000 15.9994 0 + 6523 W1 1345 TIP3 H1 HT 0.417000 1.0080 0 + 6524 W1 1345 TIP3 H2 HT 0.417000 1.0080 0 + 6525 W1 1346 TIP3 OH2 OT -0.834000 15.9994 0 + 6526 W1 1346 TIP3 H1 HT 0.417000 1.0080 0 + 6527 W1 1346 TIP3 H2 HT 0.417000 1.0080 0 + 6528 W1 1347 TIP3 OH2 OT -0.834000 15.9994 0 + 6529 W1 1347 TIP3 H1 HT 0.417000 1.0080 0 + 6530 W1 1347 TIP3 H2 HT 0.417000 1.0080 0 + 6531 W1 1348 TIP3 OH2 OT -0.834000 15.9994 0 + 6532 W1 1348 TIP3 H1 HT 0.417000 1.0080 0 + 6533 W1 1348 TIP3 H2 HT 0.417000 1.0080 0 + 6534 W1 1349 TIP3 OH2 OT -0.834000 15.9994 0 + 6535 W1 1349 TIP3 H1 HT 0.417000 1.0080 0 + 6536 W1 1349 TIP3 H2 HT 0.417000 1.0080 0 + 6537 W1 1350 TIP3 OH2 OT -0.834000 15.9994 0 + 6538 W1 1350 TIP3 H1 HT 0.417000 1.0080 0 + 6539 W1 1350 TIP3 H2 HT 0.417000 1.0080 0 + 6540 W1 1351 TIP3 OH2 OT -0.834000 15.9994 0 + 6541 W1 1351 TIP3 H1 HT 0.417000 1.0080 0 + 6542 W1 1351 TIP3 H2 HT 0.417000 1.0080 0 + 6543 W1 1352 TIP3 OH2 OT -0.834000 15.9994 0 + 6544 W1 1352 TIP3 H1 HT 0.417000 1.0080 0 + 6545 W1 1352 TIP3 H2 HT 0.417000 1.0080 0 + 6546 W1 1353 TIP3 OH2 OT -0.834000 15.9994 0 + 6547 W1 1353 TIP3 H1 HT 0.417000 1.0080 0 + 6548 W1 1353 TIP3 H2 HT 0.417000 1.0080 0 + 6549 W1 1354 TIP3 OH2 OT -0.834000 15.9994 0 + 6550 W1 1354 TIP3 H1 HT 0.417000 1.0080 0 + 6551 W1 1354 TIP3 H2 HT 0.417000 1.0080 0 + 6552 W1 1355 TIP3 OH2 OT -0.834000 15.9994 0 + 6553 W1 1355 TIP3 H1 HT 0.417000 1.0080 0 + 6554 W1 1355 TIP3 H2 HT 0.417000 1.0080 0 + 6555 W1 1356 TIP3 OH2 OT -0.834000 15.9994 0 + 6556 W1 1356 TIP3 H1 HT 0.417000 1.0080 0 + 6557 W1 1356 TIP3 H2 HT 0.417000 1.0080 0 + 6558 W1 1357 TIP3 OH2 OT -0.834000 15.9994 0 + 6559 W1 1357 TIP3 H1 HT 0.417000 1.0080 0 + 6560 W1 1357 TIP3 H2 HT 0.417000 1.0080 0 + 6561 W1 1358 TIP3 OH2 OT -0.834000 15.9994 0 + 6562 W1 1358 TIP3 H1 HT 0.417000 1.0080 0 + 6563 W1 1358 TIP3 H2 HT 0.417000 1.0080 0 + 6564 W1 1359 TIP3 OH2 OT -0.834000 15.9994 0 + 6565 W1 1359 TIP3 H1 HT 0.417000 1.0080 0 + 6566 W1 1359 TIP3 H2 HT 0.417000 1.0080 0 + 6567 W1 1360 TIP3 OH2 OT -0.834000 15.9994 0 + 6568 W1 1360 TIP3 H1 HT 0.417000 1.0080 0 + 6569 W1 1360 TIP3 H2 HT 0.417000 1.0080 0 + 6570 W1 1361 TIP3 OH2 OT -0.834000 15.9994 0 + 6571 W1 1361 TIP3 H1 HT 0.417000 1.0080 0 + 6572 W1 1361 TIP3 H2 HT 0.417000 1.0080 0 + 6573 W1 1362 TIP3 OH2 OT -0.834000 15.9994 0 + 6574 W1 1362 TIP3 H1 HT 0.417000 1.0080 0 + 6575 W1 1362 TIP3 H2 HT 0.417000 1.0080 0 + 6576 W1 1363 TIP3 OH2 OT -0.834000 15.9994 0 + 6577 W1 1363 TIP3 H1 HT 0.417000 1.0080 0 + 6578 W1 1363 TIP3 H2 HT 0.417000 1.0080 0 + 6579 W1 1364 TIP3 OH2 OT -0.834000 15.9994 0 + 6580 W1 1364 TIP3 H1 HT 0.417000 1.0080 0 + 6581 W1 1364 TIP3 H2 HT 0.417000 1.0080 0 + 6582 W1 1365 TIP3 OH2 OT -0.834000 15.9994 0 + 6583 W1 1365 TIP3 H1 HT 0.417000 1.0080 0 + 6584 W1 1365 TIP3 H2 HT 0.417000 1.0080 0 + 6585 W1 1366 TIP3 OH2 OT -0.834000 15.9994 0 + 6586 W1 1366 TIP3 H1 HT 0.417000 1.0080 0 + 6587 W1 1366 TIP3 H2 HT 0.417000 1.0080 0 + 6588 W1 1367 TIP3 OH2 OT -0.834000 15.9994 0 + 6589 W1 1367 TIP3 H1 HT 0.417000 1.0080 0 + 6590 W1 1367 TIP3 H2 HT 0.417000 1.0080 0 + 6591 W1 1368 TIP3 OH2 OT -0.834000 15.9994 0 + 6592 W1 1368 TIP3 H1 HT 0.417000 1.0080 0 + 6593 W1 1368 TIP3 H2 HT 0.417000 1.0080 0 + 6594 W1 1369 TIP3 OH2 OT -0.834000 15.9994 0 + 6595 W1 1369 TIP3 H1 HT 0.417000 1.0080 0 + 6596 W1 1369 TIP3 H2 HT 0.417000 1.0080 0 + 6597 W1 1370 TIP3 OH2 OT -0.834000 15.9994 0 + 6598 W1 1370 TIP3 H1 HT 0.417000 1.0080 0 + 6599 W1 1370 TIP3 H2 HT 0.417000 1.0080 0 + 6600 W1 1371 TIP3 OH2 OT -0.834000 15.9994 0 + 6601 W1 1371 TIP3 H1 HT 0.417000 1.0080 0 + 6602 W1 1371 TIP3 H2 HT 0.417000 1.0080 0 + 6603 W1 1372 TIP3 OH2 OT -0.834000 15.9994 0 + 6604 W1 1372 TIP3 H1 HT 0.417000 1.0080 0 + 6605 W1 1372 TIP3 H2 HT 0.417000 1.0080 0 + 6606 W1 1373 TIP3 OH2 OT -0.834000 15.9994 0 + 6607 W1 1373 TIP3 H1 HT 0.417000 1.0080 0 + 6608 W1 1373 TIP3 H2 HT 0.417000 1.0080 0 + 6609 W1 1374 TIP3 OH2 OT -0.834000 15.9994 0 + 6610 W1 1374 TIP3 H1 HT 0.417000 1.0080 0 + 6611 W1 1374 TIP3 H2 HT 0.417000 1.0080 0 + 6612 W1 1375 TIP3 OH2 OT -0.834000 15.9994 0 + 6613 W1 1375 TIP3 H1 HT 0.417000 1.0080 0 + 6614 W1 1375 TIP3 H2 HT 0.417000 1.0080 0 + 6615 W1 1376 TIP3 OH2 OT -0.834000 15.9994 0 + 6616 W1 1376 TIP3 H1 HT 0.417000 1.0080 0 + 6617 W1 1376 TIP3 H2 HT 0.417000 1.0080 0 + 6618 W1 1377 TIP3 OH2 OT -0.834000 15.9994 0 + 6619 W1 1377 TIP3 H1 HT 0.417000 1.0080 0 + 6620 W1 1377 TIP3 H2 HT 0.417000 1.0080 0 + 6621 W1 1378 TIP3 OH2 OT -0.834000 15.9994 0 + 6622 W1 1378 TIP3 H1 HT 0.417000 1.0080 0 + 6623 W1 1378 TIP3 H2 HT 0.417000 1.0080 0 + 6624 W1 1379 TIP3 OH2 OT -0.834000 15.9994 0 + 6625 W1 1379 TIP3 H1 HT 0.417000 1.0080 0 + 6626 W1 1379 TIP3 H2 HT 0.417000 1.0080 0 + 6627 W1 1380 TIP3 OH2 OT -0.834000 15.9994 0 + 6628 W1 1380 TIP3 H1 HT 0.417000 1.0080 0 + 6629 W1 1380 TIP3 H2 HT 0.417000 1.0080 0 + 6630 W1 1381 TIP3 OH2 OT -0.834000 15.9994 0 + 6631 W1 1381 TIP3 H1 HT 0.417000 1.0080 0 + 6632 W1 1381 TIP3 H2 HT 0.417000 1.0080 0 + 6633 W1 1382 TIP3 OH2 OT -0.834000 15.9994 0 + 6634 W1 1382 TIP3 H1 HT 0.417000 1.0080 0 + 6635 W1 1382 TIP3 H2 HT 0.417000 1.0080 0 + 6636 W1 1383 TIP3 OH2 OT -0.834000 15.9994 0 + 6637 W1 1383 TIP3 H1 HT 0.417000 1.0080 0 + 6638 W1 1383 TIP3 H2 HT 0.417000 1.0080 0 + 6639 W1 1384 TIP3 OH2 OT -0.834000 15.9994 0 + 6640 W1 1384 TIP3 H1 HT 0.417000 1.0080 0 + 6641 W1 1384 TIP3 H2 HT 0.417000 1.0080 0 + 6642 W1 1385 TIP3 OH2 OT -0.834000 15.9994 0 + 6643 W1 1385 TIP3 H1 HT 0.417000 1.0080 0 + 6644 W1 1385 TIP3 H2 HT 0.417000 1.0080 0 + 6645 W1 1386 TIP3 OH2 OT -0.834000 15.9994 0 + 6646 W1 1386 TIP3 H1 HT 0.417000 1.0080 0 + 6647 W1 1386 TIP3 H2 HT 0.417000 1.0080 0 + 6648 W1 1387 TIP3 OH2 OT -0.834000 15.9994 0 + 6649 W1 1387 TIP3 H1 HT 0.417000 1.0080 0 + 6650 W1 1387 TIP3 H2 HT 0.417000 1.0080 0 + 6651 W1 1388 TIP3 OH2 OT -0.834000 15.9994 0 + 6652 W1 1388 TIP3 H1 HT 0.417000 1.0080 0 + 6653 W1 1388 TIP3 H2 HT 0.417000 1.0080 0 + 6654 W1 1389 TIP3 OH2 OT -0.834000 15.9994 0 + 6655 W1 1389 TIP3 H1 HT 0.417000 1.0080 0 + 6656 W1 1389 TIP3 H2 HT 0.417000 1.0080 0 + 6657 W1 1390 TIP3 OH2 OT -0.834000 15.9994 0 + 6658 W1 1390 TIP3 H1 HT 0.417000 1.0080 0 + 6659 W1 1390 TIP3 H2 HT 0.417000 1.0080 0 + 6660 W1 1391 TIP3 OH2 OT -0.834000 15.9994 0 + 6661 W1 1391 TIP3 H1 HT 0.417000 1.0080 0 + 6662 W1 1391 TIP3 H2 HT 0.417000 1.0080 0 + 6663 W1 1392 TIP3 OH2 OT -0.834000 15.9994 0 + 6664 W1 1392 TIP3 H1 HT 0.417000 1.0080 0 + 6665 W1 1392 TIP3 H2 HT 0.417000 1.0080 0 + 6666 W1 1393 TIP3 OH2 OT -0.834000 15.9994 0 + 6667 W1 1393 TIP3 H1 HT 0.417000 1.0080 0 + 6668 W1 1393 TIP3 H2 HT 0.417000 1.0080 0 + 6669 W1 1394 TIP3 OH2 OT -0.834000 15.9994 0 + 6670 W1 1394 TIP3 H1 HT 0.417000 1.0080 0 + 6671 W1 1394 TIP3 H2 HT 0.417000 1.0080 0 + 6672 W1 1395 TIP3 OH2 OT -0.834000 15.9994 0 + 6673 W1 1395 TIP3 H1 HT 0.417000 1.0080 0 + 6674 W1 1395 TIP3 H2 HT 0.417000 1.0080 0 + 6675 W1 1396 TIP3 OH2 OT -0.834000 15.9994 0 + 6676 W1 1396 TIP3 H1 HT 0.417000 1.0080 0 + 6677 W1 1396 TIP3 H2 HT 0.417000 1.0080 0 + 6678 W1 1397 TIP3 OH2 OT -0.834000 15.9994 0 + 6679 W1 1397 TIP3 H1 HT 0.417000 1.0080 0 + 6680 W1 1397 TIP3 H2 HT 0.417000 1.0080 0 + 6681 W1 1398 TIP3 OH2 OT -0.834000 15.9994 0 + 6682 W1 1398 TIP3 H1 HT 0.417000 1.0080 0 + 6683 W1 1398 TIP3 H2 HT 0.417000 1.0080 0 + 6684 W1 1399 TIP3 OH2 OT -0.834000 15.9994 0 + 6685 W1 1399 TIP3 H1 HT 0.417000 1.0080 0 + 6686 W1 1399 TIP3 H2 HT 0.417000 1.0080 0 + 6687 W1 1400 TIP3 OH2 OT -0.834000 15.9994 0 + 6688 W1 1400 TIP3 H1 HT 0.417000 1.0080 0 + 6689 W1 1400 TIP3 H2 HT 0.417000 1.0080 0 + 6690 W1 1401 TIP3 OH2 OT -0.834000 15.9994 0 + 6691 W1 1401 TIP3 H1 HT 0.417000 1.0080 0 + 6692 W1 1401 TIP3 H2 HT 0.417000 1.0080 0 + 6693 W1 1402 TIP3 OH2 OT -0.834000 15.9994 0 + 6694 W1 1402 TIP3 H1 HT 0.417000 1.0080 0 + 6695 W1 1402 TIP3 H2 HT 0.417000 1.0080 0 + 6696 W1 1403 TIP3 OH2 OT -0.834000 15.9994 0 + 6697 W1 1403 TIP3 H1 HT 0.417000 1.0080 0 + 6698 W1 1403 TIP3 H2 HT 0.417000 1.0080 0 + 6699 W1 1404 TIP3 OH2 OT -0.834000 15.9994 0 + 6700 W1 1404 TIP3 H1 HT 0.417000 1.0080 0 + 6701 W1 1404 TIP3 H2 HT 0.417000 1.0080 0 + 6702 W1 1405 TIP3 OH2 OT -0.834000 15.9994 0 + 6703 W1 1405 TIP3 H1 HT 0.417000 1.0080 0 + 6704 W1 1405 TIP3 H2 HT 0.417000 1.0080 0 + 6705 W1 1406 TIP3 OH2 OT -0.834000 15.9994 0 + 6706 W1 1406 TIP3 H1 HT 0.417000 1.0080 0 + 6707 W1 1406 TIP3 H2 HT 0.417000 1.0080 0 + 6708 W1 1407 TIP3 OH2 OT -0.834000 15.9994 0 + 6709 W1 1407 TIP3 H1 HT 0.417000 1.0080 0 + 6710 W1 1407 TIP3 H2 HT 0.417000 1.0080 0 + 6711 W1 1408 TIP3 OH2 OT -0.834000 15.9994 0 + 6712 W1 1408 TIP3 H1 HT 0.417000 1.0080 0 + 6713 W1 1408 TIP3 H2 HT 0.417000 1.0080 0 + 6714 W1 1409 TIP3 OH2 OT -0.834000 15.9994 0 + 6715 W1 1409 TIP3 H1 HT 0.417000 1.0080 0 + 6716 W1 1409 TIP3 H2 HT 0.417000 1.0080 0 + 6717 W1 1410 TIP3 OH2 OT -0.834000 15.9994 0 + 6718 W1 1410 TIP3 H1 HT 0.417000 1.0080 0 + 6719 W1 1410 TIP3 H2 HT 0.417000 1.0080 0 + 6720 W1 1411 TIP3 OH2 OT -0.834000 15.9994 0 + 6721 W1 1411 TIP3 H1 HT 0.417000 1.0080 0 + 6722 W1 1411 TIP3 H2 HT 0.417000 1.0080 0 + 6723 W1 1412 TIP3 OH2 OT -0.834000 15.9994 0 + 6724 W1 1412 TIP3 H1 HT 0.417000 1.0080 0 + 6725 W1 1412 TIP3 H2 HT 0.417000 1.0080 0 + 6726 W1 1413 TIP3 OH2 OT -0.834000 15.9994 0 + 6727 W1 1413 TIP3 H1 HT 0.417000 1.0080 0 + 6728 W1 1413 TIP3 H2 HT 0.417000 1.0080 0 + 6729 W1 1414 TIP3 OH2 OT -0.834000 15.9994 0 + 6730 W1 1414 TIP3 H1 HT 0.417000 1.0080 0 + 6731 W1 1414 TIP3 H2 HT 0.417000 1.0080 0 + 6732 W1 1415 TIP3 OH2 OT -0.834000 15.9994 0 + 6733 W1 1415 TIP3 H1 HT 0.417000 1.0080 0 + 6734 W1 1415 TIP3 H2 HT 0.417000 1.0080 0 + 6735 W1 1416 TIP3 OH2 OT -0.834000 15.9994 0 + 6736 W1 1416 TIP3 H1 HT 0.417000 1.0080 0 + 6737 W1 1416 TIP3 H2 HT 0.417000 1.0080 0 + 6738 W1 1417 TIP3 OH2 OT -0.834000 15.9994 0 + 6739 W1 1417 TIP3 H1 HT 0.417000 1.0080 0 + 6740 W1 1417 TIP3 H2 HT 0.417000 1.0080 0 + 6741 W1 1418 TIP3 OH2 OT -0.834000 15.9994 0 + 6742 W1 1418 TIP3 H1 HT 0.417000 1.0080 0 + 6743 W1 1418 TIP3 H2 HT 0.417000 1.0080 0 + 6744 W1 1419 TIP3 OH2 OT -0.834000 15.9994 0 + 6745 W1 1419 TIP3 H1 HT 0.417000 1.0080 0 + 6746 W1 1419 TIP3 H2 HT 0.417000 1.0080 0 + 6747 W1 1420 TIP3 OH2 OT -0.834000 15.9994 0 + 6748 W1 1420 TIP3 H1 HT 0.417000 1.0080 0 + 6749 W1 1420 TIP3 H2 HT 0.417000 1.0080 0 + 6750 W1 1421 TIP3 OH2 OT -0.834000 15.9994 0 + 6751 W1 1421 TIP3 H1 HT 0.417000 1.0080 0 + 6752 W1 1421 TIP3 H2 HT 0.417000 1.0080 0 + 6753 W1 1422 TIP3 OH2 OT -0.834000 15.9994 0 + 6754 W1 1422 TIP3 H1 HT 0.417000 1.0080 0 + 6755 W1 1422 TIP3 H2 HT 0.417000 1.0080 0 + 6756 W1 1423 TIP3 OH2 OT -0.834000 15.9994 0 + 6757 W1 1423 TIP3 H1 HT 0.417000 1.0080 0 + 6758 W1 1423 TIP3 H2 HT 0.417000 1.0080 0 + 6759 W1 1424 TIP3 OH2 OT -0.834000 15.9994 0 + 6760 W1 1424 TIP3 H1 HT 0.417000 1.0080 0 + 6761 W1 1424 TIP3 H2 HT 0.417000 1.0080 0 + 6762 W1 1425 TIP3 OH2 OT -0.834000 15.9994 0 + 6763 W1 1425 TIP3 H1 HT 0.417000 1.0080 0 + 6764 W1 1425 TIP3 H2 HT 0.417000 1.0080 0 + 6765 W1 1426 TIP3 OH2 OT -0.834000 15.9994 0 + 6766 W1 1426 TIP3 H1 HT 0.417000 1.0080 0 + 6767 W1 1426 TIP3 H2 HT 0.417000 1.0080 0 + 6768 W1 1427 TIP3 OH2 OT -0.834000 15.9994 0 + 6769 W1 1427 TIP3 H1 HT 0.417000 1.0080 0 + 6770 W1 1427 TIP3 H2 HT 0.417000 1.0080 0 + 6771 W1 1428 TIP3 OH2 OT -0.834000 15.9994 0 + 6772 W1 1428 TIP3 H1 HT 0.417000 1.0080 0 + 6773 W1 1428 TIP3 H2 HT 0.417000 1.0080 0 + 6774 W1 1429 TIP3 OH2 OT -0.834000 15.9994 0 + 6775 W1 1429 TIP3 H1 HT 0.417000 1.0080 0 + 6776 W1 1429 TIP3 H2 HT 0.417000 1.0080 0 + 6777 W1 1430 TIP3 OH2 OT -0.834000 15.9994 0 + 6778 W1 1430 TIP3 H1 HT 0.417000 1.0080 0 + 6779 W1 1430 TIP3 H2 HT 0.417000 1.0080 0 + 6780 W1 1431 TIP3 OH2 OT -0.834000 15.9994 0 + 6781 W1 1431 TIP3 H1 HT 0.417000 1.0080 0 + 6782 W1 1431 TIP3 H2 HT 0.417000 1.0080 0 + 6783 W1 1432 TIP3 OH2 OT -0.834000 15.9994 0 + 6784 W1 1432 TIP3 H1 HT 0.417000 1.0080 0 + 6785 W1 1432 TIP3 H2 HT 0.417000 1.0080 0 + 6786 W1 1433 TIP3 OH2 OT -0.834000 15.9994 0 + 6787 W1 1433 TIP3 H1 HT 0.417000 1.0080 0 + 6788 W1 1433 TIP3 H2 HT 0.417000 1.0080 0 + 6789 W1 1434 TIP3 OH2 OT -0.834000 15.9994 0 + 6790 W1 1434 TIP3 H1 HT 0.417000 1.0080 0 + 6791 W1 1434 TIP3 H2 HT 0.417000 1.0080 0 + 6792 W1 1435 TIP3 OH2 OT -0.834000 15.9994 0 + 6793 W1 1435 TIP3 H1 HT 0.417000 1.0080 0 + 6794 W1 1435 TIP3 H2 HT 0.417000 1.0080 0 + 6795 W1 1436 TIP3 OH2 OT -0.834000 15.9994 0 + 6796 W1 1436 TIP3 H1 HT 0.417000 1.0080 0 + 6797 W1 1436 TIP3 H2 HT 0.417000 1.0080 0 + 6798 W1 1437 TIP3 OH2 OT -0.834000 15.9994 0 + 6799 W1 1437 TIP3 H1 HT 0.417000 1.0080 0 + 6800 W1 1437 TIP3 H2 HT 0.417000 1.0080 0 + 6801 W1 1438 TIP3 OH2 OT -0.834000 15.9994 0 + 6802 W1 1438 TIP3 H1 HT 0.417000 1.0080 0 + 6803 W1 1438 TIP3 H2 HT 0.417000 1.0080 0 + 6804 W1 1439 TIP3 OH2 OT -0.834000 15.9994 0 + 6805 W1 1439 TIP3 H1 HT 0.417000 1.0080 0 + 6806 W1 1439 TIP3 H2 HT 0.417000 1.0080 0 + 6807 W1 1440 TIP3 OH2 OT -0.834000 15.9994 0 + 6808 W1 1440 TIP3 H1 HT 0.417000 1.0080 0 + 6809 W1 1440 TIP3 H2 HT 0.417000 1.0080 0 + 6810 W1 1441 TIP3 OH2 OT -0.834000 15.9994 0 + 6811 W1 1441 TIP3 H1 HT 0.417000 1.0080 0 + 6812 W1 1441 TIP3 H2 HT 0.417000 1.0080 0 + 6813 W1 1442 TIP3 OH2 OT -0.834000 15.9994 0 + 6814 W1 1442 TIP3 H1 HT 0.417000 1.0080 0 + 6815 W1 1442 TIP3 H2 HT 0.417000 1.0080 0 + 6816 W1 1443 TIP3 OH2 OT -0.834000 15.9994 0 + 6817 W1 1443 TIP3 H1 HT 0.417000 1.0080 0 + 6818 W1 1443 TIP3 H2 HT 0.417000 1.0080 0 + 6819 W1 1444 TIP3 OH2 OT -0.834000 15.9994 0 + 6820 W1 1444 TIP3 H1 HT 0.417000 1.0080 0 + 6821 W1 1444 TIP3 H2 HT 0.417000 1.0080 0 + 6822 W1 1445 TIP3 OH2 OT -0.834000 15.9994 0 + 6823 W1 1445 TIP3 H1 HT 0.417000 1.0080 0 + 6824 W1 1445 TIP3 H2 HT 0.417000 1.0080 0 + 6825 W1 1446 TIP3 OH2 OT -0.834000 15.9994 0 + 6826 W1 1446 TIP3 H1 HT 0.417000 1.0080 0 + 6827 W1 1446 TIP3 H2 HT 0.417000 1.0080 0 + 6828 W1 1447 TIP3 OH2 OT -0.834000 15.9994 0 + 6829 W1 1447 TIP3 H1 HT 0.417000 1.0080 0 + 6830 W1 1447 TIP3 H2 HT 0.417000 1.0080 0 + 6831 W1 1448 TIP3 OH2 OT -0.834000 15.9994 0 + 6832 W1 1448 TIP3 H1 HT 0.417000 1.0080 0 + 6833 W1 1448 TIP3 H2 HT 0.417000 1.0080 0 + 6834 W1 1449 TIP3 OH2 OT -0.834000 15.9994 0 + 6835 W1 1449 TIP3 H1 HT 0.417000 1.0080 0 + 6836 W1 1449 TIP3 H2 HT 0.417000 1.0080 0 + 6837 W1 1450 TIP3 OH2 OT -0.834000 15.9994 0 + 6838 W1 1450 TIP3 H1 HT 0.417000 1.0080 0 + 6839 W1 1450 TIP3 H2 HT 0.417000 1.0080 0 + 6840 W1 1451 TIP3 OH2 OT -0.834000 15.9994 0 + 6841 W1 1451 TIP3 H1 HT 0.417000 1.0080 0 + 6842 W1 1451 TIP3 H2 HT 0.417000 1.0080 0 + 6843 W1 1452 TIP3 OH2 OT -0.834000 15.9994 0 + 6844 W1 1452 TIP3 H1 HT 0.417000 1.0080 0 + 6845 W1 1452 TIP3 H2 HT 0.417000 1.0080 0 + 6846 W1 1453 TIP3 OH2 OT -0.834000 15.9994 0 + 6847 W1 1453 TIP3 H1 HT 0.417000 1.0080 0 + 6848 W1 1453 TIP3 H2 HT 0.417000 1.0080 0 + 6849 W1 1454 TIP3 OH2 OT -0.834000 15.9994 0 + 6850 W1 1454 TIP3 H1 HT 0.417000 1.0080 0 + 6851 W1 1454 TIP3 H2 HT 0.417000 1.0080 0 + 6852 W1 1455 TIP3 OH2 OT -0.834000 15.9994 0 + 6853 W1 1455 TIP3 H1 HT 0.417000 1.0080 0 + 6854 W1 1455 TIP3 H2 HT 0.417000 1.0080 0 + 6855 W1 1456 TIP3 OH2 OT -0.834000 15.9994 0 + 6856 W1 1456 TIP3 H1 HT 0.417000 1.0080 0 + 6857 W1 1456 TIP3 H2 HT 0.417000 1.0080 0 + 6858 W1 1457 TIP3 OH2 OT -0.834000 15.9994 0 + 6859 W1 1457 TIP3 H1 HT 0.417000 1.0080 0 + 6860 W1 1457 TIP3 H2 HT 0.417000 1.0080 0 + 6861 W1 1458 TIP3 OH2 OT -0.834000 15.9994 0 + 6862 W1 1458 TIP3 H1 HT 0.417000 1.0080 0 + 6863 W1 1458 TIP3 H2 HT 0.417000 1.0080 0 + 6864 W1 1459 TIP3 OH2 OT -0.834000 15.9994 0 + 6865 W1 1459 TIP3 H1 HT 0.417000 1.0080 0 + 6866 W1 1459 TIP3 H2 HT 0.417000 1.0080 0 + 6867 W1 1460 TIP3 OH2 OT -0.834000 15.9994 0 + 6868 W1 1460 TIP3 H1 HT 0.417000 1.0080 0 + 6869 W1 1460 TIP3 H2 HT 0.417000 1.0080 0 + 6870 W1 1461 TIP3 OH2 OT -0.834000 15.9994 0 + 6871 W1 1461 TIP3 H1 HT 0.417000 1.0080 0 + 6872 W1 1461 TIP3 H2 HT 0.417000 1.0080 0 + 6873 W1 1462 TIP3 OH2 OT -0.834000 15.9994 0 + 6874 W1 1462 TIP3 H1 HT 0.417000 1.0080 0 + 6875 W1 1462 TIP3 H2 HT 0.417000 1.0080 0 + 6876 W1 1463 TIP3 OH2 OT -0.834000 15.9994 0 + 6877 W1 1463 TIP3 H1 HT 0.417000 1.0080 0 + 6878 W1 1463 TIP3 H2 HT 0.417000 1.0080 0 + 6879 W1 1464 TIP3 OH2 OT -0.834000 15.9994 0 + 6880 W1 1464 TIP3 H1 HT 0.417000 1.0080 0 + 6881 W1 1464 TIP3 H2 HT 0.417000 1.0080 0 + 6882 W1 1465 TIP3 OH2 OT -0.834000 15.9994 0 + 6883 W1 1465 TIP3 H1 HT 0.417000 1.0080 0 + 6884 W1 1465 TIP3 H2 HT 0.417000 1.0080 0 + 6885 W1 1466 TIP3 OH2 OT -0.834000 15.9994 0 + 6886 W1 1466 TIP3 H1 HT 0.417000 1.0080 0 + 6887 W1 1466 TIP3 H2 HT 0.417000 1.0080 0 + 6888 W1 1467 TIP3 OH2 OT -0.834000 15.9994 0 + 6889 W1 1467 TIP3 H1 HT 0.417000 1.0080 0 + 6890 W1 1467 TIP3 H2 HT 0.417000 1.0080 0 + 6891 W1 1468 TIP3 OH2 OT -0.834000 15.9994 0 + 6892 W1 1468 TIP3 H1 HT 0.417000 1.0080 0 + 6893 W1 1468 TIP3 H2 HT 0.417000 1.0080 0 + 6894 W1 1469 TIP3 OH2 OT -0.834000 15.9994 0 + 6895 W1 1469 TIP3 H1 HT 0.417000 1.0080 0 + 6896 W1 1469 TIP3 H2 HT 0.417000 1.0080 0 + 6897 W1 1470 TIP3 OH2 OT -0.834000 15.9994 0 + 6898 W1 1470 TIP3 H1 HT 0.417000 1.0080 0 + 6899 W1 1470 TIP3 H2 HT 0.417000 1.0080 0 + 6900 W1 1471 TIP3 OH2 OT -0.834000 15.9994 0 + 6901 W1 1471 TIP3 H1 HT 0.417000 1.0080 0 + 6902 W1 1471 TIP3 H2 HT 0.417000 1.0080 0 + 6903 W1 1472 TIP3 OH2 OT -0.834000 15.9994 0 + 6904 W1 1472 TIP3 H1 HT 0.417000 1.0080 0 + 6905 W1 1472 TIP3 H2 HT 0.417000 1.0080 0 + 6906 W1 1473 TIP3 OH2 OT -0.834000 15.9994 0 + 6907 W1 1473 TIP3 H1 HT 0.417000 1.0080 0 + 6908 W1 1473 TIP3 H2 HT 0.417000 1.0080 0 + 6909 W1 1474 TIP3 OH2 OT -0.834000 15.9994 0 + 6910 W1 1474 TIP3 H1 HT 0.417000 1.0080 0 + 6911 W1 1474 TIP3 H2 HT 0.417000 1.0080 0 + 6912 W1 1475 TIP3 OH2 OT -0.834000 15.9994 0 + 6913 W1 1475 TIP3 H1 HT 0.417000 1.0080 0 + 6914 W1 1475 TIP3 H2 HT 0.417000 1.0080 0 + 6915 W1 1476 TIP3 OH2 OT -0.834000 15.9994 0 + 6916 W1 1476 TIP3 H1 HT 0.417000 1.0080 0 + 6917 W1 1476 TIP3 H2 HT 0.417000 1.0080 0 + 6918 W1 1477 TIP3 OH2 OT -0.834000 15.9994 0 + 6919 W1 1477 TIP3 H1 HT 0.417000 1.0080 0 + 6920 W1 1477 TIP3 H2 HT 0.417000 1.0080 0 + 6921 W1 1478 TIP3 OH2 OT -0.834000 15.9994 0 + 6922 W1 1478 TIP3 H1 HT 0.417000 1.0080 0 + 6923 W1 1478 TIP3 H2 HT 0.417000 1.0080 0 + 6924 W1 1479 TIP3 OH2 OT -0.834000 15.9994 0 + 6925 W1 1479 TIP3 H1 HT 0.417000 1.0080 0 + 6926 W1 1479 TIP3 H2 HT 0.417000 1.0080 0 + 6927 W1 1480 TIP3 OH2 OT -0.834000 15.9994 0 + 6928 W1 1480 TIP3 H1 HT 0.417000 1.0080 0 + 6929 W1 1480 TIP3 H2 HT 0.417000 1.0080 0 + 6930 W1 1481 TIP3 OH2 OT -0.834000 15.9994 0 + 6931 W1 1481 TIP3 H1 HT 0.417000 1.0080 0 + 6932 W1 1481 TIP3 H2 HT 0.417000 1.0080 0 + 6933 W1 1482 TIP3 OH2 OT -0.834000 15.9994 0 + 6934 W1 1482 TIP3 H1 HT 0.417000 1.0080 0 + 6935 W1 1482 TIP3 H2 HT 0.417000 1.0080 0 + 6936 W1 1483 TIP3 OH2 OT -0.834000 15.9994 0 + 6937 W1 1483 TIP3 H1 HT 0.417000 1.0080 0 + 6938 W1 1483 TIP3 H2 HT 0.417000 1.0080 0 + 6939 W1 1484 TIP3 OH2 OT -0.834000 15.9994 0 + 6940 W1 1484 TIP3 H1 HT 0.417000 1.0080 0 + 6941 W1 1484 TIP3 H2 HT 0.417000 1.0080 0 + 6942 W1 1485 TIP3 OH2 OT -0.834000 15.9994 0 + 6943 W1 1485 TIP3 H1 HT 0.417000 1.0080 0 + 6944 W1 1485 TIP3 H2 HT 0.417000 1.0080 0 + 6945 W1 1486 TIP3 OH2 OT -0.834000 15.9994 0 + 6946 W1 1486 TIP3 H1 HT 0.417000 1.0080 0 + 6947 W1 1486 TIP3 H2 HT 0.417000 1.0080 0 + 6948 W1 1487 TIP3 OH2 OT -0.834000 15.9994 0 + 6949 W1 1487 TIP3 H1 HT 0.417000 1.0080 0 + 6950 W1 1487 TIP3 H2 HT 0.417000 1.0080 0 + 6951 W1 1488 TIP3 OH2 OT -0.834000 15.9994 0 + 6952 W1 1488 TIP3 H1 HT 0.417000 1.0080 0 + 6953 W1 1488 TIP3 H2 HT 0.417000 1.0080 0 + 6954 W1 1489 TIP3 OH2 OT -0.834000 15.9994 0 + 6955 W1 1489 TIP3 H1 HT 0.417000 1.0080 0 + 6956 W1 1489 TIP3 H2 HT 0.417000 1.0080 0 + 6957 W1 1490 TIP3 OH2 OT -0.834000 15.9994 0 + 6958 W1 1490 TIP3 H1 HT 0.417000 1.0080 0 + 6959 W1 1490 TIP3 H2 HT 0.417000 1.0080 0 + 6960 W1 1491 TIP3 OH2 OT -0.834000 15.9994 0 + 6961 W1 1491 TIP3 H1 HT 0.417000 1.0080 0 + 6962 W1 1491 TIP3 H2 HT 0.417000 1.0080 0 + 6963 W1 1492 TIP3 OH2 OT -0.834000 15.9994 0 + 6964 W1 1492 TIP3 H1 HT 0.417000 1.0080 0 + 6965 W1 1492 TIP3 H2 HT 0.417000 1.0080 0 + 6966 W1 1493 TIP3 OH2 OT -0.834000 15.9994 0 + 6967 W1 1493 TIP3 H1 HT 0.417000 1.0080 0 + 6968 W1 1493 TIP3 H2 HT 0.417000 1.0080 0 + 6969 W1 1494 TIP3 OH2 OT -0.834000 15.9994 0 + 6970 W1 1494 TIP3 H1 HT 0.417000 1.0080 0 + 6971 W1 1494 TIP3 H2 HT 0.417000 1.0080 0 + 6972 W1 1495 TIP3 OH2 OT -0.834000 15.9994 0 + 6973 W1 1495 TIP3 H1 HT 0.417000 1.0080 0 + 6974 W1 1495 TIP3 H2 HT 0.417000 1.0080 0 + 6975 W1 1496 TIP3 OH2 OT -0.834000 15.9994 0 + 6976 W1 1496 TIP3 H1 HT 0.417000 1.0080 0 + 6977 W1 1496 TIP3 H2 HT 0.417000 1.0080 0 + 6978 W1 1497 TIP3 OH2 OT -0.834000 15.9994 0 + 6979 W1 1497 TIP3 H1 HT 0.417000 1.0080 0 + 6980 W1 1497 TIP3 H2 HT 0.417000 1.0080 0 + 6981 W1 1498 TIP3 OH2 OT -0.834000 15.9994 0 + 6982 W1 1498 TIP3 H1 HT 0.417000 1.0080 0 + 6983 W1 1498 TIP3 H2 HT 0.417000 1.0080 0 + 6984 W1 1499 TIP3 OH2 OT -0.834000 15.9994 0 + 6985 W1 1499 TIP3 H1 HT 0.417000 1.0080 0 + 6986 W1 1499 TIP3 H2 HT 0.417000 1.0080 0 + 6987 W1 1500 TIP3 OH2 OT -0.834000 15.9994 0 + 6988 W1 1500 TIP3 H1 HT 0.417000 1.0080 0 + 6989 W1 1500 TIP3 H2 HT 0.417000 1.0080 0 + 6990 W1 1501 TIP3 OH2 OT -0.834000 15.9994 0 + 6991 W1 1501 TIP3 H1 HT 0.417000 1.0080 0 + 6992 W1 1501 TIP3 H2 HT 0.417000 1.0080 0 + 6993 W1 1502 TIP3 OH2 OT -0.834000 15.9994 0 + 6994 W1 1502 TIP3 H1 HT 0.417000 1.0080 0 + 6995 W1 1502 TIP3 H2 HT 0.417000 1.0080 0 + 6996 W1 1503 TIP3 OH2 OT -0.834000 15.9994 0 + 6997 W1 1503 TIP3 H1 HT 0.417000 1.0080 0 + 6998 W1 1503 TIP3 H2 HT 0.417000 1.0080 0 + 6999 W1 1504 TIP3 OH2 OT -0.834000 15.9994 0 + 7000 W1 1504 TIP3 H1 HT 0.417000 1.0080 0 + 7001 W1 1504 TIP3 H2 HT 0.417000 1.0080 0 + 7002 W1 1505 TIP3 OH2 OT -0.834000 15.9994 0 + 7003 W1 1505 TIP3 H1 HT 0.417000 1.0080 0 + 7004 W1 1505 TIP3 H2 HT 0.417000 1.0080 0 + 7005 W1 1506 TIP3 OH2 OT -0.834000 15.9994 0 + 7006 W1 1506 TIP3 H1 HT 0.417000 1.0080 0 + 7007 W1 1506 TIP3 H2 HT 0.417000 1.0080 0 + 7008 W1 1507 TIP3 OH2 OT -0.834000 15.9994 0 + 7009 W1 1507 TIP3 H1 HT 0.417000 1.0080 0 + 7010 W1 1507 TIP3 H2 HT 0.417000 1.0080 0 + 7011 W1 1508 TIP3 OH2 OT -0.834000 15.9994 0 + 7012 W1 1508 TIP3 H1 HT 0.417000 1.0080 0 + 7013 W1 1508 TIP3 H2 HT 0.417000 1.0080 0 + 7014 W1 1509 TIP3 OH2 OT -0.834000 15.9994 0 + 7015 W1 1509 TIP3 H1 HT 0.417000 1.0080 0 + 7016 W1 1509 TIP3 H2 HT 0.417000 1.0080 0 + 7017 W1 1510 TIP3 OH2 OT -0.834000 15.9994 0 + 7018 W1 1510 TIP3 H1 HT 0.417000 1.0080 0 + 7019 W1 1510 TIP3 H2 HT 0.417000 1.0080 0 + 7020 W1 1511 TIP3 OH2 OT -0.834000 15.9994 0 + 7021 W1 1511 TIP3 H1 HT 0.417000 1.0080 0 + 7022 W1 1511 TIP3 H2 HT 0.417000 1.0080 0 + 7023 W1 1512 TIP3 OH2 OT -0.834000 15.9994 0 + 7024 W1 1512 TIP3 H1 HT 0.417000 1.0080 0 + 7025 W1 1512 TIP3 H2 HT 0.417000 1.0080 0 + 7026 W1 1513 TIP3 OH2 OT -0.834000 15.9994 0 + 7027 W1 1513 TIP3 H1 HT 0.417000 1.0080 0 + 7028 W1 1513 TIP3 H2 HT 0.417000 1.0080 0 + 7029 W1 1514 TIP3 OH2 OT -0.834000 15.9994 0 + 7030 W1 1514 TIP3 H1 HT 0.417000 1.0080 0 + 7031 W1 1514 TIP3 H2 HT 0.417000 1.0080 0 + 7032 W1 1515 TIP3 OH2 OT -0.834000 15.9994 0 + 7033 W1 1515 TIP3 H1 HT 0.417000 1.0080 0 + 7034 W1 1515 TIP3 H2 HT 0.417000 1.0080 0 + 7035 W1 1516 TIP3 OH2 OT -0.834000 15.9994 0 + 7036 W1 1516 TIP3 H1 HT 0.417000 1.0080 0 + 7037 W1 1516 TIP3 H2 HT 0.417000 1.0080 0 + 7038 W1 1517 TIP3 OH2 OT -0.834000 15.9994 0 + 7039 W1 1517 TIP3 H1 HT 0.417000 1.0080 0 + 7040 W1 1517 TIP3 H2 HT 0.417000 1.0080 0 + 7041 W1 1518 TIP3 OH2 OT -0.834000 15.9994 0 + 7042 W1 1518 TIP3 H1 HT 0.417000 1.0080 0 + 7043 W1 1518 TIP3 H2 HT 0.417000 1.0080 0 + 7044 W1 1519 TIP3 OH2 OT -0.834000 15.9994 0 + 7045 W1 1519 TIP3 H1 HT 0.417000 1.0080 0 + 7046 W1 1519 TIP3 H2 HT 0.417000 1.0080 0 + 7047 W1 1520 TIP3 OH2 OT -0.834000 15.9994 0 + 7048 W1 1520 TIP3 H1 HT 0.417000 1.0080 0 + 7049 W1 1520 TIP3 H2 HT 0.417000 1.0080 0 + 7050 W1 1521 TIP3 OH2 OT -0.834000 15.9994 0 + 7051 W1 1521 TIP3 H1 HT 0.417000 1.0080 0 + 7052 W1 1521 TIP3 H2 HT 0.417000 1.0080 0 + 7053 W1 1522 TIP3 OH2 OT -0.834000 15.9994 0 + 7054 W1 1522 TIP3 H1 HT 0.417000 1.0080 0 + 7055 W1 1522 TIP3 H2 HT 0.417000 1.0080 0 + 7056 W1 1523 TIP3 OH2 OT -0.834000 15.9994 0 + 7057 W1 1523 TIP3 H1 HT 0.417000 1.0080 0 + 7058 W1 1523 TIP3 H2 HT 0.417000 1.0080 0 + 7059 W1 1524 TIP3 OH2 OT -0.834000 15.9994 0 + 7060 W1 1524 TIP3 H1 HT 0.417000 1.0080 0 + 7061 W1 1524 TIP3 H2 HT 0.417000 1.0080 0 + 7062 W1 1525 TIP3 OH2 OT -0.834000 15.9994 0 + 7063 W1 1525 TIP3 H1 HT 0.417000 1.0080 0 + 7064 W1 1525 TIP3 H2 HT 0.417000 1.0080 0 + 7065 W1 1526 TIP3 OH2 OT -0.834000 15.9994 0 + 7066 W1 1526 TIP3 H1 HT 0.417000 1.0080 0 + 7067 W1 1526 TIP3 H2 HT 0.417000 1.0080 0 + 7068 W1 1527 TIP3 OH2 OT -0.834000 15.9994 0 + 7069 W1 1527 TIP3 H1 HT 0.417000 1.0080 0 + 7070 W1 1527 TIP3 H2 HT 0.417000 1.0080 0 + 7071 W1 1528 TIP3 OH2 OT -0.834000 15.9994 0 + 7072 W1 1528 TIP3 H1 HT 0.417000 1.0080 0 + 7073 W1 1528 TIP3 H2 HT 0.417000 1.0080 0 + 7074 W1 1529 TIP3 OH2 OT -0.834000 15.9994 0 + 7075 W1 1529 TIP3 H1 HT 0.417000 1.0080 0 + 7076 W1 1529 TIP3 H2 HT 0.417000 1.0080 0 + 7077 W1 1530 TIP3 OH2 OT -0.834000 15.9994 0 + 7078 W1 1530 TIP3 H1 HT 0.417000 1.0080 0 + 7079 W1 1530 TIP3 H2 HT 0.417000 1.0080 0 + 7080 W1 1531 TIP3 OH2 OT -0.834000 15.9994 0 + 7081 W1 1531 TIP3 H1 HT 0.417000 1.0080 0 + 7082 W1 1531 TIP3 H2 HT 0.417000 1.0080 0 + 7083 W1 1532 TIP3 OH2 OT -0.834000 15.9994 0 + 7084 W1 1532 TIP3 H1 HT 0.417000 1.0080 0 + 7085 W1 1532 TIP3 H2 HT 0.417000 1.0080 0 + 7086 W1 1533 TIP3 OH2 OT -0.834000 15.9994 0 + 7087 W1 1533 TIP3 H1 HT 0.417000 1.0080 0 + 7088 W1 1533 TIP3 H2 HT 0.417000 1.0080 0 + 7089 W1 1534 TIP3 OH2 OT -0.834000 15.9994 0 + 7090 W1 1534 TIP3 H1 HT 0.417000 1.0080 0 + 7091 W1 1534 TIP3 H2 HT 0.417000 1.0080 0 + 7092 W1 1535 TIP3 OH2 OT -0.834000 15.9994 0 + 7093 W1 1535 TIP3 H1 HT 0.417000 1.0080 0 + 7094 W1 1535 TIP3 H2 HT 0.417000 1.0080 0 + 7095 W1 1536 TIP3 OH2 OT -0.834000 15.9994 0 + 7096 W1 1536 TIP3 H1 HT 0.417000 1.0080 0 + 7097 W1 1536 TIP3 H2 HT 0.417000 1.0080 0 + 7098 W1 1537 TIP3 OH2 OT -0.834000 15.9994 0 + 7099 W1 1537 TIP3 H1 HT 0.417000 1.0080 0 + 7100 W1 1537 TIP3 H2 HT 0.417000 1.0080 0 + 7101 W1 1538 TIP3 OH2 OT -0.834000 15.9994 0 + 7102 W1 1538 TIP3 H1 HT 0.417000 1.0080 0 + 7103 W1 1538 TIP3 H2 HT 0.417000 1.0080 0 + 7104 W1 1539 TIP3 OH2 OT -0.834000 15.9994 0 + 7105 W1 1539 TIP3 H1 HT 0.417000 1.0080 0 + 7106 W1 1539 TIP3 H2 HT 0.417000 1.0080 0 + 7107 W1 1540 TIP3 OH2 OT -0.834000 15.9994 0 + 7108 W1 1540 TIP3 H1 HT 0.417000 1.0080 0 + 7109 W1 1540 TIP3 H2 HT 0.417000 1.0080 0 + 7110 W1 1541 TIP3 OH2 OT -0.834000 15.9994 0 + 7111 W1 1541 TIP3 H1 HT 0.417000 1.0080 0 + 7112 W1 1541 TIP3 H2 HT 0.417000 1.0080 0 + 7113 W1 1542 TIP3 OH2 OT -0.834000 15.9994 0 + 7114 W1 1542 TIP3 H1 HT 0.417000 1.0080 0 + 7115 W1 1542 TIP3 H2 HT 0.417000 1.0080 0 + 7116 W1 1543 TIP3 OH2 OT -0.834000 15.9994 0 + 7117 W1 1543 TIP3 H1 HT 0.417000 1.0080 0 + 7118 W1 1543 TIP3 H2 HT 0.417000 1.0080 0 + 7119 W1 1544 TIP3 OH2 OT -0.834000 15.9994 0 + 7120 W1 1544 TIP3 H1 HT 0.417000 1.0080 0 + 7121 W1 1544 TIP3 H2 HT 0.417000 1.0080 0 + 7122 W1 1545 TIP3 OH2 OT -0.834000 15.9994 0 + 7123 W1 1545 TIP3 H1 HT 0.417000 1.0080 0 + 7124 W1 1545 TIP3 H2 HT 0.417000 1.0080 0 + 7125 W1 1546 TIP3 OH2 OT -0.834000 15.9994 0 + 7126 W1 1546 TIP3 H1 HT 0.417000 1.0080 0 + 7127 W1 1546 TIP3 H2 HT 0.417000 1.0080 0 + 7128 W1 1547 TIP3 OH2 OT -0.834000 15.9994 0 + 7129 W1 1547 TIP3 H1 HT 0.417000 1.0080 0 + 7130 W1 1547 TIP3 H2 HT 0.417000 1.0080 0 + 7131 W1 1548 TIP3 OH2 OT -0.834000 15.9994 0 + 7132 W1 1548 TIP3 H1 HT 0.417000 1.0080 0 + 7133 W1 1548 TIP3 H2 HT 0.417000 1.0080 0 + 7134 W1 1549 TIP3 OH2 OT -0.834000 15.9994 0 + 7135 W1 1549 TIP3 H1 HT 0.417000 1.0080 0 + 7136 W1 1549 TIP3 H2 HT 0.417000 1.0080 0 + 7137 W1 1550 TIP3 OH2 OT -0.834000 15.9994 0 + 7138 W1 1550 TIP3 H1 HT 0.417000 1.0080 0 + 7139 W1 1550 TIP3 H2 HT 0.417000 1.0080 0 + 7140 W1 1551 TIP3 OH2 OT -0.834000 15.9994 0 + 7141 W1 1551 TIP3 H1 HT 0.417000 1.0080 0 + 7142 W1 1551 TIP3 H2 HT 0.417000 1.0080 0 + 7143 W1 1552 TIP3 OH2 OT -0.834000 15.9994 0 + 7144 W1 1552 TIP3 H1 HT 0.417000 1.0080 0 + 7145 W1 1552 TIP3 H2 HT 0.417000 1.0080 0 + 7146 W1 1553 TIP3 OH2 OT -0.834000 15.9994 0 + 7147 W1 1553 TIP3 H1 HT 0.417000 1.0080 0 + 7148 W1 1553 TIP3 H2 HT 0.417000 1.0080 0 + 7149 W1 1554 TIP3 OH2 OT -0.834000 15.9994 0 + 7150 W1 1554 TIP3 H1 HT 0.417000 1.0080 0 + 7151 W1 1554 TIP3 H2 HT 0.417000 1.0080 0 + 7152 W1 1555 TIP3 OH2 OT -0.834000 15.9994 0 + 7153 W1 1555 TIP3 H1 HT 0.417000 1.0080 0 + 7154 W1 1555 TIP3 H2 HT 0.417000 1.0080 0 + 7155 W1 1556 TIP3 OH2 OT -0.834000 15.9994 0 + 7156 W1 1556 TIP3 H1 HT 0.417000 1.0080 0 + 7157 W1 1556 TIP3 H2 HT 0.417000 1.0080 0 + 7158 W1 1557 TIP3 OH2 OT -0.834000 15.9994 0 + 7159 W1 1557 TIP3 H1 HT 0.417000 1.0080 0 + 7160 W1 1557 TIP3 H2 HT 0.417000 1.0080 0 + 7161 W1 1558 TIP3 OH2 OT -0.834000 15.9994 0 + 7162 W1 1558 TIP3 H1 HT 0.417000 1.0080 0 + 7163 W1 1558 TIP3 H2 HT 0.417000 1.0080 0 + 7164 W1 1559 TIP3 OH2 OT -0.834000 15.9994 0 + 7165 W1 1559 TIP3 H1 HT 0.417000 1.0080 0 + 7166 W1 1559 TIP3 H2 HT 0.417000 1.0080 0 + 7167 W1 1560 TIP3 OH2 OT -0.834000 15.9994 0 + 7168 W1 1560 TIP3 H1 HT 0.417000 1.0080 0 + 7169 W1 1560 TIP3 H2 HT 0.417000 1.0080 0 + 7170 W1 1561 TIP3 OH2 OT -0.834000 15.9994 0 + 7171 W1 1561 TIP3 H1 HT 0.417000 1.0080 0 + 7172 W1 1561 TIP3 H2 HT 0.417000 1.0080 0 + 7173 W1 1562 TIP3 OH2 OT -0.834000 15.9994 0 + 7174 W1 1562 TIP3 H1 HT 0.417000 1.0080 0 + 7175 W1 1562 TIP3 H2 HT 0.417000 1.0080 0 + 7176 W1 1563 TIP3 OH2 OT -0.834000 15.9994 0 + 7177 W1 1563 TIP3 H1 HT 0.417000 1.0080 0 + 7178 W1 1563 TIP3 H2 HT 0.417000 1.0080 0 + 7179 W1 1564 TIP3 OH2 OT -0.834000 15.9994 0 + 7180 W1 1564 TIP3 H1 HT 0.417000 1.0080 0 + 7181 W1 1564 TIP3 H2 HT 0.417000 1.0080 0 + 7182 W1 1565 TIP3 OH2 OT -0.834000 15.9994 0 + 7183 W1 1565 TIP3 H1 HT 0.417000 1.0080 0 + 7184 W1 1565 TIP3 H2 HT 0.417000 1.0080 0 + 7185 W1 1566 TIP3 OH2 OT -0.834000 15.9994 0 + 7186 W1 1566 TIP3 H1 HT 0.417000 1.0080 0 + 7187 W1 1566 TIP3 H2 HT 0.417000 1.0080 0 + 7188 W1 1567 TIP3 OH2 OT -0.834000 15.9994 0 + 7189 W1 1567 TIP3 H1 HT 0.417000 1.0080 0 + 7190 W1 1567 TIP3 H2 HT 0.417000 1.0080 0 + 7191 W1 1568 TIP3 OH2 OT -0.834000 15.9994 0 + 7192 W1 1568 TIP3 H1 HT 0.417000 1.0080 0 + 7193 W1 1568 TIP3 H2 HT 0.417000 1.0080 0 + 7194 W1 1569 TIP3 OH2 OT -0.834000 15.9994 0 + 7195 W1 1569 TIP3 H1 HT 0.417000 1.0080 0 + 7196 W1 1569 TIP3 H2 HT 0.417000 1.0080 0 + 7197 W1 1570 TIP3 OH2 OT -0.834000 15.9994 0 + 7198 W1 1570 TIP3 H1 HT 0.417000 1.0080 0 + 7199 W1 1570 TIP3 H2 HT 0.417000 1.0080 0 + 7200 W1 1571 TIP3 OH2 OT -0.834000 15.9994 0 + 7201 W1 1571 TIP3 H1 HT 0.417000 1.0080 0 + 7202 W1 1571 TIP3 H2 HT 0.417000 1.0080 0 + 7203 W1 1572 TIP3 OH2 OT -0.834000 15.9994 0 + 7204 W1 1572 TIP3 H1 HT 0.417000 1.0080 0 + 7205 W1 1572 TIP3 H2 HT 0.417000 1.0080 0 + 7206 W1 1573 TIP3 OH2 OT -0.834000 15.9994 0 + 7207 W1 1573 TIP3 H1 HT 0.417000 1.0080 0 + 7208 W1 1573 TIP3 H2 HT 0.417000 1.0080 0 + 7209 W1 1574 TIP3 OH2 OT -0.834000 15.9994 0 + 7210 W1 1574 TIP3 H1 HT 0.417000 1.0080 0 + 7211 W1 1574 TIP3 H2 HT 0.417000 1.0080 0 + 7212 W1 1575 TIP3 OH2 OT -0.834000 15.9994 0 + 7213 W1 1575 TIP3 H1 HT 0.417000 1.0080 0 + 7214 W1 1575 TIP3 H2 HT 0.417000 1.0080 0 + 7215 W1 1576 TIP3 OH2 OT -0.834000 15.9994 0 + 7216 W1 1576 TIP3 H1 HT 0.417000 1.0080 0 + 7217 W1 1576 TIP3 H2 HT 0.417000 1.0080 0 + 7218 W1 1577 TIP3 OH2 OT -0.834000 15.9994 0 + 7219 W1 1577 TIP3 H1 HT 0.417000 1.0080 0 + 7220 W1 1577 TIP3 H2 HT 0.417000 1.0080 0 + 7221 W1 1578 TIP3 OH2 OT -0.834000 15.9994 0 + 7222 W1 1578 TIP3 H1 HT 0.417000 1.0080 0 + 7223 W1 1578 TIP3 H2 HT 0.417000 1.0080 0 + 7224 W1 1579 TIP3 OH2 OT -0.834000 15.9994 0 + 7225 W1 1579 TIP3 H1 HT 0.417000 1.0080 0 + 7226 W1 1579 TIP3 H2 HT 0.417000 1.0080 0 + 7227 W1 1580 TIP3 OH2 OT -0.834000 15.9994 0 + 7228 W1 1580 TIP3 H1 HT 0.417000 1.0080 0 + 7229 W1 1580 TIP3 H2 HT 0.417000 1.0080 0 + 7230 W1 1581 TIP3 OH2 OT -0.834000 15.9994 0 + 7231 W1 1581 TIP3 H1 HT 0.417000 1.0080 0 + 7232 W1 1581 TIP3 H2 HT 0.417000 1.0080 0 + 7233 W1 1582 TIP3 OH2 OT -0.834000 15.9994 0 + 7234 W1 1582 TIP3 H1 HT 0.417000 1.0080 0 + 7235 W1 1582 TIP3 H2 HT 0.417000 1.0080 0 + 7236 W1 1583 TIP3 OH2 OT -0.834000 15.9994 0 + 7237 W1 1583 TIP3 H1 HT 0.417000 1.0080 0 + 7238 W1 1583 TIP3 H2 HT 0.417000 1.0080 0 + 7239 W1 1584 TIP3 OH2 OT -0.834000 15.9994 0 + 7240 W1 1584 TIP3 H1 HT 0.417000 1.0080 0 + 7241 W1 1584 TIP3 H2 HT 0.417000 1.0080 0 + 7242 W1 1585 TIP3 OH2 OT -0.834000 15.9994 0 + 7243 W1 1585 TIP3 H1 HT 0.417000 1.0080 0 + 7244 W1 1585 TIP3 H2 HT 0.417000 1.0080 0 + 7245 W1 1586 TIP3 OH2 OT -0.834000 15.9994 0 + 7246 W1 1586 TIP3 H1 HT 0.417000 1.0080 0 + 7247 W1 1586 TIP3 H2 HT 0.417000 1.0080 0 + 7248 W1 1587 TIP3 OH2 OT -0.834000 15.9994 0 + 7249 W1 1587 TIP3 H1 HT 0.417000 1.0080 0 + 7250 W1 1587 TIP3 H2 HT 0.417000 1.0080 0 + 7251 W1 1588 TIP3 OH2 OT -0.834000 15.9994 0 + 7252 W1 1588 TIP3 H1 HT 0.417000 1.0080 0 + 7253 W1 1588 TIP3 H2 HT 0.417000 1.0080 0 + 7254 W1 1589 TIP3 OH2 OT -0.834000 15.9994 0 + 7255 W1 1589 TIP3 H1 HT 0.417000 1.0080 0 + 7256 W1 1589 TIP3 H2 HT 0.417000 1.0080 0 + 7257 W1 1590 TIP3 OH2 OT -0.834000 15.9994 0 + 7258 W1 1590 TIP3 H1 HT 0.417000 1.0080 0 + 7259 W1 1590 TIP3 H2 HT 0.417000 1.0080 0 + 7260 W1 1591 TIP3 OH2 OT -0.834000 15.9994 0 + 7261 W1 1591 TIP3 H1 HT 0.417000 1.0080 0 + 7262 W1 1591 TIP3 H2 HT 0.417000 1.0080 0 + 7263 W1 1592 TIP3 OH2 OT -0.834000 15.9994 0 + 7264 W1 1592 TIP3 H1 HT 0.417000 1.0080 0 + 7265 W1 1592 TIP3 H2 HT 0.417000 1.0080 0 + 7266 W1 1593 TIP3 OH2 OT -0.834000 15.9994 0 + 7267 W1 1593 TIP3 H1 HT 0.417000 1.0080 0 + 7268 W1 1593 TIP3 H2 HT 0.417000 1.0080 0 + 7269 W1 1594 TIP3 OH2 OT -0.834000 15.9994 0 + 7270 W1 1594 TIP3 H1 HT 0.417000 1.0080 0 + 7271 W1 1594 TIP3 H2 HT 0.417000 1.0080 0 + 7272 W1 1595 TIP3 OH2 OT -0.834000 15.9994 0 + 7273 W1 1595 TIP3 H1 HT 0.417000 1.0080 0 + 7274 W1 1595 TIP3 H2 HT 0.417000 1.0080 0 + 7275 W1 1596 TIP3 OH2 OT -0.834000 15.9994 0 + 7276 W1 1596 TIP3 H1 HT 0.417000 1.0080 0 + 7277 W1 1596 TIP3 H2 HT 0.417000 1.0080 0 + 7278 W1 1597 TIP3 OH2 OT -0.834000 15.9994 0 + 7279 W1 1597 TIP3 H1 HT 0.417000 1.0080 0 + 7280 W1 1597 TIP3 H2 HT 0.417000 1.0080 0 + 7281 W1 1598 TIP3 OH2 OT -0.834000 15.9994 0 + 7282 W1 1598 TIP3 H1 HT 0.417000 1.0080 0 + 7283 W1 1598 TIP3 H2 HT 0.417000 1.0080 0 + 7284 W1 1599 TIP3 OH2 OT -0.834000 15.9994 0 + 7285 W1 1599 TIP3 H1 HT 0.417000 1.0080 0 + 7286 W1 1599 TIP3 H2 HT 0.417000 1.0080 0 + 7287 W1 1600 TIP3 OH2 OT -0.834000 15.9994 0 + 7288 W1 1600 TIP3 H1 HT 0.417000 1.0080 0 + 7289 W1 1600 TIP3 H2 HT 0.417000 1.0080 0 + 7290 W1 1601 TIP3 OH2 OT -0.834000 15.9994 0 + 7291 W1 1601 TIP3 H1 HT 0.417000 1.0080 0 + 7292 W1 1601 TIP3 H2 HT 0.417000 1.0080 0 + 7293 W1 1602 TIP3 OH2 OT -0.834000 15.9994 0 + 7294 W1 1602 TIP3 H1 HT 0.417000 1.0080 0 + 7295 W1 1602 TIP3 H2 HT 0.417000 1.0080 0 + 7296 W1 1603 TIP3 OH2 OT -0.834000 15.9994 0 + 7297 W1 1603 TIP3 H1 HT 0.417000 1.0080 0 + 7298 W1 1603 TIP3 H2 HT 0.417000 1.0080 0 + 7299 W1 1604 TIP3 OH2 OT -0.834000 15.9994 0 + 7300 W1 1604 TIP3 H1 HT 0.417000 1.0080 0 + 7301 W1 1604 TIP3 H2 HT 0.417000 1.0080 0 + 7302 W1 1605 TIP3 OH2 OT -0.834000 15.9994 0 + 7303 W1 1605 TIP3 H1 HT 0.417000 1.0080 0 + 7304 W1 1605 TIP3 H2 HT 0.417000 1.0080 0 + 7305 W1 1606 TIP3 OH2 OT -0.834000 15.9994 0 + 7306 W1 1606 TIP3 H1 HT 0.417000 1.0080 0 + 7307 W1 1606 TIP3 H2 HT 0.417000 1.0080 0 + 7308 W1 1607 TIP3 OH2 OT -0.834000 15.9994 0 + 7309 W1 1607 TIP3 H1 HT 0.417000 1.0080 0 + 7310 W1 1607 TIP3 H2 HT 0.417000 1.0080 0 + 7311 W1 1608 TIP3 OH2 OT -0.834000 15.9994 0 + 7312 W1 1608 TIP3 H1 HT 0.417000 1.0080 0 + 7313 W1 1608 TIP3 H2 HT 0.417000 1.0080 0 + 7314 W1 1609 TIP3 OH2 OT -0.834000 15.9994 0 + 7315 W1 1609 TIP3 H1 HT 0.417000 1.0080 0 + 7316 W1 1609 TIP3 H2 HT 0.417000 1.0080 0 + 7317 W1 1610 TIP3 OH2 OT -0.834000 15.9994 0 + 7318 W1 1610 TIP3 H1 HT 0.417000 1.0080 0 + 7319 W1 1610 TIP3 H2 HT 0.417000 1.0080 0 + 7320 W1 1611 TIP3 OH2 OT -0.834000 15.9994 0 + 7321 W1 1611 TIP3 H1 HT 0.417000 1.0080 0 + 7322 W1 1611 TIP3 H2 HT 0.417000 1.0080 0 + 7323 W1 1612 TIP3 OH2 OT -0.834000 15.9994 0 + 7324 W1 1612 TIP3 H1 HT 0.417000 1.0080 0 + 7325 W1 1612 TIP3 H2 HT 0.417000 1.0080 0 + 7326 W1 1613 TIP3 OH2 OT -0.834000 15.9994 0 + 7327 W1 1613 TIP3 H1 HT 0.417000 1.0080 0 + 7328 W1 1613 TIP3 H2 HT 0.417000 1.0080 0 + 7329 W1 1614 TIP3 OH2 OT -0.834000 15.9994 0 + 7330 W1 1614 TIP3 H1 HT 0.417000 1.0080 0 + 7331 W1 1614 TIP3 H2 HT 0.417000 1.0080 0 + 7332 W1 1615 TIP3 OH2 OT -0.834000 15.9994 0 + 7333 W1 1615 TIP3 H1 HT 0.417000 1.0080 0 + 7334 W1 1615 TIP3 H2 HT 0.417000 1.0080 0 + 7335 W1 1616 TIP3 OH2 OT -0.834000 15.9994 0 + 7336 W1 1616 TIP3 H1 HT 0.417000 1.0080 0 + 7337 W1 1616 TIP3 H2 HT 0.417000 1.0080 0 + 7338 W1 1617 TIP3 OH2 OT -0.834000 15.9994 0 + 7339 W1 1617 TIP3 H1 HT 0.417000 1.0080 0 + 7340 W1 1617 TIP3 H2 HT 0.417000 1.0080 0 + 7341 W1 1618 TIP3 OH2 OT -0.834000 15.9994 0 + 7342 W1 1618 TIP3 H1 HT 0.417000 1.0080 0 + 7343 W1 1618 TIP3 H2 HT 0.417000 1.0080 0 + 7344 W1 1619 TIP3 OH2 OT -0.834000 15.9994 0 + 7345 W1 1619 TIP3 H1 HT 0.417000 1.0080 0 + 7346 W1 1619 TIP3 H2 HT 0.417000 1.0080 0 + 7347 W1 1620 TIP3 OH2 OT -0.834000 15.9994 0 + 7348 W1 1620 TIP3 H1 HT 0.417000 1.0080 0 + 7349 W1 1620 TIP3 H2 HT 0.417000 1.0080 0 + 7350 W1 1621 TIP3 OH2 OT -0.834000 15.9994 0 + 7351 W1 1621 TIP3 H1 HT 0.417000 1.0080 0 + 7352 W1 1621 TIP3 H2 HT 0.417000 1.0080 0 + 7353 W1 1622 TIP3 OH2 OT -0.834000 15.9994 0 + 7354 W1 1622 TIP3 H1 HT 0.417000 1.0080 0 + 7355 W1 1622 TIP3 H2 HT 0.417000 1.0080 0 + 7356 W1 1623 TIP3 OH2 OT -0.834000 15.9994 0 + 7357 W1 1623 TIP3 H1 HT 0.417000 1.0080 0 + 7358 W1 1623 TIP3 H2 HT 0.417000 1.0080 0 + 7359 W1 1624 TIP3 OH2 OT -0.834000 15.9994 0 + 7360 W1 1624 TIP3 H1 HT 0.417000 1.0080 0 + 7361 W1 1624 TIP3 H2 HT 0.417000 1.0080 0 + 7362 W1 1625 TIP3 OH2 OT -0.834000 15.9994 0 + 7363 W1 1625 TIP3 H1 HT 0.417000 1.0080 0 + 7364 W1 1625 TIP3 H2 HT 0.417000 1.0080 0 + 7365 W1 1626 TIP3 OH2 OT -0.834000 15.9994 0 + 7366 W1 1626 TIP3 H1 HT 0.417000 1.0080 0 + 7367 W1 1626 TIP3 H2 HT 0.417000 1.0080 0 + 7368 W1 1627 TIP3 OH2 OT -0.834000 15.9994 0 + 7369 W1 1627 TIP3 H1 HT 0.417000 1.0080 0 + 7370 W1 1627 TIP3 H2 HT 0.417000 1.0080 0 + 7371 W1 1628 TIP3 OH2 OT -0.834000 15.9994 0 + 7372 W1 1628 TIP3 H1 HT 0.417000 1.0080 0 + 7373 W1 1628 TIP3 H2 HT 0.417000 1.0080 0 + 7374 W1 1629 TIP3 OH2 OT -0.834000 15.9994 0 + 7375 W1 1629 TIP3 H1 HT 0.417000 1.0080 0 + 7376 W1 1629 TIP3 H2 HT 0.417000 1.0080 0 + 7377 W1 1630 TIP3 OH2 OT -0.834000 15.9994 0 + 7378 W1 1630 TIP3 H1 HT 0.417000 1.0080 0 + 7379 W1 1630 TIP3 H2 HT 0.417000 1.0080 0 + 7380 W1 1631 TIP3 OH2 OT -0.834000 15.9994 0 + 7381 W1 1631 TIP3 H1 HT 0.417000 1.0080 0 + 7382 W1 1631 TIP3 H2 HT 0.417000 1.0080 0 + 7383 W1 1632 TIP3 OH2 OT -0.834000 15.9994 0 + 7384 W1 1632 TIP3 H1 HT 0.417000 1.0080 0 + 7385 W1 1632 TIP3 H2 HT 0.417000 1.0080 0 + 7386 W1 1633 TIP3 OH2 OT -0.834000 15.9994 0 + 7387 W1 1633 TIP3 H1 HT 0.417000 1.0080 0 + 7388 W1 1633 TIP3 H2 HT 0.417000 1.0080 0 + 7389 W1 1634 TIP3 OH2 OT -0.834000 15.9994 0 + 7390 W1 1634 TIP3 H1 HT 0.417000 1.0080 0 + 7391 W1 1634 TIP3 H2 HT 0.417000 1.0080 0 + 7392 W1 1635 TIP3 OH2 OT -0.834000 15.9994 0 + 7393 W1 1635 TIP3 H1 HT 0.417000 1.0080 0 + 7394 W1 1635 TIP3 H2 HT 0.417000 1.0080 0 + 7395 W1 1636 TIP3 OH2 OT -0.834000 15.9994 0 + 7396 W1 1636 TIP3 H1 HT 0.417000 1.0080 0 + 7397 W1 1636 TIP3 H2 HT 0.417000 1.0080 0 + 7398 W1 1637 TIP3 OH2 OT -0.834000 15.9994 0 + 7399 W1 1637 TIP3 H1 HT 0.417000 1.0080 0 + 7400 W1 1637 TIP3 H2 HT 0.417000 1.0080 0 + 7401 W1 1638 TIP3 OH2 OT -0.834000 15.9994 0 + 7402 W1 1638 TIP3 H1 HT 0.417000 1.0080 0 + 7403 W1 1638 TIP3 H2 HT 0.417000 1.0080 0 + 7404 W1 1639 TIP3 OH2 OT -0.834000 15.9994 0 + 7405 W1 1639 TIP3 H1 HT 0.417000 1.0080 0 + 7406 W1 1639 TIP3 H2 HT 0.417000 1.0080 0 + 7407 W1 1640 TIP3 OH2 OT -0.834000 15.9994 0 + 7408 W1 1640 TIP3 H1 HT 0.417000 1.0080 0 + 7409 W1 1640 TIP3 H2 HT 0.417000 1.0080 0 + 7410 W1 1641 TIP3 OH2 OT -0.834000 15.9994 0 + 7411 W1 1641 TIP3 H1 HT 0.417000 1.0080 0 + 7412 W1 1641 TIP3 H2 HT 0.417000 1.0080 0 + 7413 W1 1642 TIP3 OH2 OT -0.834000 15.9994 0 + 7414 W1 1642 TIP3 H1 HT 0.417000 1.0080 0 + 7415 W1 1642 TIP3 H2 HT 0.417000 1.0080 0 + 7416 W1 1643 TIP3 OH2 OT -0.834000 15.9994 0 + 7417 W1 1643 TIP3 H1 HT 0.417000 1.0080 0 + 7418 W1 1643 TIP3 H2 HT 0.417000 1.0080 0 + 7419 W1 1644 TIP3 OH2 OT -0.834000 15.9994 0 + 7420 W1 1644 TIP3 H1 HT 0.417000 1.0080 0 + 7421 W1 1644 TIP3 H2 HT 0.417000 1.0080 0 + 7422 W1 1645 TIP3 OH2 OT -0.834000 15.9994 0 + 7423 W1 1645 TIP3 H1 HT 0.417000 1.0080 0 + 7424 W1 1645 TIP3 H2 HT 0.417000 1.0080 0 + 7425 W1 1646 TIP3 OH2 OT -0.834000 15.9994 0 + 7426 W1 1646 TIP3 H1 HT 0.417000 1.0080 0 + 7427 W1 1646 TIP3 H2 HT 0.417000 1.0080 0 + 7428 W1 1647 TIP3 OH2 OT -0.834000 15.9994 0 + 7429 W1 1647 TIP3 H1 HT 0.417000 1.0080 0 + 7430 W1 1647 TIP3 H2 HT 0.417000 1.0080 0 + 7431 W1 1648 TIP3 OH2 OT -0.834000 15.9994 0 + 7432 W1 1648 TIP3 H1 HT 0.417000 1.0080 0 + 7433 W1 1648 TIP3 H2 HT 0.417000 1.0080 0 + 7434 W1 1649 TIP3 OH2 OT -0.834000 15.9994 0 + 7435 W1 1649 TIP3 H1 HT 0.417000 1.0080 0 + 7436 W1 1649 TIP3 H2 HT 0.417000 1.0080 0 + 7437 W1 1650 TIP3 OH2 OT -0.834000 15.9994 0 + 7438 W1 1650 TIP3 H1 HT 0.417000 1.0080 0 + 7439 W1 1650 TIP3 H2 HT 0.417000 1.0080 0 + 7440 W1 1651 TIP3 OH2 OT -0.834000 15.9994 0 + 7441 W1 1651 TIP3 H1 HT 0.417000 1.0080 0 + 7442 W1 1651 TIP3 H2 HT 0.417000 1.0080 0 + 7443 W1 1652 TIP3 OH2 OT -0.834000 15.9994 0 + 7444 W1 1652 TIP3 H1 HT 0.417000 1.0080 0 + 7445 W1 1652 TIP3 H2 HT 0.417000 1.0080 0 + 7446 W1 1653 TIP3 OH2 OT -0.834000 15.9994 0 + 7447 W1 1653 TIP3 H1 HT 0.417000 1.0080 0 + 7448 W1 1653 TIP3 H2 HT 0.417000 1.0080 0 + 7449 W1 1654 TIP3 OH2 OT -0.834000 15.9994 0 + 7450 W1 1654 TIP3 H1 HT 0.417000 1.0080 0 + 7451 W1 1654 TIP3 H2 HT 0.417000 1.0080 0 + 7452 W1 1655 TIP3 OH2 OT -0.834000 15.9994 0 + 7453 W1 1655 TIP3 H1 HT 0.417000 1.0080 0 + 7454 W1 1655 TIP3 H2 HT 0.417000 1.0080 0 + 7455 W1 1656 TIP3 OH2 OT -0.834000 15.9994 0 + 7456 W1 1656 TIP3 H1 HT 0.417000 1.0080 0 + 7457 W1 1656 TIP3 H2 HT 0.417000 1.0080 0 + 7458 W1 1657 TIP3 OH2 OT -0.834000 15.9994 0 + 7459 W1 1657 TIP3 H1 HT 0.417000 1.0080 0 + 7460 W1 1657 TIP3 H2 HT 0.417000 1.0080 0 + 7461 W1 1658 TIP3 OH2 OT -0.834000 15.9994 0 + 7462 W1 1658 TIP3 H1 HT 0.417000 1.0080 0 + 7463 W1 1658 TIP3 H2 HT 0.417000 1.0080 0 + 7464 W1 1659 TIP3 OH2 OT -0.834000 15.9994 0 + 7465 W1 1659 TIP3 H1 HT 0.417000 1.0080 0 + 7466 W1 1659 TIP3 H2 HT 0.417000 1.0080 0 + 7467 W1 1660 TIP3 OH2 OT -0.834000 15.9994 0 + 7468 W1 1660 TIP3 H1 HT 0.417000 1.0080 0 + 7469 W1 1660 TIP3 H2 HT 0.417000 1.0080 0 + 7470 W1 1661 TIP3 OH2 OT -0.834000 15.9994 0 + 7471 W1 1661 TIP3 H1 HT 0.417000 1.0080 0 + 7472 W1 1661 TIP3 H2 HT 0.417000 1.0080 0 + 7473 W1 1662 TIP3 OH2 OT -0.834000 15.9994 0 + 7474 W1 1662 TIP3 H1 HT 0.417000 1.0080 0 + 7475 W1 1662 TIP3 H2 HT 0.417000 1.0080 0 + 7476 W1 1663 TIP3 OH2 OT -0.834000 15.9994 0 + 7477 W1 1663 TIP3 H1 HT 0.417000 1.0080 0 + 7478 W1 1663 TIP3 H2 HT 0.417000 1.0080 0 + 7479 W1 1664 TIP3 OH2 OT -0.834000 15.9994 0 + 7480 W1 1664 TIP3 H1 HT 0.417000 1.0080 0 + 7481 W1 1664 TIP3 H2 HT 0.417000 1.0080 0 + 7482 W1 1665 TIP3 OH2 OT -0.834000 15.9994 0 + 7483 W1 1665 TIP3 H1 HT 0.417000 1.0080 0 + 7484 W1 1665 TIP3 H2 HT 0.417000 1.0080 0 + 7485 W1 1666 TIP3 OH2 OT -0.834000 15.9994 0 + 7486 W1 1666 TIP3 H1 HT 0.417000 1.0080 0 + 7487 W1 1666 TIP3 H2 HT 0.417000 1.0080 0 + 7488 W1 1667 TIP3 OH2 OT -0.834000 15.9994 0 + 7489 W1 1667 TIP3 H1 HT 0.417000 1.0080 0 + 7490 W1 1667 TIP3 H2 HT 0.417000 1.0080 0 + 7491 W1 1668 TIP3 OH2 OT -0.834000 15.9994 0 + 7492 W1 1668 TIP3 H1 HT 0.417000 1.0080 0 + 7493 W1 1668 TIP3 H2 HT 0.417000 1.0080 0 + 7494 W1 1669 TIP3 OH2 OT -0.834000 15.9994 0 + 7495 W1 1669 TIP3 H1 HT 0.417000 1.0080 0 + 7496 W1 1669 TIP3 H2 HT 0.417000 1.0080 0 + 7497 W1 1670 TIP3 OH2 OT -0.834000 15.9994 0 + 7498 W1 1670 TIP3 H1 HT 0.417000 1.0080 0 + 7499 W1 1670 TIP3 H2 HT 0.417000 1.0080 0 + 7500 W1 1671 TIP3 OH2 OT -0.834000 15.9994 0 + 7501 W1 1671 TIP3 H1 HT 0.417000 1.0080 0 + 7502 W1 1671 TIP3 H2 HT 0.417000 1.0080 0 + 7503 W1 1672 TIP3 OH2 OT -0.834000 15.9994 0 + 7504 W1 1672 TIP3 H1 HT 0.417000 1.0080 0 + 7505 W1 1672 TIP3 H2 HT 0.417000 1.0080 0 + 7506 W1 1673 TIP3 OH2 OT -0.834000 15.9994 0 + 7507 W1 1673 TIP3 H1 HT 0.417000 1.0080 0 + 7508 W1 1673 TIP3 H2 HT 0.417000 1.0080 0 + 7509 W1 1674 TIP3 OH2 OT -0.834000 15.9994 0 + 7510 W1 1674 TIP3 H1 HT 0.417000 1.0080 0 + 7511 W1 1674 TIP3 H2 HT 0.417000 1.0080 0 + 7512 W1 1675 TIP3 OH2 OT -0.834000 15.9994 0 + 7513 W1 1675 TIP3 H1 HT 0.417000 1.0080 0 + 7514 W1 1675 TIP3 H2 HT 0.417000 1.0080 0 + 7515 W1 1676 TIP3 OH2 OT -0.834000 15.9994 0 + 7516 W1 1676 TIP3 H1 HT 0.417000 1.0080 0 + 7517 W1 1676 TIP3 H2 HT 0.417000 1.0080 0 + 7518 W1 1677 TIP3 OH2 OT -0.834000 15.9994 0 + 7519 W1 1677 TIP3 H1 HT 0.417000 1.0080 0 + 7520 W1 1677 TIP3 H2 HT 0.417000 1.0080 0 + 7521 W1 1678 TIP3 OH2 OT -0.834000 15.9994 0 + 7522 W1 1678 TIP3 H1 HT 0.417000 1.0080 0 + 7523 W1 1678 TIP3 H2 HT 0.417000 1.0080 0 + 7524 W1 1679 TIP3 OH2 OT -0.834000 15.9994 0 + 7525 W1 1679 TIP3 H1 HT 0.417000 1.0080 0 + 7526 W1 1679 TIP3 H2 HT 0.417000 1.0080 0 + 7527 W1 1680 TIP3 OH2 OT -0.834000 15.9994 0 + 7528 W1 1680 TIP3 H1 HT 0.417000 1.0080 0 + 7529 W1 1680 TIP3 H2 HT 0.417000 1.0080 0 + 7530 W1 1681 TIP3 OH2 OT -0.834000 15.9994 0 + 7531 W1 1681 TIP3 H1 HT 0.417000 1.0080 0 + 7532 W1 1681 TIP3 H2 HT 0.417000 1.0080 0 + 7533 W1 1682 TIP3 OH2 OT -0.834000 15.9994 0 + 7534 W1 1682 TIP3 H1 HT 0.417000 1.0080 0 + 7535 W1 1682 TIP3 H2 HT 0.417000 1.0080 0 + 7536 W1 1683 TIP3 OH2 OT -0.834000 15.9994 0 + 7537 W1 1683 TIP3 H1 HT 0.417000 1.0080 0 + 7538 W1 1683 TIP3 H2 HT 0.417000 1.0080 0 + 7539 W1 1684 TIP3 OH2 OT -0.834000 15.9994 0 + 7540 W1 1684 TIP3 H1 HT 0.417000 1.0080 0 + 7541 W1 1684 TIP3 H2 HT 0.417000 1.0080 0 + 7542 W1 1685 TIP3 OH2 OT -0.834000 15.9994 0 + 7543 W1 1685 TIP3 H1 HT 0.417000 1.0080 0 + 7544 W1 1685 TIP3 H2 HT 0.417000 1.0080 0 + 7545 W1 1686 TIP3 OH2 OT -0.834000 15.9994 0 + 7546 W1 1686 TIP3 H1 HT 0.417000 1.0080 0 + 7547 W1 1686 TIP3 H2 HT 0.417000 1.0080 0 + 7548 W1 1687 TIP3 OH2 OT -0.834000 15.9994 0 + 7549 W1 1687 TIP3 H1 HT 0.417000 1.0080 0 + 7550 W1 1687 TIP3 H2 HT 0.417000 1.0080 0 + 7551 W1 1688 TIP3 OH2 OT -0.834000 15.9994 0 + 7552 W1 1688 TIP3 H1 HT 0.417000 1.0080 0 + 7553 W1 1688 TIP3 H2 HT 0.417000 1.0080 0 + 7554 W1 1689 TIP3 OH2 OT -0.834000 15.9994 0 + 7555 W1 1689 TIP3 H1 HT 0.417000 1.0080 0 + 7556 W1 1689 TIP3 H2 HT 0.417000 1.0080 0 + 7557 W1 1690 TIP3 OH2 OT -0.834000 15.9994 0 + 7558 W1 1690 TIP3 H1 HT 0.417000 1.0080 0 + 7559 W1 1690 TIP3 H2 HT 0.417000 1.0080 0 + 7560 W1 1691 TIP3 OH2 OT -0.834000 15.9994 0 + 7561 W1 1691 TIP3 H1 HT 0.417000 1.0080 0 + 7562 W1 1691 TIP3 H2 HT 0.417000 1.0080 0 + 7563 W1 1692 TIP3 OH2 OT -0.834000 15.9994 0 + 7564 W1 1692 TIP3 H1 HT 0.417000 1.0080 0 + 7565 W1 1692 TIP3 H2 HT 0.417000 1.0080 0 + 7566 W1 1693 TIP3 OH2 OT -0.834000 15.9994 0 + 7567 W1 1693 TIP3 H1 HT 0.417000 1.0080 0 + 7568 W1 1693 TIP3 H2 HT 0.417000 1.0080 0 + 7569 W1 1694 TIP3 OH2 OT -0.834000 15.9994 0 + 7570 W1 1694 TIP3 H1 HT 0.417000 1.0080 0 + 7571 W1 1694 TIP3 H2 HT 0.417000 1.0080 0 + 7572 W1 1695 TIP3 OH2 OT -0.834000 15.9994 0 + 7573 W1 1695 TIP3 H1 HT 0.417000 1.0080 0 + 7574 W1 1695 TIP3 H2 HT 0.417000 1.0080 0 + 7575 W1 1696 TIP3 OH2 OT -0.834000 15.9994 0 + 7576 W1 1696 TIP3 H1 HT 0.417000 1.0080 0 + 7577 W1 1696 TIP3 H2 HT 0.417000 1.0080 0 + 7578 W1 1697 TIP3 OH2 OT -0.834000 15.9994 0 + 7579 W1 1697 TIP3 H1 HT 0.417000 1.0080 0 + 7580 W1 1697 TIP3 H2 HT 0.417000 1.0080 0 + 7581 W1 1698 TIP3 OH2 OT -0.834000 15.9994 0 + 7582 W1 1698 TIP3 H1 HT 0.417000 1.0080 0 + 7583 W1 1698 TIP3 H2 HT 0.417000 1.0080 0 + 7584 W1 1699 TIP3 OH2 OT -0.834000 15.9994 0 + 7585 W1 1699 TIP3 H1 HT 0.417000 1.0080 0 + 7586 W1 1699 TIP3 H2 HT 0.417000 1.0080 0 + 7587 W1 1700 TIP3 OH2 OT -0.834000 15.9994 0 + 7588 W1 1700 TIP3 H1 HT 0.417000 1.0080 0 + 7589 W1 1700 TIP3 H2 HT 0.417000 1.0080 0 + 7590 W1 1701 TIP3 OH2 OT -0.834000 15.9994 0 + 7591 W1 1701 TIP3 H1 HT 0.417000 1.0080 0 + 7592 W1 1701 TIP3 H2 HT 0.417000 1.0080 0 + 7593 W1 1702 TIP3 OH2 OT -0.834000 15.9994 0 + 7594 W1 1702 TIP3 H1 HT 0.417000 1.0080 0 + 7595 W1 1702 TIP3 H2 HT 0.417000 1.0080 0 + 7596 W1 1703 TIP3 OH2 OT -0.834000 15.9994 0 + 7597 W1 1703 TIP3 H1 HT 0.417000 1.0080 0 + 7598 W1 1703 TIP3 H2 HT 0.417000 1.0080 0 + 7599 W1 1704 TIP3 OH2 OT -0.834000 15.9994 0 + 7600 W1 1704 TIP3 H1 HT 0.417000 1.0080 0 + 7601 W1 1704 TIP3 H2 HT 0.417000 1.0080 0 + 7602 W1 1705 TIP3 OH2 OT -0.834000 15.9994 0 + 7603 W1 1705 TIP3 H1 HT 0.417000 1.0080 0 + 7604 W1 1705 TIP3 H2 HT 0.417000 1.0080 0 + 7605 W1 1706 TIP3 OH2 OT -0.834000 15.9994 0 + 7606 W1 1706 TIP3 H1 HT 0.417000 1.0080 0 + 7607 W1 1706 TIP3 H2 HT 0.417000 1.0080 0 + 7608 W1 1707 TIP3 OH2 OT -0.834000 15.9994 0 + 7609 W1 1707 TIP3 H1 HT 0.417000 1.0080 0 + 7610 W1 1707 TIP3 H2 HT 0.417000 1.0080 0 + 7611 W1 1708 TIP3 OH2 OT -0.834000 15.9994 0 + 7612 W1 1708 TIP3 H1 HT 0.417000 1.0080 0 + 7613 W1 1708 TIP3 H2 HT 0.417000 1.0080 0 + 7614 W1 1709 TIP3 OH2 OT -0.834000 15.9994 0 + 7615 W1 1709 TIP3 H1 HT 0.417000 1.0080 0 + 7616 W1 1709 TIP3 H2 HT 0.417000 1.0080 0 + 7617 W1 1710 TIP3 OH2 OT -0.834000 15.9994 0 + 7618 W1 1710 TIP3 H1 HT 0.417000 1.0080 0 + 7619 W1 1710 TIP3 H2 HT 0.417000 1.0080 0 + 7620 W1 1711 TIP3 OH2 OT -0.834000 15.9994 0 + 7621 W1 1711 TIP3 H1 HT 0.417000 1.0080 0 + 7622 W1 1711 TIP3 H2 HT 0.417000 1.0080 0 + 7623 W1 1712 TIP3 OH2 OT -0.834000 15.9994 0 + 7624 W1 1712 TIP3 H1 HT 0.417000 1.0080 0 + 7625 W1 1712 TIP3 H2 HT 0.417000 1.0080 0 + 7626 W1 1713 TIP3 OH2 OT -0.834000 15.9994 0 + 7627 W1 1713 TIP3 H1 HT 0.417000 1.0080 0 + 7628 W1 1713 TIP3 H2 HT 0.417000 1.0080 0 + 7629 W1 1714 TIP3 OH2 OT -0.834000 15.9994 0 + 7630 W1 1714 TIP3 H1 HT 0.417000 1.0080 0 + 7631 W1 1714 TIP3 H2 HT 0.417000 1.0080 0 + 7632 W1 1715 TIP3 OH2 OT -0.834000 15.9994 0 + 7633 W1 1715 TIP3 H1 HT 0.417000 1.0080 0 + 7634 W1 1715 TIP3 H2 HT 0.417000 1.0080 0 + 7635 W1 1716 TIP3 OH2 OT -0.834000 15.9994 0 + 7636 W1 1716 TIP3 H1 HT 0.417000 1.0080 0 + 7637 W1 1716 TIP3 H2 HT 0.417000 1.0080 0 + 7638 W1 1717 TIP3 OH2 OT -0.834000 15.9994 0 + 7639 W1 1717 TIP3 H1 HT 0.417000 1.0080 0 + 7640 W1 1717 TIP3 H2 HT 0.417000 1.0080 0 + 7641 W1 1718 TIP3 OH2 OT -0.834000 15.9994 0 + 7642 W1 1718 TIP3 H1 HT 0.417000 1.0080 0 + 7643 W1 1718 TIP3 H2 HT 0.417000 1.0080 0 + 7644 W1 1719 TIP3 OH2 OT -0.834000 15.9994 0 + 7645 W1 1719 TIP3 H1 HT 0.417000 1.0080 0 + 7646 W1 1719 TIP3 H2 HT 0.417000 1.0080 0 + 7647 W1 1720 TIP3 OH2 OT -0.834000 15.9994 0 + 7648 W1 1720 TIP3 H1 HT 0.417000 1.0080 0 + 7649 W1 1720 TIP3 H2 HT 0.417000 1.0080 0 + 7650 W1 1721 TIP3 OH2 OT -0.834000 15.9994 0 + 7651 W1 1721 TIP3 H1 HT 0.417000 1.0080 0 + 7652 W1 1721 TIP3 H2 HT 0.417000 1.0080 0 + 7653 W1 1722 TIP3 OH2 OT -0.834000 15.9994 0 + 7654 W1 1722 TIP3 H1 HT 0.417000 1.0080 0 + 7655 W1 1722 TIP3 H2 HT 0.417000 1.0080 0 + 7656 W1 1723 TIP3 OH2 OT -0.834000 15.9994 0 + 7657 W1 1723 TIP3 H1 HT 0.417000 1.0080 0 + 7658 W1 1723 TIP3 H2 HT 0.417000 1.0080 0 + 7659 W1 1724 TIP3 OH2 OT -0.834000 15.9994 0 + 7660 W1 1724 TIP3 H1 HT 0.417000 1.0080 0 + 7661 W1 1724 TIP3 H2 HT 0.417000 1.0080 0 + 7662 W1 1725 TIP3 OH2 OT -0.834000 15.9994 0 + 7663 W1 1725 TIP3 H1 HT 0.417000 1.0080 0 + 7664 W1 1725 TIP3 H2 HT 0.417000 1.0080 0 + 7665 W1 1726 TIP3 OH2 OT -0.834000 15.9994 0 + 7666 W1 1726 TIP3 H1 HT 0.417000 1.0080 0 + 7667 W1 1726 TIP3 H2 HT 0.417000 1.0080 0 + 7668 W1 1727 TIP3 OH2 OT -0.834000 15.9994 0 + 7669 W1 1727 TIP3 H1 HT 0.417000 1.0080 0 + 7670 W1 1727 TIP3 H2 HT 0.417000 1.0080 0 + 7671 W1 1728 TIP3 OH2 OT -0.834000 15.9994 0 + 7672 W1 1728 TIP3 H1 HT 0.417000 1.0080 0 + 7673 W1 1728 TIP3 H2 HT 0.417000 1.0080 0 + 7674 W1 1729 TIP3 OH2 OT -0.834000 15.9994 0 + 7675 W1 1729 TIP3 H1 HT 0.417000 1.0080 0 + 7676 W1 1729 TIP3 H2 HT 0.417000 1.0080 0 + 7677 W1 1730 TIP3 OH2 OT -0.834000 15.9994 0 + 7678 W1 1730 TIP3 H1 HT 0.417000 1.0080 0 + 7679 W1 1730 TIP3 H2 HT 0.417000 1.0080 0 + 7680 W1 1731 TIP3 OH2 OT -0.834000 15.9994 0 + 7681 W1 1731 TIP3 H1 HT 0.417000 1.0080 0 + 7682 W1 1731 TIP3 H2 HT 0.417000 1.0080 0 + 7683 W1 1732 TIP3 OH2 OT -0.834000 15.9994 0 + 7684 W1 1732 TIP3 H1 HT 0.417000 1.0080 0 + 7685 W1 1732 TIP3 H2 HT 0.417000 1.0080 0 + 7686 W1 1733 TIP3 OH2 OT -0.834000 15.9994 0 + 7687 W1 1733 TIP3 H1 HT 0.417000 1.0080 0 + 7688 W1 1733 TIP3 H2 HT 0.417000 1.0080 0 + 7689 W1 1734 TIP3 OH2 OT -0.834000 15.9994 0 + 7690 W1 1734 TIP3 H1 HT 0.417000 1.0080 0 + 7691 W1 1734 TIP3 H2 HT 0.417000 1.0080 0 + 7692 W1 1735 TIP3 OH2 OT -0.834000 15.9994 0 + 7693 W1 1735 TIP3 H1 HT 0.417000 1.0080 0 + 7694 W1 1735 TIP3 H2 HT 0.417000 1.0080 0 + 7695 W1 1736 TIP3 OH2 OT -0.834000 15.9994 0 + 7696 W1 1736 TIP3 H1 HT 0.417000 1.0080 0 + 7697 W1 1736 TIP3 H2 HT 0.417000 1.0080 0 + 7698 W1 1737 TIP3 OH2 OT -0.834000 15.9994 0 + 7699 W1 1737 TIP3 H1 HT 0.417000 1.0080 0 + 7700 W1 1737 TIP3 H2 HT 0.417000 1.0080 0 + 7701 W1 1738 TIP3 OH2 OT -0.834000 15.9994 0 + 7702 W1 1738 TIP3 H1 HT 0.417000 1.0080 0 + 7703 W1 1738 TIP3 H2 HT 0.417000 1.0080 0 + 7704 W1 1739 TIP3 OH2 OT -0.834000 15.9994 0 + 7705 W1 1739 TIP3 H1 HT 0.417000 1.0080 0 + 7706 W1 1739 TIP3 H2 HT 0.417000 1.0080 0 + 7707 W1 1740 TIP3 OH2 OT -0.834000 15.9994 0 + 7708 W1 1740 TIP3 H1 HT 0.417000 1.0080 0 + 7709 W1 1740 TIP3 H2 HT 0.417000 1.0080 0 + 7710 W1 1741 TIP3 OH2 OT -0.834000 15.9994 0 + 7711 W1 1741 TIP3 H1 HT 0.417000 1.0080 0 + 7712 W1 1741 TIP3 H2 HT 0.417000 1.0080 0 + 7713 W1 1742 TIP3 OH2 OT -0.834000 15.9994 0 + 7714 W1 1742 TIP3 H1 HT 0.417000 1.0080 0 + 7715 W1 1742 TIP3 H2 HT 0.417000 1.0080 0 + 7716 W1 1743 TIP3 OH2 OT -0.834000 15.9994 0 + 7717 W1 1743 TIP3 H1 HT 0.417000 1.0080 0 + 7718 W1 1743 TIP3 H2 HT 0.417000 1.0080 0 + 7719 W1 1744 TIP3 OH2 OT -0.834000 15.9994 0 + 7720 W1 1744 TIP3 H1 HT 0.417000 1.0080 0 + 7721 W1 1744 TIP3 H2 HT 0.417000 1.0080 0 + 7722 W1 1745 TIP3 OH2 OT -0.834000 15.9994 0 + 7723 W1 1745 TIP3 H1 HT 0.417000 1.0080 0 + 7724 W1 1745 TIP3 H2 HT 0.417000 1.0080 0 + 7725 W1 1746 TIP3 OH2 OT -0.834000 15.9994 0 + 7726 W1 1746 TIP3 H1 HT 0.417000 1.0080 0 + 7727 W1 1746 TIP3 H2 HT 0.417000 1.0080 0 + 7728 W1 1747 TIP3 OH2 OT -0.834000 15.9994 0 + 7729 W1 1747 TIP3 H1 HT 0.417000 1.0080 0 + 7730 W1 1747 TIP3 H2 HT 0.417000 1.0080 0 + 7731 W1 1748 TIP3 OH2 OT -0.834000 15.9994 0 + 7732 W1 1748 TIP3 H1 HT 0.417000 1.0080 0 + 7733 W1 1748 TIP3 H2 HT 0.417000 1.0080 0 + 7734 W1 1749 TIP3 OH2 OT -0.834000 15.9994 0 + 7735 W1 1749 TIP3 H1 HT 0.417000 1.0080 0 + 7736 W1 1749 TIP3 H2 HT 0.417000 1.0080 0 + 7737 W1 1750 TIP3 OH2 OT -0.834000 15.9994 0 + 7738 W1 1750 TIP3 H1 HT 0.417000 1.0080 0 + 7739 W1 1750 TIP3 H2 HT 0.417000 1.0080 0 + 7740 W1 1751 TIP3 OH2 OT -0.834000 15.9994 0 + 7741 W1 1751 TIP3 H1 HT 0.417000 1.0080 0 + 7742 W1 1751 TIP3 H2 HT 0.417000 1.0080 0 + 7743 W1 1752 TIP3 OH2 OT -0.834000 15.9994 0 + 7744 W1 1752 TIP3 H1 HT 0.417000 1.0080 0 + 7745 W1 1752 TIP3 H2 HT 0.417000 1.0080 0 + 7746 W1 1753 TIP3 OH2 OT -0.834000 15.9994 0 + 7747 W1 1753 TIP3 H1 HT 0.417000 1.0080 0 + 7748 W1 1753 TIP3 H2 HT 0.417000 1.0080 0 + 7749 W1 1754 TIP3 OH2 OT -0.834000 15.9994 0 + 7750 W1 1754 TIP3 H1 HT 0.417000 1.0080 0 + 7751 W1 1754 TIP3 H2 HT 0.417000 1.0080 0 + 7752 W1 1755 TIP3 OH2 OT -0.834000 15.9994 0 + 7753 W1 1755 TIP3 H1 HT 0.417000 1.0080 0 + 7754 W1 1755 TIP3 H2 HT 0.417000 1.0080 0 + 7755 W1 1756 TIP3 OH2 OT -0.834000 15.9994 0 + 7756 W1 1756 TIP3 H1 HT 0.417000 1.0080 0 + 7757 W1 1756 TIP3 H2 HT 0.417000 1.0080 0 + 7758 W1 1757 TIP3 OH2 OT -0.834000 15.9994 0 + 7759 W1 1757 TIP3 H1 HT 0.417000 1.0080 0 + 7760 W1 1757 TIP3 H2 HT 0.417000 1.0080 0 + 7761 W1 1758 TIP3 OH2 OT -0.834000 15.9994 0 + 7762 W1 1758 TIP3 H1 HT 0.417000 1.0080 0 + 7763 W1 1758 TIP3 H2 HT 0.417000 1.0080 0 + 7764 W1 1759 TIP3 OH2 OT -0.834000 15.9994 0 + 7765 W1 1759 TIP3 H1 HT 0.417000 1.0080 0 + 7766 W1 1759 TIP3 H2 HT 0.417000 1.0080 0 + 7767 W1 1760 TIP3 OH2 OT -0.834000 15.9994 0 + 7768 W1 1760 TIP3 H1 HT 0.417000 1.0080 0 + 7769 W1 1760 TIP3 H2 HT 0.417000 1.0080 0 + 7770 W1 1761 TIP3 OH2 OT -0.834000 15.9994 0 + 7771 W1 1761 TIP3 H1 HT 0.417000 1.0080 0 + 7772 W1 1761 TIP3 H2 HT 0.417000 1.0080 0 + 7773 W1 1762 TIP3 OH2 OT -0.834000 15.9994 0 + 7774 W1 1762 TIP3 H1 HT 0.417000 1.0080 0 + 7775 W1 1762 TIP3 H2 HT 0.417000 1.0080 0 + 7776 W1 1763 TIP3 OH2 OT -0.834000 15.9994 0 + 7777 W1 1763 TIP3 H1 HT 0.417000 1.0080 0 + 7778 W1 1763 TIP3 H2 HT 0.417000 1.0080 0 + 7779 W1 1764 TIP3 OH2 OT -0.834000 15.9994 0 + 7780 W1 1764 TIP3 H1 HT 0.417000 1.0080 0 + 7781 W1 1764 TIP3 H2 HT 0.417000 1.0080 0 + 7782 W1 1765 TIP3 OH2 OT -0.834000 15.9994 0 + 7783 W1 1765 TIP3 H1 HT 0.417000 1.0080 0 + 7784 W1 1765 TIP3 H2 HT 0.417000 1.0080 0 + 7785 W1 1766 TIP3 OH2 OT -0.834000 15.9994 0 + 7786 W1 1766 TIP3 H1 HT 0.417000 1.0080 0 + 7787 W1 1766 TIP3 H2 HT 0.417000 1.0080 0 + 7788 W1 1767 TIP3 OH2 OT -0.834000 15.9994 0 + 7789 W1 1767 TIP3 H1 HT 0.417000 1.0080 0 + 7790 W1 1767 TIP3 H2 HT 0.417000 1.0080 0 + 7791 W1 1768 TIP3 OH2 OT -0.834000 15.9994 0 + 7792 W1 1768 TIP3 H1 HT 0.417000 1.0080 0 + 7793 W1 1768 TIP3 H2 HT 0.417000 1.0080 0 + 7794 W1 1769 TIP3 OH2 OT -0.834000 15.9994 0 + 7795 W1 1769 TIP3 H1 HT 0.417000 1.0080 0 + 7796 W1 1769 TIP3 H2 HT 0.417000 1.0080 0 + 7797 W1 1770 TIP3 OH2 OT -0.834000 15.9994 0 + 7798 W1 1770 TIP3 H1 HT 0.417000 1.0080 0 + 7799 W1 1770 TIP3 H2 HT 0.417000 1.0080 0 + 7800 W1 1771 TIP3 OH2 OT -0.834000 15.9994 0 + 7801 W1 1771 TIP3 H1 HT 0.417000 1.0080 0 + 7802 W1 1771 TIP3 H2 HT 0.417000 1.0080 0 + 7803 W1 1772 TIP3 OH2 OT -0.834000 15.9994 0 + 7804 W1 1772 TIP3 H1 HT 0.417000 1.0080 0 + 7805 W1 1772 TIP3 H2 HT 0.417000 1.0080 0 + 7806 W1 1773 TIP3 OH2 OT -0.834000 15.9994 0 + 7807 W1 1773 TIP3 H1 HT 0.417000 1.0080 0 + 7808 W1 1773 TIP3 H2 HT 0.417000 1.0080 0 + 7809 W1 1774 TIP3 OH2 OT -0.834000 15.9994 0 + 7810 W1 1774 TIP3 H1 HT 0.417000 1.0080 0 + 7811 W1 1774 TIP3 H2 HT 0.417000 1.0080 0 + 7812 W1 1775 TIP3 OH2 OT -0.834000 15.9994 0 + 7813 W1 1775 TIP3 H1 HT 0.417000 1.0080 0 + 7814 W1 1775 TIP3 H2 HT 0.417000 1.0080 0 + 7815 W1 1776 TIP3 OH2 OT -0.834000 15.9994 0 + 7816 W1 1776 TIP3 H1 HT 0.417000 1.0080 0 + 7817 W1 1776 TIP3 H2 HT 0.417000 1.0080 0 + 7818 W1 1777 TIP3 OH2 OT -0.834000 15.9994 0 + 7819 W1 1777 TIP3 H1 HT 0.417000 1.0080 0 + 7820 W1 1777 TIP3 H2 HT 0.417000 1.0080 0 + 7821 W1 1778 TIP3 OH2 OT -0.834000 15.9994 0 + 7822 W1 1778 TIP3 H1 HT 0.417000 1.0080 0 + 7823 W1 1778 TIP3 H2 HT 0.417000 1.0080 0 + 7824 W1 1779 TIP3 OH2 OT -0.834000 15.9994 0 + 7825 W1 1779 TIP3 H1 HT 0.417000 1.0080 0 + 7826 W1 1779 TIP3 H2 HT 0.417000 1.0080 0 + 7827 W1 1780 TIP3 OH2 OT -0.834000 15.9994 0 + 7828 W1 1780 TIP3 H1 HT 0.417000 1.0080 0 + 7829 W1 1780 TIP3 H2 HT 0.417000 1.0080 0 + 7830 W1 1781 TIP3 OH2 OT -0.834000 15.9994 0 + 7831 W1 1781 TIP3 H1 HT 0.417000 1.0080 0 + 7832 W1 1781 TIP3 H2 HT 0.417000 1.0080 0 + 7833 W1 1782 TIP3 OH2 OT -0.834000 15.9994 0 + 7834 W1 1782 TIP3 H1 HT 0.417000 1.0080 0 + 7835 W1 1782 TIP3 H2 HT 0.417000 1.0080 0 + 7836 W1 1783 TIP3 OH2 OT -0.834000 15.9994 0 + 7837 W1 1783 TIP3 H1 HT 0.417000 1.0080 0 + 7838 W1 1783 TIP3 H2 HT 0.417000 1.0080 0 + 7839 W1 1784 TIP3 OH2 OT -0.834000 15.9994 0 + 7840 W1 1784 TIP3 H1 HT 0.417000 1.0080 0 + 7841 W1 1784 TIP3 H2 HT 0.417000 1.0080 0 + 7842 W1 1785 TIP3 OH2 OT -0.834000 15.9994 0 + 7843 W1 1785 TIP3 H1 HT 0.417000 1.0080 0 + 7844 W1 1785 TIP3 H2 HT 0.417000 1.0080 0 + 7845 W1 1786 TIP3 OH2 OT -0.834000 15.9994 0 + 7846 W1 1786 TIP3 H1 HT 0.417000 1.0080 0 + 7847 W1 1786 TIP3 H2 HT 0.417000 1.0080 0 + 7848 W1 1787 TIP3 OH2 OT -0.834000 15.9994 0 + 7849 W1 1787 TIP3 H1 HT 0.417000 1.0080 0 + 7850 W1 1787 TIP3 H2 HT 0.417000 1.0080 0 + 7851 W1 1788 TIP3 OH2 OT -0.834000 15.9994 0 + 7852 W1 1788 TIP3 H1 HT 0.417000 1.0080 0 + 7853 W1 1788 TIP3 H2 HT 0.417000 1.0080 0 + 7854 W1 1789 TIP3 OH2 OT -0.834000 15.9994 0 + 7855 W1 1789 TIP3 H1 HT 0.417000 1.0080 0 + 7856 W1 1789 TIP3 H2 HT 0.417000 1.0080 0 + 7857 W1 1790 TIP3 OH2 OT -0.834000 15.9994 0 + 7858 W1 1790 TIP3 H1 HT 0.417000 1.0080 0 + 7859 W1 1790 TIP3 H2 HT 0.417000 1.0080 0 + 7860 W1 1791 TIP3 OH2 OT -0.834000 15.9994 0 + 7861 W1 1791 TIP3 H1 HT 0.417000 1.0080 0 + 7862 W1 1791 TIP3 H2 HT 0.417000 1.0080 0 + 7863 W1 1792 TIP3 OH2 OT -0.834000 15.9994 0 + 7864 W1 1792 TIP3 H1 HT 0.417000 1.0080 0 + 7865 W1 1792 TIP3 H2 HT 0.417000 1.0080 0 + 7866 W1 1793 TIP3 OH2 OT -0.834000 15.9994 0 + 7867 W1 1793 TIP3 H1 HT 0.417000 1.0080 0 + 7868 W1 1793 TIP3 H2 HT 0.417000 1.0080 0 + 7869 W1 1794 TIP3 OH2 OT -0.834000 15.9994 0 + 7870 W1 1794 TIP3 H1 HT 0.417000 1.0080 0 + 7871 W1 1794 TIP3 H2 HT 0.417000 1.0080 0 + 7872 W1 1795 TIP3 OH2 OT -0.834000 15.9994 0 + 7873 W1 1795 TIP3 H1 HT 0.417000 1.0080 0 + 7874 W1 1795 TIP3 H2 HT 0.417000 1.0080 0 + 7875 W1 1796 TIP3 OH2 OT -0.834000 15.9994 0 + 7876 W1 1796 TIP3 H1 HT 0.417000 1.0080 0 + 7877 W1 1796 TIP3 H2 HT 0.417000 1.0080 0 + 7878 W1 1797 TIP3 OH2 OT -0.834000 15.9994 0 + 7879 W1 1797 TIP3 H1 HT 0.417000 1.0080 0 + 7880 W1 1797 TIP3 H2 HT 0.417000 1.0080 0 + 7881 W1 1798 TIP3 OH2 OT -0.834000 15.9994 0 + 7882 W1 1798 TIP3 H1 HT 0.417000 1.0080 0 + 7883 W1 1798 TIP3 H2 HT 0.417000 1.0080 0 + 7884 W1 1799 TIP3 OH2 OT -0.834000 15.9994 0 + 7885 W1 1799 TIP3 H1 HT 0.417000 1.0080 0 + 7886 W1 1799 TIP3 H2 HT 0.417000 1.0080 0 + 7887 W1 1800 TIP3 OH2 OT -0.834000 15.9994 0 + 7888 W1 1800 TIP3 H1 HT 0.417000 1.0080 0 + 7889 W1 1800 TIP3 H2 HT 0.417000 1.0080 0 + 7890 W1 1801 TIP3 OH2 OT -0.834000 15.9994 0 + 7891 W1 1801 TIP3 H1 HT 0.417000 1.0080 0 + 7892 W1 1801 TIP3 H2 HT 0.417000 1.0080 0 + 7893 W1 1802 TIP3 OH2 OT -0.834000 15.9994 0 + 7894 W1 1802 TIP3 H1 HT 0.417000 1.0080 0 + 7895 W1 1802 TIP3 H2 HT 0.417000 1.0080 0 + 7896 W1 1803 TIP3 OH2 OT -0.834000 15.9994 0 + 7897 W1 1803 TIP3 H1 HT 0.417000 1.0080 0 + 7898 W1 1803 TIP3 H2 HT 0.417000 1.0080 0 + 7899 W1 1804 TIP3 OH2 OT -0.834000 15.9994 0 + 7900 W1 1804 TIP3 H1 HT 0.417000 1.0080 0 + 7901 W1 1804 TIP3 H2 HT 0.417000 1.0080 0 + 7902 W1 1805 TIP3 OH2 OT -0.834000 15.9994 0 + 7903 W1 1805 TIP3 H1 HT 0.417000 1.0080 0 + 7904 W1 1805 TIP3 H2 HT 0.417000 1.0080 0 + 7905 W1 1806 TIP3 OH2 OT -0.834000 15.9994 0 + 7906 W1 1806 TIP3 H1 HT 0.417000 1.0080 0 + 7907 W1 1806 TIP3 H2 HT 0.417000 1.0080 0 + 7908 W1 1807 TIP3 OH2 OT -0.834000 15.9994 0 + 7909 W1 1807 TIP3 H1 HT 0.417000 1.0080 0 + 7910 W1 1807 TIP3 H2 HT 0.417000 1.0080 0 + 7911 W1 1808 TIP3 OH2 OT -0.834000 15.9994 0 + 7912 W1 1808 TIP3 H1 HT 0.417000 1.0080 0 + 7913 W1 1808 TIP3 H2 HT 0.417000 1.0080 0 + 7914 W1 1809 TIP3 OH2 OT -0.834000 15.9994 0 + 7915 W1 1809 TIP3 H1 HT 0.417000 1.0080 0 + 7916 W1 1809 TIP3 H2 HT 0.417000 1.0080 0 + 7917 W1 1810 TIP3 OH2 OT -0.834000 15.9994 0 + 7918 W1 1810 TIP3 H1 HT 0.417000 1.0080 0 + 7919 W1 1810 TIP3 H2 HT 0.417000 1.0080 0 + 7920 W1 1811 TIP3 OH2 OT -0.834000 15.9994 0 + 7921 W1 1811 TIP3 H1 HT 0.417000 1.0080 0 + 7922 W1 1811 TIP3 H2 HT 0.417000 1.0080 0 + 7923 W1 1812 TIP3 OH2 OT -0.834000 15.9994 0 + 7924 W1 1812 TIP3 H1 HT 0.417000 1.0080 0 + 7925 W1 1812 TIP3 H2 HT 0.417000 1.0080 0 + 7926 W1 1813 TIP3 OH2 OT -0.834000 15.9994 0 + 7927 W1 1813 TIP3 H1 HT 0.417000 1.0080 0 + 7928 W1 1813 TIP3 H2 HT 0.417000 1.0080 0 + 7929 W1 1814 TIP3 OH2 OT -0.834000 15.9994 0 + 7930 W1 1814 TIP3 H1 HT 0.417000 1.0080 0 + 7931 W1 1814 TIP3 H2 HT 0.417000 1.0080 0 + 7932 W1 1815 TIP3 OH2 OT -0.834000 15.9994 0 + 7933 W1 1815 TIP3 H1 HT 0.417000 1.0080 0 + 7934 W1 1815 TIP3 H2 HT 0.417000 1.0080 0 + 7935 W1 1816 TIP3 OH2 OT -0.834000 15.9994 0 + 7936 W1 1816 TIP3 H1 HT 0.417000 1.0080 0 + 7937 W1 1816 TIP3 H2 HT 0.417000 1.0080 0 + 7938 W1 1817 TIP3 OH2 OT -0.834000 15.9994 0 + 7939 W1 1817 TIP3 H1 HT 0.417000 1.0080 0 + 7940 W1 1817 TIP3 H2 HT 0.417000 1.0080 0 + 7941 W1 1818 TIP3 OH2 OT -0.834000 15.9994 0 + 7942 W1 1818 TIP3 H1 HT 0.417000 1.0080 0 + 7943 W1 1818 TIP3 H2 HT 0.417000 1.0080 0 + 7944 W1 1819 TIP3 OH2 OT -0.834000 15.9994 0 + 7945 W1 1819 TIP3 H1 HT 0.417000 1.0080 0 + 7946 W1 1819 TIP3 H2 HT 0.417000 1.0080 0 + 7947 W1 1820 TIP3 OH2 OT -0.834000 15.9994 0 + 7948 W1 1820 TIP3 H1 HT 0.417000 1.0080 0 + 7949 W1 1820 TIP3 H2 HT 0.417000 1.0080 0 + 7950 W1 1821 TIP3 OH2 OT -0.834000 15.9994 0 + 7951 W1 1821 TIP3 H1 HT 0.417000 1.0080 0 + 7952 W1 1821 TIP3 H2 HT 0.417000 1.0080 0 + 7953 W1 1822 TIP3 OH2 OT -0.834000 15.9994 0 + 7954 W1 1822 TIP3 H1 HT 0.417000 1.0080 0 + 7955 W1 1822 TIP3 H2 HT 0.417000 1.0080 0 + 7956 W1 1823 TIP3 OH2 OT -0.834000 15.9994 0 + 7957 W1 1823 TIP3 H1 HT 0.417000 1.0080 0 + 7958 W1 1823 TIP3 H2 HT 0.417000 1.0080 0 + 7959 W1 1824 TIP3 OH2 OT -0.834000 15.9994 0 + 7960 W1 1824 TIP3 H1 HT 0.417000 1.0080 0 + 7961 W1 1824 TIP3 H2 HT 0.417000 1.0080 0 + 7962 W1 1825 TIP3 OH2 OT -0.834000 15.9994 0 + 7963 W1 1825 TIP3 H1 HT 0.417000 1.0080 0 + 7964 W1 1825 TIP3 H2 HT 0.417000 1.0080 0 + 7965 W1 1826 TIP3 OH2 OT -0.834000 15.9994 0 + 7966 W1 1826 TIP3 H1 HT 0.417000 1.0080 0 + 7967 W1 1826 TIP3 H2 HT 0.417000 1.0080 0 + 7968 W1 1827 TIP3 OH2 OT -0.834000 15.9994 0 + 7969 W1 1827 TIP3 H1 HT 0.417000 1.0080 0 + 7970 W1 1827 TIP3 H2 HT 0.417000 1.0080 0 + 7971 W1 1828 TIP3 OH2 OT -0.834000 15.9994 0 + 7972 W1 1828 TIP3 H1 HT 0.417000 1.0080 0 + 7973 W1 1828 TIP3 H2 HT 0.417000 1.0080 0 + 7974 W1 1829 TIP3 OH2 OT -0.834000 15.9994 0 + 7975 W1 1829 TIP3 H1 HT 0.417000 1.0080 0 + 7976 W1 1829 TIP3 H2 HT 0.417000 1.0080 0 + 7977 W1 1830 TIP3 OH2 OT -0.834000 15.9994 0 + 7978 W1 1830 TIP3 H1 HT 0.417000 1.0080 0 + 7979 W1 1830 TIP3 H2 HT 0.417000 1.0080 0 + 7980 W1 1831 TIP3 OH2 OT -0.834000 15.9994 0 + 7981 W1 1831 TIP3 H1 HT 0.417000 1.0080 0 + 7982 W1 1831 TIP3 H2 HT 0.417000 1.0080 0 + 7983 W1 1832 TIP3 OH2 OT -0.834000 15.9994 0 + 7984 W1 1832 TIP3 H1 HT 0.417000 1.0080 0 + 7985 W1 1832 TIP3 H2 HT 0.417000 1.0080 0 + 7986 W1 1833 TIP3 OH2 OT -0.834000 15.9994 0 + 7987 W1 1833 TIP3 H1 HT 0.417000 1.0080 0 + 7988 W1 1833 TIP3 H2 HT 0.417000 1.0080 0 + 7989 W1 1834 TIP3 OH2 OT -0.834000 15.9994 0 + 7990 W1 1834 TIP3 H1 HT 0.417000 1.0080 0 + 7991 W1 1834 TIP3 H2 HT 0.417000 1.0080 0 + 7992 W1 1835 TIP3 OH2 OT -0.834000 15.9994 0 + 7993 W1 1835 TIP3 H1 HT 0.417000 1.0080 0 + 7994 W1 1835 TIP3 H2 HT 0.417000 1.0080 0 + 7995 W1 1836 TIP3 OH2 OT -0.834000 15.9994 0 + 7996 W1 1836 TIP3 H1 HT 0.417000 1.0080 0 + 7997 W1 1836 TIP3 H2 HT 0.417000 1.0080 0 + 7998 W1 1837 TIP3 OH2 OT -0.834000 15.9994 0 + 7999 W1 1837 TIP3 H1 HT 0.417000 1.0080 0 + 8000 W1 1837 TIP3 H2 HT 0.417000 1.0080 0 + 8001 W1 1838 TIP3 OH2 OT -0.834000 15.9994 0 + 8002 W1 1838 TIP3 H1 HT 0.417000 1.0080 0 + 8003 W1 1838 TIP3 H2 HT 0.417000 1.0080 0 + 8004 W1 1839 TIP3 OH2 OT -0.834000 15.9994 0 + 8005 W1 1839 TIP3 H1 HT 0.417000 1.0080 0 + 8006 W1 1839 TIP3 H2 HT 0.417000 1.0080 0 + 8007 W1 1840 TIP3 OH2 OT -0.834000 15.9994 0 + 8008 W1 1840 TIP3 H1 HT 0.417000 1.0080 0 + 8009 W1 1840 TIP3 H2 HT 0.417000 1.0080 0 + 8010 W1 1841 TIP3 OH2 OT -0.834000 15.9994 0 + 8011 W1 1841 TIP3 H1 HT 0.417000 1.0080 0 + 8012 W1 1841 TIP3 H2 HT 0.417000 1.0080 0 + 8013 W1 1842 TIP3 OH2 OT -0.834000 15.9994 0 + 8014 W1 1842 TIP3 H1 HT 0.417000 1.0080 0 + 8015 W1 1842 TIP3 H2 HT 0.417000 1.0080 0 + 8016 W1 1843 TIP3 OH2 OT -0.834000 15.9994 0 + 8017 W1 1843 TIP3 H1 HT 0.417000 1.0080 0 + 8018 W1 1843 TIP3 H2 HT 0.417000 1.0080 0 + 8019 W1 1844 TIP3 OH2 OT -0.834000 15.9994 0 + 8020 W1 1844 TIP3 H1 HT 0.417000 1.0080 0 + 8021 W1 1844 TIP3 H2 HT 0.417000 1.0080 0 + 8022 W1 1845 TIP3 OH2 OT -0.834000 15.9994 0 + 8023 W1 1845 TIP3 H1 HT 0.417000 1.0080 0 + 8024 W1 1845 TIP3 H2 HT 0.417000 1.0080 0 + 8025 W1 1846 TIP3 OH2 OT -0.834000 15.9994 0 + 8026 W1 1846 TIP3 H1 HT 0.417000 1.0080 0 + 8027 W1 1846 TIP3 H2 HT 0.417000 1.0080 0 + 8028 W1 1847 TIP3 OH2 OT -0.834000 15.9994 0 + 8029 W1 1847 TIP3 H1 HT 0.417000 1.0080 0 + 8030 W1 1847 TIP3 H2 HT 0.417000 1.0080 0 + 8031 W1 1848 TIP3 OH2 OT -0.834000 15.9994 0 + 8032 W1 1848 TIP3 H1 HT 0.417000 1.0080 0 + 8033 W1 1848 TIP3 H2 HT 0.417000 1.0080 0 + 8034 W1 1849 TIP3 OH2 OT -0.834000 15.9994 0 + 8035 W1 1849 TIP3 H1 HT 0.417000 1.0080 0 + 8036 W1 1849 TIP3 H2 HT 0.417000 1.0080 0 + 8037 W1 1850 TIP3 OH2 OT -0.834000 15.9994 0 + 8038 W1 1850 TIP3 H1 HT 0.417000 1.0080 0 + 8039 W1 1850 TIP3 H2 HT 0.417000 1.0080 0 + 8040 W1 1851 TIP3 OH2 OT -0.834000 15.9994 0 + 8041 W1 1851 TIP3 H1 HT 0.417000 1.0080 0 + 8042 W1 1851 TIP3 H2 HT 0.417000 1.0080 0 + 8043 W1 1852 TIP3 OH2 OT -0.834000 15.9994 0 + 8044 W1 1852 TIP3 H1 HT 0.417000 1.0080 0 + 8045 W1 1852 TIP3 H2 HT 0.417000 1.0080 0 + 8046 W1 1853 TIP3 OH2 OT -0.834000 15.9994 0 + 8047 W1 1853 TIP3 H1 HT 0.417000 1.0080 0 + 8048 W1 1853 TIP3 H2 HT 0.417000 1.0080 0 + 8049 W1 1854 TIP3 OH2 OT -0.834000 15.9994 0 + 8050 W1 1854 TIP3 H1 HT 0.417000 1.0080 0 + 8051 W1 1854 TIP3 H2 HT 0.417000 1.0080 0 + 8052 W1 1855 TIP3 OH2 OT -0.834000 15.9994 0 + 8053 W1 1855 TIP3 H1 HT 0.417000 1.0080 0 + 8054 W1 1855 TIP3 H2 HT 0.417000 1.0080 0 + 8055 W1 1856 TIP3 OH2 OT -0.834000 15.9994 0 + 8056 W1 1856 TIP3 H1 HT 0.417000 1.0080 0 + 8057 W1 1856 TIP3 H2 HT 0.417000 1.0080 0 + 8058 W1 1857 TIP3 OH2 OT -0.834000 15.9994 0 + 8059 W1 1857 TIP3 H1 HT 0.417000 1.0080 0 + 8060 W1 1857 TIP3 H2 HT 0.417000 1.0080 0 + 8061 W1 1858 TIP3 OH2 OT -0.834000 15.9994 0 + 8062 W1 1858 TIP3 H1 HT 0.417000 1.0080 0 + 8063 W1 1858 TIP3 H2 HT 0.417000 1.0080 0 + 8064 W1 1859 TIP3 OH2 OT -0.834000 15.9994 0 + 8065 W1 1859 TIP3 H1 HT 0.417000 1.0080 0 + 8066 W1 1859 TIP3 H2 HT 0.417000 1.0080 0 + 8067 W1 1860 TIP3 OH2 OT -0.834000 15.9994 0 + 8068 W1 1860 TIP3 H1 HT 0.417000 1.0080 0 + 8069 W1 1860 TIP3 H2 HT 0.417000 1.0080 0 + 8070 W1 1861 TIP3 OH2 OT -0.834000 15.9994 0 + 8071 W1 1861 TIP3 H1 HT 0.417000 1.0080 0 + 8072 W1 1861 TIP3 H2 HT 0.417000 1.0080 0 + 8073 W1 1862 TIP3 OH2 OT -0.834000 15.9994 0 + 8074 W1 1862 TIP3 H1 HT 0.417000 1.0080 0 + 8075 W1 1862 TIP3 H2 HT 0.417000 1.0080 0 + 8076 W1 1863 TIP3 OH2 OT -0.834000 15.9994 0 + 8077 W1 1863 TIP3 H1 HT 0.417000 1.0080 0 + 8078 W1 1863 TIP3 H2 HT 0.417000 1.0080 0 + 8079 W1 1864 TIP3 OH2 OT -0.834000 15.9994 0 + 8080 W1 1864 TIP3 H1 HT 0.417000 1.0080 0 + 8081 W1 1864 TIP3 H2 HT 0.417000 1.0080 0 + 8082 W1 1865 TIP3 OH2 OT -0.834000 15.9994 0 + 8083 W1 1865 TIP3 H1 HT 0.417000 1.0080 0 + 8084 W1 1865 TIP3 H2 HT 0.417000 1.0080 0 + 8085 W1 1866 TIP3 OH2 OT -0.834000 15.9994 0 + 8086 W1 1866 TIP3 H1 HT 0.417000 1.0080 0 + 8087 W1 1866 TIP3 H2 HT 0.417000 1.0080 0 + 8088 W1 1867 TIP3 OH2 OT -0.834000 15.9994 0 + 8089 W1 1867 TIP3 H1 HT 0.417000 1.0080 0 + 8090 W1 1867 TIP3 H2 HT 0.417000 1.0080 0 + 8091 W1 1868 TIP3 OH2 OT -0.834000 15.9994 0 + 8092 W1 1868 TIP3 H1 HT 0.417000 1.0080 0 + 8093 W1 1868 TIP3 H2 HT 0.417000 1.0080 0 + 8094 W1 1869 TIP3 OH2 OT -0.834000 15.9994 0 + 8095 W1 1869 TIP3 H1 HT 0.417000 1.0080 0 + 8096 W1 1869 TIP3 H2 HT 0.417000 1.0080 0 + 8097 W1 1870 TIP3 OH2 OT -0.834000 15.9994 0 + 8098 W1 1870 TIP3 H1 HT 0.417000 1.0080 0 + 8099 W1 1870 TIP3 H2 HT 0.417000 1.0080 0 + 8100 W1 1871 TIP3 OH2 OT -0.834000 15.9994 0 + 8101 W1 1871 TIP3 H1 HT 0.417000 1.0080 0 + 8102 W1 1871 TIP3 H2 HT 0.417000 1.0080 0 + 8103 W1 1872 TIP3 OH2 OT -0.834000 15.9994 0 + 8104 W1 1872 TIP3 H1 HT 0.417000 1.0080 0 + 8105 W1 1872 TIP3 H2 HT 0.417000 1.0080 0 + 8106 W1 1873 TIP3 OH2 OT -0.834000 15.9994 0 + 8107 W1 1873 TIP3 H1 HT 0.417000 1.0080 0 + 8108 W1 1873 TIP3 H2 HT 0.417000 1.0080 0 + 8109 W1 1874 TIP3 OH2 OT -0.834000 15.9994 0 + 8110 W1 1874 TIP3 H1 HT 0.417000 1.0080 0 + 8111 W1 1874 TIP3 H2 HT 0.417000 1.0080 0 + 8112 W1 1875 TIP3 OH2 OT -0.834000 15.9994 0 + 8113 W1 1875 TIP3 H1 HT 0.417000 1.0080 0 + 8114 W1 1875 TIP3 H2 HT 0.417000 1.0080 0 + 8115 W1 1876 TIP3 OH2 OT -0.834000 15.9994 0 + 8116 W1 1876 TIP3 H1 HT 0.417000 1.0080 0 + 8117 W1 1876 TIP3 H2 HT 0.417000 1.0080 0 + 8118 W1 1877 TIP3 OH2 OT -0.834000 15.9994 0 + 8119 W1 1877 TIP3 H1 HT 0.417000 1.0080 0 + 8120 W1 1877 TIP3 H2 HT 0.417000 1.0080 0 + 8121 W1 1878 TIP3 OH2 OT -0.834000 15.9994 0 + 8122 W1 1878 TIP3 H1 HT 0.417000 1.0080 0 + 8123 W1 1878 TIP3 H2 HT 0.417000 1.0080 0 + 8124 W1 1879 TIP3 OH2 OT -0.834000 15.9994 0 + 8125 W1 1879 TIP3 H1 HT 0.417000 1.0080 0 + 8126 W1 1879 TIP3 H2 HT 0.417000 1.0080 0 + 8127 W1 1880 TIP3 OH2 OT -0.834000 15.9994 0 + 8128 W1 1880 TIP3 H1 HT 0.417000 1.0080 0 + 8129 W1 1880 TIP3 H2 HT 0.417000 1.0080 0 + 8130 W1 1881 TIP3 OH2 OT -0.834000 15.9994 0 + 8131 W1 1881 TIP3 H1 HT 0.417000 1.0080 0 + 8132 W1 1881 TIP3 H2 HT 0.417000 1.0080 0 + 8133 W1 1882 TIP3 OH2 OT -0.834000 15.9994 0 + 8134 W1 1882 TIP3 H1 HT 0.417000 1.0080 0 + 8135 W1 1882 TIP3 H2 HT 0.417000 1.0080 0 + 8136 W1 1883 TIP3 OH2 OT -0.834000 15.9994 0 + 8137 W1 1883 TIP3 H1 HT 0.417000 1.0080 0 + 8138 W1 1883 TIP3 H2 HT 0.417000 1.0080 0 + 8139 W1 1884 TIP3 OH2 OT -0.834000 15.9994 0 + 8140 W1 1884 TIP3 H1 HT 0.417000 1.0080 0 + 8141 W1 1884 TIP3 H2 HT 0.417000 1.0080 0 + 8142 W1 1885 TIP3 OH2 OT -0.834000 15.9994 0 + 8143 W1 1885 TIP3 H1 HT 0.417000 1.0080 0 + 8144 W1 1885 TIP3 H2 HT 0.417000 1.0080 0 + 8145 W1 1886 TIP3 OH2 OT -0.834000 15.9994 0 + 8146 W1 1886 TIP3 H1 HT 0.417000 1.0080 0 + 8147 W1 1886 TIP3 H2 HT 0.417000 1.0080 0 + 8148 W1 1887 TIP3 OH2 OT -0.834000 15.9994 0 + 8149 W1 1887 TIP3 H1 HT 0.417000 1.0080 0 + 8150 W1 1887 TIP3 H2 HT 0.417000 1.0080 0 + 8151 W1 1888 TIP3 OH2 OT -0.834000 15.9994 0 + 8152 W1 1888 TIP3 H1 HT 0.417000 1.0080 0 + 8153 W1 1888 TIP3 H2 HT 0.417000 1.0080 0 + 8154 W1 1889 TIP3 OH2 OT -0.834000 15.9994 0 + 8155 W1 1889 TIP3 H1 HT 0.417000 1.0080 0 + 8156 W1 1889 TIP3 H2 HT 0.417000 1.0080 0 + 8157 W1 1890 TIP3 OH2 OT -0.834000 15.9994 0 + 8158 W1 1890 TIP3 H1 HT 0.417000 1.0080 0 + 8159 W1 1890 TIP3 H2 HT 0.417000 1.0080 0 + 8160 W1 1891 TIP3 OH2 OT -0.834000 15.9994 0 + 8161 W1 1891 TIP3 H1 HT 0.417000 1.0080 0 + 8162 W1 1891 TIP3 H2 HT 0.417000 1.0080 0 + 8163 W1 1892 TIP3 OH2 OT -0.834000 15.9994 0 + 8164 W1 1892 TIP3 H1 HT 0.417000 1.0080 0 + 8165 W1 1892 TIP3 H2 HT 0.417000 1.0080 0 + 8166 W1 1893 TIP3 OH2 OT -0.834000 15.9994 0 + 8167 W1 1893 TIP3 H1 HT 0.417000 1.0080 0 + 8168 W1 1893 TIP3 H2 HT 0.417000 1.0080 0 + 8169 W1 1894 TIP3 OH2 OT -0.834000 15.9994 0 + 8170 W1 1894 TIP3 H1 HT 0.417000 1.0080 0 + 8171 W1 1894 TIP3 H2 HT 0.417000 1.0080 0 + 8172 W1 1895 TIP3 OH2 OT -0.834000 15.9994 0 + 8173 W1 1895 TIP3 H1 HT 0.417000 1.0080 0 + 8174 W1 1895 TIP3 H2 HT 0.417000 1.0080 0 + 8175 W1 1896 TIP3 OH2 OT -0.834000 15.9994 0 + 8176 W1 1896 TIP3 H1 HT 0.417000 1.0080 0 + 8177 W1 1896 TIP3 H2 HT 0.417000 1.0080 0 + 8178 W1 1897 TIP3 OH2 OT -0.834000 15.9994 0 + 8179 W1 1897 TIP3 H1 HT 0.417000 1.0080 0 + 8180 W1 1897 TIP3 H2 HT 0.417000 1.0080 0 + 8181 W1 1898 TIP3 OH2 OT -0.834000 15.9994 0 + 8182 W1 1898 TIP3 H1 HT 0.417000 1.0080 0 + 8183 W1 1898 TIP3 H2 HT 0.417000 1.0080 0 + 8184 W1 1899 TIP3 OH2 OT -0.834000 15.9994 0 + 8185 W1 1899 TIP3 H1 HT 0.417000 1.0080 0 + 8186 W1 1899 TIP3 H2 HT 0.417000 1.0080 0 + 8187 W1 1900 TIP3 OH2 OT -0.834000 15.9994 0 + 8188 W1 1900 TIP3 H1 HT 0.417000 1.0080 0 + 8189 W1 1900 TIP3 H2 HT 0.417000 1.0080 0 + 8190 W1 1901 TIP3 OH2 OT -0.834000 15.9994 0 + 8191 W1 1901 TIP3 H1 HT 0.417000 1.0080 0 + 8192 W1 1901 TIP3 H2 HT 0.417000 1.0080 0 + 8193 W1 1902 TIP3 OH2 OT -0.834000 15.9994 0 + 8194 W1 1902 TIP3 H1 HT 0.417000 1.0080 0 + 8195 W1 1902 TIP3 H2 HT 0.417000 1.0080 0 + 8196 W1 1903 TIP3 OH2 OT -0.834000 15.9994 0 + 8197 W1 1903 TIP3 H1 HT 0.417000 1.0080 0 + 8198 W1 1903 TIP3 H2 HT 0.417000 1.0080 0 + 8199 W1 1904 TIP3 OH2 OT -0.834000 15.9994 0 + 8200 W1 1904 TIP3 H1 HT 0.417000 1.0080 0 + 8201 W1 1904 TIP3 H2 HT 0.417000 1.0080 0 + 8202 W1 1905 TIP3 OH2 OT -0.834000 15.9994 0 + 8203 W1 1905 TIP3 H1 HT 0.417000 1.0080 0 + 8204 W1 1905 TIP3 H2 HT 0.417000 1.0080 0 + 8205 W1 1906 TIP3 OH2 OT -0.834000 15.9994 0 + 8206 W1 1906 TIP3 H1 HT 0.417000 1.0080 0 + 8207 W1 1906 TIP3 H2 HT 0.417000 1.0080 0 + 8208 W1 1907 TIP3 OH2 OT -0.834000 15.9994 0 + 8209 W1 1907 TIP3 H1 HT 0.417000 1.0080 0 + 8210 W1 1907 TIP3 H2 HT 0.417000 1.0080 0 + 8211 W1 1908 TIP3 OH2 OT -0.834000 15.9994 0 + 8212 W1 1908 TIP3 H1 HT 0.417000 1.0080 0 + 8213 W1 1908 TIP3 H2 HT 0.417000 1.0080 0 + 8214 W1 1909 TIP3 OH2 OT -0.834000 15.9994 0 + 8215 W1 1909 TIP3 H1 HT 0.417000 1.0080 0 + 8216 W1 1909 TIP3 H2 HT 0.417000 1.0080 0 + 8217 W1 1910 TIP3 OH2 OT -0.834000 15.9994 0 + 8218 W1 1910 TIP3 H1 HT 0.417000 1.0080 0 + 8219 W1 1910 TIP3 H2 HT 0.417000 1.0080 0 + 8220 W1 1911 TIP3 OH2 OT -0.834000 15.9994 0 + 8221 W1 1911 TIP3 H1 HT 0.417000 1.0080 0 + 8222 W1 1911 TIP3 H2 HT 0.417000 1.0080 0 + 8223 W1 1912 TIP3 OH2 OT -0.834000 15.9994 0 + 8224 W1 1912 TIP3 H1 HT 0.417000 1.0080 0 + 8225 W1 1912 TIP3 H2 HT 0.417000 1.0080 0 + 8226 W1 1913 TIP3 OH2 OT -0.834000 15.9994 0 + 8227 W1 1913 TIP3 H1 HT 0.417000 1.0080 0 + 8228 W1 1913 TIP3 H2 HT 0.417000 1.0080 0 + 8229 W1 1914 TIP3 OH2 OT -0.834000 15.9994 0 + 8230 W1 1914 TIP3 H1 HT 0.417000 1.0080 0 + 8231 W1 1914 TIP3 H2 HT 0.417000 1.0080 0 + 8232 W1 1915 TIP3 OH2 OT -0.834000 15.9994 0 + 8233 W1 1915 TIP3 H1 HT 0.417000 1.0080 0 + 8234 W1 1915 TIP3 H2 HT 0.417000 1.0080 0 + 8235 W1 1916 TIP3 OH2 OT -0.834000 15.9994 0 + 8236 W1 1916 TIP3 H1 HT 0.417000 1.0080 0 + 8237 W1 1916 TIP3 H2 HT 0.417000 1.0080 0 + 8238 W1 1917 TIP3 OH2 OT -0.834000 15.9994 0 + 8239 W1 1917 TIP3 H1 HT 0.417000 1.0080 0 + 8240 W1 1917 TIP3 H2 HT 0.417000 1.0080 0 + 8241 W1 1918 TIP3 OH2 OT -0.834000 15.9994 0 + 8242 W1 1918 TIP3 H1 HT 0.417000 1.0080 0 + 8243 W1 1918 TIP3 H2 HT 0.417000 1.0080 0 + 8244 W1 1919 TIP3 OH2 OT -0.834000 15.9994 0 + 8245 W1 1919 TIP3 H1 HT 0.417000 1.0080 0 + 8246 W1 1919 TIP3 H2 HT 0.417000 1.0080 0 + 8247 W1 1920 TIP3 OH2 OT -0.834000 15.9994 0 + 8248 W1 1920 TIP3 H1 HT 0.417000 1.0080 0 + 8249 W1 1920 TIP3 H2 HT 0.417000 1.0080 0 + 8250 W1 1921 TIP3 OH2 OT -0.834000 15.9994 0 + 8251 W1 1921 TIP3 H1 HT 0.417000 1.0080 0 + 8252 W1 1921 TIP3 H2 HT 0.417000 1.0080 0 + 8253 W1 1922 TIP3 OH2 OT -0.834000 15.9994 0 + 8254 W1 1922 TIP3 H1 HT 0.417000 1.0080 0 + 8255 W1 1922 TIP3 H2 HT 0.417000 1.0080 0 + 8256 W1 1923 TIP3 OH2 OT -0.834000 15.9994 0 + 8257 W1 1923 TIP3 H1 HT 0.417000 1.0080 0 + 8258 W1 1923 TIP3 H2 HT 0.417000 1.0080 0 + 8259 W1 1924 TIP3 OH2 OT -0.834000 15.9994 0 + 8260 W1 1924 TIP3 H1 HT 0.417000 1.0080 0 + 8261 W1 1924 TIP3 H2 HT 0.417000 1.0080 0 + 8262 W1 1925 TIP3 OH2 OT -0.834000 15.9994 0 + 8263 W1 1925 TIP3 H1 HT 0.417000 1.0080 0 + 8264 W1 1925 TIP3 H2 HT 0.417000 1.0080 0 + 8265 W1 1926 TIP3 OH2 OT -0.834000 15.9994 0 + 8266 W1 1926 TIP3 H1 HT 0.417000 1.0080 0 + 8267 W1 1926 TIP3 H2 HT 0.417000 1.0080 0 + 8268 W1 1927 TIP3 OH2 OT -0.834000 15.9994 0 + 8269 W1 1927 TIP3 H1 HT 0.417000 1.0080 0 + 8270 W1 1927 TIP3 H2 HT 0.417000 1.0080 0 + 8271 W1 1928 TIP3 OH2 OT -0.834000 15.9994 0 + 8272 W1 1928 TIP3 H1 HT 0.417000 1.0080 0 + 8273 W1 1928 TIP3 H2 HT 0.417000 1.0080 0 + 8274 W1 1929 TIP3 OH2 OT -0.834000 15.9994 0 + 8275 W1 1929 TIP3 H1 HT 0.417000 1.0080 0 + 8276 W1 1929 TIP3 H2 HT 0.417000 1.0080 0 + 8277 W1 1930 TIP3 OH2 OT -0.834000 15.9994 0 + 8278 W1 1930 TIP3 H1 HT 0.417000 1.0080 0 + 8279 W1 1930 TIP3 H2 HT 0.417000 1.0080 0 + 8280 W1 1931 TIP3 OH2 OT -0.834000 15.9994 0 + 8281 W1 1931 TIP3 H1 HT 0.417000 1.0080 0 + 8282 W1 1931 TIP3 H2 HT 0.417000 1.0080 0 + 8283 W1 1932 TIP3 OH2 OT -0.834000 15.9994 0 + 8284 W1 1932 TIP3 H1 HT 0.417000 1.0080 0 + 8285 W1 1932 TIP3 H2 HT 0.417000 1.0080 0 + 8286 W1 1933 TIP3 OH2 OT -0.834000 15.9994 0 + 8287 W1 1933 TIP3 H1 HT 0.417000 1.0080 0 + 8288 W1 1933 TIP3 H2 HT 0.417000 1.0080 0 + 8289 W1 1934 TIP3 OH2 OT -0.834000 15.9994 0 + 8290 W1 1934 TIP3 H1 HT 0.417000 1.0080 0 + 8291 W1 1934 TIP3 H2 HT 0.417000 1.0080 0 + 8292 W1 1935 TIP3 OH2 OT -0.834000 15.9994 0 + 8293 W1 1935 TIP3 H1 HT 0.417000 1.0080 0 + 8294 W1 1935 TIP3 H2 HT 0.417000 1.0080 0 + 8295 W1 1936 TIP3 OH2 OT -0.834000 15.9994 0 + 8296 W1 1936 TIP3 H1 HT 0.417000 1.0080 0 + 8297 W1 1936 TIP3 H2 HT 0.417000 1.0080 0 + 8298 W1 1937 TIP3 OH2 OT -0.834000 15.9994 0 + 8299 W1 1937 TIP3 H1 HT 0.417000 1.0080 0 + 8300 W1 1937 TIP3 H2 HT 0.417000 1.0080 0 + 8301 W1 1938 TIP3 OH2 OT -0.834000 15.9994 0 + 8302 W1 1938 TIP3 H1 HT 0.417000 1.0080 0 + 8303 W1 1938 TIP3 H2 HT 0.417000 1.0080 0 + 8304 W1 1939 TIP3 OH2 OT -0.834000 15.9994 0 + 8305 W1 1939 TIP3 H1 HT 0.417000 1.0080 0 + 8306 W1 1939 TIP3 H2 HT 0.417000 1.0080 0 + 8307 W1 1940 TIP3 OH2 OT -0.834000 15.9994 0 + 8308 W1 1940 TIP3 H1 HT 0.417000 1.0080 0 + 8309 W1 1940 TIP3 H2 HT 0.417000 1.0080 0 + 8310 W1 1941 TIP3 OH2 OT -0.834000 15.9994 0 + 8311 W1 1941 TIP3 H1 HT 0.417000 1.0080 0 + 8312 W1 1941 TIP3 H2 HT 0.417000 1.0080 0 + 8313 W1 1942 TIP3 OH2 OT -0.834000 15.9994 0 + 8314 W1 1942 TIP3 H1 HT 0.417000 1.0080 0 + 8315 W1 1942 TIP3 H2 HT 0.417000 1.0080 0 + 8316 W1 1943 TIP3 OH2 OT -0.834000 15.9994 0 + 8317 W1 1943 TIP3 H1 HT 0.417000 1.0080 0 + 8318 W1 1943 TIP3 H2 HT 0.417000 1.0080 0 + 8319 W1 1944 TIP3 OH2 OT -0.834000 15.9994 0 + 8320 W1 1944 TIP3 H1 HT 0.417000 1.0080 0 + 8321 W1 1944 TIP3 H2 HT 0.417000 1.0080 0 + 8322 W1 1945 TIP3 OH2 OT -0.834000 15.9994 0 + 8323 W1 1945 TIP3 H1 HT 0.417000 1.0080 0 + 8324 W1 1945 TIP3 H2 HT 0.417000 1.0080 0 + 8325 W1 1946 TIP3 OH2 OT -0.834000 15.9994 0 + 8326 W1 1946 TIP3 H1 HT 0.417000 1.0080 0 + 8327 W1 1946 TIP3 H2 HT 0.417000 1.0080 0 + 8328 W1 1947 TIP3 OH2 OT -0.834000 15.9994 0 + 8329 W1 1947 TIP3 H1 HT 0.417000 1.0080 0 + 8330 W1 1947 TIP3 H2 HT 0.417000 1.0080 0 + 8331 W1 1948 TIP3 OH2 OT -0.834000 15.9994 0 + 8332 W1 1948 TIP3 H1 HT 0.417000 1.0080 0 + 8333 W1 1948 TIP3 H2 HT 0.417000 1.0080 0 + 8334 W1 1949 TIP3 OH2 OT -0.834000 15.9994 0 + 8335 W1 1949 TIP3 H1 HT 0.417000 1.0080 0 + 8336 W1 1949 TIP3 H2 HT 0.417000 1.0080 0 + 8337 W1 1950 TIP3 OH2 OT -0.834000 15.9994 0 + 8338 W1 1950 TIP3 H1 HT 0.417000 1.0080 0 + 8339 W1 1950 TIP3 H2 HT 0.417000 1.0080 0 + 8340 W1 1951 TIP3 OH2 OT -0.834000 15.9994 0 + 8341 W1 1951 TIP3 H1 HT 0.417000 1.0080 0 + 8342 W1 1951 TIP3 H2 HT 0.417000 1.0080 0 + 8343 W1 1952 TIP3 OH2 OT -0.834000 15.9994 0 + 8344 W1 1952 TIP3 H1 HT 0.417000 1.0080 0 + 8345 W1 1952 TIP3 H2 HT 0.417000 1.0080 0 + 8346 W1 1953 TIP3 OH2 OT -0.834000 15.9994 0 + 8347 W1 1953 TIP3 H1 HT 0.417000 1.0080 0 + 8348 W1 1953 TIP3 H2 HT 0.417000 1.0080 0 + 8349 W1 1954 TIP3 OH2 OT -0.834000 15.9994 0 + 8350 W1 1954 TIP3 H1 HT 0.417000 1.0080 0 + 8351 W1 1954 TIP3 H2 HT 0.417000 1.0080 0 + 8352 W1 1955 TIP3 OH2 OT -0.834000 15.9994 0 + 8353 W1 1955 TIP3 H1 HT 0.417000 1.0080 0 + 8354 W1 1955 TIP3 H2 HT 0.417000 1.0080 0 + 8355 W1 1956 TIP3 OH2 OT -0.834000 15.9994 0 + 8356 W1 1956 TIP3 H1 HT 0.417000 1.0080 0 + 8357 W1 1956 TIP3 H2 HT 0.417000 1.0080 0 + 8358 W1 1957 TIP3 OH2 OT -0.834000 15.9994 0 + 8359 W1 1957 TIP3 H1 HT 0.417000 1.0080 0 + 8360 W1 1957 TIP3 H2 HT 0.417000 1.0080 0 + 8361 W1 1958 TIP3 OH2 OT -0.834000 15.9994 0 + 8362 W1 1958 TIP3 H1 HT 0.417000 1.0080 0 + 8363 W1 1958 TIP3 H2 HT 0.417000 1.0080 0 + 8364 W1 1959 TIP3 OH2 OT -0.834000 15.9994 0 + 8365 W1 1959 TIP3 H1 HT 0.417000 1.0080 0 + 8366 W1 1959 TIP3 H2 HT 0.417000 1.0080 0 + 8367 W1 1960 TIP3 OH2 OT -0.834000 15.9994 0 + 8368 W1 1960 TIP3 H1 HT 0.417000 1.0080 0 + 8369 W1 1960 TIP3 H2 HT 0.417000 1.0080 0 + 8370 W1 1961 TIP3 OH2 OT -0.834000 15.9994 0 + 8371 W1 1961 TIP3 H1 HT 0.417000 1.0080 0 + 8372 W1 1961 TIP3 H2 HT 0.417000 1.0080 0 + 8373 W1 1962 TIP3 OH2 OT -0.834000 15.9994 0 + 8374 W1 1962 TIP3 H1 HT 0.417000 1.0080 0 + 8375 W1 1962 TIP3 H2 HT 0.417000 1.0080 0 + 8376 W1 1963 TIP3 OH2 OT -0.834000 15.9994 0 + 8377 W1 1963 TIP3 H1 HT 0.417000 1.0080 0 + 8378 W1 1963 TIP3 H2 HT 0.417000 1.0080 0 + 8379 W1 1964 TIP3 OH2 OT -0.834000 15.9994 0 + 8380 W1 1964 TIP3 H1 HT 0.417000 1.0080 0 + 8381 W1 1964 TIP3 H2 HT 0.417000 1.0080 0 + 8382 W1 1965 TIP3 OH2 OT -0.834000 15.9994 0 + 8383 W1 1965 TIP3 H1 HT 0.417000 1.0080 0 + 8384 W1 1965 TIP3 H2 HT 0.417000 1.0080 0 + 8385 W1 1966 TIP3 OH2 OT -0.834000 15.9994 0 + 8386 W1 1966 TIP3 H1 HT 0.417000 1.0080 0 + 8387 W1 1966 TIP3 H2 HT 0.417000 1.0080 0 + 8388 W1 1967 TIP3 OH2 OT -0.834000 15.9994 0 + 8389 W1 1967 TIP3 H1 HT 0.417000 1.0080 0 + 8390 W1 1967 TIP3 H2 HT 0.417000 1.0080 0 + 8391 W1 1968 TIP3 OH2 OT -0.834000 15.9994 0 + 8392 W1 1968 TIP3 H1 HT 0.417000 1.0080 0 + 8393 W1 1968 TIP3 H2 HT 0.417000 1.0080 0 + 8394 W1 1969 TIP3 OH2 OT -0.834000 15.9994 0 + 8395 W1 1969 TIP3 H1 HT 0.417000 1.0080 0 + 8396 W1 1969 TIP3 H2 HT 0.417000 1.0080 0 + 8397 W1 1970 TIP3 OH2 OT -0.834000 15.9994 0 + 8398 W1 1970 TIP3 H1 HT 0.417000 1.0080 0 + 8399 W1 1970 TIP3 H2 HT 0.417000 1.0080 0 + 8400 W1 1971 TIP3 OH2 OT -0.834000 15.9994 0 + 8401 W1 1971 TIP3 H1 HT 0.417000 1.0080 0 + 8402 W1 1971 TIP3 H2 HT 0.417000 1.0080 0 + 8403 W1 1972 TIP3 OH2 OT -0.834000 15.9994 0 + 8404 W1 1972 TIP3 H1 HT 0.417000 1.0080 0 + 8405 W1 1972 TIP3 H2 HT 0.417000 1.0080 0 + 8406 W1 1973 TIP3 OH2 OT -0.834000 15.9994 0 + 8407 W1 1973 TIP3 H1 HT 0.417000 1.0080 0 + 8408 W1 1973 TIP3 H2 HT 0.417000 1.0080 0 + 8409 W1 1974 TIP3 OH2 OT -0.834000 15.9994 0 + 8410 W1 1974 TIP3 H1 HT 0.417000 1.0080 0 + 8411 W1 1974 TIP3 H2 HT 0.417000 1.0080 0 + 8412 W1 1975 TIP3 OH2 OT -0.834000 15.9994 0 + 8413 W1 1975 TIP3 H1 HT 0.417000 1.0080 0 + 8414 W1 1975 TIP3 H2 HT 0.417000 1.0080 0 + 8415 W1 1976 TIP3 OH2 OT -0.834000 15.9994 0 + 8416 W1 1976 TIP3 H1 HT 0.417000 1.0080 0 + 8417 W1 1976 TIP3 H2 HT 0.417000 1.0080 0 + 8418 W1 1977 TIP3 OH2 OT -0.834000 15.9994 0 + 8419 W1 1977 TIP3 H1 HT 0.417000 1.0080 0 + 8420 W1 1977 TIP3 H2 HT 0.417000 1.0080 0 + 8421 W1 1978 TIP3 OH2 OT -0.834000 15.9994 0 + 8422 W1 1978 TIP3 H1 HT 0.417000 1.0080 0 + 8423 W1 1978 TIP3 H2 HT 0.417000 1.0080 0 + 8424 W1 1979 TIP3 OH2 OT -0.834000 15.9994 0 + 8425 W1 1979 TIP3 H1 HT 0.417000 1.0080 0 + 8426 W1 1979 TIP3 H2 HT 0.417000 1.0080 0 + 8427 W1 1980 TIP3 OH2 OT -0.834000 15.9994 0 + 8428 W1 1980 TIP3 H1 HT 0.417000 1.0080 0 + 8429 W1 1980 TIP3 H2 HT 0.417000 1.0080 0 + 8430 W1 1981 TIP3 OH2 OT -0.834000 15.9994 0 + 8431 W1 1981 TIP3 H1 HT 0.417000 1.0080 0 + 8432 W1 1981 TIP3 H2 HT 0.417000 1.0080 0 + 8433 W1 1982 TIP3 OH2 OT -0.834000 15.9994 0 + 8434 W1 1982 TIP3 H1 HT 0.417000 1.0080 0 + 8435 W1 1982 TIP3 H2 HT 0.417000 1.0080 0 + 8436 W1 1983 TIP3 OH2 OT -0.834000 15.9994 0 + 8437 W1 1983 TIP3 H1 HT 0.417000 1.0080 0 + 8438 W1 1983 TIP3 H2 HT 0.417000 1.0080 0 + 8439 W1 1984 TIP3 OH2 OT -0.834000 15.9994 0 + 8440 W1 1984 TIP3 H1 HT 0.417000 1.0080 0 + 8441 W1 1984 TIP3 H2 HT 0.417000 1.0080 0 + 8442 W1 1985 TIP3 OH2 OT -0.834000 15.9994 0 + 8443 W1 1985 TIP3 H1 HT 0.417000 1.0080 0 + 8444 W1 1985 TIP3 H2 HT 0.417000 1.0080 0 + 8445 W1 1986 TIP3 OH2 OT -0.834000 15.9994 0 + 8446 W1 1986 TIP3 H1 HT 0.417000 1.0080 0 + 8447 W1 1986 TIP3 H2 HT 0.417000 1.0080 0 + 8448 W1 1987 TIP3 OH2 OT -0.834000 15.9994 0 + 8449 W1 1987 TIP3 H1 HT 0.417000 1.0080 0 + 8450 W1 1987 TIP3 H2 HT 0.417000 1.0080 0 + 8451 W1 1988 TIP3 OH2 OT -0.834000 15.9994 0 + 8452 W1 1988 TIP3 H1 HT 0.417000 1.0080 0 + 8453 W1 1988 TIP3 H2 HT 0.417000 1.0080 0 + 8454 W1 1989 TIP3 OH2 OT -0.834000 15.9994 0 + 8455 W1 1989 TIP3 H1 HT 0.417000 1.0080 0 + 8456 W1 1989 TIP3 H2 HT 0.417000 1.0080 0 + 8457 W1 1990 TIP3 OH2 OT -0.834000 15.9994 0 + 8458 W1 1990 TIP3 H1 HT 0.417000 1.0080 0 + 8459 W1 1990 TIP3 H2 HT 0.417000 1.0080 0 + 8460 W1 1991 TIP3 OH2 OT -0.834000 15.9994 0 + 8461 W1 1991 TIP3 H1 HT 0.417000 1.0080 0 + 8462 W1 1991 TIP3 H2 HT 0.417000 1.0080 0 + 8463 W1 1992 TIP3 OH2 OT -0.834000 15.9994 0 + 8464 W1 1992 TIP3 H1 HT 0.417000 1.0080 0 + 8465 W1 1992 TIP3 H2 HT 0.417000 1.0080 0 + 8466 W1 1993 TIP3 OH2 OT -0.834000 15.9994 0 + 8467 W1 1993 TIP3 H1 HT 0.417000 1.0080 0 + 8468 W1 1993 TIP3 H2 HT 0.417000 1.0080 0 + 8469 W1 1994 TIP3 OH2 OT -0.834000 15.9994 0 + 8470 W1 1994 TIP3 H1 HT 0.417000 1.0080 0 + 8471 W1 1994 TIP3 H2 HT 0.417000 1.0080 0 + 8472 W1 1995 TIP3 OH2 OT -0.834000 15.9994 0 + 8473 W1 1995 TIP3 H1 HT 0.417000 1.0080 0 + 8474 W1 1995 TIP3 H2 HT 0.417000 1.0080 0 + 8475 W1 1996 TIP3 OH2 OT -0.834000 15.9994 0 + 8476 W1 1996 TIP3 H1 HT 0.417000 1.0080 0 + 8477 W1 1996 TIP3 H2 HT 0.417000 1.0080 0 + 8478 W1 1997 TIP3 OH2 OT -0.834000 15.9994 0 + 8479 W1 1997 TIP3 H1 HT 0.417000 1.0080 0 + 8480 W1 1997 TIP3 H2 HT 0.417000 1.0080 0 + 8481 W1 1998 TIP3 OH2 OT -0.834000 15.9994 0 + 8482 W1 1998 TIP3 H1 HT 0.417000 1.0080 0 + 8483 W1 1998 TIP3 H2 HT 0.417000 1.0080 0 + 8484 W1 1999 TIP3 OH2 OT -0.834000 15.9994 0 + 8485 W1 1999 TIP3 H1 HT 0.417000 1.0080 0 + 8486 W1 1999 TIP3 H2 HT 0.417000 1.0080 0 + 8487 W1 2000 TIP3 OH2 OT -0.834000 15.9994 0 + 8488 W1 2000 TIP3 H1 HT 0.417000 1.0080 0 + 8489 W1 2000 TIP3 H2 HT 0.417000 1.0080 0 + 8490 W1 2001 TIP3 OH2 OT -0.834000 15.9994 0 + 8491 W1 2001 TIP3 H1 HT 0.417000 1.0080 0 + 8492 W1 2001 TIP3 H2 HT 0.417000 1.0080 0 + 8493 W1 2002 TIP3 OH2 OT -0.834000 15.9994 0 + 8494 W1 2002 TIP3 H1 HT 0.417000 1.0080 0 + 8495 W1 2002 TIP3 H2 HT 0.417000 1.0080 0 + 8496 W1 2003 TIP3 OH2 OT -0.834000 15.9994 0 + 8497 W1 2003 TIP3 H1 HT 0.417000 1.0080 0 + 8498 W1 2003 TIP3 H2 HT 0.417000 1.0080 0 + 8499 W1 2004 TIP3 OH2 OT -0.834000 15.9994 0 + 8500 W1 2004 TIP3 H1 HT 0.417000 1.0080 0 + 8501 W1 2004 TIP3 H2 HT 0.417000 1.0080 0 + 8502 W1 2005 TIP3 OH2 OT -0.834000 15.9994 0 + 8503 W1 2005 TIP3 H1 HT 0.417000 1.0080 0 + 8504 W1 2005 TIP3 H2 HT 0.417000 1.0080 0 + 8505 W1 2006 TIP3 OH2 OT -0.834000 15.9994 0 + 8506 W1 2006 TIP3 H1 HT 0.417000 1.0080 0 + 8507 W1 2006 TIP3 H2 HT 0.417000 1.0080 0 + 8508 W1 2007 TIP3 OH2 OT -0.834000 15.9994 0 + 8509 W1 2007 TIP3 H1 HT 0.417000 1.0080 0 + 8510 W1 2007 TIP3 H2 HT 0.417000 1.0080 0 + 8511 W1 2008 TIP3 OH2 OT -0.834000 15.9994 0 + 8512 W1 2008 TIP3 H1 HT 0.417000 1.0080 0 + 8513 W1 2008 TIP3 H2 HT 0.417000 1.0080 0 + 8514 W1 2009 TIP3 OH2 OT -0.834000 15.9994 0 + 8515 W1 2009 TIP3 H1 HT 0.417000 1.0080 0 + 8516 W1 2009 TIP3 H2 HT 0.417000 1.0080 0 + 8517 W1 2010 TIP3 OH2 OT -0.834000 15.9994 0 + 8518 W1 2010 TIP3 H1 HT 0.417000 1.0080 0 + 8519 W1 2010 TIP3 H2 HT 0.417000 1.0080 0 + 8520 W1 2011 TIP3 OH2 OT -0.834000 15.9994 0 + 8521 W1 2011 TIP3 H1 HT 0.417000 1.0080 0 + 8522 W1 2011 TIP3 H2 HT 0.417000 1.0080 0 + 8523 W1 2012 TIP3 OH2 OT -0.834000 15.9994 0 + 8524 W1 2012 TIP3 H1 HT 0.417000 1.0080 0 + 8525 W1 2012 TIP3 H2 HT 0.417000 1.0080 0 + 8526 W1 2013 TIP3 OH2 OT -0.834000 15.9994 0 + 8527 W1 2013 TIP3 H1 HT 0.417000 1.0080 0 + 8528 W1 2013 TIP3 H2 HT 0.417000 1.0080 0 + 8529 W1 2014 TIP3 OH2 OT -0.834000 15.9994 0 + 8530 W1 2014 TIP3 H1 HT 0.417000 1.0080 0 + 8531 W1 2014 TIP3 H2 HT 0.417000 1.0080 0 + 8532 W1 2015 TIP3 OH2 OT -0.834000 15.9994 0 + 8533 W1 2015 TIP3 H1 HT 0.417000 1.0080 0 + 8534 W1 2015 TIP3 H2 HT 0.417000 1.0080 0 + 8535 W1 2016 TIP3 OH2 OT -0.834000 15.9994 0 + 8536 W1 2016 TIP3 H1 HT 0.417000 1.0080 0 + 8537 W1 2016 TIP3 H2 HT 0.417000 1.0080 0 + 8538 W1 2017 TIP3 OH2 OT -0.834000 15.9994 0 + 8539 W1 2017 TIP3 H1 HT 0.417000 1.0080 0 + 8540 W1 2017 TIP3 H2 HT 0.417000 1.0080 0 + 8541 W1 2018 TIP3 OH2 OT -0.834000 15.9994 0 + 8542 W1 2018 TIP3 H1 HT 0.417000 1.0080 0 + 8543 W1 2018 TIP3 H2 HT 0.417000 1.0080 0 + 8544 W1 2019 TIP3 OH2 OT -0.834000 15.9994 0 + 8545 W1 2019 TIP3 H1 HT 0.417000 1.0080 0 + 8546 W1 2019 TIP3 H2 HT 0.417000 1.0080 0 + 8547 W1 2020 TIP3 OH2 OT -0.834000 15.9994 0 + 8548 W1 2020 TIP3 H1 HT 0.417000 1.0080 0 + 8549 W1 2020 TIP3 H2 HT 0.417000 1.0080 0 + 8550 W1 2021 TIP3 OH2 OT -0.834000 15.9994 0 + 8551 W1 2021 TIP3 H1 HT 0.417000 1.0080 0 + 8552 W1 2021 TIP3 H2 HT 0.417000 1.0080 0 + 8553 W1 2022 TIP3 OH2 OT -0.834000 15.9994 0 + 8554 W1 2022 TIP3 H1 HT 0.417000 1.0080 0 + 8555 W1 2022 TIP3 H2 HT 0.417000 1.0080 0 + 8556 W1 2023 TIP3 OH2 OT -0.834000 15.9994 0 + 8557 W1 2023 TIP3 H1 HT 0.417000 1.0080 0 + 8558 W1 2023 TIP3 H2 HT 0.417000 1.0080 0 + 8559 W1 2024 TIP3 OH2 OT -0.834000 15.9994 0 + 8560 W1 2024 TIP3 H1 HT 0.417000 1.0080 0 + 8561 W1 2024 TIP3 H2 HT 0.417000 1.0080 0 + 8562 W1 2025 TIP3 OH2 OT -0.834000 15.9994 0 + 8563 W1 2025 TIP3 H1 HT 0.417000 1.0080 0 + 8564 W1 2025 TIP3 H2 HT 0.417000 1.0080 0 + 8565 W1 2026 TIP3 OH2 OT -0.834000 15.9994 0 + 8566 W1 2026 TIP3 H1 HT 0.417000 1.0080 0 + 8567 W1 2026 TIP3 H2 HT 0.417000 1.0080 0 + 8568 W1 2027 TIP3 OH2 OT -0.834000 15.9994 0 + 8569 W1 2027 TIP3 H1 HT 0.417000 1.0080 0 + 8570 W1 2027 TIP3 H2 HT 0.417000 1.0080 0 + 8571 W1 2028 TIP3 OH2 OT -0.834000 15.9994 0 + 8572 W1 2028 TIP3 H1 HT 0.417000 1.0080 0 + 8573 W1 2028 TIP3 H2 HT 0.417000 1.0080 0 + 8574 W1 2029 TIP3 OH2 OT -0.834000 15.9994 0 + 8575 W1 2029 TIP3 H1 HT 0.417000 1.0080 0 + 8576 W1 2029 TIP3 H2 HT 0.417000 1.0080 0 + 8577 W1 2030 TIP3 OH2 OT -0.834000 15.9994 0 + 8578 W1 2030 TIP3 H1 HT 0.417000 1.0080 0 + 8579 W1 2030 TIP3 H2 HT 0.417000 1.0080 0 + 8580 W1 2031 TIP3 OH2 OT -0.834000 15.9994 0 + 8581 W1 2031 TIP3 H1 HT 0.417000 1.0080 0 + 8582 W1 2031 TIP3 H2 HT 0.417000 1.0080 0 + 8583 W1 2032 TIP3 OH2 OT -0.834000 15.9994 0 + 8584 W1 2032 TIP3 H1 HT 0.417000 1.0080 0 + 8585 W1 2032 TIP3 H2 HT 0.417000 1.0080 0 + 8586 W1 2033 TIP3 OH2 OT -0.834000 15.9994 0 + 8587 W1 2033 TIP3 H1 HT 0.417000 1.0080 0 + 8588 W1 2033 TIP3 H2 HT 0.417000 1.0080 0 + 8589 W1 2034 TIP3 OH2 OT -0.834000 15.9994 0 + 8590 W1 2034 TIP3 H1 HT 0.417000 1.0080 0 + 8591 W1 2034 TIP3 H2 HT 0.417000 1.0080 0 + 8592 W1 2035 TIP3 OH2 OT -0.834000 15.9994 0 + 8593 W1 2035 TIP3 H1 HT 0.417000 1.0080 0 + 8594 W1 2035 TIP3 H2 HT 0.417000 1.0080 0 + 8595 W1 2036 TIP3 OH2 OT -0.834000 15.9994 0 + 8596 W1 2036 TIP3 H1 HT 0.417000 1.0080 0 + 8597 W1 2036 TIP3 H2 HT 0.417000 1.0080 0 + 8598 W1 2037 TIP3 OH2 OT -0.834000 15.9994 0 + 8599 W1 2037 TIP3 H1 HT 0.417000 1.0080 0 + 8600 W1 2037 TIP3 H2 HT 0.417000 1.0080 0 + 8601 W1 2038 TIP3 OH2 OT -0.834000 15.9994 0 + 8602 W1 2038 TIP3 H1 HT 0.417000 1.0080 0 + 8603 W1 2038 TIP3 H2 HT 0.417000 1.0080 0 + 8604 W1 2039 TIP3 OH2 OT -0.834000 15.9994 0 + 8605 W1 2039 TIP3 H1 HT 0.417000 1.0080 0 + 8606 W1 2039 TIP3 H2 HT 0.417000 1.0080 0 + 8607 W1 2040 TIP3 OH2 OT -0.834000 15.9994 0 + 8608 W1 2040 TIP3 H1 HT 0.417000 1.0080 0 + 8609 W1 2040 TIP3 H2 HT 0.417000 1.0080 0 + 8610 W1 2041 TIP3 OH2 OT -0.834000 15.9994 0 + 8611 W1 2041 TIP3 H1 HT 0.417000 1.0080 0 + 8612 W1 2041 TIP3 H2 HT 0.417000 1.0080 0 + 8613 W1 2042 TIP3 OH2 OT -0.834000 15.9994 0 + 8614 W1 2042 TIP3 H1 HT 0.417000 1.0080 0 + 8615 W1 2042 TIP3 H2 HT 0.417000 1.0080 0 + 8616 W1 2043 TIP3 OH2 OT -0.834000 15.9994 0 + 8617 W1 2043 TIP3 H1 HT 0.417000 1.0080 0 + 8618 W1 2043 TIP3 H2 HT 0.417000 1.0080 0 + 8619 W1 2044 TIP3 OH2 OT -0.834000 15.9994 0 + 8620 W1 2044 TIP3 H1 HT 0.417000 1.0080 0 + 8621 W1 2044 TIP3 H2 HT 0.417000 1.0080 0 + 8622 W1 2045 TIP3 OH2 OT -0.834000 15.9994 0 + 8623 W1 2045 TIP3 H1 HT 0.417000 1.0080 0 + 8624 W1 2045 TIP3 H2 HT 0.417000 1.0080 0 + 8625 W1 2046 TIP3 OH2 OT -0.834000 15.9994 0 + 8626 W1 2046 TIP3 H1 HT 0.417000 1.0080 0 + 8627 W1 2046 TIP3 H2 HT 0.417000 1.0080 0 + 8628 W1 2047 TIP3 OH2 OT -0.834000 15.9994 0 + 8629 W1 2047 TIP3 H1 HT 0.417000 1.0080 0 + 8630 W1 2047 TIP3 H2 HT 0.417000 1.0080 0 + 8631 W1 2048 TIP3 OH2 OT -0.834000 15.9994 0 + 8632 W1 2048 TIP3 H1 HT 0.417000 1.0080 0 + 8633 W1 2048 TIP3 H2 HT 0.417000 1.0080 0 + 8634 W1 2049 TIP3 OH2 OT -0.834000 15.9994 0 + 8635 W1 2049 TIP3 H1 HT 0.417000 1.0080 0 + 8636 W1 2049 TIP3 H2 HT 0.417000 1.0080 0 + 8637 W1 2050 TIP3 OH2 OT -0.834000 15.9994 0 + 8638 W1 2050 TIP3 H1 HT 0.417000 1.0080 0 + 8639 W1 2050 TIP3 H2 HT 0.417000 1.0080 0 + 8640 W1 2051 TIP3 OH2 OT -0.834000 15.9994 0 + 8641 W1 2051 TIP3 H1 HT 0.417000 1.0080 0 + 8642 W1 2051 TIP3 H2 HT 0.417000 1.0080 0 + 8643 W1 2052 TIP3 OH2 OT -0.834000 15.9994 0 + 8644 W1 2052 TIP3 H1 HT 0.417000 1.0080 0 + 8645 W1 2052 TIP3 H2 HT 0.417000 1.0080 0 + 8646 W1 2053 TIP3 OH2 OT -0.834000 15.9994 0 + 8647 W1 2053 TIP3 H1 HT 0.417000 1.0080 0 + 8648 W1 2053 TIP3 H2 HT 0.417000 1.0080 0 + 8649 W1 2054 TIP3 OH2 OT -0.834000 15.9994 0 + 8650 W1 2054 TIP3 H1 HT 0.417000 1.0080 0 + 8651 W1 2054 TIP3 H2 HT 0.417000 1.0080 0 + 8652 W1 2055 TIP3 OH2 OT -0.834000 15.9994 0 + 8653 W1 2055 TIP3 H1 HT 0.417000 1.0080 0 + 8654 W1 2055 TIP3 H2 HT 0.417000 1.0080 0 + 8655 W1 2056 TIP3 OH2 OT -0.834000 15.9994 0 + 8656 W1 2056 TIP3 H1 HT 0.417000 1.0080 0 + 8657 W1 2056 TIP3 H2 HT 0.417000 1.0080 0 + 8658 W1 2057 TIP3 OH2 OT -0.834000 15.9994 0 + 8659 W1 2057 TIP3 H1 HT 0.417000 1.0080 0 + 8660 W1 2057 TIP3 H2 HT 0.417000 1.0080 0 + 8661 W1 2058 TIP3 OH2 OT -0.834000 15.9994 0 + 8662 W1 2058 TIP3 H1 HT 0.417000 1.0080 0 + 8663 W1 2058 TIP3 H2 HT 0.417000 1.0080 0 + 8664 W1 2059 TIP3 OH2 OT -0.834000 15.9994 0 + 8665 W1 2059 TIP3 H1 HT 0.417000 1.0080 0 + 8666 W1 2059 TIP3 H2 HT 0.417000 1.0080 0 + 8667 W1 2060 TIP3 OH2 OT -0.834000 15.9994 0 + 8668 W1 2060 TIP3 H1 HT 0.417000 1.0080 0 + 8669 W1 2060 TIP3 H2 HT 0.417000 1.0080 0 + 8670 W1 2061 TIP3 OH2 OT -0.834000 15.9994 0 + 8671 W1 2061 TIP3 H1 HT 0.417000 1.0080 0 + 8672 W1 2061 TIP3 H2 HT 0.417000 1.0080 0 + 8673 W1 2062 TIP3 OH2 OT -0.834000 15.9994 0 + 8674 W1 2062 TIP3 H1 HT 0.417000 1.0080 0 + 8675 W1 2062 TIP3 H2 HT 0.417000 1.0080 0 + 8676 W1 2063 TIP3 OH2 OT -0.834000 15.9994 0 + 8677 W1 2063 TIP3 H1 HT 0.417000 1.0080 0 + 8678 W1 2063 TIP3 H2 HT 0.417000 1.0080 0 + 8679 W1 2064 TIP3 OH2 OT -0.834000 15.9994 0 + 8680 W1 2064 TIP3 H1 HT 0.417000 1.0080 0 + 8681 W1 2064 TIP3 H2 HT 0.417000 1.0080 0 + 8682 W1 2065 TIP3 OH2 OT -0.834000 15.9994 0 + 8683 W1 2065 TIP3 H1 HT 0.417000 1.0080 0 + 8684 W1 2065 TIP3 H2 HT 0.417000 1.0080 0 + 8685 W1 2066 TIP3 OH2 OT -0.834000 15.9994 0 + 8686 W1 2066 TIP3 H1 HT 0.417000 1.0080 0 + 8687 W1 2066 TIP3 H2 HT 0.417000 1.0080 0 + 8688 W1 2067 TIP3 OH2 OT -0.834000 15.9994 0 + 8689 W1 2067 TIP3 H1 HT 0.417000 1.0080 0 + 8690 W1 2067 TIP3 H2 HT 0.417000 1.0080 0 + 8691 W1 2068 TIP3 OH2 OT -0.834000 15.9994 0 + 8692 W1 2068 TIP3 H1 HT 0.417000 1.0080 0 + 8693 W1 2068 TIP3 H2 HT 0.417000 1.0080 0 + 8694 W1 2069 TIP3 OH2 OT -0.834000 15.9994 0 + 8695 W1 2069 TIP3 H1 HT 0.417000 1.0080 0 + 8696 W1 2069 TIP3 H2 HT 0.417000 1.0080 0 + 8697 W1 2070 TIP3 OH2 OT -0.834000 15.9994 0 + 8698 W1 2070 TIP3 H1 HT 0.417000 1.0080 0 + 8699 W1 2070 TIP3 H2 HT 0.417000 1.0080 0 + 8700 W1 2071 TIP3 OH2 OT -0.834000 15.9994 0 + 8701 W1 2071 TIP3 H1 HT 0.417000 1.0080 0 + 8702 W1 2071 TIP3 H2 HT 0.417000 1.0080 0 + 8703 W1 2072 TIP3 OH2 OT -0.834000 15.9994 0 + 8704 W1 2072 TIP3 H1 HT 0.417000 1.0080 0 + 8705 W1 2072 TIP3 H2 HT 0.417000 1.0080 0 + 8706 W1 2073 TIP3 OH2 OT -0.834000 15.9994 0 + 8707 W1 2073 TIP3 H1 HT 0.417000 1.0080 0 + 8708 W1 2073 TIP3 H2 HT 0.417000 1.0080 0 + 8709 W1 2074 TIP3 OH2 OT -0.834000 15.9994 0 + 8710 W1 2074 TIP3 H1 HT 0.417000 1.0080 0 + 8711 W1 2074 TIP3 H2 HT 0.417000 1.0080 0 + 8712 W1 2075 TIP3 OH2 OT -0.834000 15.9994 0 + 8713 W1 2075 TIP3 H1 HT 0.417000 1.0080 0 + 8714 W1 2075 TIP3 H2 HT 0.417000 1.0080 0 + 8715 W1 2076 TIP3 OH2 OT -0.834000 15.9994 0 + 8716 W1 2076 TIP3 H1 HT 0.417000 1.0080 0 + 8717 W1 2076 TIP3 H2 HT 0.417000 1.0080 0 + 8718 W1 2077 TIP3 OH2 OT -0.834000 15.9994 0 + 8719 W1 2077 TIP3 H1 HT 0.417000 1.0080 0 + 8720 W1 2077 TIP3 H2 HT 0.417000 1.0080 0 + 8721 W1 2078 TIP3 OH2 OT -0.834000 15.9994 0 + 8722 W1 2078 TIP3 H1 HT 0.417000 1.0080 0 + 8723 W1 2078 TIP3 H2 HT 0.417000 1.0080 0 + 8724 W1 2079 TIP3 OH2 OT -0.834000 15.9994 0 + 8725 W1 2079 TIP3 H1 HT 0.417000 1.0080 0 + 8726 W1 2079 TIP3 H2 HT 0.417000 1.0080 0 + 8727 W1 2080 TIP3 OH2 OT -0.834000 15.9994 0 + 8728 W1 2080 TIP3 H1 HT 0.417000 1.0080 0 + 8729 W1 2080 TIP3 H2 HT 0.417000 1.0080 0 + 8730 W1 2081 TIP3 OH2 OT -0.834000 15.9994 0 + 8731 W1 2081 TIP3 H1 HT 0.417000 1.0080 0 + 8732 W1 2081 TIP3 H2 HT 0.417000 1.0080 0 + 8733 W1 2082 TIP3 OH2 OT -0.834000 15.9994 0 + 8734 W1 2082 TIP3 H1 HT 0.417000 1.0080 0 + 8735 W1 2082 TIP3 H2 HT 0.417000 1.0080 0 + 8736 W1 2083 TIP3 OH2 OT -0.834000 15.9994 0 + 8737 W1 2083 TIP3 H1 HT 0.417000 1.0080 0 + 8738 W1 2083 TIP3 H2 HT 0.417000 1.0080 0 + 8739 W1 2084 TIP3 OH2 OT -0.834000 15.9994 0 + 8740 W1 2084 TIP3 H1 HT 0.417000 1.0080 0 + 8741 W1 2084 TIP3 H2 HT 0.417000 1.0080 0 + 8742 W1 2085 TIP3 OH2 OT -0.834000 15.9994 0 + 8743 W1 2085 TIP3 H1 HT 0.417000 1.0080 0 + 8744 W1 2085 TIP3 H2 HT 0.417000 1.0080 0 + 8745 W1 2086 TIP3 OH2 OT -0.834000 15.9994 0 + 8746 W1 2086 TIP3 H1 HT 0.417000 1.0080 0 + 8747 W1 2086 TIP3 H2 HT 0.417000 1.0080 0 + 8748 W1 2087 TIP3 OH2 OT -0.834000 15.9994 0 + 8749 W1 2087 TIP3 H1 HT 0.417000 1.0080 0 + 8750 W1 2087 TIP3 H2 HT 0.417000 1.0080 0 + 8751 W1 2088 TIP3 OH2 OT -0.834000 15.9994 0 + 8752 W1 2088 TIP3 H1 HT 0.417000 1.0080 0 + 8753 W1 2088 TIP3 H2 HT 0.417000 1.0080 0 + 8754 W1 2089 TIP3 OH2 OT -0.834000 15.9994 0 + 8755 W1 2089 TIP3 H1 HT 0.417000 1.0080 0 + 8756 W1 2089 TIP3 H2 HT 0.417000 1.0080 0 + 8757 W1 2090 TIP3 OH2 OT -0.834000 15.9994 0 + 8758 W1 2090 TIP3 H1 HT 0.417000 1.0080 0 + 8759 W1 2090 TIP3 H2 HT 0.417000 1.0080 0 + 8760 W1 2091 TIP3 OH2 OT -0.834000 15.9994 0 + 8761 W1 2091 TIP3 H1 HT 0.417000 1.0080 0 + 8762 W1 2091 TIP3 H2 HT 0.417000 1.0080 0 + 8763 W1 2092 TIP3 OH2 OT -0.834000 15.9994 0 + 8764 W1 2092 TIP3 H1 HT 0.417000 1.0080 0 + 8765 W1 2092 TIP3 H2 HT 0.417000 1.0080 0 + 8766 W1 2093 TIP3 OH2 OT -0.834000 15.9994 0 + 8767 W1 2093 TIP3 H1 HT 0.417000 1.0080 0 + 8768 W1 2093 TIP3 H2 HT 0.417000 1.0080 0 + 8769 W1 2094 TIP3 OH2 OT -0.834000 15.9994 0 + 8770 W1 2094 TIP3 H1 HT 0.417000 1.0080 0 + 8771 W1 2094 TIP3 H2 HT 0.417000 1.0080 0 + 8772 W1 2095 TIP3 OH2 OT -0.834000 15.9994 0 + 8773 W1 2095 TIP3 H1 HT 0.417000 1.0080 0 + 8774 W1 2095 TIP3 H2 HT 0.417000 1.0080 0 + 8775 W1 2096 TIP3 OH2 OT -0.834000 15.9994 0 + 8776 W1 2096 TIP3 H1 HT 0.417000 1.0080 0 + 8777 W1 2096 TIP3 H2 HT 0.417000 1.0080 0 + 8778 W1 2097 TIP3 OH2 OT -0.834000 15.9994 0 + 8779 W1 2097 TIP3 H1 HT 0.417000 1.0080 0 + 8780 W1 2097 TIP3 H2 HT 0.417000 1.0080 0 + 8781 W1 2098 TIP3 OH2 OT -0.834000 15.9994 0 + 8782 W1 2098 TIP3 H1 HT 0.417000 1.0080 0 + 8783 W1 2098 TIP3 H2 HT 0.417000 1.0080 0 + 8784 W1 2099 TIP3 OH2 OT -0.834000 15.9994 0 + 8785 W1 2099 TIP3 H1 HT 0.417000 1.0080 0 + 8786 W1 2099 TIP3 H2 HT 0.417000 1.0080 0 + 8787 W1 2100 TIP3 OH2 OT -0.834000 15.9994 0 + 8788 W1 2100 TIP3 H1 HT 0.417000 1.0080 0 + 8789 W1 2100 TIP3 H2 HT 0.417000 1.0080 0 + 8790 W1 2101 TIP3 OH2 OT -0.834000 15.9994 0 + 8791 W1 2101 TIP3 H1 HT 0.417000 1.0080 0 + 8792 W1 2101 TIP3 H2 HT 0.417000 1.0080 0 + 8793 W1 2102 TIP3 OH2 OT -0.834000 15.9994 0 + 8794 W1 2102 TIP3 H1 HT 0.417000 1.0080 0 + 8795 W1 2102 TIP3 H2 HT 0.417000 1.0080 0 + 8796 W1 2103 TIP3 OH2 OT -0.834000 15.9994 0 + 8797 W1 2103 TIP3 H1 HT 0.417000 1.0080 0 + 8798 W1 2103 TIP3 H2 HT 0.417000 1.0080 0 + 8799 W1 2104 TIP3 OH2 OT -0.834000 15.9994 0 + 8800 W1 2104 TIP3 H1 HT 0.417000 1.0080 0 + 8801 W1 2104 TIP3 H2 HT 0.417000 1.0080 0 + 8802 W1 2105 TIP3 OH2 OT -0.834000 15.9994 0 + 8803 W1 2105 TIP3 H1 HT 0.417000 1.0080 0 + 8804 W1 2105 TIP3 H2 HT 0.417000 1.0080 0 + 8805 W1 2106 TIP3 OH2 OT -0.834000 15.9994 0 + 8806 W1 2106 TIP3 H1 HT 0.417000 1.0080 0 + 8807 W1 2106 TIP3 H2 HT 0.417000 1.0080 0 + 8808 W1 2107 TIP3 OH2 OT -0.834000 15.9994 0 + 8809 W1 2107 TIP3 H1 HT 0.417000 1.0080 0 + 8810 W1 2107 TIP3 H2 HT 0.417000 1.0080 0 + 8811 W1 2108 TIP3 OH2 OT -0.834000 15.9994 0 + 8812 W1 2108 TIP3 H1 HT 0.417000 1.0080 0 + 8813 W1 2108 TIP3 H2 HT 0.417000 1.0080 0 + 8814 W1 2109 TIP3 OH2 OT -0.834000 15.9994 0 + 8815 W1 2109 TIP3 H1 HT 0.417000 1.0080 0 + 8816 W1 2109 TIP3 H2 HT 0.417000 1.0080 0 + 8817 W1 2110 TIP3 OH2 OT -0.834000 15.9994 0 + 8818 W1 2110 TIP3 H1 HT 0.417000 1.0080 0 + 8819 W1 2110 TIP3 H2 HT 0.417000 1.0080 0 + 8820 W1 2111 TIP3 OH2 OT -0.834000 15.9994 0 + 8821 W1 2111 TIP3 H1 HT 0.417000 1.0080 0 + 8822 W1 2111 TIP3 H2 HT 0.417000 1.0080 0 + 8823 W1 2112 TIP3 OH2 OT -0.834000 15.9994 0 + 8824 W1 2112 TIP3 H1 HT 0.417000 1.0080 0 + 8825 W1 2112 TIP3 H2 HT 0.417000 1.0080 0 + 8826 W1 2113 TIP3 OH2 OT -0.834000 15.9994 0 + 8827 W1 2113 TIP3 H1 HT 0.417000 1.0080 0 + 8828 W1 2113 TIP3 H2 HT 0.417000 1.0080 0 + 8829 W1 2114 TIP3 OH2 OT -0.834000 15.9994 0 + 8830 W1 2114 TIP3 H1 HT 0.417000 1.0080 0 + 8831 W1 2114 TIP3 H2 HT 0.417000 1.0080 0 + 8832 W1 2115 TIP3 OH2 OT -0.834000 15.9994 0 + 8833 W1 2115 TIP3 H1 HT 0.417000 1.0080 0 + 8834 W1 2115 TIP3 H2 HT 0.417000 1.0080 0 + 8835 W1 2116 TIP3 OH2 OT -0.834000 15.9994 0 + 8836 W1 2116 TIP3 H1 HT 0.417000 1.0080 0 + 8837 W1 2116 TIP3 H2 HT 0.417000 1.0080 0 + 8838 W1 2117 TIP3 OH2 OT -0.834000 15.9994 0 + 8839 W1 2117 TIP3 H1 HT 0.417000 1.0080 0 + 8840 W1 2117 TIP3 H2 HT 0.417000 1.0080 0 + 8841 W1 2118 TIP3 OH2 OT -0.834000 15.9994 0 + 8842 W1 2118 TIP3 H1 HT 0.417000 1.0080 0 + 8843 W1 2118 TIP3 H2 HT 0.417000 1.0080 0 + 8844 W1 2119 TIP3 OH2 OT -0.834000 15.9994 0 + 8845 W1 2119 TIP3 H1 HT 0.417000 1.0080 0 + 8846 W1 2119 TIP3 H2 HT 0.417000 1.0080 0 + 8847 W1 2120 TIP3 OH2 OT -0.834000 15.9994 0 + 8848 W1 2120 TIP3 H1 HT 0.417000 1.0080 0 + 8849 W1 2120 TIP3 H2 HT 0.417000 1.0080 0 + 8850 W1 2121 TIP3 OH2 OT -0.834000 15.9994 0 + 8851 W1 2121 TIP3 H1 HT 0.417000 1.0080 0 + 8852 W1 2121 TIP3 H2 HT 0.417000 1.0080 0 + 8853 W1 2122 TIP3 OH2 OT -0.834000 15.9994 0 + 8854 W1 2122 TIP3 H1 HT 0.417000 1.0080 0 + 8855 W1 2122 TIP3 H2 HT 0.417000 1.0080 0 + 8856 W1 2123 TIP3 OH2 OT -0.834000 15.9994 0 + 8857 W1 2123 TIP3 H1 HT 0.417000 1.0080 0 + 8858 W1 2123 TIP3 H2 HT 0.417000 1.0080 0 + 8859 W1 2124 TIP3 OH2 OT -0.834000 15.9994 0 + 8860 W1 2124 TIP3 H1 HT 0.417000 1.0080 0 + 8861 W1 2124 TIP3 H2 HT 0.417000 1.0080 0 + 8862 W1 2125 TIP3 OH2 OT -0.834000 15.9994 0 + 8863 W1 2125 TIP3 H1 HT 0.417000 1.0080 0 + 8864 W1 2125 TIP3 H2 HT 0.417000 1.0080 0 + 8865 W1 2126 TIP3 OH2 OT -0.834000 15.9994 0 + 8866 W1 2126 TIP3 H1 HT 0.417000 1.0080 0 + 8867 W1 2126 TIP3 H2 HT 0.417000 1.0080 0 + 8868 W1 2127 TIP3 OH2 OT -0.834000 15.9994 0 + 8869 W1 2127 TIP3 H1 HT 0.417000 1.0080 0 + 8870 W1 2127 TIP3 H2 HT 0.417000 1.0080 0 + 8871 W1 2128 TIP3 OH2 OT -0.834000 15.9994 0 + 8872 W1 2128 TIP3 H1 HT 0.417000 1.0080 0 + 8873 W1 2128 TIP3 H2 HT 0.417000 1.0080 0 + 8874 W1 2129 TIP3 OH2 OT -0.834000 15.9994 0 + 8875 W1 2129 TIP3 H1 HT 0.417000 1.0080 0 + 8876 W1 2129 TIP3 H2 HT 0.417000 1.0080 0 + 8877 W1 2130 TIP3 OH2 OT -0.834000 15.9994 0 + 8878 W1 2130 TIP3 H1 HT 0.417000 1.0080 0 + 8879 W1 2130 TIP3 H2 HT 0.417000 1.0080 0 + 8880 W1 2131 TIP3 OH2 OT -0.834000 15.9994 0 + 8881 W1 2131 TIP3 H1 HT 0.417000 1.0080 0 + 8882 W1 2131 TIP3 H2 HT 0.417000 1.0080 0 + 8883 W1 2132 TIP3 OH2 OT -0.834000 15.9994 0 + 8884 W1 2132 TIP3 H1 HT 0.417000 1.0080 0 + 8885 W1 2132 TIP3 H2 HT 0.417000 1.0080 0 + 8886 W1 2133 TIP3 OH2 OT -0.834000 15.9994 0 + 8887 W1 2133 TIP3 H1 HT 0.417000 1.0080 0 + 8888 W1 2133 TIP3 H2 HT 0.417000 1.0080 0 + 8889 W1 2134 TIP3 OH2 OT -0.834000 15.9994 0 + 8890 W1 2134 TIP3 H1 HT 0.417000 1.0080 0 + 8891 W1 2134 TIP3 H2 HT 0.417000 1.0080 0 + 8892 W1 2135 TIP3 OH2 OT -0.834000 15.9994 0 + 8893 W1 2135 TIP3 H1 HT 0.417000 1.0080 0 + 8894 W1 2135 TIP3 H2 HT 0.417000 1.0080 0 + 8895 W1 2136 TIP3 OH2 OT -0.834000 15.9994 0 + 8896 W1 2136 TIP3 H1 HT 0.417000 1.0080 0 + 8897 W1 2136 TIP3 H2 HT 0.417000 1.0080 0 + 8898 W1 2137 TIP3 OH2 OT -0.834000 15.9994 0 + 8899 W1 2137 TIP3 H1 HT 0.417000 1.0080 0 + 8900 W1 2137 TIP3 H2 HT 0.417000 1.0080 0 + 8901 W1 2138 TIP3 OH2 OT -0.834000 15.9994 0 + 8902 W1 2138 TIP3 H1 HT 0.417000 1.0080 0 + 8903 W1 2138 TIP3 H2 HT 0.417000 1.0080 0 + 8904 W1 2139 TIP3 OH2 OT -0.834000 15.9994 0 + 8905 W1 2139 TIP3 H1 HT 0.417000 1.0080 0 + 8906 W1 2139 TIP3 H2 HT 0.417000 1.0080 0 + 8907 W1 2140 TIP3 OH2 OT -0.834000 15.9994 0 + 8908 W1 2140 TIP3 H1 HT 0.417000 1.0080 0 + 8909 W1 2140 TIP3 H2 HT 0.417000 1.0080 0 + 8910 W1 2141 TIP3 OH2 OT -0.834000 15.9994 0 + 8911 W1 2141 TIP3 H1 HT 0.417000 1.0080 0 + 8912 W1 2141 TIP3 H2 HT 0.417000 1.0080 0 + 8913 W1 2142 TIP3 OH2 OT -0.834000 15.9994 0 + 8914 W1 2142 TIP3 H1 HT 0.417000 1.0080 0 + 8915 W1 2142 TIP3 H2 HT 0.417000 1.0080 0 + 8916 W1 2143 TIP3 OH2 OT -0.834000 15.9994 0 + 8917 W1 2143 TIP3 H1 HT 0.417000 1.0080 0 + 8918 W1 2143 TIP3 H2 HT 0.417000 1.0080 0 + 8919 W1 2144 TIP3 OH2 OT -0.834000 15.9994 0 + 8920 W1 2144 TIP3 H1 HT 0.417000 1.0080 0 + 8921 W1 2144 TIP3 H2 HT 0.417000 1.0080 0 + 8922 W1 2145 TIP3 OH2 OT -0.834000 15.9994 0 + 8923 W1 2145 TIP3 H1 HT 0.417000 1.0080 0 + 8924 W1 2145 TIP3 H2 HT 0.417000 1.0080 0 + 8925 W1 2146 TIP3 OH2 OT -0.834000 15.9994 0 + 8926 W1 2146 TIP3 H1 HT 0.417000 1.0080 0 + 8927 W1 2146 TIP3 H2 HT 0.417000 1.0080 0 + 8928 W1 2147 TIP3 OH2 OT -0.834000 15.9994 0 + 8929 W1 2147 TIP3 H1 HT 0.417000 1.0080 0 + 8930 W1 2147 TIP3 H2 HT 0.417000 1.0080 0 + 8931 W1 2148 TIP3 OH2 OT -0.834000 15.9994 0 + 8932 W1 2148 TIP3 H1 HT 0.417000 1.0080 0 + 8933 W1 2148 TIP3 H2 HT 0.417000 1.0080 0 + 8934 W1 2149 TIP3 OH2 OT -0.834000 15.9994 0 + 8935 W1 2149 TIP3 H1 HT 0.417000 1.0080 0 + 8936 W1 2149 TIP3 H2 HT 0.417000 1.0080 0 + 8937 W1 2150 TIP3 OH2 OT -0.834000 15.9994 0 + 8938 W1 2150 TIP3 H1 HT 0.417000 1.0080 0 + 8939 W1 2150 TIP3 H2 HT 0.417000 1.0080 0 + 8940 W1 2151 TIP3 OH2 OT -0.834000 15.9994 0 + 8941 W1 2151 TIP3 H1 HT 0.417000 1.0080 0 + 8942 W1 2151 TIP3 H2 HT 0.417000 1.0080 0 + 8943 W1 2152 TIP3 OH2 OT -0.834000 15.9994 0 + 8944 W1 2152 TIP3 H1 HT 0.417000 1.0080 0 + 8945 W1 2152 TIP3 H2 HT 0.417000 1.0080 0 + 8946 W1 2153 TIP3 OH2 OT -0.834000 15.9994 0 + 8947 W1 2153 TIP3 H1 HT 0.417000 1.0080 0 + 8948 W1 2153 TIP3 H2 HT 0.417000 1.0080 0 + 8949 W1 2154 TIP3 OH2 OT -0.834000 15.9994 0 + 8950 W1 2154 TIP3 H1 HT 0.417000 1.0080 0 + 8951 W1 2154 TIP3 H2 HT 0.417000 1.0080 0 + 8952 W1 2155 TIP3 OH2 OT -0.834000 15.9994 0 + 8953 W1 2155 TIP3 H1 HT 0.417000 1.0080 0 + 8954 W1 2155 TIP3 H2 HT 0.417000 1.0080 0 + 8955 W1 2156 TIP3 OH2 OT -0.834000 15.9994 0 + 8956 W1 2156 TIP3 H1 HT 0.417000 1.0080 0 + 8957 W1 2156 TIP3 H2 HT 0.417000 1.0080 0 + 8958 W1 2157 TIP3 OH2 OT -0.834000 15.9994 0 + 8959 W1 2157 TIP3 H1 HT 0.417000 1.0080 0 + 8960 W1 2157 TIP3 H2 HT 0.417000 1.0080 0 + 8961 W1 2158 TIP3 OH2 OT -0.834000 15.9994 0 + 8962 W1 2158 TIP3 H1 HT 0.417000 1.0080 0 + 8963 W1 2158 TIP3 H2 HT 0.417000 1.0080 0 + 8964 W1 2159 TIP3 OH2 OT -0.834000 15.9994 0 + 8965 W1 2159 TIP3 H1 HT 0.417000 1.0080 0 + 8966 W1 2159 TIP3 H2 HT 0.417000 1.0080 0 + 8967 W1 2160 TIP3 OH2 OT -0.834000 15.9994 0 + 8968 W1 2160 TIP3 H1 HT 0.417000 1.0080 0 + 8969 W1 2160 TIP3 H2 HT 0.417000 1.0080 0 + 8970 W1 2161 TIP3 OH2 OT -0.834000 15.9994 0 + 8971 W1 2161 TIP3 H1 HT 0.417000 1.0080 0 + 8972 W1 2161 TIP3 H2 HT 0.417000 1.0080 0 + 8973 W1 2162 TIP3 OH2 OT -0.834000 15.9994 0 + 8974 W1 2162 TIP3 H1 HT 0.417000 1.0080 0 + 8975 W1 2162 TIP3 H2 HT 0.417000 1.0080 0 + 8976 W1 2163 TIP3 OH2 OT -0.834000 15.9994 0 + 8977 W1 2163 TIP3 H1 HT 0.417000 1.0080 0 + 8978 W1 2163 TIP3 H2 HT 0.417000 1.0080 0 + 8979 W1 2164 TIP3 OH2 OT -0.834000 15.9994 0 + 8980 W1 2164 TIP3 H1 HT 0.417000 1.0080 0 + 8981 W1 2164 TIP3 H2 HT 0.417000 1.0080 0 + 8982 W1 2165 TIP3 OH2 OT -0.834000 15.9994 0 + 8983 W1 2165 TIP3 H1 HT 0.417000 1.0080 0 + 8984 W1 2165 TIP3 H2 HT 0.417000 1.0080 0 + 8985 W1 2166 TIP3 OH2 OT -0.834000 15.9994 0 + 8986 W1 2166 TIP3 H1 HT 0.417000 1.0080 0 + 8987 W1 2166 TIP3 H2 HT 0.417000 1.0080 0 + 8988 W1 2167 TIP3 OH2 OT -0.834000 15.9994 0 + 8989 W1 2167 TIP3 H1 HT 0.417000 1.0080 0 + 8990 W1 2167 TIP3 H2 HT 0.417000 1.0080 0 + 8991 W1 2168 TIP3 OH2 OT -0.834000 15.9994 0 + 8992 W1 2168 TIP3 H1 HT 0.417000 1.0080 0 + 8993 W1 2168 TIP3 H2 HT 0.417000 1.0080 0 + 8994 W1 2169 TIP3 OH2 OT -0.834000 15.9994 0 + 8995 W1 2169 TIP3 H1 HT 0.417000 1.0080 0 + 8996 W1 2169 TIP3 H2 HT 0.417000 1.0080 0 + 8997 W1 2170 TIP3 OH2 OT -0.834000 15.9994 0 + 8998 W1 2170 TIP3 H1 HT 0.417000 1.0080 0 + 8999 W1 2170 TIP3 H2 HT 0.417000 1.0080 0 + 9000 W1 2171 TIP3 OH2 OT -0.834000 15.9994 0 + 9001 W1 2171 TIP3 H1 HT 0.417000 1.0080 0 + 9002 W1 2171 TIP3 H2 HT 0.417000 1.0080 0 + 9003 W1 2172 TIP3 OH2 OT -0.834000 15.9994 0 + 9004 W1 2172 TIP3 H1 HT 0.417000 1.0080 0 + 9005 W1 2172 TIP3 H2 HT 0.417000 1.0080 0 + 9006 W1 2173 TIP3 OH2 OT -0.834000 15.9994 0 + 9007 W1 2173 TIP3 H1 HT 0.417000 1.0080 0 + 9008 W1 2173 TIP3 H2 HT 0.417000 1.0080 0 + 9009 W1 2174 TIP3 OH2 OT -0.834000 15.9994 0 + 9010 W1 2174 TIP3 H1 HT 0.417000 1.0080 0 + 9011 W1 2174 TIP3 H2 HT 0.417000 1.0080 0 + 9012 W1 2175 TIP3 OH2 OT -0.834000 15.9994 0 + 9013 W1 2175 TIP3 H1 HT 0.417000 1.0080 0 + 9014 W1 2175 TIP3 H2 HT 0.417000 1.0080 0 + 9015 W1 2176 TIP3 OH2 OT -0.834000 15.9994 0 + 9016 W1 2176 TIP3 H1 HT 0.417000 1.0080 0 + 9017 W1 2176 TIP3 H2 HT 0.417000 1.0080 0 + 9018 W1 2177 TIP3 OH2 OT -0.834000 15.9994 0 + 9019 W1 2177 TIP3 H1 HT 0.417000 1.0080 0 + 9020 W1 2177 TIP3 H2 HT 0.417000 1.0080 0 + 9021 W1 2178 TIP3 OH2 OT -0.834000 15.9994 0 + 9022 W1 2178 TIP3 H1 HT 0.417000 1.0080 0 + 9023 W1 2178 TIP3 H2 HT 0.417000 1.0080 0 + 9024 W1 2179 TIP3 OH2 OT -0.834000 15.9994 0 + 9025 W1 2179 TIP3 H1 HT 0.417000 1.0080 0 + 9026 W1 2179 TIP3 H2 HT 0.417000 1.0080 0 + 9027 W1 2180 TIP3 OH2 OT -0.834000 15.9994 0 + 9028 W1 2180 TIP3 H1 HT 0.417000 1.0080 0 + 9029 W1 2180 TIP3 H2 HT 0.417000 1.0080 0 + 9030 W1 2181 TIP3 OH2 OT -0.834000 15.9994 0 + 9031 W1 2181 TIP3 H1 HT 0.417000 1.0080 0 + 9032 W1 2181 TIP3 H2 HT 0.417000 1.0080 0 + 9033 W1 2182 TIP3 OH2 OT -0.834000 15.9994 0 + 9034 W1 2182 TIP3 H1 HT 0.417000 1.0080 0 + 9035 W1 2182 TIP3 H2 HT 0.417000 1.0080 0 + 9036 W1 2183 TIP3 OH2 OT -0.834000 15.9994 0 + 9037 W1 2183 TIP3 H1 HT 0.417000 1.0080 0 + 9038 W1 2183 TIP3 H2 HT 0.417000 1.0080 0 + 9039 W1 2184 TIP3 OH2 OT -0.834000 15.9994 0 + 9040 W1 2184 TIP3 H1 HT 0.417000 1.0080 0 + 9041 W1 2184 TIP3 H2 HT 0.417000 1.0080 0 + 9042 W1 2185 TIP3 OH2 OT -0.834000 15.9994 0 + 9043 W1 2185 TIP3 H1 HT 0.417000 1.0080 0 + 9044 W1 2185 TIP3 H2 HT 0.417000 1.0080 0 + 9045 W1 2186 TIP3 OH2 OT -0.834000 15.9994 0 + 9046 W1 2186 TIP3 H1 HT 0.417000 1.0080 0 + 9047 W1 2186 TIP3 H2 HT 0.417000 1.0080 0 + 9048 W1 2187 TIP3 OH2 OT -0.834000 15.9994 0 + 9049 W1 2187 TIP3 H1 HT 0.417000 1.0080 0 + 9050 W1 2187 TIP3 H2 HT 0.417000 1.0080 0 + 9051 W1 2188 TIP3 OH2 OT -0.834000 15.9994 0 + 9052 W1 2188 TIP3 H1 HT 0.417000 1.0080 0 + 9053 W1 2188 TIP3 H2 HT 0.417000 1.0080 0 + 9054 W1 2189 TIP3 OH2 OT -0.834000 15.9994 0 + 9055 W1 2189 TIP3 H1 HT 0.417000 1.0080 0 + 9056 W1 2189 TIP3 H2 HT 0.417000 1.0080 0 + 9057 W1 2190 TIP3 OH2 OT -0.834000 15.9994 0 + 9058 W1 2190 TIP3 H1 HT 0.417000 1.0080 0 + 9059 W1 2190 TIP3 H2 HT 0.417000 1.0080 0 + 9060 W1 2191 TIP3 OH2 OT -0.834000 15.9994 0 + 9061 W1 2191 TIP3 H1 HT 0.417000 1.0080 0 + 9062 W1 2191 TIP3 H2 HT 0.417000 1.0080 0 + 9063 W1 2192 TIP3 OH2 OT -0.834000 15.9994 0 + 9064 W1 2192 TIP3 H1 HT 0.417000 1.0080 0 + 9065 W1 2192 TIP3 H2 HT 0.417000 1.0080 0 + 9066 W1 2193 TIP3 OH2 OT -0.834000 15.9994 0 + 9067 W1 2193 TIP3 H1 HT 0.417000 1.0080 0 + 9068 W1 2193 TIP3 H2 HT 0.417000 1.0080 0 + 9069 W1 2194 TIP3 OH2 OT -0.834000 15.9994 0 + 9070 W1 2194 TIP3 H1 HT 0.417000 1.0080 0 + 9071 W1 2194 TIP3 H2 HT 0.417000 1.0080 0 + 9072 W1 2195 TIP3 OH2 OT -0.834000 15.9994 0 + 9073 W1 2195 TIP3 H1 HT 0.417000 1.0080 0 + 9074 W1 2195 TIP3 H2 HT 0.417000 1.0080 0 + 9075 W1 2196 TIP3 OH2 OT -0.834000 15.9994 0 + 9076 W1 2196 TIP3 H1 HT 0.417000 1.0080 0 + 9077 W1 2196 TIP3 H2 HT 0.417000 1.0080 0 + 9078 W1 2197 TIP3 OH2 OT -0.834000 15.9994 0 + 9079 W1 2197 TIP3 H1 HT 0.417000 1.0080 0 + 9080 W1 2197 TIP3 H2 HT 0.417000 1.0080 0 + 9081 W1 2198 TIP3 OH2 OT -0.834000 15.9994 0 + 9082 W1 2198 TIP3 H1 HT 0.417000 1.0080 0 + 9083 W1 2198 TIP3 H2 HT 0.417000 1.0080 0 + 9084 W1 2199 TIP3 OH2 OT -0.834000 15.9994 0 + 9085 W1 2199 TIP3 H1 HT 0.417000 1.0080 0 + 9086 W1 2199 TIP3 H2 HT 0.417000 1.0080 0 + 9087 W1 2200 TIP3 OH2 OT -0.834000 15.9994 0 + 9088 W1 2200 TIP3 H1 HT 0.417000 1.0080 0 + 9089 W1 2200 TIP3 H2 HT 0.417000 1.0080 0 + 9090 W1 2201 TIP3 OH2 OT -0.834000 15.9994 0 + 9091 W1 2201 TIP3 H1 HT 0.417000 1.0080 0 + 9092 W1 2201 TIP3 H2 HT 0.417000 1.0080 0 + 9093 W1 2202 TIP3 OH2 OT -0.834000 15.9994 0 + 9094 W1 2202 TIP3 H1 HT 0.417000 1.0080 0 + 9095 W1 2202 TIP3 H2 HT 0.417000 1.0080 0 + 9096 W1 2203 TIP3 OH2 OT -0.834000 15.9994 0 + 9097 W1 2203 TIP3 H1 HT 0.417000 1.0080 0 + 9098 W1 2203 TIP3 H2 HT 0.417000 1.0080 0 + 9099 W1 2204 TIP3 OH2 OT -0.834000 15.9994 0 + 9100 W1 2204 TIP3 H1 HT 0.417000 1.0080 0 + 9101 W1 2204 TIP3 H2 HT 0.417000 1.0080 0 + 9102 W1 2205 TIP3 OH2 OT -0.834000 15.9994 0 + 9103 W1 2205 TIP3 H1 HT 0.417000 1.0080 0 + 9104 W1 2205 TIP3 H2 HT 0.417000 1.0080 0 + 9105 W1 2206 TIP3 OH2 OT -0.834000 15.9994 0 + 9106 W1 2206 TIP3 H1 HT 0.417000 1.0080 0 + 9107 W1 2206 TIP3 H2 HT 0.417000 1.0080 0 + 9108 W1 2207 TIP3 OH2 OT -0.834000 15.9994 0 + 9109 W1 2207 TIP3 H1 HT 0.417000 1.0080 0 + 9110 W1 2207 TIP3 H2 HT 0.417000 1.0080 0 + 9111 W1 2208 TIP3 OH2 OT -0.834000 15.9994 0 + 9112 W1 2208 TIP3 H1 HT 0.417000 1.0080 0 + 9113 W1 2208 TIP3 H2 HT 0.417000 1.0080 0 + 9114 W1 2209 TIP3 OH2 OT -0.834000 15.9994 0 + 9115 W1 2209 TIP3 H1 HT 0.417000 1.0080 0 + 9116 W1 2209 TIP3 H2 HT 0.417000 1.0080 0 + 9117 W1 2210 TIP3 OH2 OT -0.834000 15.9994 0 + 9118 W1 2210 TIP3 H1 HT 0.417000 1.0080 0 + 9119 W1 2210 TIP3 H2 HT 0.417000 1.0080 0 + 9120 W1 2211 TIP3 OH2 OT -0.834000 15.9994 0 + 9121 W1 2211 TIP3 H1 HT 0.417000 1.0080 0 + 9122 W1 2211 TIP3 H2 HT 0.417000 1.0080 0 + 9123 W1 2212 TIP3 OH2 OT -0.834000 15.9994 0 + 9124 W1 2212 TIP3 H1 HT 0.417000 1.0080 0 + 9125 W1 2212 TIP3 H2 HT 0.417000 1.0080 0 + 9126 W1 2213 TIP3 OH2 OT -0.834000 15.9994 0 + 9127 W1 2213 TIP3 H1 HT 0.417000 1.0080 0 + 9128 W1 2213 TIP3 H2 HT 0.417000 1.0080 0 + 9129 W1 2214 TIP3 OH2 OT -0.834000 15.9994 0 + 9130 W1 2214 TIP3 H1 HT 0.417000 1.0080 0 + 9131 W1 2214 TIP3 H2 HT 0.417000 1.0080 0 + 9132 W1 2215 TIP3 OH2 OT -0.834000 15.9994 0 + 9133 W1 2215 TIP3 H1 HT 0.417000 1.0080 0 + 9134 W1 2215 TIP3 H2 HT 0.417000 1.0080 0 + 9135 W1 2216 TIP3 OH2 OT -0.834000 15.9994 0 + 9136 W1 2216 TIP3 H1 HT 0.417000 1.0080 0 + 9137 W1 2216 TIP3 H2 HT 0.417000 1.0080 0 + 9138 W1 2217 TIP3 OH2 OT -0.834000 15.9994 0 + 9139 W1 2217 TIP3 H1 HT 0.417000 1.0080 0 + 9140 W1 2217 TIP3 H2 HT 0.417000 1.0080 0 + 9141 W1 2218 TIP3 OH2 OT -0.834000 15.9994 0 + 9142 W1 2218 TIP3 H1 HT 0.417000 1.0080 0 + 9143 W1 2218 TIP3 H2 HT 0.417000 1.0080 0 + 9144 W1 2219 TIP3 OH2 OT -0.834000 15.9994 0 + 9145 W1 2219 TIP3 H1 HT 0.417000 1.0080 0 + 9146 W1 2219 TIP3 H2 HT 0.417000 1.0080 0 + 9147 W1 2220 TIP3 OH2 OT -0.834000 15.9994 0 + 9148 W1 2220 TIP3 H1 HT 0.417000 1.0080 0 + 9149 W1 2220 TIP3 H2 HT 0.417000 1.0080 0 + 9150 W1 2221 TIP3 OH2 OT -0.834000 15.9994 0 + 9151 W1 2221 TIP3 H1 HT 0.417000 1.0080 0 + 9152 W1 2221 TIP3 H2 HT 0.417000 1.0080 0 + 9153 W1 2222 TIP3 OH2 OT -0.834000 15.9994 0 + 9154 W1 2222 TIP3 H1 HT 0.417000 1.0080 0 + 9155 W1 2222 TIP3 H2 HT 0.417000 1.0080 0 + 9156 W1 2223 TIP3 OH2 OT -0.834000 15.9994 0 + 9157 W1 2223 TIP3 H1 HT 0.417000 1.0080 0 + 9158 W1 2223 TIP3 H2 HT 0.417000 1.0080 0 + 9159 W1 2224 TIP3 OH2 OT -0.834000 15.9994 0 + 9160 W1 2224 TIP3 H1 HT 0.417000 1.0080 0 + 9161 W1 2224 TIP3 H2 HT 0.417000 1.0080 0 + 9162 W1 2225 TIP3 OH2 OT -0.834000 15.9994 0 + 9163 W1 2225 TIP3 H1 HT 0.417000 1.0080 0 + 9164 W1 2225 TIP3 H2 HT 0.417000 1.0080 0 + 9165 W1 2226 TIP3 OH2 OT -0.834000 15.9994 0 + 9166 W1 2226 TIP3 H1 HT 0.417000 1.0080 0 + 9167 W1 2226 TIP3 H2 HT 0.417000 1.0080 0 + 9168 W1 2227 TIP3 OH2 OT -0.834000 15.9994 0 + 9169 W1 2227 TIP3 H1 HT 0.417000 1.0080 0 + 9170 W1 2227 TIP3 H2 HT 0.417000 1.0080 0 + 9171 W1 2228 TIP3 OH2 OT -0.834000 15.9994 0 + 9172 W1 2228 TIP3 H1 HT 0.417000 1.0080 0 + 9173 W1 2228 TIP3 H2 HT 0.417000 1.0080 0 + 9174 W1 2229 TIP3 OH2 OT -0.834000 15.9994 0 + 9175 W1 2229 TIP3 H1 HT 0.417000 1.0080 0 + 9176 W1 2229 TIP3 H2 HT 0.417000 1.0080 0 + 9177 W1 2230 TIP3 OH2 OT -0.834000 15.9994 0 + 9178 W1 2230 TIP3 H1 HT 0.417000 1.0080 0 + 9179 W1 2230 TIP3 H2 HT 0.417000 1.0080 0 + 9180 W1 2231 TIP3 OH2 OT -0.834000 15.9994 0 + 9181 W1 2231 TIP3 H1 HT 0.417000 1.0080 0 + 9182 W1 2231 TIP3 H2 HT 0.417000 1.0080 0 + 9183 W1 2232 TIP3 OH2 OT -0.834000 15.9994 0 + 9184 W1 2232 TIP3 H1 HT 0.417000 1.0080 0 + 9185 W1 2232 TIP3 H2 HT 0.417000 1.0080 0 + 9186 W1 2233 TIP3 OH2 OT -0.834000 15.9994 0 + 9187 W1 2233 TIP3 H1 HT 0.417000 1.0080 0 + 9188 W1 2233 TIP3 H2 HT 0.417000 1.0080 0 + 9189 W1 2234 TIP3 OH2 OT -0.834000 15.9994 0 + 9190 W1 2234 TIP3 H1 HT 0.417000 1.0080 0 + 9191 W1 2234 TIP3 H2 HT 0.417000 1.0080 0 + 9192 W1 2235 TIP3 OH2 OT -0.834000 15.9994 0 + 9193 W1 2235 TIP3 H1 HT 0.417000 1.0080 0 + 9194 W1 2235 TIP3 H2 HT 0.417000 1.0080 0 + 9195 W1 2236 TIP3 OH2 OT -0.834000 15.9994 0 + 9196 W1 2236 TIP3 H1 HT 0.417000 1.0080 0 + 9197 W1 2236 TIP3 H2 HT 0.417000 1.0080 0 + 9198 W1 2237 TIP3 OH2 OT -0.834000 15.9994 0 + 9199 W1 2237 TIP3 H1 HT 0.417000 1.0080 0 + 9200 W1 2237 TIP3 H2 HT 0.417000 1.0080 0 + 9201 W1 2238 TIP3 OH2 OT -0.834000 15.9994 0 + 9202 W1 2238 TIP3 H1 HT 0.417000 1.0080 0 + 9203 W1 2238 TIP3 H2 HT 0.417000 1.0080 0 + 9204 W1 2239 TIP3 OH2 OT -0.834000 15.9994 0 + 9205 W1 2239 TIP3 H1 HT 0.417000 1.0080 0 + 9206 W1 2239 TIP3 H2 HT 0.417000 1.0080 0 + 9207 W1 2240 TIP3 OH2 OT -0.834000 15.9994 0 + 9208 W1 2240 TIP3 H1 HT 0.417000 1.0080 0 + 9209 W1 2240 TIP3 H2 HT 0.417000 1.0080 0 + 9210 W1 2241 TIP3 OH2 OT -0.834000 15.9994 0 + 9211 W1 2241 TIP3 H1 HT 0.417000 1.0080 0 + 9212 W1 2241 TIP3 H2 HT 0.417000 1.0080 0 + 9213 W1 2242 TIP3 OH2 OT -0.834000 15.9994 0 + 9214 W1 2242 TIP3 H1 HT 0.417000 1.0080 0 + 9215 W1 2242 TIP3 H2 HT 0.417000 1.0080 0 + 9216 W1 2243 TIP3 OH2 OT -0.834000 15.9994 0 + 9217 W1 2243 TIP3 H1 HT 0.417000 1.0080 0 + 9218 W1 2243 TIP3 H2 HT 0.417000 1.0080 0 + 9219 W1 2244 TIP3 OH2 OT -0.834000 15.9994 0 + 9220 W1 2244 TIP3 H1 HT 0.417000 1.0080 0 + 9221 W1 2244 TIP3 H2 HT 0.417000 1.0080 0 + 9222 W1 2245 TIP3 OH2 OT -0.834000 15.9994 0 + 9223 W1 2245 TIP3 H1 HT 0.417000 1.0080 0 + 9224 W1 2245 TIP3 H2 HT 0.417000 1.0080 0 + 9225 W1 2246 TIP3 OH2 OT -0.834000 15.9994 0 + 9226 W1 2246 TIP3 H1 HT 0.417000 1.0080 0 + 9227 W1 2246 TIP3 H2 HT 0.417000 1.0080 0 + 9228 W1 2247 TIP3 OH2 OT -0.834000 15.9994 0 + 9229 W1 2247 TIP3 H1 HT 0.417000 1.0080 0 + 9230 W1 2247 TIP3 H2 HT 0.417000 1.0080 0 + 9231 W1 2248 TIP3 OH2 OT -0.834000 15.9994 0 + 9232 W1 2248 TIP3 H1 HT 0.417000 1.0080 0 + 9233 W1 2248 TIP3 H2 HT 0.417000 1.0080 0 + 9234 W1 2249 TIP3 OH2 OT -0.834000 15.9994 0 + 9235 W1 2249 TIP3 H1 HT 0.417000 1.0080 0 + 9236 W1 2249 TIP3 H2 HT 0.417000 1.0080 0 + 9237 W1 2250 TIP3 OH2 OT -0.834000 15.9994 0 + 9238 W1 2250 TIP3 H1 HT 0.417000 1.0080 0 + 9239 W1 2250 TIP3 H2 HT 0.417000 1.0080 0 + 9240 W1 2251 TIP3 OH2 OT -0.834000 15.9994 0 + 9241 W1 2251 TIP3 H1 HT 0.417000 1.0080 0 + 9242 W1 2251 TIP3 H2 HT 0.417000 1.0080 0 + 9243 W1 2252 TIP3 OH2 OT -0.834000 15.9994 0 + 9244 W1 2252 TIP3 H1 HT 0.417000 1.0080 0 + 9245 W1 2252 TIP3 H2 HT 0.417000 1.0080 0 + 9246 W1 2253 TIP3 OH2 OT -0.834000 15.9994 0 + 9247 W1 2253 TIP3 H1 HT 0.417000 1.0080 0 + 9248 W1 2253 TIP3 H2 HT 0.417000 1.0080 0 + 9249 W1 2254 TIP3 OH2 OT -0.834000 15.9994 0 + 9250 W1 2254 TIP3 H1 HT 0.417000 1.0080 0 + 9251 W1 2254 TIP3 H2 HT 0.417000 1.0080 0 + 9252 W1 2255 TIP3 OH2 OT -0.834000 15.9994 0 + 9253 W1 2255 TIP3 H1 HT 0.417000 1.0080 0 + 9254 W1 2255 TIP3 H2 HT 0.417000 1.0080 0 + 9255 W1 2256 TIP3 OH2 OT -0.834000 15.9994 0 + 9256 W1 2256 TIP3 H1 HT 0.417000 1.0080 0 + 9257 W1 2256 TIP3 H2 HT 0.417000 1.0080 0 + 9258 W1 2257 TIP3 OH2 OT -0.834000 15.9994 0 + 9259 W1 2257 TIP3 H1 HT 0.417000 1.0080 0 + 9260 W1 2257 TIP3 H2 HT 0.417000 1.0080 0 + 9261 W1 2258 TIP3 OH2 OT -0.834000 15.9994 0 + 9262 W1 2258 TIP3 H1 HT 0.417000 1.0080 0 + 9263 W1 2258 TIP3 H2 HT 0.417000 1.0080 0 + 9264 W1 2259 TIP3 OH2 OT -0.834000 15.9994 0 + 9265 W1 2259 TIP3 H1 HT 0.417000 1.0080 0 + 9266 W1 2259 TIP3 H2 HT 0.417000 1.0080 0 + 9267 W1 2260 TIP3 OH2 OT -0.834000 15.9994 0 + 9268 W1 2260 TIP3 H1 HT 0.417000 1.0080 0 + 9269 W1 2260 TIP3 H2 HT 0.417000 1.0080 0 + 9270 W1 2261 TIP3 OH2 OT -0.834000 15.9994 0 + 9271 W1 2261 TIP3 H1 HT 0.417000 1.0080 0 + 9272 W1 2261 TIP3 H2 HT 0.417000 1.0080 0 + 9273 W1 2262 TIP3 OH2 OT -0.834000 15.9994 0 + 9274 W1 2262 TIP3 H1 HT 0.417000 1.0080 0 + 9275 W1 2262 TIP3 H2 HT 0.417000 1.0080 0 + 9276 W1 2263 TIP3 OH2 OT -0.834000 15.9994 0 + 9277 W1 2263 TIP3 H1 HT 0.417000 1.0080 0 + 9278 W1 2263 TIP3 H2 HT 0.417000 1.0080 0 + 9279 W1 2264 TIP3 OH2 OT -0.834000 15.9994 0 + 9280 W1 2264 TIP3 H1 HT 0.417000 1.0080 0 + 9281 W1 2264 TIP3 H2 HT 0.417000 1.0080 0 + 9282 W1 2265 TIP3 OH2 OT -0.834000 15.9994 0 + 9283 W1 2265 TIP3 H1 HT 0.417000 1.0080 0 + 9284 W1 2265 TIP3 H2 HT 0.417000 1.0080 0 + 9285 W1 2266 TIP3 OH2 OT -0.834000 15.9994 0 + 9286 W1 2266 TIP3 H1 HT 0.417000 1.0080 0 + 9287 W1 2266 TIP3 H2 HT 0.417000 1.0080 0 + 9288 W1 2267 TIP3 OH2 OT -0.834000 15.9994 0 + 9289 W1 2267 TIP3 H1 HT 0.417000 1.0080 0 + 9290 W1 2267 TIP3 H2 HT 0.417000 1.0080 0 + 9291 W1 2268 TIP3 OH2 OT -0.834000 15.9994 0 + 9292 W1 2268 TIP3 H1 HT 0.417000 1.0080 0 + 9293 W1 2268 TIP3 H2 HT 0.417000 1.0080 0 + 9294 W1 2269 TIP3 OH2 OT -0.834000 15.9994 0 + 9295 W1 2269 TIP3 H1 HT 0.417000 1.0080 0 + 9296 W1 2269 TIP3 H2 HT 0.417000 1.0080 0 + 9297 W1 2270 TIP3 OH2 OT -0.834000 15.9994 0 + 9298 W1 2270 TIP3 H1 HT 0.417000 1.0080 0 + 9299 W1 2270 TIP3 H2 HT 0.417000 1.0080 0 + 9300 W1 2271 TIP3 OH2 OT -0.834000 15.9994 0 + 9301 W1 2271 TIP3 H1 HT 0.417000 1.0080 0 + 9302 W1 2271 TIP3 H2 HT 0.417000 1.0080 0 + 9303 W1 2272 TIP3 OH2 OT -0.834000 15.9994 0 + 9304 W1 2272 TIP3 H1 HT 0.417000 1.0080 0 + 9305 W1 2272 TIP3 H2 HT 0.417000 1.0080 0 + 9306 W1 2273 TIP3 OH2 OT -0.834000 15.9994 0 + 9307 W1 2273 TIP3 H1 HT 0.417000 1.0080 0 + 9308 W1 2273 TIP3 H2 HT 0.417000 1.0080 0 + 9309 W1 2274 TIP3 OH2 OT -0.834000 15.9994 0 + 9310 W1 2274 TIP3 H1 HT 0.417000 1.0080 0 + 9311 W1 2274 TIP3 H2 HT 0.417000 1.0080 0 + 9312 W1 2275 TIP3 OH2 OT -0.834000 15.9994 0 + 9313 W1 2275 TIP3 H1 HT 0.417000 1.0080 0 + 9314 W1 2275 TIP3 H2 HT 0.417000 1.0080 0 + 9315 W1 2276 TIP3 OH2 OT -0.834000 15.9994 0 + 9316 W1 2276 TIP3 H1 HT 0.417000 1.0080 0 + 9317 W1 2276 TIP3 H2 HT 0.417000 1.0080 0 + 9318 W1 2277 TIP3 OH2 OT -0.834000 15.9994 0 + 9319 W1 2277 TIP3 H1 HT 0.417000 1.0080 0 + 9320 W1 2277 TIP3 H2 HT 0.417000 1.0080 0 + 9321 W1 2278 TIP3 OH2 OT -0.834000 15.9994 0 + 9322 W1 2278 TIP3 H1 HT 0.417000 1.0080 0 + 9323 W1 2278 TIP3 H2 HT 0.417000 1.0080 0 + 9324 W1 2279 TIP3 OH2 OT -0.834000 15.9994 0 + 9325 W1 2279 TIP3 H1 HT 0.417000 1.0080 0 + 9326 W1 2279 TIP3 H2 HT 0.417000 1.0080 0 + 9327 W1 2280 TIP3 OH2 OT -0.834000 15.9994 0 + 9328 W1 2280 TIP3 H1 HT 0.417000 1.0080 0 + 9329 W1 2280 TIP3 H2 HT 0.417000 1.0080 0 + 9330 W1 2281 TIP3 OH2 OT -0.834000 15.9994 0 + 9331 W1 2281 TIP3 H1 HT 0.417000 1.0080 0 + 9332 W1 2281 TIP3 H2 HT 0.417000 1.0080 0 + 9333 W1 2282 TIP3 OH2 OT -0.834000 15.9994 0 + 9334 W1 2282 TIP3 H1 HT 0.417000 1.0080 0 + 9335 W1 2282 TIP3 H2 HT 0.417000 1.0080 0 + 9336 W1 2283 TIP3 OH2 OT -0.834000 15.9994 0 + 9337 W1 2283 TIP3 H1 HT 0.417000 1.0080 0 + 9338 W1 2283 TIP3 H2 HT 0.417000 1.0080 0 + 9339 W1 2284 TIP3 OH2 OT -0.834000 15.9994 0 + 9340 W1 2284 TIP3 H1 HT 0.417000 1.0080 0 + 9341 W1 2284 TIP3 H2 HT 0.417000 1.0080 0 + 9342 W1 2285 TIP3 OH2 OT -0.834000 15.9994 0 + 9343 W1 2285 TIP3 H1 HT 0.417000 1.0080 0 + 9344 W1 2285 TIP3 H2 HT 0.417000 1.0080 0 + 9345 W1 2286 TIP3 OH2 OT -0.834000 15.9994 0 + 9346 W1 2286 TIP3 H1 HT 0.417000 1.0080 0 + 9347 W1 2286 TIP3 H2 HT 0.417000 1.0080 0 + 9348 W1 2287 TIP3 OH2 OT -0.834000 15.9994 0 + 9349 W1 2287 TIP3 H1 HT 0.417000 1.0080 0 + 9350 W1 2287 TIP3 H2 HT 0.417000 1.0080 0 + 9351 W1 2288 TIP3 OH2 OT -0.834000 15.9994 0 + 9352 W1 2288 TIP3 H1 HT 0.417000 1.0080 0 + 9353 W1 2288 TIP3 H2 HT 0.417000 1.0080 0 + 9354 W1 2289 TIP3 OH2 OT -0.834000 15.9994 0 + 9355 W1 2289 TIP3 H1 HT 0.417000 1.0080 0 + 9356 W1 2289 TIP3 H2 HT 0.417000 1.0080 0 + 9357 W1 2290 TIP3 OH2 OT -0.834000 15.9994 0 + 9358 W1 2290 TIP3 H1 HT 0.417000 1.0080 0 + 9359 W1 2290 TIP3 H2 HT 0.417000 1.0080 0 + 9360 W1 2291 TIP3 OH2 OT -0.834000 15.9994 0 + 9361 W1 2291 TIP3 H1 HT 0.417000 1.0080 0 + 9362 W1 2291 TIP3 H2 HT 0.417000 1.0080 0 + 9363 W1 2292 TIP3 OH2 OT -0.834000 15.9994 0 + 9364 W1 2292 TIP3 H1 HT 0.417000 1.0080 0 + 9365 W1 2292 TIP3 H2 HT 0.417000 1.0080 0 + 9366 W1 2293 TIP3 OH2 OT -0.834000 15.9994 0 + 9367 W1 2293 TIP3 H1 HT 0.417000 1.0080 0 + 9368 W1 2293 TIP3 H2 HT 0.417000 1.0080 0 + 9369 W1 2294 TIP3 OH2 OT -0.834000 15.9994 0 + 9370 W1 2294 TIP3 H1 HT 0.417000 1.0080 0 + 9371 W1 2294 TIP3 H2 HT 0.417000 1.0080 0 + 9372 W1 2295 TIP3 OH2 OT -0.834000 15.9994 0 + 9373 W1 2295 TIP3 H1 HT 0.417000 1.0080 0 + 9374 W1 2295 TIP3 H2 HT 0.417000 1.0080 0 + 9375 W1 2296 TIP3 OH2 OT -0.834000 15.9994 0 + 9376 W1 2296 TIP3 H1 HT 0.417000 1.0080 0 + 9377 W1 2296 TIP3 H2 HT 0.417000 1.0080 0 + 9378 W1 2297 TIP3 OH2 OT -0.834000 15.9994 0 + 9379 W1 2297 TIP3 H1 HT 0.417000 1.0080 0 + 9380 W1 2297 TIP3 H2 HT 0.417000 1.0080 0 + 9381 W1 2298 TIP3 OH2 OT -0.834000 15.9994 0 + 9382 W1 2298 TIP3 H1 HT 0.417000 1.0080 0 + 9383 W1 2298 TIP3 H2 HT 0.417000 1.0080 0 + 9384 W1 2299 TIP3 OH2 OT -0.834000 15.9994 0 + 9385 W1 2299 TIP3 H1 HT 0.417000 1.0080 0 + 9386 W1 2299 TIP3 H2 HT 0.417000 1.0080 0 + 9387 W1 2300 TIP3 OH2 OT -0.834000 15.9994 0 + 9388 W1 2300 TIP3 H1 HT 0.417000 1.0080 0 + 9389 W1 2300 TIP3 H2 HT 0.417000 1.0080 0 + 9390 W1 2301 TIP3 OH2 OT -0.834000 15.9994 0 + 9391 W1 2301 TIP3 H1 HT 0.417000 1.0080 0 + 9392 W1 2301 TIP3 H2 HT 0.417000 1.0080 0 + 9393 W1 2302 TIP3 OH2 OT -0.834000 15.9994 0 + 9394 W1 2302 TIP3 H1 HT 0.417000 1.0080 0 + 9395 W1 2302 TIP3 H2 HT 0.417000 1.0080 0 + 9396 W1 2303 TIP3 OH2 OT -0.834000 15.9994 0 + 9397 W1 2303 TIP3 H1 HT 0.417000 1.0080 0 + 9398 W1 2303 TIP3 H2 HT 0.417000 1.0080 0 + 9399 W1 2304 TIP3 OH2 OT -0.834000 15.9994 0 + 9400 W1 2304 TIP3 H1 HT 0.417000 1.0080 0 + 9401 W1 2304 TIP3 H2 HT 0.417000 1.0080 0 + 9402 W1 2305 TIP3 OH2 OT -0.834000 15.9994 0 + 9403 W1 2305 TIP3 H1 HT 0.417000 1.0080 0 + 9404 W1 2305 TIP3 H2 HT 0.417000 1.0080 0 + 9405 W1 2306 TIP3 OH2 OT -0.834000 15.9994 0 + 9406 W1 2306 TIP3 H1 HT 0.417000 1.0080 0 + 9407 W1 2306 TIP3 H2 HT 0.417000 1.0080 0 + 9408 W1 2307 TIP3 OH2 OT -0.834000 15.9994 0 + 9409 W1 2307 TIP3 H1 HT 0.417000 1.0080 0 + 9410 W1 2307 TIP3 H2 HT 0.417000 1.0080 0 + 9411 W1 2308 TIP3 OH2 OT -0.834000 15.9994 0 + 9412 W1 2308 TIP3 H1 HT 0.417000 1.0080 0 + 9413 W1 2308 TIP3 H2 HT 0.417000 1.0080 0 + 9414 W1 2309 TIP3 OH2 OT -0.834000 15.9994 0 + 9415 W1 2309 TIP3 H1 HT 0.417000 1.0080 0 + 9416 W1 2309 TIP3 H2 HT 0.417000 1.0080 0 + 9417 W1 2310 TIP3 OH2 OT -0.834000 15.9994 0 + 9418 W1 2310 TIP3 H1 HT 0.417000 1.0080 0 + 9419 W1 2310 TIP3 H2 HT 0.417000 1.0080 0 + 9420 W1 2311 TIP3 OH2 OT -0.834000 15.9994 0 + 9421 W1 2311 TIP3 H1 HT 0.417000 1.0080 0 + 9422 W1 2311 TIP3 H2 HT 0.417000 1.0080 0 + 9423 W1 2312 TIP3 OH2 OT -0.834000 15.9994 0 + 9424 W1 2312 TIP3 H1 HT 0.417000 1.0080 0 + 9425 W1 2312 TIP3 H2 HT 0.417000 1.0080 0 + 9426 W1 2313 TIP3 OH2 OT -0.834000 15.9994 0 + 9427 W1 2313 TIP3 H1 HT 0.417000 1.0080 0 + 9428 W1 2313 TIP3 H2 HT 0.417000 1.0080 0 + 9429 W1 2314 TIP3 OH2 OT -0.834000 15.9994 0 + 9430 W1 2314 TIP3 H1 HT 0.417000 1.0080 0 + 9431 W1 2314 TIP3 H2 HT 0.417000 1.0080 0 + 9432 W1 2315 TIP3 OH2 OT -0.834000 15.9994 0 + 9433 W1 2315 TIP3 H1 HT 0.417000 1.0080 0 + 9434 W1 2315 TIP3 H2 HT 0.417000 1.0080 0 + 9435 W1 2316 TIP3 OH2 OT -0.834000 15.9994 0 + 9436 W1 2316 TIP3 H1 HT 0.417000 1.0080 0 + 9437 W1 2316 TIP3 H2 HT 0.417000 1.0080 0 + 9438 W1 2317 TIP3 OH2 OT -0.834000 15.9994 0 + 9439 W1 2317 TIP3 H1 HT 0.417000 1.0080 0 + 9440 W1 2317 TIP3 H2 HT 0.417000 1.0080 0 + 9441 W1 2318 TIP3 OH2 OT -0.834000 15.9994 0 + 9442 W1 2318 TIP3 H1 HT 0.417000 1.0080 0 + 9443 W1 2318 TIP3 H2 HT 0.417000 1.0080 0 + 9444 W1 2319 TIP3 OH2 OT -0.834000 15.9994 0 + 9445 W1 2319 TIP3 H1 HT 0.417000 1.0080 0 + 9446 W1 2319 TIP3 H2 HT 0.417000 1.0080 0 + 9447 W1 2320 TIP3 OH2 OT -0.834000 15.9994 0 + 9448 W1 2320 TIP3 H1 HT 0.417000 1.0080 0 + 9449 W1 2320 TIP3 H2 HT 0.417000 1.0080 0 + 9450 W1 2321 TIP3 OH2 OT -0.834000 15.9994 0 + 9451 W1 2321 TIP3 H1 HT 0.417000 1.0080 0 + 9452 W1 2321 TIP3 H2 HT 0.417000 1.0080 0 + 9453 W1 2322 TIP3 OH2 OT -0.834000 15.9994 0 + 9454 W1 2322 TIP3 H1 HT 0.417000 1.0080 0 + 9455 W1 2322 TIP3 H2 HT 0.417000 1.0080 0 + 9456 W1 2323 TIP3 OH2 OT -0.834000 15.9994 0 + 9457 W1 2323 TIP3 H1 HT 0.417000 1.0080 0 + 9458 W1 2323 TIP3 H2 HT 0.417000 1.0080 0 + 9459 W1 2324 TIP3 OH2 OT -0.834000 15.9994 0 + 9460 W1 2324 TIP3 H1 HT 0.417000 1.0080 0 + 9461 W1 2324 TIP3 H2 HT 0.417000 1.0080 0 + 9462 W1 2325 TIP3 OH2 OT -0.834000 15.9994 0 + 9463 W1 2325 TIP3 H1 HT 0.417000 1.0080 0 + 9464 W1 2325 TIP3 H2 HT 0.417000 1.0080 0 + 9465 W1 2326 TIP3 OH2 OT -0.834000 15.9994 0 + 9466 W1 2326 TIP3 H1 HT 0.417000 1.0080 0 + 9467 W1 2326 TIP3 H2 HT 0.417000 1.0080 0 + 9468 W1 2327 TIP3 OH2 OT -0.834000 15.9994 0 + 9469 W1 2327 TIP3 H1 HT 0.417000 1.0080 0 + 9470 W1 2327 TIP3 H2 HT 0.417000 1.0080 0 + 9471 W1 2328 TIP3 OH2 OT -0.834000 15.9994 0 + 9472 W1 2328 TIP3 H1 HT 0.417000 1.0080 0 + 9473 W1 2328 TIP3 H2 HT 0.417000 1.0080 0 + 9474 W1 2329 TIP3 OH2 OT -0.834000 15.9994 0 + 9475 W1 2329 TIP3 H1 HT 0.417000 1.0080 0 + 9476 W1 2329 TIP3 H2 HT 0.417000 1.0080 0 + 9477 W1 2330 TIP3 OH2 OT -0.834000 15.9994 0 + 9478 W1 2330 TIP3 H1 HT 0.417000 1.0080 0 + 9479 W1 2330 TIP3 H2 HT 0.417000 1.0080 0 + 9480 W1 2331 TIP3 OH2 OT -0.834000 15.9994 0 + 9481 W1 2331 TIP3 H1 HT 0.417000 1.0080 0 + 9482 W1 2331 TIP3 H2 HT 0.417000 1.0080 0 + 9483 W1 2332 TIP3 OH2 OT -0.834000 15.9994 0 + 9484 W1 2332 TIP3 H1 HT 0.417000 1.0080 0 + 9485 W1 2332 TIP3 H2 HT 0.417000 1.0080 0 + 9486 W1 2333 TIP3 OH2 OT -0.834000 15.9994 0 + 9487 W1 2333 TIP3 H1 HT 0.417000 1.0080 0 + 9488 W1 2333 TIP3 H2 HT 0.417000 1.0080 0 + 9489 W1 2334 TIP3 OH2 OT -0.834000 15.9994 0 + 9490 W1 2334 TIP3 H1 HT 0.417000 1.0080 0 + 9491 W1 2334 TIP3 H2 HT 0.417000 1.0080 0 + 9492 W1 2335 TIP3 OH2 OT -0.834000 15.9994 0 + 9493 W1 2335 TIP3 H1 HT 0.417000 1.0080 0 + 9494 W1 2335 TIP3 H2 HT 0.417000 1.0080 0 + 9495 W1 2336 TIP3 OH2 OT -0.834000 15.9994 0 + 9496 W1 2336 TIP3 H1 HT 0.417000 1.0080 0 + 9497 W1 2336 TIP3 H2 HT 0.417000 1.0080 0 + 9498 W1 2337 TIP3 OH2 OT -0.834000 15.9994 0 + 9499 W1 2337 TIP3 H1 HT 0.417000 1.0080 0 + 9500 W1 2337 TIP3 H2 HT 0.417000 1.0080 0 + 9501 W1 2338 TIP3 OH2 OT -0.834000 15.9994 0 + 9502 W1 2338 TIP3 H1 HT 0.417000 1.0080 0 + 9503 W1 2338 TIP3 H2 HT 0.417000 1.0080 0 + 9504 W1 2339 TIP3 OH2 OT -0.834000 15.9994 0 + 9505 W1 2339 TIP3 H1 HT 0.417000 1.0080 0 + 9506 W1 2339 TIP3 H2 HT 0.417000 1.0080 0 + 9507 W1 2340 TIP3 OH2 OT -0.834000 15.9994 0 + 9508 W1 2340 TIP3 H1 HT 0.417000 1.0080 0 + 9509 W1 2340 TIP3 H2 HT 0.417000 1.0080 0 + 9510 W1 2341 TIP3 OH2 OT -0.834000 15.9994 0 + 9511 W1 2341 TIP3 H1 HT 0.417000 1.0080 0 + 9512 W1 2341 TIP3 H2 HT 0.417000 1.0080 0 + 9513 W1 2342 TIP3 OH2 OT -0.834000 15.9994 0 + 9514 W1 2342 TIP3 H1 HT 0.417000 1.0080 0 + 9515 W1 2342 TIP3 H2 HT 0.417000 1.0080 0 + 9516 W1 2343 TIP3 OH2 OT -0.834000 15.9994 0 + 9517 W1 2343 TIP3 H1 HT 0.417000 1.0080 0 + 9518 W1 2343 TIP3 H2 HT 0.417000 1.0080 0 + 9519 W1 2344 TIP3 OH2 OT -0.834000 15.9994 0 + 9520 W1 2344 TIP3 H1 HT 0.417000 1.0080 0 + 9521 W1 2344 TIP3 H2 HT 0.417000 1.0080 0 + 9522 W1 2345 TIP3 OH2 OT -0.834000 15.9994 0 + 9523 W1 2345 TIP3 H1 HT 0.417000 1.0080 0 + 9524 W1 2345 TIP3 H2 HT 0.417000 1.0080 0 + 9525 W1 2346 TIP3 OH2 OT -0.834000 15.9994 0 + 9526 W1 2346 TIP3 H1 HT 0.417000 1.0080 0 + 9527 W1 2346 TIP3 H2 HT 0.417000 1.0080 0 + 9528 W1 2347 TIP3 OH2 OT -0.834000 15.9994 0 + 9529 W1 2347 TIP3 H1 HT 0.417000 1.0080 0 + 9530 W1 2347 TIP3 H2 HT 0.417000 1.0080 0 + 9531 W1 2348 TIP3 OH2 OT -0.834000 15.9994 0 + 9532 W1 2348 TIP3 H1 HT 0.417000 1.0080 0 + 9533 W1 2348 TIP3 H2 HT 0.417000 1.0080 0 + 9534 W1 2349 TIP3 OH2 OT -0.834000 15.9994 0 + 9535 W1 2349 TIP3 H1 HT 0.417000 1.0080 0 + 9536 W1 2349 TIP3 H2 HT 0.417000 1.0080 0 + 9537 W1 2350 TIP3 OH2 OT -0.834000 15.9994 0 + 9538 W1 2350 TIP3 H1 HT 0.417000 1.0080 0 + 9539 W1 2350 TIP3 H2 HT 0.417000 1.0080 0 + 9540 W1 2351 TIP3 OH2 OT -0.834000 15.9994 0 + 9541 W1 2351 TIP3 H1 HT 0.417000 1.0080 0 + 9542 W1 2351 TIP3 H2 HT 0.417000 1.0080 0 + 9543 W1 2352 TIP3 OH2 OT -0.834000 15.9994 0 + 9544 W1 2352 TIP3 H1 HT 0.417000 1.0080 0 + 9545 W1 2352 TIP3 H2 HT 0.417000 1.0080 0 + 9546 W1 2353 TIP3 OH2 OT -0.834000 15.9994 0 + 9547 W1 2353 TIP3 H1 HT 0.417000 1.0080 0 + 9548 W1 2353 TIP3 H2 HT 0.417000 1.0080 0 + 9549 W1 2354 TIP3 OH2 OT -0.834000 15.9994 0 + 9550 W1 2354 TIP3 H1 HT 0.417000 1.0080 0 + 9551 W1 2354 TIP3 H2 HT 0.417000 1.0080 0 + 9552 W1 2355 TIP3 OH2 OT -0.834000 15.9994 0 + 9553 W1 2355 TIP3 H1 HT 0.417000 1.0080 0 + 9554 W1 2355 TIP3 H2 HT 0.417000 1.0080 0 + 9555 W1 2356 TIP3 OH2 OT -0.834000 15.9994 0 + 9556 W1 2356 TIP3 H1 HT 0.417000 1.0080 0 + 9557 W1 2356 TIP3 H2 HT 0.417000 1.0080 0 + 9558 W1 2357 TIP3 OH2 OT -0.834000 15.9994 0 + 9559 W1 2357 TIP3 H1 HT 0.417000 1.0080 0 + 9560 W1 2357 TIP3 H2 HT 0.417000 1.0080 0 + 9561 W1 2358 TIP3 OH2 OT -0.834000 15.9994 0 + 9562 W1 2358 TIP3 H1 HT 0.417000 1.0080 0 + 9563 W1 2358 TIP3 H2 HT 0.417000 1.0080 0 + 9564 W1 2359 TIP3 OH2 OT -0.834000 15.9994 0 + 9565 W1 2359 TIP3 H1 HT 0.417000 1.0080 0 + 9566 W1 2359 TIP3 H2 HT 0.417000 1.0080 0 + 9567 W1 2360 TIP3 OH2 OT -0.834000 15.9994 0 + 9568 W1 2360 TIP3 H1 HT 0.417000 1.0080 0 + 9569 W1 2360 TIP3 H2 HT 0.417000 1.0080 0 + 9570 W1 2361 TIP3 OH2 OT -0.834000 15.9994 0 + 9571 W1 2361 TIP3 H1 HT 0.417000 1.0080 0 + 9572 W1 2361 TIP3 H2 HT 0.417000 1.0080 0 + 9573 W1 2362 TIP3 OH2 OT -0.834000 15.9994 0 + 9574 W1 2362 TIP3 H1 HT 0.417000 1.0080 0 + 9575 W1 2362 TIP3 H2 HT 0.417000 1.0080 0 + 9576 W1 2363 TIP3 OH2 OT -0.834000 15.9994 0 + 9577 W1 2363 TIP3 H1 HT 0.417000 1.0080 0 + 9578 W1 2363 TIP3 H2 HT 0.417000 1.0080 0 + 9579 W1 2364 TIP3 OH2 OT -0.834000 15.9994 0 + 9580 W1 2364 TIP3 H1 HT 0.417000 1.0080 0 + 9581 W1 2364 TIP3 H2 HT 0.417000 1.0080 0 + 9582 W1 2365 TIP3 OH2 OT -0.834000 15.9994 0 + 9583 W1 2365 TIP3 H1 HT 0.417000 1.0080 0 + 9584 W1 2365 TIP3 H2 HT 0.417000 1.0080 0 + 9585 W1 2366 TIP3 OH2 OT -0.834000 15.9994 0 + 9586 W1 2366 TIP3 H1 HT 0.417000 1.0080 0 + 9587 W1 2366 TIP3 H2 HT 0.417000 1.0080 0 + 9588 W1 2367 TIP3 OH2 OT -0.834000 15.9994 0 + 9589 W1 2367 TIP3 H1 HT 0.417000 1.0080 0 + 9590 W1 2367 TIP3 H2 HT 0.417000 1.0080 0 + 9591 W1 2368 TIP3 OH2 OT -0.834000 15.9994 0 + 9592 W1 2368 TIP3 H1 HT 0.417000 1.0080 0 + 9593 W1 2368 TIP3 H2 HT 0.417000 1.0080 0 + 9594 W1 2369 TIP3 OH2 OT -0.834000 15.9994 0 + 9595 W1 2369 TIP3 H1 HT 0.417000 1.0080 0 + 9596 W1 2369 TIP3 H2 HT 0.417000 1.0080 0 + 9597 W1 2370 TIP3 OH2 OT -0.834000 15.9994 0 + 9598 W1 2370 TIP3 H1 HT 0.417000 1.0080 0 + 9599 W1 2370 TIP3 H2 HT 0.417000 1.0080 0 + 9600 W1 2371 TIP3 OH2 OT -0.834000 15.9994 0 + 9601 W1 2371 TIP3 H1 HT 0.417000 1.0080 0 + 9602 W1 2371 TIP3 H2 HT 0.417000 1.0080 0 + 9603 W1 2372 TIP3 OH2 OT -0.834000 15.9994 0 + 9604 W1 2372 TIP3 H1 HT 0.417000 1.0080 0 + 9605 W1 2372 TIP3 H2 HT 0.417000 1.0080 0 + 9606 W1 2373 TIP3 OH2 OT -0.834000 15.9994 0 + 9607 W1 2373 TIP3 H1 HT 0.417000 1.0080 0 + 9608 W1 2373 TIP3 H2 HT 0.417000 1.0080 0 + 9609 W1 2374 TIP3 OH2 OT -0.834000 15.9994 0 + 9610 W1 2374 TIP3 H1 HT 0.417000 1.0080 0 + 9611 W1 2374 TIP3 H2 HT 0.417000 1.0080 0 + 9612 W1 2375 TIP3 OH2 OT -0.834000 15.9994 0 + 9613 W1 2375 TIP3 H1 HT 0.417000 1.0080 0 + 9614 W1 2375 TIP3 H2 HT 0.417000 1.0080 0 + 9615 W1 2376 TIP3 OH2 OT -0.834000 15.9994 0 + 9616 W1 2376 TIP3 H1 HT 0.417000 1.0080 0 + 9617 W1 2376 TIP3 H2 HT 0.417000 1.0080 0 + 9618 W1 2377 TIP3 OH2 OT -0.834000 15.9994 0 + 9619 W1 2377 TIP3 H1 HT 0.417000 1.0080 0 + 9620 W1 2377 TIP3 H2 HT 0.417000 1.0080 0 + 9621 W1 2378 TIP3 OH2 OT -0.834000 15.9994 0 + 9622 W1 2378 TIP3 H1 HT 0.417000 1.0080 0 + 9623 W1 2378 TIP3 H2 HT 0.417000 1.0080 0 + 9624 W1 2379 TIP3 OH2 OT -0.834000 15.9994 0 + 9625 W1 2379 TIP3 H1 HT 0.417000 1.0080 0 + 9626 W1 2379 TIP3 H2 HT 0.417000 1.0080 0 + 9627 W1 2380 TIP3 OH2 OT -0.834000 15.9994 0 + 9628 W1 2380 TIP3 H1 HT 0.417000 1.0080 0 + 9629 W1 2380 TIP3 H2 HT 0.417000 1.0080 0 + 9630 W1 2381 TIP3 OH2 OT -0.834000 15.9994 0 + 9631 W1 2381 TIP3 H1 HT 0.417000 1.0080 0 + 9632 W1 2381 TIP3 H2 HT 0.417000 1.0080 0 + 9633 W1 2382 TIP3 OH2 OT -0.834000 15.9994 0 + 9634 W1 2382 TIP3 H1 HT 0.417000 1.0080 0 + 9635 W1 2382 TIP3 H2 HT 0.417000 1.0080 0 + 9636 W1 2383 TIP3 OH2 OT -0.834000 15.9994 0 + 9637 W1 2383 TIP3 H1 HT 0.417000 1.0080 0 + 9638 W1 2383 TIP3 H2 HT 0.417000 1.0080 0 + 9639 W1 2384 TIP3 OH2 OT -0.834000 15.9994 0 + 9640 W1 2384 TIP3 H1 HT 0.417000 1.0080 0 + 9641 W1 2384 TIP3 H2 HT 0.417000 1.0080 0 + 9642 W1 2385 TIP3 OH2 OT -0.834000 15.9994 0 + 9643 W1 2385 TIP3 H1 HT 0.417000 1.0080 0 + 9644 W1 2385 TIP3 H2 HT 0.417000 1.0080 0 + 9645 W1 2386 TIP3 OH2 OT -0.834000 15.9994 0 + 9646 W1 2386 TIP3 H1 HT 0.417000 1.0080 0 + 9647 W1 2386 TIP3 H2 HT 0.417000 1.0080 0 + 9648 W1 2387 TIP3 OH2 OT -0.834000 15.9994 0 + 9649 W1 2387 TIP3 H1 HT 0.417000 1.0080 0 + 9650 W1 2387 TIP3 H2 HT 0.417000 1.0080 0 + 9651 W1 2388 TIP3 OH2 OT -0.834000 15.9994 0 + 9652 W1 2388 TIP3 H1 HT 0.417000 1.0080 0 + 9653 W1 2388 TIP3 H2 HT 0.417000 1.0080 0 + 9654 W1 2389 TIP3 OH2 OT -0.834000 15.9994 0 + 9655 W1 2389 TIP3 H1 HT 0.417000 1.0080 0 + 9656 W1 2389 TIP3 H2 HT 0.417000 1.0080 0 + 9657 W1 2390 TIP3 OH2 OT -0.834000 15.9994 0 + 9658 W1 2390 TIP3 H1 HT 0.417000 1.0080 0 + 9659 W1 2390 TIP3 H2 HT 0.417000 1.0080 0 + 9660 W1 2391 TIP3 OH2 OT -0.834000 15.9994 0 + 9661 W1 2391 TIP3 H1 HT 0.417000 1.0080 0 + 9662 W1 2391 TIP3 H2 HT 0.417000 1.0080 0 + 9663 W1 2392 TIP3 OH2 OT -0.834000 15.9994 0 + 9664 W1 2392 TIP3 H1 HT 0.417000 1.0080 0 + 9665 W1 2392 TIP3 H2 HT 0.417000 1.0080 0 + 9666 W1 2393 TIP3 OH2 OT -0.834000 15.9994 0 + 9667 W1 2393 TIP3 H1 HT 0.417000 1.0080 0 + 9668 W1 2393 TIP3 H2 HT 0.417000 1.0080 0 + 9669 W1 2394 TIP3 OH2 OT -0.834000 15.9994 0 + 9670 W1 2394 TIP3 H1 HT 0.417000 1.0080 0 + 9671 W1 2394 TIP3 H2 HT 0.417000 1.0080 0 + 9672 W1 2395 TIP3 OH2 OT -0.834000 15.9994 0 + 9673 W1 2395 TIP3 H1 HT 0.417000 1.0080 0 + 9674 W1 2395 TIP3 H2 HT 0.417000 1.0080 0 + 9675 W1 2396 TIP3 OH2 OT -0.834000 15.9994 0 + 9676 W1 2396 TIP3 H1 HT 0.417000 1.0080 0 + 9677 W1 2396 TIP3 H2 HT 0.417000 1.0080 0 + 9678 W1 2397 TIP3 OH2 OT -0.834000 15.9994 0 + 9679 W1 2397 TIP3 H1 HT 0.417000 1.0080 0 + 9680 W1 2397 TIP3 H2 HT 0.417000 1.0080 0 + 9681 W1 2398 TIP3 OH2 OT -0.834000 15.9994 0 + 9682 W1 2398 TIP3 H1 HT 0.417000 1.0080 0 + 9683 W1 2398 TIP3 H2 HT 0.417000 1.0080 0 + 9684 W1 2399 TIP3 OH2 OT -0.834000 15.9994 0 + 9685 W1 2399 TIP3 H1 HT 0.417000 1.0080 0 + 9686 W1 2399 TIP3 H2 HT 0.417000 1.0080 0 + 9687 W1 2400 TIP3 OH2 OT -0.834000 15.9994 0 + 9688 W1 2400 TIP3 H1 HT 0.417000 1.0080 0 + 9689 W1 2400 TIP3 H2 HT 0.417000 1.0080 0 + 9690 W1 2401 TIP3 OH2 OT -0.834000 15.9994 0 + 9691 W1 2401 TIP3 H1 HT 0.417000 1.0080 0 + 9692 W1 2401 TIP3 H2 HT 0.417000 1.0080 0 + 9693 W1 2402 TIP3 OH2 OT -0.834000 15.9994 0 + 9694 W1 2402 TIP3 H1 HT 0.417000 1.0080 0 + 9695 W1 2402 TIP3 H2 HT 0.417000 1.0080 0 + 9696 W1 2403 TIP3 OH2 OT -0.834000 15.9994 0 + 9697 W1 2403 TIP3 H1 HT 0.417000 1.0080 0 + 9698 W1 2403 TIP3 H2 HT 0.417000 1.0080 0 + 9699 W1 2404 TIP3 OH2 OT -0.834000 15.9994 0 + 9700 W1 2404 TIP3 H1 HT 0.417000 1.0080 0 + 9701 W1 2404 TIP3 H2 HT 0.417000 1.0080 0 + 9702 W1 2405 TIP3 OH2 OT -0.834000 15.9994 0 + 9703 W1 2405 TIP3 H1 HT 0.417000 1.0080 0 + 9704 W1 2405 TIP3 H2 HT 0.417000 1.0080 0 + 9705 W1 2406 TIP3 OH2 OT -0.834000 15.9994 0 + 9706 W1 2406 TIP3 H1 HT 0.417000 1.0080 0 + 9707 W1 2406 TIP3 H2 HT 0.417000 1.0080 0 + 9708 W1 2407 TIP3 OH2 OT -0.834000 15.9994 0 + 9709 W1 2407 TIP3 H1 HT 0.417000 1.0080 0 + 9710 W1 2407 TIP3 H2 HT 0.417000 1.0080 0 + 9711 W1 2408 TIP3 OH2 OT -0.834000 15.9994 0 + 9712 W1 2408 TIP3 H1 HT 0.417000 1.0080 0 + 9713 W1 2408 TIP3 H2 HT 0.417000 1.0080 0 + 9714 W1 2409 TIP3 OH2 OT -0.834000 15.9994 0 + 9715 W1 2409 TIP3 H1 HT 0.417000 1.0080 0 + 9716 W1 2409 TIP3 H2 HT 0.417000 1.0080 0 + 9717 W1 2410 TIP3 OH2 OT -0.834000 15.9994 0 + 9718 W1 2410 TIP3 H1 HT 0.417000 1.0080 0 + 9719 W1 2410 TIP3 H2 HT 0.417000 1.0080 0 + 9720 W1 2411 TIP3 OH2 OT -0.834000 15.9994 0 + 9721 W1 2411 TIP3 H1 HT 0.417000 1.0080 0 + 9722 W1 2411 TIP3 H2 HT 0.417000 1.0080 0 + 9723 W1 2412 TIP3 OH2 OT -0.834000 15.9994 0 + 9724 W1 2412 TIP3 H1 HT 0.417000 1.0080 0 + 9725 W1 2412 TIP3 H2 HT 0.417000 1.0080 0 + 9726 W1 2413 TIP3 OH2 OT -0.834000 15.9994 0 + 9727 W1 2413 TIP3 H1 HT 0.417000 1.0080 0 + 9728 W1 2413 TIP3 H2 HT 0.417000 1.0080 0 + 9729 W1 2414 TIP3 OH2 OT -0.834000 15.9994 0 + 9730 W1 2414 TIP3 H1 HT 0.417000 1.0080 0 + 9731 W1 2414 TIP3 H2 HT 0.417000 1.0080 0 + 9732 W1 2415 TIP3 OH2 OT -0.834000 15.9994 0 + 9733 W1 2415 TIP3 H1 HT 0.417000 1.0080 0 + 9734 W1 2415 TIP3 H2 HT 0.417000 1.0080 0 + 9735 W1 2416 TIP3 OH2 OT -0.834000 15.9994 0 + 9736 W1 2416 TIP3 H1 HT 0.417000 1.0080 0 + 9737 W1 2416 TIP3 H2 HT 0.417000 1.0080 0 + 9738 W1 2417 TIP3 OH2 OT -0.834000 15.9994 0 + 9739 W1 2417 TIP3 H1 HT 0.417000 1.0080 0 + 9740 W1 2417 TIP3 H2 HT 0.417000 1.0080 0 + 9741 W1 2418 TIP3 OH2 OT -0.834000 15.9994 0 + 9742 W1 2418 TIP3 H1 HT 0.417000 1.0080 0 + 9743 W1 2418 TIP3 H2 HT 0.417000 1.0080 0 + 9744 W1 2419 TIP3 OH2 OT -0.834000 15.9994 0 + 9745 W1 2419 TIP3 H1 HT 0.417000 1.0080 0 + 9746 W1 2419 TIP3 H2 HT 0.417000 1.0080 0 + 9747 W1 2420 TIP3 OH2 OT -0.834000 15.9994 0 + 9748 W1 2420 TIP3 H1 HT 0.417000 1.0080 0 + 9749 W1 2420 TIP3 H2 HT 0.417000 1.0080 0 + 9750 W1 2421 TIP3 OH2 OT -0.834000 15.9994 0 + 9751 W1 2421 TIP3 H1 HT 0.417000 1.0080 0 + 9752 W1 2421 TIP3 H2 HT 0.417000 1.0080 0 + 9753 W1 2422 TIP3 OH2 OT -0.834000 15.9994 0 + 9754 W1 2422 TIP3 H1 HT 0.417000 1.0080 0 + 9755 W1 2422 TIP3 H2 HT 0.417000 1.0080 0 + 9756 W1 2423 TIP3 OH2 OT -0.834000 15.9994 0 + 9757 W1 2423 TIP3 H1 HT 0.417000 1.0080 0 + 9758 W1 2423 TIP3 H2 HT 0.417000 1.0080 0 + 9759 W1 2424 TIP3 OH2 OT -0.834000 15.9994 0 + 9760 W1 2424 TIP3 H1 HT 0.417000 1.0080 0 + 9761 W1 2424 TIP3 H2 HT 0.417000 1.0080 0 + 9762 W1 2425 TIP3 OH2 OT -0.834000 15.9994 0 + 9763 W1 2425 TIP3 H1 HT 0.417000 1.0080 0 + 9764 W1 2425 TIP3 H2 HT 0.417000 1.0080 0 + 9765 W1 2426 TIP3 OH2 OT -0.834000 15.9994 0 + 9766 W1 2426 TIP3 H1 HT 0.417000 1.0080 0 + 9767 W1 2426 TIP3 H2 HT 0.417000 1.0080 0 + 9768 W1 2427 TIP3 OH2 OT -0.834000 15.9994 0 + 9769 W1 2427 TIP3 H1 HT 0.417000 1.0080 0 + 9770 W1 2427 TIP3 H2 HT 0.417000 1.0080 0 + 9771 W1 2428 TIP3 OH2 OT -0.834000 15.9994 0 + 9772 W1 2428 TIP3 H1 HT 0.417000 1.0080 0 + 9773 W1 2428 TIP3 H2 HT 0.417000 1.0080 0 + 9774 W1 2429 TIP3 OH2 OT -0.834000 15.9994 0 + 9775 W1 2429 TIP3 H1 HT 0.417000 1.0080 0 + 9776 W1 2429 TIP3 H2 HT 0.417000 1.0080 0 + 9777 W1 2430 TIP3 OH2 OT -0.834000 15.9994 0 + 9778 W1 2430 TIP3 H1 HT 0.417000 1.0080 0 + 9779 W1 2430 TIP3 H2 HT 0.417000 1.0080 0 + 9780 W1 2431 TIP3 OH2 OT -0.834000 15.9994 0 + 9781 W1 2431 TIP3 H1 HT 0.417000 1.0080 0 + 9782 W1 2431 TIP3 H2 HT 0.417000 1.0080 0 + 9783 W1 2432 TIP3 OH2 OT -0.834000 15.9994 0 + 9784 W1 2432 TIP3 H1 HT 0.417000 1.0080 0 + 9785 W1 2432 TIP3 H2 HT 0.417000 1.0080 0 + 9786 W1 2433 TIP3 OH2 OT -0.834000 15.9994 0 + 9787 W1 2433 TIP3 H1 HT 0.417000 1.0080 0 + 9788 W1 2433 TIP3 H2 HT 0.417000 1.0080 0 + 9789 W1 2434 TIP3 OH2 OT -0.834000 15.9994 0 + 9790 W1 2434 TIP3 H1 HT 0.417000 1.0080 0 + 9791 W1 2434 TIP3 H2 HT 0.417000 1.0080 0 + 9792 W1 2435 TIP3 OH2 OT -0.834000 15.9994 0 + 9793 W1 2435 TIP3 H1 HT 0.417000 1.0080 0 + 9794 W1 2435 TIP3 H2 HT 0.417000 1.0080 0 + 9795 W1 2436 TIP3 OH2 OT -0.834000 15.9994 0 + 9796 W1 2436 TIP3 H1 HT 0.417000 1.0080 0 + 9797 W1 2436 TIP3 H2 HT 0.417000 1.0080 0 + 9798 W1 2437 TIP3 OH2 OT -0.834000 15.9994 0 + 9799 W1 2437 TIP3 H1 HT 0.417000 1.0080 0 + 9800 W1 2437 TIP3 H2 HT 0.417000 1.0080 0 + 9801 W1 2438 TIP3 OH2 OT -0.834000 15.9994 0 + 9802 W1 2438 TIP3 H1 HT 0.417000 1.0080 0 + 9803 W1 2438 TIP3 H2 HT 0.417000 1.0080 0 + 9804 W1 2439 TIP3 OH2 OT -0.834000 15.9994 0 + 9805 W1 2439 TIP3 H1 HT 0.417000 1.0080 0 + 9806 W1 2439 TIP3 H2 HT 0.417000 1.0080 0 + 9807 W1 2440 TIP3 OH2 OT -0.834000 15.9994 0 + 9808 W1 2440 TIP3 H1 HT 0.417000 1.0080 0 + 9809 W1 2440 TIP3 H2 HT 0.417000 1.0080 0 + 9810 W1 2441 TIP3 OH2 OT -0.834000 15.9994 0 + 9811 W1 2441 TIP3 H1 HT 0.417000 1.0080 0 + 9812 W1 2441 TIP3 H2 HT 0.417000 1.0080 0 + 9813 W1 2442 TIP3 OH2 OT -0.834000 15.9994 0 + 9814 W1 2442 TIP3 H1 HT 0.417000 1.0080 0 + 9815 W1 2442 TIP3 H2 HT 0.417000 1.0080 0 + 9816 W1 2443 TIP3 OH2 OT -0.834000 15.9994 0 + 9817 W1 2443 TIP3 H1 HT 0.417000 1.0080 0 + 9818 W1 2443 TIP3 H2 HT 0.417000 1.0080 0 + 9819 W1 2444 TIP3 OH2 OT -0.834000 15.9994 0 + 9820 W1 2444 TIP3 H1 HT 0.417000 1.0080 0 + 9821 W1 2444 TIP3 H2 HT 0.417000 1.0080 0 + 9822 W1 2445 TIP3 OH2 OT -0.834000 15.9994 0 + 9823 W1 2445 TIP3 H1 HT 0.417000 1.0080 0 + 9824 W1 2445 TIP3 H2 HT 0.417000 1.0080 0 + 9825 W1 2446 TIP3 OH2 OT -0.834000 15.9994 0 + 9826 W1 2446 TIP3 H1 HT 0.417000 1.0080 0 + 9827 W1 2446 TIP3 H2 HT 0.417000 1.0080 0 + 9828 W1 2447 TIP3 OH2 OT -0.834000 15.9994 0 + 9829 W1 2447 TIP3 H1 HT 0.417000 1.0080 0 + 9830 W1 2447 TIP3 H2 HT 0.417000 1.0080 0 + 9831 W1 2448 TIP3 OH2 OT -0.834000 15.9994 0 + 9832 W1 2448 TIP3 H1 HT 0.417000 1.0080 0 + 9833 W1 2448 TIP3 H2 HT 0.417000 1.0080 0 + 9834 W1 2449 TIP3 OH2 OT -0.834000 15.9994 0 + 9835 W1 2449 TIP3 H1 HT 0.417000 1.0080 0 + 9836 W1 2449 TIP3 H2 HT 0.417000 1.0080 0 + 9837 W1 2450 TIP3 OH2 OT -0.834000 15.9994 0 + 9838 W1 2450 TIP3 H1 HT 0.417000 1.0080 0 + 9839 W1 2450 TIP3 H2 HT 0.417000 1.0080 0 + 9840 W1 2451 TIP3 OH2 OT -0.834000 15.9994 0 + 9841 W1 2451 TIP3 H1 HT 0.417000 1.0080 0 + 9842 W1 2451 TIP3 H2 HT 0.417000 1.0080 0 + 9843 W1 2452 TIP3 OH2 OT -0.834000 15.9994 0 + 9844 W1 2452 TIP3 H1 HT 0.417000 1.0080 0 + 9845 W1 2452 TIP3 H2 HT 0.417000 1.0080 0 + 9846 W1 2453 TIP3 OH2 OT -0.834000 15.9994 0 + 9847 W1 2453 TIP3 H1 HT 0.417000 1.0080 0 + 9848 W1 2453 TIP3 H2 HT 0.417000 1.0080 0 + 9849 W1 2454 TIP3 OH2 OT -0.834000 15.9994 0 + 9850 W1 2454 TIP3 H1 HT 0.417000 1.0080 0 + 9851 W1 2454 TIP3 H2 HT 0.417000 1.0080 0 + 9852 W1 2455 TIP3 OH2 OT -0.834000 15.9994 0 + 9853 W1 2455 TIP3 H1 HT 0.417000 1.0080 0 + 9854 W1 2455 TIP3 H2 HT 0.417000 1.0080 0 + 9855 W1 2456 TIP3 OH2 OT -0.834000 15.9994 0 + 9856 W1 2456 TIP3 H1 HT 0.417000 1.0080 0 + 9857 W1 2456 TIP3 H2 HT 0.417000 1.0080 0 + 9858 W1 2457 TIP3 OH2 OT -0.834000 15.9994 0 + 9859 W1 2457 TIP3 H1 HT 0.417000 1.0080 0 + 9860 W1 2457 TIP3 H2 HT 0.417000 1.0080 0 + 9861 W1 2458 TIP3 OH2 OT -0.834000 15.9994 0 + 9862 W1 2458 TIP3 H1 HT 0.417000 1.0080 0 + 9863 W1 2458 TIP3 H2 HT 0.417000 1.0080 0 + 9864 W1 2459 TIP3 OH2 OT -0.834000 15.9994 0 + 9865 W1 2459 TIP3 H1 HT 0.417000 1.0080 0 + 9866 W1 2459 TIP3 H2 HT 0.417000 1.0080 0 + 9867 W1 2460 TIP3 OH2 OT -0.834000 15.9994 0 + 9868 W1 2460 TIP3 H1 HT 0.417000 1.0080 0 + 9869 W1 2460 TIP3 H2 HT 0.417000 1.0080 0 + 9870 W1 2461 TIP3 OH2 OT -0.834000 15.9994 0 + 9871 W1 2461 TIP3 H1 HT 0.417000 1.0080 0 + 9872 W1 2461 TIP3 H2 HT 0.417000 1.0080 0 + 9873 W1 2462 TIP3 OH2 OT -0.834000 15.9994 0 + 9874 W1 2462 TIP3 H1 HT 0.417000 1.0080 0 + 9875 W1 2462 TIP3 H2 HT 0.417000 1.0080 0 + 9876 W1 2463 TIP3 OH2 OT -0.834000 15.9994 0 + 9877 W1 2463 TIP3 H1 HT 0.417000 1.0080 0 + 9878 W1 2463 TIP3 H2 HT 0.417000 1.0080 0 + 9879 W1 2464 TIP3 OH2 OT -0.834000 15.9994 0 + 9880 W1 2464 TIP3 H1 HT 0.417000 1.0080 0 + 9881 W1 2464 TIP3 H2 HT 0.417000 1.0080 0 + 9882 W1 2465 TIP3 OH2 OT -0.834000 15.9994 0 + 9883 W1 2465 TIP3 H1 HT 0.417000 1.0080 0 + 9884 W1 2465 TIP3 H2 HT 0.417000 1.0080 0 + 9885 W1 2466 TIP3 OH2 OT -0.834000 15.9994 0 + 9886 W1 2466 TIP3 H1 HT 0.417000 1.0080 0 + 9887 W1 2466 TIP3 H2 HT 0.417000 1.0080 0 + 9888 W1 2467 TIP3 OH2 OT -0.834000 15.9994 0 + 9889 W1 2467 TIP3 H1 HT 0.417000 1.0080 0 + 9890 W1 2467 TIP3 H2 HT 0.417000 1.0080 0 + 9891 W1 2468 TIP3 OH2 OT -0.834000 15.9994 0 + 9892 W1 2468 TIP3 H1 HT 0.417000 1.0080 0 + 9893 W1 2468 TIP3 H2 HT 0.417000 1.0080 0 + 9894 W1 2469 TIP3 OH2 OT -0.834000 15.9994 0 + 9895 W1 2469 TIP3 H1 HT 0.417000 1.0080 0 + 9896 W1 2469 TIP3 H2 HT 0.417000 1.0080 0 + 9897 W1 2470 TIP3 OH2 OT -0.834000 15.9994 0 + 9898 W1 2470 TIP3 H1 HT 0.417000 1.0080 0 + 9899 W1 2470 TIP3 H2 HT 0.417000 1.0080 0 + 9900 W1 2471 TIP3 OH2 OT -0.834000 15.9994 0 + 9901 W1 2471 TIP3 H1 HT 0.417000 1.0080 0 + 9902 W1 2471 TIP3 H2 HT 0.417000 1.0080 0 + 9903 W1 2472 TIP3 OH2 OT -0.834000 15.9994 0 + 9904 W1 2472 TIP3 H1 HT 0.417000 1.0080 0 + 9905 W1 2472 TIP3 H2 HT 0.417000 1.0080 0 + 9906 W1 2473 TIP3 OH2 OT -0.834000 15.9994 0 + 9907 W1 2473 TIP3 H1 HT 0.417000 1.0080 0 + 9908 W1 2473 TIP3 H2 HT 0.417000 1.0080 0 + 9909 W1 2474 TIP3 OH2 OT -0.834000 15.9994 0 + 9910 W1 2474 TIP3 H1 HT 0.417000 1.0080 0 + 9911 W1 2474 TIP3 H2 HT 0.417000 1.0080 0 + 9912 W1 2475 TIP3 OH2 OT -0.834000 15.9994 0 + 9913 W1 2475 TIP3 H1 HT 0.417000 1.0080 0 + 9914 W1 2475 TIP3 H2 HT 0.417000 1.0080 0 + 9915 W1 2476 TIP3 OH2 OT -0.834000 15.9994 0 + 9916 W1 2476 TIP3 H1 HT 0.417000 1.0080 0 + 9917 W1 2476 TIP3 H2 HT 0.417000 1.0080 0 + 9918 W1 2477 TIP3 OH2 OT -0.834000 15.9994 0 + 9919 W1 2477 TIP3 H1 HT 0.417000 1.0080 0 + 9920 W1 2477 TIP3 H2 HT 0.417000 1.0080 0 + 9921 W1 2478 TIP3 OH2 OT -0.834000 15.9994 0 + 9922 W1 2478 TIP3 H1 HT 0.417000 1.0080 0 + 9923 W1 2478 TIP3 H2 HT 0.417000 1.0080 0 + 9924 W1 2479 TIP3 OH2 OT -0.834000 15.9994 0 + 9925 W1 2479 TIP3 H1 HT 0.417000 1.0080 0 + 9926 W1 2479 TIP3 H2 HT 0.417000 1.0080 0 + 9927 W1 2480 TIP3 OH2 OT -0.834000 15.9994 0 + 9928 W1 2480 TIP3 H1 HT 0.417000 1.0080 0 + 9929 W1 2480 TIP3 H2 HT 0.417000 1.0080 0 + 9930 W1 2481 TIP3 OH2 OT -0.834000 15.9994 0 + 9931 W1 2481 TIP3 H1 HT 0.417000 1.0080 0 + 9932 W1 2481 TIP3 H2 HT 0.417000 1.0080 0 + 9933 W1 2482 TIP3 OH2 OT -0.834000 15.9994 0 + 9934 W1 2482 TIP3 H1 HT 0.417000 1.0080 0 + 9935 W1 2482 TIP3 H2 HT 0.417000 1.0080 0 + 9936 W1 2483 TIP3 OH2 OT -0.834000 15.9994 0 + 9937 W1 2483 TIP3 H1 HT 0.417000 1.0080 0 + 9938 W1 2483 TIP3 H2 HT 0.417000 1.0080 0 + 9939 W1 2484 TIP3 OH2 OT -0.834000 15.9994 0 + 9940 W1 2484 TIP3 H1 HT 0.417000 1.0080 0 + 9941 W1 2484 TIP3 H2 HT 0.417000 1.0080 0 + 9942 W1 2485 TIP3 OH2 OT -0.834000 15.9994 0 + 9943 W1 2485 TIP3 H1 HT 0.417000 1.0080 0 + 9944 W1 2485 TIP3 H2 HT 0.417000 1.0080 0 + 9945 W1 2486 TIP3 OH2 OT -0.834000 15.9994 0 + 9946 W1 2486 TIP3 H1 HT 0.417000 1.0080 0 + 9947 W1 2486 TIP3 H2 HT 0.417000 1.0080 0 + 9948 W1 2487 TIP3 OH2 OT -0.834000 15.9994 0 + 9949 W1 2487 TIP3 H1 HT 0.417000 1.0080 0 + 9950 W1 2487 TIP3 H2 HT 0.417000 1.0080 0 + 9951 W1 2488 TIP3 OH2 OT -0.834000 15.9994 0 + 9952 W1 2488 TIP3 H1 HT 0.417000 1.0080 0 + 9953 W1 2488 TIP3 H2 HT 0.417000 1.0080 0 + 9954 W1 2489 TIP3 OH2 OT -0.834000 15.9994 0 + 9955 W1 2489 TIP3 H1 HT 0.417000 1.0080 0 + 9956 W1 2489 TIP3 H2 HT 0.417000 1.0080 0 + 9957 W1 2490 TIP3 OH2 OT -0.834000 15.9994 0 + 9958 W1 2490 TIP3 H1 HT 0.417000 1.0080 0 + 9959 W1 2490 TIP3 H2 HT 0.417000 1.0080 0 + 9960 W1 2491 TIP3 OH2 OT -0.834000 15.9994 0 + 9961 W1 2491 TIP3 H1 HT 0.417000 1.0080 0 + 9962 W1 2491 TIP3 H2 HT 0.417000 1.0080 0 + 9963 W1 2492 TIP3 OH2 OT -0.834000 15.9994 0 + 9964 W1 2492 TIP3 H1 HT 0.417000 1.0080 0 + 9965 W1 2492 TIP3 H2 HT 0.417000 1.0080 0 + 9966 W1 2493 TIP3 OH2 OT -0.834000 15.9994 0 + 9967 W1 2493 TIP3 H1 HT 0.417000 1.0080 0 + 9968 W1 2493 TIP3 H2 HT 0.417000 1.0080 0 + 9969 W1 2494 TIP3 OH2 OT -0.834000 15.9994 0 + 9970 W1 2494 TIP3 H1 HT 0.417000 1.0080 0 + 9971 W1 2494 TIP3 H2 HT 0.417000 1.0080 0 + 9972 W1 2495 TIP3 OH2 OT -0.834000 15.9994 0 + 9973 W1 2495 TIP3 H1 HT 0.417000 1.0080 0 + 9974 W1 2495 TIP3 H2 HT 0.417000 1.0080 0 + 9975 W1 2496 TIP3 OH2 OT -0.834000 15.9994 0 + 9976 W1 2496 TIP3 H1 HT 0.417000 1.0080 0 + 9977 W1 2496 TIP3 H2 HT 0.417000 1.0080 0 + 9978 W1 2497 TIP3 OH2 OT -0.834000 15.9994 0 + 9979 W1 2497 TIP3 H1 HT 0.417000 1.0080 0 + 9980 W1 2497 TIP3 H2 HT 0.417000 1.0080 0 + 9981 W1 2498 TIP3 OH2 OT -0.834000 15.9994 0 + 9982 W1 2498 TIP3 H1 HT 0.417000 1.0080 0 + 9983 W1 2498 TIP3 H2 HT 0.417000 1.0080 0 + 9984 W1 2499 TIP3 OH2 OT -0.834000 15.9994 0 + 9985 W1 2499 TIP3 H1 HT 0.417000 1.0080 0 + 9986 W1 2499 TIP3 H2 HT 0.417000 1.0080 0 + 9987 W1 2500 TIP3 OH2 OT -0.834000 15.9994 0 + 9988 W1 2500 TIP3 H1 HT 0.417000 1.0080 0 + 9989 W1 2500 TIP3 H2 HT 0.417000 1.0080 0 + 9990 W1 2501 TIP3 OH2 OT -0.834000 15.9994 0 + 9991 W1 2501 TIP3 H1 HT 0.417000 1.0080 0 + 9992 W1 2501 TIP3 H2 HT 0.417000 1.0080 0 + 9993 W1 2502 TIP3 OH2 OT -0.834000 15.9994 0 + 9994 W1 2502 TIP3 H1 HT 0.417000 1.0080 0 + 9995 W1 2502 TIP3 H2 HT 0.417000 1.0080 0 + 9996 W1 2503 TIP3 OH2 OT -0.834000 15.9994 0 + 9997 W1 2503 TIP3 H1 HT 0.417000 1.0080 0 + 9998 W1 2503 TIP3 H2 HT 0.417000 1.0080 0 + 9999 W1 2504 TIP3 OH2 OT -0.834000 15.9994 0 + 10000 W1 2504 TIP3 H1 HT 0.417000 1.0080 0 + 10001 W1 2504 TIP3 H2 HT 0.417000 1.0080 0 + 10002 W1 2505 TIP3 OH2 OT -0.834000 15.9994 0 + 10003 W1 2505 TIP3 H1 HT 0.417000 1.0080 0 + 10004 W1 2505 TIP3 H2 HT 0.417000 1.0080 0 + 10005 W1 2506 TIP3 OH2 OT -0.834000 15.9994 0 + 10006 W1 2506 TIP3 H1 HT 0.417000 1.0080 0 + 10007 W1 2506 TIP3 H2 HT 0.417000 1.0080 0 + 10008 W1 2507 TIP3 OH2 OT -0.834000 15.9994 0 + 10009 W1 2507 TIP3 H1 HT 0.417000 1.0080 0 + 10010 W1 2507 TIP3 H2 HT 0.417000 1.0080 0 + 10011 W1 2508 TIP3 OH2 OT -0.834000 15.9994 0 + 10012 W1 2508 TIP3 H1 HT 0.417000 1.0080 0 + 10013 W1 2508 TIP3 H2 HT 0.417000 1.0080 0 + 10014 W1 2509 TIP3 OH2 OT -0.834000 15.9994 0 + 10015 W1 2509 TIP3 H1 HT 0.417000 1.0080 0 + 10016 W1 2509 TIP3 H2 HT 0.417000 1.0080 0 + 10017 W1 2510 TIP3 OH2 OT -0.834000 15.9994 0 + 10018 W1 2510 TIP3 H1 HT 0.417000 1.0080 0 + 10019 W1 2510 TIP3 H2 HT 0.417000 1.0080 0 + 10020 W1 2511 TIP3 OH2 OT -0.834000 15.9994 0 + 10021 W1 2511 TIP3 H1 HT 0.417000 1.0080 0 + 10022 W1 2511 TIP3 H2 HT 0.417000 1.0080 0 + 10023 W1 2512 TIP3 OH2 OT -0.834000 15.9994 0 + 10024 W1 2512 TIP3 H1 HT 0.417000 1.0080 0 + 10025 W1 2512 TIP3 H2 HT 0.417000 1.0080 0 + 10026 W1 2513 TIP3 OH2 OT -0.834000 15.9994 0 + 10027 W1 2513 TIP3 H1 HT 0.417000 1.0080 0 + 10028 W1 2513 TIP3 H2 HT 0.417000 1.0080 0 + 10029 W1 2514 TIP3 OH2 OT -0.834000 15.9994 0 + 10030 W1 2514 TIP3 H1 HT 0.417000 1.0080 0 + 10031 W1 2514 TIP3 H2 HT 0.417000 1.0080 0 + 10032 W1 2515 TIP3 OH2 OT -0.834000 15.9994 0 + 10033 W1 2515 TIP3 H1 HT 0.417000 1.0080 0 + 10034 W1 2515 TIP3 H2 HT 0.417000 1.0080 0 + 10035 W1 2516 TIP3 OH2 OT -0.834000 15.9994 0 + 10036 W1 2516 TIP3 H1 HT 0.417000 1.0080 0 + 10037 W1 2516 TIP3 H2 HT 0.417000 1.0080 0 + 10038 W1 2517 TIP3 OH2 OT -0.834000 15.9994 0 + 10039 W1 2517 TIP3 H1 HT 0.417000 1.0080 0 + 10040 W1 2517 TIP3 H2 HT 0.417000 1.0080 0 + 10041 W1 2518 TIP3 OH2 OT -0.834000 15.9994 0 + 10042 W1 2518 TIP3 H1 HT 0.417000 1.0080 0 + 10043 W1 2518 TIP3 H2 HT 0.417000 1.0080 0 + 10044 W1 2519 TIP3 OH2 OT -0.834000 15.9994 0 + 10045 W1 2519 TIP3 H1 HT 0.417000 1.0080 0 + 10046 W1 2519 TIP3 H2 HT 0.417000 1.0080 0 + 10047 W1 2520 TIP3 OH2 OT -0.834000 15.9994 0 + 10048 W1 2520 TIP3 H1 HT 0.417000 1.0080 0 + 10049 W1 2520 TIP3 H2 HT 0.417000 1.0080 0 + 10050 W1 2521 TIP3 OH2 OT -0.834000 15.9994 0 + 10051 W1 2521 TIP3 H1 HT 0.417000 1.0080 0 + 10052 W1 2521 TIP3 H2 HT 0.417000 1.0080 0 + 10053 W1 2522 TIP3 OH2 OT -0.834000 15.9994 0 + 10054 W1 2522 TIP3 H1 HT 0.417000 1.0080 0 + 10055 W1 2522 TIP3 H2 HT 0.417000 1.0080 0 + 10056 W1 2523 TIP3 OH2 OT -0.834000 15.9994 0 + 10057 W1 2523 TIP3 H1 HT 0.417000 1.0080 0 + 10058 W1 2523 TIP3 H2 HT 0.417000 1.0080 0 + 10059 W1 2524 TIP3 OH2 OT -0.834000 15.9994 0 + 10060 W1 2524 TIP3 H1 HT 0.417000 1.0080 0 + 10061 W1 2524 TIP3 H2 HT 0.417000 1.0080 0 + 10062 W1 2525 TIP3 OH2 OT -0.834000 15.9994 0 + 10063 W1 2525 TIP3 H1 HT 0.417000 1.0080 0 + 10064 W1 2525 TIP3 H2 HT 0.417000 1.0080 0 + 10065 W1 2526 TIP3 OH2 OT -0.834000 15.9994 0 + 10066 W1 2526 TIP3 H1 HT 0.417000 1.0080 0 + 10067 W1 2526 TIP3 H2 HT 0.417000 1.0080 0 + 10068 W1 2527 TIP3 OH2 OT -0.834000 15.9994 0 + 10069 W1 2527 TIP3 H1 HT 0.417000 1.0080 0 + 10070 W1 2527 TIP3 H2 HT 0.417000 1.0080 0 + 10071 W1 2528 TIP3 OH2 OT -0.834000 15.9994 0 + 10072 W1 2528 TIP3 H1 HT 0.417000 1.0080 0 + 10073 W1 2528 TIP3 H2 HT 0.417000 1.0080 0 + 10074 W1 2529 TIP3 OH2 OT -0.834000 15.9994 0 + 10075 W1 2529 TIP3 H1 HT 0.417000 1.0080 0 + 10076 W1 2529 TIP3 H2 HT 0.417000 1.0080 0 + 10077 W1 2530 TIP3 OH2 OT -0.834000 15.9994 0 + 10078 W1 2530 TIP3 H1 HT 0.417000 1.0080 0 + 10079 W1 2530 TIP3 H2 HT 0.417000 1.0080 0 + 10080 W1 2531 TIP3 OH2 OT -0.834000 15.9994 0 + 10081 W1 2531 TIP3 H1 HT 0.417000 1.0080 0 + 10082 W1 2531 TIP3 H2 HT 0.417000 1.0080 0 + 10083 W1 2532 TIP3 OH2 OT -0.834000 15.9994 0 + 10084 W1 2532 TIP3 H1 HT 0.417000 1.0080 0 + 10085 W1 2532 TIP3 H2 HT 0.417000 1.0080 0 + 10086 W1 2533 TIP3 OH2 OT -0.834000 15.9994 0 + 10087 W1 2533 TIP3 H1 HT 0.417000 1.0080 0 + 10088 W1 2533 TIP3 H2 HT 0.417000 1.0080 0 + 10089 W1 2534 TIP3 OH2 OT -0.834000 15.9994 0 + 10090 W1 2534 TIP3 H1 HT 0.417000 1.0080 0 + 10091 W1 2534 TIP3 H2 HT 0.417000 1.0080 0 + 10092 W1 2535 TIP3 OH2 OT -0.834000 15.9994 0 + 10093 W1 2535 TIP3 H1 HT 0.417000 1.0080 0 + 10094 W1 2535 TIP3 H2 HT 0.417000 1.0080 0 + 10095 W1 2536 TIP3 OH2 OT -0.834000 15.9994 0 + 10096 W1 2536 TIP3 H1 HT 0.417000 1.0080 0 + 10097 W1 2536 TIP3 H2 HT 0.417000 1.0080 0 + 10098 W1 2537 TIP3 OH2 OT -0.834000 15.9994 0 + 10099 W1 2537 TIP3 H1 HT 0.417000 1.0080 0 + 10100 W1 2537 TIP3 H2 HT 0.417000 1.0080 0 + 10101 W1 2538 TIP3 OH2 OT -0.834000 15.9994 0 + 10102 W1 2538 TIP3 H1 HT 0.417000 1.0080 0 + 10103 W1 2538 TIP3 H2 HT 0.417000 1.0080 0 + 10104 W1 2539 TIP3 OH2 OT -0.834000 15.9994 0 + 10105 W1 2539 TIP3 H1 HT 0.417000 1.0080 0 + 10106 W1 2539 TIP3 H2 HT 0.417000 1.0080 0 + 10107 W1 2540 TIP3 OH2 OT -0.834000 15.9994 0 + 10108 W1 2540 TIP3 H1 HT 0.417000 1.0080 0 + 10109 W1 2540 TIP3 H2 HT 0.417000 1.0080 0 + 10110 W1 2541 TIP3 OH2 OT -0.834000 15.9994 0 + 10111 W1 2541 TIP3 H1 HT 0.417000 1.0080 0 + 10112 W1 2541 TIP3 H2 HT 0.417000 1.0080 0 + 10113 W1 2542 TIP3 OH2 OT -0.834000 15.9994 0 + 10114 W1 2542 TIP3 H1 HT 0.417000 1.0080 0 + 10115 W1 2542 TIP3 H2 HT 0.417000 1.0080 0 + 10116 W1 2543 TIP3 OH2 OT -0.834000 15.9994 0 + 10117 W1 2543 TIP3 H1 HT 0.417000 1.0080 0 + 10118 W1 2543 TIP3 H2 HT 0.417000 1.0080 0 + 10119 W1 2544 TIP3 OH2 OT -0.834000 15.9994 0 + 10120 W1 2544 TIP3 H1 HT 0.417000 1.0080 0 + 10121 W1 2544 TIP3 H2 HT 0.417000 1.0080 0 + 10122 W1 2545 TIP3 OH2 OT -0.834000 15.9994 0 + 10123 W1 2545 TIP3 H1 HT 0.417000 1.0080 0 + 10124 W1 2545 TIP3 H2 HT 0.417000 1.0080 0 + 10125 W1 2546 TIP3 OH2 OT -0.834000 15.9994 0 + 10126 W1 2546 TIP3 H1 HT 0.417000 1.0080 0 + 10127 W1 2546 TIP3 H2 HT 0.417000 1.0080 0 + 10128 W1 2547 TIP3 OH2 OT -0.834000 15.9994 0 + 10129 W1 2547 TIP3 H1 HT 0.417000 1.0080 0 + 10130 W1 2547 TIP3 H2 HT 0.417000 1.0080 0 + 10131 W1 2548 TIP3 OH2 OT -0.834000 15.9994 0 + 10132 W1 2548 TIP3 H1 HT 0.417000 1.0080 0 + 10133 W1 2548 TIP3 H2 HT 0.417000 1.0080 0 + 10134 W1 2549 TIP3 OH2 OT -0.834000 15.9994 0 + 10135 W1 2549 TIP3 H1 HT 0.417000 1.0080 0 + 10136 W1 2549 TIP3 H2 HT 0.417000 1.0080 0 + 10137 W1 2550 TIP3 OH2 OT -0.834000 15.9994 0 + 10138 W1 2550 TIP3 H1 HT 0.417000 1.0080 0 + 10139 W1 2550 TIP3 H2 HT 0.417000 1.0080 0 + 10140 W1 2551 TIP3 OH2 OT -0.834000 15.9994 0 + 10141 W1 2551 TIP3 H1 HT 0.417000 1.0080 0 + 10142 W1 2551 TIP3 H2 HT 0.417000 1.0080 0 + 10143 W1 2552 TIP3 OH2 OT -0.834000 15.9994 0 + 10144 W1 2552 TIP3 H1 HT 0.417000 1.0080 0 + 10145 W1 2552 TIP3 H2 HT 0.417000 1.0080 0 + 10146 W1 2553 TIP3 OH2 OT -0.834000 15.9994 0 + 10147 W1 2553 TIP3 H1 HT 0.417000 1.0080 0 + 10148 W1 2553 TIP3 H2 HT 0.417000 1.0080 0 + 10149 W1 2554 TIP3 OH2 OT -0.834000 15.9994 0 + 10150 W1 2554 TIP3 H1 HT 0.417000 1.0080 0 + 10151 W1 2554 TIP3 H2 HT 0.417000 1.0080 0 + 10152 W1 2555 TIP3 OH2 OT -0.834000 15.9994 0 + 10153 W1 2555 TIP3 H1 HT 0.417000 1.0080 0 + 10154 W1 2555 TIP3 H2 HT 0.417000 1.0080 0 + 10155 W1 2556 TIP3 OH2 OT -0.834000 15.9994 0 + 10156 W1 2556 TIP3 H1 HT 0.417000 1.0080 0 + 10157 W1 2556 TIP3 H2 HT 0.417000 1.0080 0 + 10158 W1 2557 TIP3 OH2 OT -0.834000 15.9994 0 + 10159 W1 2557 TIP3 H1 HT 0.417000 1.0080 0 + 10160 W1 2557 TIP3 H2 HT 0.417000 1.0080 0 + 10161 W1 2558 TIP3 OH2 OT -0.834000 15.9994 0 + 10162 W1 2558 TIP3 H1 HT 0.417000 1.0080 0 + 10163 W1 2558 TIP3 H2 HT 0.417000 1.0080 0 + 10164 W1 2559 TIP3 OH2 OT -0.834000 15.9994 0 + 10165 W1 2559 TIP3 H1 HT 0.417000 1.0080 0 + 10166 W1 2559 TIP3 H2 HT 0.417000 1.0080 0 + 10167 W1 2560 TIP3 OH2 OT -0.834000 15.9994 0 + 10168 W1 2560 TIP3 H1 HT 0.417000 1.0080 0 + 10169 W1 2560 TIP3 H2 HT 0.417000 1.0080 0 + 10170 W1 2561 TIP3 OH2 OT -0.834000 15.9994 0 + 10171 W1 2561 TIP3 H1 HT 0.417000 1.0080 0 + 10172 W1 2561 TIP3 H2 HT 0.417000 1.0080 0 + 10173 W1 2562 TIP3 OH2 OT -0.834000 15.9994 0 + 10174 W1 2562 TIP3 H1 HT 0.417000 1.0080 0 + 10175 W1 2562 TIP3 H2 HT 0.417000 1.0080 0 + 10176 W1 2563 TIP3 OH2 OT -0.834000 15.9994 0 + 10177 W1 2563 TIP3 H1 HT 0.417000 1.0080 0 + 10178 W1 2563 TIP3 H2 HT 0.417000 1.0080 0 + 10179 W1 2564 TIP3 OH2 OT -0.834000 15.9994 0 + 10180 W1 2564 TIP3 H1 HT 0.417000 1.0080 0 + 10181 W1 2564 TIP3 H2 HT 0.417000 1.0080 0 + 10182 W1 2565 TIP3 OH2 OT -0.834000 15.9994 0 + 10183 W1 2565 TIP3 H1 HT 0.417000 1.0080 0 + 10184 W1 2565 TIP3 H2 HT 0.417000 1.0080 0 + 10185 W1 2566 TIP3 OH2 OT -0.834000 15.9994 0 + 10186 W1 2566 TIP3 H1 HT 0.417000 1.0080 0 + 10187 W1 2566 TIP3 H2 HT 0.417000 1.0080 0 + 10188 W1 2567 TIP3 OH2 OT -0.834000 15.9994 0 + 10189 W1 2567 TIP3 H1 HT 0.417000 1.0080 0 + 10190 W1 2567 TIP3 H2 HT 0.417000 1.0080 0 + 10191 W1 2568 TIP3 OH2 OT -0.834000 15.9994 0 + 10192 W1 2568 TIP3 H1 HT 0.417000 1.0080 0 + 10193 W1 2568 TIP3 H2 HT 0.417000 1.0080 0 + 10194 W1 2569 TIP3 OH2 OT -0.834000 15.9994 0 + 10195 W1 2569 TIP3 H1 HT 0.417000 1.0080 0 + 10196 W1 2569 TIP3 H2 HT 0.417000 1.0080 0 + 10197 W1 2570 TIP3 OH2 OT -0.834000 15.9994 0 + 10198 W1 2570 TIP3 H1 HT 0.417000 1.0080 0 + 10199 W1 2570 TIP3 H2 HT 0.417000 1.0080 0 + 10200 W1 2571 TIP3 OH2 OT -0.834000 15.9994 0 + 10201 W1 2571 TIP3 H1 HT 0.417000 1.0080 0 + 10202 W1 2571 TIP3 H2 HT 0.417000 1.0080 0 + 10203 W1 2572 TIP3 OH2 OT -0.834000 15.9994 0 + 10204 W1 2572 TIP3 H1 HT 0.417000 1.0080 0 + 10205 W1 2572 TIP3 H2 HT 0.417000 1.0080 0 + 10206 W1 2573 TIP3 OH2 OT -0.834000 15.9994 0 + 10207 W1 2573 TIP3 H1 HT 0.417000 1.0080 0 + 10208 W1 2573 TIP3 H2 HT 0.417000 1.0080 0 + 10209 W1 2574 TIP3 OH2 OT -0.834000 15.9994 0 + 10210 W1 2574 TIP3 H1 HT 0.417000 1.0080 0 + 10211 W1 2574 TIP3 H2 HT 0.417000 1.0080 0 + 10212 W1 2575 TIP3 OH2 OT -0.834000 15.9994 0 + 10213 W1 2575 TIP3 H1 HT 0.417000 1.0080 0 + 10214 W1 2575 TIP3 H2 HT 0.417000 1.0080 0 + 10215 W1 2576 TIP3 OH2 OT -0.834000 15.9994 0 + 10216 W1 2576 TIP3 H1 HT 0.417000 1.0080 0 + 10217 W1 2576 TIP3 H2 HT 0.417000 1.0080 0 + 10218 W1 2577 TIP3 OH2 OT -0.834000 15.9994 0 + 10219 W1 2577 TIP3 H1 HT 0.417000 1.0080 0 + 10220 W1 2577 TIP3 H2 HT 0.417000 1.0080 0 + 10221 W1 2578 TIP3 OH2 OT -0.834000 15.9994 0 + 10222 W1 2578 TIP3 H1 HT 0.417000 1.0080 0 + 10223 W1 2578 TIP3 H2 HT 0.417000 1.0080 0 + 10224 W1 2579 TIP3 OH2 OT -0.834000 15.9994 0 + 10225 W1 2579 TIP3 H1 HT 0.417000 1.0080 0 + 10226 W1 2579 TIP3 H2 HT 0.417000 1.0080 0 + 10227 W1 2580 TIP3 OH2 OT -0.834000 15.9994 0 + 10228 W1 2580 TIP3 H1 HT 0.417000 1.0080 0 + 10229 W1 2580 TIP3 H2 HT 0.417000 1.0080 0 + 10230 W1 2581 TIP3 OH2 OT -0.834000 15.9994 0 + 10231 W1 2581 TIP3 H1 HT 0.417000 1.0080 0 + 10232 W1 2581 TIP3 H2 HT 0.417000 1.0080 0 + 10233 W1 2582 TIP3 OH2 OT -0.834000 15.9994 0 + 10234 W1 2582 TIP3 H1 HT 0.417000 1.0080 0 + 10235 W1 2582 TIP3 H2 HT 0.417000 1.0080 0 + 10236 W1 2583 TIP3 OH2 OT -0.834000 15.9994 0 + 10237 W1 2583 TIP3 H1 HT 0.417000 1.0080 0 + 10238 W1 2583 TIP3 H2 HT 0.417000 1.0080 0 + 10239 W1 2584 TIP3 OH2 OT -0.834000 15.9994 0 + 10240 W1 2584 TIP3 H1 HT 0.417000 1.0080 0 + 10241 W1 2584 TIP3 H2 HT 0.417000 1.0080 0 + 10242 W1 2585 TIP3 OH2 OT -0.834000 15.9994 0 + 10243 W1 2585 TIP3 H1 HT 0.417000 1.0080 0 + 10244 W1 2585 TIP3 H2 HT 0.417000 1.0080 0 + 10245 W1 2586 TIP3 OH2 OT -0.834000 15.9994 0 + 10246 W1 2586 TIP3 H1 HT 0.417000 1.0080 0 + 10247 W1 2586 TIP3 H2 HT 0.417000 1.0080 0 + 10248 W1 2587 TIP3 OH2 OT -0.834000 15.9994 0 + 10249 W1 2587 TIP3 H1 HT 0.417000 1.0080 0 + 10250 W1 2587 TIP3 H2 HT 0.417000 1.0080 0 + 10251 W1 2588 TIP3 OH2 OT -0.834000 15.9994 0 + 10252 W1 2588 TIP3 H1 HT 0.417000 1.0080 0 + 10253 W1 2588 TIP3 H2 HT 0.417000 1.0080 0 + 10254 W1 2589 TIP3 OH2 OT -0.834000 15.9994 0 + 10255 W1 2589 TIP3 H1 HT 0.417000 1.0080 0 + 10256 W1 2589 TIP3 H2 HT 0.417000 1.0080 0 + 10257 W1 2590 TIP3 OH2 OT -0.834000 15.9994 0 + 10258 W1 2590 TIP3 H1 HT 0.417000 1.0080 0 + 10259 W1 2590 TIP3 H2 HT 0.417000 1.0080 0 + 10260 W1 2591 TIP3 OH2 OT -0.834000 15.9994 0 + 10261 W1 2591 TIP3 H1 HT 0.417000 1.0080 0 + 10262 W1 2591 TIP3 H2 HT 0.417000 1.0080 0 + 10263 W1 2592 TIP3 OH2 OT -0.834000 15.9994 0 + 10264 W1 2592 TIP3 H1 HT 0.417000 1.0080 0 + 10265 W1 2592 TIP3 H2 HT 0.417000 1.0080 0 + 10266 W1 2593 TIP3 OH2 OT -0.834000 15.9994 0 + 10267 W1 2593 TIP3 H1 HT 0.417000 1.0080 0 + 10268 W1 2593 TIP3 H2 HT 0.417000 1.0080 0 + 10269 W1 2594 TIP3 OH2 OT -0.834000 15.9994 0 + 10270 W1 2594 TIP3 H1 HT 0.417000 1.0080 0 + 10271 W1 2594 TIP3 H2 HT 0.417000 1.0080 0 + 10272 W1 2595 TIP3 OH2 OT -0.834000 15.9994 0 + 10273 W1 2595 TIP3 H1 HT 0.417000 1.0080 0 + 10274 W1 2595 TIP3 H2 HT 0.417000 1.0080 0 + 10275 W1 2596 TIP3 OH2 OT -0.834000 15.9994 0 + 10276 W1 2596 TIP3 H1 HT 0.417000 1.0080 0 + 10277 W1 2596 TIP3 H2 HT 0.417000 1.0080 0 + 10278 W1 2597 TIP3 OH2 OT -0.834000 15.9994 0 + 10279 W1 2597 TIP3 H1 HT 0.417000 1.0080 0 + 10280 W1 2597 TIP3 H2 HT 0.417000 1.0080 0 + 10281 W1 2598 TIP3 OH2 OT -0.834000 15.9994 0 + 10282 W1 2598 TIP3 H1 HT 0.417000 1.0080 0 + 10283 W1 2598 TIP3 H2 HT 0.417000 1.0080 0 + 10284 W1 2599 TIP3 OH2 OT -0.834000 15.9994 0 + 10285 W1 2599 TIP3 H1 HT 0.417000 1.0080 0 + 10286 W1 2599 TIP3 H2 HT 0.417000 1.0080 0 + 10287 W1 2600 TIP3 OH2 OT -0.834000 15.9994 0 + 10288 W1 2600 TIP3 H1 HT 0.417000 1.0080 0 + 10289 W1 2600 TIP3 H2 HT 0.417000 1.0080 0 + 10290 W1 2601 TIP3 OH2 OT -0.834000 15.9994 0 + 10291 W1 2601 TIP3 H1 HT 0.417000 1.0080 0 + 10292 W1 2601 TIP3 H2 HT 0.417000 1.0080 0 + 10293 W1 2602 TIP3 OH2 OT -0.834000 15.9994 0 + 10294 W1 2602 TIP3 H1 HT 0.417000 1.0080 0 + 10295 W1 2602 TIP3 H2 HT 0.417000 1.0080 0 + 10296 W1 2603 TIP3 OH2 OT -0.834000 15.9994 0 + 10297 W1 2603 TIP3 H1 HT 0.417000 1.0080 0 + 10298 W1 2603 TIP3 H2 HT 0.417000 1.0080 0 + 10299 W1 2604 TIP3 OH2 OT -0.834000 15.9994 0 + 10300 W1 2604 TIP3 H1 HT 0.417000 1.0080 0 + 10301 W1 2604 TIP3 H2 HT 0.417000 1.0080 0 + 10302 W1 2605 TIP3 OH2 OT -0.834000 15.9994 0 + 10303 W1 2605 TIP3 H1 HT 0.417000 1.0080 0 + 10304 W1 2605 TIP3 H2 HT 0.417000 1.0080 0 + 10305 W1 2606 TIP3 OH2 OT -0.834000 15.9994 0 + 10306 W1 2606 TIP3 H1 HT 0.417000 1.0080 0 + 10307 W1 2606 TIP3 H2 HT 0.417000 1.0080 0 + 10308 W1 2607 TIP3 OH2 OT -0.834000 15.9994 0 + 10309 W1 2607 TIP3 H1 HT 0.417000 1.0080 0 + 10310 W1 2607 TIP3 H2 HT 0.417000 1.0080 0 + 10311 W1 2608 TIP3 OH2 OT -0.834000 15.9994 0 + 10312 W1 2608 TIP3 H1 HT 0.417000 1.0080 0 + 10313 W1 2608 TIP3 H2 HT 0.417000 1.0080 0 + 10314 W1 2609 TIP3 OH2 OT -0.834000 15.9994 0 + 10315 W1 2609 TIP3 H1 HT 0.417000 1.0080 0 + 10316 W1 2609 TIP3 H2 HT 0.417000 1.0080 0 + 10317 W1 2610 TIP3 OH2 OT -0.834000 15.9994 0 + 10318 W1 2610 TIP3 H1 HT 0.417000 1.0080 0 + 10319 W1 2610 TIP3 H2 HT 0.417000 1.0080 0 + 10320 W1 2611 TIP3 OH2 OT -0.834000 15.9994 0 + 10321 W1 2611 TIP3 H1 HT 0.417000 1.0080 0 + 10322 W1 2611 TIP3 H2 HT 0.417000 1.0080 0 + 10323 W1 2612 TIP3 OH2 OT -0.834000 15.9994 0 + 10324 W1 2612 TIP3 H1 HT 0.417000 1.0080 0 + 10325 W1 2612 TIP3 H2 HT 0.417000 1.0080 0 + 10326 W1 2613 TIP3 OH2 OT -0.834000 15.9994 0 + 10327 W1 2613 TIP3 H1 HT 0.417000 1.0080 0 + 10328 W1 2613 TIP3 H2 HT 0.417000 1.0080 0 + 10329 W1 2614 TIP3 OH2 OT -0.834000 15.9994 0 + 10330 W1 2614 TIP3 H1 HT 0.417000 1.0080 0 + 10331 W1 2614 TIP3 H2 HT 0.417000 1.0080 0 + 10332 W1 2615 TIP3 OH2 OT -0.834000 15.9994 0 + 10333 W1 2615 TIP3 H1 HT 0.417000 1.0080 0 + 10334 W1 2615 TIP3 H2 HT 0.417000 1.0080 0 + 10335 W1 2616 TIP3 OH2 OT -0.834000 15.9994 0 + 10336 W1 2616 TIP3 H1 HT 0.417000 1.0080 0 + 10337 W1 2616 TIP3 H2 HT 0.417000 1.0080 0 + 10338 W1 2617 TIP3 OH2 OT -0.834000 15.9994 0 + 10339 W1 2617 TIP3 H1 HT 0.417000 1.0080 0 + 10340 W1 2617 TIP3 H2 HT 0.417000 1.0080 0 + 10341 W1 2618 TIP3 OH2 OT -0.834000 15.9994 0 + 10342 W1 2618 TIP3 H1 HT 0.417000 1.0080 0 + 10343 W1 2618 TIP3 H2 HT 0.417000 1.0080 0 + 10344 W1 2619 TIP3 OH2 OT -0.834000 15.9994 0 + 10345 W1 2619 TIP3 H1 HT 0.417000 1.0080 0 + 10346 W1 2619 TIP3 H2 HT 0.417000 1.0080 0 + 10347 W1 2620 TIP3 OH2 OT -0.834000 15.9994 0 + 10348 W1 2620 TIP3 H1 HT 0.417000 1.0080 0 + 10349 W1 2620 TIP3 H2 HT 0.417000 1.0080 0 + 10350 W1 2621 TIP3 OH2 OT -0.834000 15.9994 0 + 10351 W1 2621 TIP3 H1 HT 0.417000 1.0080 0 + 10352 W1 2621 TIP3 H2 HT 0.417000 1.0080 0 + 10353 W1 2622 TIP3 OH2 OT -0.834000 15.9994 0 + 10354 W1 2622 TIP3 H1 HT 0.417000 1.0080 0 + 10355 W1 2622 TIP3 H2 HT 0.417000 1.0080 0 + 10356 W1 2623 TIP3 OH2 OT -0.834000 15.9994 0 + 10357 W1 2623 TIP3 H1 HT 0.417000 1.0080 0 + 10358 W1 2623 TIP3 H2 HT 0.417000 1.0080 0 + 10359 W1 2624 TIP3 OH2 OT -0.834000 15.9994 0 + 10360 W1 2624 TIP3 H1 HT 0.417000 1.0080 0 + 10361 W1 2624 TIP3 H2 HT 0.417000 1.0080 0 + 10362 W1 2625 TIP3 OH2 OT -0.834000 15.9994 0 + 10363 W1 2625 TIP3 H1 HT 0.417000 1.0080 0 + 10364 W1 2625 TIP3 H2 HT 0.417000 1.0080 0 + 10365 W1 2626 TIP3 OH2 OT -0.834000 15.9994 0 + 10366 W1 2626 TIP3 H1 HT 0.417000 1.0080 0 + 10367 W1 2626 TIP3 H2 HT 0.417000 1.0080 0 + 10368 W1 2627 TIP3 OH2 OT -0.834000 15.9994 0 + 10369 W1 2627 TIP3 H1 HT 0.417000 1.0080 0 + 10370 W1 2627 TIP3 H2 HT 0.417000 1.0080 0 + 10371 W1 2628 TIP3 OH2 OT -0.834000 15.9994 0 + 10372 W1 2628 TIP3 H1 HT 0.417000 1.0080 0 + 10373 W1 2628 TIP3 H2 HT 0.417000 1.0080 0 + 10374 W1 2629 TIP3 OH2 OT -0.834000 15.9994 0 + 10375 W1 2629 TIP3 H1 HT 0.417000 1.0080 0 + 10376 W1 2629 TIP3 H2 HT 0.417000 1.0080 0 + 10377 W1 2630 TIP3 OH2 OT -0.834000 15.9994 0 + 10378 W1 2630 TIP3 H1 HT 0.417000 1.0080 0 + 10379 W1 2630 TIP3 H2 HT 0.417000 1.0080 0 + 10380 W1 2631 TIP3 OH2 OT -0.834000 15.9994 0 + 10381 W1 2631 TIP3 H1 HT 0.417000 1.0080 0 + 10382 W1 2631 TIP3 H2 HT 0.417000 1.0080 0 + 10383 W1 2632 TIP3 OH2 OT -0.834000 15.9994 0 + 10384 W1 2632 TIP3 H1 HT 0.417000 1.0080 0 + 10385 W1 2632 TIP3 H2 HT 0.417000 1.0080 0 + 10386 W1 2633 TIP3 OH2 OT -0.834000 15.9994 0 + 10387 W1 2633 TIP3 H1 HT 0.417000 1.0080 0 + 10388 W1 2633 TIP3 H2 HT 0.417000 1.0080 0 + 10389 W1 2634 TIP3 OH2 OT -0.834000 15.9994 0 + 10390 W1 2634 TIP3 H1 HT 0.417000 1.0080 0 + 10391 W1 2634 TIP3 H2 HT 0.417000 1.0080 0 + 10392 W1 2635 TIP3 OH2 OT -0.834000 15.9994 0 + 10393 W1 2635 TIP3 H1 HT 0.417000 1.0080 0 + 10394 W1 2635 TIP3 H2 HT 0.417000 1.0080 0 + 10395 W1 2636 TIP3 OH2 OT -0.834000 15.9994 0 + 10396 W1 2636 TIP3 H1 HT 0.417000 1.0080 0 + 10397 W1 2636 TIP3 H2 HT 0.417000 1.0080 0 + 10398 W1 2637 TIP3 OH2 OT -0.834000 15.9994 0 + 10399 W1 2637 TIP3 H1 HT 0.417000 1.0080 0 + 10400 W1 2637 TIP3 H2 HT 0.417000 1.0080 0 + 10401 W1 2638 TIP3 OH2 OT -0.834000 15.9994 0 + 10402 W1 2638 TIP3 H1 HT 0.417000 1.0080 0 + 10403 W1 2638 TIP3 H2 HT 0.417000 1.0080 0 + 10404 W1 2639 TIP3 OH2 OT -0.834000 15.9994 0 + 10405 W1 2639 TIP3 H1 HT 0.417000 1.0080 0 + 10406 W1 2639 TIP3 H2 HT 0.417000 1.0080 0 + 10407 W1 2640 TIP3 OH2 OT -0.834000 15.9994 0 + 10408 W1 2640 TIP3 H1 HT 0.417000 1.0080 0 + 10409 W1 2640 TIP3 H2 HT 0.417000 1.0080 0 + 10410 W1 2641 TIP3 OH2 OT -0.834000 15.9994 0 + 10411 W1 2641 TIP3 H1 HT 0.417000 1.0080 0 + 10412 W1 2641 TIP3 H2 HT 0.417000 1.0080 0 + 10413 W1 2642 TIP3 OH2 OT -0.834000 15.9994 0 + 10414 W1 2642 TIP3 H1 HT 0.417000 1.0080 0 + 10415 W1 2642 TIP3 H2 HT 0.417000 1.0080 0 + 10416 W1 2643 TIP3 OH2 OT -0.834000 15.9994 0 + 10417 W1 2643 TIP3 H1 HT 0.417000 1.0080 0 + 10418 W1 2643 TIP3 H2 HT 0.417000 1.0080 0 + 10419 W1 2644 TIP3 OH2 OT -0.834000 15.9994 0 + 10420 W1 2644 TIP3 H1 HT 0.417000 1.0080 0 + 10421 W1 2644 TIP3 H2 HT 0.417000 1.0080 0 + 10422 W1 2645 TIP3 OH2 OT -0.834000 15.9994 0 + 10423 W1 2645 TIP3 H1 HT 0.417000 1.0080 0 + 10424 W1 2645 TIP3 H2 HT 0.417000 1.0080 0 + 10425 W1 2646 TIP3 OH2 OT -0.834000 15.9994 0 + 10426 W1 2646 TIP3 H1 HT 0.417000 1.0080 0 + 10427 W1 2646 TIP3 H2 HT 0.417000 1.0080 0 + 10428 W1 2647 TIP3 OH2 OT -0.834000 15.9994 0 + 10429 W1 2647 TIP3 H1 HT 0.417000 1.0080 0 + 10430 W1 2647 TIP3 H2 HT 0.417000 1.0080 0 + 10431 W1 2648 TIP3 OH2 OT -0.834000 15.9994 0 + 10432 W1 2648 TIP3 H1 HT 0.417000 1.0080 0 + 10433 W1 2648 TIP3 H2 HT 0.417000 1.0080 0 + 10434 W1 2649 TIP3 OH2 OT -0.834000 15.9994 0 + 10435 W1 2649 TIP3 H1 HT 0.417000 1.0080 0 + 10436 W1 2649 TIP3 H2 HT 0.417000 1.0080 0 + 10437 W1 2650 TIP3 OH2 OT -0.834000 15.9994 0 + 10438 W1 2650 TIP3 H1 HT 0.417000 1.0080 0 + 10439 W1 2650 TIP3 H2 HT 0.417000 1.0080 0 + 10440 W1 2651 TIP3 OH2 OT -0.834000 15.9994 0 + 10441 W1 2651 TIP3 H1 HT 0.417000 1.0080 0 + 10442 W1 2651 TIP3 H2 HT 0.417000 1.0080 0 + 10443 W1 2652 TIP3 OH2 OT -0.834000 15.9994 0 + 10444 W1 2652 TIP3 H1 HT 0.417000 1.0080 0 + 10445 W1 2652 TIP3 H2 HT 0.417000 1.0080 0 + 10446 W1 2653 TIP3 OH2 OT -0.834000 15.9994 0 + 10447 W1 2653 TIP3 H1 HT 0.417000 1.0080 0 + 10448 W1 2653 TIP3 H2 HT 0.417000 1.0080 0 + 10449 W1 2654 TIP3 OH2 OT -0.834000 15.9994 0 + 10450 W1 2654 TIP3 H1 HT 0.417000 1.0080 0 + 10451 W1 2654 TIP3 H2 HT 0.417000 1.0080 0 + 10452 W1 2655 TIP3 OH2 OT -0.834000 15.9994 0 + 10453 W1 2655 TIP3 H1 HT 0.417000 1.0080 0 + 10454 W1 2655 TIP3 H2 HT 0.417000 1.0080 0 + 10455 W1 2656 TIP3 OH2 OT -0.834000 15.9994 0 + 10456 W1 2656 TIP3 H1 HT 0.417000 1.0080 0 + 10457 W1 2656 TIP3 H2 HT 0.417000 1.0080 0 + 10458 W1 2657 TIP3 OH2 OT -0.834000 15.9994 0 + 10459 W1 2657 TIP3 H1 HT 0.417000 1.0080 0 + 10460 W1 2657 TIP3 H2 HT 0.417000 1.0080 0 + 10461 W1 2658 TIP3 OH2 OT -0.834000 15.9994 0 + 10462 W1 2658 TIP3 H1 HT 0.417000 1.0080 0 + 10463 W1 2658 TIP3 H2 HT 0.417000 1.0080 0 + 10464 W1 2659 TIP3 OH2 OT -0.834000 15.9994 0 + 10465 W1 2659 TIP3 H1 HT 0.417000 1.0080 0 + 10466 W1 2659 TIP3 H2 HT 0.417000 1.0080 0 + 10467 W1 2660 TIP3 OH2 OT -0.834000 15.9994 0 + 10468 W1 2660 TIP3 H1 HT 0.417000 1.0080 0 + 10469 W1 2660 TIP3 H2 HT 0.417000 1.0080 0 + 10470 W1 2661 TIP3 OH2 OT -0.834000 15.9994 0 + 10471 W1 2661 TIP3 H1 HT 0.417000 1.0080 0 + 10472 W1 2661 TIP3 H2 HT 0.417000 1.0080 0 + 10473 W1 2662 TIP3 OH2 OT -0.834000 15.9994 0 + 10474 W1 2662 TIP3 H1 HT 0.417000 1.0080 0 + 10475 W1 2662 TIP3 H2 HT 0.417000 1.0080 0 + 10476 W1 2663 TIP3 OH2 OT -0.834000 15.9994 0 + 10477 W1 2663 TIP3 H1 HT 0.417000 1.0080 0 + 10478 W1 2663 TIP3 H2 HT 0.417000 1.0080 0 + 10479 W1 2664 TIP3 OH2 OT -0.834000 15.9994 0 + 10480 W1 2664 TIP3 H1 HT 0.417000 1.0080 0 + 10481 W1 2664 TIP3 H2 HT 0.417000 1.0080 0 + 10482 W1 2665 TIP3 OH2 OT -0.834000 15.9994 0 + 10483 W1 2665 TIP3 H1 HT 0.417000 1.0080 0 + 10484 W1 2665 TIP3 H2 HT 0.417000 1.0080 0 + 10485 W1 2666 TIP3 OH2 OT -0.834000 15.9994 0 + 10486 W1 2666 TIP3 H1 HT 0.417000 1.0080 0 + 10487 W1 2666 TIP3 H2 HT 0.417000 1.0080 0 + 10488 W1 2667 TIP3 OH2 OT -0.834000 15.9994 0 + 10489 W1 2667 TIP3 H1 HT 0.417000 1.0080 0 + 10490 W1 2667 TIP3 H2 HT 0.417000 1.0080 0 + 10491 W1 2668 TIP3 OH2 OT -0.834000 15.9994 0 + 10492 W1 2668 TIP3 H1 HT 0.417000 1.0080 0 + 10493 W1 2668 TIP3 H2 HT 0.417000 1.0080 0 + 10494 W1 2669 TIP3 OH2 OT -0.834000 15.9994 0 + 10495 W1 2669 TIP3 H1 HT 0.417000 1.0080 0 + 10496 W1 2669 TIP3 H2 HT 0.417000 1.0080 0 + 10497 W1 2670 TIP3 OH2 OT -0.834000 15.9994 0 + 10498 W1 2670 TIP3 H1 HT 0.417000 1.0080 0 + 10499 W1 2670 TIP3 H2 HT 0.417000 1.0080 0 + 10500 W1 2671 TIP3 OH2 OT -0.834000 15.9994 0 + 10501 W1 2671 TIP3 H1 HT 0.417000 1.0080 0 + 10502 W1 2671 TIP3 H2 HT 0.417000 1.0080 0 + 10503 W1 2672 TIP3 OH2 OT -0.834000 15.9994 0 + 10504 W1 2672 TIP3 H1 HT 0.417000 1.0080 0 + 10505 W1 2672 TIP3 H2 HT 0.417000 1.0080 0 + 10506 W1 2673 TIP3 OH2 OT -0.834000 15.9994 0 + 10507 W1 2673 TIP3 H1 HT 0.417000 1.0080 0 + 10508 W1 2673 TIP3 H2 HT 0.417000 1.0080 0 + 10509 W1 2674 TIP3 OH2 OT -0.834000 15.9994 0 + 10510 W1 2674 TIP3 H1 HT 0.417000 1.0080 0 + 10511 W1 2674 TIP3 H2 HT 0.417000 1.0080 0 + 10512 W1 2675 TIP3 OH2 OT -0.834000 15.9994 0 + 10513 W1 2675 TIP3 H1 HT 0.417000 1.0080 0 + 10514 W1 2675 TIP3 H2 HT 0.417000 1.0080 0 + 10515 W1 2676 TIP3 OH2 OT -0.834000 15.9994 0 + 10516 W1 2676 TIP3 H1 HT 0.417000 1.0080 0 + 10517 W1 2676 TIP3 H2 HT 0.417000 1.0080 0 + 10518 W1 2677 TIP3 OH2 OT -0.834000 15.9994 0 + 10519 W1 2677 TIP3 H1 HT 0.417000 1.0080 0 + 10520 W1 2677 TIP3 H2 HT 0.417000 1.0080 0 + 10521 W1 2678 TIP3 OH2 OT -0.834000 15.9994 0 + 10522 W1 2678 TIP3 H1 HT 0.417000 1.0080 0 + 10523 W1 2678 TIP3 H2 HT 0.417000 1.0080 0 + 10524 W1 2679 TIP3 OH2 OT -0.834000 15.9994 0 + 10525 W1 2679 TIP3 H1 HT 0.417000 1.0080 0 + 10526 W1 2679 TIP3 H2 HT 0.417000 1.0080 0 + 10527 W1 2680 TIP3 OH2 OT -0.834000 15.9994 0 + 10528 W1 2680 TIP3 H1 HT 0.417000 1.0080 0 + 10529 W1 2680 TIP3 H2 HT 0.417000 1.0080 0 + 10530 W1 2681 TIP3 OH2 OT -0.834000 15.9994 0 + 10531 W1 2681 TIP3 H1 HT 0.417000 1.0080 0 + 10532 W1 2681 TIP3 H2 HT 0.417000 1.0080 0 + 10533 W1 2682 TIP3 OH2 OT -0.834000 15.9994 0 + 10534 W1 2682 TIP3 H1 HT 0.417000 1.0080 0 + 10535 W1 2682 TIP3 H2 HT 0.417000 1.0080 0 + 10536 W1 2683 TIP3 OH2 OT -0.834000 15.9994 0 + 10537 W1 2683 TIP3 H1 HT 0.417000 1.0080 0 + 10538 W1 2683 TIP3 H2 HT 0.417000 1.0080 0 + 10539 W1 2684 TIP3 OH2 OT -0.834000 15.9994 0 + 10540 W1 2684 TIP3 H1 HT 0.417000 1.0080 0 + 10541 W1 2684 TIP3 H2 HT 0.417000 1.0080 0 + 10542 W1 2685 TIP3 OH2 OT -0.834000 15.9994 0 + 10543 W1 2685 TIP3 H1 HT 0.417000 1.0080 0 + 10544 W1 2685 TIP3 H2 HT 0.417000 1.0080 0 + 10545 W1 2686 TIP3 OH2 OT -0.834000 15.9994 0 + 10546 W1 2686 TIP3 H1 HT 0.417000 1.0080 0 + 10547 W1 2686 TIP3 H2 HT 0.417000 1.0080 0 + 10548 W1 2687 TIP3 OH2 OT -0.834000 15.9994 0 + 10549 W1 2687 TIP3 H1 HT 0.417000 1.0080 0 + 10550 W1 2687 TIP3 H2 HT 0.417000 1.0080 0 + 10551 W1 2688 TIP3 OH2 OT -0.834000 15.9994 0 + 10552 W1 2688 TIP3 H1 HT 0.417000 1.0080 0 + 10553 W1 2688 TIP3 H2 HT 0.417000 1.0080 0 + 10554 W1 2689 TIP3 OH2 OT -0.834000 15.9994 0 + 10555 W1 2689 TIP3 H1 HT 0.417000 1.0080 0 + 10556 W1 2689 TIP3 H2 HT 0.417000 1.0080 0 + 10557 W1 2690 TIP3 OH2 OT -0.834000 15.9994 0 + 10558 W1 2690 TIP3 H1 HT 0.417000 1.0080 0 + 10559 W1 2690 TIP3 H2 HT 0.417000 1.0080 0 + 10560 W1 2691 TIP3 OH2 OT -0.834000 15.9994 0 + 10561 W1 2691 TIP3 H1 HT 0.417000 1.0080 0 + 10562 W1 2691 TIP3 H2 HT 0.417000 1.0080 0 + 10563 W1 2692 TIP3 OH2 OT -0.834000 15.9994 0 + 10564 W1 2692 TIP3 H1 HT 0.417000 1.0080 0 + 10565 W1 2692 TIP3 H2 HT 0.417000 1.0080 0 + 10566 W1 2693 TIP3 OH2 OT -0.834000 15.9994 0 + 10567 W1 2693 TIP3 H1 HT 0.417000 1.0080 0 + 10568 W1 2693 TIP3 H2 HT 0.417000 1.0080 0 + 10569 W1 2694 TIP3 OH2 OT -0.834000 15.9994 0 + 10570 W1 2694 TIP3 H1 HT 0.417000 1.0080 0 + 10571 W1 2694 TIP3 H2 HT 0.417000 1.0080 0 + 10572 W1 2695 TIP3 OH2 OT -0.834000 15.9994 0 + 10573 W1 2695 TIP3 H1 HT 0.417000 1.0080 0 + 10574 W1 2695 TIP3 H2 HT 0.417000 1.0080 0 + 10575 W1 2696 TIP3 OH2 OT -0.834000 15.9994 0 + 10576 W1 2696 TIP3 H1 HT 0.417000 1.0080 0 + 10577 W1 2696 TIP3 H2 HT 0.417000 1.0080 0 + 10578 W1 2697 TIP3 OH2 OT -0.834000 15.9994 0 + 10579 W1 2697 TIP3 H1 HT 0.417000 1.0080 0 + 10580 W1 2697 TIP3 H2 HT 0.417000 1.0080 0 + 10581 W1 2698 TIP3 OH2 OT -0.834000 15.9994 0 + 10582 W1 2698 TIP3 H1 HT 0.417000 1.0080 0 + 10583 W1 2698 TIP3 H2 HT 0.417000 1.0080 0 + 10584 W1 2699 TIP3 OH2 OT -0.834000 15.9994 0 + 10585 W1 2699 TIP3 H1 HT 0.417000 1.0080 0 + 10586 W1 2699 TIP3 H2 HT 0.417000 1.0080 0 + 10587 W1 2700 TIP3 OH2 OT -0.834000 15.9994 0 + 10588 W1 2700 TIP3 H1 HT 0.417000 1.0080 0 + 10589 W1 2700 TIP3 H2 HT 0.417000 1.0080 0 + 10590 W1 2701 TIP3 OH2 OT -0.834000 15.9994 0 + 10591 W1 2701 TIP3 H1 HT 0.417000 1.0080 0 + 10592 W1 2701 TIP3 H2 HT 0.417000 1.0080 0 + 10593 W1 2702 TIP3 OH2 OT -0.834000 15.9994 0 + 10594 W1 2702 TIP3 H1 HT 0.417000 1.0080 0 + 10595 W1 2702 TIP3 H2 HT 0.417000 1.0080 0 + 10596 W1 2703 TIP3 OH2 OT -0.834000 15.9994 0 + 10597 W1 2703 TIP3 H1 HT 0.417000 1.0080 0 + 10598 W1 2703 TIP3 H2 HT 0.417000 1.0080 0 + 10599 W1 2704 TIP3 OH2 OT -0.834000 15.9994 0 + 10600 W1 2704 TIP3 H1 HT 0.417000 1.0080 0 + 10601 W1 2704 TIP3 H2 HT 0.417000 1.0080 0 + 10602 W1 2705 TIP3 OH2 OT -0.834000 15.9994 0 + 10603 W1 2705 TIP3 H1 HT 0.417000 1.0080 0 + 10604 W1 2705 TIP3 H2 HT 0.417000 1.0080 0 + 10605 W1 2706 TIP3 OH2 OT -0.834000 15.9994 0 + 10606 W1 2706 TIP3 H1 HT 0.417000 1.0080 0 + 10607 W1 2706 TIP3 H2 HT 0.417000 1.0080 0 + 10608 W1 2707 TIP3 OH2 OT -0.834000 15.9994 0 + 10609 W1 2707 TIP3 H1 HT 0.417000 1.0080 0 + 10610 W1 2707 TIP3 H2 HT 0.417000 1.0080 0 + 10611 W1 2708 TIP3 OH2 OT -0.834000 15.9994 0 + 10612 W1 2708 TIP3 H1 HT 0.417000 1.0080 0 + 10613 W1 2708 TIP3 H2 HT 0.417000 1.0080 0 + 10614 W1 2709 TIP3 OH2 OT -0.834000 15.9994 0 + 10615 W1 2709 TIP3 H1 HT 0.417000 1.0080 0 + 10616 W1 2709 TIP3 H2 HT 0.417000 1.0080 0 + 10617 W1 2710 TIP3 OH2 OT -0.834000 15.9994 0 + 10618 W1 2710 TIP3 H1 HT 0.417000 1.0080 0 + 10619 W1 2710 TIP3 H2 HT 0.417000 1.0080 0 + 10620 W1 2711 TIP3 OH2 OT -0.834000 15.9994 0 + 10621 W1 2711 TIP3 H1 HT 0.417000 1.0080 0 + 10622 W1 2711 TIP3 H2 HT 0.417000 1.0080 0 + 10623 W1 2712 TIP3 OH2 OT -0.834000 15.9994 0 + 10624 W1 2712 TIP3 H1 HT 0.417000 1.0080 0 + 10625 W1 2712 TIP3 H2 HT 0.417000 1.0080 0 + 10626 W1 2713 TIP3 OH2 OT -0.834000 15.9994 0 + 10627 W1 2713 TIP3 H1 HT 0.417000 1.0080 0 + 10628 W1 2713 TIP3 H2 HT 0.417000 1.0080 0 + 10629 W1 2714 TIP3 OH2 OT -0.834000 15.9994 0 + 10630 W1 2714 TIP3 H1 HT 0.417000 1.0080 0 + 10631 W1 2714 TIP3 H2 HT 0.417000 1.0080 0 + 10632 W1 2715 TIP3 OH2 OT -0.834000 15.9994 0 + 10633 W1 2715 TIP3 H1 HT 0.417000 1.0080 0 + 10634 W1 2715 TIP3 H2 HT 0.417000 1.0080 0 + 10635 W1 2716 TIP3 OH2 OT -0.834000 15.9994 0 + 10636 W1 2716 TIP3 H1 HT 0.417000 1.0080 0 + 10637 W1 2716 TIP3 H2 HT 0.417000 1.0080 0 + 10638 W1 2717 TIP3 OH2 OT -0.834000 15.9994 0 + 10639 W1 2717 TIP3 H1 HT 0.417000 1.0080 0 + 10640 W1 2717 TIP3 H2 HT 0.417000 1.0080 0 + 10641 W1 2718 TIP3 OH2 OT -0.834000 15.9994 0 + 10642 W1 2718 TIP3 H1 HT 0.417000 1.0080 0 + 10643 W1 2718 TIP3 H2 HT 0.417000 1.0080 0 + 10644 W1 2719 TIP3 OH2 OT -0.834000 15.9994 0 + 10645 W1 2719 TIP3 H1 HT 0.417000 1.0080 0 + 10646 W1 2719 TIP3 H2 HT 0.417000 1.0080 0 + 10647 W1 2720 TIP3 OH2 OT -0.834000 15.9994 0 + 10648 W1 2720 TIP3 H1 HT 0.417000 1.0080 0 + 10649 W1 2720 TIP3 H2 HT 0.417000 1.0080 0 + 10650 W1 2721 TIP3 OH2 OT -0.834000 15.9994 0 + 10651 W1 2721 TIP3 H1 HT 0.417000 1.0080 0 + 10652 W1 2721 TIP3 H2 HT 0.417000 1.0080 0 + 10653 W1 2722 TIP3 OH2 OT -0.834000 15.9994 0 + 10654 W1 2722 TIP3 H1 HT 0.417000 1.0080 0 + 10655 W1 2722 TIP3 H2 HT 0.417000 1.0080 0 + 10656 W1 2723 TIP3 OH2 OT -0.834000 15.9994 0 + 10657 W1 2723 TIP3 H1 HT 0.417000 1.0080 0 + 10658 W1 2723 TIP3 H2 HT 0.417000 1.0080 0 + 10659 W1 2724 TIP3 OH2 OT -0.834000 15.9994 0 + 10660 W1 2724 TIP3 H1 HT 0.417000 1.0080 0 + 10661 W1 2724 TIP3 H2 HT 0.417000 1.0080 0 + 10662 W1 2725 TIP3 OH2 OT -0.834000 15.9994 0 + 10663 W1 2725 TIP3 H1 HT 0.417000 1.0080 0 + 10664 W1 2725 TIP3 H2 HT 0.417000 1.0080 0 + 10665 W1 2726 TIP3 OH2 OT -0.834000 15.9994 0 + 10666 W1 2726 TIP3 H1 HT 0.417000 1.0080 0 + 10667 W1 2726 TIP3 H2 HT 0.417000 1.0080 0 + 10668 W1 2727 TIP3 OH2 OT -0.834000 15.9994 0 + 10669 W1 2727 TIP3 H1 HT 0.417000 1.0080 0 + 10670 W1 2727 TIP3 H2 HT 0.417000 1.0080 0 + 10671 W1 2728 TIP3 OH2 OT -0.834000 15.9994 0 + 10672 W1 2728 TIP3 H1 HT 0.417000 1.0080 0 + 10673 W1 2728 TIP3 H2 HT 0.417000 1.0080 0 + 10674 W1 2729 TIP3 OH2 OT -0.834000 15.9994 0 + 10675 W1 2729 TIP3 H1 HT 0.417000 1.0080 0 + 10676 W1 2729 TIP3 H2 HT 0.417000 1.0080 0 + 10677 W1 2730 TIP3 OH2 OT -0.834000 15.9994 0 + 10678 W1 2730 TIP3 H1 HT 0.417000 1.0080 0 + 10679 W1 2730 TIP3 H2 HT 0.417000 1.0080 0 + 10680 W1 2731 TIP3 OH2 OT -0.834000 15.9994 0 + 10681 W1 2731 TIP3 H1 HT 0.417000 1.0080 0 + 10682 W1 2731 TIP3 H2 HT 0.417000 1.0080 0 + 10683 W1 2732 TIP3 OH2 OT -0.834000 15.9994 0 + 10684 W1 2732 TIP3 H1 HT 0.417000 1.0080 0 + 10685 W1 2732 TIP3 H2 HT 0.417000 1.0080 0 + 10686 W1 2733 TIP3 OH2 OT -0.834000 15.9994 0 + 10687 W1 2733 TIP3 H1 HT 0.417000 1.0080 0 + 10688 W1 2733 TIP3 H2 HT 0.417000 1.0080 0 + 10689 W1 2734 TIP3 OH2 OT -0.834000 15.9994 0 + 10690 W1 2734 TIP3 H1 HT 0.417000 1.0080 0 + 10691 W1 2734 TIP3 H2 HT 0.417000 1.0080 0 + 10692 W1 2735 TIP3 OH2 OT -0.834000 15.9994 0 + 10693 W1 2735 TIP3 H1 HT 0.417000 1.0080 0 + 10694 W1 2735 TIP3 H2 HT 0.417000 1.0080 0 + 10695 W1 2736 TIP3 OH2 OT -0.834000 15.9994 0 + 10696 W1 2736 TIP3 H1 HT 0.417000 1.0080 0 + 10697 W1 2736 TIP3 H2 HT 0.417000 1.0080 0 + 10698 W1 2737 TIP3 OH2 OT -0.834000 15.9994 0 + 10699 W1 2737 TIP3 H1 HT 0.417000 1.0080 0 + 10700 W1 2737 TIP3 H2 HT 0.417000 1.0080 0 + 10701 W1 2738 TIP3 OH2 OT -0.834000 15.9994 0 + 10702 W1 2738 TIP3 H1 HT 0.417000 1.0080 0 + 10703 W1 2738 TIP3 H2 HT 0.417000 1.0080 0 + 10704 W1 2739 TIP3 OH2 OT -0.834000 15.9994 0 + 10705 W1 2739 TIP3 H1 HT 0.417000 1.0080 0 + 10706 W1 2739 TIP3 H2 HT 0.417000 1.0080 0 + 10707 W1 2740 TIP3 OH2 OT -0.834000 15.9994 0 + 10708 W1 2740 TIP3 H1 HT 0.417000 1.0080 0 + 10709 W1 2740 TIP3 H2 HT 0.417000 1.0080 0 + 10710 W1 2741 TIP3 OH2 OT -0.834000 15.9994 0 + 10711 W1 2741 TIP3 H1 HT 0.417000 1.0080 0 + 10712 W1 2741 TIP3 H2 HT 0.417000 1.0080 0 + 10713 W1 2742 TIP3 OH2 OT -0.834000 15.9994 0 + 10714 W1 2742 TIP3 H1 HT 0.417000 1.0080 0 + 10715 W1 2742 TIP3 H2 HT 0.417000 1.0080 0 + 10716 W1 2743 TIP3 OH2 OT -0.834000 15.9994 0 + 10717 W1 2743 TIP3 H1 HT 0.417000 1.0080 0 + 10718 W1 2743 TIP3 H2 HT 0.417000 1.0080 0 + 10719 W1 2744 TIP3 OH2 OT -0.834000 15.9994 0 + 10720 W1 2744 TIP3 H1 HT 0.417000 1.0080 0 + 10721 W1 2744 TIP3 H2 HT 0.417000 1.0080 0 + 10722 W1 2745 TIP3 OH2 OT -0.834000 15.9994 0 + 10723 W1 2745 TIP3 H1 HT 0.417000 1.0080 0 + 10724 W1 2745 TIP3 H2 HT 0.417000 1.0080 0 + 10725 W1 2746 TIP3 OH2 OT -0.834000 15.9994 0 + 10726 W1 2746 TIP3 H1 HT 0.417000 1.0080 0 + 10727 W1 2746 TIP3 H2 HT 0.417000 1.0080 0 + 10728 W1 2747 TIP3 OH2 OT -0.834000 15.9994 0 + 10729 W1 2747 TIP3 H1 HT 0.417000 1.0080 0 + 10730 W1 2747 TIP3 H2 HT 0.417000 1.0080 0 + 10731 W1 2748 TIP3 OH2 OT -0.834000 15.9994 0 + 10732 W1 2748 TIP3 H1 HT 0.417000 1.0080 0 + 10733 W1 2748 TIP3 H2 HT 0.417000 1.0080 0 + 10734 W1 2749 TIP3 OH2 OT -0.834000 15.9994 0 + 10735 W1 2749 TIP3 H1 HT 0.417000 1.0080 0 + 10736 W1 2749 TIP3 H2 HT 0.417000 1.0080 0 + 10737 W1 2750 TIP3 OH2 OT -0.834000 15.9994 0 + 10738 W1 2750 TIP3 H1 HT 0.417000 1.0080 0 + 10739 W1 2750 TIP3 H2 HT 0.417000 1.0080 0 + 10740 W1 2751 TIP3 OH2 OT -0.834000 15.9994 0 + 10741 W1 2751 TIP3 H1 HT 0.417000 1.0080 0 + 10742 W1 2751 TIP3 H2 HT 0.417000 1.0080 0 + 10743 W1 2752 TIP3 OH2 OT -0.834000 15.9994 0 + 10744 W1 2752 TIP3 H1 HT 0.417000 1.0080 0 + 10745 W1 2752 TIP3 H2 HT 0.417000 1.0080 0 + 10746 W1 2753 TIP3 OH2 OT -0.834000 15.9994 0 + 10747 W1 2753 TIP3 H1 HT 0.417000 1.0080 0 + 10748 W1 2753 TIP3 H2 HT 0.417000 1.0080 0 + 10749 W1 2754 TIP3 OH2 OT -0.834000 15.9994 0 + 10750 W1 2754 TIP3 H1 HT 0.417000 1.0080 0 + 10751 W1 2754 TIP3 H2 HT 0.417000 1.0080 0 + 10752 W1 2755 TIP3 OH2 OT -0.834000 15.9994 0 + 10753 W1 2755 TIP3 H1 HT 0.417000 1.0080 0 + 10754 W1 2755 TIP3 H2 HT 0.417000 1.0080 0 + 10755 W1 2756 TIP3 OH2 OT -0.834000 15.9994 0 + 10756 W1 2756 TIP3 H1 HT 0.417000 1.0080 0 + 10757 W1 2756 TIP3 H2 HT 0.417000 1.0080 0 + 10758 W1 2757 TIP3 OH2 OT -0.834000 15.9994 0 + 10759 W1 2757 TIP3 H1 HT 0.417000 1.0080 0 + 10760 W1 2757 TIP3 H2 HT 0.417000 1.0080 0 + 10761 W1 2758 TIP3 OH2 OT -0.834000 15.9994 0 + 10762 W1 2758 TIP3 H1 HT 0.417000 1.0080 0 + 10763 W1 2758 TIP3 H2 HT 0.417000 1.0080 0 + 10764 W1 2759 TIP3 OH2 OT -0.834000 15.9994 0 + 10765 W1 2759 TIP3 H1 HT 0.417000 1.0080 0 + 10766 W1 2759 TIP3 H2 HT 0.417000 1.0080 0 + 10767 W1 2760 TIP3 OH2 OT -0.834000 15.9994 0 + 10768 W1 2760 TIP3 H1 HT 0.417000 1.0080 0 + 10769 W1 2760 TIP3 H2 HT 0.417000 1.0080 0 + 10770 W1 2761 TIP3 OH2 OT -0.834000 15.9994 0 + 10771 W1 2761 TIP3 H1 HT 0.417000 1.0080 0 + 10772 W1 2761 TIP3 H2 HT 0.417000 1.0080 0 + 10773 W1 2762 TIP3 OH2 OT -0.834000 15.9994 0 + 10774 W1 2762 TIP3 H1 HT 0.417000 1.0080 0 + 10775 W1 2762 TIP3 H2 HT 0.417000 1.0080 0 + 10776 W1 2763 TIP3 OH2 OT -0.834000 15.9994 0 + 10777 W1 2763 TIP3 H1 HT 0.417000 1.0080 0 + 10778 W1 2763 TIP3 H2 HT 0.417000 1.0080 0 + 10779 W1 2764 TIP3 OH2 OT -0.834000 15.9994 0 + 10780 W1 2764 TIP3 H1 HT 0.417000 1.0080 0 + 10781 W1 2764 TIP3 H2 HT 0.417000 1.0080 0 + 10782 W1 2765 TIP3 OH2 OT -0.834000 15.9994 0 + 10783 W1 2765 TIP3 H1 HT 0.417000 1.0080 0 + 10784 W1 2765 TIP3 H2 HT 0.417000 1.0080 0 + 10785 W1 2766 TIP3 OH2 OT -0.834000 15.9994 0 + 10786 W1 2766 TIP3 H1 HT 0.417000 1.0080 0 + 10787 W1 2766 TIP3 H2 HT 0.417000 1.0080 0 + 10788 W1 2767 TIP3 OH2 OT -0.834000 15.9994 0 + 10789 W1 2767 TIP3 H1 HT 0.417000 1.0080 0 + 10790 W1 2767 TIP3 H2 HT 0.417000 1.0080 0 + 10791 W1 2768 TIP3 OH2 OT -0.834000 15.9994 0 + 10792 W1 2768 TIP3 H1 HT 0.417000 1.0080 0 + 10793 W1 2768 TIP3 H2 HT 0.417000 1.0080 0 + 10794 W1 2769 TIP3 OH2 OT -0.834000 15.9994 0 + 10795 W1 2769 TIP3 H1 HT 0.417000 1.0080 0 + 10796 W1 2769 TIP3 H2 HT 0.417000 1.0080 0 + 10797 W1 2770 TIP3 OH2 OT -0.834000 15.9994 0 + 10798 W1 2770 TIP3 H1 HT 0.417000 1.0080 0 + 10799 W1 2770 TIP3 H2 HT 0.417000 1.0080 0 + 10800 W1 2771 TIP3 OH2 OT -0.834000 15.9994 0 + 10801 W1 2771 TIP3 H1 HT 0.417000 1.0080 0 + 10802 W1 2771 TIP3 H2 HT 0.417000 1.0080 0 + 10803 W1 2772 TIP3 OH2 OT -0.834000 15.9994 0 + 10804 W1 2772 TIP3 H1 HT 0.417000 1.0080 0 + 10805 W1 2772 TIP3 H2 HT 0.417000 1.0080 0 + 10806 W1 2773 TIP3 OH2 OT -0.834000 15.9994 0 + 10807 W1 2773 TIP3 H1 HT 0.417000 1.0080 0 + 10808 W1 2773 TIP3 H2 HT 0.417000 1.0080 0 + 10809 W1 2774 TIP3 OH2 OT -0.834000 15.9994 0 + 10810 W1 2774 TIP3 H1 HT 0.417000 1.0080 0 + 10811 W1 2774 TIP3 H2 HT 0.417000 1.0080 0 + 10812 W1 2775 TIP3 OH2 OT -0.834000 15.9994 0 + 10813 W1 2775 TIP3 H1 HT 0.417000 1.0080 0 + 10814 W1 2775 TIP3 H2 HT 0.417000 1.0080 0 + 10815 W1 2776 TIP3 OH2 OT -0.834000 15.9994 0 + 10816 W1 2776 TIP3 H1 HT 0.417000 1.0080 0 + 10817 W1 2776 TIP3 H2 HT 0.417000 1.0080 0 + 10818 W1 2777 TIP3 OH2 OT -0.834000 15.9994 0 + 10819 W1 2777 TIP3 H1 HT 0.417000 1.0080 0 + 10820 W1 2777 TIP3 H2 HT 0.417000 1.0080 0 + 10821 W1 2778 TIP3 OH2 OT -0.834000 15.9994 0 + 10822 W1 2778 TIP3 H1 HT 0.417000 1.0080 0 + 10823 W1 2778 TIP3 H2 HT 0.417000 1.0080 0 + 10824 W1 2779 TIP3 OH2 OT -0.834000 15.9994 0 + 10825 W1 2779 TIP3 H1 HT 0.417000 1.0080 0 + 10826 W1 2779 TIP3 H2 HT 0.417000 1.0080 0 + 10827 W1 2780 TIP3 OH2 OT -0.834000 15.9994 0 + 10828 W1 2780 TIP3 H1 HT 0.417000 1.0080 0 + 10829 W1 2780 TIP3 H2 HT 0.417000 1.0080 0 + 10830 W1 2781 TIP3 OH2 OT -0.834000 15.9994 0 + 10831 W1 2781 TIP3 H1 HT 0.417000 1.0080 0 + 10832 W1 2781 TIP3 H2 HT 0.417000 1.0080 0 + 10833 W1 2782 TIP3 OH2 OT -0.834000 15.9994 0 + 10834 W1 2782 TIP3 H1 HT 0.417000 1.0080 0 + 10835 W1 2782 TIP3 H2 HT 0.417000 1.0080 0 + 10836 W1 2783 TIP3 OH2 OT -0.834000 15.9994 0 + 10837 W1 2783 TIP3 H1 HT 0.417000 1.0080 0 + 10838 W1 2783 TIP3 H2 HT 0.417000 1.0080 0 + 10839 W1 2784 TIP3 OH2 OT -0.834000 15.9994 0 + 10840 W1 2784 TIP3 H1 HT 0.417000 1.0080 0 + 10841 W1 2784 TIP3 H2 HT 0.417000 1.0080 0 + 10842 W1 2785 TIP3 OH2 OT -0.834000 15.9994 0 + 10843 W1 2785 TIP3 H1 HT 0.417000 1.0080 0 + 10844 W1 2785 TIP3 H2 HT 0.417000 1.0080 0 + 10845 W1 2786 TIP3 OH2 OT -0.834000 15.9994 0 + 10846 W1 2786 TIP3 H1 HT 0.417000 1.0080 0 + 10847 W1 2786 TIP3 H2 HT 0.417000 1.0080 0 + 10848 W1 2787 TIP3 OH2 OT -0.834000 15.9994 0 + 10849 W1 2787 TIP3 H1 HT 0.417000 1.0080 0 + 10850 W1 2787 TIP3 H2 HT 0.417000 1.0080 0 + 10851 W1 2788 TIP3 OH2 OT -0.834000 15.9994 0 + 10852 W1 2788 TIP3 H1 HT 0.417000 1.0080 0 + 10853 W1 2788 TIP3 H2 HT 0.417000 1.0080 0 + 10854 W1 2789 TIP3 OH2 OT -0.834000 15.9994 0 + 10855 W1 2789 TIP3 H1 HT 0.417000 1.0080 0 + 10856 W1 2789 TIP3 H2 HT 0.417000 1.0080 0 + 10857 W1 2790 TIP3 OH2 OT -0.834000 15.9994 0 + 10858 W1 2790 TIP3 H1 HT 0.417000 1.0080 0 + 10859 W1 2790 TIP3 H2 HT 0.417000 1.0080 0 + 10860 W1 2791 TIP3 OH2 OT -0.834000 15.9994 0 + 10861 W1 2791 TIP3 H1 HT 0.417000 1.0080 0 + 10862 W1 2791 TIP3 H2 HT 0.417000 1.0080 0 + 10863 W1 2792 TIP3 OH2 OT -0.834000 15.9994 0 + 10864 W1 2792 TIP3 H1 HT 0.417000 1.0080 0 + 10865 W1 2792 TIP3 H2 HT 0.417000 1.0080 0 + 10866 W1 2793 TIP3 OH2 OT -0.834000 15.9994 0 + 10867 W1 2793 TIP3 H1 HT 0.417000 1.0080 0 + 10868 W1 2793 TIP3 H2 HT 0.417000 1.0080 0 + 10869 W1 2794 TIP3 OH2 OT -0.834000 15.9994 0 + 10870 W1 2794 TIP3 H1 HT 0.417000 1.0080 0 + 10871 W1 2794 TIP3 H2 HT 0.417000 1.0080 0 + 10872 W1 2795 TIP3 OH2 OT -0.834000 15.9994 0 + 10873 W1 2795 TIP3 H1 HT 0.417000 1.0080 0 + 10874 W1 2795 TIP3 H2 HT 0.417000 1.0080 0 + 10875 W1 2796 TIP3 OH2 OT -0.834000 15.9994 0 + 10876 W1 2796 TIP3 H1 HT 0.417000 1.0080 0 + 10877 W1 2796 TIP3 H2 HT 0.417000 1.0080 0 + 10878 W1 2797 TIP3 OH2 OT -0.834000 15.9994 0 + 10879 W1 2797 TIP3 H1 HT 0.417000 1.0080 0 + 10880 W1 2797 TIP3 H2 HT 0.417000 1.0080 0 + 10881 W1 2798 TIP3 OH2 OT -0.834000 15.9994 0 + 10882 W1 2798 TIP3 H1 HT 0.417000 1.0080 0 + 10883 W1 2798 TIP3 H2 HT 0.417000 1.0080 0 + 10884 W1 2799 TIP3 OH2 OT -0.834000 15.9994 0 + 10885 W1 2799 TIP3 H1 HT 0.417000 1.0080 0 + 10886 W1 2799 TIP3 H2 HT 0.417000 1.0080 0 + 10887 W1 2800 TIP3 OH2 OT -0.834000 15.9994 0 + 10888 W1 2800 TIP3 H1 HT 0.417000 1.0080 0 + 10889 W1 2800 TIP3 H2 HT 0.417000 1.0080 0 + 10890 W1 2801 TIP3 OH2 OT -0.834000 15.9994 0 + 10891 W1 2801 TIP3 H1 HT 0.417000 1.0080 0 + 10892 W1 2801 TIP3 H2 HT 0.417000 1.0080 0 + 10893 W1 2802 TIP3 OH2 OT -0.834000 15.9994 0 + 10894 W1 2802 TIP3 H1 HT 0.417000 1.0080 0 + 10895 W1 2802 TIP3 H2 HT 0.417000 1.0080 0 + 10896 W1 2803 TIP3 OH2 OT -0.834000 15.9994 0 + 10897 W1 2803 TIP3 H1 HT 0.417000 1.0080 0 + 10898 W1 2803 TIP3 H2 HT 0.417000 1.0080 0 + 10899 W1 2804 TIP3 OH2 OT -0.834000 15.9994 0 + 10900 W1 2804 TIP3 H1 HT 0.417000 1.0080 0 + 10901 W1 2804 TIP3 H2 HT 0.417000 1.0080 0 + 10902 W1 2805 TIP3 OH2 OT -0.834000 15.9994 0 + 10903 W1 2805 TIP3 H1 HT 0.417000 1.0080 0 + 10904 W1 2805 TIP3 H2 HT 0.417000 1.0080 0 + 10905 W1 2806 TIP3 OH2 OT -0.834000 15.9994 0 + 10906 W1 2806 TIP3 H1 HT 0.417000 1.0080 0 + 10907 W1 2806 TIP3 H2 HT 0.417000 1.0080 0 + 10908 W1 2807 TIP3 OH2 OT -0.834000 15.9994 0 + 10909 W1 2807 TIP3 H1 HT 0.417000 1.0080 0 + 10910 W1 2807 TIP3 H2 HT 0.417000 1.0080 0 + 10911 W1 2808 TIP3 OH2 OT -0.834000 15.9994 0 + 10912 W1 2808 TIP3 H1 HT 0.417000 1.0080 0 + 10913 W1 2808 TIP3 H2 HT 0.417000 1.0080 0 + 10914 W1 2809 TIP3 OH2 OT -0.834000 15.9994 0 + 10915 W1 2809 TIP3 H1 HT 0.417000 1.0080 0 + 10916 W1 2809 TIP3 H2 HT 0.417000 1.0080 0 + 10917 W1 2810 TIP3 OH2 OT -0.834000 15.9994 0 + 10918 W1 2810 TIP3 H1 HT 0.417000 1.0080 0 + 10919 W1 2810 TIP3 H2 HT 0.417000 1.0080 0 + 10920 W1 2811 TIP3 OH2 OT -0.834000 15.9994 0 + 10921 W1 2811 TIP3 H1 HT 0.417000 1.0080 0 + 10922 W1 2811 TIP3 H2 HT 0.417000 1.0080 0 + 10923 W1 2812 TIP3 OH2 OT -0.834000 15.9994 0 + 10924 W1 2812 TIP3 H1 HT 0.417000 1.0080 0 + 10925 W1 2812 TIP3 H2 HT 0.417000 1.0080 0 + 10926 W1 2813 TIP3 OH2 OT -0.834000 15.9994 0 + 10927 W1 2813 TIP3 H1 HT 0.417000 1.0080 0 + 10928 W1 2813 TIP3 H2 HT 0.417000 1.0080 0 + 10929 W1 2814 TIP3 OH2 OT -0.834000 15.9994 0 + 10930 W1 2814 TIP3 H1 HT 0.417000 1.0080 0 + 10931 W1 2814 TIP3 H2 HT 0.417000 1.0080 0 + 10932 W1 2815 TIP3 OH2 OT -0.834000 15.9994 0 + 10933 W1 2815 TIP3 H1 HT 0.417000 1.0080 0 + 10934 W1 2815 TIP3 H2 HT 0.417000 1.0080 0 + 10935 W1 2816 TIP3 OH2 OT -0.834000 15.9994 0 + 10936 W1 2816 TIP3 H1 HT 0.417000 1.0080 0 + 10937 W1 2816 TIP3 H2 HT 0.417000 1.0080 0 + 10938 W1 2817 TIP3 OH2 OT -0.834000 15.9994 0 + 10939 W1 2817 TIP3 H1 HT 0.417000 1.0080 0 + 10940 W1 2817 TIP3 H2 HT 0.417000 1.0080 0 + 10941 W1 2818 TIP3 OH2 OT -0.834000 15.9994 0 + 10942 W1 2818 TIP3 H1 HT 0.417000 1.0080 0 + 10943 W1 2818 TIP3 H2 HT 0.417000 1.0080 0 + 10944 W1 2819 TIP3 OH2 OT -0.834000 15.9994 0 + 10945 W1 2819 TIP3 H1 HT 0.417000 1.0080 0 + 10946 W1 2819 TIP3 H2 HT 0.417000 1.0080 0 + 10947 W1 2820 TIP3 OH2 OT -0.834000 15.9994 0 + 10948 W1 2820 TIP3 H1 HT 0.417000 1.0080 0 + 10949 W1 2820 TIP3 H2 HT 0.417000 1.0080 0 + 10950 W1 2821 TIP3 OH2 OT -0.834000 15.9994 0 + 10951 W1 2821 TIP3 H1 HT 0.417000 1.0080 0 + 10952 W1 2821 TIP3 H2 HT 0.417000 1.0080 0 + 10953 W1 2822 TIP3 OH2 OT -0.834000 15.9994 0 + 10954 W1 2822 TIP3 H1 HT 0.417000 1.0080 0 + 10955 W1 2822 TIP3 H2 HT 0.417000 1.0080 0 + 10956 W1 2823 TIP3 OH2 OT -0.834000 15.9994 0 + 10957 W1 2823 TIP3 H1 HT 0.417000 1.0080 0 + 10958 W1 2823 TIP3 H2 HT 0.417000 1.0080 0 + 10959 W1 2824 TIP3 OH2 OT -0.834000 15.9994 0 + 10960 W1 2824 TIP3 H1 HT 0.417000 1.0080 0 + 10961 W1 2824 TIP3 H2 HT 0.417000 1.0080 0 + 10962 W1 2825 TIP3 OH2 OT -0.834000 15.9994 0 + 10963 W1 2825 TIP3 H1 HT 0.417000 1.0080 0 + 10964 W1 2825 TIP3 H2 HT 0.417000 1.0080 0 + 10965 W1 2826 TIP3 OH2 OT -0.834000 15.9994 0 + 10966 W1 2826 TIP3 H1 HT 0.417000 1.0080 0 + 10967 W1 2826 TIP3 H2 HT 0.417000 1.0080 0 + 10968 W1 2827 TIP3 OH2 OT -0.834000 15.9994 0 + 10969 W1 2827 TIP3 H1 HT 0.417000 1.0080 0 + 10970 W1 2827 TIP3 H2 HT 0.417000 1.0080 0 + 10971 W1 2828 TIP3 OH2 OT -0.834000 15.9994 0 + 10972 W1 2828 TIP3 H1 HT 0.417000 1.0080 0 + 10973 W1 2828 TIP3 H2 HT 0.417000 1.0080 0 + 10974 W1 2829 TIP3 OH2 OT -0.834000 15.9994 0 + 10975 W1 2829 TIP3 H1 HT 0.417000 1.0080 0 + 10976 W1 2829 TIP3 H2 HT 0.417000 1.0080 0 + 10977 W1 2830 TIP3 OH2 OT -0.834000 15.9994 0 + 10978 W1 2830 TIP3 H1 HT 0.417000 1.0080 0 + 10979 W1 2830 TIP3 H2 HT 0.417000 1.0080 0 + 10980 W1 2831 TIP3 OH2 OT -0.834000 15.9994 0 + 10981 W1 2831 TIP3 H1 HT 0.417000 1.0080 0 + 10982 W1 2831 TIP3 H2 HT 0.417000 1.0080 0 + 10983 W1 2832 TIP3 OH2 OT -0.834000 15.9994 0 + 10984 W1 2832 TIP3 H1 HT 0.417000 1.0080 0 + 10985 W1 2832 TIP3 H2 HT 0.417000 1.0080 0 + 10986 W1 2833 TIP3 OH2 OT -0.834000 15.9994 0 + 10987 W1 2833 TIP3 H1 HT 0.417000 1.0080 0 + 10988 W1 2833 TIP3 H2 HT 0.417000 1.0080 0 + 10989 W1 2834 TIP3 OH2 OT -0.834000 15.9994 0 + 10990 W1 2834 TIP3 H1 HT 0.417000 1.0080 0 + 10991 W1 2834 TIP3 H2 HT 0.417000 1.0080 0 + 10992 W1 2835 TIP3 OH2 OT -0.834000 15.9994 0 + 10993 W1 2835 TIP3 H1 HT 0.417000 1.0080 0 + 10994 W1 2835 TIP3 H2 HT 0.417000 1.0080 0 + 10995 W1 2836 TIP3 OH2 OT -0.834000 15.9994 0 + 10996 W1 2836 TIP3 H1 HT 0.417000 1.0080 0 + 10997 W1 2836 TIP3 H2 HT 0.417000 1.0080 0 + 10998 W1 2837 TIP3 OH2 OT -0.834000 15.9994 0 + 10999 W1 2837 TIP3 H1 HT 0.417000 1.0080 0 + 11000 W1 2837 TIP3 H2 HT 0.417000 1.0080 0 + 11001 W1 2838 TIP3 OH2 OT -0.834000 15.9994 0 + 11002 W1 2838 TIP3 H1 HT 0.417000 1.0080 0 + 11003 W1 2838 TIP3 H2 HT 0.417000 1.0080 0 + 11004 W1 2839 TIP3 OH2 OT -0.834000 15.9994 0 + 11005 W1 2839 TIP3 H1 HT 0.417000 1.0080 0 + 11006 W1 2839 TIP3 H2 HT 0.417000 1.0080 0 + 11007 W1 2840 TIP3 OH2 OT -0.834000 15.9994 0 + 11008 W1 2840 TIP3 H1 HT 0.417000 1.0080 0 + 11009 W1 2840 TIP3 H2 HT 0.417000 1.0080 0 + 11010 W1 2841 TIP3 OH2 OT -0.834000 15.9994 0 + 11011 W1 2841 TIP3 H1 HT 0.417000 1.0080 0 + 11012 W1 2841 TIP3 H2 HT 0.417000 1.0080 0 + 11013 W1 2842 TIP3 OH2 OT -0.834000 15.9994 0 + 11014 W1 2842 TIP3 H1 HT 0.417000 1.0080 0 + 11015 W1 2842 TIP3 H2 HT 0.417000 1.0080 0 + 11016 W1 2843 TIP3 OH2 OT -0.834000 15.9994 0 + 11017 W1 2843 TIP3 H1 HT 0.417000 1.0080 0 + 11018 W1 2843 TIP3 H2 HT 0.417000 1.0080 0 + 11019 W1 2844 TIP3 OH2 OT -0.834000 15.9994 0 + 11020 W1 2844 TIP3 H1 HT 0.417000 1.0080 0 + 11021 W1 2844 TIP3 H2 HT 0.417000 1.0080 0 + 11022 W1 2845 TIP3 OH2 OT -0.834000 15.9994 0 + 11023 W1 2845 TIP3 H1 HT 0.417000 1.0080 0 + 11024 W1 2845 TIP3 H2 HT 0.417000 1.0080 0 + 11025 W1 2846 TIP3 OH2 OT -0.834000 15.9994 0 + 11026 W1 2846 TIP3 H1 HT 0.417000 1.0080 0 + 11027 W1 2846 TIP3 H2 HT 0.417000 1.0080 0 + 11028 W1 2847 TIP3 OH2 OT -0.834000 15.9994 0 + 11029 W1 2847 TIP3 H1 HT 0.417000 1.0080 0 + 11030 W1 2847 TIP3 H2 HT 0.417000 1.0080 0 + 11031 W1 2848 TIP3 OH2 OT -0.834000 15.9994 0 + 11032 W1 2848 TIP3 H1 HT 0.417000 1.0080 0 + 11033 W1 2848 TIP3 H2 HT 0.417000 1.0080 0 + 11034 W1 2849 TIP3 OH2 OT -0.834000 15.9994 0 + 11035 W1 2849 TIP3 H1 HT 0.417000 1.0080 0 + 11036 W1 2849 TIP3 H2 HT 0.417000 1.0080 0 + 11037 W1 2850 TIP3 OH2 OT -0.834000 15.9994 0 + 11038 W1 2850 TIP3 H1 HT 0.417000 1.0080 0 + 11039 W1 2850 TIP3 H2 HT 0.417000 1.0080 0 + 11040 W1 2851 TIP3 OH2 OT -0.834000 15.9994 0 + 11041 W1 2851 TIP3 H1 HT 0.417000 1.0080 0 + 11042 W1 2851 TIP3 H2 HT 0.417000 1.0080 0 + 11043 W1 2852 TIP3 OH2 OT -0.834000 15.9994 0 + 11044 W1 2852 TIP3 H1 HT 0.417000 1.0080 0 + 11045 W1 2852 TIP3 H2 HT 0.417000 1.0080 0 + 11046 W1 2853 TIP3 OH2 OT -0.834000 15.9994 0 + 11047 W1 2853 TIP3 H1 HT 0.417000 1.0080 0 + 11048 W1 2853 TIP3 H2 HT 0.417000 1.0080 0 + 11049 W1 2854 TIP3 OH2 OT -0.834000 15.9994 0 + 11050 W1 2854 TIP3 H1 HT 0.417000 1.0080 0 + 11051 W1 2854 TIP3 H2 HT 0.417000 1.0080 0 + 11052 W1 2855 TIP3 OH2 OT -0.834000 15.9994 0 + 11053 W1 2855 TIP3 H1 HT 0.417000 1.0080 0 + 11054 W1 2855 TIP3 H2 HT 0.417000 1.0080 0 + 11055 W1 2856 TIP3 OH2 OT -0.834000 15.9994 0 + 11056 W1 2856 TIP3 H1 HT 0.417000 1.0080 0 + 11057 W1 2856 TIP3 H2 HT 0.417000 1.0080 0 + 11058 W1 2857 TIP3 OH2 OT -0.834000 15.9994 0 + 11059 W1 2857 TIP3 H1 HT 0.417000 1.0080 0 + 11060 W1 2857 TIP3 H2 HT 0.417000 1.0080 0 + 11061 W1 2858 TIP3 OH2 OT -0.834000 15.9994 0 + 11062 W1 2858 TIP3 H1 HT 0.417000 1.0080 0 + 11063 W1 2858 TIP3 H2 HT 0.417000 1.0080 0 + 11064 W1 2859 TIP3 OH2 OT -0.834000 15.9994 0 + 11065 W1 2859 TIP3 H1 HT 0.417000 1.0080 0 + 11066 W1 2859 TIP3 H2 HT 0.417000 1.0080 0 + 11067 W1 2860 TIP3 OH2 OT -0.834000 15.9994 0 + 11068 W1 2860 TIP3 H1 HT 0.417000 1.0080 0 + 11069 W1 2860 TIP3 H2 HT 0.417000 1.0080 0 + 11070 W1 2861 TIP3 OH2 OT -0.834000 15.9994 0 + 11071 W1 2861 TIP3 H1 HT 0.417000 1.0080 0 + 11072 W1 2861 TIP3 H2 HT 0.417000 1.0080 0 + 11073 W1 2862 TIP3 OH2 OT -0.834000 15.9994 0 + 11074 W1 2862 TIP3 H1 HT 0.417000 1.0080 0 + 11075 W1 2862 TIP3 H2 HT 0.417000 1.0080 0 + 11076 W1 2863 TIP3 OH2 OT -0.834000 15.9994 0 + 11077 W1 2863 TIP3 H1 HT 0.417000 1.0080 0 + 11078 W1 2863 TIP3 H2 HT 0.417000 1.0080 0 + 11079 W1 2864 TIP3 OH2 OT -0.834000 15.9994 0 + 11080 W1 2864 TIP3 H1 HT 0.417000 1.0080 0 + 11081 W1 2864 TIP3 H2 HT 0.417000 1.0080 0 + 11082 W1 2865 TIP3 OH2 OT -0.834000 15.9994 0 + 11083 W1 2865 TIP3 H1 HT 0.417000 1.0080 0 + 11084 W1 2865 TIP3 H2 HT 0.417000 1.0080 0 + 11085 W1 2866 TIP3 OH2 OT -0.834000 15.9994 0 + 11086 W1 2866 TIP3 H1 HT 0.417000 1.0080 0 + 11087 W1 2866 TIP3 H2 HT 0.417000 1.0080 0 + 11088 W1 2867 TIP3 OH2 OT -0.834000 15.9994 0 + 11089 W1 2867 TIP3 H1 HT 0.417000 1.0080 0 + 11090 W1 2867 TIP3 H2 HT 0.417000 1.0080 0 + 11091 W1 2868 TIP3 OH2 OT -0.834000 15.9994 0 + 11092 W1 2868 TIP3 H1 HT 0.417000 1.0080 0 + 11093 W1 2868 TIP3 H2 HT 0.417000 1.0080 0 + 11094 W1 2869 TIP3 OH2 OT -0.834000 15.9994 0 + 11095 W1 2869 TIP3 H1 HT 0.417000 1.0080 0 + 11096 W1 2869 TIP3 H2 HT 0.417000 1.0080 0 + 11097 W1 2870 TIP3 OH2 OT -0.834000 15.9994 0 + 11098 W1 2870 TIP3 H1 HT 0.417000 1.0080 0 + 11099 W1 2870 TIP3 H2 HT 0.417000 1.0080 0 + 11100 W1 2871 TIP3 OH2 OT -0.834000 15.9994 0 + 11101 W1 2871 TIP3 H1 HT 0.417000 1.0080 0 + 11102 W1 2871 TIP3 H2 HT 0.417000 1.0080 0 + 11103 W1 2872 TIP3 OH2 OT -0.834000 15.9994 0 + 11104 W1 2872 TIP3 H1 HT 0.417000 1.0080 0 + 11105 W1 2872 TIP3 H2 HT 0.417000 1.0080 0 + 11106 W1 2873 TIP3 OH2 OT -0.834000 15.9994 0 + 11107 W1 2873 TIP3 H1 HT 0.417000 1.0080 0 + 11108 W1 2873 TIP3 H2 HT 0.417000 1.0080 0 + 11109 W1 2874 TIP3 OH2 OT -0.834000 15.9994 0 + 11110 W1 2874 TIP3 H1 HT 0.417000 1.0080 0 + 11111 W1 2874 TIP3 H2 HT 0.417000 1.0080 0 + 11112 W1 2875 TIP3 OH2 OT -0.834000 15.9994 0 + 11113 W1 2875 TIP3 H1 HT 0.417000 1.0080 0 + 11114 W1 2875 TIP3 H2 HT 0.417000 1.0080 0 + 11115 W1 2876 TIP3 OH2 OT -0.834000 15.9994 0 + 11116 W1 2876 TIP3 H1 HT 0.417000 1.0080 0 + 11117 W1 2876 TIP3 H2 HT 0.417000 1.0080 0 + 11118 W1 2877 TIP3 OH2 OT -0.834000 15.9994 0 + 11119 W1 2877 TIP3 H1 HT 0.417000 1.0080 0 + 11120 W1 2877 TIP3 H2 HT 0.417000 1.0080 0 + 11121 W1 2878 TIP3 OH2 OT -0.834000 15.9994 0 + 11122 W1 2878 TIP3 H1 HT 0.417000 1.0080 0 + 11123 W1 2878 TIP3 H2 HT 0.417000 1.0080 0 + 11124 W1 2879 TIP3 OH2 OT -0.834000 15.9994 0 + 11125 W1 2879 TIP3 H1 HT 0.417000 1.0080 0 + 11126 W1 2879 TIP3 H2 HT 0.417000 1.0080 0 + 11127 W1 2880 TIP3 OH2 OT -0.834000 15.9994 0 + 11128 W1 2880 TIP3 H1 HT 0.417000 1.0080 0 + 11129 W1 2880 TIP3 H2 HT 0.417000 1.0080 0 + 11130 W1 2881 TIP3 OH2 OT -0.834000 15.9994 0 + 11131 W1 2881 TIP3 H1 HT 0.417000 1.0080 0 + 11132 W1 2881 TIP3 H2 HT 0.417000 1.0080 0 + 11133 W1 2882 TIP3 OH2 OT -0.834000 15.9994 0 + 11134 W1 2882 TIP3 H1 HT 0.417000 1.0080 0 + 11135 W1 2882 TIP3 H2 HT 0.417000 1.0080 0 + 11136 W1 2883 TIP3 OH2 OT -0.834000 15.9994 0 + 11137 W1 2883 TIP3 H1 HT 0.417000 1.0080 0 + 11138 W1 2883 TIP3 H2 HT 0.417000 1.0080 0 + 11139 W1 2884 TIP3 OH2 OT -0.834000 15.9994 0 + 11140 W1 2884 TIP3 H1 HT 0.417000 1.0080 0 + 11141 W1 2884 TIP3 H2 HT 0.417000 1.0080 0 + 11142 W1 2885 TIP3 OH2 OT -0.834000 15.9994 0 + 11143 W1 2885 TIP3 H1 HT 0.417000 1.0080 0 + 11144 W1 2885 TIP3 H2 HT 0.417000 1.0080 0 + 11145 W1 2886 TIP3 OH2 OT -0.834000 15.9994 0 + 11146 W1 2886 TIP3 H1 HT 0.417000 1.0080 0 + 11147 W1 2886 TIP3 H2 HT 0.417000 1.0080 0 + 11148 W1 2887 TIP3 OH2 OT -0.834000 15.9994 0 + 11149 W1 2887 TIP3 H1 HT 0.417000 1.0080 0 + 11150 W1 2887 TIP3 H2 HT 0.417000 1.0080 0 + 11151 W1 2888 TIP3 OH2 OT -0.834000 15.9994 0 + 11152 W1 2888 TIP3 H1 HT 0.417000 1.0080 0 + 11153 W1 2888 TIP3 H2 HT 0.417000 1.0080 0 + 11154 W1 2889 TIP3 OH2 OT -0.834000 15.9994 0 + 11155 W1 2889 TIP3 H1 HT 0.417000 1.0080 0 + 11156 W1 2889 TIP3 H2 HT 0.417000 1.0080 0 + 11157 W1 2890 TIP3 OH2 OT -0.834000 15.9994 0 + 11158 W1 2890 TIP3 H1 HT 0.417000 1.0080 0 + 11159 W1 2890 TIP3 H2 HT 0.417000 1.0080 0 + 11160 W1 2891 TIP3 OH2 OT -0.834000 15.9994 0 + 11161 W1 2891 TIP3 H1 HT 0.417000 1.0080 0 + 11162 W1 2891 TIP3 H2 HT 0.417000 1.0080 0 + 11163 W1 2892 TIP3 OH2 OT -0.834000 15.9994 0 + 11164 W1 2892 TIP3 H1 HT 0.417000 1.0080 0 + 11165 W1 2892 TIP3 H2 HT 0.417000 1.0080 0 + 11166 W1 2893 TIP3 OH2 OT -0.834000 15.9994 0 + 11167 W1 2893 TIP3 H1 HT 0.417000 1.0080 0 + 11168 W1 2893 TIP3 H2 HT 0.417000 1.0080 0 + 11169 W1 2894 TIP3 OH2 OT -0.834000 15.9994 0 + 11170 W1 2894 TIP3 H1 HT 0.417000 1.0080 0 + 11171 W1 2894 TIP3 H2 HT 0.417000 1.0080 0 + 11172 W1 2895 TIP3 OH2 OT -0.834000 15.9994 0 + 11173 W1 2895 TIP3 H1 HT 0.417000 1.0080 0 + 11174 W1 2895 TIP3 H2 HT 0.417000 1.0080 0 + 11175 W1 2896 TIP3 OH2 OT -0.834000 15.9994 0 + 11176 W1 2896 TIP3 H1 HT 0.417000 1.0080 0 + 11177 W1 2896 TIP3 H2 HT 0.417000 1.0080 0 + 11178 W1 2897 TIP3 OH2 OT -0.834000 15.9994 0 + 11179 W1 2897 TIP3 H1 HT 0.417000 1.0080 0 + 11180 W1 2897 TIP3 H2 HT 0.417000 1.0080 0 + 11181 W1 2898 TIP3 OH2 OT -0.834000 15.9994 0 + 11182 W1 2898 TIP3 H1 HT 0.417000 1.0080 0 + 11183 W1 2898 TIP3 H2 HT 0.417000 1.0080 0 + 11184 W1 2899 TIP3 OH2 OT -0.834000 15.9994 0 + 11185 W1 2899 TIP3 H1 HT 0.417000 1.0080 0 + 11186 W1 2899 TIP3 H2 HT 0.417000 1.0080 0 + 11187 W1 2900 TIP3 OH2 OT -0.834000 15.9994 0 + 11188 W1 2900 TIP3 H1 HT 0.417000 1.0080 0 + 11189 W1 2900 TIP3 H2 HT 0.417000 1.0080 0 + 11190 W1 2901 TIP3 OH2 OT -0.834000 15.9994 0 + 11191 W1 2901 TIP3 H1 HT 0.417000 1.0080 0 + 11192 W1 2901 TIP3 H2 HT 0.417000 1.0080 0 + 11193 W1 2902 TIP3 OH2 OT -0.834000 15.9994 0 + 11194 W1 2902 TIP3 H1 HT 0.417000 1.0080 0 + 11195 W1 2902 TIP3 H2 HT 0.417000 1.0080 0 + 11196 W1 2903 TIP3 OH2 OT -0.834000 15.9994 0 + 11197 W1 2903 TIP3 H1 HT 0.417000 1.0080 0 + 11198 W1 2903 TIP3 H2 HT 0.417000 1.0080 0 + 11199 W1 2904 TIP3 OH2 OT -0.834000 15.9994 0 + 11200 W1 2904 TIP3 H1 HT 0.417000 1.0080 0 + 11201 W1 2904 TIP3 H2 HT 0.417000 1.0080 0 + 11202 W1 2905 TIP3 OH2 OT -0.834000 15.9994 0 + 11203 W1 2905 TIP3 H1 HT 0.417000 1.0080 0 + 11204 W1 2905 TIP3 H2 HT 0.417000 1.0080 0 + 11205 W1 2906 TIP3 OH2 OT -0.834000 15.9994 0 + 11206 W1 2906 TIP3 H1 HT 0.417000 1.0080 0 + 11207 W1 2906 TIP3 H2 HT 0.417000 1.0080 0 + 11208 W1 2907 TIP3 OH2 OT -0.834000 15.9994 0 + 11209 W1 2907 TIP3 H1 HT 0.417000 1.0080 0 + 11210 W1 2907 TIP3 H2 HT 0.417000 1.0080 0 + 11211 W1 2908 TIP3 OH2 OT -0.834000 15.9994 0 + 11212 W1 2908 TIP3 H1 HT 0.417000 1.0080 0 + 11213 W1 2908 TIP3 H2 HT 0.417000 1.0080 0 + 11214 W1 2909 TIP3 OH2 OT -0.834000 15.9994 0 + 11215 W1 2909 TIP3 H1 HT 0.417000 1.0080 0 + 11216 W1 2909 TIP3 H2 HT 0.417000 1.0080 0 + 11217 W1 2910 TIP3 OH2 OT -0.834000 15.9994 0 + 11218 W1 2910 TIP3 H1 HT 0.417000 1.0080 0 + 11219 W1 2910 TIP3 H2 HT 0.417000 1.0080 0 + 11220 W1 2911 TIP3 OH2 OT -0.834000 15.9994 0 + 11221 W1 2911 TIP3 H1 HT 0.417000 1.0080 0 + 11222 W1 2911 TIP3 H2 HT 0.417000 1.0080 0 + 11223 W1 2912 TIP3 OH2 OT -0.834000 15.9994 0 + 11224 W1 2912 TIP3 H1 HT 0.417000 1.0080 0 + 11225 W1 2912 TIP3 H2 HT 0.417000 1.0080 0 + 11226 W1 2913 TIP3 OH2 OT -0.834000 15.9994 0 + 11227 W1 2913 TIP3 H1 HT 0.417000 1.0080 0 + 11228 W1 2913 TIP3 H2 HT 0.417000 1.0080 0 + 11229 W1 2914 TIP3 OH2 OT -0.834000 15.9994 0 + 11230 W1 2914 TIP3 H1 HT 0.417000 1.0080 0 + 11231 W1 2914 TIP3 H2 HT 0.417000 1.0080 0 + 11232 W1 2915 TIP3 OH2 OT -0.834000 15.9994 0 + 11233 W1 2915 TIP3 H1 HT 0.417000 1.0080 0 + 11234 W1 2915 TIP3 H2 HT 0.417000 1.0080 0 + 11235 W1 2916 TIP3 OH2 OT -0.834000 15.9994 0 + 11236 W1 2916 TIP3 H1 HT 0.417000 1.0080 0 + 11237 W1 2916 TIP3 H2 HT 0.417000 1.0080 0 + 11238 W1 2917 TIP3 OH2 OT -0.834000 15.9994 0 + 11239 W1 2917 TIP3 H1 HT 0.417000 1.0080 0 + 11240 W1 2917 TIP3 H2 HT 0.417000 1.0080 0 + 11241 W1 2918 TIP3 OH2 OT -0.834000 15.9994 0 + 11242 W1 2918 TIP3 H1 HT 0.417000 1.0080 0 + 11243 W1 2918 TIP3 H2 HT 0.417000 1.0080 0 + 11244 W1 2919 TIP3 OH2 OT -0.834000 15.9994 0 + 11245 W1 2919 TIP3 H1 HT 0.417000 1.0080 0 + 11246 W1 2919 TIP3 H2 HT 0.417000 1.0080 0 + 11247 W1 2920 TIP3 OH2 OT -0.834000 15.9994 0 + 11248 W1 2920 TIP3 H1 HT 0.417000 1.0080 0 + 11249 W1 2920 TIP3 H2 HT 0.417000 1.0080 0 + 11250 W1 2921 TIP3 OH2 OT -0.834000 15.9994 0 + 11251 W1 2921 TIP3 H1 HT 0.417000 1.0080 0 + 11252 W1 2921 TIP3 H2 HT 0.417000 1.0080 0 + 11253 W1 2922 TIP3 OH2 OT -0.834000 15.9994 0 + 11254 W1 2922 TIP3 H1 HT 0.417000 1.0080 0 + 11255 W1 2922 TIP3 H2 HT 0.417000 1.0080 0 + 11256 W1 2923 TIP3 OH2 OT -0.834000 15.9994 0 + 11257 W1 2923 TIP3 H1 HT 0.417000 1.0080 0 + 11258 W1 2923 TIP3 H2 HT 0.417000 1.0080 0 + 11259 W1 2924 TIP3 OH2 OT -0.834000 15.9994 0 + 11260 W1 2924 TIP3 H1 HT 0.417000 1.0080 0 + 11261 W1 2924 TIP3 H2 HT 0.417000 1.0080 0 + 11262 W1 2925 TIP3 OH2 OT -0.834000 15.9994 0 + 11263 W1 2925 TIP3 H1 HT 0.417000 1.0080 0 + 11264 W1 2925 TIP3 H2 HT 0.417000 1.0080 0 + 11265 W1 2926 TIP3 OH2 OT -0.834000 15.9994 0 + 11266 W1 2926 TIP3 H1 HT 0.417000 1.0080 0 + 11267 W1 2926 TIP3 H2 HT 0.417000 1.0080 0 + 11268 W1 2927 TIP3 OH2 OT -0.834000 15.9994 0 + 11269 W1 2927 TIP3 H1 HT 0.417000 1.0080 0 + 11270 W1 2927 TIP3 H2 HT 0.417000 1.0080 0 + 11271 W1 2928 TIP3 OH2 OT -0.834000 15.9994 0 + 11272 W1 2928 TIP3 H1 HT 0.417000 1.0080 0 + 11273 W1 2928 TIP3 H2 HT 0.417000 1.0080 0 + 11274 W1 2929 TIP3 OH2 OT -0.834000 15.9994 0 + 11275 W1 2929 TIP3 H1 HT 0.417000 1.0080 0 + 11276 W1 2929 TIP3 H2 HT 0.417000 1.0080 0 + 11277 W1 2930 TIP3 OH2 OT -0.834000 15.9994 0 + 11278 W1 2930 TIP3 H1 HT 0.417000 1.0080 0 + 11279 W1 2930 TIP3 H2 HT 0.417000 1.0080 0 + 11280 W1 2931 TIP3 OH2 OT -0.834000 15.9994 0 + 11281 W1 2931 TIP3 H1 HT 0.417000 1.0080 0 + 11282 W1 2931 TIP3 H2 HT 0.417000 1.0080 0 + 11283 W1 2932 TIP3 OH2 OT -0.834000 15.9994 0 + 11284 W1 2932 TIP3 H1 HT 0.417000 1.0080 0 + 11285 W1 2932 TIP3 H2 HT 0.417000 1.0080 0 + 11286 W1 2933 TIP3 OH2 OT -0.834000 15.9994 0 + 11287 W1 2933 TIP3 H1 HT 0.417000 1.0080 0 + 11288 W1 2933 TIP3 H2 HT 0.417000 1.0080 0 + 11289 W1 2934 TIP3 OH2 OT -0.834000 15.9994 0 + 11290 W1 2934 TIP3 H1 HT 0.417000 1.0080 0 + 11291 W1 2934 TIP3 H2 HT 0.417000 1.0080 0 + 11292 W1 2935 TIP3 OH2 OT -0.834000 15.9994 0 + 11293 W1 2935 TIP3 H1 HT 0.417000 1.0080 0 + 11294 W1 2935 TIP3 H2 HT 0.417000 1.0080 0 + 11295 W1 2936 TIP3 OH2 OT -0.834000 15.9994 0 + 11296 W1 2936 TIP3 H1 HT 0.417000 1.0080 0 + 11297 W1 2936 TIP3 H2 HT 0.417000 1.0080 0 + 11298 W1 2937 TIP3 OH2 OT -0.834000 15.9994 0 + 11299 W1 2937 TIP3 H1 HT 0.417000 1.0080 0 + 11300 W1 2937 TIP3 H2 HT 0.417000 1.0080 0 + 11301 W1 2938 TIP3 OH2 OT -0.834000 15.9994 0 + 11302 W1 2938 TIP3 H1 HT 0.417000 1.0080 0 + 11303 W1 2938 TIP3 H2 HT 0.417000 1.0080 0 + 11304 W1 2939 TIP3 OH2 OT -0.834000 15.9994 0 + 11305 W1 2939 TIP3 H1 HT 0.417000 1.0080 0 + 11306 W1 2939 TIP3 H2 HT 0.417000 1.0080 0 + 11307 W1 2940 TIP3 OH2 OT -0.834000 15.9994 0 + 11308 W1 2940 TIP3 H1 HT 0.417000 1.0080 0 + 11309 W1 2940 TIP3 H2 HT 0.417000 1.0080 0 + 11310 W1 2941 TIP3 OH2 OT -0.834000 15.9994 0 + 11311 W1 2941 TIP3 H1 HT 0.417000 1.0080 0 + 11312 W1 2941 TIP3 H2 HT 0.417000 1.0080 0 + 11313 W1 2942 TIP3 OH2 OT -0.834000 15.9994 0 + 11314 W1 2942 TIP3 H1 HT 0.417000 1.0080 0 + 11315 W1 2942 TIP3 H2 HT 0.417000 1.0080 0 + 11316 W1 2943 TIP3 OH2 OT -0.834000 15.9994 0 + 11317 W1 2943 TIP3 H1 HT 0.417000 1.0080 0 + 11318 W1 2943 TIP3 H2 HT 0.417000 1.0080 0 + 11319 W1 2944 TIP3 OH2 OT -0.834000 15.9994 0 + 11320 W1 2944 TIP3 H1 HT 0.417000 1.0080 0 + 11321 W1 2944 TIP3 H2 HT 0.417000 1.0080 0 + 11322 W1 2945 TIP3 OH2 OT -0.834000 15.9994 0 + 11323 W1 2945 TIP3 H1 HT 0.417000 1.0080 0 + 11324 W1 2945 TIP3 H2 HT 0.417000 1.0080 0 + 11325 W1 2946 TIP3 OH2 OT -0.834000 15.9994 0 + 11326 W1 2946 TIP3 H1 HT 0.417000 1.0080 0 + 11327 W1 2946 TIP3 H2 HT 0.417000 1.0080 0 + 11328 W1 2947 TIP3 OH2 OT -0.834000 15.9994 0 + 11329 W1 2947 TIP3 H1 HT 0.417000 1.0080 0 + 11330 W1 2947 TIP3 H2 HT 0.417000 1.0080 0 + 11331 W1 2948 TIP3 OH2 OT -0.834000 15.9994 0 + 11332 W1 2948 TIP3 H1 HT 0.417000 1.0080 0 + 11333 W1 2948 TIP3 H2 HT 0.417000 1.0080 0 + 11334 W1 2949 TIP3 OH2 OT -0.834000 15.9994 0 + 11335 W1 2949 TIP3 H1 HT 0.417000 1.0080 0 + 11336 W1 2949 TIP3 H2 HT 0.417000 1.0080 0 + 11337 W1 2950 TIP3 OH2 OT -0.834000 15.9994 0 + 11338 W1 2950 TIP3 H1 HT 0.417000 1.0080 0 + 11339 W1 2950 TIP3 H2 HT 0.417000 1.0080 0 + 11340 W1 2951 TIP3 OH2 OT -0.834000 15.9994 0 + 11341 W1 2951 TIP3 H1 HT 0.417000 1.0080 0 + 11342 W1 2951 TIP3 H2 HT 0.417000 1.0080 0 + 11343 W1 2952 TIP3 OH2 OT -0.834000 15.9994 0 + 11344 W1 2952 TIP3 H1 HT 0.417000 1.0080 0 + 11345 W1 2952 TIP3 H2 HT 0.417000 1.0080 0 + 11346 W1 2953 TIP3 OH2 OT -0.834000 15.9994 0 + 11347 W1 2953 TIP3 H1 HT 0.417000 1.0080 0 + 11348 W1 2953 TIP3 H2 HT 0.417000 1.0080 0 + 11349 W1 2954 TIP3 OH2 OT -0.834000 15.9994 0 + 11350 W1 2954 TIP3 H1 HT 0.417000 1.0080 0 + 11351 W1 2954 TIP3 H2 HT 0.417000 1.0080 0 + 11352 W1 2955 TIP3 OH2 OT -0.834000 15.9994 0 + 11353 W1 2955 TIP3 H1 HT 0.417000 1.0080 0 + 11354 W1 2955 TIP3 H2 HT 0.417000 1.0080 0 + 11355 W1 2956 TIP3 OH2 OT -0.834000 15.9994 0 + 11356 W1 2956 TIP3 H1 HT 0.417000 1.0080 0 + 11357 W1 2956 TIP3 H2 HT 0.417000 1.0080 0 + 11358 W1 2957 TIP3 OH2 OT -0.834000 15.9994 0 + 11359 W1 2957 TIP3 H1 HT 0.417000 1.0080 0 + 11360 W1 2957 TIP3 H2 HT 0.417000 1.0080 0 + 11361 W1 2958 TIP3 OH2 OT -0.834000 15.9994 0 + 11362 W1 2958 TIP3 H1 HT 0.417000 1.0080 0 + 11363 W1 2958 TIP3 H2 HT 0.417000 1.0080 0 + 11364 W1 2959 TIP3 OH2 OT -0.834000 15.9994 0 + 11365 W1 2959 TIP3 H1 HT 0.417000 1.0080 0 + 11366 W1 2959 TIP3 H2 HT 0.417000 1.0080 0 + 11367 W1 2960 TIP3 OH2 OT -0.834000 15.9994 0 + 11368 W1 2960 TIP3 H1 HT 0.417000 1.0080 0 + 11369 W1 2960 TIP3 H2 HT 0.417000 1.0080 0 + 11370 W1 2961 TIP3 OH2 OT -0.834000 15.9994 0 + 11371 W1 2961 TIP3 H1 HT 0.417000 1.0080 0 + 11372 W1 2961 TIP3 H2 HT 0.417000 1.0080 0 + 11373 W1 2962 TIP3 OH2 OT -0.834000 15.9994 0 + 11374 W1 2962 TIP3 H1 HT 0.417000 1.0080 0 + 11375 W1 2962 TIP3 H2 HT 0.417000 1.0080 0 + 11376 W1 2963 TIP3 OH2 OT -0.834000 15.9994 0 + 11377 W1 2963 TIP3 H1 HT 0.417000 1.0080 0 + 11378 W1 2963 TIP3 H2 HT 0.417000 1.0080 0 + 11379 W1 2964 TIP3 OH2 OT -0.834000 15.9994 0 + 11380 W1 2964 TIP3 H1 HT 0.417000 1.0080 0 + 11381 W1 2964 TIP3 H2 HT 0.417000 1.0080 0 + 11382 W1 2965 TIP3 OH2 OT -0.834000 15.9994 0 + 11383 W1 2965 TIP3 H1 HT 0.417000 1.0080 0 + 11384 W1 2965 TIP3 H2 HT 0.417000 1.0080 0 + 11385 W1 2966 TIP3 OH2 OT -0.834000 15.9994 0 + 11386 W1 2966 TIP3 H1 HT 0.417000 1.0080 0 + 11387 W1 2966 TIP3 H2 HT 0.417000 1.0080 0 + 11388 W1 2967 TIP3 OH2 OT -0.834000 15.9994 0 + 11389 W1 2967 TIP3 H1 HT 0.417000 1.0080 0 + 11390 W1 2967 TIP3 H2 HT 0.417000 1.0080 0 + 11391 W1 2968 TIP3 OH2 OT -0.834000 15.9994 0 + 11392 W1 2968 TIP3 H1 HT 0.417000 1.0080 0 + 11393 W1 2968 TIP3 H2 HT 0.417000 1.0080 0 + 11394 W1 2969 TIP3 OH2 OT -0.834000 15.9994 0 + 11395 W1 2969 TIP3 H1 HT 0.417000 1.0080 0 + 11396 W1 2969 TIP3 H2 HT 0.417000 1.0080 0 + 11397 W1 2970 TIP3 OH2 OT -0.834000 15.9994 0 + 11398 W1 2970 TIP3 H1 HT 0.417000 1.0080 0 + 11399 W1 2970 TIP3 H2 HT 0.417000 1.0080 0 + 11400 W1 2971 TIP3 OH2 OT -0.834000 15.9994 0 + 11401 W1 2971 TIP3 H1 HT 0.417000 1.0080 0 + 11402 W1 2971 TIP3 H2 HT 0.417000 1.0080 0 + 11403 W1 2972 TIP3 OH2 OT -0.834000 15.9994 0 + 11404 W1 2972 TIP3 H1 HT 0.417000 1.0080 0 + 11405 W1 2972 TIP3 H2 HT 0.417000 1.0080 0 + 11406 W1 2973 TIP3 OH2 OT -0.834000 15.9994 0 + 11407 W1 2973 TIP3 H1 HT 0.417000 1.0080 0 + 11408 W1 2973 TIP3 H2 HT 0.417000 1.0080 0 + 11409 W1 2974 TIP3 OH2 OT -0.834000 15.9994 0 + 11410 W1 2974 TIP3 H1 HT 0.417000 1.0080 0 + 11411 W1 2974 TIP3 H2 HT 0.417000 1.0080 0 + 11412 W1 2975 TIP3 OH2 OT -0.834000 15.9994 0 + 11413 W1 2975 TIP3 H1 HT 0.417000 1.0080 0 + 11414 W1 2975 TIP3 H2 HT 0.417000 1.0080 0 + 11415 W1 2976 TIP3 OH2 OT -0.834000 15.9994 0 + 11416 W1 2976 TIP3 H1 HT 0.417000 1.0080 0 + 11417 W1 2976 TIP3 H2 HT 0.417000 1.0080 0 + 11418 W1 2977 TIP3 OH2 OT -0.834000 15.9994 0 + 11419 W1 2977 TIP3 H1 HT 0.417000 1.0080 0 + 11420 W1 2977 TIP3 H2 HT 0.417000 1.0080 0 + 11421 W1 2978 TIP3 OH2 OT -0.834000 15.9994 0 + 11422 W1 2978 TIP3 H1 HT 0.417000 1.0080 0 + 11423 W1 2978 TIP3 H2 HT 0.417000 1.0080 0 + 11424 W1 2979 TIP3 OH2 OT -0.834000 15.9994 0 + 11425 W1 2979 TIP3 H1 HT 0.417000 1.0080 0 + 11426 W1 2979 TIP3 H2 HT 0.417000 1.0080 0 + 11427 W1 2980 TIP3 OH2 OT -0.834000 15.9994 0 + 11428 W1 2980 TIP3 H1 HT 0.417000 1.0080 0 + 11429 W1 2980 TIP3 H2 HT 0.417000 1.0080 0 + 11430 W1 2981 TIP3 OH2 OT -0.834000 15.9994 0 + 11431 W1 2981 TIP3 H1 HT 0.417000 1.0080 0 + 11432 W1 2981 TIP3 H2 HT 0.417000 1.0080 0 + 11433 W1 2982 TIP3 OH2 OT -0.834000 15.9994 0 + 11434 W1 2982 TIP3 H1 HT 0.417000 1.0080 0 + 11435 W1 2982 TIP3 H2 HT 0.417000 1.0080 0 + 11436 W1 2983 TIP3 OH2 OT -0.834000 15.9994 0 + 11437 W1 2983 TIP3 H1 HT 0.417000 1.0080 0 + 11438 W1 2983 TIP3 H2 HT 0.417000 1.0080 0 + 11439 W1 2984 TIP3 OH2 OT -0.834000 15.9994 0 + 11440 W1 2984 TIP3 H1 HT 0.417000 1.0080 0 + 11441 W1 2984 TIP3 H2 HT 0.417000 1.0080 0 + 11442 W1 2985 TIP3 OH2 OT -0.834000 15.9994 0 + 11443 W1 2985 TIP3 H1 HT 0.417000 1.0080 0 + 11444 W1 2985 TIP3 H2 HT 0.417000 1.0080 0 + 11445 W1 2986 TIP3 OH2 OT -0.834000 15.9994 0 + 11446 W1 2986 TIP3 H1 HT 0.417000 1.0080 0 + 11447 W1 2986 TIP3 H2 HT 0.417000 1.0080 0 + 11448 W1 2987 TIP3 OH2 OT -0.834000 15.9994 0 + 11449 W1 2987 TIP3 H1 HT 0.417000 1.0080 0 + 11450 W1 2987 TIP3 H2 HT 0.417000 1.0080 0 + 11451 W1 2988 TIP3 OH2 OT -0.834000 15.9994 0 + 11452 W1 2988 TIP3 H1 HT 0.417000 1.0080 0 + 11453 W1 2988 TIP3 H2 HT 0.417000 1.0080 0 + 11454 W1 2989 TIP3 OH2 OT -0.834000 15.9994 0 + 11455 W1 2989 TIP3 H1 HT 0.417000 1.0080 0 + 11456 W1 2989 TIP3 H2 HT 0.417000 1.0080 0 + 11457 W1 2990 TIP3 OH2 OT -0.834000 15.9994 0 + 11458 W1 2990 TIP3 H1 HT 0.417000 1.0080 0 + 11459 W1 2990 TIP3 H2 HT 0.417000 1.0080 0 + 11460 W1 2991 TIP3 OH2 OT -0.834000 15.9994 0 + 11461 W1 2991 TIP3 H1 HT 0.417000 1.0080 0 + 11462 W1 2991 TIP3 H2 HT 0.417000 1.0080 0 + 11463 W1 2992 TIP3 OH2 OT -0.834000 15.9994 0 + 11464 W1 2992 TIP3 H1 HT 0.417000 1.0080 0 + 11465 W1 2992 TIP3 H2 HT 0.417000 1.0080 0 + 11466 W1 2993 TIP3 OH2 OT -0.834000 15.9994 0 + 11467 W1 2993 TIP3 H1 HT 0.417000 1.0080 0 + 11468 W1 2993 TIP3 H2 HT 0.417000 1.0080 0 + 11469 W1 2994 TIP3 OH2 OT -0.834000 15.9994 0 + 11470 W1 2994 TIP3 H1 HT 0.417000 1.0080 0 + 11471 W1 2994 TIP3 H2 HT 0.417000 1.0080 0 + 11472 W1 2995 TIP3 OH2 OT -0.834000 15.9994 0 + 11473 W1 2995 TIP3 H1 HT 0.417000 1.0080 0 + 11474 W1 2995 TIP3 H2 HT 0.417000 1.0080 0 + 11475 W1 2996 TIP3 OH2 OT -0.834000 15.9994 0 + 11476 W1 2996 TIP3 H1 HT 0.417000 1.0080 0 + 11477 W1 2996 TIP3 H2 HT 0.417000 1.0080 0 + 11478 W1 2997 TIP3 OH2 OT -0.834000 15.9994 0 + 11479 W1 2997 TIP3 H1 HT 0.417000 1.0080 0 + 11480 W1 2997 TIP3 H2 HT 0.417000 1.0080 0 + 11481 W1 2998 TIP3 OH2 OT -0.834000 15.9994 0 + 11482 W1 2998 TIP3 H1 HT 0.417000 1.0080 0 + 11483 W1 2998 TIP3 H2 HT 0.417000 1.0080 0 + 11484 W1 2999 TIP3 OH2 OT -0.834000 15.9994 0 + 11485 W1 2999 TIP3 H1 HT 0.417000 1.0080 0 + 11486 W1 2999 TIP3 H2 HT 0.417000 1.0080 0 + 11487 W1 3000 TIP3 OH2 OT -0.834000 15.9994 0 + 11488 W1 3000 TIP3 H1 HT 0.417000 1.0080 0 + 11489 W1 3000 TIP3 H2 HT 0.417000 1.0080 0 + 11490 W1 3001 TIP3 OH2 OT -0.834000 15.9994 0 + 11491 W1 3001 TIP3 H1 HT 0.417000 1.0080 0 + 11492 W1 3001 TIP3 H2 HT 0.417000 1.0080 0 + 11493 W1 3002 TIP3 OH2 OT -0.834000 15.9994 0 + 11494 W1 3002 TIP3 H1 HT 0.417000 1.0080 0 + 11495 W1 3002 TIP3 H2 HT 0.417000 1.0080 0 + 11496 W1 3003 TIP3 OH2 OT -0.834000 15.9994 0 + 11497 W1 3003 TIP3 H1 HT 0.417000 1.0080 0 + 11498 W1 3003 TIP3 H2 HT 0.417000 1.0080 0 + 11499 W1 3004 TIP3 OH2 OT -0.834000 15.9994 0 + 11500 W1 3004 TIP3 H1 HT 0.417000 1.0080 0 + 11501 W1 3004 TIP3 H2 HT 0.417000 1.0080 0 + 11502 W1 3005 TIP3 OH2 OT -0.834000 15.9994 0 + 11503 W1 3005 TIP3 H1 HT 0.417000 1.0080 0 + 11504 W1 3005 TIP3 H2 HT 0.417000 1.0080 0 + 11505 W1 3006 TIP3 OH2 OT -0.834000 15.9994 0 + 11506 W1 3006 TIP3 H1 HT 0.417000 1.0080 0 + 11507 W1 3006 TIP3 H2 HT 0.417000 1.0080 0 + 11508 W1 3007 TIP3 OH2 OT -0.834000 15.9994 0 + 11509 W1 3007 TIP3 H1 HT 0.417000 1.0080 0 + 11510 W1 3007 TIP3 H2 HT 0.417000 1.0080 0 + 11511 W1 3008 TIP3 OH2 OT -0.834000 15.9994 0 + 11512 W1 3008 TIP3 H1 HT 0.417000 1.0080 0 + 11513 W1 3008 TIP3 H2 HT 0.417000 1.0080 0 + 11514 W1 3009 TIP3 OH2 OT -0.834000 15.9994 0 + 11515 W1 3009 TIP3 H1 HT 0.417000 1.0080 0 + 11516 W1 3009 TIP3 H2 HT 0.417000 1.0080 0 + 11517 W1 3010 TIP3 OH2 OT -0.834000 15.9994 0 + 11518 W1 3010 TIP3 H1 HT 0.417000 1.0080 0 + 11519 W1 3010 TIP3 H2 HT 0.417000 1.0080 0 + 11520 W1 3011 TIP3 OH2 OT -0.834000 15.9994 0 + 11521 W1 3011 TIP3 H1 HT 0.417000 1.0080 0 + 11522 W1 3011 TIP3 H2 HT 0.417000 1.0080 0 + 11523 W1 3012 TIP3 OH2 OT -0.834000 15.9994 0 + 11524 W1 3012 TIP3 H1 HT 0.417000 1.0080 0 + 11525 W1 3012 TIP3 H2 HT 0.417000 1.0080 0 + 11526 W1 3013 TIP3 OH2 OT -0.834000 15.9994 0 + 11527 W1 3013 TIP3 H1 HT 0.417000 1.0080 0 + 11528 W1 3013 TIP3 H2 HT 0.417000 1.0080 0 + 11529 W1 3014 TIP3 OH2 OT -0.834000 15.9994 0 + 11530 W1 3014 TIP3 H1 HT 0.417000 1.0080 0 + 11531 W1 3014 TIP3 H2 HT 0.417000 1.0080 0 + 11532 W1 3015 TIP3 OH2 OT -0.834000 15.9994 0 + 11533 W1 3015 TIP3 H1 HT 0.417000 1.0080 0 + 11534 W1 3015 TIP3 H2 HT 0.417000 1.0080 0 + 11535 W1 3016 TIP3 OH2 OT -0.834000 15.9994 0 + 11536 W1 3016 TIP3 H1 HT 0.417000 1.0080 0 + 11537 W1 3016 TIP3 H2 HT 0.417000 1.0080 0 + 11538 W1 3017 TIP3 OH2 OT -0.834000 15.9994 0 + 11539 W1 3017 TIP3 H1 HT 0.417000 1.0080 0 + 11540 W1 3017 TIP3 H2 HT 0.417000 1.0080 0 + 11541 W1 3018 TIP3 OH2 OT -0.834000 15.9994 0 + 11542 W1 3018 TIP3 H1 HT 0.417000 1.0080 0 + 11543 W1 3018 TIP3 H2 HT 0.417000 1.0080 0 + 11544 W1 3019 TIP3 OH2 OT -0.834000 15.9994 0 + 11545 W1 3019 TIP3 H1 HT 0.417000 1.0080 0 + 11546 W1 3019 TIP3 H2 HT 0.417000 1.0080 0 + 11547 W1 3020 TIP3 OH2 OT -0.834000 15.9994 0 + 11548 W1 3020 TIP3 H1 HT 0.417000 1.0080 0 + 11549 W1 3020 TIP3 H2 HT 0.417000 1.0080 0 + 11550 W1 3021 TIP3 OH2 OT -0.834000 15.9994 0 + 11551 W1 3021 TIP3 H1 HT 0.417000 1.0080 0 + 11552 W1 3021 TIP3 H2 HT 0.417000 1.0080 0 + 11553 W1 3022 TIP3 OH2 OT -0.834000 15.9994 0 + 11554 W1 3022 TIP3 H1 HT 0.417000 1.0080 0 + 11555 W1 3022 TIP3 H2 HT 0.417000 1.0080 0 + 11556 W1 3023 TIP3 OH2 OT -0.834000 15.9994 0 + 11557 W1 3023 TIP3 H1 HT 0.417000 1.0080 0 + 11558 W1 3023 TIP3 H2 HT 0.417000 1.0080 0 + 11559 W1 3024 TIP3 OH2 OT -0.834000 15.9994 0 + 11560 W1 3024 TIP3 H1 HT 0.417000 1.0080 0 + 11561 W1 3024 TIP3 H2 HT 0.417000 1.0080 0 + 11562 W1 3025 TIP3 OH2 OT -0.834000 15.9994 0 + 11563 W1 3025 TIP3 H1 HT 0.417000 1.0080 0 + 11564 W1 3025 TIP3 H2 HT 0.417000 1.0080 0 + 11565 W1 3026 TIP3 OH2 OT -0.834000 15.9994 0 + 11566 W1 3026 TIP3 H1 HT 0.417000 1.0080 0 + 11567 W1 3026 TIP3 H2 HT 0.417000 1.0080 0 + 11568 W1 3027 TIP3 OH2 OT -0.834000 15.9994 0 + 11569 W1 3027 TIP3 H1 HT 0.417000 1.0080 0 + 11570 W1 3027 TIP3 H2 HT 0.417000 1.0080 0 + 11571 W1 3028 TIP3 OH2 OT -0.834000 15.9994 0 + 11572 W1 3028 TIP3 H1 HT 0.417000 1.0080 0 + 11573 W1 3028 TIP3 H2 HT 0.417000 1.0080 0 + 11574 W1 3029 TIP3 OH2 OT -0.834000 15.9994 0 + 11575 W1 3029 TIP3 H1 HT 0.417000 1.0080 0 + 11576 W1 3029 TIP3 H2 HT 0.417000 1.0080 0 + 11577 W1 3030 TIP3 OH2 OT -0.834000 15.9994 0 + 11578 W1 3030 TIP3 H1 HT 0.417000 1.0080 0 + 11579 W1 3030 TIP3 H2 HT 0.417000 1.0080 0 + 11580 W1 3031 TIP3 OH2 OT -0.834000 15.9994 0 + 11581 W1 3031 TIP3 H1 HT 0.417000 1.0080 0 + 11582 W1 3031 TIP3 H2 HT 0.417000 1.0080 0 + 11583 W1 3032 TIP3 OH2 OT -0.834000 15.9994 0 + 11584 W1 3032 TIP3 H1 HT 0.417000 1.0080 0 + 11585 W1 3032 TIP3 H2 HT 0.417000 1.0080 0 + 11586 W1 3033 TIP3 OH2 OT -0.834000 15.9994 0 + 11587 W1 3033 TIP3 H1 HT 0.417000 1.0080 0 + 11588 W1 3033 TIP3 H2 HT 0.417000 1.0080 0 + 11589 W1 3034 TIP3 OH2 OT -0.834000 15.9994 0 + 11590 W1 3034 TIP3 H1 HT 0.417000 1.0080 0 + 11591 W1 3034 TIP3 H2 HT 0.417000 1.0080 0 + 11592 W1 3035 TIP3 OH2 OT -0.834000 15.9994 0 + 11593 W1 3035 TIP3 H1 HT 0.417000 1.0080 0 + 11594 W1 3035 TIP3 H2 HT 0.417000 1.0080 0 + 11595 W1 3036 TIP3 OH2 OT -0.834000 15.9994 0 + 11596 W1 3036 TIP3 H1 HT 0.417000 1.0080 0 + 11597 W1 3036 TIP3 H2 HT 0.417000 1.0080 0 + 11598 W1 3037 TIP3 OH2 OT -0.834000 15.9994 0 + 11599 W1 3037 TIP3 H1 HT 0.417000 1.0080 0 + 11600 W1 3037 TIP3 H2 HT 0.417000 1.0080 0 + 11601 W1 3038 TIP3 OH2 OT -0.834000 15.9994 0 + 11602 W1 3038 TIP3 H1 HT 0.417000 1.0080 0 + 11603 W1 3038 TIP3 H2 HT 0.417000 1.0080 0 + 11604 W1 3039 TIP3 OH2 OT -0.834000 15.9994 0 + 11605 W1 3039 TIP3 H1 HT 0.417000 1.0080 0 + 11606 W1 3039 TIP3 H2 HT 0.417000 1.0080 0 + 11607 W1 3040 TIP3 OH2 OT -0.834000 15.9994 0 + 11608 W1 3040 TIP3 H1 HT 0.417000 1.0080 0 + 11609 W1 3040 TIP3 H2 HT 0.417000 1.0080 0 + 11610 W1 3041 TIP3 OH2 OT -0.834000 15.9994 0 + 11611 W1 3041 TIP3 H1 HT 0.417000 1.0080 0 + 11612 W1 3041 TIP3 H2 HT 0.417000 1.0080 0 + 11613 W1 3042 TIP3 OH2 OT -0.834000 15.9994 0 + 11614 W1 3042 TIP3 H1 HT 0.417000 1.0080 0 + 11615 W1 3042 TIP3 H2 HT 0.417000 1.0080 0 + 11616 W1 3043 TIP3 OH2 OT -0.834000 15.9994 0 + 11617 W1 3043 TIP3 H1 HT 0.417000 1.0080 0 + 11618 W1 3043 TIP3 H2 HT 0.417000 1.0080 0 + 11619 W1 3044 TIP3 OH2 OT -0.834000 15.9994 0 + 11620 W1 3044 TIP3 H1 HT 0.417000 1.0080 0 + 11621 W1 3044 TIP3 H2 HT 0.417000 1.0080 0 + 11622 W1 3045 TIP3 OH2 OT -0.834000 15.9994 0 + 11623 W1 3045 TIP3 H1 HT 0.417000 1.0080 0 + 11624 W1 3045 TIP3 H2 HT 0.417000 1.0080 0 + 11625 W1 3046 TIP3 OH2 OT -0.834000 15.9994 0 + 11626 W1 3046 TIP3 H1 HT 0.417000 1.0080 0 + 11627 W1 3046 TIP3 H2 HT 0.417000 1.0080 0 + 11628 W1 3047 TIP3 OH2 OT -0.834000 15.9994 0 + 11629 W1 3047 TIP3 H1 HT 0.417000 1.0080 0 + 11630 W1 3047 TIP3 H2 HT 0.417000 1.0080 0 + 11631 W1 3048 TIP3 OH2 OT -0.834000 15.9994 0 + 11632 W1 3048 TIP3 H1 HT 0.417000 1.0080 0 + 11633 W1 3048 TIP3 H2 HT 0.417000 1.0080 0 + 11634 W1 3049 TIP3 OH2 OT -0.834000 15.9994 0 + 11635 W1 3049 TIP3 H1 HT 0.417000 1.0080 0 + 11636 W1 3049 TIP3 H2 HT 0.417000 1.0080 0 + 11637 W1 3050 TIP3 OH2 OT -0.834000 15.9994 0 + 11638 W1 3050 TIP3 H1 HT 0.417000 1.0080 0 + 11639 W1 3050 TIP3 H2 HT 0.417000 1.0080 0 + 11640 W1 3051 TIP3 OH2 OT -0.834000 15.9994 0 + 11641 W1 3051 TIP3 H1 HT 0.417000 1.0080 0 + 11642 W1 3051 TIP3 H2 HT 0.417000 1.0080 0 + 11643 W1 3052 TIP3 OH2 OT -0.834000 15.9994 0 + 11644 W1 3052 TIP3 H1 HT 0.417000 1.0080 0 + 11645 W1 3052 TIP3 H2 HT 0.417000 1.0080 0 + 11646 W1 3053 TIP3 OH2 OT -0.834000 15.9994 0 + 11647 W1 3053 TIP3 H1 HT 0.417000 1.0080 0 + 11648 W1 3053 TIP3 H2 HT 0.417000 1.0080 0 + 11649 W1 3054 TIP3 OH2 OT -0.834000 15.9994 0 + 11650 W1 3054 TIP3 H1 HT 0.417000 1.0080 0 + 11651 W1 3054 TIP3 H2 HT 0.417000 1.0080 0 + 11652 W1 3055 TIP3 OH2 OT -0.834000 15.9994 0 + 11653 W1 3055 TIP3 H1 HT 0.417000 1.0080 0 + 11654 W1 3055 TIP3 H2 HT 0.417000 1.0080 0 + 11655 W1 3056 TIP3 OH2 OT -0.834000 15.9994 0 + 11656 W1 3056 TIP3 H1 HT 0.417000 1.0080 0 + 11657 W1 3056 TIP3 H2 HT 0.417000 1.0080 0 + 11658 W1 3057 TIP3 OH2 OT -0.834000 15.9994 0 + 11659 W1 3057 TIP3 H1 HT 0.417000 1.0080 0 + 11660 W1 3057 TIP3 H2 HT 0.417000 1.0080 0 + 11661 W1 3058 TIP3 OH2 OT -0.834000 15.9994 0 + 11662 W1 3058 TIP3 H1 HT 0.417000 1.0080 0 + 11663 W1 3058 TIP3 H2 HT 0.417000 1.0080 0 + 11664 W1 3059 TIP3 OH2 OT -0.834000 15.9994 0 + 11665 W1 3059 TIP3 H1 HT 0.417000 1.0080 0 + 11666 W1 3059 TIP3 H2 HT 0.417000 1.0080 0 + 11667 W1 3060 TIP3 OH2 OT -0.834000 15.9994 0 + 11668 W1 3060 TIP3 H1 HT 0.417000 1.0080 0 + 11669 W1 3060 TIP3 H2 HT 0.417000 1.0080 0 + 11670 W1 3061 TIP3 OH2 OT -0.834000 15.9994 0 + 11671 W1 3061 TIP3 H1 HT 0.417000 1.0080 0 + 11672 W1 3061 TIP3 H2 HT 0.417000 1.0080 0 + 11673 W1 3062 TIP3 OH2 OT -0.834000 15.9994 0 + 11674 W1 3062 TIP3 H1 HT 0.417000 1.0080 0 + 11675 W1 3062 TIP3 H2 HT 0.417000 1.0080 0 + 11676 W1 3063 TIP3 OH2 OT -0.834000 15.9994 0 + 11677 W1 3063 TIP3 H1 HT 0.417000 1.0080 0 + 11678 W1 3063 TIP3 H2 HT 0.417000 1.0080 0 + 11679 W1 3064 TIP3 OH2 OT -0.834000 15.9994 0 + 11680 W1 3064 TIP3 H1 HT 0.417000 1.0080 0 + 11681 W1 3064 TIP3 H2 HT 0.417000 1.0080 0 + 11682 W1 3065 TIP3 OH2 OT -0.834000 15.9994 0 + 11683 W1 3065 TIP3 H1 HT 0.417000 1.0080 0 + 11684 W1 3065 TIP3 H2 HT 0.417000 1.0080 0 + 11685 W1 3066 TIP3 OH2 OT -0.834000 15.9994 0 + 11686 W1 3066 TIP3 H1 HT 0.417000 1.0080 0 + 11687 W1 3066 TIP3 H2 HT 0.417000 1.0080 0 + 11688 W1 3067 TIP3 OH2 OT -0.834000 15.9994 0 + 11689 W1 3067 TIP3 H1 HT 0.417000 1.0080 0 + 11690 W1 3067 TIP3 H2 HT 0.417000 1.0080 0 + 11691 W1 3068 TIP3 OH2 OT -0.834000 15.9994 0 + 11692 W1 3068 TIP3 H1 HT 0.417000 1.0080 0 + 11693 W1 3068 TIP3 H2 HT 0.417000 1.0080 0 + 11694 W1 3069 TIP3 OH2 OT -0.834000 15.9994 0 + 11695 W1 3069 TIP3 H1 HT 0.417000 1.0080 0 + 11696 W1 3069 TIP3 H2 HT 0.417000 1.0080 0 + 11697 W1 3070 TIP3 OH2 OT -0.834000 15.9994 0 + 11698 W1 3070 TIP3 H1 HT 0.417000 1.0080 0 + 11699 W1 3070 TIP3 H2 HT 0.417000 1.0080 0 + 11700 W1 3071 TIP3 OH2 OT -0.834000 15.9994 0 + 11701 W1 3071 TIP3 H1 HT 0.417000 1.0080 0 + 11702 W1 3071 TIP3 H2 HT 0.417000 1.0080 0 + 11703 W1 3072 TIP3 OH2 OT -0.834000 15.9994 0 + 11704 W1 3072 TIP3 H1 HT 0.417000 1.0080 0 + 11705 W1 3072 TIP3 H2 HT 0.417000 1.0080 0 + 11706 W1 3073 TIP3 OH2 OT -0.834000 15.9994 0 + 11707 W1 3073 TIP3 H1 HT 0.417000 1.0080 0 + 11708 W1 3073 TIP3 H2 HT 0.417000 1.0080 0 + 11709 W1 3074 TIP3 OH2 OT -0.834000 15.9994 0 + 11710 W1 3074 TIP3 H1 HT 0.417000 1.0080 0 + 11711 W1 3074 TIP3 H2 HT 0.417000 1.0080 0 + 11712 W1 3075 TIP3 OH2 OT -0.834000 15.9994 0 + 11713 W1 3075 TIP3 H1 HT 0.417000 1.0080 0 + 11714 W1 3075 TIP3 H2 HT 0.417000 1.0080 0 + 11715 W1 3076 TIP3 OH2 OT -0.834000 15.9994 0 + 11716 W1 3076 TIP3 H1 HT 0.417000 1.0080 0 + 11717 W1 3076 TIP3 H2 HT 0.417000 1.0080 0 + 11718 W1 3077 TIP3 OH2 OT -0.834000 15.9994 0 + 11719 W1 3077 TIP3 H1 HT 0.417000 1.0080 0 + 11720 W1 3077 TIP3 H2 HT 0.417000 1.0080 0 + 11721 W1 3078 TIP3 OH2 OT -0.834000 15.9994 0 + 11722 W1 3078 TIP3 H1 HT 0.417000 1.0080 0 + 11723 W1 3078 TIP3 H2 HT 0.417000 1.0080 0 + 11724 W1 3079 TIP3 OH2 OT -0.834000 15.9994 0 + 11725 W1 3079 TIP3 H1 HT 0.417000 1.0080 0 + 11726 W1 3079 TIP3 H2 HT 0.417000 1.0080 0 + 11727 W1 3080 TIP3 OH2 OT -0.834000 15.9994 0 + 11728 W1 3080 TIP3 H1 HT 0.417000 1.0080 0 + 11729 W1 3080 TIP3 H2 HT 0.417000 1.0080 0 + 11730 W1 3081 TIP3 OH2 OT -0.834000 15.9994 0 + 11731 W1 3081 TIP3 H1 HT 0.417000 1.0080 0 + 11732 W1 3081 TIP3 H2 HT 0.417000 1.0080 0 + 11733 W1 3082 TIP3 OH2 OT -0.834000 15.9994 0 + 11734 W1 3082 TIP3 H1 HT 0.417000 1.0080 0 + 11735 W1 3082 TIP3 H2 HT 0.417000 1.0080 0 + 11736 W1 3083 TIP3 OH2 OT -0.834000 15.9994 0 + 11737 W1 3083 TIP3 H1 HT 0.417000 1.0080 0 + 11738 W1 3083 TIP3 H2 HT 0.417000 1.0080 0 + 11739 W1 3084 TIP3 OH2 OT -0.834000 15.9994 0 + 11740 W1 3084 TIP3 H1 HT 0.417000 1.0080 0 + 11741 W1 3084 TIP3 H2 HT 0.417000 1.0080 0 + 11742 W1 3085 TIP3 OH2 OT -0.834000 15.9994 0 + 11743 W1 3085 TIP3 H1 HT 0.417000 1.0080 0 + 11744 W1 3085 TIP3 H2 HT 0.417000 1.0080 0 + 11745 W1 3086 TIP3 OH2 OT -0.834000 15.9994 0 + 11746 W1 3086 TIP3 H1 HT 0.417000 1.0080 0 + 11747 W1 3086 TIP3 H2 HT 0.417000 1.0080 0 + 11748 W1 3087 TIP3 OH2 OT -0.834000 15.9994 0 + 11749 W1 3087 TIP3 H1 HT 0.417000 1.0080 0 + 11750 W1 3087 TIP3 H2 HT 0.417000 1.0080 0 + 11751 W1 3088 TIP3 OH2 OT -0.834000 15.9994 0 + 11752 W1 3088 TIP3 H1 HT 0.417000 1.0080 0 + 11753 W1 3088 TIP3 H2 HT 0.417000 1.0080 0 + 11754 W1 3089 TIP3 OH2 OT -0.834000 15.9994 0 + 11755 W1 3089 TIP3 H1 HT 0.417000 1.0080 0 + 11756 W1 3089 TIP3 H2 HT 0.417000 1.0080 0 + 11757 W1 3090 TIP3 OH2 OT -0.834000 15.9994 0 + 11758 W1 3090 TIP3 H1 HT 0.417000 1.0080 0 + 11759 W1 3090 TIP3 H2 HT 0.417000 1.0080 0 + 11760 W1 3091 TIP3 OH2 OT -0.834000 15.9994 0 + 11761 W1 3091 TIP3 H1 HT 0.417000 1.0080 0 + 11762 W1 3091 TIP3 H2 HT 0.417000 1.0080 0 + 11763 W1 3092 TIP3 OH2 OT -0.834000 15.9994 0 + 11764 W1 3092 TIP3 H1 HT 0.417000 1.0080 0 + 11765 W1 3092 TIP3 H2 HT 0.417000 1.0080 0 + 11766 W1 3093 TIP3 OH2 OT -0.834000 15.9994 0 + 11767 W1 3093 TIP3 H1 HT 0.417000 1.0080 0 + 11768 W1 3093 TIP3 H2 HT 0.417000 1.0080 0 + 11769 W1 3094 TIP3 OH2 OT -0.834000 15.9994 0 + 11770 W1 3094 TIP3 H1 HT 0.417000 1.0080 0 + 11771 W1 3094 TIP3 H2 HT 0.417000 1.0080 0 + 11772 W1 3095 TIP3 OH2 OT -0.834000 15.9994 0 + 11773 W1 3095 TIP3 H1 HT 0.417000 1.0080 0 + 11774 W1 3095 TIP3 H2 HT 0.417000 1.0080 0 + 11775 W1 3096 TIP3 OH2 OT -0.834000 15.9994 0 + 11776 W1 3096 TIP3 H1 HT 0.417000 1.0080 0 + 11777 W1 3096 TIP3 H2 HT 0.417000 1.0080 0 + 11778 W1 3097 TIP3 OH2 OT -0.834000 15.9994 0 + 11779 W1 3097 TIP3 H1 HT 0.417000 1.0080 0 + 11780 W1 3097 TIP3 H2 HT 0.417000 1.0080 0 + 11781 W1 3098 TIP3 OH2 OT -0.834000 15.9994 0 + 11782 W1 3098 TIP3 H1 HT 0.417000 1.0080 0 + 11783 W1 3098 TIP3 H2 HT 0.417000 1.0080 0 + 11784 W1 3099 TIP3 OH2 OT -0.834000 15.9994 0 + 11785 W1 3099 TIP3 H1 HT 0.417000 1.0080 0 + 11786 W1 3099 TIP3 H2 HT 0.417000 1.0080 0 + 11787 W1 3100 TIP3 OH2 OT -0.834000 15.9994 0 + 11788 W1 3100 TIP3 H1 HT 0.417000 1.0080 0 + 11789 W1 3100 TIP3 H2 HT 0.417000 1.0080 0 + 11790 W1 3101 TIP3 OH2 OT -0.834000 15.9994 0 + 11791 W1 3101 TIP3 H1 HT 0.417000 1.0080 0 + 11792 W1 3101 TIP3 H2 HT 0.417000 1.0080 0 + 11793 W1 3102 TIP3 OH2 OT -0.834000 15.9994 0 + 11794 W1 3102 TIP3 H1 HT 0.417000 1.0080 0 + 11795 W1 3102 TIP3 H2 HT 0.417000 1.0080 0 + 11796 W1 3103 TIP3 OH2 OT -0.834000 15.9994 0 + 11797 W1 3103 TIP3 H1 HT 0.417000 1.0080 0 + 11798 W1 3103 TIP3 H2 HT 0.417000 1.0080 0 + 11799 W1 3104 TIP3 OH2 OT -0.834000 15.9994 0 + 11800 W1 3104 TIP3 H1 HT 0.417000 1.0080 0 + 11801 W1 3104 TIP3 H2 HT 0.417000 1.0080 0 + 11802 W1 3105 TIP3 OH2 OT -0.834000 15.9994 0 + 11803 W1 3105 TIP3 H1 HT 0.417000 1.0080 0 + 11804 W1 3105 TIP3 H2 HT 0.417000 1.0080 0 + 11805 W1 3106 TIP3 OH2 OT -0.834000 15.9994 0 + 11806 W1 3106 TIP3 H1 HT 0.417000 1.0080 0 + 11807 W1 3106 TIP3 H2 HT 0.417000 1.0080 0 + 11808 W1 3107 TIP3 OH2 OT -0.834000 15.9994 0 + 11809 W1 3107 TIP3 H1 HT 0.417000 1.0080 0 + 11810 W1 3107 TIP3 H2 HT 0.417000 1.0080 0 + 11811 W1 3108 TIP3 OH2 OT -0.834000 15.9994 0 + 11812 W1 3108 TIP3 H1 HT 0.417000 1.0080 0 + 11813 W1 3108 TIP3 H2 HT 0.417000 1.0080 0 + 11814 W1 3109 TIP3 OH2 OT -0.834000 15.9994 0 + 11815 W1 3109 TIP3 H1 HT 0.417000 1.0080 0 + 11816 W1 3109 TIP3 H2 HT 0.417000 1.0080 0 + 11817 W1 3110 TIP3 OH2 OT -0.834000 15.9994 0 + 11818 W1 3110 TIP3 H1 HT 0.417000 1.0080 0 + 11819 W1 3110 TIP3 H2 HT 0.417000 1.0080 0 + 11820 W1 3111 TIP3 OH2 OT -0.834000 15.9994 0 + 11821 W1 3111 TIP3 H1 HT 0.417000 1.0080 0 + 11822 W1 3111 TIP3 H2 HT 0.417000 1.0080 0 + 11823 W1 3112 TIP3 OH2 OT -0.834000 15.9994 0 + 11824 W1 3112 TIP3 H1 HT 0.417000 1.0080 0 + 11825 W1 3112 TIP3 H2 HT 0.417000 1.0080 0 + 11826 W1 3113 TIP3 OH2 OT -0.834000 15.9994 0 + 11827 W1 3113 TIP3 H1 HT 0.417000 1.0080 0 + 11828 W1 3113 TIP3 H2 HT 0.417000 1.0080 0 + 11829 W1 3114 TIP3 OH2 OT -0.834000 15.9994 0 + 11830 W1 3114 TIP3 H1 HT 0.417000 1.0080 0 + 11831 W1 3114 TIP3 H2 HT 0.417000 1.0080 0 + 11832 W1 3115 TIP3 OH2 OT -0.834000 15.9994 0 + 11833 W1 3115 TIP3 H1 HT 0.417000 1.0080 0 + 11834 W1 3115 TIP3 H2 HT 0.417000 1.0080 0 + 11835 W1 3116 TIP3 OH2 OT -0.834000 15.9994 0 + 11836 W1 3116 TIP3 H1 HT 0.417000 1.0080 0 + 11837 W1 3116 TIP3 H2 HT 0.417000 1.0080 0 + 11838 W1 3117 TIP3 OH2 OT -0.834000 15.9994 0 + 11839 W1 3117 TIP3 H1 HT 0.417000 1.0080 0 + 11840 W1 3117 TIP3 H2 HT 0.417000 1.0080 0 + 11841 W1 3118 TIP3 OH2 OT -0.834000 15.9994 0 + 11842 W1 3118 TIP3 H1 HT 0.417000 1.0080 0 + 11843 W1 3118 TIP3 H2 HT 0.417000 1.0080 0 + 11844 W1 3119 TIP3 OH2 OT -0.834000 15.9994 0 + 11845 W1 3119 TIP3 H1 HT 0.417000 1.0080 0 + 11846 W1 3119 TIP3 H2 HT 0.417000 1.0080 0 + 11847 W1 3120 TIP3 OH2 OT -0.834000 15.9994 0 + 11848 W1 3120 TIP3 H1 HT 0.417000 1.0080 0 + 11849 W1 3120 TIP3 H2 HT 0.417000 1.0080 0 + 11850 W1 3121 TIP3 OH2 OT -0.834000 15.9994 0 + 11851 W1 3121 TIP3 H1 HT 0.417000 1.0080 0 + 11852 W1 3121 TIP3 H2 HT 0.417000 1.0080 0 + 11853 W1 3122 TIP3 OH2 OT -0.834000 15.9994 0 + 11854 W1 3122 TIP3 H1 HT 0.417000 1.0080 0 + 11855 W1 3122 TIP3 H2 HT 0.417000 1.0080 0 + 11856 W1 3123 TIP3 OH2 OT -0.834000 15.9994 0 + 11857 W1 3123 TIP3 H1 HT 0.417000 1.0080 0 + 11858 W1 3123 TIP3 H2 HT 0.417000 1.0080 0 + 11859 W1 3124 TIP3 OH2 OT -0.834000 15.9994 0 + 11860 W1 3124 TIP3 H1 HT 0.417000 1.0080 0 + 11861 W1 3124 TIP3 H2 HT 0.417000 1.0080 0 + 11862 W1 3125 TIP3 OH2 OT -0.834000 15.9994 0 + 11863 W1 3125 TIP3 H1 HT 0.417000 1.0080 0 + 11864 W1 3125 TIP3 H2 HT 0.417000 1.0080 0 + 11865 W1 3126 TIP3 OH2 OT -0.834000 15.9994 0 + 11866 W1 3126 TIP3 H1 HT 0.417000 1.0080 0 + 11867 W1 3126 TIP3 H2 HT 0.417000 1.0080 0 + 11868 W1 3127 TIP3 OH2 OT -0.834000 15.9994 0 + 11869 W1 3127 TIP3 H1 HT 0.417000 1.0080 0 + 11870 W1 3127 TIP3 H2 HT 0.417000 1.0080 0 + 11871 W1 3128 TIP3 OH2 OT -0.834000 15.9994 0 + 11872 W1 3128 TIP3 H1 HT 0.417000 1.0080 0 + 11873 W1 3128 TIP3 H2 HT 0.417000 1.0080 0 + 11874 W1 3129 TIP3 OH2 OT -0.834000 15.9994 0 + 11875 W1 3129 TIP3 H1 HT 0.417000 1.0080 0 + 11876 W1 3129 TIP3 H2 HT 0.417000 1.0080 0 + 11877 W1 3130 TIP3 OH2 OT -0.834000 15.9994 0 + 11878 W1 3130 TIP3 H1 HT 0.417000 1.0080 0 + 11879 W1 3130 TIP3 H2 HT 0.417000 1.0080 0 + 11880 W1 3131 TIP3 OH2 OT -0.834000 15.9994 0 + 11881 W1 3131 TIP3 H1 HT 0.417000 1.0080 0 + 11882 W1 3131 TIP3 H2 HT 0.417000 1.0080 0 + 11883 W1 3132 TIP3 OH2 OT -0.834000 15.9994 0 + 11884 W1 3132 TIP3 H1 HT 0.417000 1.0080 0 + 11885 W1 3132 TIP3 H2 HT 0.417000 1.0080 0 + 11886 W1 3133 TIP3 OH2 OT -0.834000 15.9994 0 + 11887 W1 3133 TIP3 H1 HT 0.417000 1.0080 0 + 11888 W1 3133 TIP3 H2 HT 0.417000 1.0080 0 + 11889 W1 3134 TIP3 OH2 OT -0.834000 15.9994 0 + 11890 W1 3134 TIP3 H1 HT 0.417000 1.0080 0 + 11891 W1 3134 TIP3 H2 HT 0.417000 1.0080 0 + 11892 W1 3135 TIP3 OH2 OT -0.834000 15.9994 0 + 11893 W1 3135 TIP3 H1 HT 0.417000 1.0080 0 + 11894 W1 3135 TIP3 H2 HT 0.417000 1.0080 0 + 11895 W1 3136 TIP3 OH2 OT -0.834000 15.9994 0 + 11896 W1 3136 TIP3 H1 HT 0.417000 1.0080 0 + 11897 W1 3136 TIP3 H2 HT 0.417000 1.0080 0 + 11898 W1 3137 TIP3 OH2 OT -0.834000 15.9994 0 + 11899 W1 3137 TIP3 H1 HT 0.417000 1.0080 0 + 11900 W1 3137 TIP3 H2 HT 0.417000 1.0080 0 + 11901 W1 3138 TIP3 OH2 OT -0.834000 15.9994 0 + 11902 W1 3138 TIP3 H1 HT 0.417000 1.0080 0 + 11903 W1 3138 TIP3 H2 HT 0.417000 1.0080 0 + 11904 W1 3139 TIP3 OH2 OT -0.834000 15.9994 0 + 11905 W1 3139 TIP3 H1 HT 0.417000 1.0080 0 + 11906 W1 3139 TIP3 H2 HT 0.417000 1.0080 0 + 11907 W1 3140 TIP3 OH2 OT -0.834000 15.9994 0 + 11908 W1 3140 TIP3 H1 HT 0.417000 1.0080 0 + 11909 W1 3140 TIP3 H2 HT 0.417000 1.0080 0 + 11910 W1 3141 TIP3 OH2 OT -0.834000 15.9994 0 + 11911 W1 3141 TIP3 H1 HT 0.417000 1.0080 0 + 11912 W1 3141 TIP3 H2 HT 0.417000 1.0080 0 + 11913 W1 3142 TIP3 OH2 OT -0.834000 15.9994 0 + 11914 W1 3142 TIP3 H1 HT 0.417000 1.0080 0 + 11915 W1 3142 TIP3 H2 HT 0.417000 1.0080 0 + 11916 W1 3143 TIP3 OH2 OT -0.834000 15.9994 0 + 11917 W1 3143 TIP3 H1 HT 0.417000 1.0080 0 + 11918 W1 3143 TIP3 H2 HT 0.417000 1.0080 0 + 11919 W1 3144 TIP3 OH2 OT -0.834000 15.9994 0 + 11920 W1 3144 TIP3 H1 HT 0.417000 1.0080 0 + 11921 W1 3144 TIP3 H2 HT 0.417000 1.0080 0 + 11922 W1 3145 TIP3 OH2 OT -0.834000 15.9994 0 + 11923 W1 3145 TIP3 H1 HT 0.417000 1.0080 0 + 11924 W1 3145 TIP3 H2 HT 0.417000 1.0080 0 + 11925 W1 3146 TIP3 OH2 OT -0.834000 15.9994 0 + 11926 W1 3146 TIP3 H1 HT 0.417000 1.0080 0 + 11927 W1 3146 TIP3 H2 HT 0.417000 1.0080 0 + 11928 W1 3147 TIP3 OH2 OT -0.834000 15.9994 0 + 11929 W1 3147 TIP3 H1 HT 0.417000 1.0080 0 + 11930 W1 3147 TIP3 H2 HT 0.417000 1.0080 0 + 11931 W1 3148 TIP3 OH2 OT -0.834000 15.9994 0 + 11932 W1 3148 TIP3 H1 HT 0.417000 1.0080 0 + 11933 W1 3148 TIP3 H2 HT 0.417000 1.0080 0 + 11934 W1 3149 TIP3 OH2 OT -0.834000 15.9994 0 + 11935 W1 3149 TIP3 H1 HT 0.417000 1.0080 0 + 11936 W1 3149 TIP3 H2 HT 0.417000 1.0080 0 + 11937 W1 3150 TIP3 OH2 OT -0.834000 15.9994 0 + 11938 W1 3150 TIP3 H1 HT 0.417000 1.0080 0 + 11939 W1 3150 TIP3 H2 HT 0.417000 1.0080 0 + 11940 W1 3151 TIP3 OH2 OT -0.834000 15.9994 0 + 11941 W1 3151 TIP3 H1 HT 0.417000 1.0080 0 + 11942 W1 3151 TIP3 H2 HT 0.417000 1.0080 0 + 11943 W1 3152 TIP3 OH2 OT -0.834000 15.9994 0 + 11944 W1 3152 TIP3 H1 HT 0.417000 1.0080 0 + 11945 W1 3152 TIP3 H2 HT 0.417000 1.0080 0 + 11946 W1 3153 TIP3 OH2 OT -0.834000 15.9994 0 + 11947 W1 3153 TIP3 H1 HT 0.417000 1.0080 0 + 11948 W1 3153 TIP3 H2 HT 0.417000 1.0080 0 + 11949 W1 3154 TIP3 OH2 OT -0.834000 15.9994 0 + 11950 W1 3154 TIP3 H1 HT 0.417000 1.0080 0 + 11951 W1 3154 TIP3 H2 HT 0.417000 1.0080 0 + 11952 W1 3155 TIP3 OH2 OT -0.834000 15.9994 0 + 11953 W1 3155 TIP3 H1 HT 0.417000 1.0080 0 + 11954 W1 3155 TIP3 H2 HT 0.417000 1.0080 0 + 11955 W1 3156 TIP3 OH2 OT -0.834000 15.9994 0 + 11956 W1 3156 TIP3 H1 HT 0.417000 1.0080 0 + 11957 W1 3156 TIP3 H2 HT 0.417000 1.0080 0 + 11958 W1 3157 TIP3 OH2 OT -0.834000 15.9994 0 + 11959 W1 3157 TIP3 H1 HT 0.417000 1.0080 0 + 11960 W1 3157 TIP3 H2 HT 0.417000 1.0080 0 + 11961 W1 3158 TIP3 OH2 OT -0.834000 15.9994 0 + 11962 W1 3158 TIP3 H1 HT 0.417000 1.0080 0 + 11963 W1 3158 TIP3 H2 HT 0.417000 1.0080 0 + 11964 W1 3159 TIP3 OH2 OT -0.834000 15.9994 0 + 11965 W1 3159 TIP3 H1 HT 0.417000 1.0080 0 + 11966 W1 3159 TIP3 H2 HT 0.417000 1.0080 0 + 11967 W1 3160 TIP3 OH2 OT -0.834000 15.9994 0 + 11968 W1 3160 TIP3 H1 HT 0.417000 1.0080 0 + 11969 W1 3160 TIP3 H2 HT 0.417000 1.0080 0 + 11970 W1 3161 TIP3 OH2 OT -0.834000 15.9994 0 + 11971 W1 3161 TIP3 H1 HT 0.417000 1.0080 0 + 11972 W1 3161 TIP3 H2 HT 0.417000 1.0080 0 + 11973 W1 3162 TIP3 OH2 OT -0.834000 15.9994 0 + 11974 W1 3162 TIP3 H1 HT 0.417000 1.0080 0 + 11975 W1 3162 TIP3 H2 HT 0.417000 1.0080 0 + 11976 W1 3163 TIP3 OH2 OT -0.834000 15.9994 0 + 11977 W1 3163 TIP3 H1 HT 0.417000 1.0080 0 + 11978 W1 3163 TIP3 H2 HT 0.417000 1.0080 0 + 11979 W1 3164 TIP3 OH2 OT -0.834000 15.9994 0 + 11980 W1 3164 TIP3 H1 HT 0.417000 1.0080 0 + 11981 W1 3164 TIP3 H2 HT 0.417000 1.0080 0 + 11982 W1 3165 TIP3 OH2 OT -0.834000 15.9994 0 + 11983 W1 3165 TIP3 H1 HT 0.417000 1.0080 0 + 11984 W1 3165 TIP3 H2 HT 0.417000 1.0080 0 + 11985 W1 3166 TIP3 OH2 OT -0.834000 15.9994 0 + 11986 W1 3166 TIP3 H1 HT 0.417000 1.0080 0 + 11987 W1 3166 TIP3 H2 HT 0.417000 1.0080 0 + 11988 W1 3167 TIP3 OH2 OT -0.834000 15.9994 0 + 11989 W1 3167 TIP3 H1 HT 0.417000 1.0080 0 + 11990 W1 3167 TIP3 H2 HT 0.417000 1.0080 0 + 11991 W1 3168 TIP3 OH2 OT -0.834000 15.9994 0 + 11992 W1 3168 TIP3 H1 HT 0.417000 1.0080 0 + 11993 W1 3168 TIP3 H2 HT 0.417000 1.0080 0 + 11994 W1 3169 TIP3 OH2 OT -0.834000 15.9994 0 + 11995 W1 3169 TIP3 H1 HT 0.417000 1.0080 0 + 11996 W1 3169 TIP3 H2 HT 0.417000 1.0080 0 + 11997 W1 3170 TIP3 OH2 OT -0.834000 15.9994 0 + 11998 W1 3170 TIP3 H1 HT 0.417000 1.0080 0 + 11999 W1 3170 TIP3 H2 HT 0.417000 1.0080 0 + 12000 W1 3171 TIP3 OH2 OT -0.834000 15.9994 0 + 12001 W1 3171 TIP3 H1 HT 0.417000 1.0080 0 + 12002 W1 3171 TIP3 H2 HT 0.417000 1.0080 0 + 12003 W1 3172 TIP3 OH2 OT -0.834000 15.9994 0 + 12004 W1 3172 TIP3 H1 HT 0.417000 1.0080 0 + 12005 W1 3172 TIP3 H2 HT 0.417000 1.0080 0 + 12006 W1 3173 TIP3 OH2 OT -0.834000 15.9994 0 + 12007 W1 3173 TIP3 H1 HT 0.417000 1.0080 0 + 12008 W1 3173 TIP3 H2 HT 0.417000 1.0080 0 + 12009 W1 3174 TIP3 OH2 OT -0.834000 15.9994 0 + 12010 W1 3174 TIP3 H1 HT 0.417000 1.0080 0 + 12011 W1 3174 TIP3 H2 HT 0.417000 1.0080 0 + 12012 W1 3175 TIP3 OH2 OT -0.834000 15.9994 0 + 12013 W1 3175 TIP3 H1 HT 0.417000 1.0080 0 + 12014 W1 3175 TIP3 H2 HT 0.417000 1.0080 0 + 12015 W1 3176 TIP3 OH2 OT -0.834000 15.9994 0 + 12016 W1 3176 TIP3 H1 HT 0.417000 1.0080 0 + 12017 W1 3176 TIP3 H2 HT 0.417000 1.0080 0 + 12018 W1 3177 TIP3 OH2 OT -0.834000 15.9994 0 + 12019 W1 3177 TIP3 H1 HT 0.417000 1.0080 0 + 12020 W1 3177 TIP3 H2 HT 0.417000 1.0080 0 + 12021 W1 3178 TIP3 OH2 OT -0.834000 15.9994 0 + 12022 W1 3178 TIP3 H1 HT 0.417000 1.0080 0 + 12023 W1 3178 TIP3 H2 HT 0.417000 1.0080 0 + 12024 W1 3179 TIP3 OH2 OT -0.834000 15.9994 0 + 12025 W1 3179 TIP3 H1 HT 0.417000 1.0080 0 + 12026 W1 3179 TIP3 H2 HT 0.417000 1.0080 0 + 12027 W1 3180 TIP3 OH2 OT -0.834000 15.9994 0 + 12028 W1 3180 TIP3 H1 HT 0.417000 1.0080 0 + 12029 W1 3180 TIP3 H2 HT 0.417000 1.0080 0 + 12030 W1 3181 TIP3 OH2 OT -0.834000 15.9994 0 + 12031 W1 3181 TIP3 H1 HT 0.417000 1.0080 0 + 12032 W1 3181 TIP3 H2 HT 0.417000 1.0080 0 + 12033 W1 3182 TIP3 OH2 OT -0.834000 15.9994 0 + 12034 W1 3182 TIP3 H1 HT 0.417000 1.0080 0 + 12035 W1 3182 TIP3 H2 HT 0.417000 1.0080 0 + 12036 W1 3183 TIP3 OH2 OT -0.834000 15.9994 0 + 12037 W1 3183 TIP3 H1 HT 0.417000 1.0080 0 + 12038 W1 3183 TIP3 H2 HT 0.417000 1.0080 0 + 12039 W1 3184 TIP3 OH2 OT -0.834000 15.9994 0 + 12040 W1 3184 TIP3 H1 HT 0.417000 1.0080 0 + 12041 W1 3184 TIP3 H2 HT 0.417000 1.0080 0 + 12042 W1 3185 TIP3 OH2 OT -0.834000 15.9994 0 + 12043 W1 3185 TIP3 H1 HT 0.417000 1.0080 0 + 12044 W1 3185 TIP3 H2 HT 0.417000 1.0080 0 + 12045 W1 3186 TIP3 OH2 OT -0.834000 15.9994 0 + 12046 W1 3186 TIP3 H1 HT 0.417000 1.0080 0 + 12047 W1 3186 TIP3 H2 HT 0.417000 1.0080 0 + 12048 W1 3187 TIP3 OH2 OT -0.834000 15.9994 0 + 12049 W1 3187 TIP3 H1 HT 0.417000 1.0080 0 + 12050 W1 3187 TIP3 H2 HT 0.417000 1.0080 0 + 12051 W1 3188 TIP3 OH2 OT -0.834000 15.9994 0 + 12052 W1 3188 TIP3 H1 HT 0.417000 1.0080 0 + 12053 W1 3188 TIP3 H2 HT 0.417000 1.0080 0 + 12054 W1 3189 TIP3 OH2 OT -0.834000 15.9994 0 + 12055 W1 3189 TIP3 H1 HT 0.417000 1.0080 0 + 12056 W1 3189 TIP3 H2 HT 0.417000 1.0080 0 + 12057 W1 3190 TIP3 OH2 OT -0.834000 15.9994 0 + 12058 W1 3190 TIP3 H1 HT 0.417000 1.0080 0 + 12059 W1 3190 TIP3 H2 HT 0.417000 1.0080 0 + 12060 W1 3191 TIP3 OH2 OT -0.834000 15.9994 0 + 12061 W1 3191 TIP3 H1 HT 0.417000 1.0080 0 + 12062 W1 3191 TIP3 H2 HT 0.417000 1.0080 0 + 12063 W1 3192 TIP3 OH2 OT -0.834000 15.9994 0 + 12064 W1 3192 TIP3 H1 HT 0.417000 1.0080 0 + 12065 W1 3192 TIP3 H2 HT 0.417000 1.0080 0 + 12066 W1 3193 TIP3 OH2 OT -0.834000 15.9994 0 + 12067 W1 3193 TIP3 H1 HT 0.417000 1.0080 0 + 12068 W1 3193 TIP3 H2 HT 0.417000 1.0080 0 + 12069 W1 3194 TIP3 OH2 OT -0.834000 15.9994 0 + 12070 W1 3194 TIP3 H1 HT 0.417000 1.0080 0 + 12071 W1 3194 TIP3 H2 HT 0.417000 1.0080 0 + 12072 W1 3195 TIP3 OH2 OT -0.834000 15.9994 0 + 12073 W1 3195 TIP3 H1 HT 0.417000 1.0080 0 + 12074 W1 3195 TIP3 H2 HT 0.417000 1.0080 0 + 12075 W1 3196 TIP3 OH2 OT -0.834000 15.9994 0 + 12076 W1 3196 TIP3 H1 HT 0.417000 1.0080 0 + 12077 W1 3196 TIP3 H2 HT 0.417000 1.0080 0 + 12078 W1 3197 TIP3 OH2 OT -0.834000 15.9994 0 + 12079 W1 3197 TIP3 H1 HT 0.417000 1.0080 0 + 12080 W1 3197 TIP3 H2 HT 0.417000 1.0080 0 + 12081 W1 3198 TIP3 OH2 OT -0.834000 15.9994 0 + 12082 W1 3198 TIP3 H1 HT 0.417000 1.0080 0 + 12083 W1 3198 TIP3 H2 HT 0.417000 1.0080 0 + 12084 W1 3199 TIP3 OH2 OT -0.834000 15.9994 0 + 12085 W1 3199 TIP3 H1 HT 0.417000 1.0080 0 + 12086 W1 3199 TIP3 H2 HT 0.417000 1.0080 0 + 12087 W1 3200 TIP3 OH2 OT -0.834000 15.9994 0 + 12088 W1 3200 TIP3 H1 HT 0.417000 1.0080 0 + 12089 W1 3200 TIP3 H2 HT 0.417000 1.0080 0 + 12090 W1 3201 TIP3 OH2 OT -0.834000 15.9994 0 + 12091 W1 3201 TIP3 H1 HT 0.417000 1.0080 0 + 12092 W1 3201 TIP3 H2 HT 0.417000 1.0080 0 + 12093 W1 3202 TIP3 OH2 OT -0.834000 15.9994 0 + 12094 W1 3202 TIP3 H1 HT 0.417000 1.0080 0 + 12095 W1 3202 TIP3 H2 HT 0.417000 1.0080 0 + 12096 W1 3203 TIP3 OH2 OT -0.834000 15.9994 0 + 12097 W1 3203 TIP3 H1 HT 0.417000 1.0080 0 + 12098 W1 3203 TIP3 H2 HT 0.417000 1.0080 0 + 12099 W1 3204 TIP3 OH2 OT -0.834000 15.9994 0 + 12100 W1 3204 TIP3 H1 HT 0.417000 1.0080 0 + 12101 W1 3204 TIP3 H2 HT 0.417000 1.0080 0 + 12102 W1 3205 TIP3 OH2 OT -0.834000 15.9994 0 + 12103 W1 3205 TIP3 H1 HT 0.417000 1.0080 0 + 12104 W1 3205 TIP3 H2 HT 0.417000 1.0080 0 + 12105 W1 3206 TIP3 OH2 OT -0.834000 15.9994 0 + 12106 W1 3206 TIP3 H1 HT 0.417000 1.0080 0 + 12107 W1 3206 TIP3 H2 HT 0.417000 1.0080 0 + 12108 W1 3207 TIP3 OH2 OT -0.834000 15.9994 0 + 12109 W1 3207 TIP3 H1 HT 0.417000 1.0080 0 + 12110 W1 3207 TIP3 H2 HT 0.417000 1.0080 0 + 12111 W1 3208 TIP3 OH2 OT -0.834000 15.9994 0 + 12112 W1 3208 TIP3 H1 HT 0.417000 1.0080 0 + 12113 W1 3208 TIP3 H2 HT 0.417000 1.0080 0 + 12114 W1 3209 TIP3 OH2 OT -0.834000 15.9994 0 + 12115 W1 3209 TIP3 H1 HT 0.417000 1.0080 0 + 12116 W1 3209 TIP3 H2 HT 0.417000 1.0080 0 + 12117 W1 3210 TIP3 OH2 OT -0.834000 15.9994 0 + 12118 W1 3210 TIP3 H1 HT 0.417000 1.0080 0 + 12119 W1 3210 TIP3 H2 HT 0.417000 1.0080 0 + 12120 W1 3211 TIP3 OH2 OT -0.834000 15.9994 0 + 12121 W1 3211 TIP3 H1 HT 0.417000 1.0080 0 + 12122 W1 3211 TIP3 H2 HT 0.417000 1.0080 0 + 12123 W1 3212 TIP3 OH2 OT -0.834000 15.9994 0 + 12124 W1 3212 TIP3 H1 HT 0.417000 1.0080 0 + 12125 W1 3212 TIP3 H2 HT 0.417000 1.0080 0 + 12126 W1 3213 TIP3 OH2 OT -0.834000 15.9994 0 + 12127 W1 3213 TIP3 H1 HT 0.417000 1.0080 0 + 12128 W1 3213 TIP3 H2 HT 0.417000 1.0080 0 + 12129 W1 3214 TIP3 OH2 OT -0.834000 15.9994 0 + 12130 W1 3214 TIP3 H1 HT 0.417000 1.0080 0 + 12131 W1 3214 TIP3 H2 HT 0.417000 1.0080 0 + 12132 W1 3215 TIP3 OH2 OT -0.834000 15.9994 0 + 12133 W1 3215 TIP3 H1 HT 0.417000 1.0080 0 + 12134 W1 3215 TIP3 H2 HT 0.417000 1.0080 0 + 12135 W1 3216 TIP3 OH2 OT -0.834000 15.9994 0 + 12136 W1 3216 TIP3 H1 HT 0.417000 1.0080 0 + 12137 W1 3216 TIP3 H2 HT 0.417000 1.0080 0 + 12138 W1 3217 TIP3 OH2 OT -0.834000 15.9994 0 + 12139 W1 3217 TIP3 H1 HT 0.417000 1.0080 0 + 12140 W1 3217 TIP3 H2 HT 0.417000 1.0080 0 + 12141 W1 3218 TIP3 OH2 OT -0.834000 15.9994 0 + 12142 W1 3218 TIP3 H1 HT 0.417000 1.0080 0 + 12143 W1 3218 TIP3 H2 HT 0.417000 1.0080 0 + 12144 W1 3219 TIP3 OH2 OT -0.834000 15.9994 0 + 12145 W1 3219 TIP3 H1 HT 0.417000 1.0080 0 + 12146 W1 3219 TIP3 H2 HT 0.417000 1.0080 0 + 12147 W1 3220 TIP3 OH2 OT -0.834000 15.9994 0 + 12148 W1 3220 TIP3 H1 HT 0.417000 1.0080 0 + 12149 W1 3220 TIP3 H2 HT 0.417000 1.0080 0 + 12150 W1 3221 TIP3 OH2 OT -0.834000 15.9994 0 + 12151 W1 3221 TIP3 H1 HT 0.417000 1.0080 0 + 12152 W1 3221 TIP3 H2 HT 0.417000 1.0080 0 + 12153 W1 3222 TIP3 OH2 OT -0.834000 15.9994 0 + 12154 W1 3222 TIP3 H1 HT 0.417000 1.0080 0 + 12155 W1 3222 TIP3 H2 HT 0.417000 1.0080 0 + 12156 W1 3223 TIP3 OH2 OT -0.834000 15.9994 0 + 12157 W1 3223 TIP3 H1 HT 0.417000 1.0080 0 + 12158 W1 3223 TIP3 H2 HT 0.417000 1.0080 0 + 12159 W1 3224 TIP3 OH2 OT -0.834000 15.9994 0 + 12160 W1 3224 TIP3 H1 HT 0.417000 1.0080 0 + 12161 W1 3224 TIP3 H2 HT 0.417000 1.0080 0 + 12162 W1 3225 TIP3 OH2 OT -0.834000 15.9994 0 + 12163 W1 3225 TIP3 H1 HT 0.417000 1.0080 0 + 12164 W1 3225 TIP3 H2 HT 0.417000 1.0080 0 + 12165 W1 3226 TIP3 OH2 OT -0.834000 15.9994 0 + 12166 W1 3226 TIP3 H1 HT 0.417000 1.0080 0 + 12167 W1 3226 TIP3 H2 HT 0.417000 1.0080 0 + 12168 W1 3227 TIP3 OH2 OT -0.834000 15.9994 0 + 12169 W1 3227 TIP3 H1 HT 0.417000 1.0080 0 + 12170 W1 3227 TIP3 H2 HT 0.417000 1.0080 0 + 12171 W1 3228 TIP3 OH2 OT -0.834000 15.9994 0 + 12172 W1 3228 TIP3 H1 HT 0.417000 1.0080 0 + 12173 W1 3228 TIP3 H2 HT 0.417000 1.0080 0 + 12174 W1 3229 TIP3 OH2 OT -0.834000 15.9994 0 + 12175 W1 3229 TIP3 H1 HT 0.417000 1.0080 0 + 12176 W1 3229 TIP3 H2 HT 0.417000 1.0080 0 + 12177 W1 3230 TIP3 OH2 OT -0.834000 15.9994 0 + 12178 W1 3230 TIP3 H1 HT 0.417000 1.0080 0 + 12179 W1 3230 TIP3 H2 HT 0.417000 1.0080 0 + 12180 W1 3231 TIP3 OH2 OT -0.834000 15.9994 0 + 12181 W1 3231 TIP3 H1 HT 0.417000 1.0080 0 + 12182 W1 3231 TIP3 H2 HT 0.417000 1.0080 0 + 12183 W1 3232 TIP3 OH2 OT -0.834000 15.9994 0 + 12184 W1 3232 TIP3 H1 HT 0.417000 1.0080 0 + 12185 W1 3232 TIP3 H2 HT 0.417000 1.0080 0 + 12186 W1 3233 TIP3 OH2 OT -0.834000 15.9994 0 + 12187 W1 3233 TIP3 H1 HT 0.417000 1.0080 0 + 12188 W1 3233 TIP3 H2 HT 0.417000 1.0080 0 + 12189 W1 3234 TIP3 OH2 OT -0.834000 15.9994 0 + 12190 W1 3234 TIP3 H1 HT 0.417000 1.0080 0 + 12191 W1 3234 TIP3 H2 HT 0.417000 1.0080 0 + 12192 W1 3235 TIP3 OH2 OT -0.834000 15.9994 0 + 12193 W1 3235 TIP3 H1 HT 0.417000 1.0080 0 + 12194 W1 3235 TIP3 H2 HT 0.417000 1.0080 0 + 12195 W1 3236 TIP3 OH2 OT -0.834000 15.9994 0 + 12196 W1 3236 TIP3 H1 HT 0.417000 1.0080 0 + 12197 W1 3236 TIP3 H2 HT 0.417000 1.0080 0 + 12198 W1 3237 TIP3 OH2 OT -0.834000 15.9994 0 + 12199 W1 3237 TIP3 H1 HT 0.417000 1.0080 0 + 12200 W1 3237 TIP3 H2 HT 0.417000 1.0080 0 + 12201 W1 3238 TIP3 OH2 OT -0.834000 15.9994 0 + 12202 W1 3238 TIP3 H1 HT 0.417000 1.0080 0 + 12203 W1 3238 TIP3 H2 HT 0.417000 1.0080 0 + 12204 W1 3239 TIP3 OH2 OT -0.834000 15.9994 0 + 12205 W1 3239 TIP3 H1 HT 0.417000 1.0080 0 + 12206 W1 3239 TIP3 H2 HT 0.417000 1.0080 0 + 12207 W1 3240 TIP3 OH2 OT -0.834000 15.9994 0 + 12208 W1 3240 TIP3 H1 HT 0.417000 1.0080 0 + 12209 W1 3240 TIP3 H2 HT 0.417000 1.0080 0 + 12210 W1 3241 TIP3 OH2 OT -0.834000 15.9994 0 + 12211 W1 3241 TIP3 H1 HT 0.417000 1.0080 0 + 12212 W1 3241 TIP3 H2 HT 0.417000 1.0080 0 + 12213 W1 3242 TIP3 OH2 OT -0.834000 15.9994 0 + 12214 W1 3242 TIP3 H1 HT 0.417000 1.0080 0 + 12215 W1 3242 TIP3 H2 HT 0.417000 1.0080 0 + 12216 W1 3243 TIP3 OH2 OT -0.834000 15.9994 0 + 12217 W1 3243 TIP3 H1 HT 0.417000 1.0080 0 + 12218 W1 3243 TIP3 H2 HT 0.417000 1.0080 0 + 12219 W1 3244 TIP3 OH2 OT -0.834000 15.9994 0 + 12220 W1 3244 TIP3 H1 HT 0.417000 1.0080 0 + 12221 W1 3244 TIP3 H2 HT 0.417000 1.0080 0 + 12222 W1 3245 TIP3 OH2 OT -0.834000 15.9994 0 + 12223 W1 3245 TIP3 H1 HT 0.417000 1.0080 0 + 12224 W1 3245 TIP3 H2 HT 0.417000 1.0080 0 + 12225 W1 3246 TIP3 OH2 OT -0.834000 15.9994 0 + 12226 W1 3246 TIP3 H1 HT 0.417000 1.0080 0 + 12227 W1 3246 TIP3 H2 HT 0.417000 1.0080 0 + 12228 W1 3247 TIP3 OH2 OT -0.834000 15.9994 0 + 12229 W1 3247 TIP3 H1 HT 0.417000 1.0080 0 + 12230 W1 3247 TIP3 H2 HT 0.417000 1.0080 0 + 12231 W1 3248 TIP3 OH2 OT -0.834000 15.9994 0 + 12232 W1 3248 TIP3 H1 HT 0.417000 1.0080 0 + 12233 W1 3248 TIP3 H2 HT 0.417000 1.0080 0 + 12234 W1 3249 TIP3 OH2 OT -0.834000 15.9994 0 + 12235 W1 3249 TIP3 H1 HT 0.417000 1.0080 0 + 12236 W1 3249 TIP3 H2 HT 0.417000 1.0080 0 + 12237 W1 3250 TIP3 OH2 OT -0.834000 15.9994 0 + 12238 W1 3250 TIP3 H1 HT 0.417000 1.0080 0 + 12239 W1 3250 TIP3 H2 HT 0.417000 1.0080 0 + 12240 W1 3251 TIP3 OH2 OT -0.834000 15.9994 0 + 12241 W1 3251 TIP3 H1 HT 0.417000 1.0080 0 + 12242 W1 3251 TIP3 H2 HT 0.417000 1.0080 0 + 12243 W1 3252 TIP3 OH2 OT -0.834000 15.9994 0 + 12244 W1 3252 TIP3 H1 HT 0.417000 1.0080 0 + 12245 W1 3252 TIP3 H2 HT 0.417000 1.0080 0 + 12246 W1 3253 TIP3 OH2 OT -0.834000 15.9994 0 + 12247 W1 3253 TIP3 H1 HT 0.417000 1.0080 0 + 12248 W1 3253 TIP3 H2 HT 0.417000 1.0080 0 + 12249 W1 3254 TIP3 OH2 OT -0.834000 15.9994 0 + 12250 W1 3254 TIP3 H1 HT 0.417000 1.0080 0 + 12251 W1 3254 TIP3 H2 HT 0.417000 1.0080 0 + 12252 W1 3255 TIP3 OH2 OT -0.834000 15.9994 0 + 12253 W1 3255 TIP3 H1 HT 0.417000 1.0080 0 + 12254 W1 3255 TIP3 H2 HT 0.417000 1.0080 0 + 12255 W1 3256 TIP3 OH2 OT -0.834000 15.9994 0 + 12256 W1 3256 TIP3 H1 HT 0.417000 1.0080 0 + 12257 W1 3256 TIP3 H2 HT 0.417000 1.0080 0 + 12258 W1 3257 TIP3 OH2 OT -0.834000 15.9994 0 + 12259 W1 3257 TIP3 H1 HT 0.417000 1.0080 0 + 12260 W1 3257 TIP3 H2 HT 0.417000 1.0080 0 + 12261 W1 3258 TIP3 OH2 OT -0.834000 15.9994 0 + 12262 W1 3258 TIP3 H1 HT 0.417000 1.0080 0 + 12263 W1 3258 TIP3 H2 HT 0.417000 1.0080 0 + 12264 W1 3259 TIP3 OH2 OT -0.834000 15.9994 0 + 12265 W1 3259 TIP3 H1 HT 0.417000 1.0080 0 + 12266 W1 3259 TIP3 H2 HT 0.417000 1.0080 0 + 12267 W1 3260 TIP3 OH2 OT -0.834000 15.9994 0 + 12268 W1 3260 TIP3 H1 HT 0.417000 1.0080 0 + 12269 W1 3260 TIP3 H2 HT 0.417000 1.0080 0 + 12270 W1 3261 TIP3 OH2 OT -0.834000 15.9994 0 + 12271 W1 3261 TIP3 H1 HT 0.417000 1.0080 0 + 12272 W1 3261 TIP3 H2 HT 0.417000 1.0080 0 + 12273 W1 3262 TIP3 OH2 OT -0.834000 15.9994 0 + 12274 W1 3262 TIP3 H1 HT 0.417000 1.0080 0 + 12275 W1 3262 TIP3 H2 HT 0.417000 1.0080 0 + 12276 W1 3263 TIP3 OH2 OT -0.834000 15.9994 0 + 12277 W1 3263 TIP3 H1 HT 0.417000 1.0080 0 + 12278 W1 3263 TIP3 H2 HT 0.417000 1.0080 0 + 12279 W1 3264 TIP3 OH2 OT -0.834000 15.9994 0 + 12280 W1 3264 TIP3 H1 HT 0.417000 1.0080 0 + 12281 W1 3264 TIP3 H2 HT 0.417000 1.0080 0 + 12282 W1 3265 TIP3 OH2 OT -0.834000 15.9994 0 + 12283 W1 3265 TIP3 H1 HT 0.417000 1.0080 0 + 12284 W1 3265 TIP3 H2 HT 0.417000 1.0080 0 + 12285 W1 3266 TIP3 OH2 OT -0.834000 15.9994 0 + 12286 W1 3266 TIP3 H1 HT 0.417000 1.0080 0 + 12287 W1 3266 TIP3 H2 HT 0.417000 1.0080 0 + 12288 W1 3267 TIP3 OH2 OT -0.834000 15.9994 0 + 12289 W1 3267 TIP3 H1 HT 0.417000 1.0080 0 + 12290 W1 3267 TIP3 H2 HT 0.417000 1.0080 0 + 12291 W1 3268 TIP3 OH2 OT -0.834000 15.9994 0 + 12292 W1 3268 TIP3 H1 HT 0.417000 1.0080 0 + 12293 W1 3268 TIP3 H2 HT 0.417000 1.0080 0 + 12294 W1 3269 TIP3 OH2 OT -0.834000 15.9994 0 + 12295 W1 3269 TIP3 H1 HT 0.417000 1.0080 0 + 12296 W1 3269 TIP3 H2 HT 0.417000 1.0080 0 + 12297 W1 3270 TIP3 OH2 OT -0.834000 15.9994 0 + 12298 W1 3270 TIP3 H1 HT 0.417000 1.0080 0 + 12299 W1 3270 TIP3 H2 HT 0.417000 1.0080 0 + 12300 W1 3271 TIP3 OH2 OT -0.834000 15.9994 0 + 12301 W1 3271 TIP3 H1 HT 0.417000 1.0080 0 + 12302 W1 3271 TIP3 H2 HT 0.417000 1.0080 0 + 12303 W1 3272 TIP3 OH2 OT -0.834000 15.9994 0 + 12304 W1 3272 TIP3 H1 HT 0.417000 1.0080 0 + 12305 W1 3272 TIP3 H2 HT 0.417000 1.0080 0 + 12306 W1 3273 TIP3 OH2 OT -0.834000 15.9994 0 + 12307 W1 3273 TIP3 H1 HT 0.417000 1.0080 0 + 12308 W1 3273 TIP3 H2 HT 0.417000 1.0080 0 + 12309 W1 3274 TIP3 OH2 OT -0.834000 15.9994 0 + 12310 W1 3274 TIP3 H1 HT 0.417000 1.0080 0 + 12311 W1 3274 TIP3 H2 HT 0.417000 1.0080 0 + 12312 W1 3275 TIP3 OH2 OT -0.834000 15.9994 0 + 12313 W1 3275 TIP3 H1 HT 0.417000 1.0080 0 + 12314 W1 3275 TIP3 H2 HT 0.417000 1.0080 0 + 12315 W1 3276 TIP3 OH2 OT -0.834000 15.9994 0 + 12316 W1 3276 TIP3 H1 HT 0.417000 1.0080 0 + 12317 W1 3276 TIP3 H2 HT 0.417000 1.0080 0 + 12318 W1 3277 TIP3 OH2 OT -0.834000 15.9994 0 + 12319 W1 3277 TIP3 H1 HT 0.417000 1.0080 0 + 12320 W1 3277 TIP3 H2 HT 0.417000 1.0080 0 + 12321 W1 3278 TIP3 OH2 OT -0.834000 15.9994 0 + 12322 W1 3278 TIP3 H1 HT 0.417000 1.0080 0 + 12323 W1 3278 TIP3 H2 HT 0.417000 1.0080 0 + 12324 W1 3279 TIP3 OH2 OT -0.834000 15.9994 0 + 12325 W1 3279 TIP3 H1 HT 0.417000 1.0080 0 + 12326 W1 3279 TIP3 H2 HT 0.417000 1.0080 0 + 12327 W1 3280 TIP3 OH2 OT -0.834000 15.9994 0 + 12328 W1 3280 TIP3 H1 HT 0.417000 1.0080 0 + 12329 W1 3280 TIP3 H2 HT 0.417000 1.0080 0 + 12330 W1 3281 TIP3 OH2 OT -0.834000 15.9994 0 + 12331 W1 3281 TIP3 H1 HT 0.417000 1.0080 0 + 12332 W1 3281 TIP3 H2 HT 0.417000 1.0080 0 + 12333 W1 3282 TIP3 OH2 OT -0.834000 15.9994 0 + 12334 W1 3282 TIP3 H1 HT 0.417000 1.0080 0 + 12335 W1 3282 TIP3 H2 HT 0.417000 1.0080 0 + 12336 W1 3283 TIP3 OH2 OT -0.834000 15.9994 0 + 12337 W1 3283 TIP3 H1 HT 0.417000 1.0080 0 + 12338 W1 3283 TIP3 H2 HT 0.417000 1.0080 0 + 12339 W1 3284 TIP3 OH2 OT -0.834000 15.9994 0 + 12340 W1 3284 TIP3 H1 HT 0.417000 1.0080 0 + 12341 W1 3284 TIP3 H2 HT 0.417000 1.0080 0 + 12342 W1 3285 TIP3 OH2 OT -0.834000 15.9994 0 + 12343 W1 3285 TIP3 H1 HT 0.417000 1.0080 0 + 12344 W1 3285 TIP3 H2 HT 0.417000 1.0080 0 + 12345 W1 3286 TIP3 OH2 OT -0.834000 15.9994 0 + 12346 W1 3286 TIP3 H1 HT 0.417000 1.0080 0 + 12347 W1 3286 TIP3 H2 HT 0.417000 1.0080 0 + 12348 W1 3287 TIP3 OH2 OT -0.834000 15.9994 0 + 12349 W1 3287 TIP3 H1 HT 0.417000 1.0080 0 + 12350 W1 3287 TIP3 H2 HT 0.417000 1.0080 0 + 12351 W1 3288 TIP3 OH2 OT -0.834000 15.9994 0 + 12352 W1 3288 TIP3 H1 HT 0.417000 1.0080 0 + 12353 W1 3288 TIP3 H2 HT 0.417000 1.0080 0 + 12354 W1 3289 TIP3 OH2 OT -0.834000 15.9994 0 + 12355 W1 3289 TIP3 H1 HT 0.417000 1.0080 0 + 12356 W1 3289 TIP3 H2 HT 0.417000 1.0080 0 + 12357 W1 3290 TIP3 OH2 OT -0.834000 15.9994 0 + 12358 W1 3290 TIP3 H1 HT 0.417000 1.0080 0 + 12359 W1 3290 TIP3 H2 HT 0.417000 1.0080 0 + 12360 W1 3291 TIP3 OH2 OT -0.834000 15.9994 0 + 12361 W1 3291 TIP3 H1 HT 0.417000 1.0080 0 + 12362 W1 3291 TIP3 H2 HT 0.417000 1.0080 0 + 12363 W1 3292 TIP3 OH2 OT -0.834000 15.9994 0 + 12364 W1 3292 TIP3 H1 HT 0.417000 1.0080 0 + 12365 W1 3292 TIP3 H2 HT 0.417000 1.0080 0 + 12366 W1 3293 TIP3 OH2 OT -0.834000 15.9994 0 + 12367 W1 3293 TIP3 H1 HT 0.417000 1.0080 0 + 12368 W1 3293 TIP3 H2 HT 0.417000 1.0080 0 + 12369 W1 3294 TIP3 OH2 OT -0.834000 15.9994 0 + 12370 W1 3294 TIP3 H1 HT 0.417000 1.0080 0 + 12371 W1 3294 TIP3 H2 HT 0.417000 1.0080 0 + 12372 W1 3295 TIP3 OH2 OT -0.834000 15.9994 0 + 12373 W1 3295 TIP3 H1 HT 0.417000 1.0080 0 + 12374 W1 3295 TIP3 H2 HT 0.417000 1.0080 0 + 12375 W1 3296 TIP3 OH2 OT -0.834000 15.9994 0 + 12376 W1 3296 TIP3 H1 HT 0.417000 1.0080 0 + 12377 W1 3296 TIP3 H2 HT 0.417000 1.0080 0 + 12378 W1 3297 TIP3 OH2 OT -0.834000 15.9994 0 + 12379 W1 3297 TIP3 H1 HT 0.417000 1.0080 0 + 12380 W1 3297 TIP3 H2 HT 0.417000 1.0080 0 + 12381 W1 3298 TIP3 OH2 OT -0.834000 15.9994 0 + 12382 W1 3298 TIP3 H1 HT 0.417000 1.0080 0 + 12383 W1 3298 TIP3 H2 HT 0.417000 1.0080 0 + 12384 W1 3299 TIP3 OH2 OT -0.834000 15.9994 0 + 12385 W1 3299 TIP3 H1 HT 0.417000 1.0080 0 + 12386 W1 3299 TIP3 H2 HT 0.417000 1.0080 0 + 12387 W1 3300 TIP3 OH2 OT -0.834000 15.9994 0 + 12388 W1 3300 TIP3 H1 HT 0.417000 1.0080 0 + 12389 W1 3300 TIP3 H2 HT 0.417000 1.0080 0 + 12390 W1 3301 TIP3 OH2 OT -0.834000 15.9994 0 + 12391 W1 3301 TIP3 H1 HT 0.417000 1.0080 0 + 12392 W1 3301 TIP3 H2 HT 0.417000 1.0080 0 + 12393 W1 3302 TIP3 OH2 OT -0.834000 15.9994 0 + 12394 W1 3302 TIP3 H1 HT 0.417000 1.0080 0 + 12395 W1 3302 TIP3 H2 HT 0.417000 1.0080 0 + 12396 W1 3303 TIP3 OH2 OT -0.834000 15.9994 0 + 12397 W1 3303 TIP3 H1 HT 0.417000 1.0080 0 + 12398 W1 3303 TIP3 H2 HT 0.417000 1.0080 0 + 12399 W1 3304 TIP3 OH2 OT -0.834000 15.9994 0 + 12400 W1 3304 TIP3 H1 HT 0.417000 1.0080 0 + 12401 W1 3304 TIP3 H2 HT 0.417000 1.0080 0 + 12402 W1 3305 TIP3 OH2 OT -0.834000 15.9994 0 + 12403 W1 3305 TIP3 H1 HT 0.417000 1.0080 0 + 12404 W1 3305 TIP3 H2 HT 0.417000 1.0080 0 + 12405 W1 3306 TIP3 OH2 OT -0.834000 15.9994 0 + 12406 W1 3306 TIP3 H1 HT 0.417000 1.0080 0 + 12407 W1 3306 TIP3 H2 HT 0.417000 1.0080 0 + 12408 W1 3307 TIP3 OH2 OT -0.834000 15.9994 0 + 12409 W1 3307 TIP3 H1 HT 0.417000 1.0080 0 + 12410 W1 3307 TIP3 H2 HT 0.417000 1.0080 0 + 12411 W1 3308 TIP3 OH2 OT -0.834000 15.9994 0 + 12412 W1 3308 TIP3 H1 HT 0.417000 1.0080 0 + 12413 W1 3308 TIP3 H2 HT 0.417000 1.0080 0 + 12414 W1 3309 TIP3 OH2 OT -0.834000 15.9994 0 + 12415 W1 3309 TIP3 H1 HT 0.417000 1.0080 0 + 12416 W1 3309 TIP3 H2 HT 0.417000 1.0080 0 + 12417 W1 3310 TIP3 OH2 OT -0.834000 15.9994 0 + 12418 W1 3310 TIP3 H1 HT 0.417000 1.0080 0 + 12419 W1 3310 TIP3 H2 HT 0.417000 1.0080 0 + 12420 W1 3311 TIP3 OH2 OT -0.834000 15.9994 0 + 12421 W1 3311 TIP3 H1 HT 0.417000 1.0080 0 + 12422 W1 3311 TIP3 H2 HT 0.417000 1.0080 0 + 12423 W1 3312 TIP3 OH2 OT -0.834000 15.9994 0 + 12424 W1 3312 TIP3 H1 HT 0.417000 1.0080 0 + 12425 W1 3312 TIP3 H2 HT 0.417000 1.0080 0 + 12426 W1 3313 TIP3 OH2 OT -0.834000 15.9994 0 + 12427 W1 3313 TIP3 H1 HT 0.417000 1.0080 0 + 12428 W1 3313 TIP3 H2 HT 0.417000 1.0080 0 + 12429 W1 3314 TIP3 OH2 OT -0.834000 15.9994 0 + 12430 W1 3314 TIP3 H1 HT 0.417000 1.0080 0 + 12431 W1 3314 TIP3 H2 HT 0.417000 1.0080 0 + 12432 W1 3315 TIP3 OH2 OT -0.834000 15.9994 0 + 12433 W1 3315 TIP3 H1 HT 0.417000 1.0080 0 + 12434 W1 3315 TIP3 H2 HT 0.417000 1.0080 0 + 12435 W1 3316 TIP3 OH2 OT -0.834000 15.9994 0 + 12436 W1 3316 TIP3 H1 HT 0.417000 1.0080 0 + 12437 W1 3316 TIP3 H2 HT 0.417000 1.0080 0 + 12438 W1 3317 TIP3 OH2 OT -0.834000 15.9994 0 + 12439 W1 3317 TIP3 H1 HT 0.417000 1.0080 0 + 12440 W1 3317 TIP3 H2 HT 0.417000 1.0080 0 + 12441 W1 3318 TIP3 OH2 OT -0.834000 15.9994 0 + 12442 W1 3318 TIP3 H1 HT 0.417000 1.0080 0 + 12443 W1 3318 TIP3 H2 HT 0.417000 1.0080 0 + 12444 W1 3319 TIP3 OH2 OT -0.834000 15.9994 0 + 12445 W1 3319 TIP3 H1 HT 0.417000 1.0080 0 + 12446 W1 3319 TIP3 H2 HT 0.417000 1.0080 0 + 12447 W1 3320 TIP3 OH2 OT -0.834000 15.9994 0 + 12448 W1 3320 TIP3 H1 HT 0.417000 1.0080 0 + 12449 W1 3320 TIP3 H2 HT 0.417000 1.0080 0 + 12450 W1 3321 TIP3 OH2 OT -0.834000 15.9994 0 + 12451 W1 3321 TIP3 H1 HT 0.417000 1.0080 0 + 12452 W1 3321 TIP3 H2 HT 0.417000 1.0080 0 + 12453 W1 3322 TIP3 OH2 OT -0.834000 15.9994 0 + 12454 W1 3322 TIP3 H1 HT 0.417000 1.0080 0 + 12455 W1 3322 TIP3 H2 HT 0.417000 1.0080 0 + 12456 W1 3323 TIP3 OH2 OT -0.834000 15.9994 0 + 12457 W1 3323 TIP3 H1 HT 0.417000 1.0080 0 + 12458 W1 3323 TIP3 H2 HT 0.417000 1.0080 0 + 12459 W1 3324 TIP3 OH2 OT -0.834000 15.9994 0 + 12460 W1 3324 TIP3 H1 HT 0.417000 1.0080 0 + 12461 W1 3324 TIP3 H2 HT 0.417000 1.0080 0 + 12462 W1 3325 TIP3 OH2 OT -0.834000 15.9994 0 + 12463 W1 3325 TIP3 H1 HT 0.417000 1.0080 0 + 12464 W1 3325 TIP3 H2 HT 0.417000 1.0080 0 + 12465 W1 3326 TIP3 OH2 OT -0.834000 15.9994 0 + 12466 W1 3326 TIP3 H1 HT 0.417000 1.0080 0 + 12467 W1 3326 TIP3 H2 HT 0.417000 1.0080 0 + 12468 W1 3327 TIP3 OH2 OT -0.834000 15.9994 0 + 12469 W1 3327 TIP3 H1 HT 0.417000 1.0080 0 + 12470 W1 3327 TIP3 H2 HT 0.417000 1.0080 0 + 12471 W1 3328 TIP3 OH2 OT -0.834000 15.9994 0 + 12472 W1 3328 TIP3 H1 HT 0.417000 1.0080 0 + 12473 W1 3328 TIP3 H2 HT 0.417000 1.0080 0 + 12474 W1 3329 TIP3 OH2 OT -0.834000 15.9994 0 + 12475 W1 3329 TIP3 H1 HT 0.417000 1.0080 0 + 12476 W1 3329 TIP3 H2 HT 0.417000 1.0080 0 + 12477 W1 3330 TIP3 OH2 OT -0.834000 15.9994 0 + 12478 W1 3330 TIP3 H1 HT 0.417000 1.0080 0 + 12479 W1 3330 TIP3 H2 HT 0.417000 1.0080 0 + 12480 W1 3331 TIP3 OH2 OT -0.834000 15.9994 0 + 12481 W1 3331 TIP3 H1 HT 0.417000 1.0080 0 + 12482 W1 3331 TIP3 H2 HT 0.417000 1.0080 0 + 12483 W1 3332 TIP3 OH2 OT -0.834000 15.9994 0 + 12484 W1 3332 TIP3 H1 HT 0.417000 1.0080 0 + 12485 W1 3332 TIP3 H2 HT 0.417000 1.0080 0 + 12486 W1 3333 TIP3 OH2 OT -0.834000 15.9994 0 + 12487 W1 3333 TIP3 H1 HT 0.417000 1.0080 0 + 12488 W1 3333 TIP3 H2 HT 0.417000 1.0080 0 + 12489 W1 3334 TIP3 OH2 OT -0.834000 15.9994 0 + 12490 W1 3334 TIP3 H1 HT 0.417000 1.0080 0 + 12491 W1 3334 TIP3 H2 HT 0.417000 1.0080 0 + 12492 W1 3335 TIP3 OH2 OT -0.834000 15.9994 0 + 12493 W1 3335 TIP3 H1 HT 0.417000 1.0080 0 + 12494 W1 3335 TIP3 H2 HT 0.417000 1.0080 0 + 12495 W1 3336 TIP3 OH2 OT -0.834000 15.9994 0 + 12496 W1 3336 TIP3 H1 HT 0.417000 1.0080 0 + 12497 W1 3336 TIP3 H2 HT 0.417000 1.0080 0 + 12498 W1 3337 TIP3 OH2 OT -0.834000 15.9994 0 + 12499 W1 3337 TIP3 H1 HT 0.417000 1.0080 0 + 12500 W1 3337 TIP3 H2 HT 0.417000 1.0080 0 + 12501 W1 3338 TIP3 OH2 OT -0.834000 15.9994 0 + 12502 W1 3338 TIP3 H1 HT 0.417000 1.0080 0 + 12503 W1 3338 TIP3 H2 HT 0.417000 1.0080 0 + 12504 W1 3339 TIP3 OH2 OT -0.834000 15.9994 0 + 12505 W1 3339 TIP3 H1 HT 0.417000 1.0080 0 + 12506 W1 3339 TIP3 H2 HT 0.417000 1.0080 0 + 12507 W1 3340 TIP3 OH2 OT -0.834000 15.9994 0 + 12508 W1 3340 TIP3 H1 HT 0.417000 1.0080 0 + 12509 W1 3340 TIP3 H2 HT 0.417000 1.0080 0 + 12510 W1 3341 TIP3 OH2 OT -0.834000 15.9994 0 + 12511 W1 3341 TIP3 H1 HT 0.417000 1.0080 0 + 12512 W1 3341 TIP3 H2 HT 0.417000 1.0080 0 + 12513 W1 3342 TIP3 OH2 OT -0.834000 15.9994 0 + 12514 W1 3342 TIP3 H1 HT 0.417000 1.0080 0 + 12515 W1 3342 TIP3 H2 HT 0.417000 1.0080 0 + 12516 W1 3343 TIP3 OH2 OT -0.834000 15.9994 0 + 12517 W1 3343 TIP3 H1 HT 0.417000 1.0080 0 + 12518 W1 3343 TIP3 H2 HT 0.417000 1.0080 0 + 12519 W1 3344 TIP3 OH2 OT -0.834000 15.9994 0 + 12520 W1 3344 TIP3 H1 HT 0.417000 1.0080 0 + 12521 W1 3344 TIP3 H2 HT 0.417000 1.0080 0 + 12522 W1 3345 TIP3 OH2 OT -0.834000 15.9994 0 + 12523 W1 3345 TIP3 H1 HT 0.417000 1.0080 0 + 12524 W1 3345 TIP3 H2 HT 0.417000 1.0080 0 + 12525 W1 3346 TIP3 OH2 OT -0.834000 15.9994 0 + 12526 W1 3346 TIP3 H1 HT 0.417000 1.0080 0 + 12527 W1 3346 TIP3 H2 HT 0.417000 1.0080 0 + 12528 W1 3347 TIP3 OH2 OT -0.834000 15.9994 0 + 12529 W1 3347 TIP3 H1 HT 0.417000 1.0080 0 + 12530 W1 3347 TIP3 H2 HT 0.417000 1.0080 0 + 12531 W1 3348 TIP3 OH2 OT -0.834000 15.9994 0 + 12532 W1 3348 TIP3 H1 HT 0.417000 1.0080 0 + 12533 W1 3348 TIP3 H2 HT 0.417000 1.0080 0 + 12534 W1 3349 TIP3 OH2 OT -0.834000 15.9994 0 + 12535 W1 3349 TIP3 H1 HT 0.417000 1.0080 0 + 12536 W1 3349 TIP3 H2 HT 0.417000 1.0080 0 + 12537 W1 3350 TIP3 OH2 OT -0.834000 15.9994 0 + 12538 W1 3350 TIP3 H1 HT 0.417000 1.0080 0 + 12539 W1 3350 TIP3 H2 HT 0.417000 1.0080 0 + 12540 W1 3351 TIP3 OH2 OT -0.834000 15.9994 0 + 12541 W1 3351 TIP3 H1 HT 0.417000 1.0080 0 + 12542 W1 3351 TIP3 H2 HT 0.417000 1.0080 0 + 12543 W1 3352 TIP3 OH2 OT -0.834000 15.9994 0 + 12544 W1 3352 TIP3 H1 HT 0.417000 1.0080 0 + 12545 W1 3352 TIP3 H2 HT 0.417000 1.0080 0 + 12546 W1 3353 TIP3 OH2 OT -0.834000 15.9994 0 + 12547 W1 3353 TIP3 H1 HT 0.417000 1.0080 0 + 12548 W1 3353 TIP3 H2 HT 0.417000 1.0080 0 + 12549 W1 3354 TIP3 OH2 OT -0.834000 15.9994 0 + 12550 W1 3354 TIP3 H1 HT 0.417000 1.0080 0 + 12551 W1 3354 TIP3 H2 HT 0.417000 1.0080 0 + 12552 W1 3355 TIP3 OH2 OT -0.834000 15.9994 0 + 12553 W1 3355 TIP3 H1 HT 0.417000 1.0080 0 + 12554 W1 3355 TIP3 H2 HT 0.417000 1.0080 0 + 12555 W1 3356 TIP3 OH2 OT -0.834000 15.9994 0 + 12556 W1 3356 TIP3 H1 HT 0.417000 1.0080 0 + 12557 W1 3356 TIP3 H2 HT 0.417000 1.0080 0 + 12558 W1 3357 TIP3 OH2 OT -0.834000 15.9994 0 + 12559 W1 3357 TIP3 H1 HT 0.417000 1.0080 0 + 12560 W1 3357 TIP3 H2 HT 0.417000 1.0080 0 + 12561 W1 3358 TIP3 OH2 OT -0.834000 15.9994 0 + 12562 W1 3358 TIP3 H1 HT 0.417000 1.0080 0 + 12563 W1 3358 TIP3 H2 HT 0.417000 1.0080 0 + 12564 W1 3359 TIP3 OH2 OT -0.834000 15.9994 0 + 12565 W1 3359 TIP3 H1 HT 0.417000 1.0080 0 + 12566 W1 3359 TIP3 H2 HT 0.417000 1.0080 0 + 12567 W1 3360 TIP3 OH2 OT -0.834000 15.9994 0 + 12568 W1 3360 TIP3 H1 HT 0.417000 1.0080 0 + 12569 W1 3360 TIP3 H2 HT 0.417000 1.0080 0 + 12570 W1 3361 TIP3 OH2 OT -0.834000 15.9994 0 + 12571 W1 3361 TIP3 H1 HT 0.417000 1.0080 0 + 12572 W1 3361 TIP3 H2 HT 0.417000 1.0080 0 + 12573 W1 3362 TIP3 OH2 OT -0.834000 15.9994 0 + 12574 W1 3362 TIP3 H1 HT 0.417000 1.0080 0 + 12575 W1 3362 TIP3 H2 HT 0.417000 1.0080 0 + 12576 W1 3363 TIP3 OH2 OT -0.834000 15.9994 0 + 12577 W1 3363 TIP3 H1 HT 0.417000 1.0080 0 + 12578 W1 3363 TIP3 H2 HT 0.417000 1.0080 0 + 12579 W1 3364 TIP3 OH2 OT -0.834000 15.9994 0 + 12580 W1 3364 TIP3 H1 HT 0.417000 1.0080 0 + 12581 W1 3364 TIP3 H2 HT 0.417000 1.0080 0 + 12582 W1 3365 TIP3 OH2 OT -0.834000 15.9994 0 + 12583 W1 3365 TIP3 H1 HT 0.417000 1.0080 0 + 12584 W1 3365 TIP3 H2 HT 0.417000 1.0080 0 + 12585 W1 3366 TIP3 OH2 OT -0.834000 15.9994 0 + 12586 W1 3366 TIP3 H1 HT 0.417000 1.0080 0 + 12587 W1 3366 TIP3 H2 HT 0.417000 1.0080 0 + 12588 W1 3367 TIP3 OH2 OT -0.834000 15.9994 0 + 12589 W1 3367 TIP3 H1 HT 0.417000 1.0080 0 + 12590 W1 3367 TIP3 H2 HT 0.417000 1.0080 0 + 12591 W1 3368 TIP3 OH2 OT -0.834000 15.9994 0 + 12592 W1 3368 TIP3 H1 HT 0.417000 1.0080 0 + 12593 W1 3368 TIP3 H2 HT 0.417000 1.0080 0 + 12594 W1 3369 TIP3 OH2 OT -0.834000 15.9994 0 + 12595 W1 3369 TIP3 H1 HT 0.417000 1.0080 0 + 12596 W1 3369 TIP3 H2 HT 0.417000 1.0080 0 + 12597 W1 3370 TIP3 OH2 OT -0.834000 15.9994 0 + 12598 W1 3370 TIP3 H1 HT 0.417000 1.0080 0 + 12599 W1 3370 TIP3 H2 HT 0.417000 1.0080 0 + 12600 W1 3371 TIP3 OH2 OT -0.834000 15.9994 0 + 12601 W1 3371 TIP3 H1 HT 0.417000 1.0080 0 + 12602 W1 3371 TIP3 H2 HT 0.417000 1.0080 0 + 12603 W1 3372 TIP3 OH2 OT -0.834000 15.9994 0 + 12604 W1 3372 TIP3 H1 HT 0.417000 1.0080 0 + 12605 W1 3372 TIP3 H2 HT 0.417000 1.0080 0 + 12606 W1 3373 TIP3 OH2 OT -0.834000 15.9994 0 + 12607 W1 3373 TIP3 H1 HT 0.417000 1.0080 0 + 12608 W1 3373 TIP3 H2 HT 0.417000 1.0080 0 + 12609 W1 3374 TIP3 OH2 OT -0.834000 15.9994 0 + 12610 W1 3374 TIP3 H1 HT 0.417000 1.0080 0 + 12611 W1 3374 TIP3 H2 HT 0.417000 1.0080 0 + 12612 W1 3375 TIP3 OH2 OT -0.834000 15.9994 0 + 12613 W1 3375 TIP3 H1 HT 0.417000 1.0080 0 + 12614 W1 3375 TIP3 H2 HT 0.417000 1.0080 0 + 12615 W1 3376 TIP3 OH2 OT -0.834000 15.9994 0 + 12616 W1 3376 TIP3 H1 HT 0.417000 1.0080 0 + 12617 W1 3376 TIP3 H2 HT 0.417000 1.0080 0 + 12618 W1 3377 TIP3 OH2 OT -0.834000 15.9994 0 + 12619 W1 3377 TIP3 H1 HT 0.417000 1.0080 0 + 12620 W1 3377 TIP3 H2 HT 0.417000 1.0080 0 + 12621 W1 3378 TIP3 OH2 OT -0.834000 15.9994 0 + 12622 W1 3378 TIP3 H1 HT 0.417000 1.0080 0 + 12623 W1 3378 TIP3 H2 HT 0.417000 1.0080 0 + 12624 W1 3379 TIP3 OH2 OT -0.834000 15.9994 0 + 12625 W1 3379 TIP3 H1 HT 0.417000 1.0080 0 + 12626 W1 3379 TIP3 H2 HT 0.417000 1.0080 0 + 12627 W1 3380 TIP3 OH2 OT -0.834000 15.9994 0 + 12628 W1 3380 TIP3 H1 HT 0.417000 1.0080 0 + 12629 W1 3380 TIP3 H2 HT 0.417000 1.0080 0 + 12630 W1 3381 TIP3 OH2 OT -0.834000 15.9994 0 + 12631 W1 3381 TIP3 H1 HT 0.417000 1.0080 0 + 12632 W1 3381 TIP3 H2 HT 0.417000 1.0080 0 + 12633 W1 3382 TIP3 OH2 OT -0.834000 15.9994 0 + 12634 W1 3382 TIP3 H1 HT 0.417000 1.0080 0 + 12635 W1 3382 TIP3 H2 HT 0.417000 1.0080 0 + 12636 W1 3383 TIP3 OH2 OT -0.834000 15.9994 0 + 12637 W1 3383 TIP3 H1 HT 0.417000 1.0080 0 + 12638 W1 3383 TIP3 H2 HT 0.417000 1.0080 0 + 12639 W1 3384 TIP3 OH2 OT -0.834000 15.9994 0 + 12640 W1 3384 TIP3 H1 HT 0.417000 1.0080 0 + 12641 W1 3384 TIP3 H2 HT 0.417000 1.0080 0 + 12642 W1 3385 TIP3 OH2 OT -0.834000 15.9994 0 + 12643 W1 3385 TIP3 H1 HT 0.417000 1.0080 0 + 12644 W1 3385 TIP3 H2 HT 0.417000 1.0080 0 + 12645 W1 3386 TIP3 OH2 OT -0.834000 15.9994 0 + 12646 W1 3386 TIP3 H1 HT 0.417000 1.0080 0 + 12647 W1 3386 TIP3 H2 HT 0.417000 1.0080 0 + 12648 W1 3387 TIP3 OH2 OT -0.834000 15.9994 0 + 12649 W1 3387 TIP3 H1 HT 0.417000 1.0080 0 + 12650 W1 3387 TIP3 H2 HT 0.417000 1.0080 0 + 12651 W1 3388 TIP3 OH2 OT -0.834000 15.9994 0 + 12652 W1 3388 TIP3 H1 HT 0.417000 1.0080 0 + 12653 W1 3388 TIP3 H2 HT 0.417000 1.0080 0 + 12654 W1 3389 TIP3 OH2 OT -0.834000 15.9994 0 + 12655 W1 3389 TIP3 H1 HT 0.417000 1.0080 0 + 12656 W1 3389 TIP3 H2 HT 0.417000 1.0080 0 + 12657 W1 3390 TIP3 OH2 OT -0.834000 15.9994 0 + 12658 W1 3390 TIP3 H1 HT 0.417000 1.0080 0 + 12659 W1 3390 TIP3 H2 HT 0.417000 1.0080 0 + 12660 W1 3391 TIP3 OH2 OT -0.834000 15.9994 0 + 12661 W1 3391 TIP3 H1 HT 0.417000 1.0080 0 + 12662 W1 3391 TIP3 H2 HT 0.417000 1.0080 0 + 12663 W1 3392 TIP3 OH2 OT -0.834000 15.9994 0 + 12664 W1 3392 TIP3 H1 HT 0.417000 1.0080 0 + 12665 W1 3392 TIP3 H2 HT 0.417000 1.0080 0 + 12666 W1 3393 TIP3 OH2 OT -0.834000 15.9994 0 + 12667 W1 3393 TIP3 H1 HT 0.417000 1.0080 0 + 12668 W1 3393 TIP3 H2 HT 0.417000 1.0080 0 + 12669 W1 3394 TIP3 OH2 OT -0.834000 15.9994 0 + 12670 W1 3394 TIP3 H1 HT 0.417000 1.0080 0 + 12671 W1 3394 TIP3 H2 HT 0.417000 1.0080 0 + 12672 W1 3395 TIP3 OH2 OT -0.834000 15.9994 0 + 12673 W1 3395 TIP3 H1 HT 0.417000 1.0080 0 + 12674 W1 3395 TIP3 H2 HT 0.417000 1.0080 0 + 12675 W1 3396 TIP3 OH2 OT -0.834000 15.9994 0 + 12676 W1 3396 TIP3 H1 HT 0.417000 1.0080 0 + 12677 W1 3396 TIP3 H2 HT 0.417000 1.0080 0 + 12678 W1 3397 TIP3 OH2 OT -0.834000 15.9994 0 + 12679 W1 3397 TIP3 H1 HT 0.417000 1.0080 0 + 12680 W1 3397 TIP3 H2 HT 0.417000 1.0080 0 + 12681 W1 3398 TIP3 OH2 OT -0.834000 15.9994 0 + 12682 W1 3398 TIP3 H1 HT 0.417000 1.0080 0 + 12683 W1 3398 TIP3 H2 HT 0.417000 1.0080 0 + 12684 W1 3399 TIP3 OH2 OT -0.834000 15.9994 0 + 12685 W1 3399 TIP3 H1 HT 0.417000 1.0080 0 + 12686 W1 3399 TIP3 H2 HT 0.417000 1.0080 0 + 12687 W1 3400 TIP3 OH2 OT -0.834000 15.9994 0 + 12688 W1 3400 TIP3 H1 HT 0.417000 1.0080 0 + 12689 W1 3400 TIP3 H2 HT 0.417000 1.0080 0 + 12690 W1 3401 TIP3 OH2 OT -0.834000 15.9994 0 + 12691 W1 3401 TIP3 H1 HT 0.417000 1.0080 0 + 12692 W1 3401 TIP3 H2 HT 0.417000 1.0080 0 + 12693 W1 3402 TIP3 OH2 OT -0.834000 15.9994 0 + 12694 W1 3402 TIP3 H1 HT 0.417000 1.0080 0 + 12695 W1 3402 TIP3 H2 HT 0.417000 1.0080 0 + 12696 W1 3403 TIP3 OH2 OT -0.834000 15.9994 0 + 12697 W1 3403 TIP3 H1 HT 0.417000 1.0080 0 + 12698 W1 3403 TIP3 H2 HT 0.417000 1.0080 0 + 12699 W1 3404 TIP3 OH2 OT -0.834000 15.9994 0 + 12700 W1 3404 TIP3 H1 HT 0.417000 1.0080 0 + 12701 W1 3404 TIP3 H2 HT 0.417000 1.0080 0 + 12702 W1 3405 TIP3 OH2 OT -0.834000 15.9994 0 + 12703 W1 3405 TIP3 H1 HT 0.417000 1.0080 0 + 12704 W1 3405 TIP3 H2 HT 0.417000 1.0080 0 + 12705 W1 3406 TIP3 OH2 OT -0.834000 15.9994 0 + 12706 W1 3406 TIP3 H1 HT 0.417000 1.0080 0 + 12707 W1 3406 TIP3 H2 HT 0.417000 1.0080 0 + 12708 W1 3407 TIP3 OH2 OT -0.834000 15.9994 0 + 12709 W1 3407 TIP3 H1 HT 0.417000 1.0080 0 + 12710 W1 3407 TIP3 H2 HT 0.417000 1.0080 0 + 12711 W1 3408 TIP3 OH2 OT -0.834000 15.9994 0 + 12712 W1 3408 TIP3 H1 HT 0.417000 1.0080 0 + 12713 W1 3408 TIP3 H2 HT 0.417000 1.0080 0 + 12714 W1 3409 TIP3 OH2 OT -0.834000 15.9994 0 + 12715 W1 3409 TIP3 H1 HT 0.417000 1.0080 0 + 12716 W1 3409 TIP3 H2 HT 0.417000 1.0080 0 + 12717 W1 3410 TIP3 OH2 OT -0.834000 15.9994 0 + 12718 W1 3410 TIP3 H1 HT 0.417000 1.0080 0 + 12719 W1 3410 TIP3 H2 HT 0.417000 1.0080 0 + 12720 W1 3411 TIP3 OH2 OT -0.834000 15.9994 0 + 12721 W1 3411 TIP3 H1 HT 0.417000 1.0080 0 + 12722 W1 3411 TIP3 H2 HT 0.417000 1.0080 0 + 12723 W1 3412 TIP3 OH2 OT -0.834000 15.9994 0 + 12724 W1 3412 TIP3 H1 HT 0.417000 1.0080 0 + 12725 W1 3412 TIP3 H2 HT 0.417000 1.0080 0 + 12726 W1 3413 TIP3 OH2 OT -0.834000 15.9994 0 + 12727 W1 3413 TIP3 H1 HT 0.417000 1.0080 0 + 12728 W1 3413 TIP3 H2 HT 0.417000 1.0080 0 + 12729 W1 3414 TIP3 OH2 OT -0.834000 15.9994 0 + 12730 W1 3414 TIP3 H1 HT 0.417000 1.0080 0 + 12731 W1 3414 TIP3 H2 HT 0.417000 1.0080 0 + 12732 W1 3415 TIP3 OH2 OT -0.834000 15.9994 0 + 12733 W1 3415 TIP3 H1 HT 0.417000 1.0080 0 + 12734 W1 3415 TIP3 H2 HT 0.417000 1.0080 0 + 12735 W1 3416 TIP3 OH2 OT -0.834000 15.9994 0 + 12736 W1 3416 TIP3 H1 HT 0.417000 1.0080 0 + 12737 W1 3416 TIP3 H2 HT 0.417000 1.0080 0 + 12738 W1 3417 TIP3 OH2 OT -0.834000 15.9994 0 + 12739 W1 3417 TIP3 H1 HT 0.417000 1.0080 0 + 12740 W1 3417 TIP3 H2 HT 0.417000 1.0080 0 + 12741 W1 3418 TIP3 OH2 OT -0.834000 15.9994 0 + 12742 W1 3418 TIP3 H1 HT 0.417000 1.0080 0 + 12743 W1 3418 TIP3 H2 HT 0.417000 1.0080 0 + 12744 W1 3419 TIP3 OH2 OT -0.834000 15.9994 0 + 12745 W1 3419 TIP3 H1 HT 0.417000 1.0080 0 + 12746 W1 3419 TIP3 H2 HT 0.417000 1.0080 0 + 12747 W1 3420 TIP3 OH2 OT -0.834000 15.9994 0 + 12748 W1 3420 TIP3 H1 HT 0.417000 1.0080 0 + 12749 W1 3420 TIP3 H2 HT 0.417000 1.0080 0 + 12750 W1 3421 TIP3 OH2 OT -0.834000 15.9994 0 + 12751 W1 3421 TIP3 H1 HT 0.417000 1.0080 0 + 12752 W1 3421 TIP3 H2 HT 0.417000 1.0080 0 + 12753 W1 3422 TIP3 OH2 OT -0.834000 15.9994 0 + 12754 W1 3422 TIP3 H1 HT 0.417000 1.0080 0 + 12755 W1 3422 TIP3 H2 HT 0.417000 1.0080 0 + 12756 W1 3423 TIP3 OH2 OT -0.834000 15.9994 0 + 12757 W1 3423 TIP3 H1 HT 0.417000 1.0080 0 + 12758 W1 3423 TIP3 H2 HT 0.417000 1.0080 0 + 12759 W1 3424 TIP3 OH2 OT -0.834000 15.9994 0 + 12760 W1 3424 TIP3 H1 HT 0.417000 1.0080 0 + 12761 W1 3424 TIP3 H2 HT 0.417000 1.0080 0 + 12762 W1 3425 TIP3 OH2 OT -0.834000 15.9994 0 + 12763 W1 3425 TIP3 H1 HT 0.417000 1.0080 0 + 12764 W1 3425 TIP3 H2 HT 0.417000 1.0080 0 + 12765 W1 3426 TIP3 OH2 OT -0.834000 15.9994 0 + 12766 W1 3426 TIP3 H1 HT 0.417000 1.0080 0 + 12767 W1 3426 TIP3 H2 HT 0.417000 1.0080 0 + 12768 W1 3427 TIP3 OH2 OT -0.834000 15.9994 0 + 12769 W1 3427 TIP3 H1 HT 0.417000 1.0080 0 + 12770 W1 3427 TIP3 H2 HT 0.417000 1.0080 0 + 12771 W1 3428 TIP3 OH2 OT -0.834000 15.9994 0 + 12772 W1 3428 TIP3 H1 HT 0.417000 1.0080 0 + 12773 W1 3428 TIP3 H2 HT 0.417000 1.0080 0 + 12774 W1 3429 TIP3 OH2 OT -0.834000 15.9994 0 + 12775 W1 3429 TIP3 H1 HT 0.417000 1.0080 0 + 12776 W1 3429 TIP3 H2 HT 0.417000 1.0080 0 + 12777 W1 3430 TIP3 OH2 OT -0.834000 15.9994 0 + 12778 W1 3430 TIP3 H1 HT 0.417000 1.0080 0 + 12779 W1 3430 TIP3 H2 HT 0.417000 1.0080 0 + 12780 W1 3431 TIP3 OH2 OT -0.834000 15.9994 0 + 12781 W1 3431 TIP3 H1 HT 0.417000 1.0080 0 + 12782 W1 3431 TIP3 H2 HT 0.417000 1.0080 0 + 12783 W1 3432 TIP3 OH2 OT -0.834000 15.9994 0 + 12784 W1 3432 TIP3 H1 HT 0.417000 1.0080 0 + 12785 W1 3432 TIP3 H2 HT 0.417000 1.0080 0 + 12786 W1 3433 TIP3 OH2 OT -0.834000 15.9994 0 + 12787 W1 3433 TIP3 H1 HT 0.417000 1.0080 0 + 12788 W1 3433 TIP3 H2 HT 0.417000 1.0080 0 + 12789 W1 3434 TIP3 OH2 OT -0.834000 15.9994 0 + 12790 W1 3434 TIP3 H1 HT 0.417000 1.0080 0 + 12791 W1 3434 TIP3 H2 HT 0.417000 1.0080 0 + 12792 W1 3435 TIP3 OH2 OT -0.834000 15.9994 0 + 12793 W1 3435 TIP3 H1 HT 0.417000 1.0080 0 + 12794 W1 3435 TIP3 H2 HT 0.417000 1.0080 0 + 12795 W1 3436 TIP3 OH2 OT -0.834000 15.9994 0 + 12796 W1 3436 TIP3 H1 HT 0.417000 1.0080 0 + 12797 W1 3436 TIP3 H2 HT 0.417000 1.0080 0 + 12798 W1 3437 TIP3 OH2 OT -0.834000 15.9994 0 + 12799 W1 3437 TIP3 H1 HT 0.417000 1.0080 0 + 12800 W1 3437 TIP3 H2 HT 0.417000 1.0080 0 + 12801 W1 3438 TIP3 OH2 OT -0.834000 15.9994 0 + 12802 W1 3438 TIP3 H1 HT 0.417000 1.0080 0 + 12803 W1 3438 TIP3 H2 HT 0.417000 1.0080 0 + 12804 W1 3439 TIP3 OH2 OT -0.834000 15.9994 0 + 12805 W1 3439 TIP3 H1 HT 0.417000 1.0080 0 + 12806 W1 3439 TIP3 H2 HT 0.417000 1.0080 0 + 12807 W1 3440 TIP3 OH2 OT -0.834000 15.9994 0 + 12808 W1 3440 TIP3 H1 HT 0.417000 1.0080 0 + 12809 W1 3440 TIP3 H2 HT 0.417000 1.0080 0 + 12810 W1 3441 TIP3 OH2 OT -0.834000 15.9994 0 + 12811 W1 3441 TIP3 H1 HT 0.417000 1.0080 0 + 12812 W1 3441 TIP3 H2 HT 0.417000 1.0080 0 + 12813 W1 3442 TIP3 OH2 OT -0.834000 15.9994 0 + 12814 W1 3442 TIP3 H1 HT 0.417000 1.0080 0 + 12815 W1 3442 TIP3 H2 HT 0.417000 1.0080 0 + 12816 W1 3443 TIP3 OH2 OT -0.834000 15.9994 0 + 12817 W1 3443 TIP3 H1 HT 0.417000 1.0080 0 + 12818 W1 3443 TIP3 H2 HT 0.417000 1.0080 0 + 12819 W1 3444 TIP3 OH2 OT -0.834000 15.9994 0 + 12820 W1 3444 TIP3 H1 HT 0.417000 1.0080 0 + 12821 W1 3444 TIP3 H2 HT 0.417000 1.0080 0 + 12822 W1 3445 TIP3 OH2 OT -0.834000 15.9994 0 + 12823 W1 3445 TIP3 H1 HT 0.417000 1.0080 0 + 12824 W1 3445 TIP3 H2 HT 0.417000 1.0080 0 + 12825 W1 3446 TIP3 OH2 OT -0.834000 15.9994 0 + 12826 W1 3446 TIP3 H1 HT 0.417000 1.0080 0 + 12827 W1 3446 TIP3 H2 HT 0.417000 1.0080 0 + 12828 W1 3447 TIP3 OH2 OT -0.834000 15.9994 0 + 12829 W1 3447 TIP3 H1 HT 0.417000 1.0080 0 + 12830 W1 3447 TIP3 H2 HT 0.417000 1.0080 0 + 12831 W1 3448 TIP3 OH2 OT -0.834000 15.9994 0 + 12832 W1 3448 TIP3 H1 HT 0.417000 1.0080 0 + 12833 W1 3448 TIP3 H2 HT 0.417000 1.0080 0 + 12834 W1 3449 TIP3 OH2 OT -0.834000 15.9994 0 + 12835 W1 3449 TIP3 H1 HT 0.417000 1.0080 0 + 12836 W1 3449 TIP3 H2 HT 0.417000 1.0080 0 + 12837 W1 3450 TIP3 OH2 OT -0.834000 15.9994 0 + 12838 W1 3450 TIP3 H1 HT 0.417000 1.0080 0 + 12839 W1 3450 TIP3 H2 HT 0.417000 1.0080 0 + 12840 W1 3451 TIP3 OH2 OT -0.834000 15.9994 0 + 12841 W1 3451 TIP3 H1 HT 0.417000 1.0080 0 + 12842 W1 3451 TIP3 H2 HT 0.417000 1.0080 0 + 12843 W1 3452 TIP3 OH2 OT -0.834000 15.9994 0 + 12844 W1 3452 TIP3 H1 HT 0.417000 1.0080 0 + 12845 W1 3452 TIP3 H2 HT 0.417000 1.0080 0 + 12846 W1 3453 TIP3 OH2 OT -0.834000 15.9994 0 + 12847 W1 3453 TIP3 H1 HT 0.417000 1.0080 0 + 12848 W1 3453 TIP3 H2 HT 0.417000 1.0080 0 + 12849 W1 3454 TIP3 OH2 OT -0.834000 15.9994 0 + 12850 W1 3454 TIP3 H1 HT 0.417000 1.0080 0 + 12851 W1 3454 TIP3 H2 HT 0.417000 1.0080 0 + 12852 W1 3455 TIP3 OH2 OT -0.834000 15.9994 0 + 12853 W1 3455 TIP3 H1 HT 0.417000 1.0080 0 + 12854 W1 3455 TIP3 H2 HT 0.417000 1.0080 0 + 12855 W1 3456 TIP3 OH2 OT -0.834000 15.9994 0 + 12856 W1 3456 TIP3 H1 HT 0.417000 1.0080 0 + 12857 W1 3456 TIP3 H2 HT 0.417000 1.0080 0 + 12858 W1 3457 TIP3 OH2 OT -0.834000 15.9994 0 + 12859 W1 3457 TIP3 H1 HT 0.417000 1.0080 0 + 12860 W1 3457 TIP3 H2 HT 0.417000 1.0080 0 + 12861 W1 3458 TIP3 OH2 OT -0.834000 15.9994 0 + 12862 W1 3458 TIP3 H1 HT 0.417000 1.0080 0 + 12863 W1 3458 TIP3 H2 HT 0.417000 1.0080 0 + 12864 W1 3459 TIP3 OH2 OT -0.834000 15.9994 0 + 12865 W1 3459 TIP3 H1 HT 0.417000 1.0080 0 + 12866 W1 3459 TIP3 H2 HT 0.417000 1.0080 0 + 12867 W1 3460 TIP3 OH2 OT -0.834000 15.9994 0 + 12868 W1 3460 TIP3 H1 HT 0.417000 1.0080 0 + 12869 W1 3460 TIP3 H2 HT 0.417000 1.0080 0 + 12870 W1 3461 TIP3 OH2 OT -0.834000 15.9994 0 + 12871 W1 3461 TIP3 H1 HT 0.417000 1.0080 0 + 12872 W1 3461 TIP3 H2 HT 0.417000 1.0080 0 + 12873 W1 3462 TIP3 OH2 OT -0.834000 15.9994 0 + 12874 W1 3462 TIP3 H1 HT 0.417000 1.0080 0 + 12875 W1 3462 TIP3 H2 HT 0.417000 1.0080 0 + 12876 W1 3463 TIP3 OH2 OT -0.834000 15.9994 0 + 12877 W1 3463 TIP3 H1 HT 0.417000 1.0080 0 + 12878 W1 3463 TIP3 H2 HT 0.417000 1.0080 0 + 12879 W1 3464 TIP3 OH2 OT -0.834000 15.9994 0 + 12880 W1 3464 TIP3 H1 HT 0.417000 1.0080 0 + 12881 W1 3464 TIP3 H2 HT 0.417000 1.0080 0 + 12882 W1 3465 TIP3 OH2 OT -0.834000 15.9994 0 + 12883 W1 3465 TIP3 H1 HT 0.417000 1.0080 0 + 12884 W1 3465 TIP3 H2 HT 0.417000 1.0080 0 + 12885 W1 3466 TIP3 OH2 OT -0.834000 15.9994 0 + 12886 W1 3466 TIP3 H1 HT 0.417000 1.0080 0 + 12887 W1 3466 TIP3 H2 HT 0.417000 1.0080 0 + 12888 W1 3467 TIP3 OH2 OT -0.834000 15.9994 0 + 12889 W1 3467 TIP3 H1 HT 0.417000 1.0080 0 + 12890 W1 3467 TIP3 H2 HT 0.417000 1.0080 0 + 12891 W1 3468 TIP3 OH2 OT -0.834000 15.9994 0 + 12892 W1 3468 TIP3 H1 HT 0.417000 1.0080 0 + 12893 W1 3468 TIP3 H2 HT 0.417000 1.0080 0 + 12894 W1 3469 TIP3 OH2 OT -0.834000 15.9994 0 + 12895 W1 3469 TIP3 H1 HT 0.417000 1.0080 0 + 12896 W1 3469 TIP3 H2 HT 0.417000 1.0080 0 + 12897 W1 3470 TIP3 OH2 OT -0.834000 15.9994 0 + 12898 W1 3470 TIP3 H1 HT 0.417000 1.0080 0 + 12899 W1 3470 TIP3 H2 HT 0.417000 1.0080 0 + 12900 W1 3471 TIP3 OH2 OT -0.834000 15.9994 0 + 12901 W1 3471 TIP3 H1 HT 0.417000 1.0080 0 + 12902 W1 3471 TIP3 H2 HT 0.417000 1.0080 0 + 12903 W1 3472 TIP3 OH2 OT -0.834000 15.9994 0 + 12904 W1 3472 TIP3 H1 HT 0.417000 1.0080 0 + 12905 W1 3472 TIP3 H2 HT 0.417000 1.0080 0 + 12906 W1 3473 TIP3 OH2 OT -0.834000 15.9994 0 + 12907 W1 3473 TIP3 H1 HT 0.417000 1.0080 0 + 12908 W1 3473 TIP3 H2 HT 0.417000 1.0080 0 + 12909 W1 3474 TIP3 OH2 OT -0.834000 15.9994 0 + 12910 W1 3474 TIP3 H1 HT 0.417000 1.0080 0 + 12911 W1 3474 TIP3 H2 HT 0.417000 1.0080 0 + 12912 W1 3475 TIP3 OH2 OT -0.834000 15.9994 0 + 12913 W1 3475 TIP3 H1 HT 0.417000 1.0080 0 + 12914 W1 3475 TIP3 H2 HT 0.417000 1.0080 0 + 12915 W1 3476 TIP3 OH2 OT -0.834000 15.9994 0 + 12916 W1 3476 TIP3 H1 HT 0.417000 1.0080 0 + 12917 W1 3476 TIP3 H2 HT 0.417000 1.0080 0 + 12918 W1 3477 TIP3 OH2 OT -0.834000 15.9994 0 + 12919 W1 3477 TIP3 H1 HT 0.417000 1.0080 0 + 12920 W1 3477 TIP3 H2 HT 0.417000 1.0080 0 + 12921 W1 3478 TIP3 OH2 OT -0.834000 15.9994 0 + 12922 W1 3478 TIP3 H1 HT 0.417000 1.0080 0 + 12923 W1 3478 TIP3 H2 HT 0.417000 1.0080 0 + 12924 W1 3479 TIP3 OH2 OT -0.834000 15.9994 0 + 12925 W1 3479 TIP3 H1 HT 0.417000 1.0080 0 + 12926 W1 3479 TIP3 H2 HT 0.417000 1.0080 0 + 12927 W1 3480 TIP3 OH2 OT -0.834000 15.9994 0 + 12928 W1 3480 TIP3 H1 HT 0.417000 1.0080 0 + 12929 W1 3480 TIP3 H2 HT 0.417000 1.0080 0 + 12930 W1 3481 TIP3 OH2 OT -0.834000 15.9994 0 + 12931 W1 3481 TIP3 H1 HT 0.417000 1.0080 0 + 12932 W1 3481 TIP3 H2 HT 0.417000 1.0080 0 + 12933 W1 3482 TIP3 OH2 OT -0.834000 15.9994 0 + 12934 W1 3482 TIP3 H1 HT 0.417000 1.0080 0 + 12935 W1 3482 TIP3 H2 HT 0.417000 1.0080 0 + 12936 W1 3483 TIP3 OH2 OT -0.834000 15.9994 0 + 12937 W1 3483 TIP3 H1 HT 0.417000 1.0080 0 + 12938 W1 3483 TIP3 H2 HT 0.417000 1.0080 0 + 12939 W1 3484 TIP3 OH2 OT -0.834000 15.9994 0 + 12940 W1 3484 TIP3 H1 HT 0.417000 1.0080 0 + 12941 W1 3484 TIP3 H2 HT 0.417000 1.0080 0 + 12942 W1 3485 TIP3 OH2 OT -0.834000 15.9994 0 + 12943 W1 3485 TIP3 H1 HT 0.417000 1.0080 0 + 12944 W1 3485 TIP3 H2 HT 0.417000 1.0080 0 + 12945 W1 3486 TIP3 OH2 OT -0.834000 15.9994 0 + 12946 W1 3486 TIP3 H1 HT 0.417000 1.0080 0 + 12947 W1 3486 TIP3 H2 HT 0.417000 1.0080 0 + 12948 W1 3487 TIP3 OH2 OT -0.834000 15.9994 0 + 12949 W1 3487 TIP3 H1 HT 0.417000 1.0080 0 + 12950 W1 3487 TIP3 H2 HT 0.417000 1.0080 0 + 12951 W1 3488 TIP3 OH2 OT -0.834000 15.9994 0 + 12952 W1 3488 TIP3 H1 HT 0.417000 1.0080 0 + 12953 W1 3488 TIP3 H2 HT 0.417000 1.0080 0 + 12954 W1 3489 TIP3 OH2 OT -0.834000 15.9994 0 + 12955 W1 3489 TIP3 H1 HT 0.417000 1.0080 0 + 12956 W1 3489 TIP3 H2 HT 0.417000 1.0080 0 + 12957 W1 3490 TIP3 OH2 OT -0.834000 15.9994 0 + 12958 W1 3490 TIP3 H1 HT 0.417000 1.0080 0 + 12959 W1 3490 TIP3 H2 HT 0.417000 1.0080 0 + 12960 W1 3491 TIP3 OH2 OT -0.834000 15.9994 0 + 12961 W1 3491 TIP3 H1 HT 0.417000 1.0080 0 + 12962 W1 3491 TIP3 H2 HT 0.417000 1.0080 0 + 12963 W1 3492 TIP3 OH2 OT -0.834000 15.9994 0 + 12964 W1 3492 TIP3 H1 HT 0.417000 1.0080 0 + 12965 W1 3492 TIP3 H2 HT 0.417000 1.0080 0 + 12966 W1 3493 TIP3 OH2 OT -0.834000 15.9994 0 + 12967 W1 3493 TIP3 H1 HT 0.417000 1.0080 0 + 12968 W1 3493 TIP3 H2 HT 0.417000 1.0080 0 + 12969 W1 3494 TIP3 OH2 OT -0.834000 15.9994 0 + 12970 W1 3494 TIP3 H1 HT 0.417000 1.0080 0 + 12971 W1 3494 TIP3 H2 HT 0.417000 1.0080 0 + 12972 W1 3495 TIP3 OH2 OT -0.834000 15.9994 0 + 12973 W1 3495 TIP3 H1 HT 0.417000 1.0080 0 + 12974 W1 3495 TIP3 H2 HT 0.417000 1.0080 0 + 12975 W1 3496 TIP3 OH2 OT -0.834000 15.9994 0 + 12976 W1 3496 TIP3 H1 HT 0.417000 1.0080 0 + 12977 W1 3496 TIP3 H2 HT 0.417000 1.0080 0 + 12978 W1 3497 TIP3 OH2 OT -0.834000 15.9994 0 + 12979 W1 3497 TIP3 H1 HT 0.417000 1.0080 0 + 12980 W1 3497 TIP3 H2 HT 0.417000 1.0080 0 + 12981 W1 3498 TIP3 OH2 OT -0.834000 15.9994 0 + 12982 W1 3498 TIP3 H1 HT 0.417000 1.0080 0 + 12983 W1 3498 TIP3 H2 HT 0.417000 1.0080 0 + 12984 W1 3499 TIP3 OH2 OT -0.834000 15.9994 0 + 12985 W1 3499 TIP3 H1 HT 0.417000 1.0080 0 + 12986 W1 3499 TIP3 H2 HT 0.417000 1.0080 0 + 12987 W1 3500 TIP3 OH2 OT -0.834000 15.9994 0 + 12988 W1 3500 TIP3 H1 HT 0.417000 1.0080 0 + 12989 W1 3500 TIP3 H2 HT 0.417000 1.0080 0 + 12990 W1 3501 TIP3 OH2 OT -0.834000 15.9994 0 + 12991 W1 3501 TIP3 H1 HT 0.417000 1.0080 0 + 12992 W1 3501 TIP3 H2 HT 0.417000 1.0080 0 + 12993 W1 3502 TIP3 OH2 OT -0.834000 15.9994 0 + 12994 W1 3502 TIP3 H1 HT 0.417000 1.0080 0 + 12995 W1 3502 TIP3 H2 HT 0.417000 1.0080 0 + 12996 W1 3503 TIP3 OH2 OT -0.834000 15.9994 0 + 12997 W1 3503 TIP3 H1 HT 0.417000 1.0080 0 + 12998 W1 3503 TIP3 H2 HT 0.417000 1.0080 0 + 12999 W1 3504 TIP3 OH2 OT -0.834000 15.9994 0 + 13000 W1 3504 TIP3 H1 HT 0.417000 1.0080 0 + 13001 W1 3504 TIP3 H2 HT 0.417000 1.0080 0 + 13002 W1 3505 TIP3 OH2 OT -0.834000 15.9994 0 + 13003 W1 3505 TIP3 H1 HT 0.417000 1.0080 0 + 13004 W1 3505 TIP3 H2 HT 0.417000 1.0080 0 + 13005 W1 3506 TIP3 OH2 OT -0.834000 15.9994 0 + 13006 W1 3506 TIP3 H1 HT 0.417000 1.0080 0 + 13007 W1 3506 TIP3 H2 HT 0.417000 1.0080 0 + 13008 W1 3507 TIP3 OH2 OT -0.834000 15.9994 0 + 13009 W1 3507 TIP3 H1 HT 0.417000 1.0080 0 + 13010 W1 3507 TIP3 H2 HT 0.417000 1.0080 0 + 13011 W1 3508 TIP3 OH2 OT -0.834000 15.9994 0 + 13012 W1 3508 TIP3 H1 HT 0.417000 1.0080 0 + 13013 W1 3508 TIP3 H2 HT 0.417000 1.0080 0 + 13014 W1 3509 TIP3 OH2 OT -0.834000 15.9994 0 + 13015 W1 3509 TIP3 H1 HT 0.417000 1.0080 0 + 13016 W1 3509 TIP3 H2 HT 0.417000 1.0080 0 + 13017 W1 3510 TIP3 OH2 OT -0.834000 15.9994 0 + 13018 W1 3510 TIP3 H1 HT 0.417000 1.0080 0 + 13019 W1 3510 TIP3 H2 HT 0.417000 1.0080 0 + 13020 W1 3511 TIP3 OH2 OT -0.834000 15.9994 0 + 13021 W1 3511 TIP3 H1 HT 0.417000 1.0080 0 + 13022 W1 3511 TIP3 H2 HT 0.417000 1.0080 0 + 13023 W1 3512 TIP3 OH2 OT -0.834000 15.9994 0 + 13024 W1 3512 TIP3 H1 HT 0.417000 1.0080 0 + 13025 W1 3512 TIP3 H2 HT 0.417000 1.0080 0 + 13026 W1 3513 TIP3 OH2 OT -0.834000 15.9994 0 + 13027 W1 3513 TIP3 H1 HT 0.417000 1.0080 0 + 13028 W1 3513 TIP3 H2 HT 0.417000 1.0080 0 + 13029 W1 3514 TIP3 OH2 OT -0.834000 15.9994 0 + 13030 W1 3514 TIP3 H1 HT 0.417000 1.0080 0 + 13031 W1 3514 TIP3 H2 HT 0.417000 1.0080 0 + 13032 W1 3515 TIP3 OH2 OT -0.834000 15.9994 0 + 13033 W1 3515 TIP3 H1 HT 0.417000 1.0080 0 + 13034 W1 3515 TIP3 H2 HT 0.417000 1.0080 0 + 13035 W1 3516 TIP3 OH2 OT -0.834000 15.9994 0 + 13036 W1 3516 TIP3 H1 HT 0.417000 1.0080 0 + 13037 W1 3516 TIP3 H2 HT 0.417000 1.0080 0 + 13038 W1 3517 TIP3 OH2 OT -0.834000 15.9994 0 + 13039 W1 3517 TIP3 H1 HT 0.417000 1.0080 0 + 13040 W1 3517 TIP3 H2 HT 0.417000 1.0080 0 + 13041 W1 3518 TIP3 OH2 OT -0.834000 15.9994 0 + 13042 W1 3518 TIP3 H1 HT 0.417000 1.0080 0 + 13043 W1 3518 TIP3 H2 HT 0.417000 1.0080 0 + 13044 W1 3519 TIP3 OH2 OT -0.834000 15.9994 0 + 13045 W1 3519 TIP3 H1 HT 0.417000 1.0080 0 + 13046 W1 3519 TIP3 H2 HT 0.417000 1.0080 0 + 13047 W1 3520 TIP3 OH2 OT -0.834000 15.9994 0 + 13048 W1 3520 TIP3 H1 HT 0.417000 1.0080 0 + 13049 W1 3520 TIP3 H2 HT 0.417000 1.0080 0 + 13050 W1 3521 TIP3 OH2 OT -0.834000 15.9994 0 + 13051 W1 3521 TIP3 H1 HT 0.417000 1.0080 0 + 13052 W1 3521 TIP3 H2 HT 0.417000 1.0080 0 + 13053 W1 3522 TIP3 OH2 OT -0.834000 15.9994 0 + 13054 W1 3522 TIP3 H1 HT 0.417000 1.0080 0 + 13055 W1 3522 TIP3 H2 HT 0.417000 1.0080 0 + 13056 W1 3523 TIP3 OH2 OT -0.834000 15.9994 0 + 13057 W1 3523 TIP3 H1 HT 0.417000 1.0080 0 + 13058 W1 3523 TIP3 H2 HT 0.417000 1.0080 0 + 13059 W1 3524 TIP3 OH2 OT -0.834000 15.9994 0 + 13060 W1 3524 TIP3 H1 HT 0.417000 1.0080 0 + 13061 W1 3524 TIP3 H2 HT 0.417000 1.0080 0 + 13062 W1 3525 TIP3 OH2 OT -0.834000 15.9994 0 + 13063 W1 3525 TIP3 H1 HT 0.417000 1.0080 0 + 13064 W1 3525 TIP3 H2 HT 0.417000 1.0080 0 + 13065 W1 3526 TIP3 OH2 OT -0.834000 15.9994 0 + 13066 W1 3526 TIP3 H1 HT 0.417000 1.0080 0 + 13067 W1 3526 TIP3 H2 HT 0.417000 1.0080 0 + 13068 W1 3527 TIP3 OH2 OT -0.834000 15.9994 0 + 13069 W1 3527 TIP3 H1 HT 0.417000 1.0080 0 + 13070 W1 3527 TIP3 H2 HT 0.417000 1.0080 0 + 13071 W1 3528 TIP3 OH2 OT -0.834000 15.9994 0 + 13072 W1 3528 TIP3 H1 HT 0.417000 1.0080 0 + 13073 W1 3528 TIP3 H2 HT 0.417000 1.0080 0 + 13074 W1 3529 TIP3 OH2 OT -0.834000 15.9994 0 + 13075 W1 3529 TIP3 H1 HT 0.417000 1.0080 0 + 13076 W1 3529 TIP3 H2 HT 0.417000 1.0080 0 + 13077 W1 3530 TIP3 OH2 OT -0.834000 15.9994 0 + 13078 W1 3530 TIP3 H1 HT 0.417000 1.0080 0 + 13079 W1 3530 TIP3 H2 HT 0.417000 1.0080 0 + 13080 W1 3531 TIP3 OH2 OT -0.834000 15.9994 0 + 13081 W1 3531 TIP3 H1 HT 0.417000 1.0080 0 + 13082 W1 3531 TIP3 H2 HT 0.417000 1.0080 0 + 13083 W1 3532 TIP3 OH2 OT -0.834000 15.9994 0 + 13084 W1 3532 TIP3 H1 HT 0.417000 1.0080 0 + 13085 W1 3532 TIP3 H2 HT 0.417000 1.0080 0 + 13086 W1 3533 TIP3 OH2 OT -0.834000 15.9994 0 + 13087 W1 3533 TIP3 H1 HT 0.417000 1.0080 0 + 13088 W1 3533 TIP3 H2 HT 0.417000 1.0080 0 + 13089 W1 3534 TIP3 OH2 OT -0.834000 15.9994 0 + 13090 W1 3534 TIP3 H1 HT 0.417000 1.0080 0 + 13091 W1 3534 TIP3 H2 HT 0.417000 1.0080 0 + 13092 W1 3535 TIP3 OH2 OT -0.834000 15.9994 0 + 13093 W1 3535 TIP3 H1 HT 0.417000 1.0080 0 + 13094 W1 3535 TIP3 H2 HT 0.417000 1.0080 0 + 13095 W1 3536 TIP3 OH2 OT -0.834000 15.9994 0 + 13096 W1 3536 TIP3 H1 HT 0.417000 1.0080 0 + 13097 W1 3536 TIP3 H2 HT 0.417000 1.0080 0 + 13098 W1 3537 TIP3 OH2 OT -0.834000 15.9994 0 + 13099 W1 3537 TIP3 H1 HT 0.417000 1.0080 0 + 13100 W1 3537 TIP3 H2 HT 0.417000 1.0080 0 + 13101 W1 3538 TIP3 OH2 OT -0.834000 15.9994 0 + 13102 W1 3538 TIP3 H1 HT 0.417000 1.0080 0 + 13103 W1 3538 TIP3 H2 HT 0.417000 1.0080 0 + 13104 W1 3539 TIP3 OH2 OT -0.834000 15.9994 0 + 13105 W1 3539 TIP3 H1 HT 0.417000 1.0080 0 + 13106 W1 3539 TIP3 H2 HT 0.417000 1.0080 0 + 13107 W1 3540 TIP3 OH2 OT -0.834000 15.9994 0 + 13108 W1 3540 TIP3 H1 HT 0.417000 1.0080 0 + 13109 W1 3540 TIP3 H2 HT 0.417000 1.0080 0 + 13110 W1 3541 TIP3 OH2 OT -0.834000 15.9994 0 + 13111 W1 3541 TIP3 H1 HT 0.417000 1.0080 0 + 13112 W1 3541 TIP3 H2 HT 0.417000 1.0080 0 + 13113 W1 3542 TIP3 OH2 OT -0.834000 15.9994 0 + 13114 W1 3542 TIP3 H1 HT 0.417000 1.0080 0 + 13115 W1 3542 TIP3 H2 HT 0.417000 1.0080 0 + 13116 W1 3543 TIP3 OH2 OT -0.834000 15.9994 0 + 13117 W1 3543 TIP3 H1 HT 0.417000 1.0080 0 + 13118 W1 3543 TIP3 H2 HT 0.417000 1.0080 0 + 13119 W1 3544 TIP3 OH2 OT -0.834000 15.9994 0 + 13120 W1 3544 TIP3 H1 HT 0.417000 1.0080 0 + 13121 W1 3544 TIP3 H2 HT 0.417000 1.0080 0 + 13122 W1 3545 TIP3 OH2 OT -0.834000 15.9994 0 + 13123 W1 3545 TIP3 H1 HT 0.417000 1.0080 0 + 13124 W1 3545 TIP3 H2 HT 0.417000 1.0080 0 + 13125 W1 3546 TIP3 OH2 OT -0.834000 15.9994 0 + 13126 W1 3546 TIP3 H1 HT 0.417000 1.0080 0 + 13127 W1 3546 TIP3 H2 HT 0.417000 1.0080 0 + 13128 W1 3547 TIP3 OH2 OT -0.834000 15.9994 0 + 13129 W1 3547 TIP3 H1 HT 0.417000 1.0080 0 + 13130 W1 3547 TIP3 H2 HT 0.417000 1.0080 0 + 13131 W1 3548 TIP3 OH2 OT -0.834000 15.9994 0 + 13132 W1 3548 TIP3 H1 HT 0.417000 1.0080 0 + 13133 W1 3548 TIP3 H2 HT 0.417000 1.0080 0 + 13134 W1 3549 TIP3 OH2 OT -0.834000 15.9994 0 + 13135 W1 3549 TIP3 H1 HT 0.417000 1.0080 0 + 13136 W1 3549 TIP3 H2 HT 0.417000 1.0080 0 + 13137 W1 3550 TIP3 OH2 OT -0.834000 15.9994 0 + 13138 W1 3550 TIP3 H1 HT 0.417000 1.0080 0 + 13139 W1 3550 TIP3 H2 HT 0.417000 1.0080 0 + 13140 W1 3551 TIP3 OH2 OT -0.834000 15.9994 0 + 13141 W1 3551 TIP3 H1 HT 0.417000 1.0080 0 + 13142 W1 3551 TIP3 H2 HT 0.417000 1.0080 0 + 13143 W1 3552 TIP3 OH2 OT -0.834000 15.9994 0 + 13144 W1 3552 TIP3 H1 HT 0.417000 1.0080 0 + 13145 W1 3552 TIP3 H2 HT 0.417000 1.0080 0 + 13146 W1 3553 TIP3 OH2 OT -0.834000 15.9994 0 + 13147 W1 3553 TIP3 H1 HT 0.417000 1.0080 0 + 13148 W1 3553 TIP3 H2 HT 0.417000 1.0080 0 + 13149 W1 3554 TIP3 OH2 OT -0.834000 15.9994 0 + 13150 W1 3554 TIP3 H1 HT 0.417000 1.0080 0 + 13151 W1 3554 TIP3 H2 HT 0.417000 1.0080 0 + 13152 W1 3555 TIP3 OH2 OT -0.834000 15.9994 0 + 13153 W1 3555 TIP3 H1 HT 0.417000 1.0080 0 + 13154 W1 3555 TIP3 H2 HT 0.417000 1.0080 0 + 13155 W1 3556 TIP3 OH2 OT -0.834000 15.9994 0 + 13156 W1 3556 TIP3 H1 HT 0.417000 1.0080 0 + 13157 W1 3556 TIP3 H2 HT 0.417000 1.0080 0 + 13158 W1 3557 TIP3 OH2 OT -0.834000 15.9994 0 + 13159 W1 3557 TIP3 H1 HT 0.417000 1.0080 0 + 13160 W1 3557 TIP3 H2 HT 0.417000 1.0080 0 + 13161 W1 3558 TIP3 OH2 OT -0.834000 15.9994 0 + 13162 W1 3558 TIP3 H1 HT 0.417000 1.0080 0 + 13163 W1 3558 TIP3 H2 HT 0.417000 1.0080 0 + 13164 W1 3559 TIP3 OH2 OT -0.834000 15.9994 0 + 13165 W1 3559 TIP3 H1 HT 0.417000 1.0080 0 + 13166 W1 3559 TIP3 H2 HT 0.417000 1.0080 0 + 13167 W1 3560 TIP3 OH2 OT -0.834000 15.9994 0 + 13168 W1 3560 TIP3 H1 HT 0.417000 1.0080 0 + 13169 W1 3560 TIP3 H2 HT 0.417000 1.0080 0 + 13170 W1 3561 TIP3 OH2 OT -0.834000 15.9994 0 + 13171 W1 3561 TIP3 H1 HT 0.417000 1.0080 0 + 13172 W1 3561 TIP3 H2 HT 0.417000 1.0080 0 + 13173 W1 3562 TIP3 OH2 OT -0.834000 15.9994 0 + 13174 W1 3562 TIP3 H1 HT 0.417000 1.0080 0 + 13175 W1 3562 TIP3 H2 HT 0.417000 1.0080 0 + 13176 W1 3563 TIP3 OH2 OT -0.834000 15.9994 0 + 13177 W1 3563 TIP3 H1 HT 0.417000 1.0080 0 + 13178 W1 3563 TIP3 H2 HT 0.417000 1.0080 0 + 13179 W1 3564 TIP3 OH2 OT -0.834000 15.9994 0 + 13180 W1 3564 TIP3 H1 HT 0.417000 1.0080 0 + 13181 W1 3564 TIP3 H2 HT 0.417000 1.0080 0 + 13182 W1 3565 TIP3 OH2 OT -0.834000 15.9994 0 + 13183 W1 3565 TIP3 H1 HT 0.417000 1.0080 0 + 13184 W1 3565 TIP3 H2 HT 0.417000 1.0080 0 + 13185 W1 3566 TIP3 OH2 OT -0.834000 15.9994 0 + 13186 W1 3566 TIP3 H1 HT 0.417000 1.0080 0 + 13187 W1 3566 TIP3 H2 HT 0.417000 1.0080 0 + 13188 W1 3567 TIP3 OH2 OT -0.834000 15.9994 0 + 13189 W1 3567 TIP3 H1 HT 0.417000 1.0080 0 + 13190 W1 3567 TIP3 H2 HT 0.417000 1.0080 0 + 13191 W1 3568 TIP3 OH2 OT -0.834000 15.9994 0 + 13192 W1 3568 TIP3 H1 HT 0.417000 1.0080 0 + 13193 W1 3568 TIP3 H2 HT 0.417000 1.0080 0 + 13194 W1 3569 TIP3 OH2 OT -0.834000 15.9994 0 + 13195 W1 3569 TIP3 H1 HT 0.417000 1.0080 0 + 13196 W1 3569 TIP3 H2 HT 0.417000 1.0080 0 + 13197 W1 3570 TIP3 OH2 OT -0.834000 15.9994 0 + 13198 W1 3570 TIP3 H1 HT 0.417000 1.0080 0 + 13199 W1 3570 TIP3 H2 HT 0.417000 1.0080 0 + 13200 W1 3571 TIP3 OH2 OT -0.834000 15.9994 0 + 13201 W1 3571 TIP3 H1 HT 0.417000 1.0080 0 + 13202 W1 3571 TIP3 H2 HT 0.417000 1.0080 0 + 13203 W1 3572 TIP3 OH2 OT -0.834000 15.9994 0 + 13204 W1 3572 TIP3 H1 HT 0.417000 1.0080 0 + 13205 W1 3572 TIP3 H2 HT 0.417000 1.0080 0 + 13206 W1 3573 TIP3 OH2 OT -0.834000 15.9994 0 + 13207 W1 3573 TIP3 H1 HT 0.417000 1.0080 0 + 13208 W1 3573 TIP3 H2 HT 0.417000 1.0080 0 + 13209 W1 3574 TIP3 OH2 OT -0.834000 15.9994 0 + 13210 W1 3574 TIP3 H1 HT 0.417000 1.0080 0 + 13211 W1 3574 TIP3 H2 HT 0.417000 1.0080 0 + 13212 W1 3575 TIP3 OH2 OT -0.834000 15.9994 0 + 13213 W1 3575 TIP3 H1 HT 0.417000 1.0080 0 + 13214 W1 3575 TIP3 H2 HT 0.417000 1.0080 0 + 13215 W1 3576 TIP3 OH2 OT -0.834000 15.9994 0 + 13216 W1 3576 TIP3 H1 HT 0.417000 1.0080 0 + 13217 W1 3576 TIP3 H2 HT 0.417000 1.0080 0 + 13218 W1 3577 TIP3 OH2 OT -0.834000 15.9994 0 + 13219 W1 3577 TIP3 H1 HT 0.417000 1.0080 0 + 13220 W1 3577 TIP3 H2 HT 0.417000 1.0080 0 + 13221 W1 3578 TIP3 OH2 OT -0.834000 15.9994 0 + 13222 W1 3578 TIP3 H1 HT 0.417000 1.0080 0 + 13223 W1 3578 TIP3 H2 HT 0.417000 1.0080 0 + 13224 W1 3579 TIP3 OH2 OT -0.834000 15.9994 0 + 13225 W1 3579 TIP3 H1 HT 0.417000 1.0080 0 + 13226 W1 3579 TIP3 H2 HT 0.417000 1.0080 0 + 13227 W1 3580 TIP3 OH2 OT -0.834000 15.9994 0 + 13228 W1 3580 TIP3 H1 HT 0.417000 1.0080 0 + 13229 W1 3580 TIP3 H2 HT 0.417000 1.0080 0 + 13230 W1 3581 TIP3 OH2 OT -0.834000 15.9994 0 + 13231 W1 3581 TIP3 H1 HT 0.417000 1.0080 0 + 13232 W1 3581 TIP3 H2 HT 0.417000 1.0080 0 + 13233 W1 3582 TIP3 OH2 OT -0.834000 15.9994 0 + 13234 W1 3582 TIP3 H1 HT 0.417000 1.0080 0 + 13235 W1 3582 TIP3 H2 HT 0.417000 1.0080 0 + 13236 W1 3583 TIP3 OH2 OT -0.834000 15.9994 0 + 13237 W1 3583 TIP3 H1 HT 0.417000 1.0080 0 + 13238 W1 3583 TIP3 H2 HT 0.417000 1.0080 0 + 13239 W1 3584 TIP3 OH2 OT -0.834000 15.9994 0 + 13240 W1 3584 TIP3 H1 HT 0.417000 1.0080 0 + 13241 W1 3584 TIP3 H2 HT 0.417000 1.0080 0 + 13242 W1 3585 TIP3 OH2 OT -0.834000 15.9994 0 + 13243 W1 3585 TIP3 H1 HT 0.417000 1.0080 0 + 13244 W1 3585 TIP3 H2 HT 0.417000 1.0080 0 + 13245 W1 3586 TIP3 OH2 OT -0.834000 15.9994 0 + 13246 W1 3586 TIP3 H1 HT 0.417000 1.0080 0 + 13247 W1 3586 TIP3 H2 HT 0.417000 1.0080 0 + 13248 W1 3587 TIP3 OH2 OT -0.834000 15.9994 0 + 13249 W1 3587 TIP3 H1 HT 0.417000 1.0080 0 + 13250 W1 3587 TIP3 H2 HT 0.417000 1.0080 0 + 13251 W1 3588 TIP3 OH2 OT -0.834000 15.9994 0 + 13252 W1 3588 TIP3 H1 HT 0.417000 1.0080 0 + 13253 W1 3588 TIP3 H2 HT 0.417000 1.0080 0 + 13254 W1 3589 TIP3 OH2 OT -0.834000 15.9994 0 + 13255 W1 3589 TIP3 H1 HT 0.417000 1.0080 0 + 13256 W1 3589 TIP3 H2 HT 0.417000 1.0080 0 + 13257 W1 3590 TIP3 OH2 OT -0.834000 15.9994 0 + 13258 W1 3590 TIP3 H1 HT 0.417000 1.0080 0 + 13259 W1 3590 TIP3 H2 HT 0.417000 1.0080 0 + 13260 W1 3591 TIP3 OH2 OT -0.834000 15.9994 0 + 13261 W1 3591 TIP3 H1 HT 0.417000 1.0080 0 + 13262 W1 3591 TIP3 H2 HT 0.417000 1.0080 0 + 13263 W1 3592 TIP3 OH2 OT -0.834000 15.9994 0 + 13264 W1 3592 TIP3 H1 HT 0.417000 1.0080 0 + 13265 W1 3592 TIP3 H2 HT 0.417000 1.0080 0 + 13266 W1 3593 TIP3 OH2 OT -0.834000 15.9994 0 + 13267 W1 3593 TIP3 H1 HT 0.417000 1.0080 0 + 13268 W1 3593 TIP3 H2 HT 0.417000 1.0080 0 + 13269 W1 3594 TIP3 OH2 OT -0.834000 15.9994 0 + 13270 W1 3594 TIP3 H1 HT 0.417000 1.0080 0 + 13271 W1 3594 TIP3 H2 HT 0.417000 1.0080 0 + 13272 W1 3595 TIP3 OH2 OT -0.834000 15.9994 0 + 13273 W1 3595 TIP3 H1 HT 0.417000 1.0080 0 + 13274 W1 3595 TIP3 H2 HT 0.417000 1.0080 0 + 13275 W1 3596 TIP3 OH2 OT -0.834000 15.9994 0 + 13276 W1 3596 TIP3 H1 HT 0.417000 1.0080 0 + 13277 W1 3596 TIP3 H2 HT 0.417000 1.0080 0 + 13278 W1 3597 TIP3 OH2 OT -0.834000 15.9994 0 + 13279 W1 3597 TIP3 H1 HT 0.417000 1.0080 0 + 13280 W1 3597 TIP3 H2 HT 0.417000 1.0080 0 + 13281 W1 3598 TIP3 OH2 OT -0.834000 15.9994 0 + 13282 W1 3598 TIP3 H1 HT 0.417000 1.0080 0 + 13283 W1 3598 TIP3 H2 HT 0.417000 1.0080 0 + 13284 W1 3599 TIP3 OH2 OT -0.834000 15.9994 0 + 13285 W1 3599 TIP3 H1 HT 0.417000 1.0080 0 + 13286 W1 3599 TIP3 H2 HT 0.417000 1.0080 0 + 13287 W1 3600 TIP3 OH2 OT -0.834000 15.9994 0 + 13288 W1 3600 TIP3 H1 HT 0.417000 1.0080 0 + 13289 W1 3600 TIP3 H2 HT 0.417000 1.0080 0 + 13290 W1 3601 TIP3 OH2 OT -0.834000 15.9994 0 + 13291 W1 3601 TIP3 H1 HT 0.417000 1.0080 0 + 13292 W1 3601 TIP3 H2 HT 0.417000 1.0080 0 + 13293 W1 3602 TIP3 OH2 OT -0.834000 15.9994 0 + 13294 W1 3602 TIP3 H1 HT 0.417000 1.0080 0 + 13295 W1 3602 TIP3 H2 HT 0.417000 1.0080 0 + 13296 W1 3603 TIP3 OH2 OT -0.834000 15.9994 0 + 13297 W1 3603 TIP3 H1 HT 0.417000 1.0080 0 + 13298 W1 3603 TIP3 H2 HT 0.417000 1.0080 0 + 13299 W1 3604 TIP3 OH2 OT -0.834000 15.9994 0 + 13300 W1 3604 TIP3 H1 HT 0.417000 1.0080 0 + 13301 W1 3604 TIP3 H2 HT 0.417000 1.0080 0 + 13302 W1 3605 TIP3 OH2 OT -0.834000 15.9994 0 + 13303 W1 3605 TIP3 H1 HT 0.417000 1.0080 0 + 13304 W1 3605 TIP3 H2 HT 0.417000 1.0080 0 + 13305 W1 3606 TIP3 OH2 OT -0.834000 15.9994 0 + 13306 W1 3606 TIP3 H1 HT 0.417000 1.0080 0 + 13307 W1 3606 TIP3 H2 HT 0.417000 1.0080 0 + 13308 W1 3607 TIP3 OH2 OT -0.834000 15.9994 0 + 13309 W1 3607 TIP3 H1 HT 0.417000 1.0080 0 + 13310 W1 3607 TIP3 H2 HT 0.417000 1.0080 0 + 13311 W1 3608 TIP3 OH2 OT -0.834000 15.9994 0 + 13312 W1 3608 TIP3 H1 HT 0.417000 1.0080 0 + 13313 W1 3608 TIP3 H2 HT 0.417000 1.0080 0 + 13314 W1 3609 TIP3 OH2 OT -0.834000 15.9994 0 + 13315 W1 3609 TIP3 H1 HT 0.417000 1.0080 0 + 13316 W1 3609 TIP3 H2 HT 0.417000 1.0080 0 + 13317 W1 3610 TIP3 OH2 OT -0.834000 15.9994 0 + 13318 W1 3610 TIP3 H1 HT 0.417000 1.0080 0 + 13319 W1 3610 TIP3 H2 HT 0.417000 1.0080 0 + 13320 W1 3611 TIP3 OH2 OT -0.834000 15.9994 0 + 13321 W1 3611 TIP3 H1 HT 0.417000 1.0080 0 + 13322 W1 3611 TIP3 H2 HT 0.417000 1.0080 0 + 13323 W1 3612 TIP3 OH2 OT -0.834000 15.9994 0 + 13324 W1 3612 TIP3 H1 HT 0.417000 1.0080 0 + 13325 W1 3612 TIP3 H2 HT 0.417000 1.0080 0 + 13326 W1 3613 TIP3 OH2 OT -0.834000 15.9994 0 + 13327 W1 3613 TIP3 H1 HT 0.417000 1.0080 0 + 13328 W1 3613 TIP3 H2 HT 0.417000 1.0080 0 + 13329 W1 3614 TIP3 OH2 OT -0.834000 15.9994 0 + 13330 W1 3614 TIP3 H1 HT 0.417000 1.0080 0 + 13331 W1 3614 TIP3 H2 HT 0.417000 1.0080 0 + 13332 W1 3615 TIP3 OH2 OT -0.834000 15.9994 0 + 13333 W1 3615 TIP3 H1 HT 0.417000 1.0080 0 + 13334 W1 3615 TIP3 H2 HT 0.417000 1.0080 0 + 13335 W1 3616 TIP3 OH2 OT -0.834000 15.9994 0 + 13336 W1 3616 TIP3 H1 HT 0.417000 1.0080 0 + 13337 W1 3616 TIP3 H2 HT 0.417000 1.0080 0 + 13338 W1 3617 TIP3 OH2 OT -0.834000 15.9994 0 + 13339 W1 3617 TIP3 H1 HT 0.417000 1.0080 0 + 13340 W1 3617 TIP3 H2 HT 0.417000 1.0080 0 + 13341 W1 3618 TIP3 OH2 OT -0.834000 15.9994 0 + 13342 W1 3618 TIP3 H1 HT 0.417000 1.0080 0 + 13343 W1 3618 TIP3 H2 HT 0.417000 1.0080 0 + 13344 W1 3619 TIP3 OH2 OT -0.834000 15.9994 0 + 13345 W1 3619 TIP3 H1 HT 0.417000 1.0080 0 + 13346 W1 3619 TIP3 H2 HT 0.417000 1.0080 0 + 13347 W1 3620 TIP3 OH2 OT -0.834000 15.9994 0 + 13348 W1 3620 TIP3 H1 HT 0.417000 1.0080 0 + 13349 W1 3620 TIP3 H2 HT 0.417000 1.0080 0 + 13350 W1 3621 TIP3 OH2 OT -0.834000 15.9994 0 + 13351 W1 3621 TIP3 H1 HT 0.417000 1.0080 0 + 13352 W1 3621 TIP3 H2 HT 0.417000 1.0080 0 + 13353 W1 3622 TIP3 OH2 OT -0.834000 15.9994 0 + 13354 W1 3622 TIP3 H1 HT 0.417000 1.0080 0 + 13355 W1 3622 TIP3 H2 HT 0.417000 1.0080 0 + 13356 W1 3623 TIP3 OH2 OT -0.834000 15.9994 0 + 13357 W1 3623 TIP3 H1 HT 0.417000 1.0080 0 + 13358 W1 3623 TIP3 H2 HT 0.417000 1.0080 0 + 13359 W1 3624 TIP3 OH2 OT -0.834000 15.9994 0 + 13360 W1 3624 TIP3 H1 HT 0.417000 1.0080 0 + 13361 W1 3624 TIP3 H2 HT 0.417000 1.0080 0 + 13362 W1 3625 TIP3 OH2 OT -0.834000 15.9994 0 + 13363 W1 3625 TIP3 H1 HT 0.417000 1.0080 0 + 13364 W1 3625 TIP3 H2 HT 0.417000 1.0080 0 + 13365 W1 3626 TIP3 OH2 OT -0.834000 15.9994 0 + 13366 W1 3626 TIP3 H1 HT 0.417000 1.0080 0 + 13367 W1 3626 TIP3 H2 HT 0.417000 1.0080 0 + 13368 W1 3627 TIP3 OH2 OT -0.834000 15.9994 0 + 13369 W1 3627 TIP3 H1 HT 0.417000 1.0080 0 + 13370 W1 3627 TIP3 H2 HT 0.417000 1.0080 0 + 13371 W1 3628 TIP3 OH2 OT -0.834000 15.9994 0 + 13372 W1 3628 TIP3 H1 HT 0.417000 1.0080 0 + 13373 W1 3628 TIP3 H2 HT 0.417000 1.0080 0 + 13374 W1 3629 TIP3 OH2 OT -0.834000 15.9994 0 + 13375 W1 3629 TIP3 H1 HT 0.417000 1.0080 0 + 13376 W1 3629 TIP3 H2 HT 0.417000 1.0080 0 + 13377 W1 3630 TIP3 OH2 OT -0.834000 15.9994 0 + 13378 W1 3630 TIP3 H1 HT 0.417000 1.0080 0 + 13379 W1 3630 TIP3 H2 HT 0.417000 1.0080 0 + 13380 W1 3631 TIP3 OH2 OT -0.834000 15.9994 0 + 13381 W1 3631 TIP3 H1 HT 0.417000 1.0080 0 + 13382 W1 3631 TIP3 H2 HT 0.417000 1.0080 0 + 13383 W1 3632 TIP3 OH2 OT -0.834000 15.9994 0 + 13384 W1 3632 TIP3 H1 HT 0.417000 1.0080 0 + 13385 W1 3632 TIP3 H2 HT 0.417000 1.0080 0 + 13386 W1 3633 TIP3 OH2 OT -0.834000 15.9994 0 + 13387 W1 3633 TIP3 H1 HT 0.417000 1.0080 0 + 13388 W1 3633 TIP3 H2 HT 0.417000 1.0080 0 + 13389 W1 3634 TIP3 OH2 OT -0.834000 15.9994 0 + 13390 W1 3634 TIP3 H1 HT 0.417000 1.0080 0 + 13391 W1 3634 TIP3 H2 HT 0.417000 1.0080 0 + 13392 W1 3635 TIP3 OH2 OT -0.834000 15.9994 0 + 13393 W1 3635 TIP3 H1 HT 0.417000 1.0080 0 + 13394 W1 3635 TIP3 H2 HT 0.417000 1.0080 0 + 13395 W1 3636 TIP3 OH2 OT -0.834000 15.9994 0 + 13396 W1 3636 TIP3 H1 HT 0.417000 1.0080 0 + 13397 W1 3636 TIP3 H2 HT 0.417000 1.0080 0 + 13398 W1 3637 TIP3 OH2 OT -0.834000 15.9994 0 + 13399 W1 3637 TIP3 H1 HT 0.417000 1.0080 0 + 13400 W1 3637 TIP3 H2 HT 0.417000 1.0080 0 + 13401 W1 3638 TIP3 OH2 OT -0.834000 15.9994 0 + 13402 W1 3638 TIP3 H1 HT 0.417000 1.0080 0 + 13403 W1 3638 TIP3 H2 HT 0.417000 1.0080 0 + 13404 W1 3639 TIP3 OH2 OT -0.834000 15.9994 0 + 13405 W1 3639 TIP3 H1 HT 0.417000 1.0080 0 + 13406 W1 3639 TIP3 H2 HT 0.417000 1.0080 0 + 13407 W1 3640 TIP3 OH2 OT -0.834000 15.9994 0 + 13408 W1 3640 TIP3 H1 HT 0.417000 1.0080 0 + 13409 W1 3640 TIP3 H2 HT 0.417000 1.0080 0 + 13410 W1 3641 TIP3 OH2 OT -0.834000 15.9994 0 + 13411 W1 3641 TIP3 H1 HT 0.417000 1.0080 0 + 13412 W1 3641 TIP3 H2 HT 0.417000 1.0080 0 + 13413 W1 3642 TIP3 OH2 OT -0.834000 15.9994 0 + 13414 W1 3642 TIP3 H1 HT 0.417000 1.0080 0 + 13415 W1 3642 TIP3 H2 HT 0.417000 1.0080 0 + 13416 W1 3643 TIP3 OH2 OT -0.834000 15.9994 0 + 13417 W1 3643 TIP3 H1 HT 0.417000 1.0080 0 + 13418 W1 3643 TIP3 H2 HT 0.417000 1.0080 0 + 13419 W1 3644 TIP3 OH2 OT -0.834000 15.9994 0 + 13420 W1 3644 TIP3 H1 HT 0.417000 1.0080 0 + 13421 W1 3644 TIP3 H2 HT 0.417000 1.0080 0 + 13422 W1 3645 TIP3 OH2 OT -0.834000 15.9994 0 + 13423 W1 3645 TIP3 H1 HT 0.417000 1.0080 0 + 13424 W1 3645 TIP3 H2 HT 0.417000 1.0080 0 + 13425 W1 3646 TIP3 OH2 OT -0.834000 15.9994 0 + 13426 W1 3646 TIP3 H1 HT 0.417000 1.0080 0 + 13427 W1 3646 TIP3 H2 HT 0.417000 1.0080 0 + 13428 W1 3647 TIP3 OH2 OT -0.834000 15.9994 0 + 13429 W1 3647 TIP3 H1 HT 0.417000 1.0080 0 + 13430 W1 3647 TIP3 H2 HT 0.417000 1.0080 0 + 13431 W1 3648 TIP3 OH2 OT -0.834000 15.9994 0 + 13432 W1 3648 TIP3 H1 HT 0.417000 1.0080 0 + 13433 W1 3648 TIP3 H2 HT 0.417000 1.0080 0 + 13434 W1 3649 TIP3 OH2 OT -0.834000 15.9994 0 + 13435 W1 3649 TIP3 H1 HT 0.417000 1.0080 0 + 13436 W1 3649 TIP3 H2 HT 0.417000 1.0080 0 + 13437 W1 3650 TIP3 OH2 OT -0.834000 15.9994 0 + 13438 W1 3650 TIP3 H1 HT 0.417000 1.0080 0 + 13439 W1 3650 TIP3 H2 HT 0.417000 1.0080 0 + 13440 W1 3651 TIP3 OH2 OT -0.834000 15.9994 0 + 13441 W1 3651 TIP3 H1 HT 0.417000 1.0080 0 + 13442 W1 3651 TIP3 H2 HT 0.417000 1.0080 0 + 13443 W1 3652 TIP3 OH2 OT -0.834000 15.9994 0 + 13444 W1 3652 TIP3 H1 HT 0.417000 1.0080 0 + 13445 W1 3652 TIP3 H2 HT 0.417000 1.0080 0 + 13446 W1 3653 TIP3 OH2 OT -0.834000 15.9994 0 + 13447 W1 3653 TIP3 H1 HT 0.417000 1.0080 0 + 13448 W1 3653 TIP3 H2 HT 0.417000 1.0080 0 + 13449 W1 3654 TIP3 OH2 OT -0.834000 15.9994 0 + 13450 W1 3654 TIP3 H1 HT 0.417000 1.0080 0 + 13451 W1 3654 TIP3 H2 HT 0.417000 1.0080 0 + 13452 W1 3655 TIP3 OH2 OT -0.834000 15.9994 0 + 13453 W1 3655 TIP3 H1 HT 0.417000 1.0080 0 + 13454 W1 3655 TIP3 H2 HT 0.417000 1.0080 0 + 13455 W1 3656 TIP3 OH2 OT -0.834000 15.9994 0 + 13456 W1 3656 TIP3 H1 HT 0.417000 1.0080 0 + 13457 W1 3656 TIP3 H2 HT 0.417000 1.0080 0 + 13458 W1 3657 TIP3 OH2 OT -0.834000 15.9994 0 + 13459 W1 3657 TIP3 H1 HT 0.417000 1.0080 0 + 13460 W1 3657 TIP3 H2 HT 0.417000 1.0080 0 + 13461 W1 3658 TIP3 OH2 OT -0.834000 15.9994 0 + 13462 W1 3658 TIP3 H1 HT 0.417000 1.0080 0 + 13463 W1 3658 TIP3 H2 HT 0.417000 1.0080 0 + 13464 W1 3659 TIP3 OH2 OT -0.834000 15.9994 0 + 13465 W1 3659 TIP3 H1 HT 0.417000 1.0080 0 + 13466 W1 3659 TIP3 H2 HT 0.417000 1.0080 0 + 13467 W1 3660 TIP3 OH2 OT -0.834000 15.9994 0 + 13468 W1 3660 TIP3 H1 HT 0.417000 1.0080 0 + 13469 W1 3660 TIP3 H2 HT 0.417000 1.0080 0 + 13470 W1 3661 TIP3 OH2 OT -0.834000 15.9994 0 + 13471 W1 3661 TIP3 H1 HT 0.417000 1.0080 0 + 13472 W1 3661 TIP3 H2 HT 0.417000 1.0080 0 + 13473 W1 3662 TIP3 OH2 OT -0.834000 15.9994 0 + 13474 W1 3662 TIP3 H1 HT 0.417000 1.0080 0 + 13475 W1 3662 TIP3 H2 HT 0.417000 1.0080 0 + 13476 W1 3663 TIP3 OH2 OT -0.834000 15.9994 0 + 13477 W1 3663 TIP3 H1 HT 0.417000 1.0080 0 + 13478 W1 3663 TIP3 H2 HT 0.417000 1.0080 0 + 13479 W1 3664 TIP3 OH2 OT -0.834000 15.9994 0 + 13480 W1 3664 TIP3 H1 HT 0.417000 1.0080 0 + 13481 W1 3664 TIP3 H2 HT 0.417000 1.0080 0 + 13482 W1 3665 TIP3 OH2 OT -0.834000 15.9994 0 + 13483 W1 3665 TIP3 H1 HT 0.417000 1.0080 0 + 13484 W1 3665 TIP3 H2 HT 0.417000 1.0080 0 + 13485 W1 3666 TIP3 OH2 OT -0.834000 15.9994 0 + 13486 W1 3666 TIP3 H1 HT 0.417000 1.0080 0 + 13487 W1 3666 TIP3 H2 HT 0.417000 1.0080 0 + 13488 W1 3667 TIP3 OH2 OT -0.834000 15.9994 0 + 13489 W1 3667 TIP3 H1 HT 0.417000 1.0080 0 + 13490 W1 3667 TIP3 H2 HT 0.417000 1.0080 0 + 13491 W1 3668 TIP3 OH2 OT -0.834000 15.9994 0 + 13492 W1 3668 TIP3 H1 HT 0.417000 1.0080 0 + 13493 W1 3668 TIP3 H2 HT 0.417000 1.0080 0 + 13494 W1 3669 TIP3 OH2 OT -0.834000 15.9994 0 + 13495 W1 3669 TIP3 H1 HT 0.417000 1.0080 0 + 13496 W1 3669 TIP3 H2 HT 0.417000 1.0080 0 + 13497 W1 3670 TIP3 OH2 OT -0.834000 15.9994 0 + 13498 W1 3670 TIP3 H1 HT 0.417000 1.0080 0 + 13499 W1 3670 TIP3 H2 HT 0.417000 1.0080 0 + 13500 W1 3671 TIP3 OH2 OT -0.834000 15.9994 0 + 13501 W1 3671 TIP3 H1 HT 0.417000 1.0080 0 + 13502 W1 3671 TIP3 H2 HT 0.417000 1.0080 0 + 13503 W1 3672 TIP3 OH2 OT -0.834000 15.9994 0 + 13504 W1 3672 TIP3 H1 HT 0.417000 1.0080 0 + 13505 W1 3672 TIP3 H2 HT 0.417000 1.0080 0 + 13506 W1 3673 TIP3 OH2 OT -0.834000 15.9994 0 + 13507 W1 3673 TIP3 H1 HT 0.417000 1.0080 0 + 13508 W1 3673 TIP3 H2 HT 0.417000 1.0080 0 + 13509 W1 3674 TIP3 OH2 OT -0.834000 15.9994 0 + 13510 W1 3674 TIP3 H1 HT 0.417000 1.0080 0 + 13511 W1 3674 TIP3 H2 HT 0.417000 1.0080 0 + 13512 W1 3675 TIP3 OH2 OT -0.834000 15.9994 0 + 13513 W1 3675 TIP3 H1 HT 0.417000 1.0080 0 + 13514 W1 3675 TIP3 H2 HT 0.417000 1.0080 0 + 13515 W1 3676 TIP3 OH2 OT -0.834000 15.9994 0 + 13516 W1 3676 TIP3 H1 HT 0.417000 1.0080 0 + 13517 W1 3676 TIP3 H2 HT 0.417000 1.0080 0 + 13518 W1 3677 TIP3 OH2 OT -0.834000 15.9994 0 + 13519 W1 3677 TIP3 H1 HT 0.417000 1.0080 0 + 13520 W1 3677 TIP3 H2 HT 0.417000 1.0080 0 + 13521 W1 3678 TIP3 OH2 OT -0.834000 15.9994 0 + 13522 W1 3678 TIP3 H1 HT 0.417000 1.0080 0 + 13523 W1 3678 TIP3 H2 HT 0.417000 1.0080 0 + 13524 W1 3679 TIP3 OH2 OT -0.834000 15.9994 0 + 13525 W1 3679 TIP3 H1 HT 0.417000 1.0080 0 + 13526 W1 3679 TIP3 H2 HT 0.417000 1.0080 0 + 13527 W1 3680 TIP3 OH2 OT -0.834000 15.9994 0 + 13528 W1 3680 TIP3 H1 HT 0.417000 1.0080 0 + 13529 W1 3680 TIP3 H2 HT 0.417000 1.0080 0 + 13530 W1 3681 TIP3 OH2 OT -0.834000 15.9994 0 + 13531 W1 3681 TIP3 H1 HT 0.417000 1.0080 0 + 13532 W1 3681 TIP3 H2 HT 0.417000 1.0080 0 + 13533 W1 3682 TIP3 OH2 OT -0.834000 15.9994 0 + 13534 W1 3682 TIP3 H1 HT 0.417000 1.0080 0 + 13535 W1 3682 TIP3 H2 HT 0.417000 1.0080 0 + 13536 W1 3683 TIP3 OH2 OT -0.834000 15.9994 0 + 13537 W1 3683 TIP3 H1 HT 0.417000 1.0080 0 + 13538 W1 3683 TIP3 H2 HT 0.417000 1.0080 0 + 13539 W1 3684 TIP3 OH2 OT -0.834000 15.9994 0 + 13540 W1 3684 TIP3 H1 HT 0.417000 1.0080 0 + 13541 W1 3684 TIP3 H2 HT 0.417000 1.0080 0 + 13542 W1 3685 TIP3 OH2 OT -0.834000 15.9994 0 + 13543 W1 3685 TIP3 H1 HT 0.417000 1.0080 0 + 13544 W1 3685 TIP3 H2 HT 0.417000 1.0080 0 + 13545 W1 3686 TIP3 OH2 OT -0.834000 15.9994 0 + 13546 W1 3686 TIP3 H1 HT 0.417000 1.0080 0 + 13547 W1 3686 TIP3 H2 HT 0.417000 1.0080 0 + 13548 W1 3687 TIP3 OH2 OT -0.834000 15.9994 0 + 13549 W1 3687 TIP3 H1 HT 0.417000 1.0080 0 + 13550 W1 3687 TIP3 H2 HT 0.417000 1.0080 0 + 13551 W1 3688 TIP3 OH2 OT -0.834000 15.9994 0 + 13552 W1 3688 TIP3 H1 HT 0.417000 1.0080 0 + 13553 W1 3688 TIP3 H2 HT 0.417000 1.0080 0 + 13554 W1 3689 TIP3 OH2 OT -0.834000 15.9994 0 + 13555 W1 3689 TIP3 H1 HT 0.417000 1.0080 0 + 13556 W1 3689 TIP3 H2 HT 0.417000 1.0080 0 + 13557 W1 3690 TIP3 OH2 OT -0.834000 15.9994 0 + 13558 W1 3690 TIP3 H1 HT 0.417000 1.0080 0 + 13559 W1 3690 TIP3 H2 HT 0.417000 1.0080 0 + 13560 W1 3691 TIP3 OH2 OT -0.834000 15.9994 0 + 13561 W1 3691 TIP3 H1 HT 0.417000 1.0080 0 + 13562 W1 3691 TIP3 H2 HT 0.417000 1.0080 0 + 13563 W1 3692 TIP3 OH2 OT -0.834000 15.9994 0 + 13564 W1 3692 TIP3 H1 HT 0.417000 1.0080 0 + 13565 W1 3692 TIP3 H2 HT 0.417000 1.0080 0 + 13566 W1 3693 TIP3 OH2 OT -0.834000 15.9994 0 + 13567 W1 3693 TIP3 H1 HT 0.417000 1.0080 0 + 13568 W1 3693 TIP3 H2 HT 0.417000 1.0080 0 + 13569 W1 3694 TIP3 OH2 OT -0.834000 15.9994 0 + 13570 W1 3694 TIP3 H1 HT 0.417000 1.0080 0 + 13571 W1 3694 TIP3 H2 HT 0.417000 1.0080 0 + 13572 W1 3695 TIP3 OH2 OT -0.834000 15.9994 0 + 13573 W1 3695 TIP3 H1 HT 0.417000 1.0080 0 + 13574 W1 3695 TIP3 H2 HT 0.417000 1.0080 0 + 13575 W1 3696 TIP3 OH2 OT -0.834000 15.9994 0 + 13576 W1 3696 TIP3 H1 HT 0.417000 1.0080 0 + 13577 W1 3696 TIP3 H2 HT 0.417000 1.0080 0 + 13578 W1 3697 TIP3 OH2 OT -0.834000 15.9994 0 + 13579 W1 3697 TIP3 H1 HT 0.417000 1.0080 0 + 13580 W1 3697 TIP3 H2 HT 0.417000 1.0080 0 + 13581 W1 3698 TIP3 OH2 OT -0.834000 15.9994 0 + 13582 W1 3698 TIP3 H1 HT 0.417000 1.0080 0 + 13583 W1 3698 TIP3 H2 HT 0.417000 1.0080 0 + 13584 W1 3699 TIP3 OH2 OT -0.834000 15.9994 0 + 13585 W1 3699 TIP3 H1 HT 0.417000 1.0080 0 + 13586 W1 3699 TIP3 H2 HT 0.417000 1.0080 0 + 13587 W1 3700 TIP3 OH2 OT -0.834000 15.9994 0 + 13588 W1 3700 TIP3 H1 HT 0.417000 1.0080 0 + 13589 W1 3700 TIP3 H2 HT 0.417000 1.0080 0 + 13590 W1 3701 TIP3 OH2 OT -0.834000 15.9994 0 + 13591 W1 3701 TIP3 H1 HT 0.417000 1.0080 0 + 13592 W1 3701 TIP3 H2 HT 0.417000 1.0080 0 + 13593 W1 3702 TIP3 OH2 OT -0.834000 15.9994 0 + 13594 W1 3702 TIP3 H1 HT 0.417000 1.0080 0 + 13595 W1 3702 TIP3 H2 HT 0.417000 1.0080 0 + 13596 W1 3703 TIP3 OH2 OT -0.834000 15.9994 0 + 13597 W1 3703 TIP3 H1 HT 0.417000 1.0080 0 + 13598 W1 3703 TIP3 H2 HT 0.417000 1.0080 0 + 13599 W1 3704 TIP3 OH2 OT -0.834000 15.9994 0 + 13600 W1 3704 TIP3 H1 HT 0.417000 1.0080 0 + 13601 W1 3704 TIP3 H2 HT 0.417000 1.0080 0 + 13602 W1 3705 TIP3 OH2 OT -0.834000 15.9994 0 + 13603 W1 3705 TIP3 H1 HT 0.417000 1.0080 0 + 13604 W1 3705 TIP3 H2 HT 0.417000 1.0080 0 + 13605 W1 3706 TIP3 OH2 OT -0.834000 15.9994 0 + 13606 W1 3706 TIP3 H1 HT 0.417000 1.0080 0 + 13607 W1 3706 TIP3 H2 HT 0.417000 1.0080 0 + 13608 W1 3707 TIP3 OH2 OT -0.834000 15.9994 0 + 13609 W1 3707 TIP3 H1 HT 0.417000 1.0080 0 + 13610 W1 3707 TIP3 H2 HT 0.417000 1.0080 0 + 13611 W1 3708 TIP3 OH2 OT -0.834000 15.9994 0 + 13612 W1 3708 TIP3 H1 HT 0.417000 1.0080 0 + 13613 W1 3708 TIP3 H2 HT 0.417000 1.0080 0 + 13614 W1 3709 TIP3 OH2 OT -0.834000 15.9994 0 + 13615 W1 3709 TIP3 H1 HT 0.417000 1.0080 0 + 13616 W1 3709 TIP3 H2 HT 0.417000 1.0080 0 + 13617 W1 3710 TIP3 OH2 OT -0.834000 15.9994 0 + 13618 W1 3710 TIP3 H1 HT 0.417000 1.0080 0 + 13619 W1 3710 TIP3 H2 HT 0.417000 1.0080 0 + 13620 W1 3711 TIP3 OH2 OT -0.834000 15.9994 0 + 13621 W1 3711 TIP3 H1 HT 0.417000 1.0080 0 + 13622 W1 3711 TIP3 H2 HT 0.417000 1.0080 0 + 13623 W1 3712 TIP3 OH2 OT -0.834000 15.9994 0 + 13624 W1 3712 TIP3 H1 HT 0.417000 1.0080 0 + 13625 W1 3712 TIP3 H2 HT 0.417000 1.0080 0 + 13626 W1 3713 TIP3 OH2 OT -0.834000 15.9994 0 + 13627 W1 3713 TIP3 H1 HT 0.417000 1.0080 0 + 13628 W1 3713 TIP3 H2 HT 0.417000 1.0080 0 + 13629 W1 3714 TIP3 OH2 OT -0.834000 15.9994 0 + 13630 W1 3714 TIP3 H1 HT 0.417000 1.0080 0 + 13631 W1 3714 TIP3 H2 HT 0.417000 1.0080 0 + 13632 W1 3715 TIP3 OH2 OT -0.834000 15.9994 0 + 13633 W1 3715 TIP3 H1 HT 0.417000 1.0080 0 + 13634 W1 3715 TIP3 H2 HT 0.417000 1.0080 0 + 13635 W1 3716 TIP3 OH2 OT -0.834000 15.9994 0 + 13636 W1 3716 TIP3 H1 HT 0.417000 1.0080 0 + 13637 W1 3716 TIP3 H2 HT 0.417000 1.0080 0 + 13638 W1 3717 TIP3 OH2 OT -0.834000 15.9994 0 + 13639 W1 3717 TIP3 H1 HT 0.417000 1.0080 0 + 13640 W1 3717 TIP3 H2 HT 0.417000 1.0080 0 + 13641 W1 3718 TIP3 OH2 OT -0.834000 15.9994 0 + 13642 W1 3718 TIP3 H1 HT 0.417000 1.0080 0 + 13643 W1 3718 TIP3 H2 HT 0.417000 1.0080 0 + 13644 W1 3719 TIP3 OH2 OT -0.834000 15.9994 0 + 13645 W1 3719 TIP3 H1 HT 0.417000 1.0080 0 + 13646 W1 3719 TIP3 H2 HT 0.417000 1.0080 0 + 13647 W1 3720 TIP3 OH2 OT -0.834000 15.9994 0 + 13648 W1 3720 TIP3 H1 HT 0.417000 1.0080 0 + 13649 W1 3720 TIP3 H2 HT 0.417000 1.0080 0 + 13650 W1 3721 TIP3 OH2 OT -0.834000 15.9994 0 + 13651 W1 3721 TIP3 H1 HT 0.417000 1.0080 0 + 13652 W1 3721 TIP3 H2 HT 0.417000 1.0080 0 + 13653 W1 3722 TIP3 OH2 OT -0.834000 15.9994 0 + 13654 W1 3722 TIP3 H1 HT 0.417000 1.0080 0 + 13655 W1 3722 TIP3 H2 HT 0.417000 1.0080 0 + 13656 W1 3723 TIP3 OH2 OT -0.834000 15.9994 0 + 13657 W1 3723 TIP3 H1 HT 0.417000 1.0080 0 + 13658 W1 3723 TIP3 H2 HT 0.417000 1.0080 0 + 13659 W1 3724 TIP3 OH2 OT -0.834000 15.9994 0 + 13660 W1 3724 TIP3 H1 HT 0.417000 1.0080 0 + 13661 W1 3724 TIP3 H2 HT 0.417000 1.0080 0 + 13662 W1 3725 TIP3 OH2 OT -0.834000 15.9994 0 + 13663 W1 3725 TIP3 H1 HT 0.417000 1.0080 0 + 13664 W1 3725 TIP3 H2 HT 0.417000 1.0080 0 + 13665 W1 3726 TIP3 OH2 OT -0.834000 15.9994 0 + 13666 W1 3726 TIP3 H1 HT 0.417000 1.0080 0 + 13667 W1 3726 TIP3 H2 HT 0.417000 1.0080 0 + 13668 W1 3727 TIP3 OH2 OT -0.834000 15.9994 0 + 13669 W1 3727 TIP3 H1 HT 0.417000 1.0080 0 + 13670 W1 3727 TIP3 H2 HT 0.417000 1.0080 0 + 13671 W1 3728 TIP3 OH2 OT -0.834000 15.9994 0 + 13672 W1 3728 TIP3 H1 HT 0.417000 1.0080 0 + 13673 W1 3728 TIP3 H2 HT 0.417000 1.0080 0 + 13674 W1 3729 TIP3 OH2 OT -0.834000 15.9994 0 + 13675 W1 3729 TIP3 H1 HT 0.417000 1.0080 0 + 13676 W1 3729 TIP3 H2 HT 0.417000 1.0080 0 + 13677 W1 3730 TIP3 OH2 OT -0.834000 15.9994 0 + 13678 W1 3730 TIP3 H1 HT 0.417000 1.0080 0 + 13679 W1 3730 TIP3 H2 HT 0.417000 1.0080 0 + 13680 W1 3731 TIP3 OH2 OT -0.834000 15.9994 0 + 13681 W1 3731 TIP3 H1 HT 0.417000 1.0080 0 + 13682 W1 3731 TIP3 H2 HT 0.417000 1.0080 0 + 13683 W1 3732 TIP3 OH2 OT -0.834000 15.9994 0 + 13684 W1 3732 TIP3 H1 HT 0.417000 1.0080 0 + 13685 W1 3732 TIP3 H2 HT 0.417000 1.0080 0 + 13686 W1 3733 TIP3 OH2 OT -0.834000 15.9994 0 + 13687 W1 3733 TIP3 H1 HT 0.417000 1.0080 0 + 13688 W1 3733 TIP3 H2 HT 0.417000 1.0080 0 + 13689 W1 3734 TIP3 OH2 OT -0.834000 15.9994 0 + 13690 W1 3734 TIP3 H1 HT 0.417000 1.0080 0 + 13691 W1 3734 TIP3 H2 HT 0.417000 1.0080 0 + 13692 W1 3735 TIP3 OH2 OT -0.834000 15.9994 0 + 13693 W1 3735 TIP3 H1 HT 0.417000 1.0080 0 + 13694 W1 3735 TIP3 H2 HT 0.417000 1.0080 0 + 13695 W1 3736 TIP3 OH2 OT -0.834000 15.9994 0 + 13696 W1 3736 TIP3 H1 HT 0.417000 1.0080 0 + 13697 W1 3736 TIP3 H2 HT 0.417000 1.0080 0 + 13698 W1 3737 TIP3 OH2 OT -0.834000 15.9994 0 + 13699 W1 3737 TIP3 H1 HT 0.417000 1.0080 0 + 13700 W1 3737 TIP3 H2 HT 0.417000 1.0080 0 + 13701 W1 3738 TIP3 OH2 OT -0.834000 15.9994 0 + 13702 W1 3738 TIP3 H1 HT 0.417000 1.0080 0 + 13703 W1 3738 TIP3 H2 HT 0.417000 1.0080 0 + 13704 W1 3739 TIP3 OH2 OT -0.834000 15.9994 0 + 13705 W1 3739 TIP3 H1 HT 0.417000 1.0080 0 + 13706 W1 3739 TIP3 H2 HT 0.417000 1.0080 0 + 13707 W1 3740 TIP3 OH2 OT -0.834000 15.9994 0 + 13708 W1 3740 TIP3 H1 HT 0.417000 1.0080 0 + 13709 W1 3740 TIP3 H2 HT 0.417000 1.0080 0 + 13710 W1 3741 TIP3 OH2 OT -0.834000 15.9994 0 + 13711 W1 3741 TIP3 H1 HT 0.417000 1.0080 0 + 13712 W1 3741 TIP3 H2 HT 0.417000 1.0080 0 + 13713 W1 3742 TIP3 OH2 OT -0.834000 15.9994 0 + 13714 W1 3742 TIP3 H1 HT 0.417000 1.0080 0 + 13715 W1 3742 TIP3 H2 HT 0.417000 1.0080 0 + 13716 W1 3743 TIP3 OH2 OT -0.834000 15.9994 0 + 13717 W1 3743 TIP3 H1 HT 0.417000 1.0080 0 + 13718 W1 3743 TIP3 H2 HT 0.417000 1.0080 0 + 13719 W1 3744 TIP3 OH2 OT -0.834000 15.9994 0 + 13720 W1 3744 TIP3 H1 HT 0.417000 1.0080 0 + 13721 W1 3744 TIP3 H2 HT 0.417000 1.0080 0 + 13722 W1 3745 TIP3 OH2 OT -0.834000 15.9994 0 + 13723 W1 3745 TIP3 H1 HT 0.417000 1.0080 0 + 13724 W1 3745 TIP3 H2 HT 0.417000 1.0080 0 + 13725 W1 3746 TIP3 OH2 OT -0.834000 15.9994 0 + 13726 W1 3746 TIP3 H1 HT 0.417000 1.0080 0 + 13727 W1 3746 TIP3 H2 HT 0.417000 1.0080 0 + 13728 W1 3747 TIP3 OH2 OT -0.834000 15.9994 0 + 13729 W1 3747 TIP3 H1 HT 0.417000 1.0080 0 + 13730 W1 3747 TIP3 H2 HT 0.417000 1.0080 0 + 13731 W1 3748 TIP3 OH2 OT -0.834000 15.9994 0 + 13732 W1 3748 TIP3 H1 HT 0.417000 1.0080 0 + 13733 W1 3748 TIP3 H2 HT 0.417000 1.0080 0 + 13734 W1 3749 TIP3 OH2 OT -0.834000 15.9994 0 + 13735 W1 3749 TIP3 H1 HT 0.417000 1.0080 0 + 13736 W1 3749 TIP3 H2 HT 0.417000 1.0080 0 + 13737 W1 3750 TIP3 OH2 OT -0.834000 15.9994 0 + 13738 W1 3750 TIP3 H1 HT 0.417000 1.0080 0 + 13739 W1 3750 TIP3 H2 HT 0.417000 1.0080 0 + 13740 W1 3751 TIP3 OH2 OT -0.834000 15.9994 0 + 13741 W1 3751 TIP3 H1 HT 0.417000 1.0080 0 + 13742 W1 3751 TIP3 H2 HT 0.417000 1.0080 0 + 13743 W1 3752 TIP3 OH2 OT -0.834000 15.9994 0 + 13744 W1 3752 TIP3 H1 HT 0.417000 1.0080 0 + 13745 W1 3752 TIP3 H2 HT 0.417000 1.0080 0 + 13746 W1 3753 TIP3 OH2 OT -0.834000 15.9994 0 + 13747 W1 3753 TIP3 H1 HT 0.417000 1.0080 0 + 13748 W1 3753 TIP3 H2 HT 0.417000 1.0080 0 + 13749 W1 3754 TIP3 OH2 OT -0.834000 15.9994 0 + 13750 W1 3754 TIP3 H1 HT 0.417000 1.0080 0 + 13751 W1 3754 TIP3 H2 HT 0.417000 1.0080 0 + 13752 W1 3755 TIP3 OH2 OT -0.834000 15.9994 0 + 13753 W1 3755 TIP3 H1 HT 0.417000 1.0080 0 + 13754 W1 3755 TIP3 H2 HT 0.417000 1.0080 0 + 13755 W1 3756 TIP3 OH2 OT -0.834000 15.9994 0 + 13756 W1 3756 TIP3 H1 HT 0.417000 1.0080 0 + 13757 W1 3756 TIP3 H2 HT 0.417000 1.0080 0 + 13758 W1 3757 TIP3 OH2 OT -0.834000 15.9994 0 + 13759 W1 3757 TIP3 H1 HT 0.417000 1.0080 0 + 13760 W1 3757 TIP3 H2 HT 0.417000 1.0080 0 + 13761 W1 3758 TIP3 OH2 OT -0.834000 15.9994 0 + 13762 W1 3758 TIP3 H1 HT 0.417000 1.0080 0 + 13763 W1 3758 TIP3 H2 HT 0.417000 1.0080 0 + 13764 W1 3759 TIP3 OH2 OT -0.834000 15.9994 0 + 13765 W1 3759 TIP3 H1 HT 0.417000 1.0080 0 + 13766 W1 3759 TIP3 H2 HT 0.417000 1.0080 0 + 13767 W1 3760 TIP3 OH2 OT -0.834000 15.9994 0 + 13768 W1 3760 TIP3 H1 HT 0.417000 1.0080 0 + 13769 W1 3760 TIP3 H2 HT 0.417000 1.0080 0 + 13770 W1 3761 TIP3 OH2 OT -0.834000 15.9994 0 + 13771 W1 3761 TIP3 H1 HT 0.417000 1.0080 0 + 13772 W1 3761 TIP3 H2 HT 0.417000 1.0080 0 + 13773 W1 3762 TIP3 OH2 OT -0.834000 15.9994 0 + 13774 W1 3762 TIP3 H1 HT 0.417000 1.0080 0 + 13775 W1 3762 TIP3 H2 HT 0.417000 1.0080 0 + 13776 W1 3763 TIP3 OH2 OT -0.834000 15.9994 0 + 13777 W1 3763 TIP3 H1 HT 0.417000 1.0080 0 + 13778 W1 3763 TIP3 H2 HT 0.417000 1.0080 0 + 13779 W1 3764 TIP3 OH2 OT -0.834000 15.9994 0 + 13780 W1 3764 TIP3 H1 HT 0.417000 1.0080 0 + 13781 W1 3764 TIP3 H2 HT 0.417000 1.0080 0 + 13782 W1 3765 TIP3 OH2 OT -0.834000 15.9994 0 + 13783 W1 3765 TIP3 H1 HT 0.417000 1.0080 0 + 13784 W1 3765 TIP3 H2 HT 0.417000 1.0080 0 + 13785 W1 3766 TIP3 OH2 OT -0.834000 15.9994 0 + 13786 W1 3766 TIP3 H1 HT 0.417000 1.0080 0 + 13787 W1 3766 TIP3 H2 HT 0.417000 1.0080 0 + 13788 W1 3767 TIP3 OH2 OT -0.834000 15.9994 0 + 13789 W1 3767 TIP3 H1 HT 0.417000 1.0080 0 + 13790 W1 3767 TIP3 H2 HT 0.417000 1.0080 0 + 13791 W1 3768 TIP3 OH2 OT -0.834000 15.9994 0 + 13792 W1 3768 TIP3 H1 HT 0.417000 1.0080 0 + 13793 W1 3768 TIP3 H2 HT 0.417000 1.0080 0 + 13794 W1 3769 TIP3 OH2 OT -0.834000 15.9994 0 + 13795 W1 3769 TIP3 H1 HT 0.417000 1.0080 0 + 13796 W1 3769 TIP3 H2 HT 0.417000 1.0080 0 + 13797 W1 3770 TIP3 OH2 OT -0.834000 15.9994 0 + 13798 W1 3770 TIP3 H1 HT 0.417000 1.0080 0 + 13799 W1 3770 TIP3 H2 HT 0.417000 1.0080 0 + 13800 W1 3771 TIP3 OH2 OT -0.834000 15.9994 0 + 13801 W1 3771 TIP3 H1 HT 0.417000 1.0080 0 + 13802 W1 3771 TIP3 H2 HT 0.417000 1.0080 0 + 13803 W1 3772 TIP3 OH2 OT -0.834000 15.9994 0 + 13804 W1 3772 TIP3 H1 HT 0.417000 1.0080 0 + 13805 W1 3772 TIP3 H2 HT 0.417000 1.0080 0 + 13806 W1 3773 TIP3 OH2 OT -0.834000 15.9994 0 + 13807 W1 3773 TIP3 H1 HT 0.417000 1.0080 0 + 13808 W1 3773 TIP3 H2 HT 0.417000 1.0080 0 + 13809 W1 3774 TIP3 OH2 OT -0.834000 15.9994 0 + 13810 W1 3774 TIP3 H1 HT 0.417000 1.0080 0 + 13811 W1 3774 TIP3 H2 HT 0.417000 1.0080 0 + 13812 W1 3775 TIP3 OH2 OT -0.834000 15.9994 0 + 13813 W1 3775 TIP3 H1 HT 0.417000 1.0080 0 + 13814 W1 3775 TIP3 H2 HT 0.417000 1.0080 0 + 13815 W1 3776 TIP3 OH2 OT -0.834000 15.9994 0 + 13816 W1 3776 TIP3 H1 HT 0.417000 1.0080 0 + 13817 W1 3776 TIP3 H2 HT 0.417000 1.0080 0 + 13818 W1 3777 TIP3 OH2 OT -0.834000 15.9994 0 + 13819 W1 3777 TIP3 H1 HT 0.417000 1.0080 0 + 13820 W1 3777 TIP3 H2 HT 0.417000 1.0080 0 + 13821 W1 3778 TIP3 OH2 OT -0.834000 15.9994 0 + 13822 W1 3778 TIP3 H1 HT 0.417000 1.0080 0 + 13823 W1 3778 TIP3 H2 HT 0.417000 1.0080 0 + 13824 W1 3779 TIP3 OH2 OT -0.834000 15.9994 0 + 13825 W1 3779 TIP3 H1 HT 0.417000 1.0080 0 + 13826 W1 3779 TIP3 H2 HT 0.417000 1.0080 0 + 13827 W1 3780 TIP3 OH2 OT -0.834000 15.9994 0 + 13828 W1 3780 TIP3 H1 HT 0.417000 1.0080 0 + 13829 W1 3780 TIP3 H2 HT 0.417000 1.0080 0 + 13830 W1 3781 TIP3 OH2 OT -0.834000 15.9994 0 + 13831 W1 3781 TIP3 H1 HT 0.417000 1.0080 0 + 13832 W1 3781 TIP3 H2 HT 0.417000 1.0080 0 + 13833 W1 3782 TIP3 OH2 OT -0.834000 15.9994 0 + 13834 W1 3782 TIP3 H1 HT 0.417000 1.0080 0 + 13835 W1 3782 TIP3 H2 HT 0.417000 1.0080 0 + 13836 W1 3783 TIP3 OH2 OT -0.834000 15.9994 0 + 13837 W1 3783 TIP3 H1 HT 0.417000 1.0080 0 + 13838 W1 3783 TIP3 H2 HT 0.417000 1.0080 0 + 13839 W1 3784 TIP3 OH2 OT -0.834000 15.9994 0 + 13840 W1 3784 TIP3 H1 HT 0.417000 1.0080 0 + 13841 W1 3784 TIP3 H2 HT 0.417000 1.0080 0 + 13842 W1 3785 TIP3 OH2 OT -0.834000 15.9994 0 + 13843 W1 3785 TIP3 H1 HT 0.417000 1.0080 0 + 13844 W1 3785 TIP3 H2 HT 0.417000 1.0080 0 + 13845 W1 3786 TIP3 OH2 OT -0.834000 15.9994 0 + 13846 W1 3786 TIP3 H1 HT 0.417000 1.0080 0 + 13847 W1 3786 TIP3 H2 HT 0.417000 1.0080 0 + 13848 W1 3787 TIP3 OH2 OT -0.834000 15.9994 0 + 13849 W1 3787 TIP3 H1 HT 0.417000 1.0080 0 + 13850 W1 3787 TIP3 H2 HT 0.417000 1.0080 0 + 13851 W1 3788 TIP3 OH2 OT -0.834000 15.9994 0 + 13852 W1 3788 TIP3 H1 HT 0.417000 1.0080 0 + 13853 W1 3788 TIP3 H2 HT 0.417000 1.0080 0 + 13854 W1 3789 TIP3 OH2 OT -0.834000 15.9994 0 + 13855 W1 3789 TIP3 H1 HT 0.417000 1.0080 0 + 13856 W1 3789 TIP3 H2 HT 0.417000 1.0080 0 + 13857 W1 3790 TIP3 OH2 OT -0.834000 15.9994 0 + 13858 W1 3790 TIP3 H1 HT 0.417000 1.0080 0 + 13859 W1 3790 TIP3 H2 HT 0.417000 1.0080 0 + 13860 W1 3791 TIP3 OH2 OT -0.834000 15.9994 0 + 13861 W1 3791 TIP3 H1 HT 0.417000 1.0080 0 + 13862 W1 3791 TIP3 H2 HT 0.417000 1.0080 0 + 13863 W1 3792 TIP3 OH2 OT -0.834000 15.9994 0 + 13864 W1 3792 TIP3 H1 HT 0.417000 1.0080 0 + 13865 W1 3792 TIP3 H2 HT 0.417000 1.0080 0 + 13866 W1 3793 TIP3 OH2 OT -0.834000 15.9994 0 + 13867 W1 3793 TIP3 H1 HT 0.417000 1.0080 0 + 13868 W1 3793 TIP3 H2 HT 0.417000 1.0080 0 + 13869 W1 3794 TIP3 OH2 OT -0.834000 15.9994 0 + 13870 W1 3794 TIP3 H1 HT 0.417000 1.0080 0 + 13871 W1 3794 TIP3 H2 HT 0.417000 1.0080 0 + 13872 W1 3795 TIP3 OH2 OT -0.834000 15.9994 0 + 13873 W1 3795 TIP3 H1 HT 0.417000 1.0080 0 + 13874 W1 3795 TIP3 H2 HT 0.417000 1.0080 0 + 13875 W1 3796 TIP3 OH2 OT -0.834000 15.9994 0 + 13876 W1 3796 TIP3 H1 HT 0.417000 1.0080 0 + 13877 W1 3796 TIP3 H2 HT 0.417000 1.0080 0 + 13878 W1 3797 TIP3 OH2 OT -0.834000 15.9994 0 + 13879 W1 3797 TIP3 H1 HT 0.417000 1.0080 0 + 13880 W1 3797 TIP3 H2 HT 0.417000 1.0080 0 + 13881 W1 3798 TIP3 OH2 OT -0.834000 15.9994 0 + 13882 W1 3798 TIP3 H1 HT 0.417000 1.0080 0 + 13883 W1 3798 TIP3 H2 HT 0.417000 1.0080 0 + 13884 W1 3799 TIP3 OH2 OT -0.834000 15.9994 0 + 13885 W1 3799 TIP3 H1 HT 0.417000 1.0080 0 + 13886 W1 3799 TIP3 H2 HT 0.417000 1.0080 0 + 13887 W1 3800 TIP3 OH2 OT -0.834000 15.9994 0 + 13888 W1 3800 TIP3 H1 HT 0.417000 1.0080 0 + 13889 W1 3800 TIP3 H2 HT 0.417000 1.0080 0 + 13890 W1 3801 TIP3 OH2 OT -0.834000 15.9994 0 + 13891 W1 3801 TIP3 H1 HT 0.417000 1.0080 0 + 13892 W1 3801 TIP3 H2 HT 0.417000 1.0080 0 + 13893 W1 3802 TIP3 OH2 OT -0.834000 15.9994 0 + 13894 W1 3802 TIP3 H1 HT 0.417000 1.0080 0 + 13895 W1 3802 TIP3 H2 HT 0.417000 1.0080 0 + 13896 W1 3803 TIP3 OH2 OT -0.834000 15.9994 0 + 13897 W1 3803 TIP3 H1 HT 0.417000 1.0080 0 + 13898 W1 3803 TIP3 H2 HT 0.417000 1.0080 0 + 13899 W1 3804 TIP3 OH2 OT -0.834000 15.9994 0 + 13900 W1 3804 TIP3 H1 HT 0.417000 1.0080 0 + 13901 W1 3804 TIP3 H2 HT 0.417000 1.0080 0 + 13902 W1 3805 TIP3 OH2 OT -0.834000 15.9994 0 + 13903 W1 3805 TIP3 H1 HT 0.417000 1.0080 0 + 13904 W1 3805 TIP3 H2 HT 0.417000 1.0080 0 + 13905 W1 3806 TIP3 OH2 OT -0.834000 15.9994 0 + 13906 W1 3806 TIP3 H1 HT 0.417000 1.0080 0 + 13907 W1 3806 TIP3 H2 HT 0.417000 1.0080 0 + 13908 W1 3807 TIP3 OH2 OT -0.834000 15.9994 0 + 13909 W1 3807 TIP3 H1 HT 0.417000 1.0080 0 + 13910 W1 3807 TIP3 H2 HT 0.417000 1.0080 0 + 13911 W1 3808 TIP3 OH2 OT -0.834000 15.9994 0 + 13912 W1 3808 TIP3 H1 HT 0.417000 1.0080 0 + 13913 W1 3808 TIP3 H2 HT 0.417000 1.0080 0 + 13914 W1 3809 TIP3 OH2 OT -0.834000 15.9994 0 + 13915 W1 3809 TIP3 H1 HT 0.417000 1.0080 0 + 13916 W1 3809 TIP3 H2 HT 0.417000 1.0080 0 + 13917 W1 3810 TIP3 OH2 OT -0.834000 15.9994 0 + 13918 W1 3810 TIP3 H1 HT 0.417000 1.0080 0 + 13919 W1 3810 TIP3 H2 HT 0.417000 1.0080 0 + 13920 W1 3811 TIP3 OH2 OT -0.834000 15.9994 0 + 13921 W1 3811 TIP3 H1 HT 0.417000 1.0080 0 + 13922 W1 3811 TIP3 H2 HT 0.417000 1.0080 0 + 13923 W1 3812 TIP3 OH2 OT -0.834000 15.9994 0 + 13924 W1 3812 TIP3 H1 HT 0.417000 1.0080 0 + 13925 W1 3812 TIP3 H2 HT 0.417000 1.0080 0 + 13926 W1 3813 TIP3 OH2 OT -0.834000 15.9994 0 + 13927 W1 3813 TIP3 H1 HT 0.417000 1.0080 0 + 13928 W1 3813 TIP3 H2 HT 0.417000 1.0080 0 + 13929 W1 3814 TIP3 OH2 OT -0.834000 15.9994 0 + 13930 W1 3814 TIP3 H1 HT 0.417000 1.0080 0 + 13931 W1 3814 TIP3 H2 HT 0.417000 1.0080 0 + 13932 W1 3815 TIP3 OH2 OT -0.834000 15.9994 0 + 13933 W1 3815 TIP3 H1 HT 0.417000 1.0080 0 + 13934 W1 3815 TIP3 H2 HT 0.417000 1.0080 0 + 13935 W1 3816 TIP3 OH2 OT -0.834000 15.9994 0 + 13936 W1 3816 TIP3 H1 HT 0.417000 1.0080 0 + 13937 W1 3816 TIP3 H2 HT 0.417000 1.0080 0 + 13938 W1 3817 TIP3 OH2 OT -0.834000 15.9994 0 + 13939 W1 3817 TIP3 H1 HT 0.417000 1.0080 0 + 13940 W1 3817 TIP3 H2 HT 0.417000 1.0080 0 + 13941 W1 3818 TIP3 OH2 OT -0.834000 15.9994 0 + 13942 W1 3818 TIP3 H1 HT 0.417000 1.0080 0 + 13943 W1 3818 TIP3 H2 HT 0.417000 1.0080 0 + 13944 W1 3819 TIP3 OH2 OT -0.834000 15.9994 0 + 13945 W1 3819 TIP3 H1 HT 0.417000 1.0080 0 + 13946 W1 3819 TIP3 H2 HT 0.417000 1.0080 0 + 13947 W1 3820 TIP3 OH2 OT -0.834000 15.9994 0 + 13948 W1 3820 TIP3 H1 HT 0.417000 1.0080 0 + 13949 W1 3820 TIP3 H2 HT 0.417000 1.0080 0 + 13950 W1 3821 TIP3 OH2 OT -0.834000 15.9994 0 + 13951 W1 3821 TIP3 H1 HT 0.417000 1.0080 0 + 13952 W1 3821 TIP3 H2 HT 0.417000 1.0080 0 + 13953 W1 3822 TIP3 OH2 OT -0.834000 15.9994 0 + 13954 W1 3822 TIP3 H1 HT 0.417000 1.0080 0 + 13955 W1 3822 TIP3 H2 HT 0.417000 1.0080 0 + 13956 W1 3823 TIP3 OH2 OT -0.834000 15.9994 0 + 13957 W1 3823 TIP3 H1 HT 0.417000 1.0080 0 + 13958 W1 3823 TIP3 H2 HT 0.417000 1.0080 0 + 13959 W1 3824 TIP3 OH2 OT -0.834000 15.9994 0 + 13960 W1 3824 TIP3 H1 HT 0.417000 1.0080 0 + 13961 W1 3824 TIP3 H2 HT 0.417000 1.0080 0 + 13962 W1 3825 TIP3 OH2 OT -0.834000 15.9994 0 + 13963 W1 3825 TIP3 H1 HT 0.417000 1.0080 0 + 13964 W1 3825 TIP3 H2 HT 0.417000 1.0080 0 + 13965 W1 3826 TIP3 OH2 OT -0.834000 15.9994 0 + 13966 W1 3826 TIP3 H1 HT 0.417000 1.0080 0 + 13967 W1 3826 TIP3 H2 HT 0.417000 1.0080 0 + 13968 W1 3827 TIP3 OH2 OT -0.834000 15.9994 0 + 13969 W1 3827 TIP3 H1 HT 0.417000 1.0080 0 + 13970 W1 3827 TIP3 H2 HT 0.417000 1.0080 0 + 13971 W1 3828 TIP3 OH2 OT -0.834000 15.9994 0 + 13972 W1 3828 TIP3 H1 HT 0.417000 1.0080 0 + 13973 W1 3828 TIP3 H2 HT 0.417000 1.0080 0 + 13974 W1 3829 TIP3 OH2 OT -0.834000 15.9994 0 + 13975 W1 3829 TIP3 H1 HT 0.417000 1.0080 0 + 13976 W1 3829 TIP3 H2 HT 0.417000 1.0080 0 + 13977 W1 3830 TIP3 OH2 OT -0.834000 15.9994 0 + 13978 W1 3830 TIP3 H1 HT 0.417000 1.0080 0 + 13979 W1 3830 TIP3 H2 HT 0.417000 1.0080 0 + 13980 W1 3831 TIP3 OH2 OT -0.834000 15.9994 0 + 13981 W1 3831 TIP3 H1 HT 0.417000 1.0080 0 + 13982 W1 3831 TIP3 H2 HT 0.417000 1.0080 0 + 13983 W1 3832 TIP3 OH2 OT -0.834000 15.9994 0 + 13984 W1 3832 TIP3 H1 HT 0.417000 1.0080 0 + 13985 W1 3832 TIP3 H2 HT 0.417000 1.0080 0 + 13986 W1 3833 TIP3 OH2 OT -0.834000 15.9994 0 + 13987 W1 3833 TIP3 H1 HT 0.417000 1.0080 0 + 13988 W1 3833 TIP3 H2 HT 0.417000 1.0080 0 + 13989 W1 3834 TIP3 OH2 OT -0.834000 15.9994 0 + 13990 W1 3834 TIP3 H1 HT 0.417000 1.0080 0 + 13991 W1 3834 TIP3 H2 HT 0.417000 1.0080 0 + 13992 W1 3835 TIP3 OH2 OT -0.834000 15.9994 0 + 13993 W1 3835 TIP3 H1 HT 0.417000 1.0080 0 + 13994 W1 3835 TIP3 H2 HT 0.417000 1.0080 0 + 13995 W1 3836 TIP3 OH2 OT -0.834000 15.9994 0 + 13996 W1 3836 TIP3 H1 HT 0.417000 1.0080 0 + 13997 W1 3836 TIP3 H2 HT 0.417000 1.0080 0 + 13998 W1 3837 TIP3 OH2 OT -0.834000 15.9994 0 + 13999 W1 3837 TIP3 H1 HT 0.417000 1.0080 0 + 14000 W1 3837 TIP3 H2 HT 0.417000 1.0080 0 + 14001 W1 3838 TIP3 OH2 OT -0.834000 15.9994 0 + 14002 W1 3838 TIP3 H1 HT 0.417000 1.0080 0 + 14003 W1 3838 TIP3 H2 HT 0.417000 1.0080 0 + 14004 W1 3839 TIP3 OH2 OT -0.834000 15.9994 0 + 14005 W1 3839 TIP3 H1 HT 0.417000 1.0080 0 + 14006 W1 3839 TIP3 H2 HT 0.417000 1.0080 0 + 14007 W1 3840 TIP3 OH2 OT -0.834000 15.9994 0 + 14008 W1 3840 TIP3 H1 HT 0.417000 1.0080 0 + 14009 W1 3840 TIP3 H2 HT 0.417000 1.0080 0 + 14010 W1 3841 TIP3 OH2 OT -0.834000 15.9994 0 + 14011 W1 3841 TIP3 H1 HT 0.417000 1.0080 0 + 14012 W1 3841 TIP3 H2 HT 0.417000 1.0080 0 + 14013 W1 3842 TIP3 OH2 OT -0.834000 15.9994 0 + 14014 W1 3842 TIP3 H1 HT 0.417000 1.0080 0 + 14015 W1 3842 TIP3 H2 HT 0.417000 1.0080 0 + 14016 W1 3843 TIP3 OH2 OT -0.834000 15.9994 0 + 14017 W1 3843 TIP3 H1 HT 0.417000 1.0080 0 + 14018 W1 3843 TIP3 H2 HT 0.417000 1.0080 0 + 14019 W1 3844 TIP3 OH2 OT -0.834000 15.9994 0 + 14020 W1 3844 TIP3 H1 HT 0.417000 1.0080 0 + 14021 W1 3844 TIP3 H2 HT 0.417000 1.0080 0 + 14022 W1 3845 TIP3 OH2 OT -0.834000 15.9994 0 + 14023 W1 3845 TIP3 H1 HT 0.417000 1.0080 0 + 14024 W1 3845 TIP3 H2 HT 0.417000 1.0080 0 + 14025 W1 3846 TIP3 OH2 OT -0.834000 15.9994 0 + 14026 W1 3846 TIP3 H1 HT 0.417000 1.0080 0 + 14027 W1 3846 TIP3 H2 HT 0.417000 1.0080 0 + 14028 W1 3847 TIP3 OH2 OT -0.834000 15.9994 0 + 14029 W1 3847 TIP3 H1 HT 0.417000 1.0080 0 + 14030 W1 3847 TIP3 H2 HT 0.417000 1.0080 0 + 14031 W1 3848 TIP3 OH2 OT -0.834000 15.9994 0 + 14032 W1 3848 TIP3 H1 HT 0.417000 1.0080 0 + 14033 W1 3848 TIP3 H2 HT 0.417000 1.0080 0 + 14034 W1 3849 TIP3 OH2 OT -0.834000 15.9994 0 + 14035 W1 3849 TIP3 H1 HT 0.417000 1.0080 0 + 14036 W1 3849 TIP3 H2 HT 0.417000 1.0080 0 + 14037 W1 3850 TIP3 OH2 OT -0.834000 15.9994 0 + 14038 W1 3850 TIP3 H1 HT 0.417000 1.0080 0 + 14039 W1 3850 TIP3 H2 HT 0.417000 1.0080 0 + 14040 W1 3851 TIP3 OH2 OT -0.834000 15.9994 0 + 14041 W1 3851 TIP3 H1 HT 0.417000 1.0080 0 + 14042 W1 3851 TIP3 H2 HT 0.417000 1.0080 0 + 14043 W1 3852 TIP3 OH2 OT -0.834000 15.9994 0 + 14044 W1 3852 TIP3 H1 HT 0.417000 1.0080 0 + 14045 W1 3852 TIP3 H2 HT 0.417000 1.0080 0 + 14046 W1 3853 TIP3 OH2 OT -0.834000 15.9994 0 + 14047 W1 3853 TIP3 H1 HT 0.417000 1.0080 0 + 14048 W1 3853 TIP3 H2 HT 0.417000 1.0080 0 + 14049 W1 3854 TIP3 OH2 OT -0.834000 15.9994 0 + 14050 W1 3854 TIP3 H1 HT 0.417000 1.0080 0 + 14051 W1 3854 TIP3 H2 HT 0.417000 1.0080 0 + 14052 W1 3855 TIP3 OH2 OT -0.834000 15.9994 0 + 14053 W1 3855 TIP3 H1 HT 0.417000 1.0080 0 + 14054 W1 3855 TIP3 H2 HT 0.417000 1.0080 0 + 14055 W1 3856 TIP3 OH2 OT -0.834000 15.9994 0 + 14056 W1 3856 TIP3 H1 HT 0.417000 1.0080 0 + 14057 W1 3856 TIP3 H2 HT 0.417000 1.0080 0 + 14058 W1 3857 TIP3 OH2 OT -0.834000 15.9994 0 + 14059 W1 3857 TIP3 H1 HT 0.417000 1.0080 0 + 14060 W1 3857 TIP3 H2 HT 0.417000 1.0080 0 + 14061 W1 3858 TIP3 OH2 OT -0.834000 15.9994 0 + 14062 W1 3858 TIP3 H1 HT 0.417000 1.0080 0 + 14063 W1 3858 TIP3 H2 HT 0.417000 1.0080 0 + 14064 W1 3859 TIP3 OH2 OT -0.834000 15.9994 0 + 14065 W1 3859 TIP3 H1 HT 0.417000 1.0080 0 + 14066 W1 3859 TIP3 H2 HT 0.417000 1.0080 0 + 14067 W1 3860 TIP3 OH2 OT -0.834000 15.9994 0 + 14068 W1 3860 TIP3 H1 HT 0.417000 1.0080 0 + 14069 W1 3860 TIP3 H2 HT 0.417000 1.0080 0 + 14070 W1 3861 TIP3 OH2 OT -0.834000 15.9994 0 + 14071 W1 3861 TIP3 H1 HT 0.417000 1.0080 0 + 14072 W1 3861 TIP3 H2 HT 0.417000 1.0080 0 + 14073 W1 3862 TIP3 OH2 OT -0.834000 15.9994 0 + 14074 W1 3862 TIP3 H1 HT 0.417000 1.0080 0 + 14075 W1 3862 TIP3 H2 HT 0.417000 1.0080 0 + 14076 W1 3863 TIP3 OH2 OT -0.834000 15.9994 0 + 14077 W1 3863 TIP3 H1 HT 0.417000 1.0080 0 + 14078 W1 3863 TIP3 H2 HT 0.417000 1.0080 0 + 14079 W1 3864 TIP3 OH2 OT -0.834000 15.9994 0 + 14080 W1 3864 TIP3 H1 HT 0.417000 1.0080 0 + 14081 W1 3864 TIP3 H2 HT 0.417000 1.0080 0 + 14082 W1 3865 TIP3 OH2 OT -0.834000 15.9994 0 + 14083 W1 3865 TIP3 H1 HT 0.417000 1.0080 0 + 14084 W1 3865 TIP3 H2 HT 0.417000 1.0080 0 + 14085 W1 3866 TIP3 OH2 OT -0.834000 15.9994 0 + 14086 W1 3866 TIP3 H1 HT 0.417000 1.0080 0 + 14087 W1 3866 TIP3 H2 HT 0.417000 1.0080 0 + 14088 W1 3867 TIP3 OH2 OT -0.834000 15.9994 0 + 14089 W1 3867 TIP3 H1 HT 0.417000 1.0080 0 + 14090 W1 3867 TIP3 H2 HT 0.417000 1.0080 0 + 14091 W1 3868 TIP3 OH2 OT -0.834000 15.9994 0 + 14092 W1 3868 TIP3 H1 HT 0.417000 1.0080 0 + 14093 W1 3868 TIP3 H2 HT 0.417000 1.0080 0 + 14094 W1 3869 TIP3 OH2 OT -0.834000 15.9994 0 + 14095 W1 3869 TIP3 H1 HT 0.417000 1.0080 0 + 14096 W1 3869 TIP3 H2 HT 0.417000 1.0080 0 + 14097 W1 3870 TIP3 OH2 OT -0.834000 15.9994 0 + 14098 W1 3870 TIP3 H1 HT 0.417000 1.0080 0 + 14099 W1 3870 TIP3 H2 HT 0.417000 1.0080 0 + 14100 W1 3871 TIP3 OH2 OT -0.834000 15.9994 0 + 14101 W1 3871 TIP3 H1 HT 0.417000 1.0080 0 + 14102 W1 3871 TIP3 H2 HT 0.417000 1.0080 0 + 14103 W1 3872 TIP3 OH2 OT -0.834000 15.9994 0 + 14104 W1 3872 TIP3 H1 HT 0.417000 1.0080 0 + 14105 W1 3872 TIP3 H2 HT 0.417000 1.0080 0 + 14106 W1 3873 TIP3 OH2 OT -0.834000 15.9994 0 + 14107 W1 3873 TIP3 H1 HT 0.417000 1.0080 0 + 14108 W1 3873 TIP3 H2 HT 0.417000 1.0080 0 + 14109 W1 3874 TIP3 OH2 OT -0.834000 15.9994 0 + 14110 W1 3874 TIP3 H1 HT 0.417000 1.0080 0 + 14111 W1 3874 TIP3 H2 HT 0.417000 1.0080 0 + 14112 W1 3875 TIP3 OH2 OT -0.834000 15.9994 0 + 14113 W1 3875 TIP3 H1 HT 0.417000 1.0080 0 + 14114 W1 3875 TIP3 H2 HT 0.417000 1.0080 0 + 14115 W1 3876 TIP3 OH2 OT -0.834000 15.9994 0 + 14116 W1 3876 TIP3 H1 HT 0.417000 1.0080 0 + 14117 W1 3876 TIP3 H2 HT 0.417000 1.0080 0 + 14118 W1 3877 TIP3 OH2 OT -0.834000 15.9994 0 + 14119 W1 3877 TIP3 H1 HT 0.417000 1.0080 0 + 14120 W1 3877 TIP3 H2 HT 0.417000 1.0080 0 + 14121 W1 3878 TIP3 OH2 OT -0.834000 15.9994 0 + 14122 W1 3878 TIP3 H1 HT 0.417000 1.0080 0 + 14123 W1 3878 TIP3 H2 HT 0.417000 1.0080 0 + 14124 W1 3879 TIP3 OH2 OT -0.834000 15.9994 0 + 14125 W1 3879 TIP3 H1 HT 0.417000 1.0080 0 + 14126 W1 3879 TIP3 H2 HT 0.417000 1.0080 0 + 14127 W1 3880 TIP3 OH2 OT -0.834000 15.9994 0 + 14128 W1 3880 TIP3 H1 HT 0.417000 1.0080 0 + 14129 W1 3880 TIP3 H2 HT 0.417000 1.0080 0 + 14130 W1 3881 TIP3 OH2 OT -0.834000 15.9994 0 + 14131 W1 3881 TIP3 H1 HT 0.417000 1.0080 0 + 14132 W1 3881 TIP3 H2 HT 0.417000 1.0080 0 + 14133 W1 3882 TIP3 OH2 OT -0.834000 15.9994 0 + 14134 W1 3882 TIP3 H1 HT 0.417000 1.0080 0 + 14135 W1 3882 TIP3 H2 HT 0.417000 1.0080 0 + 14136 W1 3883 TIP3 OH2 OT -0.834000 15.9994 0 + 14137 W1 3883 TIP3 H1 HT 0.417000 1.0080 0 + 14138 W1 3883 TIP3 H2 HT 0.417000 1.0080 0 + 14139 W1 3884 TIP3 OH2 OT -0.834000 15.9994 0 + 14140 W1 3884 TIP3 H1 HT 0.417000 1.0080 0 + 14141 W1 3884 TIP3 H2 HT 0.417000 1.0080 0 + 14142 W1 3885 TIP3 OH2 OT -0.834000 15.9994 0 + 14143 W1 3885 TIP3 H1 HT 0.417000 1.0080 0 + 14144 W1 3885 TIP3 H2 HT 0.417000 1.0080 0 + 14145 W1 3886 TIP3 OH2 OT -0.834000 15.9994 0 + 14146 W1 3886 TIP3 H1 HT 0.417000 1.0080 0 + 14147 W1 3886 TIP3 H2 HT 0.417000 1.0080 0 + 14148 W1 3887 TIP3 OH2 OT -0.834000 15.9994 0 + 14149 W1 3887 TIP3 H1 HT 0.417000 1.0080 0 + 14150 W1 3887 TIP3 H2 HT 0.417000 1.0080 0 + 14151 W1 3888 TIP3 OH2 OT -0.834000 15.9994 0 + 14152 W1 3888 TIP3 H1 HT 0.417000 1.0080 0 + 14153 W1 3888 TIP3 H2 HT 0.417000 1.0080 0 + 14154 W1 3889 TIP3 OH2 OT -0.834000 15.9994 0 + 14155 W1 3889 TIP3 H1 HT 0.417000 1.0080 0 + 14156 W1 3889 TIP3 H2 HT 0.417000 1.0080 0 + 14157 W1 3890 TIP3 OH2 OT -0.834000 15.9994 0 + 14158 W1 3890 TIP3 H1 HT 0.417000 1.0080 0 + 14159 W1 3890 TIP3 H2 HT 0.417000 1.0080 0 + 14160 W1 3891 TIP3 OH2 OT -0.834000 15.9994 0 + 14161 W1 3891 TIP3 H1 HT 0.417000 1.0080 0 + 14162 W1 3891 TIP3 H2 HT 0.417000 1.0080 0 + 14163 W1 3892 TIP3 OH2 OT -0.834000 15.9994 0 + 14164 W1 3892 TIP3 H1 HT 0.417000 1.0080 0 + 14165 W1 3892 TIP3 H2 HT 0.417000 1.0080 0 + 14166 W1 3893 TIP3 OH2 OT -0.834000 15.9994 0 + 14167 W1 3893 TIP3 H1 HT 0.417000 1.0080 0 + 14168 W1 3893 TIP3 H2 HT 0.417000 1.0080 0 + 14169 W1 3894 TIP3 OH2 OT -0.834000 15.9994 0 + 14170 W1 3894 TIP3 H1 HT 0.417000 1.0080 0 + 14171 W1 3894 TIP3 H2 HT 0.417000 1.0080 0 + 14172 W1 3895 TIP3 OH2 OT -0.834000 15.9994 0 + 14173 W1 3895 TIP3 H1 HT 0.417000 1.0080 0 + 14174 W1 3895 TIP3 H2 HT 0.417000 1.0080 0 + 14175 W1 3896 TIP3 OH2 OT -0.834000 15.9994 0 + 14176 W1 3896 TIP3 H1 HT 0.417000 1.0080 0 + 14177 W1 3896 TIP3 H2 HT 0.417000 1.0080 0 + 14178 W1 3897 TIP3 OH2 OT -0.834000 15.9994 0 + 14179 W1 3897 TIP3 H1 HT 0.417000 1.0080 0 + 14180 W1 3897 TIP3 H2 HT 0.417000 1.0080 0 + 14181 W1 3898 TIP3 OH2 OT -0.834000 15.9994 0 + 14182 W1 3898 TIP3 H1 HT 0.417000 1.0080 0 + 14183 W1 3898 TIP3 H2 HT 0.417000 1.0080 0 + 14184 W1 3899 TIP3 OH2 OT -0.834000 15.9994 0 + 14185 W1 3899 TIP3 H1 HT 0.417000 1.0080 0 + 14186 W1 3899 TIP3 H2 HT 0.417000 1.0080 0 + 14187 W1 3900 TIP3 OH2 OT -0.834000 15.9994 0 + 14188 W1 3900 TIP3 H1 HT 0.417000 1.0080 0 + 14189 W1 3900 TIP3 H2 HT 0.417000 1.0080 0 + 14190 W1 3901 TIP3 OH2 OT -0.834000 15.9994 0 + 14191 W1 3901 TIP3 H1 HT 0.417000 1.0080 0 + 14192 W1 3901 TIP3 H2 HT 0.417000 1.0080 0 + 14193 W1 3902 TIP3 OH2 OT -0.834000 15.9994 0 + 14194 W1 3902 TIP3 H1 HT 0.417000 1.0080 0 + 14195 W1 3902 TIP3 H2 HT 0.417000 1.0080 0 + 14196 W1 3903 TIP3 OH2 OT -0.834000 15.9994 0 + 14197 W1 3903 TIP3 H1 HT 0.417000 1.0080 0 + 14198 W1 3903 TIP3 H2 HT 0.417000 1.0080 0 + 14199 W1 3904 TIP3 OH2 OT -0.834000 15.9994 0 + 14200 W1 3904 TIP3 H1 HT 0.417000 1.0080 0 + 14201 W1 3904 TIP3 H2 HT 0.417000 1.0080 0 + 14202 W1 3905 TIP3 OH2 OT -0.834000 15.9994 0 + 14203 W1 3905 TIP3 H1 HT 0.417000 1.0080 0 + 14204 W1 3905 TIP3 H2 HT 0.417000 1.0080 0 + 14205 W1 3906 TIP3 OH2 OT -0.834000 15.9994 0 + 14206 W1 3906 TIP3 H1 HT 0.417000 1.0080 0 + 14207 W1 3906 TIP3 H2 HT 0.417000 1.0080 0 + 14208 W1 3907 TIP3 OH2 OT -0.834000 15.9994 0 + 14209 W1 3907 TIP3 H1 HT 0.417000 1.0080 0 + 14210 W1 3907 TIP3 H2 HT 0.417000 1.0080 0 + 14211 W1 3908 TIP3 OH2 OT -0.834000 15.9994 0 + 14212 W1 3908 TIP3 H1 HT 0.417000 1.0080 0 + 14213 W1 3908 TIP3 H2 HT 0.417000 1.0080 0 + 14214 W1 3909 TIP3 OH2 OT -0.834000 15.9994 0 + 14215 W1 3909 TIP3 H1 HT 0.417000 1.0080 0 + 14216 W1 3909 TIP3 H2 HT 0.417000 1.0080 0 + 14217 W1 3910 TIP3 OH2 OT -0.834000 15.9994 0 + 14218 W1 3910 TIP3 H1 HT 0.417000 1.0080 0 + 14219 W1 3910 TIP3 H2 HT 0.417000 1.0080 0 + 14220 W1 3911 TIP3 OH2 OT -0.834000 15.9994 0 + 14221 W1 3911 TIP3 H1 HT 0.417000 1.0080 0 + 14222 W1 3911 TIP3 H2 HT 0.417000 1.0080 0 + 14223 W1 3912 TIP3 OH2 OT -0.834000 15.9994 0 + 14224 W1 3912 TIP3 H1 HT 0.417000 1.0080 0 + 14225 W1 3912 TIP3 H2 HT 0.417000 1.0080 0 + 14226 W1 3913 TIP3 OH2 OT -0.834000 15.9994 0 + 14227 W1 3913 TIP3 H1 HT 0.417000 1.0080 0 + 14228 W1 3913 TIP3 H2 HT 0.417000 1.0080 0 + 14229 W1 3914 TIP3 OH2 OT -0.834000 15.9994 0 + 14230 W1 3914 TIP3 H1 HT 0.417000 1.0080 0 + 14231 W1 3914 TIP3 H2 HT 0.417000 1.0080 0 + 14232 W1 3915 TIP3 OH2 OT -0.834000 15.9994 0 + 14233 W1 3915 TIP3 H1 HT 0.417000 1.0080 0 + 14234 W1 3915 TIP3 H2 HT 0.417000 1.0080 0 + 14235 W1 3916 TIP3 OH2 OT -0.834000 15.9994 0 + 14236 W1 3916 TIP3 H1 HT 0.417000 1.0080 0 + 14237 W1 3916 TIP3 H2 HT 0.417000 1.0080 0 + 14238 W1 3917 TIP3 OH2 OT -0.834000 15.9994 0 + 14239 W1 3917 TIP3 H1 HT 0.417000 1.0080 0 + 14240 W1 3917 TIP3 H2 HT 0.417000 1.0080 0 + 14241 W1 3918 TIP3 OH2 OT -0.834000 15.9994 0 + 14242 W1 3918 TIP3 H1 HT 0.417000 1.0080 0 + 14243 W1 3918 TIP3 H2 HT 0.417000 1.0080 0 + 14244 W1 3919 TIP3 OH2 OT -0.834000 15.9994 0 + 14245 W1 3919 TIP3 H1 HT 0.417000 1.0080 0 + 14246 W1 3919 TIP3 H2 HT 0.417000 1.0080 0 + 14247 W1 3920 TIP3 OH2 OT -0.834000 15.9994 0 + 14248 W1 3920 TIP3 H1 HT 0.417000 1.0080 0 + 14249 W1 3920 TIP3 H2 HT 0.417000 1.0080 0 + 14250 W1 3921 TIP3 OH2 OT -0.834000 15.9994 0 + 14251 W1 3921 TIP3 H1 HT 0.417000 1.0080 0 + 14252 W1 3921 TIP3 H2 HT 0.417000 1.0080 0 + 14253 W1 3922 TIP3 OH2 OT -0.834000 15.9994 0 + 14254 W1 3922 TIP3 H1 HT 0.417000 1.0080 0 + 14255 W1 3922 TIP3 H2 HT 0.417000 1.0080 0 + 14256 W1 3923 TIP3 OH2 OT -0.834000 15.9994 0 + 14257 W1 3923 TIP3 H1 HT 0.417000 1.0080 0 + 14258 W1 3923 TIP3 H2 HT 0.417000 1.0080 0 + 14259 W1 3924 TIP3 OH2 OT -0.834000 15.9994 0 + 14260 W1 3924 TIP3 H1 HT 0.417000 1.0080 0 + 14261 W1 3924 TIP3 H2 HT 0.417000 1.0080 0 + 14262 W1 3925 TIP3 OH2 OT -0.834000 15.9994 0 + 14263 W1 3925 TIP3 H1 HT 0.417000 1.0080 0 + 14264 W1 3925 TIP3 H2 HT 0.417000 1.0080 0 + 14265 W1 3926 TIP3 OH2 OT -0.834000 15.9994 0 + 14266 W1 3926 TIP3 H1 HT 0.417000 1.0080 0 + 14267 W1 3926 TIP3 H2 HT 0.417000 1.0080 0 + 14268 W1 3927 TIP3 OH2 OT -0.834000 15.9994 0 + 14269 W1 3927 TIP3 H1 HT 0.417000 1.0080 0 + 14270 W1 3927 TIP3 H2 HT 0.417000 1.0080 0 + 14271 W1 3928 TIP3 OH2 OT -0.834000 15.9994 0 + 14272 W1 3928 TIP3 H1 HT 0.417000 1.0080 0 + 14273 W1 3928 TIP3 H2 HT 0.417000 1.0080 0 + 14274 W1 3929 TIP3 OH2 OT -0.834000 15.9994 0 + 14275 W1 3929 TIP3 H1 HT 0.417000 1.0080 0 + 14276 W1 3929 TIP3 H2 HT 0.417000 1.0080 0 + 14277 W1 3930 TIP3 OH2 OT -0.834000 15.9994 0 + 14278 W1 3930 TIP3 H1 HT 0.417000 1.0080 0 + 14279 W1 3930 TIP3 H2 HT 0.417000 1.0080 0 + 14280 W1 3931 TIP3 OH2 OT -0.834000 15.9994 0 + 14281 W1 3931 TIP3 H1 HT 0.417000 1.0080 0 + 14282 W1 3931 TIP3 H2 HT 0.417000 1.0080 0 + 14283 W1 3932 TIP3 OH2 OT -0.834000 15.9994 0 + 14284 W1 3932 TIP3 H1 HT 0.417000 1.0080 0 + 14285 W1 3932 TIP3 H2 HT 0.417000 1.0080 0 + 14286 W1 3933 TIP3 OH2 OT -0.834000 15.9994 0 + 14287 W1 3933 TIP3 H1 HT 0.417000 1.0080 0 + 14288 W1 3933 TIP3 H2 HT 0.417000 1.0080 0 + 14289 W1 3934 TIP3 OH2 OT -0.834000 15.9994 0 + 14290 W1 3934 TIP3 H1 HT 0.417000 1.0080 0 + 14291 W1 3934 TIP3 H2 HT 0.417000 1.0080 0 + 14292 W1 3935 TIP3 OH2 OT -0.834000 15.9994 0 + 14293 W1 3935 TIP3 H1 HT 0.417000 1.0080 0 + 14294 W1 3935 TIP3 H2 HT 0.417000 1.0080 0 + 14295 W1 3936 TIP3 OH2 OT -0.834000 15.9994 0 + 14296 W1 3936 TIP3 H1 HT 0.417000 1.0080 0 + 14297 W1 3936 TIP3 H2 HT 0.417000 1.0080 0 + 14298 W1 3937 TIP3 OH2 OT -0.834000 15.9994 0 + 14299 W1 3937 TIP3 H1 HT 0.417000 1.0080 0 + 14300 W1 3937 TIP3 H2 HT 0.417000 1.0080 0 + 14301 W1 3938 TIP3 OH2 OT -0.834000 15.9994 0 + 14302 W1 3938 TIP3 H1 HT 0.417000 1.0080 0 + 14303 W1 3938 TIP3 H2 HT 0.417000 1.0080 0 + 14304 W1 3939 TIP3 OH2 OT -0.834000 15.9994 0 + 14305 W1 3939 TIP3 H1 HT 0.417000 1.0080 0 + 14306 W1 3939 TIP3 H2 HT 0.417000 1.0080 0 + 14307 W1 3940 TIP3 OH2 OT -0.834000 15.9994 0 + 14308 W1 3940 TIP3 H1 HT 0.417000 1.0080 0 + 14309 W1 3940 TIP3 H2 HT 0.417000 1.0080 0 + 14310 W1 3941 TIP3 OH2 OT -0.834000 15.9994 0 + 14311 W1 3941 TIP3 H1 HT 0.417000 1.0080 0 + 14312 W1 3941 TIP3 H2 HT 0.417000 1.0080 0 + 14313 W1 3942 TIP3 OH2 OT -0.834000 15.9994 0 + 14314 W1 3942 TIP3 H1 HT 0.417000 1.0080 0 + 14315 W1 3942 TIP3 H2 HT 0.417000 1.0080 0 + 14316 W1 3943 TIP3 OH2 OT -0.834000 15.9994 0 + 14317 W1 3943 TIP3 H1 HT 0.417000 1.0080 0 + 14318 W1 3943 TIP3 H2 HT 0.417000 1.0080 0 + 14319 W1 3944 TIP3 OH2 OT -0.834000 15.9994 0 + 14320 W1 3944 TIP3 H1 HT 0.417000 1.0080 0 + 14321 W1 3944 TIP3 H2 HT 0.417000 1.0080 0 + 14322 W1 3945 TIP3 OH2 OT -0.834000 15.9994 0 + 14323 W1 3945 TIP3 H1 HT 0.417000 1.0080 0 + 14324 W1 3945 TIP3 H2 HT 0.417000 1.0080 0 + 14325 W1 3946 TIP3 OH2 OT -0.834000 15.9994 0 + 14326 W1 3946 TIP3 H1 HT 0.417000 1.0080 0 + 14327 W1 3946 TIP3 H2 HT 0.417000 1.0080 0 + 14328 W1 3947 TIP3 OH2 OT -0.834000 15.9994 0 + 14329 W1 3947 TIP3 H1 HT 0.417000 1.0080 0 + 14330 W1 3947 TIP3 H2 HT 0.417000 1.0080 0 + 14331 W1 3948 TIP3 OH2 OT -0.834000 15.9994 0 + 14332 W1 3948 TIP3 H1 HT 0.417000 1.0080 0 + 14333 W1 3948 TIP3 H2 HT 0.417000 1.0080 0 + 14334 W1 3949 TIP3 OH2 OT -0.834000 15.9994 0 + 14335 W1 3949 TIP3 H1 HT 0.417000 1.0080 0 + 14336 W1 3949 TIP3 H2 HT 0.417000 1.0080 0 + 14337 W1 3950 TIP3 OH2 OT -0.834000 15.9994 0 + 14338 W1 3950 TIP3 H1 HT 0.417000 1.0080 0 + 14339 W1 3950 TIP3 H2 HT 0.417000 1.0080 0 + 14340 W1 3951 TIP3 OH2 OT -0.834000 15.9994 0 + 14341 W1 3951 TIP3 H1 HT 0.417000 1.0080 0 + 14342 W1 3951 TIP3 H2 HT 0.417000 1.0080 0 + 14343 W1 3952 TIP3 OH2 OT -0.834000 15.9994 0 + 14344 W1 3952 TIP3 H1 HT 0.417000 1.0080 0 + 14345 W1 3952 TIP3 H2 HT 0.417000 1.0080 0 + 14346 W1 3953 TIP3 OH2 OT -0.834000 15.9994 0 + 14347 W1 3953 TIP3 H1 HT 0.417000 1.0080 0 + 14348 W1 3953 TIP3 H2 HT 0.417000 1.0080 0 + 14349 W1 3954 TIP3 OH2 OT -0.834000 15.9994 0 + 14350 W1 3954 TIP3 H1 HT 0.417000 1.0080 0 + 14351 W1 3954 TIP3 H2 HT 0.417000 1.0080 0 + 14352 W1 3955 TIP3 OH2 OT -0.834000 15.9994 0 + 14353 W1 3955 TIP3 H1 HT 0.417000 1.0080 0 + 14354 W1 3955 TIP3 H2 HT 0.417000 1.0080 0 + 14355 W1 3956 TIP3 OH2 OT -0.834000 15.9994 0 + 14356 W1 3956 TIP3 H1 HT 0.417000 1.0080 0 + 14357 W1 3956 TIP3 H2 HT 0.417000 1.0080 0 + 14358 W1 3957 TIP3 OH2 OT -0.834000 15.9994 0 + 14359 W1 3957 TIP3 H1 HT 0.417000 1.0080 0 + 14360 W1 3957 TIP3 H2 HT 0.417000 1.0080 0 + 14361 W1 3958 TIP3 OH2 OT -0.834000 15.9994 0 + 14362 W1 3958 TIP3 H1 HT 0.417000 1.0080 0 + 14363 W1 3958 TIP3 H2 HT 0.417000 1.0080 0 + 14364 W1 3959 TIP3 OH2 OT -0.834000 15.9994 0 + 14365 W1 3959 TIP3 H1 HT 0.417000 1.0080 0 + 14366 W1 3959 TIP3 H2 HT 0.417000 1.0080 0 + 14367 W1 3960 TIP3 OH2 OT -0.834000 15.9994 0 + 14368 W1 3960 TIP3 H1 HT 0.417000 1.0080 0 + 14369 W1 3960 TIP3 H2 HT 0.417000 1.0080 0 + 14370 W1 3961 TIP3 OH2 OT -0.834000 15.9994 0 + 14371 W1 3961 TIP3 H1 HT 0.417000 1.0080 0 + 14372 W1 3961 TIP3 H2 HT 0.417000 1.0080 0 + 14373 W1 3962 TIP3 OH2 OT -0.834000 15.9994 0 + 14374 W1 3962 TIP3 H1 HT 0.417000 1.0080 0 + 14375 W1 3962 TIP3 H2 HT 0.417000 1.0080 0 + 14376 W1 3963 TIP3 OH2 OT -0.834000 15.9994 0 + 14377 W1 3963 TIP3 H1 HT 0.417000 1.0080 0 + 14378 W1 3963 TIP3 H2 HT 0.417000 1.0080 0 + 14379 W1 3964 TIP3 OH2 OT -0.834000 15.9994 0 + 14380 W1 3964 TIP3 H1 HT 0.417000 1.0080 0 + 14381 W1 3964 TIP3 H2 HT 0.417000 1.0080 0 + 14382 W1 3965 TIP3 OH2 OT -0.834000 15.9994 0 + 14383 W1 3965 TIP3 H1 HT 0.417000 1.0080 0 + 14384 W1 3965 TIP3 H2 HT 0.417000 1.0080 0 + 14385 W1 3966 TIP3 OH2 OT -0.834000 15.9994 0 + 14386 W1 3966 TIP3 H1 HT 0.417000 1.0080 0 + 14387 W1 3966 TIP3 H2 HT 0.417000 1.0080 0 + 14388 W1 3967 TIP3 OH2 OT -0.834000 15.9994 0 + 14389 W1 3967 TIP3 H1 HT 0.417000 1.0080 0 + 14390 W1 3967 TIP3 H2 HT 0.417000 1.0080 0 + 14391 W1 3968 TIP3 OH2 OT -0.834000 15.9994 0 + 14392 W1 3968 TIP3 H1 HT 0.417000 1.0080 0 + 14393 W1 3968 TIP3 H2 HT 0.417000 1.0080 0 + 14394 W1 3969 TIP3 OH2 OT -0.834000 15.9994 0 + 14395 W1 3969 TIP3 H1 HT 0.417000 1.0080 0 + 14396 W1 3969 TIP3 H2 HT 0.417000 1.0080 0 + 14397 W1 3970 TIP3 OH2 OT -0.834000 15.9994 0 + 14398 W1 3970 TIP3 H1 HT 0.417000 1.0080 0 + 14399 W1 3970 TIP3 H2 HT 0.417000 1.0080 0 + 14400 W1 3971 TIP3 OH2 OT -0.834000 15.9994 0 + 14401 W1 3971 TIP3 H1 HT 0.417000 1.0080 0 + 14402 W1 3971 TIP3 H2 HT 0.417000 1.0080 0 + 14403 W1 3972 TIP3 OH2 OT -0.834000 15.9994 0 + 14404 W1 3972 TIP3 H1 HT 0.417000 1.0080 0 + 14405 W1 3972 TIP3 H2 HT 0.417000 1.0080 0 + 14406 W1 3973 TIP3 OH2 OT -0.834000 15.9994 0 + 14407 W1 3973 TIP3 H1 HT 0.417000 1.0080 0 + 14408 W1 3973 TIP3 H2 HT 0.417000 1.0080 0 + 14409 W1 3974 TIP3 OH2 OT -0.834000 15.9994 0 + 14410 W1 3974 TIP3 H1 HT 0.417000 1.0080 0 + 14411 W1 3974 TIP3 H2 HT 0.417000 1.0080 0 + 14412 W1 3975 TIP3 OH2 OT -0.834000 15.9994 0 + 14413 W1 3975 TIP3 H1 HT 0.417000 1.0080 0 + 14414 W1 3975 TIP3 H2 HT 0.417000 1.0080 0 + 14415 W1 3976 TIP3 OH2 OT -0.834000 15.9994 0 + 14416 W1 3976 TIP3 H1 HT 0.417000 1.0080 0 + 14417 W1 3976 TIP3 H2 HT 0.417000 1.0080 0 + 14418 W1 3977 TIP3 OH2 OT -0.834000 15.9994 0 + 14419 W1 3977 TIP3 H1 HT 0.417000 1.0080 0 + 14420 W1 3977 TIP3 H2 HT 0.417000 1.0080 0 + 14421 W1 3978 TIP3 OH2 OT -0.834000 15.9994 0 + 14422 W1 3978 TIP3 H1 HT 0.417000 1.0080 0 + 14423 W1 3978 TIP3 H2 HT 0.417000 1.0080 0 + 14424 W1 3979 TIP3 OH2 OT -0.834000 15.9994 0 + 14425 W1 3979 TIP3 H1 HT 0.417000 1.0080 0 + 14426 W1 3979 TIP3 H2 HT 0.417000 1.0080 0 + 14427 W1 3980 TIP3 OH2 OT -0.834000 15.9994 0 + 14428 W1 3980 TIP3 H1 HT 0.417000 1.0080 0 + 14429 W1 3980 TIP3 H2 HT 0.417000 1.0080 0 + 14430 W1 3981 TIP3 OH2 OT -0.834000 15.9994 0 + 14431 W1 3981 TIP3 H1 HT 0.417000 1.0080 0 + 14432 W1 3981 TIP3 H2 HT 0.417000 1.0080 0 + 14433 W1 3982 TIP3 OH2 OT -0.834000 15.9994 0 + 14434 W1 3982 TIP3 H1 HT 0.417000 1.0080 0 + 14435 W1 3982 TIP3 H2 HT 0.417000 1.0080 0 + 14436 W1 3983 TIP3 OH2 OT -0.834000 15.9994 0 + 14437 W1 3983 TIP3 H1 HT 0.417000 1.0080 0 + 14438 W1 3983 TIP3 H2 HT 0.417000 1.0080 0 + 14439 W1 3984 TIP3 OH2 OT -0.834000 15.9994 0 + 14440 W1 3984 TIP3 H1 HT 0.417000 1.0080 0 + 14441 W1 3984 TIP3 H2 HT 0.417000 1.0080 0 + 14442 W1 3985 TIP3 OH2 OT -0.834000 15.9994 0 + 14443 W1 3985 TIP3 H1 HT 0.417000 1.0080 0 + 14444 W1 3985 TIP3 H2 HT 0.417000 1.0080 0 + 14445 W1 3986 TIP3 OH2 OT -0.834000 15.9994 0 + 14446 W1 3986 TIP3 H1 HT 0.417000 1.0080 0 + 14447 W1 3986 TIP3 H2 HT 0.417000 1.0080 0 + 14448 W1 3987 TIP3 OH2 OT -0.834000 15.9994 0 + 14449 W1 3987 TIP3 H1 HT 0.417000 1.0080 0 + 14450 W1 3987 TIP3 H2 HT 0.417000 1.0080 0 + 14451 W1 3988 TIP3 OH2 OT -0.834000 15.9994 0 + 14452 W1 3988 TIP3 H1 HT 0.417000 1.0080 0 + 14453 W1 3988 TIP3 H2 HT 0.417000 1.0080 0 + 14454 W1 3989 TIP3 OH2 OT -0.834000 15.9994 0 + 14455 W1 3989 TIP3 H1 HT 0.417000 1.0080 0 + 14456 W1 3989 TIP3 H2 HT 0.417000 1.0080 0 + 14457 W1 3990 TIP3 OH2 OT -0.834000 15.9994 0 + 14458 W1 3990 TIP3 H1 HT 0.417000 1.0080 0 + 14459 W1 3990 TIP3 H2 HT 0.417000 1.0080 0 + 14460 W1 3991 TIP3 OH2 OT -0.834000 15.9994 0 + 14461 W1 3991 TIP3 H1 HT 0.417000 1.0080 0 + 14462 W1 3991 TIP3 H2 HT 0.417000 1.0080 0 + 14463 W1 3992 TIP3 OH2 OT -0.834000 15.9994 0 + 14464 W1 3992 TIP3 H1 HT 0.417000 1.0080 0 + 14465 W1 3992 TIP3 H2 HT 0.417000 1.0080 0 + 14466 W1 3993 TIP3 OH2 OT -0.834000 15.9994 0 + 14467 W1 3993 TIP3 H1 HT 0.417000 1.0080 0 + 14468 W1 3993 TIP3 H2 HT 0.417000 1.0080 0 + 14469 W1 3994 TIP3 OH2 OT -0.834000 15.9994 0 + 14470 W1 3994 TIP3 H1 HT 0.417000 1.0080 0 + 14471 W1 3994 TIP3 H2 HT 0.417000 1.0080 0 + 14472 W1 3995 TIP3 OH2 OT -0.834000 15.9994 0 + 14473 W1 3995 TIP3 H1 HT 0.417000 1.0080 0 + 14474 W1 3995 TIP3 H2 HT 0.417000 1.0080 0 + 14475 W1 3996 TIP3 OH2 OT -0.834000 15.9994 0 + 14476 W1 3996 TIP3 H1 HT 0.417000 1.0080 0 + 14477 W1 3996 TIP3 H2 HT 0.417000 1.0080 0 + 14478 W1 3997 TIP3 OH2 OT -0.834000 15.9994 0 + 14479 W1 3997 TIP3 H1 HT 0.417000 1.0080 0 + 14480 W1 3997 TIP3 H2 HT 0.417000 1.0080 0 + 14481 W1 3998 TIP3 OH2 OT -0.834000 15.9994 0 + 14482 W1 3998 TIP3 H1 HT 0.417000 1.0080 0 + 14483 W1 3998 TIP3 H2 HT 0.417000 1.0080 0 + 14484 W1 3999 TIP3 OH2 OT -0.834000 15.9994 0 + 14485 W1 3999 TIP3 H1 HT 0.417000 1.0080 0 + 14486 W1 3999 TIP3 H2 HT 0.417000 1.0080 0 + 14487 W1 4000 TIP3 OH2 OT -0.834000 15.9994 0 + 14488 W1 4000 TIP3 H1 HT 0.417000 1.0080 0 + 14489 W1 4000 TIP3 H2 HT 0.417000 1.0080 0 + 14490 W1 4001 TIP3 OH2 OT -0.834000 15.9994 0 + 14491 W1 4001 TIP3 H1 HT 0.417000 1.0080 0 + 14492 W1 4001 TIP3 H2 HT 0.417000 1.0080 0 + 14493 W1 4002 TIP3 OH2 OT -0.834000 15.9994 0 + 14494 W1 4002 TIP3 H1 HT 0.417000 1.0080 0 + 14495 W1 4002 TIP3 H2 HT 0.417000 1.0080 0 + 14496 W1 4003 TIP3 OH2 OT -0.834000 15.9994 0 + 14497 W1 4003 TIP3 H1 HT 0.417000 1.0080 0 + 14498 W1 4003 TIP3 H2 HT 0.417000 1.0080 0 + 14499 W1 4004 TIP3 OH2 OT -0.834000 15.9994 0 + 14500 W1 4004 TIP3 H1 HT 0.417000 1.0080 0 + 14501 W1 4004 TIP3 H2 HT 0.417000 1.0080 0 + 14502 W1 4005 TIP3 OH2 OT -0.834000 15.9994 0 + 14503 W1 4005 TIP3 H1 HT 0.417000 1.0080 0 + 14504 W1 4005 TIP3 H2 HT 0.417000 1.0080 0 + 14505 W1 4006 TIP3 OH2 OT -0.834000 15.9994 0 + 14506 W1 4006 TIP3 H1 HT 0.417000 1.0080 0 + 14507 W1 4006 TIP3 H2 HT 0.417000 1.0080 0 + 14508 W1 4007 TIP3 OH2 OT -0.834000 15.9994 0 + 14509 W1 4007 TIP3 H1 HT 0.417000 1.0080 0 + 14510 W1 4007 TIP3 H2 HT 0.417000 1.0080 0 + 14511 W1 4008 TIP3 OH2 OT -0.834000 15.9994 0 + 14512 W1 4008 TIP3 H1 HT 0.417000 1.0080 0 + 14513 W1 4008 TIP3 H2 HT 0.417000 1.0080 0 + 14514 W1 4009 TIP3 OH2 OT -0.834000 15.9994 0 + 14515 W1 4009 TIP3 H1 HT 0.417000 1.0080 0 + 14516 W1 4009 TIP3 H2 HT 0.417000 1.0080 0 + 14517 W1 4010 TIP3 OH2 OT -0.834000 15.9994 0 + 14518 W1 4010 TIP3 H1 HT 0.417000 1.0080 0 + 14519 W1 4010 TIP3 H2 HT 0.417000 1.0080 0 + 14520 W1 4011 TIP3 OH2 OT -0.834000 15.9994 0 + 14521 W1 4011 TIP3 H1 HT 0.417000 1.0080 0 + 14522 W1 4011 TIP3 H2 HT 0.417000 1.0080 0 + 14523 W1 4012 TIP3 OH2 OT -0.834000 15.9994 0 + 14524 W1 4012 TIP3 H1 HT 0.417000 1.0080 0 + 14525 W1 4012 TIP3 H2 HT 0.417000 1.0080 0 + 14526 W1 4013 TIP3 OH2 OT -0.834000 15.9994 0 + 14527 W1 4013 TIP3 H1 HT 0.417000 1.0080 0 + 14528 W1 4013 TIP3 H2 HT 0.417000 1.0080 0 + 14529 W1 4014 TIP3 OH2 OT -0.834000 15.9994 0 + 14530 W1 4014 TIP3 H1 HT 0.417000 1.0080 0 + 14531 W1 4014 TIP3 H2 HT 0.417000 1.0080 0 + 14532 W1 4015 TIP3 OH2 OT -0.834000 15.9994 0 + 14533 W1 4015 TIP3 H1 HT 0.417000 1.0080 0 + 14534 W1 4015 TIP3 H2 HT 0.417000 1.0080 0 + 14535 W1 4016 TIP3 OH2 OT -0.834000 15.9994 0 + 14536 W1 4016 TIP3 H1 HT 0.417000 1.0080 0 + 14537 W1 4016 TIP3 H2 HT 0.417000 1.0080 0 + 14538 W1 4017 TIP3 OH2 OT -0.834000 15.9994 0 + 14539 W1 4017 TIP3 H1 HT 0.417000 1.0080 0 + 14540 W1 4017 TIP3 H2 HT 0.417000 1.0080 0 + 14541 W1 4018 TIP3 OH2 OT -0.834000 15.9994 0 + 14542 W1 4018 TIP3 H1 HT 0.417000 1.0080 0 + 14543 W1 4018 TIP3 H2 HT 0.417000 1.0080 0 + 14544 W1 4019 TIP3 OH2 OT -0.834000 15.9994 0 + 14545 W1 4019 TIP3 H1 HT 0.417000 1.0080 0 + 14546 W1 4019 TIP3 H2 HT 0.417000 1.0080 0 + 14547 W1 4020 TIP3 OH2 OT -0.834000 15.9994 0 + 14548 W1 4020 TIP3 H1 HT 0.417000 1.0080 0 + 14549 W1 4020 TIP3 H2 HT 0.417000 1.0080 0 + 14550 W1 4021 TIP3 OH2 OT -0.834000 15.9994 0 + 14551 W1 4021 TIP3 H1 HT 0.417000 1.0080 0 + 14552 W1 4021 TIP3 H2 HT 0.417000 1.0080 0 + 14553 W1 4022 TIP3 OH2 OT -0.834000 15.9994 0 + 14554 W1 4022 TIP3 H1 HT 0.417000 1.0080 0 + 14555 W1 4022 TIP3 H2 HT 0.417000 1.0080 0 + 14556 W1 4023 TIP3 OH2 OT -0.834000 15.9994 0 + 14557 W1 4023 TIP3 H1 HT 0.417000 1.0080 0 + 14558 W1 4023 TIP3 H2 HT 0.417000 1.0080 0 + 14559 W1 4024 TIP3 OH2 OT -0.834000 15.9994 0 + 14560 W1 4024 TIP3 H1 HT 0.417000 1.0080 0 + 14561 W1 4024 TIP3 H2 HT 0.417000 1.0080 0 + 14562 W1 4025 TIP3 OH2 OT -0.834000 15.9994 0 + 14563 W1 4025 TIP3 H1 HT 0.417000 1.0080 0 + 14564 W1 4025 TIP3 H2 HT 0.417000 1.0080 0 + 14565 W1 4026 TIP3 OH2 OT -0.834000 15.9994 0 + 14566 W1 4026 TIP3 H1 HT 0.417000 1.0080 0 + 14567 W1 4026 TIP3 H2 HT 0.417000 1.0080 0 + 14568 W1 4027 TIP3 OH2 OT -0.834000 15.9994 0 + 14569 W1 4027 TIP3 H1 HT 0.417000 1.0080 0 + 14570 W1 4027 TIP3 H2 HT 0.417000 1.0080 0 + 14571 W1 4028 TIP3 OH2 OT -0.834000 15.9994 0 + 14572 W1 4028 TIP3 H1 HT 0.417000 1.0080 0 + 14573 W1 4028 TIP3 H2 HT 0.417000 1.0080 0 + 14574 W1 4029 TIP3 OH2 OT -0.834000 15.9994 0 + 14575 W1 4029 TIP3 H1 HT 0.417000 1.0080 0 + 14576 W1 4029 TIP3 H2 HT 0.417000 1.0080 0 + 14577 W1 4030 TIP3 OH2 OT -0.834000 15.9994 0 + 14578 W1 4030 TIP3 H1 HT 0.417000 1.0080 0 + 14579 W1 4030 TIP3 H2 HT 0.417000 1.0080 0 + 14580 W1 4031 TIP3 OH2 OT -0.834000 15.9994 0 + 14581 W1 4031 TIP3 H1 HT 0.417000 1.0080 0 + 14582 W1 4031 TIP3 H2 HT 0.417000 1.0080 0 + 14583 W1 4032 TIP3 OH2 OT -0.834000 15.9994 0 + 14584 W1 4032 TIP3 H1 HT 0.417000 1.0080 0 + 14585 W1 4032 TIP3 H2 HT 0.417000 1.0080 0 + 14586 W1 4033 TIP3 OH2 OT -0.834000 15.9994 0 + 14587 W1 4033 TIP3 H1 HT 0.417000 1.0080 0 + 14588 W1 4033 TIP3 H2 HT 0.417000 1.0080 0 + 14589 W1 4034 TIP3 OH2 OT -0.834000 15.9994 0 + 14590 W1 4034 TIP3 H1 HT 0.417000 1.0080 0 + 14591 W1 4034 TIP3 H2 HT 0.417000 1.0080 0 + 14592 W1 4035 TIP3 OH2 OT -0.834000 15.9994 0 + 14593 W1 4035 TIP3 H1 HT 0.417000 1.0080 0 + 14594 W1 4035 TIP3 H2 HT 0.417000 1.0080 0 + 14595 W1 4036 TIP3 OH2 OT -0.834000 15.9994 0 + 14596 W1 4036 TIP3 H1 HT 0.417000 1.0080 0 + 14597 W1 4036 TIP3 H2 HT 0.417000 1.0080 0 + 14598 W1 4037 TIP3 OH2 OT -0.834000 15.9994 0 + 14599 W1 4037 TIP3 H1 HT 0.417000 1.0080 0 + 14600 W1 4037 TIP3 H2 HT 0.417000 1.0080 0 + 14601 W1 4038 TIP3 OH2 OT -0.834000 15.9994 0 + 14602 W1 4038 TIP3 H1 HT 0.417000 1.0080 0 + 14603 W1 4038 TIP3 H2 HT 0.417000 1.0080 0 + 14604 W1 4039 TIP3 OH2 OT -0.834000 15.9994 0 + 14605 W1 4039 TIP3 H1 HT 0.417000 1.0080 0 + 14606 W1 4039 TIP3 H2 HT 0.417000 1.0080 0 + 14607 W1 4040 TIP3 OH2 OT -0.834000 15.9994 0 + 14608 W1 4040 TIP3 H1 HT 0.417000 1.0080 0 + 14609 W1 4040 TIP3 H2 HT 0.417000 1.0080 0 + 14610 W1 4041 TIP3 OH2 OT -0.834000 15.9994 0 + 14611 W1 4041 TIP3 H1 HT 0.417000 1.0080 0 + 14612 W1 4041 TIP3 H2 HT 0.417000 1.0080 0 + 14613 W1 4042 TIP3 OH2 OT -0.834000 15.9994 0 + 14614 W1 4042 TIP3 H1 HT 0.417000 1.0080 0 + 14615 W1 4042 TIP3 H2 HT 0.417000 1.0080 0 + 14616 W1 4043 TIP3 OH2 OT -0.834000 15.9994 0 + 14617 W1 4043 TIP3 H1 HT 0.417000 1.0080 0 + 14618 W1 4043 TIP3 H2 HT 0.417000 1.0080 0 + 14619 W1 4044 TIP3 OH2 OT -0.834000 15.9994 0 + 14620 W1 4044 TIP3 H1 HT 0.417000 1.0080 0 + 14621 W1 4044 TIP3 H2 HT 0.417000 1.0080 0 + 14622 W1 4045 TIP3 OH2 OT -0.834000 15.9994 0 + 14623 W1 4045 TIP3 H1 HT 0.417000 1.0080 0 + 14624 W1 4045 TIP3 H2 HT 0.417000 1.0080 0 + 14625 W1 4046 TIP3 OH2 OT -0.834000 15.9994 0 + 14626 W1 4046 TIP3 H1 HT 0.417000 1.0080 0 + 14627 W1 4046 TIP3 H2 HT 0.417000 1.0080 0 + 14628 W1 4047 TIP3 OH2 OT -0.834000 15.9994 0 + 14629 W1 4047 TIP3 H1 HT 0.417000 1.0080 0 + 14630 W1 4047 TIP3 H2 HT 0.417000 1.0080 0 + 14631 W1 4048 TIP3 OH2 OT -0.834000 15.9994 0 + 14632 W1 4048 TIP3 H1 HT 0.417000 1.0080 0 + 14633 W1 4048 TIP3 H2 HT 0.417000 1.0080 0 + 14634 W1 4049 TIP3 OH2 OT -0.834000 15.9994 0 + 14635 W1 4049 TIP3 H1 HT 0.417000 1.0080 0 + 14636 W1 4049 TIP3 H2 HT 0.417000 1.0080 0 + 14637 W1 4050 TIP3 OH2 OT -0.834000 15.9994 0 + 14638 W1 4050 TIP3 H1 HT 0.417000 1.0080 0 + 14639 W1 4050 TIP3 H2 HT 0.417000 1.0080 0 + 14640 W1 4051 TIP3 OH2 OT -0.834000 15.9994 0 + 14641 W1 4051 TIP3 H1 HT 0.417000 1.0080 0 + 14642 W1 4051 TIP3 H2 HT 0.417000 1.0080 0 + 14643 W1 4052 TIP3 OH2 OT -0.834000 15.9994 0 + 14644 W1 4052 TIP3 H1 HT 0.417000 1.0080 0 + 14645 W1 4052 TIP3 H2 HT 0.417000 1.0080 0 + 14646 W1 4053 TIP3 OH2 OT -0.834000 15.9994 0 + 14647 W1 4053 TIP3 H1 HT 0.417000 1.0080 0 + 14648 W1 4053 TIP3 H2 HT 0.417000 1.0080 0 + 14649 W1 4054 TIP3 OH2 OT -0.834000 15.9994 0 + 14650 W1 4054 TIP3 H1 HT 0.417000 1.0080 0 + 14651 W1 4054 TIP3 H2 HT 0.417000 1.0080 0 + 14652 W1 4055 TIP3 OH2 OT -0.834000 15.9994 0 + 14653 W1 4055 TIP3 H1 HT 0.417000 1.0080 0 + 14654 W1 4055 TIP3 H2 HT 0.417000 1.0080 0 + 14655 W1 4056 TIP3 OH2 OT -0.834000 15.9994 0 + 14656 W1 4056 TIP3 H1 HT 0.417000 1.0080 0 + 14657 W1 4056 TIP3 H2 HT 0.417000 1.0080 0 + 14658 W1 4057 TIP3 OH2 OT -0.834000 15.9994 0 + 14659 W1 4057 TIP3 H1 HT 0.417000 1.0080 0 + 14660 W1 4057 TIP3 H2 HT 0.417000 1.0080 0 + 14661 W1 4058 TIP3 OH2 OT -0.834000 15.9994 0 + 14662 W1 4058 TIP3 H1 HT 0.417000 1.0080 0 + 14663 W1 4058 TIP3 H2 HT 0.417000 1.0080 0 + 14664 W1 4059 TIP3 OH2 OT -0.834000 15.9994 0 + 14665 W1 4059 TIP3 H1 HT 0.417000 1.0080 0 + 14666 W1 4059 TIP3 H2 HT 0.417000 1.0080 0 + 14667 W1 4060 TIP3 OH2 OT -0.834000 15.9994 0 + 14668 W1 4060 TIP3 H1 HT 0.417000 1.0080 0 + 14669 W1 4060 TIP3 H2 HT 0.417000 1.0080 0 + 14670 W1 4061 TIP3 OH2 OT -0.834000 15.9994 0 + 14671 W1 4061 TIP3 H1 HT 0.417000 1.0080 0 + 14672 W1 4061 TIP3 H2 HT 0.417000 1.0080 0 + 14673 W1 4062 TIP3 OH2 OT -0.834000 15.9994 0 + 14674 W1 4062 TIP3 H1 HT 0.417000 1.0080 0 + 14675 W1 4062 TIP3 H2 HT 0.417000 1.0080 0 + 14676 W1 4063 TIP3 OH2 OT -0.834000 15.9994 0 + 14677 W1 4063 TIP3 H1 HT 0.417000 1.0080 0 + 14678 W1 4063 TIP3 H2 HT 0.417000 1.0080 0 + 14679 W1 4064 TIP3 OH2 OT -0.834000 15.9994 0 + 14680 W1 4064 TIP3 H1 HT 0.417000 1.0080 0 + 14681 W1 4064 TIP3 H2 HT 0.417000 1.0080 0 + 14682 W1 4065 TIP3 OH2 OT -0.834000 15.9994 0 + 14683 W1 4065 TIP3 H1 HT 0.417000 1.0080 0 + 14684 W1 4065 TIP3 H2 HT 0.417000 1.0080 0 + 14685 W1 4066 TIP3 OH2 OT -0.834000 15.9994 0 + 14686 W1 4066 TIP3 H1 HT 0.417000 1.0080 0 + 14687 W1 4066 TIP3 H2 HT 0.417000 1.0080 0 + 14688 W1 4067 TIP3 OH2 OT -0.834000 15.9994 0 + 14689 W1 4067 TIP3 H1 HT 0.417000 1.0080 0 + 14690 W1 4067 TIP3 H2 HT 0.417000 1.0080 0 + 14691 W1 4068 TIP3 OH2 OT -0.834000 15.9994 0 + 14692 W1 4068 TIP3 H1 HT 0.417000 1.0080 0 + 14693 W1 4068 TIP3 H2 HT 0.417000 1.0080 0 + 14694 W1 4069 TIP3 OH2 OT -0.834000 15.9994 0 + 14695 W1 4069 TIP3 H1 HT 0.417000 1.0080 0 + 14696 W1 4069 TIP3 H2 HT 0.417000 1.0080 0 + 14697 W1 4070 TIP3 OH2 OT -0.834000 15.9994 0 + 14698 W1 4070 TIP3 H1 HT 0.417000 1.0080 0 + 14699 W1 4070 TIP3 H2 HT 0.417000 1.0080 0 + 14700 W1 4071 TIP3 OH2 OT -0.834000 15.9994 0 + 14701 W1 4071 TIP3 H1 HT 0.417000 1.0080 0 + 14702 W1 4071 TIP3 H2 HT 0.417000 1.0080 0 + 14703 W1 4072 TIP3 OH2 OT -0.834000 15.9994 0 + 14704 W1 4072 TIP3 H1 HT 0.417000 1.0080 0 + 14705 W1 4072 TIP3 H2 HT 0.417000 1.0080 0 + 14706 W1 4073 TIP3 OH2 OT -0.834000 15.9994 0 + 14707 W1 4073 TIP3 H1 HT 0.417000 1.0080 0 + 14708 W1 4073 TIP3 H2 HT 0.417000 1.0080 0 + 14709 W1 4074 TIP3 OH2 OT -0.834000 15.9994 0 + 14710 W1 4074 TIP3 H1 HT 0.417000 1.0080 0 + 14711 W1 4074 TIP3 H2 HT 0.417000 1.0080 0 + 14712 W1 4075 TIP3 OH2 OT -0.834000 15.9994 0 + 14713 W1 4075 TIP3 H1 HT 0.417000 1.0080 0 + 14714 W1 4075 TIP3 H2 HT 0.417000 1.0080 0 + 14715 W1 4076 TIP3 OH2 OT -0.834000 15.9994 0 + 14716 W1 4076 TIP3 H1 HT 0.417000 1.0080 0 + 14717 W1 4076 TIP3 H2 HT 0.417000 1.0080 0 + 14718 W1 4077 TIP3 OH2 OT -0.834000 15.9994 0 + 14719 W1 4077 TIP3 H1 HT 0.417000 1.0080 0 + 14720 W1 4077 TIP3 H2 HT 0.417000 1.0080 0 + 14721 W1 4078 TIP3 OH2 OT -0.834000 15.9994 0 + 14722 W1 4078 TIP3 H1 HT 0.417000 1.0080 0 + 14723 W1 4078 TIP3 H2 HT 0.417000 1.0080 0 + 14724 W1 4079 TIP3 OH2 OT -0.834000 15.9994 0 + 14725 W1 4079 TIP3 H1 HT 0.417000 1.0080 0 + 14726 W1 4079 TIP3 H2 HT 0.417000 1.0080 0 + 14727 W1 4080 TIP3 OH2 OT -0.834000 15.9994 0 + 14728 W1 4080 TIP3 H1 HT 0.417000 1.0080 0 + 14729 W1 4080 TIP3 H2 HT 0.417000 1.0080 0 + 14730 W1 4081 TIP3 OH2 OT -0.834000 15.9994 0 + 14731 W1 4081 TIP3 H1 HT 0.417000 1.0080 0 + 14732 W1 4081 TIP3 H2 HT 0.417000 1.0080 0 + 14733 W1 4082 TIP3 OH2 OT -0.834000 15.9994 0 + 14734 W1 4082 TIP3 H1 HT 0.417000 1.0080 0 + 14735 W1 4082 TIP3 H2 HT 0.417000 1.0080 0 + 14736 W1 4083 TIP3 OH2 OT -0.834000 15.9994 0 + 14737 W1 4083 TIP3 H1 HT 0.417000 1.0080 0 + 14738 W1 4083 TIP3 H2 HT 0.417000 1.0080 0 + 14739 W1 4084 TIP3 OH2 OT -0.834000 15.9994 0 + 14740 W1 4084 TIP3 H1 HT 0.417000 1.0080 0 + 14741 W1 4084 TIP3 H2 HT 0.417000 1.0080 0 + 14742 W1 4085 TIP3 OH2 OT -0.834000 15.9994 0 + 14743 W1 4085 TIP3 H1 HT 0.417000 1.0080 0 + 14744 W1 4085 TIP3 H2 HT 0.417000 1.0080 0 + 14745 W1 4086 TIP3 OH2 OT -0.834000 15.9994 0 + 14746 W1 4086 TIP3 H1 HT 0.417000 1.0080 0 + 14747 W1 4086 TIP3 H2 HT 0.417000 1.0080 0 + 14748 W1 4087 TIP3 OH2 OT -0.834000 15.9994 0 + 14749 W1 4087 TIP3 H1 HT 0.417000 1.0080 0 + 14750 W1 4087 TIP3 H2 HT 0.417000 1.0080 0 + 14751 W1 4088 TIP3 OH2 OT -0.834000 15.9994 0 + 14752 W1 4088 TIP3 H1 HT 0.417000 1.0080 0 + 14753 W1 4088 TIP3 H2 HT 0.417000 1.0080 0 + 14754 W1 4089 TIP3 OH2 OT -0.834000 15.9994 0 + 14755 W1 4089 TIP3 H1 HT 0.417000 1.0080 0 + 14756 W1 4089 TIP3 H2 HT 0.417000 1.0080 0 + 14757 W1 4090 TIP3 OH2 OT -0.834000 15.9994 0 + 14758 W1 4090 TIP3 H1 HT 0.417000 1.0080 0 + 14759 W1 4090 TIP3 H2 HT 0.417000 1.0080 0 + 14760 W1 4091 TIP3 OH2 OT -0.834000 15.9994 0 + 14761 W1 4091 TIP3 H1 HT 0.417000 1.0080 0 + 14762 W1 4091 TIP3 H2 HT 0.417000 1.0080 0 + 14763 W1 4092 TIP3 OH2 OT -0.834000 15.9994 0 + 14764 W1 4092 TIP3 H1 HT 0.417000 1.0080 0 + 14765 W1 4092 TIP3 H2 HT 0.417000 1.0080 0 + 14766 W1 4093 TIP3 OH2 OT -0.834000 15.9994 0 + 14767 W1 4093 TIP3 H1 HT 0.417000 1.0080 0 + 14768 W1 4093 TIP3 H2 HT 0.417000 1.0080 0 + 14769 W1 4094 TIP3 OH2 OT -0.834000 15.9994 0 + 14770 W1 4094 TIP3 H1 HT 0.417000 1.0080 0 + 14771 W1 4094 TIP3 H2 HT 0.417000 1.0080 0 + 14772 W1 4095 TIP3 OH2 OT -0.834000 15.9994 0 + 14773 W1 4095 TIP3 H1 HT 0.417000 1.0080 0 + 14774 W1 4095 TIP3 H2 HT 0.417000 1.0080 0 + 14775 W1 4096 TIP3 OH2 OT -0.834000 15.9994 0 + 14776 W1 4096 TIP3 H1 HT 0.417000 1.0080 0 + 14777 W1 4096 TIP3 H2 HT 0.417000 1.0080 0 + 14778 W1 4097 TIP3 OH2 OT -0.834000 15.9994 0 + 14779 W1 4097 TIP3 H1 HT 0.417000 1.0080 0 + 14780 W1 4097 TIP3 H2 HT 0.417000 1.0080 0 + 14781 W1 4098 TIP3 OH2 OT -0.834000 15.9994 0 + 14782 W1 4098 TIP3 H1 HT 0.417000 1.0080 0 + 14783 W1 4098 TIP3 H2 HT 0.417000 1.0080 0 + 14784 W1 4099 TIP3 OH2 OT -0.834000 15.9994 0 + 14785 W1 4099 TIP3 H1 HT 0.417000 1.0080 0 + 14786 W1 4099 TIP3 H2 HT 0.417000 1.0080 0 + 14787 W1 4100 TIP3 OH2 OT -0.834000 15.9994 0 + 14788 W1 4100 TIP3 H1 HT 0.417000 1.0080 0 + 14789 W1 4100 TIP3 H2 HT 0.417000 1.0080 0 + 14790 W1 4101 TIP3 OH2 OT -0.834000 15.9994 0 + 14791 W1 4101 TIP3 H1 HT 0.417000 1.0080 0 + 14792 W1 4101 TIP3 H2 HT 0.417000 1.0080 0 + 14793 W1 4102 TIP3 OH2 OT -0.834000 15.9994 0 + 14794 W1 4102 TIP3 H1 HT 0.417000 1.0080 0 + 14795 W1 4102 TIP3 H2 HT 0.417000 1.0080 0 + 14796 W1 4103 TIP3 OH2 OT -0.834000 15.9994 0 + 14797 W1 4103 TIP3 H1 HT 0.417000 1.0080 0 + 14798 W1 4103 TIP3 H2 HT 0.417000 1.0080 0 + 14799 W1 4104 TIP3 OH2 OT -0.834000 15.9994 0 + 14800 W1 4104 TIP3 H1 HT 0.417000 1.0080 0 + 14801 W1 4104 TIP3 H2 HT 0.417000 1.0080 0 + 14802 W1 4105 TIP3 OH2 OT -0.834000 15.9994 0 + 14803 W1 4105 TIP3 H1 HT 0.417000 1.0080 0 + 14804 W1 4105 TIP3 H2 HT 0.417000 1.0080 0 + 14805 W1 4106 TIP3 OH2 OT -0.834000 15.9994 0 + 14806 W1 4106 TIP3 H1 HT 0.417000 1.0080 0 + 14807 W1 4106 TIP3 H2 HT 0.417000 1.0080 0 + 14808 W1 4107 TIP3 OH2 OT -0.834000 15.9994 0 + 14809 W1 4107 TIP3 H1 HT 0.417000 1.0080 0 + 14810 W1 4107 TIP3 H2 HT 0.417000 1.0080 0 + 14811 W1 4108 TIP3 OH2 OT -0.834000 15.9994 0 + 14812 W1 4108 TIP3 H1 HT 0.417000 1.0080 0 + 14813 W1 4108 TIP3 H2 HT 0.417000 1.0080 0 + 14814 W1 4109 TIP3 OH2 OT -0.834000 15.9994 0 + 14815 W1 4109 TIP3 H1 HT 0.417000 1.0080 0 + 14816 W1 4109 TIP3 H2 HT 0.417000 1.0080 0 + 14817 W1 4110 TIP3 OH2 OT -0.834000 15.9994 0 + 14818 W1 4110 TIP3 H1 HT 0.417000 1.0080 0 + 14819 W1 4110 TIP3 H2 HT 0.417000 1.0080 0 + 14820 W1 4111 TIP3 OH2 OT -0.834000 15.9994 0 + 14821 W1 4111 TIP3 H1 HT 0.417000 1.0080 0 + 14822 W1 4111 TIP3 H2 HT 0.417000 1.0080 0 + 14823 W1 4112 TIP3 OH2 OT -0.834000 15.9994 0 + 14824 W1 4112 TIP3 H1 HT 0.417000 1.0080 0 + 14825 W1 4112 TIP3 H2 HT 0.417000 1.0080 0 + 14826 W1 4113 TIP3 OH2 OT -0.834000 15.9994 0 + 14827 W1 4113 TIP3 H1 HT 0.417000 1.0080 0 + 14828 W1 4113 TIP3 H2 HT 0.417000 1.0080 0 + 14829 W1 4114 TIP3 OH2 OT -0.834000 15.9994 0 + 14830 W1 4114 TIP3 H1 HT 0.417000 1.0080 0 + 14831 W1 4114 TIP3 H2 HT 0.417000 1.0080 0 + 14832 W1 4115 TIP3 OH2 OT -0.834000 15.9994 0 + 14833 W1 4115 TIP3 H1 HT 0.417000 1.0080 0 + 14834 W1 4115 TIP3 H2 HT 0.417000 1.0080 0 + 14835 W1 4116 TIP3 OH2 OT -0.834000 15.9994 0 + 14836 W1 4116 TIP3 H1 HT 0.417000 1.0080 0 + 14837 W1 4116 TIP3 H2 HT 0.417000 1.0080 0 + 14838 W1 4117 TIP3 OH2 OT -0.834000 15.9994 0 + 14839 W1 4117 TIP3 H1 HT 0.417000 1.0080 0 + 14840 W1 4117 TIP3 H2 HT 0.417000 1.0080 0 + 14841 W1 4118 TIP3 OH2 OT -0.834000 15.9994 0 + 14842 W1 4118 TIP3 H1 HT 0.417000 1.0080 0 + 14843 W1 4118 TIP3 H2 HT 0.417000 1.0080 0 + 14844 W1 4119 TIP3 OH2 OT -0.834000 15.9994 0 + 14845 W1 4119 TIP3 H1 HT 0.417000 1.0080 0 + 14846 W1 4119 TIP3 H2 HT 0.417000 1.0080 0 + 14847 W1 4120 TIP3 OH2 OT -0.834000 15.9994 0 + 14848 W1 4120 TIP3 H1 HT 0.417000 1.0080 0 + 14849 W1 4120 TIP3 H2 HT 0.417000 1.0080 0 + 14850 W1 4121 TIP3 OH2 OT -0.834000 15.9994 0 + 14851 W1 4121 TIP3 H1 HT 0.417000 1.0080 0 + 14852 W1 4121 TIP3 H2 HT 0.417000 1.0080 0 + 14853 W1 4122 TIP3 OH2 OT -0.834000 15.9994 0 + 14854 W1 4122 TIP3 H1 HT 0.417000 1.0080 0 + 14855 W1 4122 TIP3 H2 HT 0.417000 1.0080 0 + 14856 W1 4123 TIP3 OH2 OT -0.834000 15.9994 0 + 14857 W1 4123 TIP3 H1 HT 0.417000 1.0080 0 + 14858 W1 4123 TIP3 H2 HT 0.417000 1.0080 0 + 14859 W1 4124 TIP3 OH2 OT -0.834000 15.9994 0 + 14860 W1 4124 TIP3 H1 HT 0.417000 1.0080 0 + 14861 W1 4124 TIP3 H2 HT 0.417000 1.0080 0 + 14862 W1 4125 TIP3 OH2 OT -0.834000 15.9994 0 + 14863 W1 4125 TIP3 H1 HT 0.417000 1.0080 0 + 14864 W1 4125 TIP3 H2 HT 0.417000 1.0080 0 + 14865 W1 4126 TIP3 OH2 OT -0.834000 15.9994 0 + 14866 W1 4126 TIP3 H1 HT 0.417000 1.0080 0 + 14867 W1 4126 TIP3 H2 HT 0.417000 1.0080 0 + 14868 W1 4127 TIP3 OH2 OT -0.834000 15.9994 0 + 14869 W1 4127 TIP3 H1 HT 0.417000 1.0080 0 + 14870 W1 4127 TIP3 H2 HT 0.417000 1.0080 0 + 14871 W1 4128 TIP3 OH2 OT -0.834000 15.9994 0 + 14872 W1 4128 TIP3 H1 HT 0.417000 1.0080 0 + 14873 W1 4128 TIP3 H2 HT 0.417000 1.0080 0 + 14874 W1 4129 TIP3 OH2 OT -0.834000 15.9994 0 + 14875 W1 4129 TIP3 H1 HT 0.417000 1.0080 0 + 14876 W1 4129 TIP3 H2 HT 0.417000 1.0080 0 + 14877 W1 4130 TIP3 OH2 OT -0.834000 15.9994 0 + 14878 W1 4130 TIP3 H1 HT 0.417000 1.0080 0 + 14879 W1 4130 TIP3 H2 HT 0.417000 1.0080 0 + 14880 W1 4131 TIP3 OH2 OT -0.834000 15.9994 0 + 14881 W1 4131 TIP3 H1 HT 0.417000 1.0080 0 + 14882 W1 4131 TIP3 H2 HT 0.417000 1.0080 0 + 14883 W1 4132 TIP3 OH2 OT -0.834000 15.9994 0 + 14884 W1 4132 TIP3 H1 HT 0.417000 1.0080 0 + 14885 W1 4132 TIP3 H2 HT 0.417000 1.0080 0 + 14886 W1 4133 TIP3 OH2 OT -0.834000 15.9994 0 + 14887 W1 4133 TIP3 H1 HT 0.417000 1.0080 0 + 14888 W1 4133 TIP3 H2 HT 0.417000 1.0080 0 + 14889 W1 4134 TIP3 OH2 OT -0.834000 15.9994 0 + 14890 W1 4134 TIP3 H1 HT 0.417000 1.0080 0 + 14891 W1 4134 TIP3 H2 HT 0.417000 1.0080 0 + 14892 W1 4135 TIP3 OH2 OT -0.834000 15.9994 0 + 14893 W1 4135 TIP3 H1 HT 0.417000 1.0080 0 + 14894 W1 4135 TIP3 H2 HT 0.417000 1.0080 0 + 14895 W1 4136 TIP3 OH2 OT -0.834000 15.9994 0 + 14896 W1 4136 TIP3 H1 HT 0.417000 1.0080 0 + 14897 W1 4136 TIP3 H2 HT 0.417000 1.0080 0 + 14898 W1 4137 TIP3 OH2 OT -0.834000 15.9994 0 + 14899 W1 4137 TIP3 H1 HT 0.417000 1.0080 0 + 14900 W1 4137 TIP3 H2 HT 0.417000 1.0080 0 + 14901 W1 4138 TIP3 OH2 OT -0.834000 15.9994 0 + 14902 W1 4138 TIP3 H1 HT 0.417000 1.0080 0 + 14903 W1 4138 TIP3 H2 HT 0.417000 1.0080 0 + 14904 W1 4139 TIP3 OH2 OT -0.834000 15.9994 0 + 14905 W1 4139 TIP3 H1 HT 0.417000 1.0080 0 + 14906 W1 4139 TIP3 H2 HT 0.417000 1.0080 0 + 14907 W1 4140 TIP3 OH2 OT -0.834000 15.9994 0 + 14908 W1 4140 TIP3 H1 HT 0.417000 1.0080 0 + 14909 W1 4140 TIP3 H2 HT 0.417000 1.0080 0 + 14910 W1 4141 TIP3 OH2 OT -0.834000 15.9994 0 + 14911 W1 4141 TIP3 H1 HT 0.417000 1.0080 0 + 14912 W1 4141 TIP3 H2 HT 0.417000 1.0080 0 + 14913 W1 4142 TIP3 OH2 OT -0.834000 15.9994 0 + 14914 W1 4142 TIP3 H1 HT 0.417000 1.0080 0 + 14915 W1 4142 TIP3 H2 HT 0.417000 1.0080 0 + 14916 W1 4143 TIP3 OH2 OT -0.834000 15.9994 0 + 14917 W1 4143 TIP3 H1 HT 0.417000 1.0080 0 + 14918 W1 4143 TIP3 H2 HT 0.417000 1.0080 0 + 14919 W1 4144 TIP3 OH2 OT -0.834000 15.9994 0 + 14920 W1 4144 TIP3 H1 HT 0.417000 1.0080 0 + 14921 W1 4144 TIP3 H2 HT 0.417000 1.0080 0 + 14922 W1 4145 TIP3 OH2 OT -0.834000 15.9994 0 + 14923 W1 4145 TIP3 H1 HT 0.417000 1.0080 0 + 14924 W1 4145 TIP3 H2 HT 0.417000 1.0080 0 + 14925 W1 4146 TIP3 OH2 OT -0.834000 15.9994 0 + 14926 W1 4146 TIP3 H1 HT 0.417000 1.0080 0 + 14927 W1 4146 TIP3 H2 HT 0.417000 1.0080 0 + 14928 W1 4147 TIP3 OH2 OT -0.834000 15.9994 0 + 14929 W1 4147 TIP3 H1 HT 0.417000 1.0080 0 + 14930 W1 4147 TIP3 H2 HT 0.417000 1.0080 0 + 14931 W1 4148 TIP3 OH2 OT -0.834000 15.9994 0 + 14932 W1 4148 TIP3 H1 HT 0.417000 1.0080 0 + 14933 W1 4148 TIP3 H2 HT 0.417000 1.0080 0 + 14934 W1 4149 TIP3 OH2 OT -0.834000 15.9994 0 + 14935 W1 4149 TIP3 H1 HT 0.417000 1.0080 0 + 14936 W1 4149 TIP3 H2 HT 0.417000 1.0080 0 + 14937 W1 4150 TIP3 OH2 OT -0.834000 15.9994 0 + 14938 W1 4150 TIP3 H1 HT 0.417000 1.0080 0 + 14939 W1 4150 TIP3 H2 HT 0.417000 1.0080 0 + 14940 W1 4151 TIP3 OH2 OT -0.834000 15.9994 0 + 14941 W1 4151 TIP3 H1 HT 0.417000 1.0080 0 + 14942 W1 4151 TIP3 H2 HT 0.417000 1.0080 0 + 14943 W1 4152 TIP3 OH2 OT -0.834000 15.9994 0 + 14944 W1 4152 TIP3 H1 HT 0.417000 1.0080 0 + 14945 W1 4152 TIP3 H2 HT 0.417000 1.0080 0 + 14946 W1 4153 TIP3 OH2 OT -0.834000 15.9994 0 + 14947 W1 4153 TIP3 H1 HT 0.417000 1.0080 0 + 14948 W1 4153 TIP3 H2 HT 0.417000 1.0080 0 + 14949 W1 4154 TIP3 OH2 OT -0.834000 15.9994 0 + 14950 W1 4154 TIP3 H1 HT 0.417000 1.0080 0 + 14951 W1 4154 TIP3 H2 HT 0.417000 1.0080 0 + 14952 W1 4155 TIP3 OH2 OT -0.834000 15.9994 0 + 14953 W1 4155 TIP3 H1 HT 0.417000 1.0080 0 + 14954 W1 4155 TIP3 H2 HT 0.417000 1.0080 0 + 14955 W1 4156 TIP3 OH2 OT -0.834000 15.9994 0 + 14956 W1 4156 TIP3 H1 HT 0.417000 1.0080 0 + 14957 W1 4156 TIP3 H2 HT 0.417000 1.0080 0 + 14958 W1 4157 TIP3 OH2 OT -0.834000 15.9994 0 + 14959 W1 4157 TIP3 H1 HT 0.417000 1.0080 0 + 14960 W1 4157 TIP3 H2 HT 0.417000 1.0080 0 + 14961 W1 4158 TIP3 OH2 OT -0.834000 15.9994 0 + 14962 W1 4158 TIP3 H1 HT 0.417000 1.0080 0 + 14963 W1 4158 TIP3 H2 HT 0.417000 1.0080 0 + 14964 W1 4159 TIP3 OH2 OT -0.834000 15.9994 0 + 14965 W1 4159 TIP3 H1 HT 0.417000 1.0080 0 + 14966 W1 4159 TIP3 H2 HT 0.417000 1.0080 0 + 14967 W1 4160 TIP3 OH2 OT -0.834000 15.9994 0 + 14968 W1 4160 TIP3 H1 HT 0.417000 1.0080 0 + 14969 W1 4160 TIP3 H2 HT 0.417000 1.0080 0 + 14970 W1 4161 TIP3 OH2 OT -0.834000 15.9994 0 + 14971 W1 4161 TIP3 H1 HT 0.417000 1.0080 0 + 14972 W1 4161 TIP3 H2 HT 0.417000 1.0080 0 + 14973 W1 4162 TIP3 OH2 OT -0.834000 15.9994 0 + 14974 W1 4162 TIP3 H1 HT 0.417000 1.0080 0 + 14975 W1 4162 TIP3 H2 HT 0.417000 1.0080 0 + 14976 W1 4163 TIP3 OH2 OT -0.834000 15.9994 0 + 14977 W1 4163 TIP3 H1 HT 0.417000 1.0080 0 + 14978 W1 4163 TIP3 H2 HT 0.417000 1.0080 0 + 14979 W1 4164 TIP3 OH2 OT -0.834000 15.9994 0 + 14980 W1 4164 TIP3 H1 HT 0.417000 1.0080 0 + 14981 W1 4164 TIP3 H2 HT 0.417000 1.0080 0 + 14982 W1 4165 TIP3 OH2 OT -0.834000 15.9994 0 + 14983 W1 4165 TIP3 H1 HT 0.417000 1.0080 0 + 14984 W1 4165 TIP3 H2 HT 0.417000 1.0080 0 + 14985 W1 4166 TIP3 OH2 OT -0.834000 15.9994 0 + 14986 W1 4166 TIP3 H1 HT 0.417000 1.0080 0 + 14987 W1 4166 TIP3 H2 HT 0.417000 1.0080 0 + 14988 W1 4167 TIP3 OH2 OT -0.834000 15.9994 0 + 14989 W1 4167 TIP3 H1 HT 0.417000 1.0080 0 + 14990 W1 4167 TIP3 H2 HT 0.417000 1.0080 0 + 14991 W1 4168 TIP3 OH2 OT -0.834000 15.9994 0 + 14992 W1 4168 TIP3 H1 HT 0.417000 1.0080 0 + 14993 W1 4168 TIP3 H2 HT 0.417000 1.0080 0 + 14994 W1 4169 TIP3 OH2 OT -0.834000 15.9994 0 + 14995 W1 4169 TIP3 H1 HT 0.417000 1.0080 0 + 14996 W1 4169 TIP3 H2 HT 0.417000 1.0080 0 + 14997 W1 4170 TIP3 OH2 OT -0.834000 15.9994 0 + 14998 W1 4170 TIP3 H1 HT 0.417000 1.0080 0 + 14999 W1 4170 TIP3 H2 HT 0.417000 1.0080 0 + 15000 W1 4171 TIP3 OH2 OT -0.834000 15.9994 0 + 15001 W1 4171 TIP3 H1 HT 0.417000 1.0080 0 + 15002 W1 4171 TIP3 H2 HT 0.417000 1.0080 0 + 15003 W1 4172 TIP3 OH2 OT -0.834000 15.9994 0 + 15004 W1 4172 TIP3 H1 HT 0.417000 1.0080 0 + 15005 W1 4172 TIP3 H2 HT 0.417000 1.0080 0 + 15006 W1 4173 TIP3 OH2 OT -0.834000 15.9994 0 + 15007 W1 4173 TIP3 H1 HT 0.417000 1.0080 0 + 15008 W1 4173 TIP3 H2 HT 0.417000 1.0080 0 + 15009 W1 4174 TIP3 OH2 OT -0.834000 15.9994 0 + 15010 W1 4174 TIP3 H1 HT 0.417000 1.0080 0 + 15011 W1 4174 TIP3 H2 HT 0.417000 1.0080 0 + 15012 W1 4175 TIP3 OH2 OT -0.834000 15.9994 0 + 15013 W1 4175 TIP3 H1 HT 0.417000 1.0080 0 + 15014 W1 4175 TIP3 H2 HT 0.417000 1.0080 0 + 15015 W1 4176 TIP3 OH2 OT -0.834000 15.9994 0 + 15016 W1 4176 TIP3 H1 HT 0.417000 1.0080 0 + 15017 W1 4176 TIP3 H2 HT 0.417000 1.0080 0 + 15018 W1 4177 TIP3 OH2 OT -0.834000 15.9994 0 + 15019 W1 4177 TIP3 H1 HT 0.417000 1.0080 0 + 15020 W1 4177 TIP3 H2 HT 0.417000 1.0080 0 + 15021 W1 4178 TIP3 OH2 OT -0.834000 15.9994 0 + 15022 W1 4178 TIP3 H1 HT 0.417000 1.0080 0 + 15023 W1 4178 TIP3 H2 HT 0.417000 1.0080 0 + 15024 W1 4179 TIP3 OH2 OT -0.834000 15.9994 0 + 15025 W1 4179 TIP3 H1 HT 0.417000 1.0080 0 + 15026 W1 4179 TIP3 H2 HT 0.417000 1.0080 0 + 15027 W1 4180 TIP3 OH2 OT -0.834000 15.9994 0 + 15028 W1 4180 TIP3 H1 HT 0.417000 1.0080 0 + 15029 W1 4180 TIP3 H2 HT 0.417000 1.0080 0 + 15030 W1 4181 TIP3 OH2 OT -0.834000 15.9994 0 + 15031 W1 4181 TIP3 H1 HT 0.417000 1.0080 0 + 15032 W1 4181 TIP3 H2 HT 0.417000 1.0080 0 + 15033 W1 4182 TIP3 OH2 OT -0.834000 15.9994 0 + 15034 W1 4182 TIP3 H1 HT 0.417000 1.0080 0 + 15035 W1 4182 TIP3 H2 HT 0.417000 1.0080 0 + 15036 W1 4183 TIP3 OH2 OT -0.834000 15.9994 0 + 15037 W1 4183 TIP3 H1 HT 0.417000 1.0080 0 + 15038 W1 4183 TIP3 H2 HT 0.417000 1.0080 0 + 15039 W1 4184 TIP3 OH2 OT -0.834000 15.9994 0 + 15040 W1 4184 TIP3 H1 HT 0.417000 1.0080 0 + 15041 W1 4184 TIP3 H2 HT 0.417000 1.0080 0 + 15042 W1 4185 TIP3 OH2 OT -0.834000 15.9994 0 + 15043 W1 4185 TIP3 H1 HT 0.417000 1.0080 0 + 15044 W1 4185 TIP3 H2 HT 0.417000 1.0080 0 + 15045 W1 4186 TIP3 OH2 OT -0.834000 15.9994 0 + 15046 W1 4186 TIP3 H1 HT 0.417000 1.0080 0 + 15047 W1 4186 TIP3 H2 HT 0.417000 1.0080 0 + 15048 W1 4187 TIP3 OH2 OT -0.834000 15.9994 0 + 15049 W1 4187 TIP3 H1 HT 0.417000 1.0080 0 + 15050 W1 4187 TIP3 H2 HT 0.417000 1.0080 0 + 15051 W1 4188 TIP3 OH2 OT -0.834000 15.9994 0 + 15052 W1 4188 TIP3 H1 HT 0.417000 1.0080 0 + 15053 W1 4188 TIP3 H2 HT 0.417000 1.0080 0 + 15054 W1 4189 TIP3 OH2 OT -0.834000 15.9994 0 + 15055 W1 4189 TIP3 H1 HT 0.417000 1.0080 0 + 15056 W1 4189 TIP3 H2 HT 0.417000 1.0080 0 + 15057 W1 4190 TIP3 OH2 OT -0.834000 15.9994 0 + 15058 W1 4190 TIP3 H1 HT 0.417000 1.0080 0 + 15059 W1 4190 TIP3 H2 HT 0.417000 1.0080 0 + 15060 W1 4191 TIP3 OH2 OT -0.834000 15.9994 0 + 15061 W1 4191 TIP3 H1 HT 0.417000 1.0080 0 + 15062 W1 4191 TIP3 H2 HT 0.417000 1.0080 0 + 15063 W1 4192 TIP3 OH2 OT -0.834000 15.9994 0 + 15064 W1 4192 TIP3 H1 HT 0.417000 1.0080 0 + 15065 W1 4192 TIP3 H2 HT 0.417000 1.0080 0 + 15066 W1 4193 TIP3 OH2 OT -0.834000 15.9994 0 + 15067 W1 4193 TIP3 H1 HT 0.417000 1.0080 0 + 15068 W1 4193 TIP3 H2 HT 0.417000 1.0080 0 + 15069 W1 4194 TIP3 OH2 OT -0.834000 15.9994 0 + 15070 W1 4194 TIP3 H1 HT 0.417000 1.0080 0 + 15071 W1 4194 TIP3 H2 HT 0.417000 1.0080 0 + 15072 W1 4195 TIP3 OH2 OT -0.834000 15.9994 0 + 15073 W1 4195 TIP3 H1 HT 0.417000 1.0080 0 + 15074 W1 4195 TIP3 H2 HT 0.417000 1.0080 0 + 15075 W1 4196 TIP3 OH2 OT -0.834000 15.9994 0 + 15076 W1 4196 TIP3 H1 HT 0.417000 1.0080 0 + 15077 W1 4196 TIP3 H2 HT 0.417000 1.0080 0 + 15078 W1 4197 TIP3 OH2 OT -0.834000 15.9994 0 + 15079 W1 4197 TIP3 H1 HT 0.417000 1.0080 0 + 15080 W1 4197 TIP3 H2 HT 0.417000 1.0080 0 + 15081 W1 4198 TIP3 OH2 OT -0.834000 15.9994 0 + 15082 W1 4198 TIP3 H1 HT 0.417000 1.0080 0 + 15083 W1 4198 TIP3 H2 HT 0.417000 1.0080 0 + 15084 W1 4199 TIP3 OH2 OT -0.834000 15.9994 0 + 15085 W1 4199 TIP3 H1 HT 0.417000 1.0080 0 + 15086 W1 4199 TIP3 H2 HT 0.417000 1.0080 0 + 15087 W1 4200 TIP3 OH2 OT -0.834000 15.9994 0 + 15088 W1 4200 TIP3 H1 HT 0.417000 1.0080 0 + 15089 W1 4200 TIP3 H2 HT 0.417000 1.0080 0 + 15090 W1 4201 TIP3 OH2 OT -0.834000 15.9994 0 + 15091 W1 4201 TIP3 H1 HT 0.417000 1.0080 0 + 15092 W1 4201 TIP3 H2 HT 0.417000 1.0080 0 + 15093 W1 4202 TIP3 OH2 OT -0.834000 15.9994 0 + 15094 W1 4202 TIP3 H1 HT 0.417000 1.0080 0 + 15095 W1 4202 TIP3 H2 HT 0.417000 1.0080 0 + 15096 W1 4203 TIP3 OH2 OT -0.834000 15.9994 0 + 15097 W1 4203 TIP3 H1 HT 0.417000 1.0080 0 + 15098 W1 4203 TIP3 H2 HT 0.417000 1.0080 0 + 15099 W1 4204 TIP3 OH2 OT -0.834000 15.9994 0 + 15100 W1 4204 TIP3 H1 HT 0.417000 1.0080 0 + 15101 W1 4204 TIP3 H2 HT 0.417000 1.0080 0 + 15102 W1 4205 TIP3 OH2 OT -0.834000 15.9994 0 + 15103 W1 4205 TIP3 H1 HT 0.417000 1.0080 0 + 15104 W1 4205 TIP3 H2 HT 0.417000 1.0080 0 + 15105 W1 4206 TIP3 OH2 OT -0.834000 15.9994 0 + 15106 W1 4206 TIP3 H1 HT 0.417000 1.0080 0 + 15107 W1 4206 TIP3 H2 HT 0.417000 1.0080 0 + 15108 W1 4207 TIP3 OH2 OT -0.834000 15.9994 0 + 15109 W1 4207 TIP3 H1 HT 0.417000 1.0080 0 + 15110 W1 4207 TIP3 H2 HT 0.417000 1.0080 0 + 15111 W1 4208 TIP3 OH2 OT -0.834000 15.9994 0 + 15112 W1 4208 TIP3 H1 HT 0.417000 1.0080 0 + 15113 W1 4208 TIP3 H2 HT 0.417000 1.0080 0 + 15114 W1 4209 TIP3 OH2 OT -0.834000 15.9994 0 + 15115 W1 4209 TIP3 H1 HT 0.417000 1.0080 0 + 15116 W1 4209 TIP3 H2 HT 0.417000 1.0080 0 + 15117 W1 4210 TIP3 OH2 OT -0.834000 15.9994 0 + 15118 W1 4210 TIP3 H1 HT 0.417000 1.0080 0 + 15119 W1 4210 TIP3 H2 HT 0.417000 1.0080 0 + 15120 W1 4211 TIP3 OH2 OT -0.834000 15.9994 0 + 15121 W1 4211 TIP3 H1 HT 0.417000 1.0080 0 + 15122 W1 4211 TIP3 H2 HT 0.417000 1.0080 0 + 15123 W1 4212 TIP3 OH2 OT -0.834000 15.9994 0 + 15124 W1 4212 TIP3 H1 HT 0.417000 1.0080 0 + 15125 W1 4212 TIP3 H2 HT 0.417000 1.0080 0 + 15126 W1 4213 TIP3 OH2 OT -0.834000 15.9994 0 + 15127 W1 4213 TIP3 H1 HT 0.417000 1.0080 0 + 15128 W1 4213 TIP3 H2 HT 0.417000 1.0080 0 + 15129 W1 4214 TIP3 OH2 OT -0.834000 15.9994 0 + 15130 W1 4214 TIP3 H1 HT 0.417000 1.0080 0 + 15131 W1 4214 TIP3 H2 HT 0.417000 1.0080 0 + 15132 W1 4215 TIP3 OH2 OT -0.834000 15.9994 0 + 15133 W1 4215 TIP3 H1 HT 0.417000 1.0080 0 + 15134 W1 4215 TIP3 H2 HT 0.417000 1.0080 0 + 15135 W1 4216 TIP3 OH2 OT -0.834000 15.9994 0 + 15136 W1 4216 TIP3 H1 HT 0.417000 1.0080 0 + 15137 W1 4216 TIP3 H2 HT 0.417000 1.0080 0 + 15138 W1 4217 TIP3 OH2 OT -0.834000 15.9994 0 + 15139 W1 4217 TIP3 H1 HT 0.417000 1.0080 0 + 15140 W1 4217 TIP3 H2 HT 0.417000 1.0080 0 + 15141 W1 4218 TIP3 OH2 OT -0.834000 15.9994 0 + 15142 W1 4218 TIP3 H1 HT 0.417000 1.0080 0 + 15143 W1 4218 TIP3 H2 HT 0.417000 1.0080 0 + 15144 W1 4219 TIP3 OH2 OT -0.834000 15.9994 0 + 15145 W1 4219 TIP3 H1 HT 0.417000 1.0080 0 + 15146 W1 4219 TIP3 H2 HT 0.417000 1.0080 0 + 15147 W1 4220 TIP3 OH2 OT -0.834000 15.9994 0 + 15148 W1 4220 TIP3 H1 HT 0.417000 1.0080 0 + 15149 W1 4220 TIP3 H2 HT 0.417000 1.0080 0 + 15150 W1 4221 TIP3 OH2 OT -0.834000 15.9994 0 + 15151 W1 4221 TIP3 H1 HT 0.417000 1.0080 0 + 15152 W1 4221 TIP3 H2 HT 0.417000 1.0080 0 + 15153 W1 4222 TIP3 OH2 OT -0.834000 15.9994 0 + 15154 W1 4222 TIP3 H1 HT 0.417000 1.0080 0 + 15155 W1 4222 TIP3 H2 HT 0.417000 1.0080 0 + 15156 W1 4223 TIP3 OH2 OT -0.834000 15.9994 0 + 15157 W1 4223 TIP3 H1 HT 0.417000 1.0080 0 + 15158 W1 4223 TIP3 H2 HT 0.417000 1.0080 0 + 15159 W1 4224 TIP3 OH2 OT -0.834000 15.9994 0 + 15160 W1 4224 TIP3 H1 HT 0.417000 1.0080 0 + 15161 W1 4224 TIP3 H2 HT 0.417000 1.0080 0 + 15162 W1 4225 TIP3 OH2 OT -0.834000 15.9994 0 + 15163 W1 4225 TIP3 H1 HT 0.417000 1.0080 0 + 15164 W1 4225 TIP3 H2 HT 0.417000 1.0080 0 + 15165 W1 4226 TIP3 OH2 OT -0.834000 15.9994 0 + 15166 W1 4226 TIP3 H1 HT 0.417000 1.0080 0 + 15167 W1 4226 TIP3 H2 HT 0.417000 1.0080 0 + 15168 W1 4227 TIP3 OH2 OT -0.834000 15.9994 0 + 15169 W1 4227 TIP3 H1 HT 0.417000 1.0080 0 + 15170 W1 4227 TIP3 H2 HT 0.417000 1.0080 0 + 15171 W1 4228 TIP3 OH2 OT -0.834000 15.9994 0 + 15172 W1 4228 TIP3 H1 HT 0.417000 1.0080 0 + 15173 W1 4228 TIP3 H2 HT 0.417000 1.0080 0 + 15174 W1 4229 TIP3 OH2 OT -0.834000 15.9994 0 + 15175 W1 4229 TIP3 H1 HT 0.417000 1.0080 0 + 15176 W1 4229 TIP3 H2 HT 0.417000 1.0080 0 + 15177 W1 4230 TIP3 OH2 OT -0.834000 15.9994 0 + 15178 W1 4230 TIP3 H1 HT 0.417000 1.0080 0 + 15179 W1 4230 TIP3 H2 HT 0.417000 1.0080 0 + 15180 W1 4231 TIP3 OH2 OT -0.834000 15.9994 0 + 15181 W1 4231 TIP3 H1 HT 0.417000 1.0080 0 + 15182 W1 4231 TIP3 H2 HT 0.417000 1.0080 0 + 15183 W1 4232 TIP3 OH2 OT -0.834000 15.9994 0 + 15184 W1 4232 TIP3 H1 HT 0.417000 1.0080 0 + 15185 W1 4232 TIP3 H2 HT 0.417000 1.0080 0 + 15186 W1 4233 TIP3 OH2 OT -0.834000 15.9994 0 + 15187 W1 4233 TIP3 H1 HT 0.417000 1.0080 0 + 15188 W1 4233 TIP3 H2 HT 0.417000 1.0080 0 + 15189 W1 4234 TIP3 OH2 OT -0.834000 15.9994 0 + 15190 W1 4234 TIP3 H1 HT 0.417000 1.0080 0 + 15191 W1 4234 TIP3 H2 HT 0.417000 1.0080 0 + 15192 W1 4235 TIP3 OH2 OT -0.834000 15.9994 0 + 15193 W1 4235 TIP3 H1 HT 0.417000 1.0080 0 + 15194 W1 4235 TIP3 H2 HT 0.417000 1.0080 0 + 15195 W1 4236 TIP3 OH2 OT -0.834000 15.9994 0 + 15196 W1 4236 TIP3 H1 HT 0.417000 1.0080 0 + 15197 W1 4236 TIP3 H2 HT 0.417000 1.0080 0 + 15198 W1 4237 TIP3 OH2 OT -0.834000 15.9994 0 + 15199 W1 4237 TIP3 H1 HT 0.417000 1.0080 0 + 15200 W1 4237 TIP3 H2 HT 0.417000 1.0080 0 + 15201 W1 4238 TIP3 OH2 OT -0.834000 15.9994 0 + 15202 W1 4238 TIP3 H1 HT 0.417000 1.0080 0 + 15203 W1 4238 TIP3 H2 HT 0.417000 1.0080 0 + 15204 W1 4239 TIP3 OH2 OT -0.834000 15.9994 0 + 15205 W1 4239 TIP3 H1 HT 0.417000 1.0080 0 + 15206 W1 4239 TIP3 H2 HT 0.417000 1.0080 0 + 15207 W1 4240 TIP3 OH2 OT -0.834000 15.9994 0 + 15208 W1 4240 TIP3 H1 HT 0.417000 1.0080 0 + 15209 W1 4240 TIP3 H2 HT 0.417000 1.0080 0 + 15210 W1 4241 TIP3 OH2 OT -0.834000 15.9994 0 + 15211 W1 4241 TIP3 H1 HT 0.417000 1.0080 0 + 15212 W1 4241 TIP3 H2 HT 0.417000 1.0080 0 + 15213 W1 4242 TIP3 OH2 OT -0.834000 15.9994 0 + 15214 W1 4242 TIP3 H1 HT 0.417000 1.0080 0 + 15215 W1 4242 TIP3 H2 HT 0.417000 1.0080 0 + 15216 W1 4243 TIP3 OH2 OT -0.834000 15.9994 0 + 15217 W1 4243 TIP3 H1 HT 0.417000 1.0080 0 + 15218 W1 4243 TIP3 H2 HT 0.417000 1.0080 0 + 15219 W1 4244 TIP3 OH2 OT -0.834000 15.9994 0 + 15220 W1 4244 TIP3 H1 HT 0.417000 1.0080 0 + 15221 W1 4244 TIP3 H2 HT 0.417000 1.0080 0 + 15222 W1 4245 TIP3 OH2 OT -0.834000 15.9994 0 + 15223 W1 4245 TIP3 H1 HT 0.417000 1.0080 0 + 15224 W1 4245 TIP3 H2 HT 0.417000 1.0080 0 + 15225 W1 4246 TIP3 OH2 OT -0.834000 15.9994 0 + 15226 W1 4246 TIP3 H1 HT 0.417000 1.0080 0 + 15227 W1 4246 TIP3 H2 HT 0.417000 1.0080 0 + 15228 W1 4247 TIP3 OH2 OT -0.834000 15.9994 0 + 15229 W1 4247 TIP3 H1 HT 0.417000 1.0080 0 + 15230 W1 4247 TIP3 H2 HT 0.417000 1.0080 0 + 15231 W1 4248 TIP3 OH2 OT -0.834000 15.9994 0 + 15232 W1 4248 TIP3 H1 HT 0.417000 1.0080 0 + 15233 W1 4248 TIP3 H2 HT 0.417000 1.0080 0 + 15234 W1 4249 TIP3 OH2 OT -0.834000 15.9994 0 + 15235 W1 4249 TIP3 H1 HT 0.417000 1.0080 0 + 15236 W1 4249 TIP3 H2 HT 0.417000 1.0080 0 + 15237 W1 4250 TIP3 OH2 OT -0.834000 15.9994 0 + 15238 W1 4250 TIP3 H1 HT 0.417000 1.0080 0 + 15239 W1 4250 TIP3 H2 HT 0.417000 1.0080 0 + 15240 W1 4251 TIP3 OH2 OT -0.834000 15.9994 0 + 15241 W1 4251 TIP3 H1 HT 0.417000 1.0080 0 + 15242 W1 4251 TIP3 H2 HT 0.417000 1.0080 0 + 15243 W1 4252 TIP3 OH2 OT -0.834000 15.9994 0 + 15244 W1 4252 TIP3 H1 HT 0.417000 1.0080 0 + 15245 W1 4252 TIP3 H2 HT 0.417000 1.0080 0 + 15246 W1 4253 TIP3 OH2 OT -0.834000 15.9994 0 + 15247 W1 4253 TIP3 H1 HT 0.417000 1.0080 0 + 15248 W1 4253 TIP3 H2 HT 0.417000 1.0080 0 + 15249 W1 4254 TIP3 OH2 OT -0.834000 15.9994 0 + 15250 W1 4254 TIP3 H1 HT 0.417000 1.0080 0 + 15251 W1 4254 TIP3 H2 HT 0.417000 1.0080 0 + 15252 W1 4255 TIP3 OH2 OT -0.834000 15.9994 0 + 15253 W1 4255 TIP3 H1 HT 0.417000 1.0080 0 + 15254 W1 4255 TIP3 H2 HT 0.417000 1.0080 0 + 15255 W1 4256 TIP3 OH2 OT -0.834000 15.9994 0 + 15256 W1 4256 TIP3 H1 HT 0.417000 1.0080 0 + 15257 W1 4256 TIP3 H2 HT 0.417000 1.0080 0 + 15258 W1 4257 TIP3 OH2 OT -0.834000 15.9994 0 + 15259 W1 4257 TIP3 H1 HT 0.417000 1.0080 0 + 15260 W1 4257 TIP3 H2 HT 0.417000 1.0080 0 + 15261 W1 4258 TIP3 OH2 OT -0.834000 15.9994 0 + 15262 W1 4258 TIP3 H1 HT 0.417000 1.0080 0 + 15263 W1 4258 TIP3 H2 HT 0.417000 1.0080 0 + 15264 W1 4259 TIP3 OH2 OT -0.834000 15.9994 0 + 15265 W1 4259 TIP3 H1 HT 0.417000 1.0080 0 + 15266 W1 4259 TIP3 H2 HT 0.417000 1.0080 0 + 15267 W1 4260 TIP3 OH2 OT -0.834000 15.9994 0 + 15268 W1 4260 TIP3 H1 HT 0.417000 1.0080 0 + 15269 W1 4260 TIP3 H2 HT 0.417000 1.0080 0 + 15270 W1 4261 TIP3 OH2 OT -0.834000 15.9994 0 + 15271 W1 4261 TIP3 H1 HT 0.417000 1.0080 0 + 15272 W1 4261 TIP3 H2 HT 0.417000 1.0080 0 + 15273 W1 4262 TIP3 OH2 OT -0.834000 15.9994 0 + 15274 W1 4262 TIP3 H1 HT 0.417000 1.0080 0 + 15275 W1 4262 TIP3 H2 HT 0.417000 1.0080 0 + 15276 W1 4263 TIP3 OH2 OT -0.834000 15.9994 0 + 15277 W1 4263 TIP3 H1 HT 0.417000 1.0080 0 + 15278 W1 4263 TIP3 H2 HT 0.417000 1.0080 0 + 15279 W1 4264 TIP3 OH2 OT -0.834000 15.9994 0 + 15280 W1 4264 TIP3 H1 HT 0.417000 1.0080 0 + 15281 W1 4264 TIP3 H2 HT 0.417000 1.0080 0 + 15282 W1 4265 TIP3 OH2 OT -0.834000 15.9994 0 + 15283 W1 4265 TIP3 H1 HT 0.417000 1.0080 0 + 15284 W1 4265 TIP3 H2 HT 0.417000 1.0080 0 + 15285 W1 4266 TIP3 OH2 OT -0.834000 15.9994 0 + 15286 W1 4266 TIP3 H1 HT 0.417000 1.0080 0 + 15287 W1 4266 TIP3 H2 HT 0.417000 1.0080 0 + 15288 W1 4267 TIP3 OH2 OT -0.834000 15.9994 0 + 15289 W1 4267 TIP3 H1 HT 0.417000 1.0080 0 + 15290 W1 4267 TIP3 H2 HT 0.417000 1.0080 0 + 15291 W1 4268 TIP3 OH2 OT -0.834000 15.9994 0 + 15292 W1 4268 TIP3 H1 HT 0.417000 1.0080 0 + 15293 W1 4268 TIP3 H2 HT 0.417000 1.0080 0 + 15294 W1 4269 TIP3 OH2 OT -0.834000 15.9994 0 + 15295 W1 4269 TIP3 H1 HT 0.417000 1.0080 0 + 15296 W1 4269 TIP3 H2 HT 0.417000 1.0080 0 + 15297 W1 4270 TIP3 OH2 OT -0.834000 15.9994 0 + 15298 W1 4270 TIP3 H1 HT 0.417000 1.0080 0 + 15299 W1 4270 TIP3 H2 HT 0.417000 1.0080 0 + 15300 W1 4271 TIP3 OH2 OT -0.834000 15.9994 0 + 15301 W1 4271 TIP3 H1 HT 0.417000 1.0080 0 + 15302 W1 4271 TIP3 H2 HT 0.417000 1.0080 0 + 15303 W1 4272 TIP3 OH2 OT -0.834000 15.9994 0 + 15304 W1 4272 TIP3 H1 HT 0.417000 1.0080 0 + 15305 W1 4272 TIP3 H2 HT 0.417000 1.0080 0 + 15306 W1 4273 TIP3 OH2 OT -0.834000 15.9994 0 + 15307 W1 4273 TIP3 H1 HT 0.417000 1.0080 0 + 15308 W1 4273 TIP3 H2 HT 0.417000 1.0080 0 + 15309 W1 4274 TIP3 OH2 OT -0.834000 15.9994 0 + 15310 W1 4274 TIP3 H1 HT 0.417000 1.0080 0 + 15311 W1 4274 TIP3 H2 HT 0.417000 1.0080 0 + 15312 W1 4275 TIP3 OH2 OT -0.834000 15.9994 0 + 15313 W1 4275 TIP3 H1 HT 0.417000 1.0080 0 + 15314 W1 4275 TIP3 H2 HT 0.417000 1.0080 0 + 15315 W1 4276 TIP3 OH2 OT -0.834000 15.9994 0 + 15316 W1 4276 TIP3 H1 HT 0.417000 1.0080 0 + 15317 W1 4276 TIP3 H2 HT 0.417000 1.0080 0 + 15318 W1 4277 TIP3 OH2 OT -0.834000 15.9994 0 + 15319 W1 4277 TIP3 H1 HT 0.417000 1.0080 0 + 15320 W1 4277 TIP3 H2 HT 0.417000 1.0080 0 + 15321 W1 4278 TIP3 OH2 OT -0.834000 15.9994 0 + 15322 W1 4278 TIP3 H1 HT 0.417000 1.0080 0 + 15323 W1 4278 TIP3 H2 HT 0.417000 1.0080 0 + 15324 W1 4279 TIP3 OH2 OT -0.834000 15.9994 0 + 15325 W1 4279 TIP3 H1 HT 0.417000 1.0080 0 + 15326 W1 4279 TIP3 H2 HT 0.417000 1.0080 0 + 15327 W1 4280 TIP3 OH2 OT -0.834000 15.9994 0 + 15328 W1 4280 TIP3 H1 HT 0.417000 1.0080 0 + 15329 W1 4280 TIP3 H2 HT 0.417000 1.0080 0 + 15330 W1 4281 TIP3 OH2 OT -0.834000 15.9994 0 + 15331 W1 4281 TIP3 H1 HT 0.417000 1.0080 0 + 15332 W1 4281 TIP3 H2 HT 0.417000 1.0080 0 + 15333 W1 4282 TIP3 OH2 OT -0.834000 15.9994 0 + 15334 W1 4282 TIP3 H1 HT 0.417000 1.0080 0 + 15335 W1 4282 TIP3 H2 HT 0.417000 1.0080 0 + 15336 W1 4283 TIP3 OH2 OT -0.834000 15.9994 0 + 15337 W1 4283 TIP3 H1 HT 0.417000 1.0080 0 + 15338 W1 4283 TIP3 H2 HT 0.417000 1.0080 0 + 15339 W1 4284 TIP3 OH2 OT -0.834000 15.9994 0 + 15340 W1 4284 TIP3 H1 HT 0.417000 1.0080 0 + 15341 W1 4284 TIP3 H2 HT 0.417000 1.0080 0 + 15342 W1 4285 TIP3 OH2 OT -0.834000 15.9994 0 + 15343 W1 4285 TIP3 H1 HT 0.417000 1.0080 0 + 15344 W1 4285 TIP3 H2 HT 0.417000 1.0080 0 + 15345 W1 4286 TIP3 OH2 OT -0.834000 15.9994 0 + 15346 W1 4286 TIP3 H1 HT 0.417000 1.0080 0 + 15347 W1 4286 TIP3 H2 HT 0.417000 1.0080 0 + 15348 W1 4287 TIP3 OH2 OT -0.834000 15.9994 0 + 15349 W1 4287 TIP3 H1 HT 0.417000 1.0080 0 + 15350 W1 4287 TIP3 H2 HT 0.417000 1.0080 0 + 15351 W1 4288 TIP3 OH2 OT -0.834000 15.9994 0 + 15352 W1 4288 TIP3 H1 HT 0.417000 1.0080 0 + 15353 W1 4288 TIP3 H2 HT 0.417000 1.0080 0 + 15354 W1 4289 TIP3 OH2 OT -0.834000 15.9994 0 + 15355 W1 4289 TIP3 H1 HT 0.417000 1.0080 0 + 15356 W1 4289 TIP3 H2 HT 0.417000 1.0080 0 + 15357 W1 4290 TIP3 OH2 OT -0.834000 15.9994 0 + 15358 W1 4290 TIP3 H1 HT 0.417000 1.0080 0 + 15359 W1 4290 TIP3 H2 HT 0.417000 1.0080 0 + 15360 W1 4291 TIP3 OH2 OT -0.834000 15.9994 0 + 15361 W1 4291 TIP3 H1 HT 0.417000 1.0080 0 + 15362 W1 4291 TIP3 H2 HT 0.417000 1.0080 0 + 15363 W1 4292 TIP3 OH2 OT -0.834000 15.9994 0 + 15364 W1 4292 TIP3 H1 HT 0.417000 1.0080 0 + 15365 W1 4292 TIP3 H2 HT 0.417000 1.0080 0 + 15366 W1 4293 TIP3 OH2 OT -0.834000 15.9994 0 + 15367 W1 4293 TIP3 H1 HT 0.417000 1.0080 0 + 15368 W1 4293 TIP3 H2 HT 0.417000 1.0080 0 + 15369 W1 4294 TIP3 OH2 OT -0.834000 15.9994 0 + 15370 W1 4294 TIP3 H1 HT 0.417000 1.0080 0 + 15371 W1 4294 TIP3 H2 HT 0.417000 1.0080 0 + 15372 W1 4295 TIP3 OH2 OT -0.834000 15.9994 0 + 15373 W1 4295 TIP3 H1 HT 0.417000 1.0080 0 + 15374 W1 4295 TIP3 H2 HT 0.417000 1.0080 0 + 15375 W1 4296 TIP3 OH2 OT -0.834000 15.9994 0 + 15376 W1 4296 TIP3 H1 HT 0.417000 1.0080 0 + 15377 W1 4296 TIP3 H2 HT 0.417000 1.0080 0 + 15378 W1 4297 TIP3 OH2 OT -0.834000 15.9994 0 + 15379 W1 4297 TIP3 H1 HT 0.417000 1.0080 0 + 15380 W1 4297 TIP3 H2 HT 0.417000 1.0080 0 + 15381 W1 4298 TIP3 OH2 OT -0.834000 15.9994 0 + 15382 W1 4298 TIP3 H1 HT 0.417000 1.0080 0 + 15383 W1 4298 TIP3 H2 HT 0.417000 1.0080 0 + 15384 W1 4299 TIP3 OH2 OT -0.834000 15.9994 0 + 15385 W1 4299 TIP3 H1 HT 0.417000 1.0080 0 + 15386 W1 4299 TIP3 H2 HT 0.417000 1.0080 0 + 15387 W1 4300 TIP3 OH2 OT -0.834000 15.9994 0 + 15388 W1 4300 TIP3 H1 HT 0.417000 1.0080 0 + 15389 W1 4300 TIP3 H2 HT 0.417000 1.0080 0 + 15390 W1 4301 TIP3 OH2 OT -0.834000 15.9994 0 + 15391 W1 4301 TIP3 H1 HT 0.417000 1.0080 0 + 15392 W1 4301 TIP3 H2 HT 0.417000 1.0080 0 + 15393 W1 4302 TIP3 OH2 OT -0.834000 15.9994 0 + 15394 W1 4302 TIP3 H1 HT 0.417000 1.0080 0 + 15395 W1 4302 TIP3 H2 HT 0.417000 1.0080 0 + 15396 W1 4303 TIP3 OH2 OT -0.834000 15.9994 0 + 15397 W1 4303 TIP3 H1 HT 0.417000 1.0080 0 + 15398 W1 4303 TIP3 H2 HT 0.417000 1.0080 0 + 15399 W1 4304 TIP3 OH2 OT -0.834000 15.9994 0 + 15400 W1 4304 TIP3 H1 HT 0.417000 1.0080 0 + 15401 W1 4304 TIP3 H2 HT 0.417000 1.0080 0 + 15402 W1 4305 TIP3 OH2 OT -0.834000 15.9994 0 + 15403 W1 4305 TIP3 H1 HT 0.417000 1.0080 0 + 15404 W1 4305 TIP3 H2 HT 0.417000 1.0080 0 + 15405 W1 4306 TIP3 OH2 OT -0.834000 15.9994 0 + 15406 W1 4306 TIP3 H1 HT 0.417000 1.0080 0 + 15407 W1 4306 TIP3 H2 HT 0.417000 1.0080 0 + 15408 W1 4307 TIP3 OH2 OT -0.834000 15.9994 0 + 15409 W1 4307 TIP3 H1 HT 0.417000 1.0080 0 + 15410 W1 4307 TIP3 H2 HT 0.417000 1.0080 0 + 15411 W1 4308 TIP3 OH2 OT -0.834000 15.9994 0 + 15412 W1 4308 TIP3 H1 HT 0.417000 1.0080 0 + 15413 W1 4308 TIP3 H2 HT 0.417000 1.0080 0 + 15414 W1 4309 TIP3 OH2 OT -0.834000 15.9994 0 + 15415 W1 4309 TIP3 H1 HT 0.417000 1.0080 0 + 15416 W1 4309 TIP3 H2 HT 0.417000 1.0080 0 + 15417 W1 4310 TIP3 OH2 OT -0.834000 15.9994 0 + 15418 W1 4310 TIP3 H1 HT 0.417000 1.0080 0 + 15419 W1 4310 TIP3 H2 HT 0.417000 1.0080 0 + 15420 W1 4311 TIP3 OH2 OT -0.834000 15.9994 0 + 15421 W1 4311 TIP3 H1 HT 0.417000 1.0080 0 + 15422 W1 4311 TIP3 H2 HT 0.417000 1.0080 0 + 15423 W1 4312 TIP3 OH2 OT -0.834000 15.9994 0 + 15424 W1 4312 TIP3 H1 HT 0.417000 1.0080 0 + 15425 W1 4312 TIP3 H2 HT 0.417000 1.0080 0 + 15426 W1 4313 TIP3 OH2 OT -0.834000 15.9994 0 + 15427 W1 4313 TIP3 H1 HT 0.417000 1.0080 0 + 15428 W1 4313 TIP3 H2 HT 0.417000 1.0080 0 + 15429 W1 4314 TIP3 OH2 OT -0.834000 15.9994 0 + 15430 W1 4314 TIP3 H1 HT 0.417000 1.0080 0 + 15431 W1 4314 TIP3 H2 HT 0.417000 1.0080 0 + 15432 W1 4315 TIP3 OH2 OT -0.834000 15.9994 0 + 15433 W1 4315 TIP3 H1 HT 0.417000 1.0080 0 + 15434 W1 4315 TIP3 H2 HT 0.417000 1.0080 0 + 15435 W1 4316 TIP3 OH2 OT -0.834000 15.9994 0 + 15436 W1 4316 TIP3 H1 HT 0.417000 1.0080 0 + 15437 W1 4316 TIP3 H2 HT 0.417000 1.0080 0 + 15438 W1 4317 TIP3 OH2 OT -0.834000 15.9994 0 + 15439 W1 4317 TIP3 H1 HT 0.417000 1.0080 0 + 15440 W1 4317 TIP3 H2 HT 0.417000 1.0080 0 + 15441 W1 4318 TIP3 OH2 OT -0.834000 15.9994 0 + 15442 W1 4318 TIP3 H1 HT 0.417000 1.0080 0 + 15443 W1 4318 TIP3 H2 HT 0.417000 1.0080 0 + 15444 W1 4319 TIP3 OH2 OT -0.834000 15.9994 0 + 15445 W1 4319 TIP3 H1 HT 0.417000 1.0080 0 + 15446 W1 4319 TIP3 H2 HT 0.417000 1.0080 0 + 15447 W1 4320 TIP3 OH2 OT -0.834000 15.9994 0 + 15448 W1 4320 TIP3 H1 HT 0.417000 1.0080 0 + 15449 W1 4320 TIP3 H2 HT 0.417000 1.0080 0 + 15450 W1 4321 TIP3 OH2 OT -0.834000 15.9994 0 + 15451 W1 4321 TIP3 H1 HT 0.417000 1.0080 0 + 15452 W1 4321 TIP3 H2 HT 0.417000 1.0080 0 + 15453 W1 4322 TIP3 OH2 OT -0.834000 15.9994 0 + 15454 W1 4322 TIP3 H1 HT 0.417000 1.0080 0 + 15455 W1 4322 TIP3 H2 HT 0.417000 1.0080 0 + 15456 W1 4323 TIP3 OH2 OT -0.834000 15.9994 0 + 15457 W1 4323 TIP3 H1 HT 0.417000 1.0080 0 + 15458 W1 4323 TIP3 H2 HT 0.417000 1.0080 0 + 15459 W1 4324 TIP3 OH2 OT -0.834000 15.9994 0 + 15460 W1 4324 TIP3 H1 HT 0.417000 1.0080 0 + 15461 W1 4324 TIP3 H2 HT 0.417000 1.0080 0 + 15462 W1 4325 TIP3 OH2 OT -0.834000 15.9994 0 + 15463 W1 4325 TIP3 H1 HT 0.417000 1.0080 0 + 15464 W1 4325 TIP3 H2 HT 0.417000 1.0080 0 + 15465 W1 4326 TIP3 OH2 OT -0.834000 15.9994 0 + 15466 W1 4326 TIP3 H1 HT 0.417000 1.0080 0 + 15467 W1 4326 TIP3 H2 HT 0.417000 1.0080 0 + 15468 W1 4327 TIP3 OH2 OT -0.834000 15.9994 0 + 15469 W1 4327 TIP3 H1 HT 0.417000 1.0080 0 + 15470 W1 4327 TIP3 H2 HT 0.417000 1.0080 0 + 15471 W1 4328 TIP3 OH2 OT -0.834000 15.9994 0 + 15472 W1 4328 TIP3 H1 HT 0.417000 1.0080 0 + 15473 W1 4328 TIP3 H2 HT 0.417000 1.0080 0 + 15474 W1 4329 TIP3 OH2 OT -0.834000 15.9994 0 + 15475 W1 4329 TIP3 H1 HT 0.417000 1.0080 0 + 15476 W1 4329 TIP3 H2 HT 0.417000 1.0080 0 + 15477 W1 4330 TIP3 OH2 OT -0.834000 15.9994 0 + 15478 W1 4330 TIP3 H1 HT 0.417000 1.0080 0 + 15479 W1 4330 TIP3 H2 HT 0.417000 1.0080 0 + 15480 W1 4331 TIP3 OH2 OT -0.834000 15.9994 0 + 15481 W1 4331 TIP3 H1 HT 0.417000 1.0080 0 + 15482 W1 4331 TIP3 H2 HT 0.417000 1.0080 0 + 15483 W1 4332 TIP3 OH2 OT -0.834000 15.9994 0 + 15484 W1 4332 TIP3 H1 HT 0.417000 1.0080 0 + 15485 W1 4332 TIP3 H2 HT 0.417000 1.0080 0 + 15486 W1 4333 TIP3 OH2 OT -0.834000 15.9994 0 + 15487 W1 4333 TIP3 H1 HT 0.417000 1.0080 0 + 15488 W1 4333 TIP3 H2 HT 0.417000 1.0080 0 + 15489 W1 4334 TIP3 OH2 OT -0.834000 15.9994 0 + 15490 W1 4334 TIP3 H1 HT 0.417000 1.0080 0 + 15491 W1 4334 TIP3 H2 HT 0.417000 1.0080 0 + 15492 W1 4335 TIP3 OH2 OT -0.834000 15.9994 0 + 15493 W1 4335 TIP3 H1 HT 0.417000 1.0080 0 + 15494 W1 4335 TIP3 H2 HT 0.417000 1.0080 0 + 15495 W1 4336 TIP3 OH2 OT -0.834000 15.9994 0 + 15496 W1 4336 TIP3 H1 HT 0.417000 1.0080 0 + 15497 W1 4336 TIP3 H2 HT 0.417000 1.0080 0 + 15498 W1 4337 TIP3 OH2 OT -0.834000 15.9994 0 + 15499 W1 4337 TIP3 H1 HT 0.417000 1.0080 0 + 15500 W1 4337 TIP3 H2 HT 0.417000 1.0080 0 + 15501 W1 4338 TIP3 OH2 OT -0.834000 15.9994 0 + 15502 W1 4338 TIP3 H1 HT 0.417000 1.0080 0 + 15503 W1 4338 TIP3 H2 HT 0.417000 1.0080 0 + 15504 W1 4339 TIP3 OH2 OT -0.834000 15.9994 0 + 15505 W1 4339 TIP3 H1 HT 0.417000 1.0080 0 + 15506 W1 4339 TIP3 H2 HT 0.417000 1.0080 0 + 15507 W1 4340 TIP3 OH2 OT -0.834000 15.9994 0 + 15508 W1 4340 TIP3 H1 HT 0.417000 1.0080 0 + 15509 W1 4340 TIP3 H2 HT 0.417000 1.0080 0 + 15510 W1 4341 TIP3 OH2 OT -0.834000 15.9994 0 + 15511 W1 4341 TIP3 H1 HT 0.417000 1.0080 0 + 15512 W1 4341 TIP3 H2 HT 0.417000 1.0080 0 + 15513 W1 4342 TIP3 OH2 OT -0.834000 15.9994 0 + 15514 W1 4342 TIP3 H1 HT 0.417000 1.0080 0 + 15515 W1 4342 TIP3 H2 HT 0.417000 1.0080 0 + 15516 W1 4343 TIP3 OH2 OT -0.834000 15.9994 0 + 15517 W1 4343 TIP3 H1 HT 0.417000 1.0080 0 + 15518 W1 4343 TIP3 H2 HT 0.417000 1.0080 0 + 15519 W1 4344 TIP3 OH2 OT -0.834000 15.9994 0 + 15520 W1 4344 TIP3 H1 HT 0.417000 1.0080 0 + 15521 W1 4344 TIP3 H2 HT 0.417000 1.0080 0 + 15522 W1 4345 TIP3 OH2 OT -0.834000 15.9994 0 + 15523 W1 4345 TIP3 H1 HT 0.417000 1.0080 0 + 15524 W1 4345 TIP3 H2 HT 0.417000 1.0080 0 + 15525 W1 4346 TIP3 OH2 OT -0.834000 15.9994 0 + 15526 W1 4346 TIP3 H1 HT 0.417000 1.0080 0 + 15527 W1 4346 TIP3 H2 HT 0.417000 1.0080 0 + 15528 W1 4347 TIP3 OH2 OT -0.834000 15.9994 0 + 15529 W1 4347 TIP3 H1 HT 0.417000 1.0080 0 + 15530 W1 4347 TIP3 H2 HT 0.417000 1.0080 0 + 15531 W1 4348 TIP3 OH2 OT -0.834000 15.9994 0 + 15532 W1 4348 TIP3 H1 HT 0.417000 1.0080 0 + 15533 W1 4348 TIP3 H2 HT 0.417000 1.0080 0 + 15534 W1 4349 TIP3 OH2 OT -0.834000 15.9994 0 + 15535 W1 4349 TIP3 H1 HT 0.417000 1.0080 0 + 15536 W1 4349 TIP3 H2 HT 0.417000 1.0080 0 + 15537 W1 4350 TIP3 OH2 OT -0.834000 15.9994 0 + 15538 W1 4350 TIP3 H1 HT 0.417000 1.0080 0 + 15539 W1 4350 TIP3 H2 HT 0.417000 1.0080 0 + 15540 W1 4351 TIP3 OH2 OT -0.834000 15.9994 0 + 15541 W1 4351 TIP3 H1 HT 0.417000 1.0080 0 + 15542 W1 4351 TIP3 H2 HT 0.417000 1.0080 0 + 15543 W1 4352 TIP3 OH2 OT -0.834000 15.9994 0 + 15544 W1 4352 TIP3 H1 HT 0.417000 1.0080 0 + 15545 W1 4352 TIP3 H2 HT 0.417000 1.0080 0 + 15546 W1 4353 TIP3 OH2 OT -0.834000 15.9994 0 + 15547 W1 4353 TIP3 H1 HT 0.417000 1.0080 0 + 15548 W1 4353 TIP3 H2 HT 0.417000 1.0080 0 + 15549 W1 4354 TIP3 OH2 OT -0.834000 15.9994 0 + 15550 W1 4354 TIP3 H1 HT 0.417000 1.0080 0 + 15551 W1 4354 TIP3 H2 HT 0.417000 1.0080 0 + 15552 W1 4355 TIP3 OH2 OT -0.834000 15.9994 0 + 15553 W1 4355 TIP3 H1 HT 0.417000 1.0080 0 + 15554 W1 4355 TIP3 H2 HT 0.417000 1.0080 0 + 15555 W1 4356 TIP3 OH2 OT -0.834000 15.9994 0 + 15556 W1 4356 TIP3 H1 HT 0.417000 1.0080 0 + 15557 W1 4356 TIP3 H2 HT 0.417000 1.0080 0 + 15558 W1 4357 TIP3 OH2 OT -0.834000 15.9994 0 + 15559 W1 4357 TIP3 H1 HT 0.417000 1.0080 0 + 15560 W1 4357 TIP3 H2 HT 0.417000 1.0080 0 + 15561 W1 4358 TIP3 OH2 OT -0.834000 15.9994 0 + 15562 W1 4358 TIP3 H1 HT 0.417000 1.0080 0 + 15563 W1 4358 TIP3 H2 HT 0.417000 1.0080 0 + 15564 W1 4359 TIP3 OH2 OT -0.834000 15.9994 0 + 15565 W1 4359 TIP3 H1 HT 0.417000 1.0080 0 + 15566 W1 4359 TIP3 H2 HT 0.417000 1.0080 0 + 15567 W1 4360 TIP3 OH2 OT -0.834000 15.9994 0 + 15568 W1 4360 TIP3 H1 HT 0.417000 1.0080 0 + 15569 W1 4360 TIP3 H2 HT 0.417000 1.0080 0 + 15570 W1 4361 TIP3 OH2 OT -0.834000 15.9994 0 + 15571 W1 4361 TIP3 H1 HT 0.417000 1.0080 0 + 15572 W1 4361 TIP3 H2 HT 0.417000 1.0080 0 + 15573 W1 4362 TIP3 OH2 OT -0.834000 15.9994 0 + 15574 W1 4362 TIP3 H1 HT 0.417000 1.0080 0 + 15575 W1 4362 TIP3 H2 HT 0.417000 1.0080 0 + 15576 W1 4363 TIP3 OH2 OT -0.834000 15.9994 0 + 15577 W1 4363 TIP3 H1 HT 0.417000 1.0080 0 + 15578 W1 4363 TIP3 H2 HT 0.417000 1.0080 0 + 15579 W1 4364 TIP3 OH2 OT -0.834000 15.9994 0 + 15580 W1 4364 TIP3 H1 HT 0.417000 1.0080 0 + 15581 W1 4364 TIP3 H2 HT 0.417000 1.0080 0 + 15582 W1 4365 TIP3 OH2 OT -0.834000 15.9994 0 + 15583 W1 4365 TIP3 H1 HT 0.417000 1.0080 0 + 15584 W1 4365 TIP3 H2 HT 0.417000 1.0080 0 + 15585 W1 4366 TIP3 OH2 OT -0.834000 15.9994 0 + 15586 W1 4366 TIP3 H1 HT 0.417000 1.0080 0 + 15587 W1 4366 TIP3 H2 HT 0.417000 1.0080 0 + 15588 W1 4367 TIP3 OH2 OT -0.834000 15.9994 0 + 15589 W1 4367 TIP3 H1 HT 0.417000 1.0080 0 + 15590 W1 4367 TIP3 H2 HT 0.417000 1.0080 0 + 15591 W1 4368 TIP3 OH2 OT -0.834000 15.9994 0 + 15592 W1 4368 TIP3 H1 HT 0.417000 1.0080 0 + 15593 W1 4368 TIP3 H2 HT 0.417000 1.0080 0 + 15594 W1 4369 TIP3 OH2 OT -0.834000 15.9994 0 + 15595 W1 4369 TIP3 H1 HT 0.417000 1.0080 0 + 15596 W1 4369 TIP3 H2 HT 0.417000 1.0080 0 + 15597 W1 4370 TIP3 OH2 OT -0.834000 15.9994 0 + 15598 W1 4370 TIP3 H1 HT 0.417000 1.0080 0 + 15599 W1 4370 TIP3 H2 HT 0.417000 1.0080 0 + 15600 W1 4371 TIP3 OH2 OT -0.834000 15.9994 0 + 15601 W1 4371 TIP3 H1 HT 0.417000 1.0080 0 + 15602 W1 4371 TIP3 H2 HT 0.417000 1.0080 0 + 15603 W1 4372 TIP3 OH2 OT -0.834000 15.9994 0 + 15604 W1 4372 TIP3 H1 HT 0.417000 1.0080 0 + 15605 W1 4372 TIP3 H2 HT 0.417000 1.0080 0 + 15606 W1 4373 TIP3 OH2 OT -0.834000 15.9994 0 + 15607 W1 4373 TIP3 H1 HT 0.417000 1.0080 0 + 15608 W1 4373 TIP3 H2 HT 0.417000 1.0080 0 + 15609 W1 4374 TIP3 OH2 OT -0.834000 15.9994 0 + 15610 W1 4374 TIP3 H1 HT 0.417000 1.0080 0 + 15611 W1 4374 TIP3 H2 HT 0.417000 1.0080 0 + 15612 W1 4375 TIP3 OH2 OT -0.834000 15.9994 0 + 15613 W1 4375 TIP3 H1 HT 0.417000 1.0080 0 + 15614 W1 4375 TIP3 H2 HT 0.417000 1.0080 0 + 15615 W1 4376 TIP3 OH2 OT -0.834000 15.9994 0 + 15616 W1 4376 TIP3 H1 HT 0.417000 1.0080 0 + 15617 W1 4376 TIP3 H2 HT 0.417000 1.0080 0 + 15618 W1 4377 TIP3 OH2 OT -0.834000 15.9994 0 + 15619 W1 4377 TIP3 H1 HT 0.417000 1.0080 0 + 15620 W1 4377 TIP3 H2 HT 0.417000 1.0080 0 + 15621 W1 4378 TIP3 OH2 OT -0.834000 15.9994 0 + 15622 W1 4378 TIP3 H1 HT 0.417000 1.0080 0 + 15623 W1 4378 TIP3 H2 HT 0.417000 1.0080 0 + 15624 W1 4379 TIP3 OH2 OT -0.834000 15.9994 0 + 15625 W1 4379 TIP3 H1 HT 0.417000 1.0080 0 + 15626 W1 4379 TIP3 H2 HT 0.417000 1.0080 0 + 15627 W1 4380 TIP3 OH2 OT -0.834000 15.9994 0 + 15628 W1 4380 TIP3 H1 HT 0.417000 1.0080 0 + 15629 W1 4380 TIP3 H2 HT 0.417000 1.0080 0 + 15630 W1 4381 TIP3 OH2 OT -0.834000 15.9994 0 + 15631 W1 4381 TIP3 H1 HT 0.417000 1.0080 0 + 15632 W1 4381 TIP3 H2 HT 0.417000 1.0080 0 + 15633 W1 4382 TIP3 OH2 OT -0.834000 15.9994 0 + 15634 W1 4382 TIP3 H1 HT 0.417000 1.0080 0 + 15635 W1 4382 TIP3 H2 HT 0.417000 1.0080 0 + 15636 W1 4383 TIP3 OH2 OT -0.834000 15.9994 0 + 15637 W1 4383 TIP3 H1 HT 0.417000 1.0080 0 + 15638 W1 4383 TIP3 H2 HT 0.417000 1.0080 0 + 15639 W1 4384 TIP3 OH2 OT -0.834000 15.9994 0 + 15640 W1 4384 TIP3 H1 HT 0.417000 1.0080 0 + 15641 W1 4384 TIP3 H2 HT 0.417000 1.0080 0 + 15642 W1 4385 TIP3 OH2 OT -0.834000 15.9994 0 + 15643 W1 4385 TIP3 H1 HT 0.417000 1.0080 0 + 15644 W1 4385 TIP3 H2 HT 0.417000 1.0080 0 + 15645 W1 4386 TIP3 OH2 OT -0.834000 15.9994 0 + 15646 W1 4386 TIP3 H1 HT 0.417000 1.0080 0 + 15647 W1 4386 TIP3 H2 HT 0.417000 1.0080 0 + 15648 W1 4387 TIP3 OH2 OT -0.834000 15.9994 0 + 15649 W1 4387 TIP3 H1 HT 0.417000 1.0080 0 + 15650 W1 4387 TIP3 H2 HT 0.417000 1.0080 0 + 15651 W1 4388 TIP3 OH2 OT -0.834000 15.9994 0 + 15652 W1 4388 TIP3 H1 HT 0.417000 1.0080 0 + 15653 W1 4388 TIP3 H2 HT 0.417000 1.0080 0 + 15654 W1 4389 TIP3 OH2 OT -0.834000 15.9994 0 + 15655 W1 4389 TIP3 H1 HT 0.417000 1.0080 0 + 15656 W1 4389 TIP3 H2 HT 0.417000 1.0080 0 + 15657 W1 4390 TIP3 OH2 OT -0.834000 15.9994 0 + 15658 W1 4390 TIP3 H1 HT 0.417000 1.0080 0 + 15659 W1 4390 TIP3 H2 HT 0.417000 1.0080 0 + 15660 W1 4391 TIP3 OH2 OT -0.834000 15.9994 0 + 15661 W1 4391 TIP3 H1 HT 0.417000 1.0080 0 + 15662 W1 4391 TIP3 H2 HT 0.417000 1.0080 0 + 15663 W1 4392 TIP3 OH2 OT -0.834000 15.9994 0 + 15664 W1 4392 TIP3 H1 HT 0.417000 1.0080 0 + 15665 W1 4392 TIP3 H2 HT 0.417000 1.0080 0 + 15666 W1 4393 TIP3 OH2 OT -0.834000 15.9994 0 + 15667 W1 4393 TIP3 H1 HT 0.417000 1.0080 0 + 15668 W1 4393 TIP3 H2 HT 0.417000 1.0080 0 + 15669 W1 4394 TIP3 OH2 OT -0.834000 15.9994 0 + 15670 W1 4394 TIP3 H1 HT 0.417000 1.0080 0 + 15671 W1 4394 TIP3 H2 HT 0.417000 1.0080 0 + 15672 W1 4395 TIP3 OH2 OT -0.834000 15.9994 0 + 15673 W1 4395 TIP3 H1 HT 0.417000 1.0080 0 + 15674 W1 4395 TIP3 H2 HT 0.417000 1.0080 0 + 15675 W1 4396 TIP3 OH2 OT -0.834000 15.9994 0 + 15676 W1 4396 TIP3 H1 HT 0.417000 1.0080 0 + 15677 W1 4396 TIP3 H2 HT 0.417000 1.0080 0 + 15678 W1 4397 TIP3 OH2 OT -0.834000 15.9994 0 + 15679 W1 4397 TIP3 H1 HT 0.417000 1.0080 0 + 15680 W1 4397 TIP3 H2 HT 0.417000 1.0080 0 + 15681 W1 4398 TIP3 OH2 OT -0.834000 15.9994 0 + 15682 W1 4398 TIP3 H1 HT 0.417000 1.0080 0 + 15683 W1 4398 TIP3 H2 HT 0.417000 1.0080 0 + 15684 W1 4399 TIP3 OH2 OT -0.834000 15.9994 0 + 15685 W1 4399 TIP3 H1 HT 0.417000 1.0080 0 + 15686 W1 4399 TIP3 H2 HT 0.417000 1.0080 0 + 15687 W1 4400 TIP3 OH2 OT -0.834000 15.9994 0 + 15688 W1 4400 TIP3 H1 HT 0.417000 1.0080 0 + 15689 W1 4400 TIP3 H2 HT 0.417000 1.0080 0 + 15690 W1 4401 TIP3 OH2 OT -0.834000 15.9994 0 + 15691 W1 4401 TIP3 H1 HT 0.417000 1.0080 0 + 15692 W1 4401 TIP3 H2 HT 0.417000 1.0080 0 + 15693 W1 4402 TIP3 OH2 OT -0.834000 15.9994 0 + 15694 W1 4402 TIP3 H1 HT 0.417000 1.0080 0 + 15695 W1 4402 TIP3 H2 HT 0.417000 1.0080 0 + 15696 W1 4403 TIP3 OH2 OT -0.834000 15.9994 0 + 15697 W1 4403 TIP3 H1 HT 0.417000 1.0080 0 + 15698 W1 4403 TIP3 H2 HT 0.417000 1.0080 0 + 15699 W1 4404 TIP3 OH2 OT -0.834000 15.9994 0 + 15700 W1 4404 TIP3 H1 HT 0.417000 1.0080 0 + 15701 W1 4404 TIP3 H2 HT 0.417000 1.0080 0 + 15702 W1 4405 TIP3 OH2 OT -0.834000 15.9994 0 + 15703 W1 4405 TIP3 H1 HT 0.417000 1.0080 0 + 15704 W1 4405 TIP3 H2 HT 0.417000 1.0080 0 + 15705 W1 4406 TIP3 OH2 OT -0.834000 15.9994 0 + 15706 W1 4406 TIP3 H1 HT 0.417000 1.0080 0 + 15707 W1 4406 TIP3 H2 HT 0.417000 1.0080 0 + 15708 W1 4407 TIP3 OH2 OT -0.834000 15.9994 0 + 15709 W1 4407 TIP3 H1 HT 0.417000 1.0080 0 + 15710 W1 4407 TIP3 H2 HT 0.417000 1.0080 0 + 15711 W1 4408 TIP3 OH2 OT -0.834000 15.9994 0 + 15712 W1 4408 TIP3 H1 HT 0.417000 1.0080 0 + 15713 W1 4408 TIP3 H2 HT 0.417000 1.0080 0 + 15714 W1 4409 TIP3 OH2 OT -0.834000 15.9994 0 + 15715 W1 4409 TIP3 H1 HT 0.417000 1.0080 0 + 15716 W1 4409 TIP3 H2 HT 0.417000 1.0080 0 + 15717 W1 4410 TIP3 OH2 OT -0.834000 15.9994 0 + 15718 W1 4410 TIP3 H1 HT 0.417000 1.0080 0 + 15719 W1 4410 TIP3 H2 HT 0.417000 1.0080 0 + 15720 W1 4411 TIP3 OH2 OT -0.834000 15.9994 0 + 15721 W1 4411 TIP3 H1 HT 0.417000 1.0080 0 + 15722 W1 4411 TIP3 H2 HT 0.417000 1.0080 0 + 15723 W1 4412 TIP3 OH2 OT -0.834000 15.9994 0 + 15724 W1 4412 TIP3 H1 HT 0.417000 1.0080 0 + 15725 W1 4412 TIP3 H2 HT 0.417000 1.0080 0 + 15726 W1 4413 TIP3 OH2 OT -0.834000 15.9994 0 + 15727 W1 4413 TIP3 H1 HT 0.417000 1.0080 0 + 15728 W1 4413 TIP3 H2 HT 0.417000 1.0080 0 + 15729 W1 4414 TIP3 OH2 OT -0.834000 15.9994 0 + 15730 W1 4414 TIP3 H1 HT 0.417000 1.0080 0 + 15731 W1 4414 TIP3 H2 HT 0.417000 1.0080 0 + 15732 W1 4415 TIP3 OH2 OT -0.834000 15.9994 0 + 15733 W1 4415 TIP3 H1 HT 0.417000 1.0080 0 + 15734 W1 4415 TIP3 H2 HT 0.417000 1.0080 0 + 15735 W1 4416 TIP3 OH2 OT -0.834000 15.9994 0 + 15736 W1 4416 TIP3 H1 HT 0.417000 1.0080 0 + 15737 W1 4416 TIP3 H2 HT 0.417000 1.0080 0 + 15738 W1 4417 TIP3 OH2 OT -0.834000 15.9994 0 + 15739 W1 4417 TIP3 H1 HT 0.417000 1.0080 0 + 15740 W1 4417 TIP3 H2 HT 0.417000 1.0080 0 + 15741 W1 4418 TIP3 OH2 OT -0.834000 15.9994 0 + 15742 W1 4418 TIP3 H1 HT 0.417000 1.0080 0 + 15743 W1 4418 TIP3 H2 HT 0.417000 1.0080 0 + 15744 W1 4419 TIP3 OH2 OT -0.834000 15.9994 0 + 15745 W1 4419 TIP3 H1 HT 0.417000 1.0080 0 + 15746 W1 4419 TIP3 H2 HT 0.417000 1.0080 0 + 15747 W1 4420 TIP3 OH2 OT -0.834000 15.9994 0 + 15748 W1 4420 TIP3 H1 HT 0.417000 1.0080 0 + 15749 W1 4420 TIP3 H2 HT 0.417000 1.0080 0 + 15750 W1 4421 TIP3 OH2 OT -0.834000 15.9994 0 + 15751 W1 4421 TIP3 H1 HT 0.417000 1.0080 0 + 15752 W1 4421 TIP3 H2 HT 0.417000 1.0080 0 + 15753 W1 4422 TIP3 OH2 OT -0.834000 15.9994 0 + 15754 W1 4422 TIP3 H1 HT 0.417000 1.0080 0 + 15755 W1 4422 TIP3 H2 HT 0.417000 1.0080 0 + 15756 W1 4423 TIP3 OH2 OT -0.834000 15.9994 0 + 15757 W1 4423 TIP3 H1 HT 0.417000 1.0080 0 + 15758 W1 4423 TIP3 H2 HT 0.417000 1.0080 0 + 15759 W1 4424 TIP3 OH2 OT -0.834000 15.9994 0 + 15760 W1 4424 TIP3 H1 HT 0.417000 1.0080 0 + 15761 W1 4424 TIP3 H2 HT 0.417000 1.0080 0 + 15762 W1 4425 TIP3 OH2 OT -0.834000 15.9994 0 + 15763 W1 4425 TIP3 H1 HT 0.417000 1.0080 0 + 15764 W1 4425 TIP3 H2 HT 0.417000 1.0080 0 + 15765 W1 4426 TIP3 OH2 OT -0.834000 15.9994 0 + 15766 W1 4426 TIP3 H1 HT 0.417000 1.0080 0 + 15767 W1 4426 TIP3 H2 HT 0.417000 1.0080 0 + 15768 W1 4427 TIP3 OH2 OT -0.834000 15.9994 0 + 15769 W1 4427 TIP3 H1 HT 0.417000 1.0080 0 + 15770 W1 4427 TIP3 H2 HT 0.417000 1.0080 0 + 15771 W1 4428 TIP3 OH2 OT -0.834000 15.9994 0 + 15772 W1 4428 TIP3 H1 HT 0.417000 1.0080 0 + 15773 W1 4428 TIP3 H2 HT 0.417000 1.0080 0 + 15774 W1 4429 TIP3 OH2 OT -0.834000 15.9994 0 + 15775 W1 4429 TIP3 H1 HT 0.417000 1.0080 0 + 15776 W1 4429 TIP3 H2 HT 0.417000 1.0080 0 + 15777 W1 4430 TIP3 OH2 OT -0.834000 15.9994 0 + 15778 W1 4430 TIP3 H1 HT 0.417000 1.0080 0 + 15779 W1 4430 TIP3 H2 HT 0.417000 1.0080 0 + 15780 W1 4431 TIP3 OH2 OT -0.834000 15.9994 0 + 15781 W1 4431 TIP3 H1 HT 0.417000 1.0080 0 + 15782 W1 4431 TIP3 H2 HT 0.417000 1.0080 0 + 15783 W1 4432 TIP3 OH2 OT -0.834000 15.9994 0 + 15784 W1 4432 TIP3 H1 HT 0.417000 1.0080 0 + 15785 W1 4432 TIP3 H2 HT 0.417000 1.0080 0 + 15786 W1 4433 TIP3 OH2 OT -0.834000 15.9994 0 + 15787 W1 4433 TIP3 H1 HT 0.417000 1.0080 0 + 15788 W1 4433 TIP3 H2 HT 0.417000 1.0080 0 + 15789 W1 4434 TIP3 OH2 OT -0.834000 15.9994 0 + 15790 W1 4434 TIP3 H1 HT 0.417000 1.0080 0 + 15791 W1 4434 TIP3 H2 HT 0.417000 1.0080 0 + 15792 W1 4435 TIP3 OH2 OT -0.834000 15.9994 0 + 15793 W1 4435 TIP3 H1 HT 0.417000 1.0080 0 + 15794 W1 4435 TIP3 H2 HT 0.417000 1.0080 0 + 15795 W1 4436 TIP3 OH2 OT -0.834000 15.9994 0 + 15796 W1 4436 TIP3 H1 HT 0.417000 1.0080 0 + 15797 W1 4436 TIP3 H2 HT 0.417000 1.0080 0 + 15798 W1 4437 TIP3 OH2 OT -0.834000 15.9994 0 + 15799 W1 4437 TIP3 H1 HT 0.417000 1.0080 0 + 15800 W1 4437 TIP3 H2 HT 0.417000 1.0080 0 + 15801 W1 4438 TIP3 OH2 OT -0.834000 15.9994 0 + 15802 W1 4438 TIP3 H1 HT 0.417000 1.0080 0 + 15803 W1 4438 TIP3 H2 HT 0.417000 1.0080 0 + 15804 W1 4439 TIP3 OH2 OT -0.834000 15.9994 0 + 15805 W1 4439 TIP3 H1 HT 0.417000 1.0080 0 + 15806 W1 4439 TIP3 H2 HT 0.417000 1.0080 0 + 15807 W1 4440 TIP3 OH2 OT -0.834000 15.9994 0 + 15808 W1 4440 TIP3 H1 HT 0.417000 1.0080 0 + 15809 W1 4440 TIP3 H2 HT 0.417000 1.0080 0 + 15810 W1 4441 TIP3 OH2 OT -0.834000 15.9994 0 + 15811 W1 4441 TIP3 H1 HT 0.417000 1.0080 0 + 15812 W1 4441 TIP3 H2 HT 0.417000 1.0080 0 + 15813 W1 4442 TIP3 OH2 OT -0.834000 15.9994 0 + 15814 W1 4442 TIP3 H1 HT 0.417000 1.0080 0 + 15815 W1 4442 TIP3 H2 HT 0.417000 1.0080 0 + 15816 W1 4443 TIP3 OH2 OT -0.834000 15.9994 0 + 15817 W1 4443 TIP3 H1 HT 0.417000 1.0080 0 + 15818 W1 4443 TIP3 H2 HT 0.417000 1.0080 0 + 15819 W1 4444 TIP3 OH2 OT -0.834000 15.9994 0 + 15820 W1 4444 TIP3 H1 HT 0.417000 1.0080 0 + 15821 W1 4444 TIP3 H2 HT 0.417000 1.0080 0 + 15822 W1 4445 TIP3 OH2 OT -0.834000 15.9994 0 + 15823 W1 4445 TIP3 H1 HT 0.417000 1.0080 0 + 15824 W1 4445 TIP3 H2 HT 0.417000 1.0080 0 + 15825 W1 4446 TIP3 OH2 OT -0.834000 15.9994 0 + 15826 W1 4446 TIP3 H1 HT 0.417000 1.0080 0 + 15827 W1 4446 TIP3 H2 HT 0.417000 1.0080 0 + 15828 W1 4447 TIP3 OH2 OT -0.834000 15.9994 0 + 15829 W1 4447 TIP3 H1 HT 0.417000 1.0080 0 + 15830 W1 4447 TIP3 H2 HT 0.417000 1.0080 0 + 15831 W1 4448 TIP3 OH2 OT -0.834000 15.9994 0 + 15832 W1 4448 TIP3 H1 HT 0.417000 1.0080 0 + 15833 W1 4448 TIP3 H2 HT 0.417000 1.0080 0 + 15834 W1 4449 TIP3 OH2 OT -0.834000 15.9994 0 + 15835 W1 4449 TIP3 H1 HT 0.417000 1.0080 0 + 15836 W1 4449 TIP3 H2 HT 0.417000 1.0080 0 + 15837 W1 4450 TIP3 OH2 OT -0.834000 15.9994 0 + 15838 W1 4450 TIP3 H1 HT 0.417000 1.0080 0 + 15839 W1 4450 TIP3 H2 HT 0.417000 1.0080 0 + 15840 W1 4451 TIP3 OH2 OT -0.834000 15.9994 0 + 15841 W1 4451 TIP3 H1 HT 0.417000 1.0080 0 + 15842 W1 4451 TIP3 H2 HT 0.417000 1.0080 0 + 15843 W1 4452 TIP3 OH2 OT -0.834000 15.9994 0 + 15844 W1 4452 TIP3 H1 HT 0.417000 1.0080 0 + 15845 W1 4452 TIP3 H2 HT 0.417000 1.0080 0 + 15846 W1 4453 TIP3 OH2 OT -0.834000 15.9994 0 + 15847 W1 4453 TIP3 H1 HT 0.417000 1.0080 0 + 15848 W1 4453 TIP3 H2 HT 0.417000 1.0080 0 + 15849 W1 4454 TIP3 OH2 OT -0.834000 15.9994 0 + 15850 W1 4454 TIP3 H1 HT 0.417000 1.0080 0 + 15851 W1 4454 TIP3 H2 HT 0.417000 1.0080 0 + 15852 W1 4455 TIP3 OH2 OT -0.834000 15.9994 0 + 15853 W1 4455 TIP3 H1 HT 0.417000 1.0080 0 + 15854 W1 4455 TIP3 H2 HT 0.417000 1.0080 0 + 15855 W1 4456 TIP3 OH2 OT -0.834000 15.9994 0 + 15856 W1 4456 TIP3 H1 HT 0.417000 1.0080 0 + 15857 W1 4456 TIP3 H2 HT 0.417000 1.0080 0 + 15858 W1 4457 TIP3 OH2 OT -0.834000 15.9994 0 + 15859 W1 4457 TIP3 H1 HT 0.417000 1.0080 0 + 15860 W1 4457 TIP3 H2 HT 0.417000 1.0080 0 + 15861 W1 4458 TIP3 OH2 OT -0.834000 15.9994 0 + 15862 W1 4458 TIP3 H1 HT 0.417000 1.0080 0 + 15863 W1 4458 TIP3 H2 HT 0.417000 1.0080 0 + 15864 W1 4459 TIP3 OH2 OT -0.834000 15.9994 0 + 15865 W1 4459 TIP3 H1 HT 0.417000 1.0080 0 + 15866 W1 4459 TIP3 H2 HT 0.417000 1.0080 0 + 15867 W1 4460 TIP3 OH2 OT -0.834000 15.9994 0 + 15868 W1 4460 TIP3 H1 HT 0.417000 1.0080 0 + 15869 W1 4460 TIP3 H2 HT 0.417000 1.0080 0 + 15870 W1 4461 TIP3 OH2 OT -0.834000 15.9994 0 + 15871 W1 4461 TIP3 H1 HT 0.417000 1.0080 0 + 15872 W1 4461 TIP3 H2 HT 0.417000 1.0080 0 + 15873 W1 4462 TIP3 OH2 OT -0.834000 15.9994 0 + 15874 W1 4462 TIP3 H1 HT 0.417000 1.0080 0 + 15875 W1 4462 TIP3 H2 HT 0.417000 1.0080 0 + 15876 W1 4463 TIP3 OH2 OT -0.834000 15.9994 0 + 15877 W1 4463 TIP3 H1 HT 0.417000 1.0080 0 + 15878 W1 4463 TIP3 H2 HT 0.417000 1.0080 0 + 15879 W1 4464 TIP3 OH2 OT -0.834000 15.9994 0 + 15880 W1 4464 TIP3 H1 HT 0.417000 1.0080 0 + 15881 W1 4464 TIP3 H2 HT 0.417000 1.0080 0 + 15882 W1 4465 TIP3 OH2 OT -0.834000 15.9994 0 + 15883 W1 4465 TIP3 H1 HT 0.417000 1.0080 0 + 15884 W1 4465 TIP3 H2 HT 0.417000 1.0080 0 + 15885 W1 4466 TIP3 OH2 OT -0.834000 15.9994 0 + 15886 W1 4466 TIP3 H1 HT 0.417000 1.0080 0 + 15887 W1 4466 TIP3 H2 HT 0.417000 1.0080 0 + 15888 W1 4467 TIP3 OH2 OT -0.834000 15.9994 0 + 15889 W1 4467 TIP3 H1 HT 0.417000 1.0080 0 + 15890 W1 4467 TIP3 H2 HT 0.417000 1.0080 0 + 15891 W1 4468 TIP3 OH2 OT -0.834000 15.9994 0 + 15892 W1 4468 TIP3 H1 HT 0.417000 1.0080 0 + 15893 W1 4468 TIP3 H2 HT 0.417000 1.0080 0 + 15894 W1 4469 TIP3 OH2 OT -0.834000 15.9994 0 + 15895 W1 4469 TIP3 H1 HT 0.417000 1.0080 0 + 15896 W1 4469 TIP3 H2 HT 0.417000 1.0080 0 + 15897 W1 4470 TIP3 OH2 OT -0.834000 15.9994 0 + 15898 W1 4470 TIP3 H1 HT 0.417000 1.0080 0 + 15899 W1 4470 TIP3 H2 HT 0.417000 1.0080 0 + 15900 W1 4471 TIP3 OH2 OT -0.834000 15.9994 0 + 15901 W1 4471 TIP3 H1 HT 0.417000 1.0080 0 + 15902 W1 4471 TIP3 H2 HT 0.417000 1.0080 0 + 15903 W1 4472 TIP3 OH2 OT -0.834000 15.9994 0 + 15904 W1 4472 TIP3 H1 HT 0.417000 1.0080 0 + 15905 W1 4472 TIP3 H2 HT 0.417000 1.0080 0 + 15906 W1 4473 TIP3 OH2 OT -0.834000 15.9994 0 + 15907 W1 4473 TIP3 H1 HT 0.417000 1.0080 0 + 15908 W1 4473 TIP3 H2 HT 0.417000 1.0080 0 + 15909 W1 4474 TIP3 OH2 OT -0.834000 15.9994 0 + 15910 W1 4474 TIP3 H1 HT 0.417000 1.0080 0 + 15911 W1 4474 TIP3 H2 HT 0.417000 1.0080 0 + 15912 W1 4475 TIP3 OH2 OT -0.834000 15.9994 0 + 15913 W1 4475 TIP3 H1 HT 0.417000 1.0080 0 + 15914 W1 4475 TIP3 H2 HT 0.417000 1.0080 0 + 15915 W1 4476 TIP3 OH2 OT -0.834000 15.9994 0 + 15916 W1 4476 TIP3 H1 HT 0.417000 1.0080 0 + 15917 W1 4476 TIP3 H2 HT 0.417000 1.0080 0 + 15918 W1 4477 TIP3 OH2 OT -0.834000 15.9994 0 + 15919 W1 4477 TIP3 H1 HT 0.417000 1.0080 0 + 15920 W1 4477 TIP3 H2 HT 0.417000 1.0080 0 + 15921 W1 4478 TIP3 OH2 OT -0.834000 15.9994 0 + 15922 W1 4478 TIP3 H1 HT 0.417000 1.0080 0 + 15923 W1 4478 TIP3 H2 HT 0.417000 1.0080 0 + 15924 W1 4479 TIP3 OH2 OT -0.834000 15.9994 0 + 15925 W1 4479 TIP3 H1 HT 0.417000 1.0080 0 + 15926 W1 4479 TIP3 H2 HT 0.417000 1.0080 0 + 15927 W1 4480 TIP3 OH2 OT -0.834000 15.9994 0 + 15928 W1 4480 TIP3 H1 HT 0.417000 1.0080 0 + 15929 W1 4480 TIP3 H2 HT 0.417000 1.0080 0 + 15930 W1 4481 TIP3 OH2 OT -0.834000 15.9994 0 + 15931 W1 4481 TIP3 H1 HT 0.417000 1.0080 0 + 15932 W1 4481 TIP3 H2 HT 0.417000 1.0080 0 + 15933 W1 4482 TIP3 OH2 OT -0.834000 15.9994 0 + 15934 W1 4482 TIP3 H1 HT 0.417000 1.0080 0 + 15935 W1 4482 TIP3 H2 HT 0.417000 1.0080 0 + 15936 W1 4483 TIP3 OH2 OT -0.834000 15.9994 0 + 15937 W1 4483 TIP3 H1 HT 0.417000 1.0080 0 + 15938 W1 4483 TIP3 H2 HT 0.417000 1.0080 0 + 15939 W1 4484 TIP3 OH2 OT -0.834000 15.9994 0 + 15940 W1 4484 TIP3 H1 HT 0.417000 1.0080 0 + 15941 W1 4484 TIP3 H2 HT 0.417000 1.0080 0 + 15942 W1 4485 TIP3 OH2 OT -0.834000 15.9994 0 + 15943 W1 4485 TIP3 H1 HT 0.417000 1.0080 0 + 15944 W1 4485 TIP3 H2 HT 0.417000 1.0080 0 + 15945 W1 4486 TIP3 OH2 OT -0.834000 15.9994 0 + 15946 W1 4486 TIP3 H1 HT 0.417000 1.0080 0 + 15947 W1 4486 TIP3 H2 HT 0.417000 1.0080 0 + 15948 W1 4487 TIP3 OH2 OT -0.834000 15.9994 0 + 15949 W1 4487 TIP3 H1 HT 0.417000 1.0080 0 + 15950 W1 4487 TIP3 H2 HT 0.417000 1.0080 0 + 15951 W1 4488 TIP3 OH2 OT -0.834000 15.9994 0 + 15952 W1 4488 TIP3 H1 HT 0.417000 1.0080 0 + 15953 W1 4488 TIP3 H2 HT 0.417000 1.0080 0 + 15954 W1 4489 TIP3 OH2 OT -0.834000 15.9994 0 + 15955 W1 4489 TIP3 H1 HT 0.417000 1.0080 0 + 15956 W1 4489 TIP3 H2 HT 0.417000 1.0080 0 + 15957 W1 4490 TIP3 OH2 OT -0.834000 15.9994 0 + 15958 W1 4490 TIP3 H1 HT 0.417000 1.0080 0 + 15959 W1 4490 TIP3 H2 HT 0.417000 1.0080 0 + 15960 W1 4491 TIP3 OH2 OT -0.834000 15.9994 0 + 15961 W1 4491 TIP3 H1 HT 0.417000 1.0080 0 + 15962 W1 4491 TIP3 H2 HT 0.417000 1.0080 0 + 15963 W1 4492 TIP3 OH2 OT -0.834000 15.9994 0 + 15964 W1 4492 TIP3 H1 HT 0.417000 1.0080 0 + 15965 W1 4492 TIP3 H2 HT 0.417000 1.0080 0 + 15966 W1 4493 TIP3 OH2 OT -0.834000 15.9994 0 + 15967 W1 4493 TIP3 H1 HT 0.417000 1.0080 0 + 15968 W1 4493 TIP3 H2 HT 0.417000 1.0080 0 + 15969 W1 4494 TIP3 OH2 OT -0.834000 15.9994 0 + 15970 W1 4494 TIP3 H1 HT 0.417000 1.0080 0 + 15971 W1 4494 TIP3 H2 HT 0.417000 1.0080 0 + 15972 W1 4495 TIP3 OH2 OT -0.834000 15.9994 0 + 15973 W1 4495 TIP3 H1 HT 0.417000 1.0080 0 + 15974 W1 4495 TIP3 H2 HT 0.417000 1.0080 0 + 15975 W1 4496 TIP3 OH2 OT -0.834000 15.9994 0 + 15976 W1 4496 TIP3 H1 HT 0.417000 1.0080 0 + 15977 W1 4496 TIP3 H2 HT 0.417000 1.0080 0 + 15978 W1 4497 TIP3 OH2 OT -0.834000 15.9994 0 + 15979 W1 4497 TIP3 H1 HT 0.417000 1.0080 0 + 15980 W1 4497 TIP3 H2 HT 0.417000 1.0080 0 + 15981 W1 4498 TIP3 OH2 OT -0.834000 15.9994 0 + 15982 W1 4498 TIP3 H1 HT 0.417000 1.0080 0 + 15983 W1 4498 TIP3 H2 HT 0.417000 1.0080 0 + 15984 W1 4499 TIP3 OH2 OT -0.834000 15.9994 0 + 15985 W1 4499 TIP3 H1 HT 0.417000 1.0080 0 + 15986 W1 4499 TIP3 H2 HT 0.417000 1.0080 0 + 15987 W1 4500 TIP3 OH2 OT -0.834000 15.9994 0 + 15988 W1 4500 TIP3 H1 HT 0.417000 1.0080 0 + 15989 W1 4500 TIP3 H2 HT 0.417000 1.0080 0 + 15990 W1 4501 TIP3 OH2 OT -0.834000 15.9994 0 + 15991 W1 4501 TIP3 H1 HT 0.417000 1.0080 0 + 15992 W1 4501 TIP3 H2 HT 0.417000 1.0080 0 + 15993 W1 4502 TIP3 OH2 OT -0.834000 15.9994 0 + 15994 W1 4502 TIP3 H1 HT 0.417000 1.0080 0 + 15995 W1 4502 TIP3 H2 HT 0.417000 1.0080 0 + 15996 W1 4503 TIP3 OH2 OT -0.834000 15.9994 0 + 15997 W1 4503 TIP3 H1 HT 0.417000 1.0080 0 + 15998 W1 4503 TIP3 H2 HT 0.417000 1.0080 0 + 15999 W1 4504 TIP3 OH2 OT -0.834000 15.9994 0 + 16000 W1 4504 TIP3 H1 HT 0.417000 1.0080 0 + 16001 W1 4504 TIP3 H2 HT 0.417000 1.0080 0 + 16002 W1 4505 TIP3 OH2 OT -0.834000 15.9994 0 + 16003 W1 4505 TIP3 H1 HT 0.417000 1.0080 0 + 16004 W1 4505 TIP3 H2 HT 0.417000 1.0080 0 + 16005 W1 4506 TIP3 OH2 OT -0.834000 15.9994 0 + 16006 W1 4506 TIP3 H1 HT 0.417000 1.0080 0 + 16007 W1 4506 TIP3 H2 HT 0.417000 1.0080 0 + 16008 W1 4507 TIP3 OH2 OT -0.834000 15.9994 0 + 16009 W1 4507 TIP3 H1 HT 0.417000 1.0080 0 + 16010 W1 4507 TIP3 H2 HT 0.417000 1.0080 0 + 16011 W1 4508 TIP3 OH2 OT -0.834000 15.9994 0 + 16012 W1 4508 TIP3 H1 HT 0.417000 1.0080 0 + 16013 W1 4508 TIP3 H2 HT 0.417000 1.0080 0 + 16014 W1 4509 TIP3 OH2 OT -0.834000 15.9994 0 + 16015 W1 4509 TIP3 H1 HT 0.417000 1.0080 0 + 16016 W1 4509 TIP3 H2 HT 0.417000 1.0080 0 + 16017 W1 4510 TIP3 OH2 OT -0.834000 15.9994 0 + 16018 W1 4510 TIP3 H1 HT 0.417000 1.0080 0 + 16019 W1 4510 TIP3 H2 HT 0.417000 1.0080 0 + 16020 W1 4511 TIP3 OH2 OT -0.834000 15.9994 0 + 16021 W1 4511 TIP3 H1 HT 0.417000 1.0080 0 + 16022 W1 4511 TIP3 H2 HT 0.417000 1.0080 0 + 16023 W1 4512 TIP3 OH2 OT -0.834000 15.9994 0 + 16024 W1 4512 TIP3 H1 HT 0.417000 1.0080 0 + 16025 W1 4512 TIP3 H2 HT 0.417000 1.0080 0 + 16026 W1 4513 TIP3 OH2 OT -0.834000 15.9994 0 + 16027 W1 4513 TIP3 H1 HT 0.417000 1.0080 0 + 16028 W1 4513 TIP3 H2 HT 0.417000 1.0080 0 + 16029 W1 4514 TIP3 OH2 OT -0.834000 15.9994 0 + 16030 W1 4514 TIP3 H1 HT 0.417000 1.0080 0 + 16031 W1 4514 TIP3 H2 HT 0.417000 1.0080 0 + 16032 W1 4515 TIP3 OH2 OT -0.834000 15.9994 0 + 16033 W1 4515 TIP3 H1 HT 0.417000 1.0080 0 + 16034 W1 4515 TIP3 H2 HT 0.417000 1.0080 0 + 16035 W1 4516 TIP3 OH2 OT -0.834000 15.9994 0 + 16036 W1 4516 TIP3 H1 HT 0.417000 1.0080 0 + 16037 W1 4516 TIP3 H2 HT 0.417000 1.0080 0 + 16038 W1 4517 TIP3 OH2 OT -0.834000 15.9994 0 + 16039 W1 4517 TIP3 H1 HT 0.417000 1.0080 0 + 16040 W1 4517 TIP3 H2 HT 0.417000 1.0080 0 + 16041 W1 4518 TIP3 OH2 OT -0.834000 15.9994 0 + 16042 W1 4518 TIP3 H1 HT 0.417000 1.0080 0 + 16043 W1 4518 TIP3 H2 HT 0.417000 1.0080 0 + 16044 W1 4519 TIP3 OH2 OT -0.834000 15.9994 0 + 16045 W1 4519 TIP3 H1 HT 0.417000 1.0080 0 + 16046 W1 4519 TIP3 H2 HT 0.417000 1.0080 0 + 16047 W1 4520 TIP3 OH2 OT -0.834000 15.9994 0 + 16048 W1 4520 TIP3 H1 HT 0.417000 1.0080 0 + 16049 W1 4520 TIP3 H2 HT 0.417000 1.0080 0 + 16050 W1 4521 TIP3 OH2 OT -0.834000 15.9994 0 + 16051 W1 4521 TIP3 H1 HT 0.417000 1.0080 0 + 16052 W1 4521 TIP3 H2 HT 0.417000 1.0080 0 + 16053 W1 4522 TIP3 OH2 OT -0.834000 15.9994 0 + 16054 W1 4522 TIP3 H1 HT 0.417000 1.0080 0 + 16055 W1 4522 TIP3 H2 HT 0.417000 1.0080 0 + 16056 W1 4523 TIP3 OH2 OT -0.834000 15.9994 0 + 16057 W1 4523 TIP3 H1 HT 0.417000 1.0080 0 + 16058 W1 4523 TIP3 H2 HT 0.417000 1.0080 0 + 16059 W1 4524 TIP3 OH2 OT -0.834000 15.9994 0 + 16060 W1 4524 TIP3 H1 HT 0.417000 1.0080 0 + 16061 W1 4524 TIP3 H2 HT 0.417000 1.0080 0 + 16062 W1 4525 TIP3 OH2 OT -0.834000 15.9994 0 + 16063 W1 4525 TIP3 H1 HT 0.417000 1.0080 0 + 16064 W1 4525 TIP3 H2 HT 0.417000 1.0080 0 + 16065 W1 4526 TIP3 OH2 OT -0.834000 15.9994 0 + 16066 W1 4526 TIP3 H1 HT 0.417000 1.0080 0 + 16067 W1 4526 TIP3 H2 HT 0.417000 1.0080 0 + 16068 W1 4527 TIP3 OH2 OT -0.834000 15.9994 0 + 16069 W1 4527 TIP3 H1 HT 0.417000 1.0080 0 + 16070 W1 4527 TIP3 H2 HT 0.417000 1.0080 0 + 16071 W1 4528 TIP3 OH2 OT -0.834000 15.9994 0 + 16072 W1 4528 TIP3 H1 HT 0.417000 1.0080 0 + 16073 W1 4528 TIP3 H2 HT 0.417000 1.0080 0 + 16074 W1 4529 TIP3 OH2 OT -0.834000 15.9994 0 + 16075 W1 4529 TIP3 H1 HT 0.417000 1.0080 0 + 16076 W1 4529 TIP3 H2 HT 0.417000 1.0080 0 + 16077 W1 4530 TIP3 OH2 OT -0.834000 15.9994 0 + 16078 W1 4530 TIP3 H1 HT 0.417000 1.0080 0 + 16079 W1 4530 TIP3 H2 HT 0.417000 1.0080 0 + 16080 W1 4531 TIP3 OH2 OT -0.834000 15.9994 0 + 16081 W1 4531 TIP3 H1 HT 0.417000 1.0080 0 + 16082 W1 4531 TIP3 H2 HT 0.417000 1.0080 0 + 16083 W1 4532 TIP3 OH2 OT -0.834000 15.9994 0 + 16084 W1 4532 TIP3 H1 HT 0.417000 1.0080 0 + 16085 W1 4532 TIP3 H2 HT 0.417000 1.0080 0 + 16086 W1 4533 TIP3 OH2 OT -0.834000 15.9994 0 + 16087 W1 4533 TIP3 H1 HT 0.417000 1.0080 0 + 16088 W1 4533 TIP3 H2 HT 0.417000 1.0080 0 + 16089 W1 4534 TIP3 OH2 OT -0.834000 15.9994 0 + 16090 W1 4534 TIP3 H1 HT 0.417000 1.0080 0 + 16091 W1 4534 TIP3 H2 HT 0.417000 1.0080 0 + 16092 W1 4535 TIP3 OH2 OT -0.834000 15.9994 0 + 16093 W1 4535 TIP3 H1 HT 0.417000 1.0080 0 + 16094 W1 4535 TIP3 H2 HT 0.417000 1.0080 0 + 16095 W1 4536 TIP3 OH2 OT -0.834000 15.9994 0 + 16096 W1 4536 TIP3 H1 HT 0.417000 1.0080 0 + 16097 W1 4536 TIP3 H2 HT 0.417000 1.0080 0 + 16098 W1 4537 TIP3 OH2 OT -0.834000 15.9994 0 + 16099 W1 4537 TIP3 H1 HT 0.417000 1.0080 0 + 16100 W1 4537 TIP3 H2 HT 0.417000 1.0080 0 + 16101 W1 4538 TIP3 OH2 OT -0.834000 15.9994 0 + 16102 W1 4538 TIP3 H1 HT 0.417000 1.0080 0 + 16103 W1 4538 TIP3 H2 HT 0.417000 1.0080 0 + 16104 W1 4539 TIP3 OH2 OT -0.834000 15.9994 0 + 16105 W1 4539 TIP3 H1 HT 0.417000 1.0080 0 + 16106 W1 4539 TIP3 H2 HT 0.417000 1.0080 0 + 16107 W1 4540 TIP3 OH2 OT -0.834000 15.9994 0 + 16108 W1 4540 TIP3 H1 HT 0.417000 1.0080 0 + 16109 W1 4540 TIP3 H2 HT 0.417000 1.0080 0 + 16110 W1 4541 TIP3 OH2 OT -0.834000 15.9994 0 + 16111 W1 4541 TIP3 H1 HT 0.417000 1.0080 0 + 16112 W1 4541 TIP3 H2 HT 0.417000 1.0080 0 + 16113 W1 4542 TIP3 OH2 OT -0.834000 15.9994 0 + 16114 W1 4542 TIP3 H1 HT 0.417000 1.0080 0 + 16115 W1 4542 TIP3 H2 HT 0.417000 1.0080 0 + 16116 W1 4543 TIP3 OH2 OT -0.834000 15.9994 0 + 16117 W1 4543 TIP3 H1 HT 0.417000 1.0080 0 + 16118 W1 4543 TIP3 H2 HT 0.417000 1.0080 0 + 16119 W1 4544 TIP3 OH2 OT -0.834000 15.9994 0 + 16120 W1 4544 TIP3 H1 HT 0.417000 1.0080 0 + 16121 W1 4544 TIP3 H2 HT 0.417000 1.0080 0 + 16122 W1 4545 TIP3 OH2 OT -0.834000 15.9994 0 + 16123 W1 4545 TIP3 H1 HT 0.417000 1.0080 0 + 16124 W1 4545 TIP3 H2 HT 0.417000 1.0080 0 + 16125 W1 4546 TIP3 OH2 OT -0.834000 15.9994 0 + 16126 W1 4546 TIP3 H1 HT 0.417000 1.0080 0 + 16127 W1 4546 TIP3 H2 HT 0.417000 1.0080 0 + 16128 W1 4547 TIP3 OH2 OT -0.834000 15.9994 0 + 16129 W1 4547 TIP3 H1 HT 0.417000 1.0080 0 + 16130 W1 4547 TIP3 H2 HT 0.417000 1.0080 0 + 16131 W1 4548 TIP3 OH2 OT -0.834000 15.9994 0 + 16132 W1 4548 TIP3 H1 HT 0.417000 1.0080 0 + 16133 W1 4548 TIP3 H2 HT 0.417000 1.0080 0 + 16134 W1 4549 TIP3 OH2 OT -0.834000 15.9994 0 + 16135 W1 4549 TIP3 H1 HT 0.417000 1.0080 0 + 16136 W1 4549 TIP3 H2 HT 0.417000 1.0080 0 + 16137 W1 4550 TIP3 OH2 OT -0.834000 15.9994 0 + 16138 W1 4550 TIP3 H1 HT 0.417000 1.0080 0 + 16139 W1 4550 TIP3 H2 HT 0.417000 1.0080 0 + 16140 W1 4551 TIP3 OH2 OT -0.834000 15.9994 0 + 16141 W1 4551 TIP3 H1 HT 0.417000 1.0080 0 + 16142 W1 4551 TIP3 H2 HT 0.417000 1.0080 0 + 16143 W1 4552 TIP3 OH2 OT -0.834000 15.9994 0 + 16144 W1 4552 TIP3 H1 HT 0.417000 1.0080 0 + 16145 W1 4552 TIP3 H2 HT 0.417000 1.0080 0 + 16146 W1 4553 TIP3 OH2 OT -0.834000 15.9994 0 + 16147 W1 4553 TIP3 H1 HT 0.417000 1.0080 0 + 16148 W1 4553 TIP3 H2 HT 0.417000 1.0080 0 + 16149 W1 4554 TIP3 OH2 OT -0.834000 15.9994 0 + 16150 W1 4554 TIP3 H1 HT 0.417000 1.0080 0 + 16151 W1 4554 TIP3 H2 HT 0.417000 1.0080 0 + 16152 W1 4555 TIP3 OH2 OT -0.834000 15.9994 0 + 16153 W1 4555 TIP3 H1 HT 0.417000 1.0080 0 + 16154 W1 4555 TIP3 H2 HT 0.417000 1.0080 0 + 16155 W1 4556 TIP3 OH2 OT -0.834000 15.9994 0 + 16156 W1 4556 TIP3 H1 HT 0.417000 1.0080 0 + 16157 W1 4556 TIP3 H2 HT 0.417000 1.0080 0 + 16158 W1 4557 TIP3 OH2 OT -0.834000 15.9994 0 + 16159 W1 4557 TIP3 H1 HT 0.417000 1.0080 0 + 16160 W1 4557 TIP3 H2 HT 0.417000 1.0080 0 + 16161 W1 4558 TIP3 OH2 OT -0.834000 15.9994 0 + 16162 W1 4558 TIP3 H1 HT 0.417000 1.0080 0 + 16163 W1 4558 TIP3 H2 HT 0.417000 1.0080 0 + 16164 W1 4559 TIP3 OH2 OT -0.834000 15.9994 0 + 16165 W1 4559 TIP3 H1 HT 0.417000 1.0080 0 + 16166 W1 4559 TIP3 H2 HT 0.417000 1.0080 0 + 16167 W1 4560 TIP3 OH2 OT -0.834000 15.9994 0 + 16168 W1 4560 TIP3 H1 HT 0.417000 1.0080 0 + 16169 W1 4560 TIP3 H2 HT 0.417000 1.0080 0 + 16170 W1 4561 TIP3 OH2 OT -0.834000 15.9994 0 + 16171 W1 4561 TIP3 H1 HT 0.417000 1.0080 0 + 16172 W1 4561 TIP3 H2 HT 0.417000 1.0080 0 + 16173 W1 4562 TIP3 OH2 OT -0.834000 15.9994 0 + 16174 W1 4562 TIP3 H1 HT 0.417000 1.0080 0 + 16175 W1 4562 TIP3 H2 HT 0.417000 1.0080 0 + 16176 W1 4563 TIP3 OH2 OT -0.834000 15.9994 0 + 16177 W1 4563 TIP3 H1 HT 0.417000 1.0080 0 + 16178 W1 4563 TIP3 H2 HT 0.417000 1.0080 0 + 16179 W1 4564 TIP3 OH2 OT -0.834000 15.9994 0 + 16180 W1 4564 TIP3 H1 HT 0.417000 1.0080 0 + 16181 W1 4564 TIP3 H2 HT 0.417000 1.0080 0 + 16182 W1 4565 TIP3 OH2 OT -0.834000 15.9994 0 + 16183 W1 4565 TIP3 H1 HT 0.417000 1.0080 0 + 16184 W1 4565 TIP3 H2 HT 0.417000 1.0080 0 + 16185 W1 4566 TIP3 OH2 OT -0.834000 15.9994 0 + 16186 W1 4566 TIP3 H1 HT 0.417000 1.0080 0 + 16187 W1 4566 TIP3 H2 HT 0.417000 1.0080 0 + 16188 W1 4567 TIP3 OH2 OT -0.834000 15.9994 0 + 16189 W1 4567 TIP3 H1 HT 0.417000 1.0080 0 + 16190 W1 4567 TIP3 H2 HT 0.417000 1.0080 0 + 16191 W1 4568 TIP3 OH2 OT -0.834000 15.9994 0 + 16192 W1 4568 TIP3 H1 HT 0.417000 1.0080 0 + 16193 W1 4568 TIP3 H2 HT 0.417000 1.0080 0 + 16194 W1 4569 TIP3 OH2 OT -0.834000 15.9994 0 + 16195 W1 4569 TIP3 H1 HT 0.417000 1.0080 0 + 16196 W1 4569 TIP3 H2 HT 0.417000 1.0080 0 + 16197 W1 4570 TIP3 OH2 OT -0.834000 15.9994 0 + 16198 W1 4570 TIP3 H1 HT 0.417000 1.0080 0 + 16199 W1 4570 TIP3 H2 HT 0.417000 1.0080 0 + 16200 W1 4571 TIP3 OH2 OT -0.834000 15.9994 0 + 16201 W1 4571 TIP3 H1 HT 0.417000 1.0080 0 + 16202 W1 4571 TIP3 H2 HT 0.417000 1.0080 0 + 16203 W1 4572 TIP3 OH2 OT -0.834000 15.9994 0 + 16204 W1 4572 TIP3 H1 HT 0.417000 1.0080 0 + 16205 W1 4572 TIP3 H2 HT 0.417000 1.0080 0 + 16206 W1 4573 TIP3 OH2 OT -0.834000 15.9994 0 + 16207 W1 4573 TIP3 H1 HT 0.417000 1.0080 0 + 16208 W1 4573 TIP3 H2 HT 0.417000 1.0080 0 + 16209 W1 4574 TIP3 OH2 OT -0.834000 15.9994 0 + 16210 W1 4574 TIP3 H1 HT 0.417000 1.0080 0 + 16211 W1 4574 TIP3 H2 HT 0.417000 1.0080 0 + 16212 W1 4575 TIP3 OH2 OT -0.834000 15.9994 0 + 16213 W1 4575 TIP3 H1 HT 0.417000 1.0080 0 + 16214 W1 4575 TIP3 H2 HT 0.417000 1.0080 0 + 16215 W1 4576 TIP3 OH2 OT -0.834000 15.9994 0 + 16216 W1 4576 TIP3 H1 HT 0.417000 1.0080 0 + 16217 W1 4576 TIP3 H2 HT 0.417000 1.0080 0 + 16218 W1 4577 TIP3 OH2 OT -0.834000 15.9994 0 + 16219 W1 4577 TIP3 H1 HT 0.417000 1.0080 0 + 16220 W1 4577 TIP3 H2 HT 0.417000 1.0080 0 + 16221 W1 4578 TIP3 OH2 OT -0.834000 15.9994 0 + 16222 W1 4578 TIP3 H1 HT 0.417000 1.0080 0 + 16223 W1 4578 TIP3 H2 HT 0.417000 1.0080 0 + 16224 W1 4579 TIP3 OH2 OT -0.834000 15.9994 0 + 16225 W1 4579 TIP3 H1 HT 0.417000 1.0080 0 + 16226 W1 4579 TIP3 H2 HT 0.417000 1.0080 0 + 16227 W1 4580 TIP3 OH2 OT -0.834000 15.9994 0 + 16228 W1 4580 TIP3 H1 HT 0.417000 1.0080 0 + 16229 W1 4580 TIP3 H2 HT 0.417000 1.0080 0 + 16230 W1 4581 TIP3 OH2 OT -0.834000 15.9994 0 + 16231 W1 4581 TIP3 H1 HT 0.417000 1.0080 0 + 16232 W1 4581 TIP3 H2 HT 0.417000 1.0080 0 + 16233 W1 4582 TIP3 OH2 OT -0.834000 15.9994 0 + 16234 W1 4582 TIP3 H1 HT 0.417000 1.0080 0 + 16235 W1 4582 TIP3 H2 HT 0.417000 1.0080 0 + 16236 W1 4583 TIP3 OH2 OT -0.834000 15.9994 0 + 16237 W1 4583 TIP3 H1 HT 0.417000 1.0080 0 + 16238 W1 4583 TIP3 H2 HT 0.417000 1.0080 0 + 16239 W1 4584 TIP3 OH2 OT -0.834000 15.9994 0 + 16240 W1 4584 TIP3 H1 HT 0.417000 1.0080 0 + 16241 W1 4584 TIP3 H2 HT 0.417000 1.0080 0 + 16242 W1 4585 TIP3 OH2 OT -0.834000 15.9994 0 + 16243 W1 4585 TIP3 H1 HT 0.417000 1.0080 0 + 16244 W1 4585 TIP3 H2 HT 0.417000 1.0080 0 + 16245 W1 4586 TIP3 OH2 OT -0.834000 15.9994 0 + 16246 W1 4586 TIP3 H1 HT 0.417000 1.0080 0 + 16247 W1 4586 TIP3 H2 HT 0.417000 1.0080 0 + 16248 W1 4587 TIP3 OH2 OT -0.834000 15.9994 0 + 16249 W1 4587 TIP3 H1 HT 0.417000 1.0080 0 + 16250 W1 4587 TIP3 H2 HT 0.417000 1.0080 0 + 16251 W1 4588 TIP3 OH2 OT -0.834000 15.9994 0 + 16252 W1 4588 TIP3 H1 HT 0.417000 1.0080 0 + 16253 W1 4588 TIP3 H2 HT 0.417000 1.0080 0 + 16254 W1 4589 TIP3 OH2 OT -0.834000 15.9994 0 + 16255 W1 4589 TIP3 H1 HT 0.417000 1.0080 0 + 16256 W1 4589 TIP3 H2 HT 0.417000 1.0080 0 + 16257 W1 4590 TIP3 OH2 OT -0.834000 15.9994 0 + 16258 W1 4590 TIP3 H1 HT 0.417000 1.0080 0 + 16259 W1 4590 TIP3 H2 HT 0.417000 1.0080 0 + 16260 W1 4591 TIP3 OH2 OT -0.834000 15.9994 0 + 16261 W1 4591 TIP3 H1 HT 0.417000 1.0080 0 + 16262 W1 4591 TIP3 H2 HT 0.417000 1.0080 0 + 16263 W1 4592 TIP3 OH2 OT -0.834000 15.9994 0 + 16264 W1 4592 TIP3 H1 HT 0.417000 1.0080 0 + 16265 W1 4592 TIP3 H2 HT 0.417000 1.0080 0 + 16266 W1 4593 TIP3 OH2 OT -0.834000 15.9994 0 + 16267 W1 4593 TIP3 H1 HT 0.417000 1.0080 0 + 16268 W1 4593 TIP3 H2 HT 0.417000 1.0080 0 + 16269 W1 4594 TIP3 OH2 OT -0.834000 15.9994 0 + 16270 W1 4594 TIP3 H1 HT 0.417000 1.0080 0 + 16271 W1 4594 TIP3 H2 HT 0.417000 1.0080 0 + 16272 W1 4595 TIP3 OH2 OT -0.834000 15.9994 0 + 16273 W1 4595 TIP3 H1 HT 0.417000 1.0080 0 + 16274 W1 4595 TIP3 H2 HT 0.417000 1.0080 0 + 16275 W1 4596 TIP3 OH2 OT -0.834000 15.9994 0 + 16276 W1 4596 TIP3 H1 HT 0.417000 1.0080 0 + 16277 W1 4596 TIP3 H2 HT 0.417000 1.0080 0 + 16278 W1 4597 TIP3 OH2 OT -0.834000 15.9994 0 + 16279 W1 4597 TIP3 H1 HT 0.417000 1.0080 0 + 16280 W1 4597 TIP3 H2 HT 0.417000 1.0080 0 + 16281 W1 4598 TIP3 OH2 OT -0.834000 15.9994 0 + 16282 W1 4598 TIP3 H1 HT 0.417000 1.0080 0 + 16283 W1 4598 TIP3 H2 HT 0.417000 1.0080 0 + 16284 W1 4599 TIP3 OH2 OT -0.834000 15.9994 0 + 16285 W1 4599 TIP3 H1 HT 0.417000 1.0080 0 + 16286 W1 4599 TIP3 H2 HT 0.417000 1.0080 0 + 16287 W1 4600 TIP3 OH2 OT -0.834000 15.9994 0 + 16288 W1 4600 TIP3 H1 HT 0.417000 1.0080 0 + 16289 W1 4600 TIP3 H2 HT 0.417000 1.0080 0 + 16290 W1 4601 TIP3 OH2 OT -0.834000 15.9994 0 + 16291 W1 4601 TIP3 H1 HT 0.417000 1.0080 0 + 16292 W1 4601 TIP3 H2 HT 0.417000 1.0080 0 + 16293 W1 4602 TIP3 OH2 OT -0.834000 15.9994 0 + 16294 W1 4602 TIP3 H1 HT 0.417000 1.0080 0 + 16295 W1 4602 TIP3 H2 HT 0.417000 1.0080 0 + 16296 W1 4603 TIP3 OH2 OT -0.834000 15.9994 0 + 16297 W1 4603 TIP3 H1 HT 0.417000 1.0080 0 + 16298 W1 4603 TIP3 H2 HT 0.417000 1.0080 0 + 16299 W1 4604 TIP3 OH2 OT -0.834000 15.9994 0 + 16300 W1 4604 TIP3 H1 HT 0.417000 1.0080 0 + 16301 W1 4604 TIP3 H2 HT 0.417000 1.0080 0 + 16302 W1 4605 TIP3 OH2 OT -0.834000 15.9994 0 + 16303 W1 4605 TIP3 H1 HT 0.417000 1.0080 0 + 16304 W1 4605 TIP3 H2 HT 0.417000 1.0080 0 + 16305 W1 4606 TIP3 OH2 OT -0.834000 15.9994 0 + 16306 W1 4606 TIP3 H1 HT 0.417000 1.0080 0 + 16307 W1 4606 TIP3 H2 HT 0.417000 1.0080 0 + 16308 W1 4607 TIP3 OH2 OT -0.834000 15.9994 0 + 16309 W1 4607 TIP3 H1 HT 0.417000 1.0080 0 + 16310 W1 4607 TIP3 H2 HT 0.417000 1.0080 0 + 16311 W1 4608 TIP3 OH2 OT -0.834000 15.9994 0 + 16312 W1 4608 TIP3 H1 HT 0.417000 1.0080 0 + 16313 W1 4608 TIP3 H2 HT 0.417000 1.0080 0 + 16314 W1 4609 TIP3 OH2 OT -0.834000 15.9994 0 + 16315 W1 4609 TIP3 H1 HT 0.417000 1.0080 0 + 16316 W1 4609 TIP3 H2 HT 0.417000 1.0080 0 + 16317 W1 4610 TIP3 OH2 OT -0.834000 15.9994 0 + 16318 W1 4610 TIP3 H1 HT 0.417000 1.0080 0 + 16319 W1 4610 TIP3 H2 HT 0.417000 1.0080 0 + 16320 W1 4611 TIP3 OH2 OT -0.834000 15.9994 0 + 16321 W1 4611 TIP3 H1 HT 0.417000 1.0080 0 + 16322 W1 4611 TIP3 H2 HT 0.417000 1.0080 0 + 16323 W1 4612 TIP3 OH2 OT -0.834000 15.9994 0 + 16324 W1 4612 TIP3 H1 HT 0.417000 1.0080 0 + 16325 W1 4612 TIP3 H2 HT 0.417000 1.0080 0 + 16326 W1 4613 TIP3 OH2 OT -0.834000 15.9994 0 + 16327 W1 4613 TIP3 H1 HT 0.417000 1.0080 0 + 16328 W1 4613 TIP3 H2 HT 0.417000 1.0080 0 + 16329 W1 4614 TIP3 OH2 OT -0.834000 15.9994 0 + 16330 W1 4614 TIP3 H1 HT 0.417000 1.0080 0 + 16331 W1 4614 TIP3 H2 HT 0.417000 1.0080 0 + 16332 W1 4615 TIP3 OH2 OT -0.834000 15.9994 0 + 16333 W1 4615 TIP3 H1 HT 0.417000 1.0080 0 + 16334 W1 4615 TIP3 H2 HT 0.417000 1.0080 0 + 16335 W1 4616 TIP3 OH2 OT -0.834000 15.9994 0 + 16336 W1 4616 TIP3 H1 HT 0.417000 1.0080 0 + 16337 W1 4616 TIP3 H2 HT 0.417000 1.0080 0 + 16338 W1 4617 TIP3 OH2 OT -0.834000 15.9994 0 + 16339 W1 4617 TIP3 H1 HT 0.417000 1.0080 0 + 16340 W1 4617 TIP3 H2 HT 0.417000 1.0080 0 + 16341 W1 4618 TIP3 OH2 OT -0.834000 15.9994 0 + 16342 W1 4618 TIP3 H1 HT 0.417000 1.0080 0 + 16343 W1 4618 TIP3 H2 HT 0.417000 1.0080 0 + 16344 W1 4619 TIP3 OH2 OT -0.834000 15.9994 0 + 16345 W1 4619 TIP3 H1 HT 0.417000 1.0080 0 + 16346 W1 4619 TIP3 H2 HT 0.417000 1.0080 0 + 16347 W1 4620 TIP3 OH2 OT -0.834000 15.9994 0 + 16348 W1 4620 TIP3 H1 HT 0.417000 1.0080 0 + 16349 W1 4620 TIP3 H2 HT 0.417000 1.0080 0 + 16350 W1 4621 TIP3 OH2 OT -0.834000 15.9994 0 + 16351 W1 4621 TIP3 H1 HT 0.417000 1.0080 0 + 16352 W1 4621 TIP3 H2 HT 0.417000 1.0080 0 + 16353 W1 4622 TIP3 OH2 OT -0.834000 15.9994 0 + 16354 W1 4622 TIP3 H1 HT 0.417000 1.0080 0 + 16355 W1 4622 TIP3 H2 HT 0.417000 1.0080 0 + 16356 W1 4623 TIP3 OH2 OT -0.834000 15.9994 0 + 16357 W1 4623 TIP3 H1 HT 0.417000 1.0080 0 + 16358 W1 4623 TIP3 H2 HT 0.417000 1.0080 0 + 16359 W1 4624 TIP3 OH2 OT -0.834000 15.9994 0 + 16360 W1 4624 TIP3 H1 HT 0.417000 1.0080 0 + 16361 W1 4624 TIP3 H2 HT 0.417000 1.0080 0 + 16362 W1 4625 TIP3 OH2 OT -0.834000 15.9994 0 + 16363 W1 4625 TIP3 H1 HT 0.417000 1.0080 0 + 16364 W1 4625 TIP3 H2 HT 0.417000 1.0080 0 + 16365 W1 4626 TIP3 OH2 OT -0.834000 15.9994 0 + 16366 W1 4626 TIP3 H1 HT 0.417000 1.0080 0 + 16367 W1 4626 TIP3 H2 HT 0.417000 1.0080 0 + 16368 W1 4627 TIP3 OH2 OT -0.834000 15.9994 0 + 16369 W1 4627 TIP3 H1 HT 0.417000 1.0080 0 + 16370 W1 4627 TIP3 H2 HT 0.417000 1.0080 0 + 16371 W1 4628 TIP3 OH2 OT -0.834000 15.9994 0 + 16372 W1 4628 TIP3 H1 HT 0.417000 1.0080 0 + 16373 W1 4628 TIP3 H2 HT 0.417000 1.0080 0 + 16374 W1 4629 TIP3 OH2 OT -0.834000 15.9994 0 + 16375 W1 4629 TIP3 H1 HT 0.417000 1.0080 0 + 16376 W1 4629 TIP3 H2 HT 0.417000 1.0080 0 + 16377 W1 4630 TIP3 OH2 OT -0.834000 15.9994 0 + 16378 W1 4630 TIP3 H1 HT 0.417000 1.0080 0 + 16379 W1 4630 TIP3 H2 HT 0.417000 1.0080 0 + 16380 W1 4631 TIP3 OH2 OT -0.834000 15.9994 0 + 16381 W1 4631 TIP3 H1 HT 0.417000 1.0080 0 + 16382 W1 4631 TIP3 H2 HT 0.417000 1.0080 0 + 16383 W1 4632 TIP3 OH2 OT -0.834000 15.9994 0 + 16384 W1 4632 TIP3 H1 HT 0.417000 1.0080 0 + 16385 W1 4632 TIP3 H2 HT 0.417000 1.0080 0 + 16386 W1 4633 TIP3 OH2 OT -0.834000 15.9994 0 + 16387 W1 4633 TIP3 H1 HT 0.417000 1.0080 0 + 16388 W1 4633 TIP3 H2 HT 0.417000 1.0080 0 + 16389 W1 4634 TIP3 OH2 OT -0.834000 15.9994 0 + 16390 W1 4634 TIP3 H1 HT 0.417000 1.0080 0 + 16391 W1 4634 TIP3 H2 HT 0.417000 1.0080 0 + 16392 W1 4635 TIP3 OH2 OT -0.834000 15.9994 0 + 16393 W1 4635 TIP3 H1 HT 0.417000 1.0080 0 + 16394 W1 4635 TIP3 H2 HT 0.417000 1.0080 0 + 16395 W1 4636 TIP3 OH2 OT -0.834000 15.9994 0 + 16396 W1 4636 TIP3 H1 HT 0.417000 1.0080 0 + 16397 W1 4636 TIP3 H2 HT 0.417000 1.0080 0 + 16398 W1 4637 TIP3 OH2 OT -0.834000 15.9994 0 + 16399 W1 4637 TIP3 H1 HT 0.417000 1.0080 0 + 16400 W1 4637 TIP3 H2 HT 0.417000 1.0080 0 + 16401 W1 4638 TIP3 OH2 OT -0.834000 15.9994 0 + 16402 W1 4638 TIP3 H1 HT 0.417000 1.0080 0 + 16403 W1 4638 TIP3 H2 HT 0.417000 1.0080 0 + 16404 W1 4639 TIP3 OH2 OT -0.834000 15.9994 0 + 16405 W1 4639 TIP3 H1 HT 0.417000 1.0080 0 + 16406 W1 4639 TIP3 H2 HT 0.417000 1.0080 0 + 16407 W1 4640 TIP3 OH2 OT -0.834000 15.9994 0 + 16408 W1 4640 TIP3 H1 HT 0.417000 1.0080 0 + 16409 W1 4640 TIP3 H2 HT 0.417000 1.0080 0 + 16410 W1 4641 TIP3 OH2 OT -0.834000 15.9994 0 + 16411 W1 4641 TIP3 H1 HT 0.417000 1.0080 0 + 16412 W1 4641 TIP3 H2 HT 0.417000 1.0080 0 + 16413 W1 4642 TIP3 OH2 OT -0.834000 15.9994 0 + 16414 W1 4642 TIP3 H1 HT 0.417000 1.0080 0 + 16415 W1 4642 TIP3 H2 HT 0.417000 1.0080 0 + 16416 W1 4643 TIP3 OH2 OT -0.834000 15.9994 0 + 16417 W1 4643 TIP3 H1 HT 0.417000 1.0080 0 + 16418 W1 4643 TIP3 H2 HT 0.417000 1.0080 0 + 16419 W1 4644 TIP3 OH2 OT -0.834000 15.9994 0 + 16420 W1 4644 TIP3 H1 HT 0.417000 1.0080 0 + 16421 W1 4644 TIP3 H2 HT 0.417000 1.0080 0 + 16422 W1 4645 TIP3 OH2 OT -0.834000 15.9994 0 + 16423 W1 4645 TIP3 H1 HT 0.417000 1.0080 0 + 16424 W1 4645 TIP3 H2 HT 0.417000 1.0080 0 + 16425 W1 4646 TIP3 OH2 OT -0.834000 15.9994 0 + 16426 W1 4646 TIP3 H1 HT 0.417000 1.0080 0 + 16427 W1 4646 TIP3 H2 HT 0.417000 1.0080 0 + 16428 W1 4647 TIP3 OH2 OT -0.834000 15.9994 0 + 16429 W1 4647 TIP3 H1 HT 0.417000 1.0080 0 + 16430 W1 4647 TIP3 H2 HT 0.417000 1.0080 0 + 16431 W1 4648 TIP3 OH2 OT -0.834000 15.9994 0 + 16432 W1 4648 TIP3 H1 HT 0.417000 1.0080 0 + 16433 W1 4648 TIP3 H2 HT 0.417000 1.0080 0 + 16434 W1 4649 TIP3 OH2 OT -0.834000 15.9994 0 + 16435 W1 4649 TIP3 H1 HT 0.417000 1.0080 0 + 16436 W1 4649 TIP3 H2 HT 0.417000 1.0080 0 + 16437 W1 4650 TIP3 OH2 OT -0.834000 15.9994 0 + 16438 W1 4650 TIP3 H1 HT 0.417000 1.0080 0 + 16439 W1 4650 TIP3 H2 HT 0.417000 1.0080 0 + 16440 W1 4651 TIP3 OH2 OT -0.834000 15.9994 0 + 16441 W1 4651 TIP3 H1 HT 0.417000 1.0080 0 + 16442 W1 4651 TIP3 H2 HT 0.417000 1.0080 0 + 16443 W1 4652 TIP3 OH2 OT -0.834000 15.9994 0 + 16444 W1 4652 TIP3 H1 HT 0.417000 1.0080 0 + 16445 W1 4652 TIP3 H2 HT 0.417000 1.0080 0 + 16446 W1 4653 TIP3 OH2 OT -0.834000 15.9994 0 + 16447 W1 4653 TIP3 H1 HT 0.417000 1.0080 0 + 16448 W1 4653 TIP3 H2 HT 0.417000 1.0080 0 + 16449 W1 4654 TIP3 OH2 OT -0.834000 15.9994 0 + 16450 W1 4654 TIP3 H1 HT 0.417000 1.0080 0 + 16451 W1 4654 TIP3 H2 HT 0.417000 1.0080 0 + 16452 W1 4655 TIP3 OH2 OT -0.834000 15.9994 0 + 16453 W1 4655 TIP3 H1 HT 0.417000 1.0080 0 + 16454 W1 4655 TIP3 H2 HT 0.417000 1.0080 0 + 16455 W1 4656 TIP3 OH2 OT -0.834000 15.9994 0 + 16456 W1 4656 TIP3 H1 HT 0.417000 1.0080 0 + 16457 W1 4656 TIP3 H2 HT 0.417000 1.0080 0 + 16458 W1 4657 TIP3 OH2 OT -0.834000 15.9994 0 + 16459 W1 4657 TIP3 H1 HT 0.417000 1.0080 0 + 16460 W1 4657 TIP3 H2 HT 0.417000 1.0080 0 + 16461 W1 4658 TIP3 OH2 OT -0.834000 15.9994 0 + 16462 W1 4658 TIP3 H1 HT 0.417000 1.0080 0 + 16463 W1 4658 TIP3 H2 HT 0.417000 1.0080 0 + 16464 W1 4659 TIP3 OH2 OT -0.834000 15.9994 0 + 16465 W1 4659 TIP3 H1 HT 0.417000 1.0080 0 + 16466 W1 4659 TIP3 H2 HT 0.417000 1.0080 0 + 16467 W1 4660 TIP3 OH2 OT -0.834000 15.9994 0 + 16468 W1 4660 TIP3 H1 HT 0.417000 1.0080 0 + 16469 W1 4660 TIP3 H2 HT 0.417000 1.0080 0 + 16470 W1 4661 TIP3 OH2 OT -0.834000 15.9994 0 + 16471 W1 4661 TIP3 H1 HT 0.417000 1.0080 0 + 16472 W1 4661 TIP3 H2 HT 0.417000 1.0080 0 + 16473 W1 4662 TIP3 OH2 OT -0.834000 15.9994 0 + 16474 W1 4662 TIP3 H1 HT 0.417000 1.0080 0 + 16475 W1 4662 TIP3 H2 HT 0.417000 1.0080 0 + 16476 W1 4663 TIP3 OH2 OT -0.834000 15.9994 0 + 16477 W1 4663 TIP3 H1 HT 0.417000 1.0080 0 + 16478 W1 4663 TIP3 H2 HT 0.417000 1.0080 0 + 16479 W1 4664 TIP3 OH2 OT -0.834000 15.9994 0 + 16480 W1 4664 TIP3 H1 HT 0.417000 1.0080 0 + 16481 W1 4664 TIP3 H2 HT 0.417000 1.0080 0 + 16482 W1 4665 TIP3 OH2 OT -0.834000 15.9994 0 + 16483 W1 4665 TIP3 H1 HT 0.417000 1.0080 0 + 16484 W1 4665 TIP3 H2 HT 0.417000 1.0080 0 + 16485 W1 4666 TIP3 OH2 OT -0.834000 15.9994 0 + 16486 W1 4666 TIP3 H1 HT 0.417000 1.0080 0 + 16487 W1 4666 TIP3 H2 HT 0.417000 1.0080 0 + 16488 W1 4667 TIP3 OH2 OT -0.834000 15.9994 0 + 16489 W1 4667 TIP3 H1 HT 0.417000 1.0080 0 + 16490 W1 4667 TIP3 H2 HT 0.417000 1.0080 0 + 16491 W1 4668 TIP3 OH2 OT -0.834000 15.9994 0 + 16492 W1 4668 TIP3 H1 HT 0.417000 1.0080 0 + 16493 W1 4668 TIP3 H2 HT 0.417000 1.0080 0 + 16494 W1 4669 TIP3 OH2 OT -0.834000 15.9994 0 + 16495 W1 4669 TIP3 H1 HT 0.417000 1.0080 0 + 16496 W1 4669 TIP3 H2 HT 0.417000 1.0080 0 + 16497 W1 4670 TIP3 OH2 OT -0.834000 15.9994 0 + 16498 W1 4670 TIP3 H1 HT 0.417000 1.0080 0 + 16499 W1 4670 TIP3 H2 HT 0.417000 1.0080 0 + 16500 W1 4671 TIP3 OH2 OT -0.834000 15.9994 0 + 16501 W1 4671 TIP3 H1 HT 0.417000 1.0080 0 + 16502 W1 4671 TIP3 H2 HT 0.417000 1.0080 0 + 16503 W1 4672 TIP3 OH2 OT -0.834000 15.9994 0 + 16504 W1 4672 TIP3 H1 HT 0.417000 1.0080 0 + 16505 W1 4672 TIP3 H2 HT 0.417000 1.0080 0 + 16506 W1 4673 TIP3 OH2 OT -0.834000 15.9994 0 + 16507 W1 4673 TIP3 H1 HT 0.417000 1.0080 0 + 16508 W1 4673 TIP3 H2 HT 0.417000 1.0080 0 + 16509 W1 4674 TIP3 OH2 OT -0.834000 15.9994 0 + 16510 W1 4674 TIP3 H1 HT 0.417000 1.0080 0 + 16511 W1 4674 TIP3 H2 HT 0.417000 1.0080 0 + 16512 W1 4675 TIP3 OH2 OT -0.834000 15.9994 0 + 16513 W1 4675 TIP3 H1 HT 0.417000 1.0080 0 + 16514 W1 4675 TIP3 H2 HT 0.417000 1.0080 0 + 16515 W1 4676 TIP3 OH2 OT -0.834000 15.9994 0 + 16516 W1 4676 TIP3 H1 HT 0.417000 1.0080 0 + 16517 W1 4676 TIP3 H2 HT 0.417000 1.0080 0 + 16518 W1 4677 TIP3 OH2 OT -0.834000 15.9994 0 + 16519 W1 4677 TIP3 H1 HT 0.417000 1.0080 0 + 16520 W1 4677 TIP3 H2 HT 0.417000 1.0080 0 + 16521 W1 4678 TIP3 OH2 OT -0.834000 15.9994 0 + 16522 W1 4678 TIP3 H1 HT 0.417000 1.0080 0 + 16523 W1 4678 TIP3 H2 HT 0.417000 1.0080 0 + 16524 W1 4679 TIP3 OH2 OT -0.834000 15.9994 0 + 16525 W1 4679 TIP3 H1 HT 0.417000 1.0080 0 + 16526 W1 4679 TIP3 H2 HT 0.417000 1.0080 0 + 16527 W1 4680 TIP3 OH2 OT -0.834000 15.9994 0 + 16528 W1 4680 TIP3 H1 HT 0.417000 1.0080 0 + 16529 W1 4680 TIP3 H2 HT 0.417000 1.0080 0 + 16530 W1 4681 TIP3 OH2 OT -0.834000 15.9994 0 + 16531 W1 4681 TIP3 H1 HT 0.417000 1.0080 0 + 16532 W1 4681 TIP3 H2 HT 0.417000 1.0080 0 + 16533 W1 4682 TIP3 OH2 OT -0.834000 15.9994 0 + 16534 W1 4682 TIP3 H1 HT 0.417000 1.0080 0 + 16535 W1 4682 TIP3 H2 HT 0.417000 1.0080 0 + 16536 W1 4683 TIP3 OH2 OT -0.834000 15.9994 0 + 16537 W1 4683 TIP3 H1 HT 0.417000 1.0080 0 + 16538 W1 4683 TIP3 H2 HT 0.417000 1.0080 0 + 16539 W1 4684 TIP3 OH2 OT -0.834000 15.9994 0 + 16540 W1 4684 TIP3 H1 HT 0.417000 1.0080 0 + 16541 W1 4684 TIP3 H2 HT 0.417000 1.0080 0 + 16542 W1 4685 TIP3 OH2 OT -0.834000 15.9994 0 + 16543 W1 4685 TIP3 H1 HT 0.417000 1.0080 0 + 16544 W1 4685 TIP3 H2 HT 0.417000 1.0080 0 + 16545 W1 4686 TIP3 OH2 OT -0.834000 15.9994 0 + 16546 W1 4686 TIP3 H1 HT 0.417000 1.0080 0 + 16547 W1 4686 TIP3 H2 HT 0.417000 1.0080 0 + 16548 W1 4687 TIP3 OH2 OT -0.834000 15.9994 0 + 16549 W1 4687 TIP3 H1 HT 0.417000 1.0080 0 + 16550 W1 4687 TIP3 H2 HT 0.417000 1.0080 0 + 16551 W1 4688 TIP3 OH2 OT -0.834000 15.9994 0 + 16552 W1 4688 TIP3 H1 HT 0.417000 1.0080 0 + 16553 W1 4688 TIP3 H2 HT 0.417000 1.0080 0 + 16554 W1 4689 TIP3 OH2 OT -0.834000 15.9994 0 + 16555 W1 4689 TIP3 H1 HT 0.417000 1.0080 0 + 16556 W1 4689 TIP3 H2 HT 0.417000 1.0080 0 + 16557 W1 4690 TIP3 OH2 OT -0.834000 15.9994 0 + 16558 W1 4690 TIP3 H1 HT 0.417000 1.0080 0 + 16559 W1 4690 TIP3 H2 HT 0.417000 1.0080 0 + 16560 W1 4691 TIP3 OH2 OT -0.834000 15.9994 0 + 16561 W1 4691 TIP3 H1 HT 0.417000 1.0080 0 + 16562 W1 4691 TIP3 H2 HT 0.417000 1.0080 0 + 16563 W1 4692 TIP3 OH2 OT -0.834000 15.9994 0 + 16564 W1 4692 TIP3 H1 HT 0.417000 1.0080 0 + 16565 W1 4692 TIP3 H2 HT 0.417000 1.0080 0 + 16566 W1 4693 TIP3 OH2 OT -0.834000 15.9994 0 + 16567 W1 4693 TIP3 H1 HT 0.417000 1.0080 0 + 16568 W1 4693 TIP3 H2 HT 0.417000 1.0080 0 + 16569 W1 4694 TIP3 OH2 OT -0.834000 15.9994 0 + 16570 W1 4694 TIP3 H1 HT 0.417000 1.0080 0 + 16571 W1 4694 TIP3 H2 HT 0.417000 1.0080 0 + 16572 W1 4695 TIP3 OH2 OT -0.834000 15.9994 0 + 16573 W1 4695 TIP3 H1 HT 0.417000 1.0080 0 + 16574 W1 4695 TIP3 H2 HT 0.417000 1.0080 0 + 16575 W1 4696 TIP3 OH2 OT -0.834000 15.9994 0 + 16576 W1 4696 TIP3 H1 HT 0.417000 1.0080 0 + 16577 W1 4696 TIP3 H2 HT 0.417000 1.0080 0 + 16578 W1 4697 TIP3 OH2 OT -0.834000 15.9994 0 + 16579 W1 4697 TIP3 H1 HT 0.417000 1.0080 0 + 16580 W1 4697 TIP3 H2 HT 0.417000 1.0080 0 + 16581 W1 4698 TIP3 OH2 OT -0.834000 15.9994 0 + 16582 W1 4698 TIP3 H1 HT 0.417000 1.0080 0 + 16583 W1 4698 TIP3 H2 HT 0.417000 1.0080 0 + 16584 W1 4699 TIP3 OH2 OT -0.834000 15.9994 0 + 16585 W1 4699 TIP3 H1 HT 0.417000 1.0080 0 + 16586 W1 4699 TIP3 H2 HT 0.417000 1.0080 0 + 16587 W1 4700 TIP3 OH2 OT -0.834000 15.9994 0 + 16588 W1 4700 TIP3 H1 HT 0.417000 1.0080 0 + 16589 W1 4700 TIP3 H2 HT 0.417000 1.0080 0 + 16590 W1 4701 TIP3 OH2 OT -0.834000 15.9994 0 + 16591 W1 4701 TIP3 H1 HT 0.417000 1.0080 0 + 16592 W1 4701 TIP3 H2 HT 0.417000 1.0080 0 + 16593 W1 4702 TIP3 OH2 OT -0.834000 15.9994 0 + 16594 W1 4702 TIP3 H1 HT 0.417000 1.0080 0 + 16595 W1 4702 TIP3 H2 HT 0.417000 1.0080 0 + 16596 W1 4703 TIP3 OH2 OT -0.834000 15.9994 0 + 16597 W1 4703 TIP3 H1 HT 0.417000 1.0080 0 + 16598 W1 4703 TIP3 H2 HT 0.417000 1.0080 0 + 16599 W1 4704 TIP3 OH2 OT -0.834000 15.9994 0 + 16600 W1 4704 TIP3 H1 HT 0.417000 1.0080 0 + 16601 W1 4704 TIP3 H2 HT 0.417000 1.0080 0 + 16602 W1 4705 TIP3 OH2 OT -0.834000 15.9994 0 + 16603 W1 4705 TIP3 H1 HT 0.417000 1.0080 0 + 16604 W1 4705 TIP3 H2 HT 0.417000 1.0080 0 + 16605 W1 4706 TIP3 OH2 OT -0.834000 15.9994 0 + 16606 W1 4706 TIP3 H1 HT 0.417000 1.0080 0 + 16607 W1 4706 TIP3 H2 HT 0.417000 1.0080 0 + 16608 W1 4707 TIP3 OH2 OT -0.834000 15.9994 0 + 16609 W1 4707 TIP3 H1 HT 0.417000 1.0080 0 + 16610 W1 4707 TIP3 H2 HT 0.417000 1.0080 0 + 16611 W1 4708 TIP3 OH2 OT -0.834000 15.9994 0 + 16612 W1 4708 TIP3 H1 HT 0.417000 1.0080 0 + 16613 W1 4708 TIP3 H2 HT 0.417000 1.0080 0 + 16614 W1 4709 TIP3 OH2 OT -0.834000 15.9994 0 + 16615 W1 4709 TIP3 H1 HT 0.417000 1.0080 0 + 16616 W1 4709 TIP3 H2 HT 0.417000 1.0080 0 + 16617 W1 4710 TIP3 OH2 OT -0.834000 15.9994 0 + 16618 W1 4710 TIP3 H1 HT 0.417000 1.0080 0 + 16619 W1 4710 TIP3 H2 HT 0.417000 1.0080 0 + 16620 W1 4711 TIP3 OH2 OT -0.834000 15.9994 0 + 16621 W1 4711 TIP3 H1 HT 0.417000 1.0080 0 + 16622 W1 4711 TIP3 H2 HT 0.417000 1.0080 0 + 16623 W1 4712 TIP3 OH2 OT -0.834000 15.9994 0 + 16624 W1 4712 TIP3 H1 HT 0.417000 1.0080 0 + 16625 W1 4712 TIP3 H2 HT 0.417000 1.0080 0 + 16626 W1 4713 TIP3 OH2 OT -0.834000 15.9994 0 + 16627 W1 4713 TIP3 H1 HT 0.417000 1.0080 0 + 16628 W1 4713 TIP3 H2 HT 0.417000 1.0080 0 + 16629 W1 4714 TIP3 OH2 OT -0.834000 15.9994 0 + 16630 W1 4714 TIP3 H1 HT 0.417000 1.0080 0 + 16631 W1 4714 TIP3 H2 HT 0.417000 1.0080 0 + 16632 W1 4715 TIP3 OH2 OT -0.834000 15.9994 0 + 16633 W1 4715 TIP3 H1 HT 0.417000 1.0080 0 + 16634 W1 4715 TIP3 H2 HT 0.417000 1.0080 0 + 16635 W1 4716 TIP3 OH2 OT -0.834000 15.9994 0 + 16636 W1 4716 TIP3 H1 HT 0.417000 1.0080 0 + 16637 W1 4716 TIP3 H2 HT 0.417000 1.0080 0 + 16638 W1 4717 TIP3 OH2 OT -0.834000 15.9994 0 + 16639 W1 4717 TIP3 H1 HT 0.417000 1.0080 0 + 16640 W1 4717 TIP3 H2 HT 0.417000 1.0080 0 + 16641 W1 4718 TIP3 OH2 OT -0.834000 15.9994 0 + 16642 W1 4718 TIP3 H1 HT 0.417000 1.0080 0 + 16643 W1 4718 TIP3 H2 HT 0.417000 1.0080 0 + 16644 W1 4719 TIP3 OH2 OT -0.834000 15.9994 0 + 16645 W1 4719 TIP3 H1 HT 0.417000 1.0080 0 + 16646 W1 4719 TIP3 H2 HT 0.417000 1.0080 0 + 16647 W1 4720 TIP3 OH2 OT -0.834000 15.9994 0 + 16648 W1 4720 TIP3 H1 HT 0.417000 1.0080 0 + 16649 W1 4720 TIP3 H2 HT 0.417000 1.0080 0 + 16650 W1 4721 TIP3 OH2 OT -0.834000 15.9994 0 + 16651 W1 4721 TIP3 H1 HT 0.417000 1.0080 0 + 16652 W1 4721 TIP3 H2 HT 0.417000 1.0080 0 + 16653 W1 4722 TIP3 OH2 OT -0.834000 15.9994 0 + 16654 W1 4722 TIP3 H1 HT 0.417000 1.0080 0 + 16655 W1 4722 TIP3 H2 HT 0.417000 1.0080 0 + 16656 W1 4723 TIP3 OH2 OT -0.834000 15.9994 0 + 16657 W1 4723 TIP3 H1 HT 0.417000 1.0080 0 + 16658 W1 4723 TIP3 H2 HT 0.417000 1.0080 0 + 16659 W1 4724 TIP3 OH2 OT -0.834000 15.9994 0 + 16660 W1 4724 TIP3 H1 HT 0.417000 1.0080 0 + 16661 W1 4724 TIP3 H2 HT 0.417000 1.0080 0 + 16662 W1 4725 TIP3 OH2 OT -0.834000 15.9994 0 + 16663 W1 4725 TIP3 H1 HT 0.417000 1.0080 0 + 16664 W1 4725 TIP3 H2 HT 0.417000 1.0080 0 + 16665 W1 4726 TIP3 OH2 OT -0.834000 15.9994 0 + 16666 W1 4726 TIP3 H1 HT 0.417000 1.0080 0 + 16667 W1 4726 TIP3 H2 HT 0.417000 1.0080 0 + 16668 W1 4727 TIP3 OH2 OT -0.834000 15.9994 0 + 16669 W1 4727 TIP3 H1 HT 0.417000 1.0080 0 + 16670 W1 4727 TIP3 H2 HT 0.417000 1.0080 0 + 16671 W1 4728 TIP3 OH2 OT -0.834000 15.9994 0 + 16672 W1 4728 TIP3 H1 HT 0.417000 1.0080 0 + 16673 W1 4728 TIP3 H2 HT 0.417000 1.0080 0 + 16674 W1 4729 TIP3 OH2 OT -0.834000 15.9994 0 + 16675 W1 4729 TIP3 H1 HT 0.417000 1.0080 0 + 16676 W1 4729 TIP3 H2 HT 0.417000 1.0080 0 + 16677 W1 4730 TIP3 OH2 OT -0.834000 15.9994 0 + 16678 W1 4730 TIP3 H1 HT 0.417000 1.0080 0 + 16679 W1 4730 TIP3 H2 HT 0.417000 1.0080 0 + 16680 W1 4731 TIP3 OH2 OT -0.834000 15.9994 0 + 16681 W1 4731 TIP3 H1 HT 0.417000 1.0080 0 + 16682 W1 4731 TIP3 H2 HT 0.417000 1.0080 0 + 16683 W1 4732 TIP3 OH2 OT -0.834000 15.9994 0 + 16684 W1 4732 TIP3 H1 HT 0.417000 1.0080 0 + 16685 W1 4732 TIP3 H2 HT 0.417000 1.0080 0 + 16686 W1 4733 TIP3 OH2 OT -0.834000 15.9994 0 + 16687 W1 4733 TIP3 H1 HT 0.417000 1.0080 0 + 16688 W1 4733 TIP3 H2 HT 0.417000 1.0080 0 + 16689 W1 4734 TIP3 OH2 OT -0.834000 15.9994 0 + 16690 W1 4734 TIP3 H1 HT 0.417000 1.0080 0 + 16691 W1 4734 TIP3 H2 HT 0.417000 1.0080 0 + 16692 W1 4735 TIP3 OH2 OT -0.834000 15.9994 0 + 16693 W1 4735 TIP3 H1 HT 0.417000 1.0080 0 + 16694 W1 4735 TIP3 H2 HT 0.417000 1.0080 0 + 16695 W1 4736 TIP3 OH2 OT -0.834000 15.9994 0 + 16696 W1 4736 TIP3 H1 HT 0.417000 1.0080 0 + 16697 W1 4736 TIP3 H2 HT 0.417000 1.0080 0 + 16698 W1 4737 TIP3 OH2 OT -0.834000 15.9994 0 + 16699 W1 4737 TIP3 H1 HT 0.417000 1.0080 0 + 16700 W1 4737 TIP3 H2 HT 0.417000 1.0080 0 + 16701 W1 4738 TIP3 OH2 OT -0.834000 15.9994 0 + 16702 W1 4738 TIP3 H1 HT 0.417000 1.0080 0 + 16703 W1 4738 TIP3 H2 HT 0.417000 1.0080 0 + 16704 W1 4739 TIP3 OH2 OT -0.834000 15.9994 0 + 16705 W1 4739 TIP3 H1 HT 0.417000 1.0080 0 + 16706 W1 4739 TIP3 H2 HT 0.417000 1.0080 0 + 16707 W1 4740 TIP3 OH2 OT -0.834000 15.9994 0 + 16708 W1 4740 TIP3 H1 HT 0.417000 1.0080 0 + 16709 W1 4740 TIP3 H2 HT 0.417000 1.0080 0 + 16710 W1 4741 TIP3 OH2 OT -0.834000 15.9994 0 + 16711 W1 4741 TIP3 H1 HT 0.417000 1.0080 0 + 16712 W1 4741 TIP3 H2 HT 0.417000 1.0080 0 + 16713 W1 4742 TIP3 OH2 OT -0.834000 15.9994 0 + 16714 W1 4742 TIP3 H1 HT 0.417000 1.0080 0 + 16715 W1 4742 TIP3 H2 HT 0.417000 1.0080 0 + 16716 W1 4743 TIP3 OH2 OT -0.834000 15.9994 0 + 16717 W1 4743 TIP3 H1 HT 0.417000 1.0080 0 + 16718 W1 4743 TIP3 H2 HT 0.417000 1.0080 0 + 16719 W1 4744 TIP3 OH2 OT -0.834000 15.9994 0 + 16720 W1 4744 TIP3 H1 HT 0.417000 1.0080 0 + 16721 W1 4744 TIP3 H2 HT 0.417000 1.0080 0 + 16722 W1 4745 TIP3 OH2 OT -0.834000 15.9994 0 + 16723 W1 4745 TIP3 H1 HT 0.417000 1.0080 0 + 16724 W1 4745 TIP3 H2 HT 0.417000 1.0080 0 + 16725 W1 4746 TIP3 OH2 OT -0.834000 15.9994 0 + 16726 W1 4746 TIP3 H1 HT 0.417000 1.0080 0 + 16727 W1 4746 TIP3 H2 HT 0.417000 1.0080 0 + 16728 W1 4747 TIP3 OH2 OT -0.834000 15.9994 0 + 16729 W1 4747 TIP3 H1 HT 0.417000 1.0080 0 + 16730 W1 4747 TIP3 H2 HT 0.417000 1.0080 0 + 16731 W1 4748 TIP3 OH2 OT -0.834000 15.9994 0 + 16732 W1 4748 TIP3 H1 HT 0.417000 1.0080 0 + 16733 W1 4748 TIP3 H2 HT 0.417000 1.0080 0 + 16734 W1 4749 TIP3 OH2 OT -0.834000 15.9994 0 + 16735 W1 4749 TIP3 H1 HT 0.417000 1.0080 0 + 16736 W1 4749 TIP3 H2 HT 0.417000 1.0080 0 + 16737 W1 4750 TIP3 OH2 OT -0.834000 15.9994 0 + 16738 W1 4750 TIP3 H1 HT 0.417000 1.0080 0 + 16739 W1 4750 TIP3 H2 HT 0.417000 1.0080 0 + 16740 W1 4751 TIP3 OH2 OT -0.834000 15.9994 0 + 16741 W1 4751 TIP3 H1 HT 0.417000 1.0080 0 + 16742 W1 4751 TIP3 H2 HT 0.417000 1.0080 0 + 16743 W1 4752 TIP3 OH2 OT -0.834000 15.9994 0 + 16744 W1 4752 TIP3 H1 HT 0.417000 1.0080 0 + 16745 W1 4752 TIP3 H2 HT 0.417000 1.0080 0 + 16746 W1 4753 TIP3 OH2 OT -0.834000 15.9994 0 + 16747 W1 4753 TIP3 H1 HT 0.417000 1.0080 0 + 16748 W1 4753 TIP3 H2 HT 0.417000 1.0080 0 + 16749 W1 4754 TIP3 OH2 OT -0.834000 15.9994 0 + 16750 W1 4754 TIP3 H1 HT 0.417000 1.0080 0 + 16751 W1 4754 TIP3 H2 HT 0.417000 1.0080 0 + 16752 W1 4755 TIP3 OH2 OT -0.834000 15.9994 0 + 16753 W1 4755 TIP3 H1 HT 0.417000 1.0080 0 + 16754 W1 4755 TIP3 H2 HT 0.417000 1.0080 0 + 16755 W1 4756 TIP3 OH2 OT -0.834000 15.9994 0 + 16756 W1 4756 TIP3 H1 HT 0.417000 1.0080 0 + 16757 W1 4756 TIP3 H2 HT 0.417000 1.0080 0 + 16758 W1 4757 TIP3 OH2 OT -0.834000 15.9994 0 + 16759 W1 4757 TIP3 H1 HT 0.417000 1.0080 0 + 16760 W1 4757 TIP3 H2 HT 0.417000 1.0080 0 + 16761 W1 4758 TIP3 OH2 OT -0.834000 15.9994 0 + 16762 W1 4758 TIP3 H1 HT 0.417000 1.0080 0 + 16763 W1 4758 TIP3 H2 HT 0.417000 1.0080 0 + 16764 W1 4759 TIP3 OH2 OT -0.834000 15.9994 0 + 16765 W1 4759 TIP3 H1 HT 0.417000 1.0080 0 + 16766 W1 4759 TIP3 H2 HT 0.417000 1.0080 0 + 16767 W1 4760 TIP3 OH2 OT -0.834000 15.9994 0 + 16768 W1 4760 TIP3 H1 HT 0.417000 1.0080 0 + 16769 W1 4760 TIP3 H2 HT 0.417000 1.0080 0 + 16770 W1 4761 TIP3 OH2 OT -0.834000 15.9994 0 + 16771 W1 4761 TIP3 H1 HT 0.417000 1.0080 0 + 16772 W1 4761 TIP3 H2 HT 0.417000 1.0080 0 + 16773 W1 4762 TIP3 OH2 OT -0.834000 15.9994 0 + 16774 W1 4762 TIP3 H1 HT 0.417000 1.0080 0 + 16775 W1 4762 TIP3 H2 HT 0.417000 1.0080 0 + 16776 W1 4763 TIP3 OH2 OT -0.834000 15.9994 0 + 16777 W1 4763 TIP3 H1 HT 0.417000 1.0080 0 + 16778 W1 4763 TIP3 H2 HT 0.417000 1.0080 0 + 16779 W1 4764 TIP3 OH2 OT -0.834000 15.9994 0 + 16780 W1 4764 TIP3 H1 HT 0.417000 1.0080 0 + 16781 W1 4764 TIP3 H2 HT 0.417000 1.0080 0 + 16782 W1 4765 TIP3 OH2 OT -0.834000 15.9994 0 + 16783 W1 4765 TIP3 H1 HT 0.417000 1.0080 0 + 16784 W1 4765 TIP3 H2 HT 0.417000 1.0080 0 + 16785 W1 4766 TIP3 OH2 OT -0.834000 15.9994 0 + 16786 W1 4766 TIP3 H1 HT 0.417000 1.0080 0 + 16787 W1 4766 TIP3 H2 HT 0.417000 1.0080 0 + 16788 W1 4767 TIP3 OH2 OT -0.834000 15.9994 0 + 16789 W1 4767 TIP3 H1 HT 0.417000 1.0080 0 + 16790 W1 4767 TIP3 H2 HT 0.417000 1.0080 0 + 16791 W1 4768 TIP3 OH2 OT -0.834000 15.9994 0 + 16792 W1 4768 TIP3 H1 HT 0.417000 1.0080 0 + 16793 W1 4768 TIP3 H2 HT 0.417000 1.0080 0 + 16794 W1 4769 TIP3 OH2 OT -0.834000 15.9994 0 + 16795 W1 4769 TIP3 H1 HT 0.417000 1.0080 0 + 16796 W1 4769 TIP3 H2 HT 0.417000 1.0080 0 + 16797 W1 4770 TIP3 OH2 OT -0.834000 15.9994 0 + 16798 W1 4770 TIP3 H1 HT 0.417000 1.0080 0 + 16799 W1 4770 TIP3 H2 HT 0.417000 1.0080 0 + 16800 W1 4771 TIP3 OH2 OT -0.834000 15.9994 0 + 16801 W1 4771 TIP3 H1 HT 0.417000 1.0080 0 + 16802 W1 4771 TIP3 H2 HT 0.417000 1.0080 0 + 16803 W1 4772 TIP3 OH2 OT -0.834000 15.9994 0 + 16804 W1 4772 TIP3 H1 HT 0.417000 1.0080 0 + 16805 W1 4772 TIP3 H2 HT 0.417000 1.0080 0 + 16806 W1 4773 TIP3 OH2 OT -0.834000 15.9994 0 + 16807 W1 4773 TIP3 H1 HT 0.417000 1.0080 0 + 16808 W1 4773 TIP3 H2 HT 0.417000 1.0080 0 + 16809 W1 4774 TIP3 OH2 OT -0.834000 15.9994 0 + 16810 W1 4774 TIP3 H1 HT 0.417000 1.0080 0 + 16811 W1 4774 TIP3 H2 HT 0.417000 1.0080 0 + 16812 W1 4775 TIP3 OH2 OT -0.834000 15.9994 0 + 16813 W1 4775 TIP3 H1 HT 0.417000 1.0080 0 + 16814 W1 4775 TIP3 H2 HT 0.417000 1.0080 0 + 16815 W1 4776 TIP3 OH2 OT -0.834000 15.9994 0 + 16816 W1 4776 TIP3 H1 HT 0.417000 1.0080 0 + 16817 W1 4776 TIP3 H2 HT 0.417000 1.0080 0 + 16818 W1 4777 TIP3 OH2 OT -0.834000 15.9994 0 + 16819 W1 4777 TIP3 H1 HT 0.417000 1.0080 0 + 16820 W1 4777 TIP3 H2 HT 0.417000 1.0080 0 + 16821 W1 4778 TIP3 OH2 OT -0.834000 15.9994 0 + 16822 W1 4778 TIP3 H1 HT 0.417000 1.0080 0 + 16823 W1 4778 TIP3 H2 HT 0.417000 1.0080 0 + 16824 W1 4779 TIP3 OH2 OT -0.834000 15.9994 0 + 16825 W1 4779 TIP3 H1 HT 0.417000 1.0080 0 + 16826 W1 4779 TIP3 H2 HT 0.417000 1.0080 0 + 16827 W1 4780 TIP3 OH2 OT -0.834000 15.9994 0 + 16828 W1 4780 TIP3 H1 HT 0.417000 1.0080 0 + 16829 W1 4780 TIP3 H2 HT 0.417000 1.0080 0 + 16830 W1 4781 TIP3 OH2 OT -0.834000 15.9994 0 + 16831 W1 4781 TIP3 H1 HT 0.417000 1.0080 0 + 16832 W1 4781 TIP3 H2 HT 0.417000 1.0080 0 + 16833 W1 4782 TIP3 OH2 OT -0.834000 15.9994 0 + 16834 W1 4782 TIP3 H1 HT 0.417000 1.0080 0 + 16835 W1 4782 TIP3 H2 HT 0.417000 1.0080 0 + 16836 W1 4783 TIP3 OH2 OT -0.834000 15.9994 0 + 16837 W1 4783 TIP3 H1 HT 0.417000 1.0080 0 + 16838 W1 4783 TIP3 H2 HT 0.417000 1.0080 0 + 16839 W1 4784 TIP3 OH2 OT -0.834000 15.9994 0 + 16840 W1 4784 TIP3 H1 HT 0.417000 1.0080 0 + 16841 W1 4784 TIP3 H2 HT 0.417000 1.0080 0 + 16842 W1 4785 TIP3 OH2 OT -0.834000 15.9994 0 + 16843 W1 4785 TIP3 H1 HT 0.417000 1.0080 0 + 16844 W1 4785 TIP3 H2 HT 0.417000 1.0080 0 + 16845 W1 4786 TIP3 OH2 OT -0.834000 15.9994 0 + 16846 W1 4786 TIP3 H1 HT 0.417000 1.0080 0 + 16847 W1 4786 TIP3 H2 HT 0.417000 1.0080 0 + 16848 W1 4787 TIP3 OH2 OT -0.834000 15.9994 0 + 16849 W1 4787 TIP3 H1 HT 0.417000 1.0080 0 + 16850 W1 4787 TIP3 H2 HT 0.417000 1.0080 0 + 16851 W1 4788 TIP3 OH2 OT -0.834000 15.9994 0 + 16852 W1 4788 TIP3 H1 HT 0.417000 1.0080 0 + 16853 W1 4788 TIP3 H2 HT 0.417000 1.0080 0 + 16854 W1 4789 TIP3 OH2 OT -0.834000 15.9994 0 + 16855 W1 4789 TIP3 H1 HT 0.417000 1.0080 0 + 16856 W1 4789 TIP3 H2 HT 0.417000 1.0080 0 + 16857 W1 4790 TIP3 OH2 OT -0.834000 15.9994 0 + 16858 W1 4790 TIP3 H1 HT 0.417000 1.0080 0 + 16859 W1 4790 TIP3 H2 HT 0.417000 1.0080 0 + 16860 W1 4791 TIP3 OH2 OT -0.834000 15.9994 0 + 16861 W1 4791 TIP3 H1 HT 0.417000 1.0080 0 + 16862 W1 4791 TIP3 H2 HT 0.417000 1.0080 0 + 16863 W1 4792 TIP3 OH2 OT -0.834000 15.9994 0 + 16864 W1 4792 TIP3 H1 HT 0.417000 1.0080 0 + 16865 W1 4792 TIP3 H2 HT 0.417000 1.0080 0 + 16866 W1 4793 TIP3 OH2 OT -0.834000 15.9994 0 + 16867 W1 4793 TIP3 H1 HT 0.417000 1.0080 0 + 16868 W1 4793 TIP3 H2 HT 0.417000 1.0080 0 + 16869 W1 4794 TIP3 OH2 OT -0.834000 15.9994 0 + 16870 W1 4794 TIP3 H1 HT 0.417000 1.0080 0 + 16871 W1 4794 TIP3 H2 HT 0.417000 1.0080 0 + 16872 W1 4795 TIP3 OH2 OT -0.834000 15.9994 0 + 16873 W1 4795 TIP3 H1 HT 0.417000 1.0080 0 + 16874 W1 4795 TIP3 H2 HT 0.417000 1.0080 0 + 16875 W1 4796 TIP3 OH2 OT -0.834000 15.9994 0 + 16876 W1 4796 TIP3 H1 HT 0.417000 1.0080 0 + 16877 W1 4796 TIP3 H2 HT 0.417000 1.0080 0 + 16878 W1 4797 TIP3 OH2 OT -0.834000 15.9994 0 + 16879 W1 4797 TIP3 H1 HT 0.417000 1.0080 0 + 16880 W1 4797 TIP3 H2 HT 0.417000 1.0080 0 + 16881 W1 4798 TIP3 OH2 OT -0.834000 15.9994 0 + 16882 W1 4798 TIP3 H1 HT 0.417000 1.0080 0 + 16883 W1 4798 TIP3 H2 HT 0.417000 1.0080 0 + 16884 W1 4799 TIP3 OH2 OT -0.834000 15.9994 0 + 16885 W1 4799 TIP3 H1 HT 0.417000 1.0080 0 + 16886 W1 4799 TIP3 H2 HT 0.417000 1.0080 0 + 16887 W1 4800 TIP3 OH2 OT -0.834000 15.9994 0 + 16888 W1 4800 TIP3 H1 HT 0.417000 1.0080 0 + 16889 W1 4800 TIP3 H2 HT 0.417000 1.0080 0 + 16890 W1 4801 TIP3 OH2 OT -0.834000 15.9994 0 + 16891 W1 4801 TIP3 H1 HT 0.417000 1.0080 0 + 16892 W1 4801 TIP3 H2 HT 0.417000 1.0080 0 + 16893 W1 4802 TIP3 OH2 OT -0.834000 15.9994 0 + 16894 W1 4802 TIP3 H1 HT 0.417000 1.0080 0 + 16895 W1 4802 TIP3 H2 HT 0.417000 1.0080 0 + 16896 W1 4803 TIP3 OH2 OT -0.834000 15.9994 0 + 16897 W1 4803 TIP3 H1 HT 0.417000 1.0080 0 + 16898 W1 4803 TIP3 H2 HT 0.417000 1.0080 0 + 16899 W1 4804 TIP3 OH2 OT -0.834000 15.9994 0 + 16900 W1 4804 TIP3 H1 HT 0.417000 1.0080 0 + 16901 W1 4804 TIP3 H2 HT 0.417000 1.0080 0 + 16902 W1 4805 TIP3 OH2 OT -0.834000 15.9994 0 + 16903 W1 4805 TIP3 H1 HT 0.417000 1.0080 0 + 16904 W1 4805 TIP3 H2 HT 0.417000 1.0080 0 + 16905 W1 4806 TIP3 OH2 OT -0.834000 15.9994 0 + 16906 W1 4806 TIP3 H1 HT 0.417000 1.0080 0 + 16907 W1 4806 TIP3 H2 HT 0.417000 1.0080 0 + 16908 W1 4807 TIP3 OH2 OT -0.834000 15.9994 0 + 16909 W1 4807 TIP3 H1 HT 0.417000 1.0080 0 + 16910 W1 4807 TIP3 H2 HT 0.417000 1.0080 0 + 16911 W1 4808 TIP3 OH2 OT -0.834000 15.9994 0 + 16912 W1 4808 TIP3 H1 HT 0.417000 1.0080 0 + 16913 W1 4808 TIP3 H2 HT 0.417000 1.0080 0 + 16914 W1 4809 TIP3 OH2 OT -0.834000 15.9994 0 + 16915 W1 4809 TIP3 H1 HT 0.417000 1.0080 0 + 16916 W1 4809 TIP3 H2 HT 0.417000 1.0080 0 + 16917 W1 4810 TIP3 OH2 OT -0.834000 15.9994 0 + 16918 W1 4810 TIP3 H1 HT 0.417000 1.0080 0 + 16919 W1 4810 TIP3 H2 HT 0.417000 1.0080 0 + 16920 W1 4811 TIP3 OH2 OT -0.834000 15.9994 0 + 16921 W1 4811 TIP3 H1 HT 0.417000 1.0080 0 + 16922 W1 4811 TIP3 H2 HT 0.417000 1.0080 0 + 16923 W1 4812 TIP3 OH2 OT -0.834000 15.9994 0 + 16924 W1 4812 TIP3 H1 HT 0.417000 1.0080 0 + 16925 W1 4812 TIP3 H2 HT 0.417000 1.0080 0 + 16926 W1 4813 TIP3 OH2 OT -0.834000 15.9994 0 + 16927 W1 4813 TIP3 H1 HT 0.417000 1.0080 0 + 16928 W1 4813 TIP3 H2 HT 0.417000 1.0080 0 + 16929 W1 4814 TIP3 OH2 OT -0.834000 15.9994 0 + 16930 W1 4814 TIP3 H1 HT 0.417000 1.0080 0 + 16931 W1 4814 TIP3 H2 HT 0.417000 1.0080 0 + 16932 W1 4815 TIP3 OH2 OT -0.834000 15.9994 0 + 16933 W1 4815 TIP3 H1 HT 0.417000 1.0080 0 + 16934 W1 4815 TIP3 H2 HT 0.417000 1.0080 0 + 16935 W1 4816 TIP3 OH2 OT -0.834000 15.9994 0 + 16936 W1 4816 TIP3 H1 HT 0.417000 1.0080 0 + 16937 W1 4816 TIP3 H2 HT 0.417000 1.0080 0 + 16938 W1 4817 TIP3 OH2 OT -0.834000 15.9994 0 + 16939 W1 4817 TIP3 H1 HT 0.417000 1.0080 0 + 16940 W1 4817 TIP3 H2 HT 0.417000 1.0080 0 + 16941 W1 4818 TIP3 OH2 OT -0.834000 15.9994 0 + 16942 W1 4818 TIP3 H1 HT 0.417000 1.0080 0 + 16943 W1 4818 TIP3 H2 HT 0.417000 1.0080 0 + 16944 W1 4819 TIP3 OH2 OT -0.834000 15.9994 0 + 16945 W1 4819 TIP3 H1 HT 0.417000 1.0080 0 + 16946 W1 4819 TIP3 H2 HT 0.417000 1.0080 0 + 16947 W1 4820 TIP3 OH2 OT -0.834000 15.9994 0 + 16948 W1 4820 TIP3 H1 HT 0.417000 1.0080 0 + 16949 W1 4820 TIP3 H2 HT 0.417000 1.0080 0 + 16950 W1 4821 TIP3 OH2 OT -0.834000 15.9994 0 + 16951 W1 4821 TIP3 H1 HT 0.417000 1.0080 0 + 16952 W1 4821 TIP3 H2 HT 0.417000 1.0080 0 + 16953 W1 4822 TIP3 OH2 OT -0.834000 15.9994 0 + 16954 W1 4822 TIP3 H1 HT 0.417000 1.0080 0 + 16955 W1 4822 TIP3 H2 HT 0.417000 1.0080 0 + 16956 W1 4823 TIP3 OH2 OT -0.834000 15.9994 0 + 16957 W1 4823 TIP3 H1 HT 0.417000 1.0080 0 + 16958 W1 4823 TIP3 H2 HT 0.417000 1.0080 0 + 16959 W1 4824 TIP3 OH2 OT -0.834000 15.9994 0 + 16960 W1 4824 TIP3 H1 HT 0.417000 1.0080 0 + 16961 W1 4824 TIP3 H2 HT 0.417000 1.0080 0 + 16962 W1 4825 TIP3 OH2 OT -0.834000 15.9994 0 + 16963 W1 4825 TIP3 H1 HT 0.417000 1.0080 0 + 16964 W1 4825 TIP3 H2 HT 0.417000 1.0080 0 + 16965 W1 4826 TIP3 OH2 OT -0.834000 15.9994 0 + 16966 W1 4826 TIP3 H1 HT 0.417000 1.0080 0 + 16967 W1 4826 TIP3 H2 HT 0.417000 1.0080 0 + 16968 W1 4827 TIP3 OH2 OT -0.834000 15.9994 0 + 16969 W1 4827 TIP3 H1 HT 0.417000 1.0080 0 + 16970 W1 4827 TIP3 H2 HT 0.417000 1.0080 0 + 16971 W1 4828 TIP3 OH2 OT -0.834000 15.9994 0 + 16972 W1 4828 TIP3 H1 HT 0.417000 1.0080 0 + 16973 W1 4828 TIP3 H2 HT 0.417000 1.0080 0 + 16974 W1 4829 TIP3 OH2 OT -0.834000 15.9994 0 + 16975 W1 4829 TIP3 H1 HT 0.417000 1.0080 0 + 16976 W1 4829 TIP3 H2 HT 0.417000 1.0080 0 + 16977 W1 4830 TIP3 OH2 OT -0.834000 15.9994 0 + 16978 W1 4830 TIP3 H1 HT 0.417000 1.0080 0 + 16979 W1 4830 TIP3 H2 HT 0.417000 1.0080 0 + 16980 W1 4831 TIP3 OH2 OT -0.834000 15.9994 0 + 16981 W1 4831 TIP3 H1 HT 0.417000 1.0080 0 + 16982 W1 4831 TIP3 H2 HT 0.417000 1.0080 0 + 16983 W1 4832 TIP3 OH2 OT -0.834000 15.9994 0 + 16984 W1 4832 TIP3 H1 HT 0.417000 1.0080 0 + 16985 W1 4832 TIP3 H2 HT 0.417000 1.0080 0 + 16986 W1 4833 TIP3 OH2 OT -0.834000 15.9994 0 + 16987 W1 4833 TIP3 H1 HT 0.417000 1.0080 0 + 16988 W1 4833 TIP3 H2 HT 0.417000 1.0080 0 + 16989 W1 4834 TIP3 OH2 OT -0.834000 15.9994 0 + 16990 W1 4834 TIP3 H1 HT 0.417000 1.0080 0 + 16991 W1 4834 TIP3 H2 HT 0.417000 1.0080 0 + 16992 W1 4835 TIP3 OH2 OT -0.834000 15.9994 0 + 16993 W1 4835 TIP3 H1 HT 0.417000 1.0080 0 + 16994 W1 4835 TIP3 H2 HT 0.417000 1.0080 0 + 16995 W1 4836 TIP3 OH2 OT -0.834000 15.9994 0 + 16996 W1 4836 TIP3 H1 HT 0.417000 1.0080 0 + 16997 W1 4836 TIP3 H2 HT 0.417000 1.0080 0 + 16998 W1 4837 TIP3 OH2 OT -0.834000 15.9994 0 + 16999 W1 4837 TIP3 H1 HT 0.417000 1.0080 0 + 17000 W1 4837 TIP3 H2 HT 0.417000 1.0080 0 + 17001 W1 4838 TIP3 OH2 OT -0.834000 15.9994 0 + 17002 W1 4838 TIP3 H1 HT 0.417000 1.0080 0 + 17003 W1 4838 TIP3 H2 HT 0.417000 1.0080 0 + 17004 W1 4839 TIP3 OH2 OT -0.834000 15.9994 0 + 17005 W1 4839 TIP3 H1 HT 0.417000 1.0080 0 + 17006 W1 4839 TIP3 H2 HT 0.417000 1.0080 0 + 17007 W1 4840 TIP3 OH2 OT -0.834000 15.9994 0 + 17008 W1 4840 TIP3 H1 HT 0.417000 1.0080 0 + 17009 W1 4840 TIP3 H2 HT 0.417000 1.0080 0 + 17010 W1 4841 TIP3 OH2 OT -0.834000 15.9994 0 + 17011 W1 4841 TIP3 H1 HT 0.417000 1.0080 0 + 17012 W1 4841 TIP3 H2 HT 0.417000 1.0080 0 + 17013 W1 4842 TIP3 OH2 OT -0.834000 15.9994 0 + 17014 W1 4842 TIP3 H1 HT 0.417000 1.0080 0 + 17015 W1 4842 TIP3 H2 HT 0.417000 1.0080 0 + 17016 W1 4843 TIP3 OH2 OT -0.834000 15.9994 0 + 17017 W1 4843 TIP3 H1 HT 0.417000 1.0080 0 + 17018 W1 4843 TIP3 H2 HT 0.417000 1.0080 0 + 17019 W1 4844 TIP3 OH2 OT -0.834000 15.9994 0 + 17020 W1 4844 TIP3 H1 HT 0.417000 1.0080 0 + 17021 W1 4844 TIP3 H2 HT 0.417000 1.0080 0 + 17022 W1 4845 TIP3 OH2 OT -0.834000 15.9994 0 + 17023 W1 4845 TIP3 H1 HT 0.417000 1.0080 0 + 17024 W1 4845 TIP3 H2 HT 0.417000 1.0080 0 + 17025 W1 4846 TIP3 OH2 OT -0.834000 15.9994 0 + 17026 W1 4846 TIP3 H1 HT 0.417000 1.0080 0 + 17027 W1 4846 TIP3 H2 HT 0.417000 1.0080 0 + 17028 W1 4847 TIP3 OH2 OT -0.834000 15.9994 0 + 17029 W1 4847 TIP3 H1 HT 0.417000 1.0080 0 + 17030 W1 4847 TIP3 H2 HT 0.417000 1.0080 0 + 17031 W1 4848 TIP3 OH2 OT -0.834000 15.9994 0 + 17032 W1 4848 TIP3 H1 HT 0.417000 1.0080 0 + 17033 W1 4848 TIP3 H2 HT 0.417000 1.0080 0 + 17034 W1 4849 TIP3 OH2 OT -0.834000 15.9994 0 + 17035 W1 4849 TIP3 H1 HT 0.417000 1.0080 0 + 17036 W1 4849 TIP3 H2 HT 0.417000 1.0080 0 + 17037 W1 4850 TIP3 OH2 OT -0.834000 15.9994 0 + 17038 W1 4850 TIP3 H1 HT 0.417000 1.0080 0 + 17039 W1 4850 TIP3 H2 HT 0.417000 1.0080 0 + 17040 W1 4851 TIP3 OH2 OT -0.834000 15.9994 0 + 17041 W1 4851 TIP3 H1 HT 0.417000 1.0080 0 + 17042 W1 4851 TIP3 H2 HT 0.417000 1.0080 0 + 17043 W1 4852 TIP3 OH2 OT -0.834000 15.9994 0 + 17044 W1 4852 TIP3 H1 HT 0.417000 1.0080 0 + 17045 W1 4852 TIP3 H2 HT 0.417000 1.0080 0 + 17046 W1 4853 TIP3 OH2 OT -0.834000 15.9994 0 + 17047 W1 4853 TIP3 H1 HT 0.417000 1.0080 0 + 17048 W1 4853 TIP3 H2 HT 0.417000 1.0080 0 + 17049 W1 4854 TIP3 OH2 OT -0.834000 15.9994 0 + 17050 W1 4854 TIP3 H1 HT 0.417000 1.0080 0 + 17051 W1 4854 TIP3 H2 HT 0.417000 1.0080 0 + 17052 W1 4855 TIP3 OH2 OT -0.834000 15.9994 0 + 17053 W1 4855 TIP3 H1 HT 0.417000 1.0080 0 + 17054 W1 4855 TIP3 H2 HT 0.417000 1.0080 0 + 17055 W1 4856 TIP3 OH2 OT -0.834000 15.9994 0 + 17056 W1 4856 TIP3 H1 HT 0.417000 1.0080 0 + 17057 W1 4856 TIP3 H2 HT 0.417000 1.0080 0 + 17058 W1 4857 TIP3 OH2 OT -0.834000 15.9994 0 + 17059 W1 4857 TIP3 H1 HT 0.417000 1.0080 0 + 17060 W1 4857 TIP3 H2 HT 0.417000 1.0080 0 + 17061 W1 4858 TIP3 OH2 OT -0.834000 15.9994 0 + 17062 W1 4858 TIP3 H1 HT 0.417000 1.0080 0 + 17063 W1 4858 TIP3 H2 HT 0.417000 1.0080 0 + 17064 W1 4859 TIP3 OH2 OT -0.834000 15.9994 0 + 17065 W1 4859 TIP3 H1 HT 0.417000 1.0080 0 + 17066 W1 4859 TIP3 H2 HT 0.417000 1.0080 0 + 17067 W1 4860 TIP3 OH2 OT -0.834000 15.9994 0 + 17068 W1 4860 TIP3 H1 HT 0.417000 1.0080 0 + 17069 W1 4860 TIP3 H2 HT 0.417000 1.0080 0 + 17070 W1 4861 TIP3 OH2 OT -0.834000 15.9994 0 + 17071 W1 4861 TIP3 H1 HT 0.417000 1.0080 0 + 17072 W1 4861 TIP3 H2 HT 0.417000 1.0080 0 + 17073 W1 4862 TIP3 OH2 OT -0.834000 15.9994 0 + 17074 W1 4862 TIP3 H1 HT 0.417000 1.0080 0 + 17075 W1 4862 TIP3 H2 HT 0.417000 1.0080 0 + 17076 W1 4863 TIP3 OH2 OT -0.834000 15.9994 0 + 17077 W1 4863 TIP3 H1 HT 0.417000 1.0080 0 + 17078 W1 4863 TIP3 H2 HT 0.417000 1.0080 0 + 17079 W1 4864 TIP3 OH2 OT -0.834000 15.9994 0 + 17080 W1 4864 TIP3 H1 HT 0.417000 1.0080 0 + 17081 W1 4864 TIP3 H2 HT 0.417000 1.0080 0 + 17082 W1 4865 TIP3 OH2 OT -0.834000 15.9994 0 + 17083 W1 4865 TIP3 H1 HT 0.417000 1.0080 0 + 17084 W1 4865 TIP3 H2 HT 0.417000 1.0080 0 + 17085 W1 4866 TIP3 OH2 OT -0.834000 15.9994 0 + 17086 W1 4866 TIP3 H1 HT 0.417000 1.0080 0 + 17087 W1 4866 TIP3 H2 HT 0.417000 1.0080 0 + 17088 W1 4867 TIP3 OH2 OT -0.834000 15.9994 0 + 17089 W1 4867 TIP3 H1 HT 0.417000 1.0080 0 + 17090 W1 4867 TIP3 H2 HT 0.417000 1.0080 0 + 17091 W1 4868 TIP3 OH2 OT -0.834000 15.9994 0 + 17092 W1 4868 TIP3 H1 HT 0.417000 1.0080 0 + 17093 W1 4868 TIP3 H2 HT 0.417000 1.0080 0 + 17094 W1 4869 TIP3 OH2 OT -0.834000 15.9994 0 + 17095 W1 4869 TIP3 H1 HT 0.417000 1.0080 0 + 17096 W1 4869 TIP3 H2 HT 0.417000 1.0080 0 + 17097 W1 4870 TIP3 OH2 OT -0.834000 15.9994 0 + 17098 W1 4870 TIP3 H1 HT 0.417000 1.0080 0 + 17099 W1 4870 TIP3 H2 HT 0.417000 1.0080 0 + 17100 W1 4871 TIP3 OH2 OT -0.834000 15.9994 0 + 17101 W1 4871 TIP3 H1 HT 0.417000 1.0080 0 + 17102 W1 4871 TIP3 H2 HT 0.417000 1.0080 0 + 17103 W1 4872 TIP3 OH2 OT -0.834000 15.9994 0 + 17104 W1 4872 TIP3 H1 HT 0.417000 1.0080 0 + 17105 W1 4872 TIP3 H2 HT 0.417000 1.0080 0 + 17106 W1 4873 TIP3 OH2 OT -0.834000 15.9994 0 + 17107 W1 4873 TIP3 H1 HT 0.417000 1.0080 0 + 17108 W1 4873 TIP3 H2 HT 0.417000 1.0080 0 + 17109 W1 4874 TIP3 OH2 OT -0.834000 15.9994 0 + 17110 W1 4874 TIP3 H1 HT 0.417000 1.0080 0 + 17111 W1 4874 TIP3 H2 HT 0.417000 1.0080 0 + 17112 W1 4875 TIP3 OH2 OT -0.834000 15.9994 0 + 17113 W1 4875 TIP3 H1 HT 0.417000 1.0080 0 + 17114 W1 4875 TIP3 H2 HT 0.417000 1.0080 0 + 17115 W1 4876 TIP3 OH2 OT -0.834000 15.9994 0 + 17116 W1 4876 TIP3 H1 HT 0.417000 1.0080 0 + 17117 W1 4876 TIP3 H2 HT 0.417000 1.0080 0 + 17118 W1 4877 TIP3 OH2 OT -0.834000 15.9994 0 + 17119 W1 4877 TIP3 H1 HT 0.417000 1.0080 0 + 17120 W1 4877 TIP3 H2 HT 0.417000 1.0080 0 + 17121 W1 4878 TIP3 OH2 OT -0.834000 15.9994 0 + 17122 W1 4878 TIP3 H1 HT 0.417000 1.0080 0 + 17123 W1 4878 TIP3 H2 HT 0.417000 1.0080 0 + 17124 W1 4879 TIP3 OH2 OT -0.834000 15.9994 0 + 17125 W1 4879 TIP3 H1 HT 0.417000 1.0080 0 + 17126 W1 4879 TIP3 H2 HT 0.417000 1.0080 0 + 17127 W1 4880 TIP3 OH2 OT -0.834000 15.9994 0 + 17128 W1 4880 TIP3 H1 HT 0.417000 1.0080 0 + 17129 W1 4880 TIP3 H2 HT 0.417000 1.0080 0 + 17130 W1 4881 TIP3 OH2 OT -0.834000 15.9994 0 + 17131 W1 4881 TIP3 H1 HT 0.417000 1.0080 0 + 17132 W1 4881 TIP3 H2 HT 0.417000 1.0080 0 + 17133 W1 4882 TIP3 OH2 OT -0.834000 15.9994 0 + 17134 W1 4882 TIP3 H1 HT 0.417000 1.0080 0 + 17135 W1 4882 TIP3 H2 HT 0.417000 1.0080 0 + 17136 W1 4883 TIP3 OH2 OT -0.834000 15.9994 0 + 17137 W1 4883 TIP3 H1 HT 0.417000 1.0080 0 + 17138 W1 4883 TIP3 H2 HT 0.417000 1.0080 0 + 17139 W1 4884 TIP3 OH2 OT -0.834000 15.9994 0 + 17140 W1 4884 TIP3 H1 HT 0.417000 1.0080 0 + 17141 W1 4884 TIP3 H2 HT 0.417000 1.0080 0 + 17142 W1 4885 TIP3 OH2 OT -0.834000 15.9994 0 + 17143 W1 4885 TIP3 H1 HT 0.417000 1.0080 0 + 17144 W1 4885 TIP3 H2 HT 0.417000 1.0080 0 + 17145 W1 4886 TIP3 OH2 OT -0.834000 15.9994 0 + 17146 W1 4886 TIP3 H1 HT 0.417000 1.0080 0 + 17147 W1 4886 TIP3 H2 HT 0.417000 1.0080 0 + 17148 W1 4887 TIP3 OH2 OT -0.834000 15.9994 0 + 17149 W1 4887 TIP3 H1 HT 0.417000 1.0080 0 + 17150 W1 4887 TIP3 H2 HT 0.417000 1.0080 0 + 17151 W1 4888 TIP3 OH2 OT -0.834000 15.9994 0 + 17152 W1 4888 TIP3 H1 HT 0.417000 1.0080 0 + 17153 W1 4888 TIP3 H2 HT 0.417000 1.0080 0 + 17154 W1 4889 TIP3 OH2 OT -0.834000 15.9994 0 + 17155 W1 4889 TIP3 H1 HT 0.417000 1.0080 0 + 17156 W1 4889 TIP3 H2 HT 0.417000 1.0080 0 + 17157 W1 4890 TIP3 OH2 OT -0.834000 15.9994 0 + 17158 W1 4890 TIP3 H1 HT 0.417000 1.0080 0 + 17159 W1 4890 TIP3 H2 HT 0.417000 1.0080 0 + 17160 W1 4891 TIP3 OH2 OT -0.834000 15.9994 0 + 17161 W1 4891 TIP3 H1 HT 0.417000 1.0080 0 + 17162 W1 4891 TIP3 H2 HT 0.417000 1.0080 0 + 17163 W1 4892 TIP3 OH2 OT -0.834000 15.9994 0 + 17164 W1 4892 TIP3 H1 HT 0.417000 1.0080 0 + 17165 W1 4892 TIP3 H2 HT 0.417000 1.0080 0 + 17166 W1 4893 TIP3 OH2 OT -0.834000 15.9994 0 + 17167 W1 4893 TIP3 H1 HT 0.417000 1.0080 0 + 17168 W1 4893 TIP3 H2 HT 0.417000 1.0080 0 + 17169 W1 4894 TIP3 OH2 OT -0.834000 15.9994 0 + 17170 W1 4894 TIP3 H1 HT 0.417000 1.0080 0 + 17171 W1 4894 TIP3 H2 HT 0.417000 1.0080 0 + 17172 W1 4895 TIP3 OH2 OT -0.834000 15.9994 0 + 17173 W1 4895 TIP3 H1 HT 0.417000 1.0080 0 + 17174 W1 4895 TIP3 H2 HT 0.417000 1.0080 0 + 17175 W1 4896 TIP3 OH2 OT -0.834000 15.9994 0 + 17176 W1 4896 TIP3 H1 HT 0.417000 1.0080 0 + 17177 W1 4896 TIP3 H2 HT 0.417000 1.0080 0 + 17178 W1 4897 TIP3 OH2 OT -0.834000 15.9994 0 + 17179 W1 4897 TIP3 H1 HT 0.417000 1.0080 0 + 17180 W1 4897 TIP3 H2 HT 0.417000 1.0080 0 + 17181 W1 4898 TIP3 OH2 OT -0.834000 15.9994 0 + 17182 W1 4898 TIP3 H1 HT 0.417000 1.0080 0 + 17183 W1 4898 TIP3 H2 HT 0.417000 1.0080 0 + 17184 W1 4899 TIP3 OH2 OT -0.834000 15.9994 0 + 17185 W1 4899 TIP3 H1 HT 0.417000 1.0080 0 + 17186 W1 4899 TIP3 H2 HT 0.417000 1.0080 0 + 17187 W1 4900 TIP3 OH2 OT -0.834000 15.9994 0 + 17188 W1 4900 TIP3 H1 HT 0.417000 1.0080 0 + 17189 W1 4900 TIP3 H2 HT 0.417000 1.0080 0 + 17190 W1 4901 TIP3 OH2 OT -0.834000 15.9994 0 + 17191 W1 4901 TIP3 H1 HT 0.417000 1.0080 0 + 17192 W1 4901 TIP3 H2 HT 0.417000 1.0080 0 + 17193 W1 4902 TIP3 OH2 OT -0.834000 15.9994 0 + 17194 W1 4902 TIP3 H1 HT 0.417000 1.0080 0 + 17195 W1 4902 TIP3 H2 HT 0.417000 1.0080 0 + 17196 W1 4903 TIP3 OH2 OT -0.834000 15.9994 0 + 17197 W1 4903 TIP3 H1 HT 0.417000 1.0080 0 + 17198 W1 4903 TIP3 H2 HT 0.417000 1.0080 0 + 17199 W1 4904 TIP3 OH2 OT -0.834000 15.9994 0 + 17200 W1 4904 TIP3 H1 HT 0.417000 1.0080 0 + 17201 W1 4904 TIP3 H2 HT 0.417000 1.0080 0 + 17202 W1 4905 TIP3 OH2 OT -0.834000 15.9994 0 + 17203 W1 4905 TIP3 H1 HT 0.417000 1.0080 0 + 17204 W1 4905 TIP3 H2 HT 0.417000 1.0080 0 + 17205 W1 4906 TIP3 OH2 OT -0.834000 15.9994 0 + 17206 W1 4906 TIP3 H1 HT 0.417000 1.0080 0 + 17207 W1 4906 TIP3 H2 HT 0.417000 1.0080 0 + 17208 W1 4907 TIP3 OH2 OT -0.834000 15.9994 0 + 17209 W1 4907 TIP3 H1 HT 0.417000 1.0080 0 + 17210 W1 4907 TIP3 H2 HT 0.417000 1.0080 0 + 17211 W1 4908 TIP3 OH2 OT -0.834000 15.9994 0 + 17212 W1 4908 TIP3 H1 HT 0.417000 1.0080 0 + 17213 W1 4908 TIP3 H2 HT 0.417000 1.0080 0 + 17214 W1 4909 TIP3 OH2 OT -0.834000 15.9994 0 + 17215 W1 4909 TIP3 H1 HT 0.417000 1.0080 0 + 17216 W1 4909 TIP3 H2 HT 0.417000 1.0080 0 + 17217 W1 4910 TIP3 OH2 OT -0.834000 15.9994 0 + 17218 W1 4910 TIP3 H1 HT 0.417000 1.0080 0 + 17219 W1 4910 TIP3 H2 HT 0.417000 1.0080 0 + 17220 W1 4911 TIP3 OH2 OT -0.834000 15.9994 0 + 17221 W1 4911 TIP3 H1 HT 0.417000 1.0080 0 + 17222 W1 4911 TIP3 H2 HT 0.417000 1.0080 0 + 17223 W1 4912 TIP3 OH2 OT -0.834000 15.9994 0 + 17224 W1 4912 TIP3 H1 HT 0.417000 1.0080 0 + 17225 W1 4912 TIP3 H2 HT 0.417000 1.0080 0 + 17226 W1 4913 TIP3 OH2 OT -0.834000 15.9994 0 + 17227 W1 4913 TIP3 H1 HT 0.417000 1.0080 0 + 17228 W1 4913 TIP3 H2 HT 0.417000 1.0080 0 + 17229 W1 4914 TIP3 OH2 OT -0.834000 15.9994 0 + 17230 W1 4914 TIP3 H1 HT 0.417000 1.0080 0 + 17231 W1 4914 TIP3 H2 HT 0.417000 1.0080 0 + 17232 W1 4915 TIP3 OH2 OT -0.834000 15.9994 0 + 17233 W1 4915 TIP3 H1 HT 0.417000 1.0080 0 + 17234 W1 4915 TIP3 H2 HT 0.417000 1.0080 0 + 17235 W1 4916 TIP3 OH2 OT -0.834000 15.9994 0 + 17236 W1 4916 TIP3 H1 HT 0.417000 1.0080 0 + 17237 W1 4916 TIP3 H2 HT 0.417000 1.0080 0 + 17238 W1 4917 TIP3 OH2 OT -0.834000 15.9994 0 + 17239 W1 4917 TIP3 H1 HT 0.417000 1.0080 0 + 17240 W1 4917 TIP3 H2 HT 0.417000 1.0080 0 + 17241 W1 4918 TIP3 OH2 OT -0.834000 15.9994 0 + 17242 W1 4918 TIP3 H1 HT 0.417000 1.0080 0 + 17243 W1 4918 TIP3 H2 HT 0.417000 1.0080 0 + 17244 W1 4919 TIP3 OH2 OT -0.834000 15.9994 0 + 17245 W1 4919 TIP3 H1 HT 0.417000 1.0080 0 + 17246 W1 4919 TIP3 H2 HT 0.417000 1.0080 0 + 17247 W1 4920 TIP3 OH2 OT -0.834000 15.9994 0 + 17248 W1 4920 TIP3 H1 HT 0.417000 1.0080 0 + 17249 W1 4920 TIP3 H2 HT 0.417000 1.0080 0 + 17250 W1 4921 TIP3 OH2 OT -0.834000 15.9994 0 + 17251 W1 4921 TIP3 H1 HT 0.417000 1.0080 0 + 17252 W1 4921 TIP3 H2 HT 0.417000 1.0080 0 + 17253 W1 4922 TIP3 OH2 OT -0.834000 15.9994 0 + 17254 W1 4922 TIP3 H1 HT 0.417000 1.0080 0 + 17255 W1 4922 TIP3 H2 HT 0.417000 1.0080 0 + 17256 W1 4923 TIP3 OH2 OT -0.834000 15.9994 0 + 17257 W1 4923 TIP3 H1 HT 0.417000 1.0080 0 + 17258 W1 4923 TIP3 H2 HT 0.417000 1.0080 0 + 17259 W1 4924 TIP3 OH2 OT -0.834000 15.9994 0 + 17260 W1 4924 TIP3 H1 HT 0.417000 1.0080 0 + 17261 W1 4924 TIP3 H2 HT 0.417000 1.0080 0 + 17262 W1 4925 TIP3 OH2 OT -0.834000 15.9994 0 + 17263 W1 4925 TIP3 H1 HT 0.417000 1.0080 0 + 17264 W1 4925 TIP3 H2 HT 0.417000 1.0080 0 + 17265 W1 4926 TIP3 OH2 OT -0.834000 15.9994 0 + 17266 W1 4926 TIP3 H1 HT 0.417000 1.0080 0 + 17267 W1 4926 TIP3 H2 HT 0.417000 1.0080 0 + 17268 W1 4927 TIP3 OH2 OT -0.834000 15.9994 0 + 17269 W1 4927 TIP3 H1 HT 0.417000 1.0080 0 + 17270 W1 4927 TIP3 H2 HT 0.417000 1.0080 0 + 17271 W1 4928 TIP3 OH2 OT -0.834000 15.9994 0 + 17272 W1 4928 TIP3 H1 HT 0.417000 1.0080 0 + 17273 W1 4928 TIP3 H2 HT 0.417000 1.0080 0 + 17274 W1 4929 TIP3 OH2 OT -0.834000 15.9994 0 + 17275 W1 4929 TIP3 H1 HT 0.417000 1.0080 0 + 17276 W1 4929 TIP3 H2 HT 0.417000 1.0080 0 + 17277 W1 4930 TIP3 OH2 OT -0.834000 15.9994 0 + 17278 W1 4930 TIP3 H1 HT 0.417000 1.0080 0 + 17279 W1 4930 TIP3 H2 HT 0.417000 1.0080 0 + 17280 W1 4931 TIP3 OH2 OT -0.834000 15.9994 0 + 17281 W1 4931 TIP3 H1 HT 0.417000 1.0080 0 + 17282 W1 4931 TIP3 H2 HT 0.417000 1.0080 0 + 17283 W1 4932 TIP3 OH2 OT -0.834000 15.9994 0 + 17284 W1 4932 TIP3 H1 HT 0.417000 1.0080 0 + 17285 W1 4932 TIP3 H2 HT 0.417000 1.0080 0 + 17286 W1 4933 TIP3 OH2 OT -0.834000 15.9994 0 + 17287 W1 4933 TIP3 H1 HT 0.417000 1.0080 0 + 17288 W1 4933 TIP3 H2 HT 0.417000 1.0080 0 + 17289 W1 4934 TIP3 OH2 OT -0.834000 15.9994 0 + 17290 W1 4934 TIP3 H1 HT 0.417000 1.0080 0 + 17291 W1 4934 TIP3 H2 HT 0.417000 1.0080 0 + 17292 W1 4935 TIP3 OH2 OT -0.834000 15.9994 0 + 17293 W1 4935 TIP3 H1 HT 0.417000 1.0080 0 + 17294 W1 4935 TIP3 H2 HT 0.417000 1.0080 0 + 17295 W1 4936 TIP3 OH2 OT -0.834000 15.9994 0 + 17296 W1 4936 TIP3 H1 HT 0.417000 1.0080 0 + 17297 W1 4936 TIP3 H2 HT 0.417000 1.0080 0 + 17298 W1 4937 TIP3 OH2 OT -0.834000 15.9994 0 + 17299 W1 4937 TIP3 H1 HT 0.417000 1.0080 0 + 17300 W1 4937 TIP3 H2 HT 0.417000 1.0080 0 + 17301 W1 4938 TIP3 OH2 OT -0.834000 15.9994 0 + 17302 W1 4938 TIP3 H1 HT 0.417000 1.0080 0 + 17303 W1 4938 TIP3 H2 HT 0.417000 1.0080 0 + 17304 W1 4939 TIP3 OH2 OT -0.834000 15.9994 0 + 17305 W1 4939 TIP3 H1 HT 0.417000 1.0080 0 + 17306 W1 4939 TIP3 H2 HT 0.417000 1.0080 0 + 17307 W1 4940 TIP3 OH2 OT -0.834000 15.9994 0 + 17308 W1 4940 TIP3 H1 HT 0.417000 1.0080 0 + 17309 W1 4940 TIP3 H2 HT 0.417000 1.0080 0 + 17310 W1 4941 TIP3 OH2 OT -0.834000 15.9994 0 + 17311 W1 4941 TIP3 H1 HT 0.417000 1.0080 0 + 17312 W1 4941 TIP3 H2 HT 0.417000 1.0080 0 + 17313 W1 4942 TIP3 OH2 OT -0.834000 15.9994 0 + 17314 W1 4942 TIP3 H1 HT 0.417000 1.0080 0 + 17315 W1 4942 TIP3 H2 HT 0.417000 1.0080 0 + 17316 W1 4943 TIP3 OH2 OT -0.834000 15.9994 0 + 17317 W1 4943 TIP3 H1 HT 0.417000 1.0080 0 + 17318 W1 4943 TIP3 H2 HT 0.417000 1.0080 0 + 17319 W1 4944 TIP3 OH2 OT -0.834000 15.9994 0 + 17320 W1 4944 TIP3 H1 HT 0.417000 1.0080 0 + 17321 W1 4944 TIP3 H2 HT 0.417000 1.0080 0 + 17322 W1 4945 TIP3 OH2 OT -0.834000 15.9994 0 + 17323 W1 4945 TIP3 H1 HT 0.417000 1.0080 0 + 17324 W1 4945 TIP3 H2 HT 0.417000 1.0080 0 + 17325 W1 4946 TIP3 OH2 OT -0.834000 15.9994 0 + 17326 W1 4946 TIP3 H1 HT 0.417000 1.0080 0 + 17327 W1 4946 TIP3 H2 HT 0.417000 1.0080 0 + 17328 W1 4947 TIP3 OH2 OT -0.834000 15.9994 0 + 17329 W1 4947 TIP3 H1 HT 0.417000 1.0080 0 + 17330 W1 4947 TIP3 H2 HT 0.417000 1.0080 0 + 17331 W1 4948 TIP3 OH2 OT -0.834000 15.9994 0 + 17332 W1 4948 TIP3 H1 HT 0.417000 1.0080 0 + 17333 W1 4948 TIP3 H2 HT 0.417000 1.0080 0 + 17334 W1 4949 TIP3 OH2 OT -0.834000 15.9994 0 + 17335 W1 4949 TIP3 H1 HT 0.417000 1.0080 0 + 17336 W1 4949 TIP3 H2 HT 0.417000 1.0080 0 + 17337 W1 4950 TIP3 OH2 OT -0.834000 15.9994 0 + 17338 W1 4950 TIP3 H1 HT 0.417000 1.0080 0 + 17339 W1 4950 TIP3 H2 HT 0.417000 1.0080 0 + 17340 W1 4951 TIP3 OH2 OT -0.834000 15.9994 0 + 17341 W1 4951 TIP3 H1 HT 0.417000 1.0080 0 + 17342 W1 4951 TIP3 H2 HT 0.417000 1.0080 0 + 17343 W1 4952 TIP3 OH2 OT -0.834000 15.9994 0 + 17344 W1 4952 TIP3 H1 HT 0.417000 1.0080 0 + 17345 W1 4952 TIP3 H2 HT 0.417000 1.0080 0 + 17346 W1 4953 TIP3 OH2 OT -0.834000 15.9994 0 + 17347 W1 4953 TIP3 H1 HT 0.417000 1.0080 0 + 17348 W1 4953 TIP3 H2 HT 0.417000 1.0080 0 + 17349 W1 4954 TIP3 OH2 OT -0.834000 15.9994 0 + 17350 W1 4954 TIP3 H1 HT 0.417000 1.0080 0 + 17351 W1 4954 TIP3 H2 HT 0.417000 1.0080 0 + 17352 W1 4955 TIP3 OH2 OT -0.834000 15.9994 0 + 17353 W1 4955 TIP3 H1 HT 0.417000 1.0080 0 + 17354 W1 4955 TIP3 H2 HT 0.417000 1.0080 0 + 17355 W1 4956 TIP3 OH2 OT -0.834000 15.9994 0 + 17356 W1 4956 TIP3 H1 HT 0.417000 1.0080 0 + 17357 W1 4956 TIP3 H2 HT 0.417000 1.0080 0 + 17358 W1 4957 TIP3 OH2 OT -0.834000 15.9994 0 + 17359 W1 4957 TIP3 H1 HT 0.417000 1.0080 0 + 17360 W1 4957 TIP3 H2 HT 0.417000 1.0080 0 + 17361 W1 4958 TIP3 OH2 OT -0.834000 15.9994 0 + 17362 W1 4958 TIP3 H1 HT 0.417000 1.0080 0 + 17363 W1 4958 TIP3 H2 HT 0.417000 1.0080 0 + 17364 W1 4959 TIP3 OH2 OT -0.834000 15.9994 0 + 17365 W1 4959 TIP3 H1 HT 0.417000 1.0080 0 + 17366 W1 4959 TIP3 H2 HT 0.417000 1.0080 0 + 17367 W1 4960 TIP3 OH2 OT -0.834000 15.9994 0 + 17368 W1 4960 TIP3 H1 HT 0.417000 1.0080 0 + 17369 W1 4960 TIP3 H2 HT 0.417000 1.0080 0 + 17370 W1 4961 TIP3 OH2 OT -0.834000 15.9994 0 + 17371 W1 4961 TIP3 H1 HT 0.417000 1.0080 0 + 17372 W1 4961 TIP3 H2 HT 0.417000 1.0080 0 + 17373 W1 4962 TIP3 OH2 OT -0.834000 15.9994 0 + 17374 W1 4962 TIP3 H1 HT 0.417000 1.0080 0 + 17375 W1 4962 TIP3 H2 HT 0.417000 1.0080 0 + 17376 W1 4963 TIP3 OH2 OT -0.834000 15.9994 0 + 17377 W1 4963 TIP3 H1 HT 0.417000 1.0080 0 + 17378 W1 4963 TIP3 H2 HT 0.417000 1.0080 0 + 17379 W1 4964 TIP3 OH2 OT -0.834000 15.9994 0 + 17380 W1 4964 TIP3 H1 HT 0.417000 1.0080 0 + 17381 W1 4964 TIP3 H2 HT 0.417000 1.0080 0 + 17382 W1 4965 TIP3 OH2 OT -0.834000 15.9994 0 + 17383 W1 4965 TIP3 H1 HT 0.417000 1.0080 0 + 17384 W1 4965 TIP3 H2 HT 0.417000 1.0080 0 + 17385 W1 4966 TIP3 OH2 OT -0.834000 15.9994 0 + 17386 W1 4966 TIP3 H1 HT 0.417000 1.0080 0 + 17387 W1 4966 TIP3 H2 HT 0.417000 1.0080 0 + 17388 W1 4967 TIP3 OH2 OT -0.834000 15.9994 0 + 17389 W1 4967 TIP3 H1 HT 0.417000 1.0080 0 + 17390 W1 4967 TIP3 H2 HT 0.417000 1.0080 0 + 17391 W1 4968 TIP3 OH2 OT -0.834000 15.9994 0 + 17392 W1 4968 TIP3 H1 HT 0.417000 1.0080 0 + 17393 W1 4968 TIP3 H2 HT 0.417000 1.0080 0 + 17394 W1 4969 TIP3 OH2 OT -0.834000 15.9994 0 + 17395 W1 4969 TIP3 H1 HT 0.417000 1.0080 0 + 17396 W1 4969 TIP3 H2 HT 0.417000 1.0080 0 + 17397 W1 4970 TIP3 OH2 OT -0.834000 15.9994 0 + 17398 W1 4970 TIP3 H1 HT 0.417000 1.0080 0 + 17399 W1 4970 TIP3 H2 HT 0.417000 1.0080 0 + 17400 W1 4971 TIP3 OH2 OT -0.834000 15.9994 0 + 17401 W1 4971 TIP3 H1 HT 0.417000 1.0080 0 + 17402 W1 4971 TIP3 H2 HT 0.417000 1.0080 0 + 17403 W1 4972 TIP3 OH2 OT -0.834000 15.9994 0 + 17404 W1 4972 TIP3 H1 HT 0.417000 1.0080 0 + 17405 W1 4972 TIP3 H2 HT 0.417000 1.0080 0 + 17406 W1 4973 TIP3 OH2 OT -0.834000 15.9994 0 + 17407 W1 4973 TIP3 H1 HT 0.417000 1.0080 0 + 17408 W1 4973 TIP3 H2 HT 0.417000 1.0080 0 + 17409 W1 4974 TIP3 OH2 OT -0.834000 15.9994 0 + 17410 W1 4974 TIP3 H1 HT 0.417000 1.0080 0 + 17411 W1 4974 TIP3 H2 HT 0.417000 1.0080 0 + 17412 W1 4975 TIP3 OH2 OT -0.834000 15.9994 0 + 17413 W1 4975 TIP3 H1 HT 0.417000 1.0080 0 + 17414 W1 4975 TIP3 H2 HT 0.417000 1.0080 0 + 17415 W1 4976 TIP3 OH2 OT -0.834000 15.9994 0 + 17416 W1 4976 TIP3 H1 HT 0.417000 1.0080 0 + 17417 W1 4976 TIP3 H2 HT 0.417000 1.0080 0 + 17418 W1 4977 TIP3 OH2 OT -0.834000 15.9994 0 + 17419 W1 4977 TIP3 H1 HT 0.417000 1.0080 0 + 17420 W1 4977 TIP3 H2 HT 0.417000 1.0080 0 + 17421 W1 4978 TIP3 OH2 OT -0.834000 15.9994 0 + 17422 W1 4978 TIP3 H1 HT 0.417000 1.0080 0 + 17423 W1 4978 TIP3 H2 HT 0.417000 1.0080 0 + 17424 W1 4979 TIP3 OH2 OT -0.834000 15.9994 0 + 17425 W1 4979 TIP3 H1 HT 0.417000 1.0080 0 + 17426 W1 4979 TIP3 H2 HT 0.417000 1.0080 0 + 17427 W1 4980 TIP3 OH2 OT -0.834000 15.9994 0 + 17428 W1 4980 TIP3 H1 HT 0.417000 1.0080 0 + 17429 W1 4980 TIP3 H2 HT 0.417000 1.0080 0 + 17430 W1 4981 TIP3 OH2 OT -0.834000 15.9994 0 + 17431 W1 4981 TIP3 H1 HT 0.417000 1.0080 0 + 17432 W1 4981 TIP3 H2 HT 0.417000 1.0080 0 + 17433 W1 4982 TIP3 OH2 OT -0.834000 15.9994 0 + 17434 W1 4982 TIP3 H1 HT 0.417000 1.0080 0 + 17435 W1 4982 TIP3 H2 HT 0.417000 1.0080 0 + 17436 W1 4983 TIP3 OH2 OT -0.834000 15.9994 0 + 17437 W1 4983 TIP3 H1 HT 0.417000 1.0080 0 + 17438 W1 4983 TIP3 H2 HT 0.417000 1.0080 0 + 17439 W1 4984 TIP3 OH2 OT -0.834000 15.9994 0 + 17440 W1 4984 TIP3 H1 HT 0.417000 1.0080 0 + 17441 W1 4984 TIP3 H2 HT 0.417000 1.0080 0 + 17442 W1 4985 TIP3 OH2 OT -0.834000 15.9994 0 + 17443 W1 4985 TIP3 H1 HT 0.417000 1.0080 0 + 17444 W1 4985 TIP3 H2 HT 0.417000 1.0080 0 + 17445 W1 4986 TIP3 OH2 OT -0.834000 15.9994 0 + 17446 W1 4986 TIP3 H1 HT 0.417000 1.0080 0 + 17447 W1 4986 TIP3 H2 HT 0.417000 1.0080 0 + 17448 W1 4987 TIP3 OH2 OT -0.834000 15.9994 0 + 17449 W1 4987 TIP3 H1 HT 0.417000 1.0080 0 + 17450 W1 4987 TIP3 H2 HT 0.417000 1.0080 0 + 17451 W1 4988 TIP3 OH2 OT -0.834000 15.9994 0 + 17452 W1 4988 TIP3 H1 HT 0.417000 1.0080 0 + 17453 W1 4988 TIP3 H2 HT 0.417000 1.0080 0 + 17454 W1 4989 TIP3 OH2 OT -0.834000 15.9994 0 + 17455 W1 4989 TIP3 H1 HT 0.417000 1.0080 0 + 17456 W1 4989 TIP3 H2 HT 0.417000 1.0080 0 + 17457 W1 4990 TIP3 OH2 OT -0.834000 15.9994 0 + 17458 W1 4990 TIP3 H1 HT 0.417000 1.0080 0 + 17459 W1 4990 TIP3 H2 HT 0.417000 1.0080 0 + 17460 W1 4991 TIP3 OH2 OT -0.834000 15.9994 0 + 17461 W1 4991 TIP3 H1 HT 0.417000 1.0080 0 + 17462 W1 4991 TIP3 H2 HT 0.417000 1.0080 0 + 17463 W1 4992 TIP3 OH2 OT -0.834000 15.9994 0 + 17464 W1 4992 TIP3 H1 HT 0.417000 1.0080 0 + 17465 W1 4992 TIP3 H2 HT 0.417000 1.0080 0 + 17466 W1 4993 TIP3 OH2 OT -0.834000 15.9994 0 + 17467 W1 4993 TIP3 H1 HT 0.417000 1.0080 0 + 17468 W1 4993 TIP3 H2 HT 0.417000 1.0080 0 + 17469 W1 4994 TIP3 OH2 OT -0.834000 15.9994 0 + 17470 W1 4994 TIP3 H1 HT 0.417000 1.0080 0 + 17471 W1 4994 TIP3 H2 HT 0.417000 1.0080 0 + 17472 W1 4995 TIP3 OH2 OT -0.834000 15.9994 0 + 17473 W1 4995 TIP3 H1 HT 0.417000 1.0080 0 + 17474 W1 4995 TIP3 H2 HT 0.417000 1.0080 0 + 17475 W1 4996 TIP3 OH2 OT -0.834000 15.9994 0 + 17476 W1 4996 TIP3 H1 HT 0.417000 1.0080 0 + 17477 W1 4996 TIP3 H2 HT 0.417000 1.0080 0 + 17478 W1 4997 TIP3 OH2 OT -0.834000 15.9994 0 + 17479 W1 4997 TIP3 H1 HT 0.417000 1.0080 0 + 17480 W1 4997 TIP3 H2 HT 0.417000 1.0080 0 + 17481 W1 4998 TIP3 OH2 OT -0.834000 15.9994 0 + 17482 W1 4998 TIP3 H1 HT 0.417000 1.0080 0 + 17483 W1 4998 TIP3 H2 HT 0.417000 1.0080 0 + 17484 W1 4999 TIP3 OH2 OT -0.834000 15.9994 0 + 17485 W1 4999 TIP3 H1 HT 0.417000 1.0080 0 + 17486 W1 4999 TIP3 H2 HT 0.417000 1.0080 0 + 17487 W1 5000 TIP3 OH2 OT -0.834000 15.9994 0 + 17488 W1 5000 TIP3 H1 HT 0.417000 1.0080 0 + 17489 W1 5000 TIP3 H2 HT 0.417000 1.0080 0 + 17490 W1 5001 TIP3 OH2 OT -0.834000 15.9994 0 + 17491 W1 5001 TIP3 H1 HT 0.417000 1.0080 0 + 17492 W1 5001 TIP3 H2 HT 0.417000 1.0080 0 + 17493 W1 5002 TIP3 OH2 OT -0.834000 15.9994 0 + 17494 W1 5002 TIP3 H1 HT 0.417000 1.0080 0 + 17495 W1 5002 TIP3 H2 HT 0.417000 1.0080 0 + 17496 W1 5003 TIP3 OH2 OT -0.834000 15.9994 0 + 17497 W1 5003 TIP3 H1 HT 0.417000 1.0080 0 + 17498 W1 5003 TIP3 H2 HT 0.417000 1.0080 0 + 17499 W1 5004 TIP3 OH2 OT -0.834000 15.9994 0 + 17500 W1 5004 TIP3 H1 HT 0.417000 1.0080 0 + 17501 W1 5004 TIP3 H2 HT 0.417000 1.0080 0 + 17502 W1 5005 TIP3 OH2 OT -0.834000 15.9994 0 + 17503 W1 5005 TIP3 H1 HT 0.417000 1.0080 0 + 17504 W1 5005 TIP3 H2 HT 0.417000 1.0080 0 + 17505 W1 5006 TIP3 OH2 OT -0.834000 15.9994 0 + 17506 W1 5006 TIP3 H1 HT 0.417000 1.0080 0 + 17507 W1 5006 TIP3 H2 HT 0.417000 1.0080 0 + 17508 W1 5007 TIP3 OH2 OT -0.834000 15.9994 0 + 17509 W1 5007 TIP3 H1 HT 0.417000 1.0080 0 + 17510 W1 5007 TIP3 H2 HT 0.417000 1.0080 0 + 17511 W1 5008 TIP3 OH2 OT -0.834000 15.9994 0 + 17512 W1 5008 TIP3 H1 HT 0.417000 1.0080 0 + 17513 W1 5008 TIP3 H2 HT 0.417000 1.0080 0 + 17514 W1 5009 TIP3 OH2 OT -0.834000 15.9994 0 + 17515 W1 5009 TIP3 H1 HT 0.417000 1.0080 0 + 17516 W1 5009 TIP3 H2 HT 0.417000 1.0080 0 + 17517 W1 5010 TIP3 OH2 OT -0.834000 15.9994 0 + 17518 W1 5010 TIP3 H1 HT 0.417000 1.0080 0 + 17519 W1 5010 TIP3 H2 HT 0.417000 1.0080 0 + 17520 W1 5011 TIP3 OH2 OT -0.834000 15.9994 0 + 17521 W1 5011 TIP3 H1 HT 0.417000 1.0080 0 + 17522 W1 5011 TIP3 H2 HT 0.417000 1.0080 0 + 17523 W1 5012 TIP3 OH2 OT -0.834000 15.9994 0 + 17524 W1 5012 TIP3 H1 HT 0.417000 1.0080 0 + 17525 W1 5012 TIP3 H2 HT 0.417000 1.0080 0 + 17526 W1 5013 TIP3 OH2 OT -0.834000 15.9994 0 + 17527 W1 5013 TIP3 H1 HT 0.417000 1.0080 0 + 17528 W1 5013 TIP3 H2 HT 0.417000 1.0080 0 + 17529 W1 5014 TIP3 OH2 OT -0.834000 15.9994 0 + 17530 W1 5014 TIP3 H1 HT 0.417000 1.0080 0 + 17531 W1 5014 TIP3 H2 HT 0.417000 1.0080 0 + 17532 W1 5015 TIP3 OH2 OT -0.834000 15.9994 0 + 17533 W1 5015 TIP3 H1 HT 0.417000 1.0080 0 + 17534 W1 5015 TIP3 H2 HT 0.417000 1.0080 0 + 17535 W1 5016 TIP3 OH2 OT -0.834000 15.9994 0 + 17536 W1 5016 TIP3 H1 HT 0.417000 1.0080 0 + 17537 W1 5016 TIP3 H2 HT 0.417000 1.0080 0 + 17538 W1 5017 TIP3 OH2 OT -0.834000 15.9994 0 + 17539 W1 5017 TIP3 H1 HT 0.417000 1.0080 0 + 17540 W1 5017 TIP3 H2 HT 0.417000 1.0080 0 + 17541 W1 5018 TIP3 OH2 OT -0.834000 15.9994 0 + 17542 W1 5018 TIP3 H1 HT 0.417000 1.0080 0 + 17543 W1 5018 TIP3 H2 HT 0.417000 1.0080 0 + 17544 W1 5019 TIP3 OH2 OT -0.834000 15.9994 0 + 17545 W1 5019 TIP3 H1 HT 0.417000 1.0080 0 + 17546 W1 5019 TIP3 H2 HT 0.417000 1.0080 0 + 17547 W1 5020 TIP3 OH2 OT -0.834000 15.9994 0 + 17548 W1 5020 TIP3 H1 HT 0.417000 1.0080 0 + 17549 W1 5020 TIP3 H2 HT 0.417000 1.0080 0 + 17550 W1 5021 TIP3 OH2 OT -0.834000 15.9994 0 + 17551 W1 5021 TIP3 H1 HT 0.417000 1.0080 0 + 17552 W1 5021 TIP3 H2 HT 0.417000 1.0080 0 + 17553 W1 5022 TIP3 OH2 OT -0.834000 15.9994 0 + 17554 W1 5022 TIP3 H1 HT 0.417000 1.0080 0 + 17555 W1 5022 TIP3 H2 HT 0.417000 1.0080 0 + 17556 W1 5023 TIP3 OH2 OT -0.834000 15.9994 0 + 17557 W1 5023 TIP3 H1 HT 0.417000 1.0080 0 + 17558 W1 5023 TIP3 H2 HT 0.417000 1.0080 0 + 17559 W1 5024 TIP3 OH2 OT -0.834000 15.9994 0 + 17560 W1 5024 TIP3 H1 HT 0.417000 1.0080 0 + 17561 W1 5024 TIP3 H2 HT 0.417000 1.0080 0 + 17562 W1 5025 TIP3 OH2 OT -0.834000 15.9994 0 + 17563 W1 5025 TIP3 H1 HT 0.417000 1.0080 0 + 17564 W1 5025 TIP3 H2 HT 0.417000 1.0080 0 + 17565 W1 5026 TIP3 OH2 OT -0.834000 15.9994 0 + 17566 W1 5026 TIP3 H1 HT 0.417000 1.0080 0 + 17567 W1 5026 TIP3 H2 HT 0.417000 1.0080 0 + 17568 W1 5027 TIP3 OH2 OT -0.834000 15.9994 0 + 17569 W1 5027 TIP3 H1 HT 0.417000 1.0080 0 + 17570 W1 5027 TIP3 H2 HT 0.417000 1.0080 0 + 17571 W1 5028 TIP3 OH2 OT -0.834000 15.9994 0 + 17572 W1 5028 TIP3 H1 HT 0.417000 1.0080 0 + 17573 W1 5028 TIP3 H2 HT 0.417000 1.0080 0 + 17574 W1 5029 TIP3 OH2 OT -0.834000 15.9994 0 + 17575 W1 5029 TIP3 H1 HT 0.417000 1.0080 0 + 17576 W1 5029 TIP3 H2 HT 0.417000 1.0080 0 + 17577 W1 5030 TIP3 OH2 OT -0.834000 15.9994 0 + 17578 W1 5030 TIP3 H1 HT 0.417000 1.0080 0 + 17579 W1 5030 TIP3 H2 HT 0.417000 1.0080 0 + 17580 W1 5031 TIP3 OH2 OT -0.834000 15.9994 0 + 17581 W1 5031 TIP3 H1 HT 0.417000 1.0080 0 + 17582 W1 5031 TIP3 H2 HT 0.417000 1.0080 0 + 17583 W1 5032 TIP3 OH2 OT -0.834000 15.9994 0 + 17584 W1 5032 TIP3 H1 HT 0.417000 1.0080 0 + 17585 W1 5032 TIP3 H2 HT 0.417000 1.0080 0 + 17586 W1 5033 TIP3 OH2 OT -0.834000 15.9994 0 + 17587 W1 5033 TIP3 H1 HT 0.417000 1.0080 0 + 17588 W1 5033 TIP3 H2 HT 0.417000 1.0080 0 + 17589 W1 5034 TIP3 OH2 OT -0.834000 15.9994 0 + 17590 W1 5034 TIP3 H1 HT 0.417000 1.0080 0 + 17591 W1 5034 TIP3 H2 HT 0.417000 1.0080 0 + 17592 W1 5035 TIP3 OH2 OT -0.834000 15.9994 0 + 17593 W1 5035 TIP3 H1 HT 0.417000 1.0080 0 + 17594 W1 5035 TIP3 H2 HT 0.417000 1.0080 0 + 17595 W1 5036 TIP3 OH2 OT -0.834000 15.9994 0 + 17596 W1 5036 TIP3 H1 HT 0.417000 1.0080 0 + 17597 W1 5036 TIP3 H2 HT 0.417000 1.0080 0 + 17598 W1 5037 TIP3 OH2 OT -0.834000 15.9994 0 + 17599 W1 5037 TIP3 H1 HT 0.417000 1.0080 0 + 17600 W1 5037 TIP3 H2 HT 0.417000 1.0080 0 + 17601 W1 5038 TIP3 OH2 OT -0.834000 15.9994 0 + 17602 W1 5038 TIP3 H1 HT 0.417000 1.0080 0 + 17603 W1 5038 TIP3 H2 HT 0.417000 1.0080 0 + 17604 W1 5039 TIP3 OH2 OT -0.834000 15.9994 0 + 17605 W1 5039 TIP3 H1 HT 0.417000 1.0080 0 + 17606 W1 5039 TIP3 H2 HT 0.417000 1.0080 0 + 17607 W1 5040 TIP3 OH2 OT -0.834000 15.9994 0 + 17608 W1 5040 TIP3 H1 HT 0.417000 1.0080 0 + 17609 W1 5040 TIP3 H2 HT 0.417000 1.0080 0 + 17610 W1 5041 TIP3 OH2 OT -0.834000 15.9994 0 + 17611 W1 5041 TIP3 H1 HT 0.417000 1.0080 0 + 17612 W1 5041 TIP3 H2 HT 0.417000 1.0080 0 + 17613 W1 5042 TIP3 OH2 OT -0.834000 15.9994 0 + 17614 W1 5042 TIP3 H1 HT 0.417000 1.0080 0 + 17615 W1 5042 TIP3 H2 HT 0.417000 1.0080 0 + 17616 W1 5043 TIP3 OH2 OT -0.834000 15.9994 0 + 17617 W1 5043 TIP3 H1 HT 0.417000 1.0080 0 + 17618 W1 5043 TIP3 H2 HT 0.417000 1.0080 0 + 17619 W1 5044 TIP3 OH2 OT -0.834000 15.9994 0 + 17620 W1 5044 TIP3 H1 HT 0.417000 1.0080 0 + 17621 W1 5044 TIP3 H2 HT 0.417000 1.0080 0 + 17622 W1 5045 TIP3 OH2 OT -0.834000 15.9994 0 + 17623 W1 5045 TIP3 H1 HT 0.417000 1.0080 0 + 17624 W1 5045 TIP3 H2 HT 0.417000 1.0080 0 + 17625 W1 5046 TIP3 OH2 OT -0.834000 15.9994 0 + 17626 W1 5046 TIP3 H1 HT 0.417000 1.0080 0 + 17627 W1 5046 TIP3 H2 HT 0.417000 1.0080 0 + 17628 W1 5047 TIP3 OH2 OT -0.834000 15.9994 0 + 17629 W1 5047 TIP3 H1 HT 0.417000 1.0080 0 + 17630 W1 5047 TIP3 H2 HT 0.417000 1.0080 0 + 17631 W1 5048 TIP3 OH2 OT -0.834000 15.9994 0 + 17632 W1 5048 TIP3 H1 HT 0.417000 1.0080 0 + 17633 W1 5048 TIP3 H2 HT 0.417000 1.0080 0 + 17634 W1 5049 TIP3 OH2 OT -0.834000 15.9994 0 + 17635 W1 5049 TIP3 H1 HT 0.417000 1.0080 0 + 17636 W1 5049 TIP3 H2 HT 0.417000 1.0080 0 + 17637 W1 5050 TIP3 OH2 OT -0.834000 15.9994 0 + 17638 W1 5050 TIP3 H1 HT 0.417000 1.0080 0 + 17639 W1 5050 TIP3 H2 HT 0.417000 1.0080 0 + 17640 W1 5051 TIP3 OH2 OT -0.834000 15.9994 0 + 17641 W1 5051 TIP3 H1 HT 0.417000 1.0080 0 + 17642 W1 5051 TIP3 H2 HT 0.417000 1.0080 0 + 17643 W1 5052 TIP3 OH2 OT -0.834000 15.9994 0 + 17644 W1 5052 TIP3 H1 HT 0.417000 1.0080 0 + 17645 W1 5052 TIP3 H2 HT 0.417000 1.0080 0 + 17646 W1 5053 TIP3 OH2 OT -0.834000 15.9994 0 + 17647 W1 5053 TIP3 H1 HT 0.417000 1.0080 0 + 17648 W1 5053 TIP3 H2 HT 0.417000 1.0080 0 + 17649 W1 5054 TIP3 OH2 OT -0.834000 15.9994 0 + 17650 W1 5054 TIP3 H1 HT 0.417000 1.0080 0 + 17651 W1 5054 TIP3 H2 HT 0.417000 1.0080 0 + 17652 W1 5055 TIP3 OH2 OT -0.834000 15.9994 0 + 17653 W1 5055 TIP3 H1 HT 0.417000 1.0080 0 + 17654 W1 5055 TIP3 H2 HT 0.417000 1.0080 0 + 17655 W1 5056 TIP3 OH2 OT -0.834000 15.9994 0 + 17656 W1 5056 TIP3 H1 HT 0.417000 1.0080 0 + 17657 W1 5056 TIP3 H2 HT 0.417000 1.0080 0 + 17658 W1 5057 TIP3 OH2 OT -0.834000 15.9994 0 + 17659 W1 5057 TIP3 H1 HT 0.417000 1.0080 0 + 17660 W1 5057 TIP3 H2 HT 0.417000 1.0080 0 + 17661 W1 5058 TIP3 OH2 OT -0.834000 15.9994 0 + 17662 W1 5058 TIP3 H1 HT 0.417000 1.0080 0 + 17663 W1 5058 TIP3 H2 HT 0.417000 1.0080 0 + 17664 W1 5059 TIP3 OH2 OT -0.834000 15.9994 0 + 17665 W1 5059 TIP3 H1 HT 0.417000 1.0080 0 + 17666 W1 5059 TIP3 H2 HT 0.417000 1.0080 0 + 17667 W1 5060 TIP3 OH2 OT -0.834000 15.9994 0 + 17668 W1 5060 TIP3 H1 HT 0.417000 1.0080 0 + 17669 W1 5060 TIP3 H2 HT 0.417000 1.0080 0 + 17670 W1 5061 TIP3 OH2 OT -0.834000 15.9994 0 + 17671 W1 5061 TIP3 H1 HT 0.417000 1.0080 0 + 17672 W1 5061 TIP3 H2 HT 0.417000 1.0080 0 + 17673 W1 5062 TIP3 OH2 OT -0.834000 15.9994 0 + 17674 W1 5062 TIP3 H1 HT 0.417000 1.0080 0 + 17675 W1 5062 TIP3 H2 HT 0.417000 1.0080 0 + 17676 W1 5063 TIP3 OH2 OT -0.834000 15.9994 0 + 17677 W1 5063 TIP3 H1 HT 0.417000 1.0080 0 + 17678 W1 5063 TIP3 H2 HT 0.417000 1.0080 0 + 17679 W1 5064 TIP3 OH2 OT -0.834000 15.9994 0 + 17680 W1 5064 TIP3 H1 HT 0.417000 1.0080 0 + 17681 W1 5064 TIP3 H2 HT 0.417000 1.0080 0 + 17682 W1 5065 TIP3 OH2 OT -0.834000 15.9994 0 + 17683 W1 5065 TIP3 H1 HT 0.417000 1.0080 0 + 17684 W1 5065 TIP3 H2 HT 0.417000 1.0080 0 + 17685 W1 5066 TIP3 OH2 OT -0.834000 15.9994 0 + 17686 W1 5066 TIP3 H1 HT 0.417000 1.0080 0 + 17687 W1 5066 TIP3 H2 HT 0.417000 1.0080 0 + 17688 W1 5067 TIP3 OH2 OT -0.834000 15.9994 0 + 17689 W1 5067 TIP3 H1 HT 0.417000 1.0080 0 + 17690 W1 5067 TIP3 H2 HT 0.417000 1.0080 0 + 17691 W1 5068 TIP3 OH2 OT -0.834000 15.9994 0 + 17692 W1 5068 TIP3 H1 HT 0.417000 1.0080 0 + 17693 W1 5068 TIP3 H2 HT 0.417000 1.0080 0 + 17694 W1 5069 TIP3 OH2 OT -0.834000 15.9994 0 + 17695 W1 5069 TIP3 H1 HT 0.417000 1.0080 0 + 17696 W1 5069 TIP3 H2 HT 0.417000 1.0080 0 + 17697 W1 5070 TIP3 OH2 OT -0.834000 15.9994 0 + 17698 W1 5070 TIP3 H1 HT 0.417000 1.0080 0 + 17699 W1 5070 TIP3 H2 HT 0.417000 1.0080 0 + 17700 W1 5071 TIP3 OH2 OT -0.834000 15.9994 0 + 17701 W1 5071 TIP3 H1 HT 0.417000 1.0080 0 + 17702 W1 5071 TIP3 H2 HT 0.417000 1.0080 0 + 17703 W1 5072 TIP3 OH2 OT -0.834000 15.9994 0 + 17704 W1 5072 TIP3 H1 HT 0.417000 1.0080 0 + 17705 W1 5072 TIP3 H2 HT 0.417000 1.0080 0 + 17706 W1 5073 TIP3 OH2 OT -0.834000 15.9994 0 + 17707 W1 5073 TIP3 H1 HT 0.417000 1.0080 0 + 17708 W1 5073 TIP3 H2 HT 0.417000 1.0080 0 + 17709 W1 5074 TIP3 OH2 OT -0.834000 15.9994 0 + 17710 W1 5074 TIP3 H1 HT 0.417000 1.0080 0 + 17711 W1 5074 TIP3 H2 HT 0.417000 1.0080 0 + 17712 W1 5075 TIP3 OH2 OT -0.834000 15.9994 0 + 17713 W1 5075 TIP3 H1 HT 0.417000 1.0080 0 + 17714 W1 5075 TIP3 H2 HT 0.417000 1.0080 0 + 17715 W1 5076 TIP3 OH2 OT -0.834000 15.9994 0 + 17716 W1 5076 TIP3 H1 HT 0.417000 1.0080 0 + 17717 W1 5076 TIP3 H2 HT 0.417000 1.0080 0 + 17718 W1 5077 TIP3 OH2 OT -0.834000 15.9994 0 + 17719 W1 5077 TIP3 H1 HT 0.417000 1.0080 0 + 17720 W1 5077 TIP3 H2 HT 0.417000 1.0080 0 + 17721 W1 5078 TIP3 OH2 OT -0.834000 15.9994 0 + 17722 W1 5078 TIP3 H1 HT 0.417000 1.0080 0 + 17723 W1 5078 TIP3 H2 HT 0.417000 1.0080 0 + 17724 W1 5079 TIP3 OH2 OT -0.834000 15.9994 0 + 17725 W1 5079 TIP3 H1 HT 0.417000 1.0080 0 + 17726 W1 5079 TIP3 H2 HT 0.417000 1.0080 0 + 17727 W1 5080 TIP3 OH2 OT -0.834000 15.9994 0 + 17728 W1 5080 TIP3 H1 HT 0.417000 1.0080 0 + 17729 W1 5080 TIP3 H2 HT 0.417000 1.0080 0 + 17730 W1 5081 TIP3 OH2 OT -0.834000 15.9994 0 + 17731 W1 5081 TIP3 H1 HT 0.417000 1.0080 0 + 17732 W1 5081 TIP3 H2 HT 0.417000 1.0080 0 + 17733 W1 5082 TIP3 OH2 OT -0.834000 15.9994 0 + 17734 W1 5082 TIP3 H1 HT 0.417000 1.0080 0 + 17735 W1 5082 TIP3 H2 HT 0.417000 1.0080 0 + 17736 W1 5083 TIP3 OH2 OT -0.834000 15.9994 0 + 17737 W1 5083 TIP3 H1 HT 0.417000 1.0080 0 + 17738 W1 5083 TIP3 H2 HT 0.417000 1.0080 0 + 17739 W1 5084 TIP3 OH2 OT -0.834000 15.9994 0 + 17740 W1 5084 TIP3 H1 HT 0.417000 1.0080 0 + 17741 W1 5084 TIP3 H2 HT 0.417000 1.0080 0 + 17742 W1 5085 TIP3 OH2 OT -0.834000 15.9994 0 + 17743 W1 5085 TIP3 H1 HT 0.417000 1.0080 0 + 17744 W1 5085 TIP3 H2 HT 0.417000 1.0080 0 + 17745 W1 5086 TIP3 OH2 OT -0.834000 15.9994 0 + 17746 W1 5086 TIP3 H1 HT 0.417000 1.0080 0 + 17747 W1 5086 TIP3 H2 HT 0.417000 1.0080 0 + 17748 W1 5087 TIP3 OH2 OT -0.834000 15.9994 0 + 17749 W1 5087 TIP3 H1 HT 0.417000 1.0080 0 + 17750 W1 5087 TIP3 H2 HT 0.417000 1.0080 0 + 17751 W1 5088 TIP3 OH2 OT -0.834000 15.9994 0 + 17752 W1 5088 TIP3 H1 HT 0.417000 1.0080 0 + 17753 W1 5088 TIP3 H2 HT 0.417000 1.0080 0 + 17754 W1 5089 TIP3 OH2 OT -0.834000 15.9994 0 + 17755 W1 5089 TIP3 H1 HT 0.417000 1.0080 0 + 17756 W1 5089 TIP3 H2 HT 0.417000 1.0080 0 + 17757 W1 5090 TIP3 OH2 OT -0.834000 15.9994 0 + 17758 W1 5090 TIP3 H1 HT 0.417000 1.0080 0 + 17759 W1 5090 TIP3 H2 HT 0.417000 1.0080 0 + 17760 W1 5091 TIP3 OH2 OT -0.834000 15.9994 0 + 17761 W1 5091 TIP3 H1 HT 0.417000 1.0080 0 + 17762 W1 5091 TIP3 H2 HT 0.417000 1.0080 0 + 17763 W1 5092 TIP3 OH2 OT -0.834000 15.9994 0 + 17764 W1 5092 TIP3 H1 HT 0.417000 1.0080 0 + 17765 W1 5092 TIP3 H2 HT 0.417000 1.0080 0 + 17766 W1 5093 TIP3 OH2 OT -0.834000 15.9994 0 + 17767 W1 5093 TIP3 H1 HT 0.417000 1.0080 0 + 17768 W1 5093 TIP3 H2 HT 0.417000 1.0080 0 + 17769 W1 5094 TIP3 OH2 OT -0.834000 15.9994 0 + 17770 W1 5094 TIP3 H1 HT 0.417000 1.0080 0 + 17771 W1 5094 TIP3 H2 HT 0.417000 1.0080 0 + 17772 W1 5095 TIP3 OH2 OT -0.834000 15.9994 0 + 17773 W1 5095 TIP3 H1 HT 0.417000 1.0080 0 + 17774 W1 5095 TIP3 H2 HT 0.417000 1.0080 0 + 17775 W1 5096 TIP3 OH2 OT -0.834000 15.9994 0 + 17776 W1 5096 TIP3 H1 HT 0.417000 1.0080 0 + 17777 W1 5096 TIP3 H2 HT 0.417000 1.0080 0 + 17778 W1 5097 TIP3 OH2 OT -0.834000 15.9994 0 + 17779 W1 5097 TIP3 H1 HT 0.417000 1.0080 0 + 17780 W1 5097 TIP3 H2 HT 0.417000 1.0080 0 + 17781 W1 5098 TIP3 OH2 OT -0.834000 15.9994 0 + 17782 W1 5098 TIP3 H1 HT 0.417000 1.0080 0 + 17783 W1 5098 TIP3 H2 HT 0.417000 1.0080 0 + 17784 W1 5099 TIP3 OH2 OT -0.834000 15.9994 0 + 17785 W1 5099 TIP3 H1 HT 0.417000 1.0080 0 + 17786 W1 5099 TIP3 H2 HT 0.417000 1.0080 0 + 17787 W1 5100 TIP3 OH2 OT -0.834000 15.9994 0 + 17788 W1 5100 TIP3 H1 HT 0.417000 1.0080 0 + 17789 W1 5100 TIP3 H2 HT 0.417000 1.0080 0 + 17790 W1 5101 TIP3 OH2 OT -0.834000 15.9994 0 + 17791 W1 5101 TIP3 H1 HT 0.417000 1.0080 0 + 17792 W1 5101 TIP3 H2 HT 0.417000 1.0080 0 + 17793 W1 5102 TIP3 OH2 OT -0.834000 15.9994 0 + 17794 W1 5102 TIP3 H1 HT 0.417000 1.0080 0 + 17795 W1 5102 TIP3 H2 HT 0.417000 1.0080 0 + 17796 W1 5103 TIP3 OH2 OT -0.834000 15.9994 0 + 17797 W1 5103 TIP3 H1 HT 0.417000 1.0080 0 + 17798 W1 5103 TIP3 H2 HT 0.417000 1.0080 0 + 17799 W1 5104 TIP3 OH2 OT -0.834000 15.9994 0 + 17800 W1 5104 TIP3 H1 HT 0.417000 1.0080 0 + 17801 W1 5104 TIP3 H2 HT 0.417000 1.0080 0 + 17802 W1 5105 TIP3 OH2 OT -0.834000 15.9994 0 + 17803 W1 5105 TIP3 H1 HT 0.417000 1.0080 0 + 17804 W1 5105 TIP3 H2 HT 0.417000 1.0080 0 + 17805 W1 5106 TIP3 OH2 OT -0.834000 15.9994 0 + 17806 W1 5106 TIP3 H1 HT 0.417000 1.0080 0 + 17807 W1 5106 TIP3 H2 HT 0.417000 1.0080 0 + 17808 W1 5107 TIP3 OH2 OT -0.834000 15.9994 0 + 17809 W1 5107 TIP3 H1 HT 0.417000 1.0080 0 + 17810 W1 5107 TIP3 H2 HT 0.417000 1.0080 0 + 17811 W1 5108 TIP3 OH2 OT -0.834000 15.9994 0 + 17812 W1 5108 TIP3 H1 HT 0.417000 1.0080 0 + 17813 W1 5108 TIP3 H2 HT 0.417000 1.0080 0 + 17814 W1 5109 TIP3 OH2 OT -0.834000 15.9994 0 + 17815 W1 5109 TIP3 H1 HT 0.417000 1.0080 0 + 17816 W1 5109 TIP3 H2 HT 0.417000 1.0080 0 + 17817 W1 5110 TIP3 OH2 OT -0.834000 15.9994 0 + 17818 W1 5110 TIP3 H1 HT 0.417000 1.0080 0 + 17819 W1 5110 TIP3 H2 HT 0.417000 1.0080 0 + 17820 W1 5111 TIP3 OH2 OT -0.834000 15.9994 0 + 17821 W1 5111 TIP3 H1 HT 0.417000 1.0080 0 + 17822 W1 5111 TIP3 H2 HT 0.417000 1.0080 0 + 17823 W1 5112 TIP3 OH2 OT -0.834000 15.9994 0 + 17824 W1 5112 TIP3 H1 HT 0.417000 1.0080 0 + 17825 W1 5112 TIP3 H2 HT 0.417000 1.0080 0 + 17826 W1 5113 TIP3 OH2 OT -0.834000 15.9994 0 + 17827 W1 5113 TIP3 H1 HT 0.417000 1.0080 0 + 17828 W1 5113 TIP3 H2 HT 0.417000 1.0080 0 + 17829 W1 5114 TIP3 OH2 OT -0.834000 15.9994 0 + 17830 W1 5114 TIP3 H1 HT 0.417000 1.0080 0 + 17831 W1 5114 TIP3 H2 HT 0.417000 1.0080 0 + 17832 W1 5115 TIP3 OH2 OT -0.834000 15.9994 0 + 17833 W1 5115 TIP3 H1 HT 0.417000 1.0080 0 + 17834 W1 5115 TIP3 H2 HT 0.417000 1.0080 0 + 17835 W1 5116 TIP3 OH2 OT -0.834000 15.9994 0 + 17836 W1 5116 TIP3 H1 HT 0.417000 1.0080 0 + 17837 W1 5116 TIP3 H2 HT 0.417000 1.0080 0 + 17838 W1 5117 TIP3 OH2 OT -0.834000 15.9994 0 + 17839 W1 5117 TIP3 H1 HT 0.417000 1.0080 0 + 17840 W1 5117 TIP3 H2 HT 0.417000 1.0080 0 + 17841 W1 5118 TIP3 OH2 OT -0.834000 15.9994 0 + 17842 W1 5118 TIP3 H1 HT 0.417000 1.0080 0 + 17843 W1 5118 TIP3 H2 HT 0.417000 1.0080 0 + 17844 W1 5119 TIP3 OH2 OT -0.834000 15.9994 0 + 17845 W1 5119 TIP3 H1 HT 0.417000 1.0080 0 + 17846 W1 5119 TIP3 H2 HT 0.417000 1.0080 0 + 17847 W1 5120 TIP3 OH2 OT -0.834000 15.9994 0 + 17848 W1 5120 TIP3 H1 HT 0.417000 1.0080 0 + 17849 W1 5120 TIP3 H2 HT 0.417000 1.0080 0 + 17850 W1 5121 TIP3 OH2 OT -0.834000 15.9994 0 + 17851 W1 5121 TIP3 H1 HT 0.417000 1.0080 0 + 17852 W1 5121 TIP3 H2 HT 0.417000 1.0080 0 + 17853 W1 5122 TIP3 OH2 OT -0.834000 15.9994 0 + 17854 W1 5122 TIP3 H1 HT 0.417000 1.0080 0 + 17855 W1 5122 TIP3 H2 HT 0.417000 1.0080 0 + 17856 W1 5123 TIP3 OH2 OT -0.834000 15.9994 0 + 17857 W1 5123 TIP3 H1 HT 0.417000 1.0080 0 + 17858 W1 5123 TIP3 H2 HT 0.417000 1.0080 0 + 17859 W1 5124 TIP3 OH2 OT -0.834000 15.9994 0 + 17860 W1 5124 TIP3 H1 HT 0.417000 1.0080 0 + 17861 W1 5124 TIP3 H2 HT 0.417000 1.0080 0 + 17862 W1 5125 TIP3 OH2 OT -0.834000 15.9994 0 + 17863 W1 5125 TIP3 H1 HT 0.417000 1.0080 0 + 17864 W1 5125 TIP3 H2 HT 0.417000 1.0080 0 + 17865 W1 5126 TIP3 OH2 OT -0.834000 15.9994 0 + 17866 W1 5126 TIP3 H1 HT 0.417000 1.0080 0 + 17867 W1 5126 TIP3 H2 HT 0.417000 1.0080 0 + 17868 W1 5127 TIP3 OH2 OT -0.834000 15.9994 0 + 17869 W1 5127 TIP3 H1 HT 0.417000 1.0080 0 + 17870 W1 5127 TIP3 H2 HT 0.417000 1.0080 0 + 17871 W1 5128 TIP3 OH2 OT -0.834000 15.9994 0 + 17872 W1 5128 TIP3 H1 HT 0.417000 1.0080 0 + 17873 W1 5128 TIP3 H2 HT 0.417000 1.0080 0 + 17874 W1 5129 TIP3 OH2 OT -0.834000 15.9994 0 + 17875 W1 5129 TIP3 H1 HT 0.417000 1.0080 0 + 17876 W1 5129 TIP3 H2 HT 0.417000 1.0080 0 + 17877 W1 5130 TIP3 OH2 OT -0.834000 15.9994 0 + 17878 W1 5130 TIP3 H1 HT 0.417000 1.0080 0 + 17879 W1 5130 TIP3 H2 HT 0.417000 1.0080 0 + 17880 W1 5131 TIP3 OH2 OT -0.834000 15.9994 0 + 17881 W1 5131 TIP3 H1 HT 0.417000 1.0080 0 + 17882 W1 5131 TIP3 H2 HT 0.417000 1.0080 0 + 17883 W1 5132 TIP3 OH2 OT -0.834000 15.9994 0 + 17884 W1 5132 TIP3 H1 HT 0.417000 1.0080 0 + 17885 W1 5132 TIP3 H2 HT 0.417000 1.0080 0 + 17886 W1 5133 TIP3 OH2 OT -0.834000 15.9994 0 + 17887 W1 5133 TIP3 H1 HT 0.417000 1.0080 0 + 17888 W1 5133 TIP3 H2 HT 0.417000 1.0080 0 + 17889 W1 5134 TIP3 OH2 OT -0.834000 15.9994 0 + 17890 W1 5134 TIP3 H1 HT 0.417000 1.0080 0 + 17891 W1 5134 TIP3 H2 HT 0.417000 1.0080 0 + 17892 W1 5135 TIP3 OH2 OT -0.834000 15.9994 0 + 17893 W1 5135 TIP3 H1 HT 0.417000 1.0080 0 + 17894 W1 5135 TIP3 H2 HT 0.417000 1.0080 0 + 17895 W1 5136 TIP3 OH2 OT -0.834000 15.9994 0 + 17896 W1 5136 TIP3 H1 HT 0.417000 1.0080 0 + 17897 W1 5136 TIP3 H2 HT 0.417000 1.0080 0 + 17898 W1 5137 TIP3 OH2 OT -0.834000 15.9994 0 + 17899 W1 5137 TIP3 H1 HT 0.417000 1.0080 0 + 17900 W1 5137 TIP3 H2 HT 0.417000 1.0080 0 + 17901 W1 5138 TIP3 OH2 OT -0.834000 15.9994 0 + 17902 W1 5138 TIP3 H1 HT 0.417000 1.0080 0 + 17903 W1 5138 TIP3 H2 HT 0.417000 1.0080 0 + 17904 W1 5139 TIP3 OH2 OT -0.834000 15.9994 0 + 17905 W1 5139 TIP3 H1 HT 0.417000 1.0080 0 + 17906 W1 5139 TIP3 H2 HT 0.417000 1.0080 0 + 17907 W1 5140 TIP3 OH2 OT -0.834000 15.9994 0 + 17908 W1 5140 TIP3 H1 HT 0.417000 1.0080 0 + 17909 W1 5140 TIP3 H2 HT 0.417000 1.0080 0 + 17910 W1 5141 TIP3 OH2 OT -0.834000 15.9994 0 + 17911 W1 5141 TIP3 H1 HT 0.417000 1.0080 0 + 17912 W1 5141 TIP3 H2 HT 0.417000 1.0080 0 + 17913 W1 5142 TIP3 OH2 OT -0.834000 15.9994 0 + 17914 W1 5142 TIP3 H1 HT 0.417000 1.0080 0 + 17915 W1 5142 TIP3 H2 HT 0.417000 1.0080 0 + 17916 W1 5143 TIP3 OH2 OT -0.834000 15.9994 0 + 17917 W1 5143 TIP3 H1 HT 0.417000 1.0080 0 + 17918 W1 5143 TIP3 H2 HT 0.417000 1.0080 0 + 17919 W1 5144 TIP3 OH2 OT -0.834000 15.9994 0 + 17920 W1 5144 TIP3 H1 HT 0.417000 1.0080 0 + 17921 W1 5144 TIP3 H2 HT 0.417000 1.0080 0 + 17922 W1 5145 TIP3 OH2 OT -0.834000 15.9994 0 + 17923 W1 5145 TIP3 H1 HT 0.417000 1.0080 0 + 17924 W1 5145 TIP3 H2 HT 0.417000 1.0080 0 + 17925 W1 5146 TIP3 OH2 OT -0.834000 15.9994 0 + 17926 W1 5146 TIP3 H1 HT 0.417000 1.0080 0 + 17927 W1 5146 TIP3 H2 HT 0.417000 1.0080 0 + 17928 W1 5147 TIP3 OH2 OT -0.834000 15.9994 0 + 17929 W1 5147 TIP3 H1 HT 0.417000 1.0080 0 + 17930 W1 5147 TIP3 H2 HT 0.417000 1.0080 0 + 17931 W1 5148 TIP3 OH2 OT -0.834000 15.9994 0 + 17932 W1 5148 TIP3 H1 HT 0.417000 1.0080 0 + 17933 W1 5148 TIP3 H2 HT 0.417000 1.0080 0 + 17934 W1 5149 TIP3 OH2 OT -0.834000 15.9994 0 + 17935 W1 5149 TIP3 H1 HT 0.417000 1.0080 0 + 17936 W1 5149 TIP3 H2 HT 0.417000 1.0080 0 + 17937 W1 5150 TIP3 OH2 OT -0.834000 15.9994 0 + 17938 W1 5150 TIP3 H1 HT 0.417000 1.0080 0 + 17939 W1 5150 TIP3 H2 HT 0.417000 1.0080 0 + 17940 W1 5151 TIP3 OH2 OT -0.834000 15.9994 0 + 17941 W1 5151 TIP3 H1 HT 0.417000 1.0080 0 + 17942 W1 5151 TIP3 H2 HT 0.417000 1.0080 0 + 17943 W1 5152 TIP3 OH2 OT -0.834000 15.9994 0 + 17944 W1 5152 TIP3 H1 HT 0.417000 1.0080 0 + 17945 W1 5152 TIP3 H2 HT 0.417000 1.0080 0 + 17946 W1 5153 TIP3 OH2 OT -0.834000 15.9994 0 + 17947 W1 5153 TIP3 H1 HT 0.417000 1.0080 0 + 17948 W1 5153 TIP3 H2 HT 0.417000 1.0080 0 + 17949 W1 5154 TIP3 OH2 OT -0.834000 15.9994 0 + 17950 W1 5154 TIP3 H1 HT 0.417000 1.0080 0 + 17951 W1 5154 TIP3 H2 HT 0.417000 1.0080 0 + 17952 W1 5155 TIP3 OH2 OT -0.834000 15.9994 0 + 17953 W1 5155 TIP3 H1 HT 0.417000 1.0080 0 + 17954 W1 5155 TIP3 H2 HT 0.417000 1.0080 0 + 17955 W1 5156 TIP3 OH2 OT -0.834000 15.9994 0 + 17956 W1 5156 TIP3 H1 HT 0.417000 1.0080 0 + 17957 W1 5156 TIP3 H2 HT 0.417000 1.0080 0 + 17958 W1 5157 TIP3 OH2 OT -0.834000 15.9994 0 + 17959 W1 5157 TIP3 H1 HT 0.417000 1.0080 0 + 17960 W1 5157 TIP3 H2 HT 0.417000 1.0080 0 + 17961 W1 5158 TIP3 OH2 OT -0.834000 15.9994 0 + 17962 W1 5158 TIP3 H1 HT 0.417000 1.0080 0 + 17963 W1 5158 TIP3 H2 HT 0.417000 1.0080 0 + 17964 W1 5159 TIP3 OH2 OT -0.834000 15.9994 0 + 17965 W1 5159 TIP3 H1 HT 0.417000 1.0080 0 + 17966 W1 5159 TIP3 H2 HT 0.417000 1.0080 0 + 17967 W1 5160 TIP3 OH2 OT -0.834000 15.9994 0 + 17968 W1 5160 TIP3 H1 HT 0.417000 1.0080 0 + 17969 W1 5160 TIP3 H2 HT 0.417000 1.0080 0 + 17970 W1 5161 TIP3 OH2 OT -0.834000 15.9994 0 + 17971 W1 5161 TIP3 H1 HT 0.417000 1.0080 0 + 17972 W1 5161 TIP3 H2 HT 0.417000 1.0080 0 + 17973 W1 5162 TIP3 OH2 OT -0.834000 15.9994 0 + 17974 W1 5162 TIP3 H1 HT 0.417000 1.0080 0 + 17975 W1 5162 TIP3 H2 HT 0.417000 1.0080 0 + 17976 W1 5163 TIP3 OH2 OT -0.834000 15.9994 0 + 17977 W1 5163 TIP3 H1 HT 0.417000 1.0080 0 + 17978 W1 5163 TIP3 H2 HT 0.417000 1.0080 0 + 17979 W1 5164 TIP3 OH2 OT -0.834000 15.9994 0 + 17980 W1 5164 TIP3 H1 HT 0.417000 1.0080 0 + 17981 W1 5164 TIP3 H2 HT 0.417000 1.0080 0 + 17982 W1 5165 TIP3 OH2 OT -0.834000 15.9994 0 + 17983 W1 5165 TIP3 H1 HT 0.417000 1.0080 0 + 17984 W1 5165 TIP3 H2 HT 0.417000 1.0080 0 + 17985 W1 5166 TIP3 OH2 OT -0.834000 15.9994 0 + 17986 W1 5166 TIP3 H1 HT 0.417000 1.0080 0 + 17987 W1 5166 TIP3 H2 HT 0.417000 1.0080 0 + 17988 W1 5167 TIP3 OH2 OT -0.834000 15.9994 0 + 17989 W1 5167 TIP3 H1 HT 0.417000 1.0080 0 + 17990 W1 5167 TIP3 H2 HT 0.417000 1.0080 0 + 17991 W1 5168 TIP3 OH2 OT -0.834000 15.9994 0 + 17992 W1 5168 TIP3 H1 HT 0.417000 1.0080 0 + 17993 W1 5168 TIP3 H2 HT 0.417000 1.0080 0 + 17994 W1 5169 TIP3 OH2 OT -0.834000 15.9994 0 + 17995 W1 5169 TIP3 H1 HT 0.417000 1.0080 0 + 17996 W1 5169 TIP3 H2 HT 0.417000 1.0080 0 + 17997 W1 5170 TIP3 OH2 OT -0.834000 15.9994 0 + 17998 W1 5170 TIP3 H1 HT 0.417000 1.0080 0 + 17999 W1 5170 TIP3 H2 HT 0.417000 1.0080 0 + 18000 W1 5171 TIP3 OH2 OT -0.834000 15.9994 0 + 18001 W1 5171 TIP3 H1 HT 0.417000 1.0080 0 + 18002 W1 5171 TIP3 H2 HT 0.417000 1.0080 0 + 18003 W1 5172 TIP3 OH2 OT -0.834000 15.9994 0 + 18004 W1 5172 TIP3 H1 HT 0.417000 1.0080 0 + 18005 W1 5172 TIP3 H2 HT 0.417000 1.0080 0 + 18006 W1 5173 TIP3 OH2 OT -0.834000 15.9994 0 + 18007 W1 5173 TIP3 H1 HT 0.417000 1.0080 0 + 18008 W1 5173 TIP3 H2 HT 0.417000 1.0080 0 + 18009 W1 5174 TIP3 OH2 OT -0.834000 15.9994 0 + 18010 W1 5174 TIP3 H1 HT 0.417000 1.0080 0 + 18011 W1 5174 TIP3 H2 HT 0.417000 1.0080 0 + 18012 W1 5175 TIP3 OH2 OT -0.834000 15.9994 0 + 18013 W1 5175 TIP3 H1 HT 0.417000 1.0080 0 + 18014 W1 5175 TIP3 H2 HT 0.417000 1.0080 0 + 18015 W1 5176 TIP3 OH2 OT -0.834000 15.9994 0 + 18016 W1 5176 TIP3 H1 HT 0.417000 1.0080 0 + 18017 W1 5176 TIP3 H2 HT 0.417000 1.0080 0 + 18018 W1 5177 TIP3 OH2 OT -0.834000 15.9994 0 + 18019 W1 5177 TIP3 H1 HT 0.417000 1.0080 0 + 18020 W1 5177 TIP3 H2 HT 0.417000 1.0080 0 + 18021 W1 5178 TIP3 OH2 OT -0.834000 15.9994 0 + 18022 W1 5178 TIP3 H1 HT 0.417000 1.0080 0 + 18023 W1 5178 TIP3 H2 HT 0.417000 1.0080 0 + 18024 W1 5179 TIP3 OH2 OT -0.834000 15.9994 0 + 18025 W1 5179 TIP3 H1 HT 0.417000 1.0080 0 + 18026 W1 5179 TIP3 H2 HT 0.417000 1.0080 0 + 18027 W1 5180 TIP3 OH2 OT -0.834000 15.9994 0 + 18028 W1 5180 TIP3 H1 HT 0.417000 1.0080 0 + 18029 W1 5180 TIP3 H2 HT 0.417000 1.0080 0 + 18030 W1 5181 TIP3 OH2 OT -0.834000 15.9994 0 + 18031 W1 5181 TIP3 H1 HT 0.417000 1.0080 0 + 18032 W1 5181 TIP3 H2 HT 0.417000 1.0080 0 + 18033 W1 5182 TIP3 OH2 OT -0.834000 15.9994 0 + 18034 W1 5182 TIP3 H1 HT 0.417000 1.0080 0 + 18035 W1 5182 TIP3 H2 HT 0.417000 1.0080 0 + 18036 W1 5183 TIP3 OH2 OT -0.834000 15.9994 0 + 18037 W1 5183 TIP3 H1 HT 0.417000 1.0080 0 + 18038 W1 5183 TIP3 H2 HT 0.417000 1.0080 0 + 18039 W1 5184 TIP3 OH2 OT -0.834000 15.9994 0 + 18040 W1 5184 TIP3 H1 HT 0.417000 1.0080 0 + 18041 W1 5184 TIP3 H2 HT 0.417000 1.0080 0 + 18042 W1 5185 TIP3 OH2 OT -0.834000 15.9994 0 + 18043 W1 5185 TIP3 H1 HT 0.417000 1.0080 0 + 18044 W1 5185 TIP3 H2 HT 0.417000 1.0080 0 + 18045 W1 5186 TIP3 OH2 OT -0.834000 15.9994 0 + 18046 W1 5186 TIP3 H1 HT 0.417000 1.0080 0 + 18047 W1 5186 TIP3 H2 HT 0.417000 1.0080 0 + 18048 W1 5187 TIP3 OH2 OT -0.834000 15.9994 0 + 18049 W1 5187 TIP3 H1 HT 0.417000 1.0080 0 + 18050 W1 5187 TIP3 H2 HT 0.417000 1.0080 0 + 18051 W1 5188 TIP3 OH2 OT -0.834000 15.9994 0 + 18052 W1 5188 TIP3 H1 HT 0.417000 1.0080 0 + 18053 W1 5188 TIP3 H2 HT 0.417000 1.0080 0 + 18054 W1 5189 TIP3 OH2 OT -0.834000 15.9994 0 + 18055 W1 5189 TIP3 H1 HT 0.417000 1.0080 0 + 18056 W1 5189 TIP3 H2 HT 0.417000 1.0080 0 + 18057 W1 5190 TIP3 OH2 OT -0.834000 15.9994 0 + 18058 W1 5190 TIP3 H1 HT 0.417000 1.0080 0 + 18059 W1 5190 TIP3 H2 HT 0.417000 1.0080 0 + 18060 W1 5191 TIP3 OH2 OT -0.834000 15.9994 0 + 18061 W1 5191 TIP3 H1 HT 0.417000 1.0080 0 + 18062 W1 5191 TIP3 H2 HT 0.417000 1.0080 0 + 18063 W1 5192 TIP3 OH2 OT -0.834000 15.9994 0 + 18064 W1 5192 TIP3 H1 HT 0.417000 1.0080 0 + 18065 W1 5192 TIP3 H2 HT 0.417000 1.0080 0 + 18066 W1 5193 TIP3 OH2 OT -0.834000 15.9994 0 + 18067 W1 5193 TIP3 H1 HT 0.417000 1.0080 0 + 18068 W1 5193 TIP3 H2 HT 0.417000 1.0080 0 + 18069 W1 5194 TIP3 OH2 OT -0.834000 15.9994 0 + 18070 W1 5194 TIP3 H1 HT 0.417000 1.0080 0 + 18071 W1 5194 TIP3 H2 HT 0.417000 1.0080 0 + 18072 W1 5195 TIP3 OH2 OT -0.834000 15.9994 0 + 18073 W1 5195 TIP3 H1 HT 0.417000 1.0080 0 + 18074 W1 5195 TIP3 H2 HT 0.417000 1.0080 0 + 18075 W1 5196 TIP3 OH2 OT -0.834000 15.9994 0 + 18076 W1 5196 TIP3 H1 HT 0.417000 1.0080 0 + 18077 W1 5196 TIP3 H2 HT 0.417000 1.0080 0 + 18078 W1 5197 TIP3 OH2 OT -0.834000 15.9994 0 + 18079 W1 5197 TIP3 H1 HT 0.417000 1.0080 0 + 18080 W1 5197 TIP3 H2 HT 0.417000 1.0080 0 + 18081 W1 5198 TIP3 OH2 OT -0.834000 15.9994 0 + 18082 W1 5198 TIP3 H1 HT 0.417000 1.0080 0 + 18083 W1 5198 TIP3 H2 HT 0.417000 1.0080 0 + 18084 W1 5199 TIP3 OH2 OT -0.834000 15.9994 0 + 18085 W1 5199 TIP3 H1 HT 0.417000 1.0080 0 + 18086 W1 5199 TIP3 H2 HT 0.417000 1.0080 0 + 18087 W1 5200 TIP3 OH2 OT -0.834000 15.9994 0 + 18088 W1 5200 TIP3 H1 HT 0.417000 1.0080 0 + 18089 W1 5200 TIP3 H2 HT 0.417000 1.0080 0 + 18090 W1 5201 TIP3 OH2 OT -0.834000 15.9994 0 + 18091 W1 5201 TIP3 H1 HT 0.417000 1.0080 0 + 18092 W1 5201 TIP3 H2 HT 0.417000 1.0080 0 + 18093 W1 5202 TIP3 OH2 OT -0.834000 15.9994 0 + 18094 W1 5202 TIP3 H1 HT 0.417000 1.0080 0 + 18095 W1 5202 TIP3 H2 HT 0.417000 1.0080 0 + 18096 W1 5203 TIP3 OH2 OT -0.834000 15.9994 0 + 18097 W1 5203 TIP3 H1 HT 0.417000 1.0080 0 + 18098 W1 5203 TIP3 H2 HT 0.417000 1.0080 0 + 18099 W1 5204 TIP3 OH2 OT -0.834000 15.9994 0 + 18100 W1 5204 TIP3 H1 HT 0.417000 1.0080 0 + 18101 W1 5204 TIP3 H2 HT 0.417000 1.0080 0 + 18102 W1 5205 TIP3 OH2 OT -0.834000 15.9994 0 + 18103 W1 5205 TIP3 H1 HT 0.417000 1.0080 0 + 18104 W1 5205 TIP3 H2 HT 0.417000 1.0080 0 + 18105 W1 5206 TIP3 OH2 OT -0.834000 15.9994 0 + 18106 W1 5206 TIP3 H1 HT 0.417000 1.0080 0 + 18107 W1 5206 TIP3 H2 HT 0.417000 1.0080 0 + 18108 W1 5207 TIP3 OH2 OT -0.834000 15.9994 0 + 18109 W1 5207 TIP3 H1 HT 0.417000 1.0080 0 + 18110 W1 5207 TIP3 H2 HT 0.417000 1.0080 0 + 18111 W1 5208 TIP3 OH2 OT -0.834000 15.9994 0 + 18112 W1 5208 TIP3 H1 HT 0.417000 1.0080 0 + 18113 W1 5208 TIP3 H2 HT 0.417000 1.0080 0 + 18114 W1 5209 TIP3 OH2 OT -0.834000 15.9994 0 + 18115 W1 5209 TIP3 H1 HT 0.417000 1.0080 0 + 18116 W1 5209 TIP3 H2 HT 0.417000 1.0080 0 + 18117 W1 5210 TIP3 OH2 OT -0.834000 15.9994 0 + 18118 W1 5210 TIP3 H1 HT 0.417000 1.0080 0 + 18119 W1 5210 TIP3 H2 HT 0.417000 1.0080 0 + 18120 W1 5211 TIP3 OH2 OT -0.834000 15.9994 0 + 18121 W1 5211 TIP3 H1 HT 0.417000 1.0080 0 + 18122 W1 5211 TIP3 H2 HT 0.417000 1.0080 0 + 18123 W1 5212 TIP3 OH2 OT -0.834000 15.9994 0 + 18124 W1 5212 TIP3 H1 HT 0.417000 1.0080 0 + 18125 W1 5212 TIP3 H2 HT 0.417000 1.0080 0 + 18126 W1 5213 TIP3 OH2 OT -0.834000 15.9994 0 + 18127 W1 5213 TIP3 H1 HT 0.417000 1.0080 0 + 18128 W1 5213 TIP3 H2 HT 0.417000 1.0080 0 + 18129 W1 5214 TIP3 OH2 OT -0.834000 15.9994 0 + 18130 W1 5214 TIP3 H1 HT 0.417000 1.0080 0 + 18131 W1 5214 TIP3 H2 HT 0.417000 1.0080 0 + 18132 W1 5215 TIP3 OH2 OT -0.834000 15.9994 0 + 18133 W1 5215 TIP3 H1 HT 0.417000 1.0080 0 + 18134 W1 5215 TIP3 H2 HT 0.417000 1.0080 0 + 18135 W1 5216 TIP3 OH2 OT -0.834000 15.9994 0 + 18136 W1 5216 TIP3 H1 HT 0.417000 1.0080 0 + 18137 W1 5216 TIP3 H2 HT 0.417000 1.0080 0 + 18138 W1 5217 TIP3 OH2 OT -0.834000 15.9994 0 + 18139 W1 5217 TIP3 H1 HT 0.417000 1.0080 0 + 18140 W1 5217 TIP3 H2 HT 0.417000 1.0080 0 + 18141 W1 5218 TIP3 OH2 OT -0.834000 15.9994 0 + 18142 W1 5218 TIP3 H1 HT 0.417000 1.0080 0 + 18143 W1 5218 TIP3 H2 HT 0.417000 1.0080 0 + 18144 W1 5219 TIP3 OH2 OT -0.834000 15.9994 0 + 18145 W1 5219 TIP3 H1 HT 0.417000 1.0080 0 + 18146 W1 5219 TIP3 H2 HT 0.417000 1.0080 0 + 18147 W1 5220 TIP3 OH2 OT -0.834000 15.9994 0 + 18148 W1 5220 TIP3 H1 HT 0.417000 1.0080 0 + 18149 W1 5220 TIP3 H2 HT 0.417000 1.0080 0 + 18150 W1 5221 TIP3 OH2 OT -0.834000 15.9994 0 + 18151 W1 5221 TIP3 H1 HT 0.417000 1.0080 0 + 18152 W1 5221 TIP3 H2 HT 0.417000 1.0080 0 + 18153 W1 5222 TIP3 OH2 OT -0.834000 15.9994 0 + 18154 W1 5222 TIP3 H1 HT 0.417000 1.0080 0 + 18155 W1 5222 TIP3 H2 HT 0.417000 1.0080 0 + 18156 W1 5223 TIP3 OH2 OT -0.834000 15.9994 0 + 18157 W1 5223 TIP3 H1 HT 0.417000 1.0080 0 + 18158 W1 5223 TIP3 H2 HT 0.417000 1.0080 0 + 18159 W1 5224 TIP3 OH2 OT -0.834000 15.9994 0 + 18160 W1 5224 TIP3 H1 HT 0.417000 1.0080 0 + 18161 W1 5224 TIP3 H2 HT 0.417000 1.0080 0 + 18162 W1 5225 TIP3 OH2 OT -0.834000 15.9994 0 + 18163 W1 5225 TIP3 H1 HT 0.417000 1.0080 0 + 18164 W1 5225 TIP3 H2 HT 0.417000 1.0080 0 + 18165 W1 5226 TIP3 OH2 OT -0.834000 15.9994 0 + 18166 W1 5226 TIP3 H1 HT 0.417000 1.0080 0 + 18167 W1 5226 TIP3 H2 HT 0.417000 1.0080 0 + 18168 W1 5227 TIP3 OH2 OT -0.834000 15.9994 0 + 18169 W1 5227 TIP3 H1 HT 0.417000 1.0080 0 + 18170 W1 5227 TIP3 H2 HT 0.417000 1.0080 0 + 18171 W1 5228 TIP3 OH2 OT -0.834000 15.9994 0 + 18172 W1 5228 TIP3 H1 HT 0.417000 1.0080 0 + 18173 W1 5228 TIP3 H2 HT 0.417000 1.0080 0 + 18174 W1 5229 TIP3 OH2 OT -0.834000 15.9994 0 + 18175 W1 5229 TIP3 H1 HT 0.417000 1.0080 0 + 18176 W1 5229 TIP3 H2 HT 0.417000 1.0080 0 + 18177 W1 5230 TIP3 OH2 OT -0.834000 15.9994 0 + 18178 W1 5230 TIP3 H1 HT 0.417000 1.0080 0 + 18179 W1 5230 TIP3 H2 HT 0.417000 1.0080 0 + 18180 W1 5231 TIP3 OH2 OT -0.834000 15.9994 0 + 18181 W1 5231 TIP3 H1 HT 0.417000 1.0080 0 + 18182 W1 5231 TIP3 H2 HT 0.417000 1.0080 0 + 18183 W1 5232 TIP3 OH2 OT -0.834000 15.9994 0 + 18184 W1 5232 TIP3 H1 HT 0.417000 1.0080 0 + 18185 W1 5232 TIP3 H2 HT 0.417000 1.0080 0 + 18186 W1 5233 TIP3 OH2 OT -0.834000 15.9994 0 + 18187 W1 5233 TIP3 H1 HT 0.417000 1.0080 0 + 18188 W1 5233 TIP3 H2 HT 0.417000 1.0080 0 + 18189 W1 5234 TIP3 OH2 OT -0.834000 15.9994 0 + 18190 W1 5234 TIP3 H1 HT 0.417000 1.0080 0 + 18191 W1 5234 TIP3 H2 HT 0.417000 1.0080 0 + 18192 W1 5235 TIP3 OH2 OT -0.834000 15.9994 0 + 18193 W1 5235 TIP3 H1 HT 0.417000 1.0080 0 + 18194 W1 5235 TIP3 H2 HT 0.417000 1.0080 0 + 18195 W1 5236 TIP3 OH2 OT -0.834000 15.9994 0 + 18196 W1 5236 TIP3 H1 HT 0.417000 1.0080 0 + 18197 W1 5236 TIP3 H2 HT 0.417000 1.0080 0 + 18198 W1 5237 TIP3 OH2 OT -0.834000 15.9994 0 + 18199 W1 5237 TIP3 H1 HT 0.417000 1.0080 0 + 18200 W1 5237 TIP3 H2 HT 0.417000 1.0080 0 + 18201 W1 5238 TIP3 OH2 OT -0.834000 15.9994 0 + 18202 W1 5238 TIP3 H1 HT 0.417000 1.0080 0 + 18203 W1 5238 TIP3 H2 HT 0.417000 1.0080 0 + 18204 W1 5239 TIP3 OH2 OT -0.834000 15.9994 0 + 18205 W1 5239 TIP3 H1 HT 0.417000 1.0080 0 + 18206 W1 5239 TIP3 H2 HT 0.417000 1.0080 0 + 18207 W1 5240 TIP3 OH2 OT -0.834000 15.9994 0 + 18208 W1 5240 TIP3 H1 HT 0.417000 1.0080 0 + 18209 W1 5240 TIP3 H2 HT 0.417000 1.0080 0 + 18210 W1 5241 TIP3 OH2 OT -0.834000 15.9994 0 + 18211 W1 5241 TIP3 H1 HT 0.417000 1.0080 0 + 18212 W1 5241 TIP3 H2 HT 0.417000 1.0080 0 + 18213 W1 5242 TIP3 OH2 OT -0.834000 15.9994 0 + 18214 W1 5242 TIP3 H1 HT 0.417000 1.0080 0 + 18215 W1 5242 TIP3 H2 HT 0.417000 1.0080 0 + 18216 W1 5243 TIP3 OH2 OT -0.834000 15.9994 0 + 18217 W1 5243 TIP3 H1 HT 0.417000 1.0080 0 + 18218 W1 5243 TIP3 H2 HT 0.417000 1.0080 0 + 18219 W1 5244 TIP3 OH2 OT -0.834000 15.9994 0 + 18220 W1 5244 TIP3 H1 HT 0.417000 1.0080 0 + 18221 W1 5244 TIP3 H2 HT 0.417000 1.0080 0 + 18222 W1 5245 TIP3 OH2 OT -0.834000 15.9994 0 + 18223 W1 5245 TIP3 H1 HT 0.417000 1.0080 0 + 18224 W1 5245 TIP3 H2 HT 0.417000 1.0080 0 + 18225 W1 5246 TIP3 OH2 OT -0.834000 15.9994 0 + 18226 W1 5246 TIP3 H1 HT 0.417000 1.0080 0 + 18227 W1 5246 TIP3 H2 HT 0.417000 1.0080 0 + 18228 W1 5247 TIP3 OH2 OT -0.834000 15.9994 0 + 18229 W1 5247 TIP3 H1 HT 0.417000 1.0080 0 + 18230 W1 5247 TIP3 H2 HT 0.417000 1.0080 0 + 18231 W1 5248 TIP3 OH2 OT -0.834000 15.9994 0 + 18232 W1 5248 TIP3 H1 HT 0.417000 1.0080 0 + 18233 W1 5248 TIP3 H2 HT 0.417000 1.0080 0 + 18234 W1 5249 TIP3 OH2 OT -0.834000 15.9994 0 + 18235 W1 5249 TIP3 H1 HT 0.417000 1.0080 0 + 18236 W1 5249 TIP3 H2 HT 0.417000 1.0080 0 + 18237 W1 5250 TIP3 OH2 OT -0.834000 15.9994 0 + 18238 W1 5250 TIP3 H1 HT 0.417000 1.0080 0 + 18239 W1 5250 TIP3 H2 HT 0.417000 1.0080 0 + 18240 W1 5251 TIP3 OH2 OT -0.834000 15.9994 0 + 18241 W1 5251 TIP3 H1 HT 0.417000 1.0080 0 + 18242 W1 5251 TIP3 H2 HT 0.417000 1.0080 0 + 18243 W1 5252 TIP3 OH2 OT -0.834000 15.9994 0 + 18244 W1 5252 TIP3 H1 HT 0.417000 1.0080 0 + 18245 W1 5252 TIP3 H2 HT 0.417000 1.0080 0 + 18246 W1 5253 TIP3 OH2 OT -0.834000 15.9994 0 + 18247 W1 5253 TIP3 H1 HT 0.417000 1.0080 0 + 18248 W1 5253 TIP3 H2 HT 0.417000 1.0080 0 + 18249 W1 5254 TIP3 OH2 OT -0.834000 15.9994 0 + 18250 W1 5254 TIP3 H1 HT 0.417000 1.0080 0 + 18251 W1 5254 TIP3 H2 HT 0.417000 1.0080 0 + 18252 W1 5255 TIP3 OH2 OT -0.834000 15.9994 0 + 18253 W1 5255 TIP3 H1 HT 0.417000 1.0080 0 + 18254 W1 5255 TIP3 H2 HT 0.417000 1.0080 0 + 18255 W1 5256 TIP3 OH2 OT -0.834000 15.9994 0 + 18256 W1 5256 TIP3 H1 HT 0.417000 1.0080 0 + 18257 W1 5256 TIP3 H2 HT 0.417000 1.0080 0 + 18258 W1 5257 TIP3 OH2 OT -0.834000 15.9994 0 + 18259 W1 5257 TIP3 H1 HT 0.417000 1.0080 0 + 18260 W1 5257 TIP3 H2 HT 0.417000 1.0080 0 + 18261 W1 5258 TIP3 OH2 OT -0.834000 15.9994 0 + 18262 W1 5258 TIP3 H1 HT 0.417000 1.0080 0 + 18263 W1 5258 TIP3 H2 HT 0.417000 1.0080 0 + 18264 W1 5259 TIP3 OH2 OT -0.834000 15.9994 0 + 18265 W1 5259 TIP3 H1 HT 0.417000 1.0080 0 + 18266 W1 5259 TIP3 H2 HT 0.417000 1.0080 0 + 18267 W1 5260 TIP3 OH2 OT -0.834000 15.9994 0 + 18268 W1 5260 TIP3 H1 HT 0.417000 1.0080 0 + 18269 W1 5260 TIP3 H2 HT 0.417000 1.0080 0 + 18270 W1 5261 TIP3 OH2 OT -0.834000 15.9994 0 + 18271 W1 5261 TIP3 H1 HT 0.417000 1.0080 0 + 18272 W1 5261 TIP3 H2 HT 0.417000 1.0080 0 + 18273 W1 5262 TIP3 OH2 OT -0.834000 15.9994 0 + 18274 W1 5262 TIP3 H1 HT 0.417000 1.0080 0 + 18275 W1 5262 TIP3 H2 HT 0.417000 1.0080 0 + 18276 W1 5263 TIP3 OH2 OT -0.834000 15.9994 0 + 18277 W1 5263 TIP3 H1 HT 0.417000 1.0080 0 + 18278 W1 5263 TIP3 H2 HT 0.417000 1.0080 0 + 18279 W1 5264 TIP3 OH2 OT -0.834000 15.9994 0 + 18280 W1 5264 TIP3 H1 HT 0.417000 1.0080 0 + 18281 W1 5264 TIP3 H2 HT 0.417000 1.0080 0 + 18282 W1 5265 TIP3 OH2 OT -0.834000 15.9994 0 + 18283 W1 5265 TIP3 H1 HT 0.417000 1.0080 0 + 18284 W1 5265 TIP3 H2 HT 0.417000 1.0080 0 + 18285 W1 5266 TIP3 OH2 OT -0.834000 15.9994 0 + 18286 W1 5266 TIP3 H1 HT 0.417000 1.0080 0 + 18287 W1 5266 TIP3 H2 HT 0.417000 1.0080 0 + 18288 W1 5267 TIP3 OH2 OT -0.834000 15.9994 0 + 18289 W1 5267 TIP3 H1 HT 0.417000 1.0080 0 + 18290 W1 5267 TIP3 H2 HT 0.417000 1.0080 0 + 18291 W1 5268 TIP3 OH2 OT -0.834000 15.9994 0 + 18292 W1 5268 TIP3 H1 HT 0.417000 1.0080 0 + 18293 W1 5268 TIP3 H2 HT 0.417000 1.0080 0 + 18294 W1 5269 TIP3 OH2 OT -0.834000 15.9994 0 + 18295 W1 5269 TIP3 H1 HT 0.417000 1.0080 0 + 18296 W1 5269 TIP3 H2 HT 0.417000 1.0080 0 + 18297 W1 5270 TIP3 OH2 OT -0.834000 15.9994 0 + 18298 W1 5270 TIP3 H1 HT 0.417000 1.0080 0 + 18299 W1 5270 TIP3 H2 HT 0.417000 1.0080 0 + 18300 W1 5271 TIP3 OH2 OT -0.834000 15.9994 0 + 18301 W1 5271 TIP3 H1 HT 0.417000 1.0080 0 + 18302 W1 5271 TIP3 H2 HT 0.417000 1.0080 0 + 18303 W1 5272 TIP3 OH2 OT -0.834000 15.9994 0 + 18304 W1 5272 TIP3 H1 HT 0.417000 1.0080 0 + 18305 W1 5272 TIP3 H2 HT 0.417000 1.0080 0 + 18306 W1 5273 TIP3 OH2 OT -0.834000 15.9994 0 + 18307 W1 5273 TIP3 H1 HT 0.417000 1.0080 0 + 18308 W1 5273 TIP3 H2 HT 0.417000 1.0080 0 + 18309 W1 5274 TIP3 OH2 OT -0.834000 15.9994 0 + 18310 W1 5274 TIP3 H1 HT 0.417000 1.0080 0 + 18311 W1 5274 TIP3 H2 HT 0.417000 1.0080 0 + 18312 W1 5275 TIP3 OH2 OT -0.834000 15.9994 0 + 18313 W1 5275 TIP3 H1 HT 0.417000 1.0080 0 + 18314 W1 5275 TIP3 H2 HT 0.417000 1.0080 0 + 18315 W1 5276 TIP3 OH2 OT -0.834000 15.9994 0 + 18316 W1 5276 TIP3 H1 HT 0.417000 1.0080 0 + 18317 W1 5276 TIP3 H2 HT 0.417000 1.0080 0 + 18318 W1 5277 TIP3 OH2 OT -0.834000 15.9994 0 + 18319 W1 5277 TIP3 H1 HT 0.417000 1.0080 0 + 18320 W1 5277 TIP3 H2 HT 0.417000 1.0080 0 + 18321 W1 5278 TIP3 OH2 OT -0.834000 15.9994 0 + 18322 W1 5278 TIP3 H1 HT 0.417000 1.0080 0 + 18323 W1 5278 TIP3 H2 HT 0.417000 1.0080 0 + 18324 W1 5279 TIP3 OH2 OT -0.834000 15.9994 0 + 18325 W1 5279 TIP3 H1 HT 0.417000 1.0080 0 + 18326 W1 5279 TIP3 H2 HT 0.417000 1.0080 0 + 18327 W1 5280 TIP3 OH2 OT -0.834000 15.9994 0 + 18328 W1 5280 TIP3 H1 HT 0.417000 1.0080 0 + 18329 W1 5280 TIP3 H2 HT 0.417000 1.0080 0 + 18330 W1 5281 TIP3 OH2 OT -0.834000 15.9994 0 + 18331 W1 5281 TIP3 H1 HT 0.417000 1.0080 0 + 18332 W1 5281 TIP3 H2 HT 0.417000 1.0080 0 + 18333 W1 5282 TIP3 OH2 OT -0.834000 15.9994 0 + 18334 W1 5282 TIP3 H1 HT 0.417000 1.0080 0 + 18335 W1 5282 TIP3 H2 HT 0.417000 1.0080 0 + 18336 W1 5283 TIP3 OH2 OT -0.834000 15.9994 0 + 18337 W1 5283 TIP3 H1 HT 0.417000 1.0080 0 + 18338 W1 5283 TIP3 H2 HT 0.417000 1.0080 0 + 18339 W1 5284 TIP3 OH2 OT -0.834000 15.9994 0 + 18340 W1 5284 TIP3 H1 HT 0.417000 1.0080 0 + 18341 W1 5284 TIP3 H2 HT 0.417000 1.0080 0 + 18342 W1 5285 TIP3 OH2 OT -0.834000 15.9994 0 + 18343 W1 5285 TIP3 H1 HT 0.417000 1.0080 0 + 18344 W1 5285 TIP3 H2 HT 0.417000 1.0080 0 + 18345 W1 5286 TIP3 OH2 OT -0.834000 15.9994 0 + 18346 W1 5286 TIP3 H1 HT 0.417000 1.0080 0 + 18347 W1 5286 TIP3 H2 HT 0.417000 1.0080 0 + 18348 W1 5287 TIP3 OH2 OT -0.834000 15.9994 0 + 18349 W1 5287 TIP3 H1 HT 0.417000 1.0080 0 + 18350 W1 5287 TIP3 H2 HT 0.417000 1.0080 0 + 18351 W1 5288 TIP3 OH2 OT -0.834000 15.9994 0 + 18352 W1 5288 TIP3 H1 HT 0.417000 1.0080 0 + 18353 W1 5288 TIP3 H2 HT 0.417000 1.0080 0 + 18354 W1 5289 TIP3 OH2 OT -0.834000 15.9994 0 + 18355 W1 5289 TIP3 H1 HT 0.417000 1.0080 0 + 18356 W1 5289 TIP3 H2 HT 0.417000 1.0080 0 + 18357 W1 5290 TIP3 OH2 OT -0.834000 15.9994 0 + 18358 W1 5290 TIP3 H1 HT 0.417000 1.0080 0 + 18359 W1 5290 TIP3 H2 HT 0.417000 1.0080 0 + 18360 W1 5291 TIP3 OH2 OT -0.834000 15.9994 0 + 18361 W1 5291 TIP3 H1 HT 0.417000 1.0080 0 + 18362 W1 5291 TIP3 H2 HT 0.417000 1.0080 0 + 18363 W1 5292 TIP3 OH2 OT -0.834000 15.9994 0 + 18364 W1 5292 TIP3 H1 HT 0.417000 1.0080 0 + 18365 W1 5292 TIP3 H2 HT 0.417000 1.0080 0 + 18366 W1 5293 TIP3 OH2 OT -0.834000 15.9994 0 + 18367 W1 5293 TIP3 H1 HT 0.417000 1.0080 0 + 18368 W1 5293 TIP3 H2 HT 0.417000 1.0080 0 + 18369 W1 5294 TIP3 OH2 OT -0.834000 15.9994 0 + 18370 W1 5294 TIP3 H1 HT 0.417000 1.0080 0 + 18371 W1 5294 TIP3 H2 HT 0.417000 1.0080 0 + 18372 W1 5295 TIP3 OH2 OT -0.834000 15.9994 0 + 18373 W1 5295 TIP3 H1 HT 0.417000 1.0080 0 + 18374 W1 5295 TIP3 H2 HT 0.417000 1.0080 0 + 18375 W1 5296 TIP3 OH2 OT -0.834000 15.9994 0 + 18376 W1 5296 TIP3 H1 HT 0.417000 1.0080 0 + 18377 W1 5296 TIP3 H2 HT 0.417000 1.0080 0 + 18378 W1 5297 TIP3 OH2 OT -0.834000 15.9994 0 + 18379 W1 5297 TIP3 H1 HT 0.417000 1.0080 0 + 18380 W1 5297 TIP3 H2 HT 0.417000 1.0080 0 + 18381 W1 5298 TIP3 OH2 OT -0.834000 15.9994 0 + 18382 W1 5298 TIP3 H1 HT 0.417000 1.0080 0 + 18383 W1 5298 TIP3 H2 HT 0.417000 1.0080 0 + 18384 W1 5299 TIP3 OH2 OT -0.834000 15.9994 0 + 18385 W1 5299 TIP3 H1 HT 0.417000 1.0080 0 + 18386 W1 5299 TIP3 H2 HT 0.417000 1.0080 0 + 18387 W1 5300 TIP3 OH2 OT -0.834000 15.9994 0 + 18388 W1 5300 TIP3 H1 HT 0.417000 1.0080 0 + 18389 W1 5300 TIP3 H2 HT 0.417000 1.0080 0 + 18390 W1 5301 TIP3 OH2 OT -0.834000 15.9994 0 + 18391 W1 5301 TIP3 H1 HT 0.417000 1.0080 0 + 18392 W1 5301 TIP3 H2 HT 0.417000 1.0080 0 + 18393 W1 5302 TIP3 OH2 OT -0.834000 15.9994 0 + 18394 W1 5302 TIP3 H1 HT 0.417000 1.0080 0 + 18395 W1 5302 TIP3 H2 HT 0.417000 1.0080 0 + 18396 W1 5303 TIP3 OH2 OT -0.834000 15.9994 0 + 18397 W1 5303 TIP3 H1 HT 0.417000 1.0080 0 + 18398 W1 5303 TIP3 H2 HT 0.417000 1.0080 0 + 18399 W1 5304 TIP3 OH2 OT -0.834000 15.9994 0 + 18400 W1 5304 TIP3 H1 HT 0.417000 1.0080 0 + 18401 W1 5304 TIP3 H2 HT 0.417000 1.0080 0 + 18402 W1 5305 TIP3 OH2 OT -0.834000 15.9994 0 + 18403 W1 5305 TIP3 H1 HT 0.417000 1.0080 0 + 18404 W1 5305 TIP3 H2 HT 0.417000 1.0080 0 + 18405 W1 5306 TIP3 OH2 OT -0.834000 15.9994 0 + 18406 W1 5306 TIP3 H1 HT 0.417000 1.0080 0 + 18407 W1 5306 TIP3 H2 HT 0.417000 1.0080 0 + 18408 W1 5307 TIP3 OH2 OT -0.834000 15.9994 0 + 18409 W1 5307 TIP3 H1 HT 0.417000 1.0080 0 + 18410 W1 5307 TIP3 H2 HT 0.417000 1.0080 0 + 18411 W1 5308 TIP3 OH2 OT -0.834000 15.9994 0 + 18412 W1 5308 TIP3 H1 HT 0.417000 1.0080 0 + 18413 W1 5308 TIP3 H2 HT 0.417000 1.0080 0 + 18414 W1 5309 TIP3 OH2 OT -0.834000 15.9994 0 + 18415 W1 5309 TIP3 H1 HT 0.417000 1.0080 0 + 18416 W1 5309 TIP3 H2 HT 0.417000 1.0080 0 + 18417 W1 5310 TIP3 OH2 OT -0.834000 15.9994 0 + 18418 W1 5310 TIP3 H1 HT 0.417000 1.0080 0 + 18419 W1 5310 TIP3 H2 HT 0.417000 1.0080 0 + 18420 W1 5311 TIP3 OH2 OT -0.834000 15.9994 0 + 18421 W1 5311 TIP3 H1 HT 0.417000 1.0080 0 + 18422 W1 5311 TIP3 H2 HT 0.417000 1.0080 0 + 18423 W1 5312 TIP3 OH2 OT -0.834000 15.9994 0 + 18424 W1 5312 TIP3 H1 HT 0.417000 1.0080 0 + 18425 W1 5312 TIP3 H2 HT 0.417000 1.0080 0 + 18426 W1 5313 TIP3 OH2 OT -0.834000 15.9994 0 + 18427 W1 5313 TIP3 H1 HT 0.417000 1.0080 0 + 18428 W1 5313 TIP3 H2 HT 0.417000 1.0080 0 + 18429 W1 5314 TIP3 OH2 OT -0.834000 15.9994 0 + 18430 W1 5314 TIP3 H1 HT 0.417000 1.0080 0 + 18431 W1 5314 TIP3 H2 HT 0.417000 1.0080 0 + 18432 W1 5315 TIP3 OH2 OT -0.834000 15.9994 0 + 18433 W1 5315 TIP3 H1 HT 0.417000 1.0080 0 + 18434 W1 5315 TIP3 H2 HT 0.417000 1.0080 0 + 18435 W1 5316 TIP3 OH2 OT -0.834000 15.9994 0 + 18436 W1 5316 TIP3 H1 HT 0.417000 1.0080 0 + 18437 W1 5316 TIP3 H2 HT 0.417000 1.0080 0 + 18438 W1 5317 TIP3 OH2 OT -0.834000 15.9994 0 + 18439 W1 5317 TIP3 H1 HT 0.417000 1.0080 0 + 18440 W1 5317 TIP3 H2 HT 0.417000 1.0080 0 + 18441 W1 5318 TIP3 OH2 OT -0.834000 15.9994 0 + 18442 W1 5318 TIP3 H1 HT 0.417000 1.0080 0 + 18443 W1 5318 TIP3 H2 HT 0.417000 1.0080 0 + 18444 W1 5319 TIP3 OH2 OT -0.834000 15.9994 0 + 18445 W1 5319 TIP3 H1 HT 0.417000 1.0080 0 + 18446 W1 5319 TIP3 H2 HT 0.417000 1.0080 0 + 18447 W1 5320 TIP3 OH2 OT -0.834000 15.9994 0 + 18448 W1 5320 TIP3 H1 HT 0.417000 1.0080 0 + 18449 W1 5320 TIP3 H2 HT 0.417000 1.0080 0 + 18450 W1 5321 TIP3 OH2 OT -0.834000 15.9994 0 + 18451 W1 5321 TIP3 H1 HT 0.417000 1.0080 0 + 18452 W1 5321 TIP3 H2 HT 0.417000 1.0080 0 + 18453 W1 5322 TIP3 OH2 OT -0.834000 15.9994 0 + 18454 W1 5322 TIP3 H1 HT 0.417000 1.0080 0 + 18455 W1 5322 TIP3 H2 HT 0.417000 1.0080 0 + 18456 W1 5323 TIP3 OH2 OT -0.834000 15.9994 0 + 18457 W1 5323 TIP3 H1 HT 0.417000 1.0080 0 + 18458 W1 5323 TIP3 H2 HT 0.417000 1.0080 0 + 18459 W1 5324 TIP3 OH2 OT -0.834000 15.9994 0 + 18460 W1 5324 TIP3 H1 HT 0.417000 1.0080 0 + 18461 W1 5324 TIP3 H2 HT 0.417000 1.0080 0 + 18462 W1 5325 TIP3 OH2 OT -0.834000 15.9994 0 + 18463 W1 5325 TIP3 H1 HT 0.417000 1.0080 0 + 18464 W1 5325 TIP3 H2 HT 0.417000 1.0080 0 + 18465 W1 5326 TIP3 OH2 OT -0.834000 15.9994 0 + 18466 W1 5326 TIP3 H1 HT 0.417000 1.0080 0 + 18467 W1 5326 TIP3 H2 HT 0.417000 1.0080 0 + 18468 W1 5327 TIP3 OH2 OT -0.834000 15.9994 0 + 18469 W1 5327 TIP3 H1 HT 0.417000 1.0080 0 + 18470 W1 5327 TIP3 H2 HT 0.417000 1.0080 0 + 18471 W1 5328 TIP3 OH2 OT -0.834000 15.9994 0 + 18472 W1 5328 TIP3 H1 HT 0.417000 1.0080 0 + 18473 W1 5328 TIP3 H2 HT 0.417000 1.0080 0 + 18474 W1 5329 TIP3 OH2 OT -0.834000 15.9994 0 + 18475 W1 5329 TIP3 H1 HT 0.417000 1.0080 0 + 18476 W1 5329 TIP3 H2 HT 0.417000 1.0080 0 + 18477 W1 5330 TIP3 OH2 OT -0.834000 15.9994 0 + 18478 W1 5330 TIP3 H1 HT 0.417000 1.0080 0 + 18479 W1 5330 TIP3 H2 HT 0.417000 1.0080 0 + 18480 W1 5331 TIP3 OH2 OT -0.834000 15.9994 0 + 18481 W1 5331 TIP3 H1 HT 0.417000 1.0080 0 + 18482 W1 5331 TIP3 H2 HT 0.417000 1.0080 0 + 18483 W1 5332 TIP3 OH2 OT -0.834000 15.9994 0 + 18484 W1 5332 TIP3 H1 HT 0.417000 1.0080 0 + 18485 W1 5332 TIP3 H2 HT 0.417000 1.0080 0 + 18486 W1 5333 TIP3 OH2 OT -0.834000 15.9994 0 + 18487 W1 5333 TIP3 H1 HT 0.417000 1.0080 0 + 18488 W1 5333 TIP3 H2 HT 0.417000 1.0080 0 + 18489 W1 5334 TIP3 OH2 OT -0.834000 15.9994 0 + 18490 W1 5334 TIP3 H1 HT 0.417000 1.0080 0 + 18491 W1 5334 TIP3 H2 HT 0.417000 1.0080 0 + 18492 W1 5335 TIP3 OH2 OT -0.834000 15.9994 0 + 18493 W1 5335 TIP3 H1 HT 0.417000 1.0080 0 + 18494 W1 5335 TIP3 H2 HT 0.417000 1.0080 0 + 18495 W1 5336 TIP3 OH2 OT -0.834000 15.9994 0 + 18496 W1 5336 TIP3 H1 HT 0.417000 1.0080 0 + 18497 W1 5336 TIP3 H2 HT 0.417000 1.0080 0 + 18498 W1 5337 TIP3 OH2 OT -0.834000 15.9994 0 + 18499 W1 5337 TIP3 H1 HT 0.417000 1.0080 0 + 18500 W1 5337 TIP3 H2 HT 0.417000 1.0080 0 + 18501 W1 5338 TIP3 OH2 OT -0.834000 15.9994 0 + 18502 W1 5338 TIP3 H1 HT 0.417000 1.0080 0 + 18503 W1 5338 TIP3 H2 HT 0.417000 1.0080 0 + 18504 W1 5339 TIP3 OH2 OT -0.834000 15.9994 0 + 18505 W1 5339 TIP3 H1 HT 0.417000 1.0080 0 + 18506 W1 5339 TIP3 H2 HT 0.417000 1.0080 0 + 18507 W1 5340 TIP3 OH2 OT -0.834000 15.9994 0 + 18508 W1 5340 TIP3 H1 HT 0.417000 1.0080 0 + 18509 W1 5340 TIP3 H2 HT 0.417000 1.0080 0 + 18510 W1 5341 TIP3 OH2 OT -0.834000 15.9994 0 + 18511 W1 5341 TIP3 H1 HT 0.417000 1.0080 0 + 18512 W1 5341 TIP3 H2 HT 0.417000 1.0080 0 + 18513 W1 5342 TIP3 OH2 OT -0.834000 15.9994 0 + 18514 W1 5342 TIP3 H1 HT 0.417000 1.0080 0 + 18515 W1 5342 TIP3 H2 HT 0.417000 1.0080 0 + 18516 W1 5343 TIP3 OH2 OT -0.834000 15.9994 0 + 18517 W1 5343 TIP3 H1 HT 0.417000 1.0080 0 + 18518 W1 5343 TIP3 H2 HT 0.417000 1.0080 0 + 18519 W1 5344 TIP3 OH2 OT -0.834000 15.9994 0 + 18520 W1 5344 TIP3 H1 HT 0.417000 1.0080 0 + 18521 W1 5344 TIP3 H2 HT 0.417000 1.0080 0 + 18522 W1 5345 TIP3 OH2 OT -0.834000 15.9994 0 + 18523 W1 5345 TIP3 H1 HT 0.417000 1.0080 0 + 18524 W1 5345 TIP3 H2 HT 0.417000 1.0080 0 + 18525 W1 5346 TIP3 OH2 OT -0.834000 15.9994 0 + 18526 W1 5346 TIP3 H1 HT 0.417000 1.0080 0 + 18527 W1 5346 TIP3 H2 HT 0.417000 1.0080 0 + 18528 W1 5347 TIP3 OH2 OT -0.834000 15.9994 0 + 18529 W1 5347 TIP3 H1 HT 0.417000 1.0080 0 + 18530 W1 5347 TIP3 H2 HT 0.417000 1.0080 0 + 18531 W1 5348 TIP3 OH2 OT -0.834000 15.9994 0 + 18532 W1 5348 TIP3 H1 HT 0.417000 1.0080 0 + 18533 W1 5348 TIP3 H2 HT 0.417000 1.0080 0 + 18534 W1 5349 TIP3 OH2 OT -0.834000 15.9994 0 + 18535 W1 5349 TIP3 H1 HT 0.417000 1.0080 0 + 18536 W1 5349 TIP3 H2 HT 0.417000 1.0080 0 + 18537 W1 5350 TIP3 OH2 OT -0.834000 15.9994 0 + 18538 W1 5350 TIP3 H1 HT 0.417000 1.0080 0 + 18539 W1 5350 TIP3 H2 HT 0.417000 1.0080 0 + 18540 W1 5351 TIP3 OH2 OT -0.834000 15.9994 0 + 18541 W1 5351 TIP3 H1 HT 0.417000 1.0080 0 + 18542 W1 5351 TIP3 H2 HT 0.417000 1.0080 0 + 18543 W1 5352 TIP3 OH2 OT -0.834000 15.9994 0 + 18544 W1 5352 TIP3 H1 HT 0.417000 1.0080 0 + 18545 W1 5352 TIP3 H2 HT 0.417000 1.0080 0 + 18546 W1 5353 TIP3 OH2 OT -0.834000 15.9994 0 + 18547 W1 5353 TIP3 H1 HT 0.417000 1.0080 0 + 18548 W1 5353 TIP3 H2 HT 0.417000 1.0080 0 + 18549 W1 5354 TIP3 OH2 OT -0.834000 15.9994 0 + 18550 W1 5354 TIP3 H1 HT 0.417000 1.0080 0 + 18551 W1 5354 TIP3 H2 HT 0.417000 1.0080 0 + 18552 W1 5355 TIP3 OH2 OT -0.834000 15.9994 0 + 18553 W1 5355 TIP3 H1 HT 0.417000 1.0080 0 + 18554 W1 5355 TIP3 H2 HT 0.417000 1.0080 0 + 18555 W1 5356 TIP3 OH2 OT -0.834000 15.9994 0 + 18556 W1 5356 TIP3 H1 HT 0.417000 1.0080 0 + 18557 W1 5356 TIP3 H2 HT 0.417000 1.0080 0 + 18558 W1 5357 TIP3 OH2 OT -0.834000 15.9994 0 + 18559 W1 5357 TIP3 H1 HT 0.417000 1.0080 0 + 18560 W1 5357 TIP3 H2 HT 0.417000 1.0080 0 + 18561 W1 5358 TIP3 OH2 OT -0.834000 15.9994 0 + 18562 W1 5358 TIP3 H1 HT 0.417000 1.0080 0 + 18563 W1 5358 TIP3 H2 HT 0.417000 1.0080 0 + 18564 W1 5359 TIP3 OH2 OT -0.834000 15.9994 0 + 18565 W1 5359 TIP3 H1 HT 0.417000 1.0080 0 + 18566 W1 5359 TIP3 H2 HT 0.417000 1.0080 0 + 18567 W1 5360 TIP3 OH2 OT -0.834000 15.9994 0 + 18568 W1 5360 TIP3 H1 HT 0.417000 1.0080 0 + 18569 W1 5360 TIP3 H2 HT 0.417000 1.0080 0 + 18570 W1 5361 TIP3 OH2 OT -0.834000 15.9994 0 + 18571 W1 5361 TIP3 H1 HT 0.417000 1.0080 0 + 18572 W1 5361 TIP3 H2 HT 0.417000 1.0080 0 + 18573 W1 5362 TIP3 OH2 OT -0.834000 15.9994 0 + 18574 W1 5362 TIP3 H1 HT 0.417000 1.0080 0 + 18575 W1 5362 TIP3 H2 HT 0.417000 1.0080 0 + 18576 W1 5363 TIP3 OH2 OT -0.834000 15.9994 0 + 18577 W1 5363 TIP3 H1 HT 0.417000 1.0080 0 + 18578 W1 5363 TIP3 H2 HT 0.417000 1.0080 0 + 18579 W1 5364 TIP3 OH2 OT -0.834000 15.9994 0 + 18580 W1 5364 TIP3 H1 HT 0.417000 1.0080 0 + 18581 W1 5364 TIP3 H2 HT 0.417000 1.0080 0 + 18582 W1 5365 TIP3 OH2 OT -0.834000 15.9994 0 + 18583 W1 5365 TIP3 H1 HT 0.417000 1.0080 0 + 18584 W1 5365 TIP3 H2 HT 0.417000 1.0080 0 + 18585 W1 5366 TIP3 OH2 OT -0.834000 15.9994 0 + 18586 W1 5366 TIP3 H1 HT 0.417000 1.0080 0 + 18587 W1 5366 TIP3 H2 HT 0.417000 1.0080 0 + 18588 W1 5367 TIP3 OH2 OT -0.834000 15.9994 0 + 18589 W1 5367 TIP3 H1 HT 0.417000 1.0080 0 + 18590 W1 5367 TIP3 H2 HT 0.417000 1.0080 0 + 18591 W1 5368 TIP3 OH2 OT -0.834000 15.9994 0 + 18592 W1 5368 TIP3 H1 HT 0.417000 1.0080 0 + 18593 W1 5368 TIP3 H2 HT 0.417000 1.0080 0 + 18594 W1 5369 TIP3 OH2 OT -0.834000 15.9994 0 + 18595 W1 5369 TIP3 H1 HT 0.417000 1.0080 0 + 18596 W1 5369 TIP3 H2 HT 0.417000 1.0080 0 + 18597 W1 5370 TIP3 OH2 OT -0.834000 15.9994 0 + 18598 W1 5370 TIP3 H1 HT 0.417000 1.0080 0 + 18599 W1 5370 TIP3 H2 HT 0.417000 1.0080 0 + 18600 W1 5371 TIP3 OH2 OT -0.834000 15.9994 0 + 18601 W1 5371 TIP3 H1 HT 0.417000 1.0080 0 + 18602 W1 5371 TIP3 H2 HT 0.417000 1.0080 0 + 18603 W1 5372 TIP3 OH2 OT -0.834000 15.9994 0 + 18604 W1 5372 TIP3 H1 HT 0.417000 1.0080 0 + 18605 W1 5372 TIP3 H2 HT 0.417000 1.0080 0 + 18606 W1 5373 TIP3 OH2 OT -0.834000 15.9994 0 + 18607 W1 5373 TIP3 H1 HT 0.417000 1.0080 0 + 18608 W1 5373 TIP3 H2 HT 0.417000 1.0080 0 + 18609 W1 5374 TIP3 OH2 OT -0.834000 15.9994 0 + 18610 W1 5374 TIP3 H1 HT 0.417000 1.0080 0 + 18611 W1 5374 TIP3 H2 HT 0.417000 1.0080 0 + 18612 W1 5375 TIP3 OH2 OT -0.834000 15.9994 0 + 18613 W1 5375 TIP3 H1 HT 0.417000 1.0080 0 + 18614 W1 5375 TIP3 H2 HT 0.417000 1.0080 0 + 18615 W1 5376 TIP3 OH2 OT -0.834000 15.9994 0 + 18616 W1 5376 TIP3 H1 HT 0.417000 1.0080 0 + 18617 W1 5376 TIP3 H2 HT 0.417000 1.0080 0 + 18618 W1 5377 TIP3 OH2 OT -0.834000 15.9994 0 + 18619 W1 5377 TIP3 H1 HT 0.417000 1.0080 0 + 18620 W1 5377 TIP3 H2 HT 0.417000 1.0080 0 + 18621 W1 5378 TIP3 OH2 OT -0.834000 15.9994 0 + 18622 W1 5378 TIP3 H1 HT 0.417000 1.0080 0 + 18623 W1 5378 TIP3 H2 HT 0.417000 1.0080 0 + 18624 W1 5379 TIP3 OH2 OT -0.834000 15.9994 0 + 18625 W1 5379 TIP3 H1 HT 0.417000 1.0080 0 + 18626 W1 5379 TIP3 H2 HT 0.417000 1.0080 0 + 18627 W1 5380 TIP3 OH2 OT -0.834000 15.9994 0 + 18628 W1 5380 TIP3 H1 HT 0.417000 1.0080 0 + 18629 W1 5380 TIP3 H2 HT 0.417000 1.0080 0 + 18630 W1 5381 TIP3 OH2 OT -0.834000 15.9994 0 + 18631 W1 5381 TIP3 H1 HT 0.417000 1.0080 0 + 18632 W1 5381 TIP3 H2 HT 0.417000 1.0080 0 + 18633 W1 5382 TIP3 OH2 OT -0.834000 15.9994 0 + 18634 W1 5382 TIP3 H1 HT 0.417000 1.0080 0 + 18635 W1 5382 TIP3 H2 HT 0.417000 1.0080 0 + 18636 W1 5383 TIP3 OH2 OT -0.834000 15.9994 0 + 18637 W1 5383 TIP3 H1 HT 0.417000 1.0080 0 + 18638 W1 5383 TIP3 H2 HT 0.417000 1.0080 0 + 18639 W1 5384 TIP3 OH2 OT -0.834000 15.9994 0 + 18640 W1 5384 TIP3 H1 HT 0.417000 1.0080 0 + 18641 W1 5384 TIP3 H2 HT 0.417000 1.0080 0 + 18642 W1 5385 TIP3 OH2 OT -0.834000 15.9994 0 + 18643 W1 5385 TIP3 H1 HT 0.417000 1.0080 0 + 18644 W1 5385 TIP3 H2 HT 0.417000 1.0080 0 + 18645 W1 5386 TIP3 OH2 OT -0.834000 15.9994 0 + 18646 W1 5386 TIP3 H1 HT 0.417000 1.0080 0 + 18647 W1 5386 TIP3 H2 HT 0.417000 1.0080 0 + 18648 W1 5387 TIP3 OH2 OT -0.834000 15.9994 0 + 18649 W1 5387 TIP3 H1 HT 0.417000 1.0080 0 + 18650 W1 5387 TIP3 H2 HT 0.417000 1.0080 0 + 18651 W1 5388 TIP3 OH2 OT -0.834000 15.9994 0 + 18652 W1 5388 TIP3 H1 HT 0.417000 1.0080 0 + 18653 W1 5388 TIP3 H2 HT 0.417000 1.0080 0 + 18654 W1 5389 TIP3 OH2 OT -0.834000 15.9994 0 + 18655 W1 5389 TIP3 H1 HT 0.417000 1.0080 0 + 18656 W1 5389 TIP3 H2 HT 0.417000 1.0080 0 + 18657 W1 5390 TIP3 OH2 OT -0.834000 15.9994 0 + 18658 W1 5390 TIP3 H1 HT 0.417000 1.0080 0 + 18659 W1 5390 TIP3 H2 HT 0.417000 1.0080 0 + 18660 W1 5391 TIP3 OH2 OT -0.834000 15.9994 0 + 18661 W1 5391 TIP3 H1 HT 0.417000 1.0080 0 + 18662 W1 5391 TIP3 H2 HT 0.417000 1.0080 0 + 18663 W1 5392 TIP3 OH2 OT -0.834000 15.9994 0 + 18664 W1 5392 TIP3 H1 HT 0.417000 1.0080 0 + 18665 W1 5392 TIP3 H2 HT 0.417000 1.0080 0 + 18666 W1 5393 TIP3 OH2 OT -0.834000 15.9994 0 + 18667 W1 5393 TIP3 H1 HT 0.417000 1.0080 0 + 18668 W1 5393 TIP3 H2 HT 0.417000 1.0080 0 + 18669 W1 5394 TIP3 OH2 OT -0.834000 15.9994 0 + 18670 W1 5394 TIP3 H1 HT 0.417000 1.0080 0 + 18671 W1 5394 TIP3 H2 HT 0.417000 1.0080 0 + 18672 W1 5395 TIP3 OH2 OT -0.834000 15.9994 0 + 18673 W1 5395 TIP3 H1 HT 0.417000 1.0080 0 + 18674 W1 5395 TIP3 H2 HT 0.417000 1.0080 0 + 18675 W1 5396 TIP3 OH2 OT -0.834000 15.9994 0 + 18676 W1 5396 TIP3 H1 HT 0.417000 1.0080 0 + 18677 W1 5396 TIP3 H2 HT 0.417000 1.0080 0 + 18678 W1 5397 TIP3 OH2 OT -0.834000 15.9994 0 + 18679 W1 5397 TIP3 H1 HT 0.417000 1.0080 0 + 18680 W1 5397 TIP3 H2 HT 0.417000 1.0080 0 + 18681 W1 5398 TIP3 OH2 OT -0.834000 15.9994 0 + 18682 W1 5398 TIP3 H1 HT 0.417000 1.0080 0 + 18683 W1 5398 TIP3 H2 HT 0.417000 1.0080 0 + 18684 W1 5399 TIP3 OH2 OT -0.834000 15.9994 0 + 18685 W1 5399 TIP3 H1 HT 0.417000 1.0080 0 + 18686 W1 5399 TIP3 H2 HT 0.417000 1.0080 0 + 18687 W1 5400 TIP3 OH2 OT -0.834000 15.9994 0 + 18688 W1 5400 TIP3 H1 HT 0.417000 1.0080 0 + 18689 W1 5400 TIP3 H2 HT 0.417000 1.0080 0 + 18690 W1 5401 TIP3 OH2 OT -0.834000 15.9994 0 + 18691 W1 5401 TIP3 H1 HT 0.417000 1.0080 0 + 18692 W1 5401 TIP3 H2 HT 0.417000 1.0080 0 + 18693 W1 5402 TIP3 OH2 OT -0.834000 15.9994 0 + 18694 W1 5402 TIP3 H1 HT 0.417000 1.0080 0 + 18695 W1 5402 TIP3 H2 HT 0.417000 1.0080 0 + 18696 W1 5403 TIP3 OH2 OT -0.834000 15.9994 0 + 18697 W1 5403 TIP3 H1 HT 0.417000 1.0080 0 + 18698 W1 5403 TIP3 H2 HT 0.417000 1.0080 0 + 18699 W1 5404 TIP3 OH2 OT -0.834000 15.9994 0 + 18700 W1 5404 TIP3 H1 HT 0.417000 1.0080 0 + 18701 W1 5404 TIP3 H2 HT 0.417000 1.0080 0 + 18702 W1 5405 TIP3 OH2 OT -0.834000 15.9994 0 + 18703 W1 5405 TIP3 H1 HT 0.417000 1.0080 0 + 18704 W1 5405 TIP3 H2 HT 0.417000 1.0080 0 + 18705 W1 5406 TIP3 OH2 OT -0.834000 15.9994 0 + 18706 W1 5406 TIP3 H1 HT 0.417000 1.0080 0 + 18707 W1 5406 TIP3 H2 HT 0.417000 1.0080 0 + 18708 W1 5407 TIP3 OH2 OT -0.834000 15.9994 0 + 18709 W1 5407 TIP3 H1 HT 0.417000 1.0080 0 + 18710 W1 5407 TIP3 H2 HT 0.417000 1.0080 0 + 18711 W1 5408 TIP3 OH2 OT -0.834000 15.9994 0 + 18712 W1 5408 TIP3 H1 HT 0.417000 1.0080 0 + 18713 W1 5408 TIP3 H2 HT 0.417000 1.0080 0 + 18714 W1 5409 TIP3 OH2 OT -0.834000 15.9994 0 + 18715 W1 5409 TIP3 H1 HT 0.417000 1.0080 0 + 18716 W1 5409 TIP3 H2 HT 0.417000 1.0080 0 + 18717 W1 5410 TIP3 OH2 OT -0.834000 15.9994 0 + 18718 W1 5410 TIP3 H1 HT 0.417000 1.0080 0 + 18719 W1 5410 TIP3 H2 HT 0.417000 1.0080 0 + 18720 W1 5411 TIP3 OH2 OT -0.834000 15.9994 0 + 18721 W1 5411 TIP3 H1 HT 0.417000 1.0080 0 + 18722 W1 5411 TIP3 H2 HT 0.417000 1.0080 0 + 18723 W1 5412 TIP3 OH2 OT -0.834000 15.9994 0 + 18724 W1 5412 TIP3 H1 HT 0.417000 1.0080 0 + 18725 W1 5412 TIP3 H2 HT 0.417000 1.0080 0 + 18726 W1 5413 TIP3 OH2 OT -0.834000 15.9994 0 + 18727 W1 5413 TIP3 H1 HT 0.417000 1.0080 0 + 18728 W1 5413 TIP3 H2 HT 0.417000 1.0080 0 + 18729 W1 5414 TIP3 OH2 OT -0.834000 15.9994 0 + 18730 W1 5414 TIP3 H1 HT 0.417000 1.0080 0 + 18731 W1 5414 TIP3 H2 HT 0.417000 1.0080 0 + 18732 W1 5415 TIP3 OH2 OT -0.834000 15.9994 0 + 18733 W1 5415 TIP3 H1 HT 0.417000 1.0080 0 + 18734 W1 5415 TIP3 H2 HT 0.417000 1.0080 0 + 18735 W1 5416 TIP3 OH2 OT -0.834000 15.9994 0 + 18736 W1 5416 TIP3 H1 HT 0.417000 1.0080 0 + 18737 W1 5416 TIP3 H2 HT 0.417000 1.0080 0 + 18738 W1 5417 TIP3 OH2 OT -0.834000 15.9994 0 + 18739 W1 5417 TIP3 H1 HT 0.417000 1.0080 0 + 18740 W1 5417 TIP3 H2 HT 0.417000 1.0080 0 + 18741 W1 5418 TIP3 OH2 OT -0.834000 15.9994 0 + 18742 W1 5418 TIP3 H1 HT 0.417000 1.0080 0 + 18743 W1 5418 TIP3 H2 HT 0.417000 1.0080 0 + 18744 W1 5419 TIP3 OH2 OT -0.834000 15.9994 0 + 18745 W1 5419 TIP3 H1 HT 0.417000 1.0080 0 + 18746 W1 5419 TIP3 H2 HT 0.417000 1.0080 0 + 18747 W1 5420 TIP3 OH2 OT -0.834000 15.9994 0 + 18748 W1 5420 TIP3 H1 HT 0.417000 1.0080 0 + 18749 W1 5420 TIP3 H2 HT 0.417000 1.0080 0 + 18750 W1 5421 TIP3 OH2 OT -0.834000 15.9994 0 + 18751 W1 5421 TIP3 H1 HT 0.417000 1.0080 0 + 18752 W1 5421 TIP3 H2 HT 0.417000 1.0080 0 + 18753 W1 5422 TIP3 OH2 OT -0.834000 15.9994 0 + 18754 W1 5422 TIP3 H1 HT 0.417000 1.0080 0 + 18755 W1 5422 TIP3 H2 HT 0.417000 1.0080 0 + 18756 W1 5423 TIP3 OH2 OT -0.834000 15.9994 0 + 18757 W1 5423 TIP3 H1 HT 0.417000 1.0080 0 + 18758 W1 5423 TIP3 H2 HT 0.417000 1.0080 0 + 18759 W1 5424 TIP3 OH2 OT -0.834000 15.9994 0 + 18760 W1 5424 TIP3 H1 HT 0.417000 1.0080 0 + 18761 W1 5424 TIP3 H2 HT 0.417000 1.0080 0 + 18762 W1 5425 TIP3 OH2 OT -0.834000 15.9994 0 + 18763 W1 5425 TIP3 H1 HT 0.417000 1.0080 0 + 18764 W1 5425 TIP3 H2 HT 0.417000 1.0080 0 + 18765 W1 5426 TIP3 OH2 OT -0.834000 15.9994 0 + 18766 W1 5426 TIP3 H1 HT 0.417000 1.0080 0 + 18767 W1 5426 TIP3 H2 HT 0.417000 1.0080 0 + 18768 W1 5427 TIP3 OH2 OT -0.834000 15.9994 0 + 18769 W1 5427 TIP3 H1 HT 0.417000 1.0080 0 + 18770 W1 5427 TIP3 H2 HT 0.417000 1.0080 0 + 18771 W1 5428 TIP3 OH2 OT -0.834000 15.9994 0 + 18772 W1 5428 TIP3 H1 HT 0.417000 1.0080 0 + 18773 W1 5428 TIP3 H2 HT 0.417000 1.0080 0 + 18774 W1 5429 TIP3 OH2 OT -0.834000 15.9994 0 + 18775 W1 5429 TIP3 H1 HT 0.417000 1.0080 0 + 18776 W1 5429 TIP3 H2 HT 0.417000 1.0080 0 + 18777 W1 5430 TIP3 OH2 OT -0.834000 15.9994 0 + 18778 W1 5430 TIP3 H1 HT 0.417000 1.0080 0 + 18779 W1 5430 TIP3 H2 HT 0.417000 1.0080 0 + 18780 W1 5431 TIP3 OH2 OT -0.834000 15.9994 0 + 18781 W1 5431 TIP3 H1 HT 0.417000 1.0080 0 + 18782 W1 5431 TIP3 H2 HT 0.417000 1.0080 0 + 18783 W1 5432 TIP3 OH2 OT -0.834000 15.9994 0 + 18784 W1 5432 TIP3 H1 HT 0.417000 1.0080 0 + 18785 W1 5432 TIP3 H2 HT 0.417000 1.0080 0 + 18786 W1 5433 TIP3 OH2 OT -0.834000 15.9994 0 + 18787 W1 5433 TIP3 H1 HT 0.417000 1.0080 0 + 18788 W1 5433 TIP3 H2 HT 0.417000 1.0080 0 + 18789 W1 5434 TIP3 OH2 OT -0.834000 15.9994 0 + 18790 W1 5434 TIP3 H1 HT 0.417000 1.0080 0 + 18791 W1 5434 TIP3 H2 HT 0.417000 1.0080 0 + 18792 W1 5435 TIP3 OH2 OT -0.834000 15.9994 0 + 18793 W1 5435 TIP3 H1 HT 0.417000 1.0080 0 + 18794 W1 5435 TIP3 H2 HT 0.417000 1.0080 0 + 18795 W1 5436 TIP3 OH2 OT -0.834000 15.9994 0 + 18796 W1 5436 TIP3 H1 HT 0.417000 1.0080 0 + 18797 W1 5436 TIP3 H2 HT 0.417000 1.0080 0 + 18798 W1 5437 TIP3 OH2 OT -0.834000 15.9994 0 + 18799 W1 5437 TIP3 H1 HT 0.417000 1.0080 0 + 18800 W1 5437 TIP3 H2 HT 0.417000 1.0080 0 + 18801 W1 5438 TIP3 OH2 OT -0.834000 15.9994 0 + 18802 W1 5438 TIP3 H1 HT 0.417000 1.0080 0 + 18803 W1 5438 TIP3 H2 HT 0.417000 1.0080 0 + 18804 W1 5439 TIP3 OH2 OT -0.834000 15.9994 0 + 18805 W1 5439 TIP3 H1 HT 0.417000 1.0080 0 + 18806 W1 5439 TIP3 H2 HT 0.417000 1.0080 0 + 18807 W1 5440 TIP3 OH2 OT -0.834000 15.9994 0 + 18808 W1 5440 TIP3 H1 HT 0.417000 1.0080 0 + 18809 W1 5440 TIP3 H2 HT 0.417000 1.0080 0 + 18810 W1 5441 TIP3 OH2 OT -0.834000 15.9994 0 + 18811 W1 5441 TIP3 H1 HT 0.417000 1.0080 0 + 18812 W1 5441 TIP3 H2 HT 0.417000 1.0080 0 + 18813 W1 5442 TIP3 OH2 OT -0.834000 15.9994 0 + 18814 W1 5442 TIP3 H1 HT 0.417000 1.0080 0 + 18815 W1 5442 TIP3 H2 HT 0.417000 1.0080 0 + 18816 W1 5443 TIP3 OH2 OT -0.834000 15.9994 0 + 18817 W1 5443 TIP3 H1 HT 0.417000 1.0080 0 + 18818 W1 5443 TIP3 H2 HT 0.417000 1.0080 0 + 18819 W1 5444 TIP3 OH2 OT -0.834000 15.9994 0 + 18820 W1 5444 TIP3 H1 HT 0.417000 1.0080 0 + 18821 W1 5444 TIP3 H2 HT 0.417000 1.0080 0 + 18822 W1 5445 TIP3 OH2 OT -0.834000 15.9994 0 + 18823 W1 5445 TIP3 H1 HT 0.417000 1.0080 0 + 18824 W1 5445 TIP3 H2 HT 0.417000 1.0080 0 + 18825 W1 5446 TIP3 OH2 OT -0.834000 15.9994 0 + 18826 W1 5446 TIP3 H1 HT 0.417000 1.0080 0 + 18827 W1 5446 TIP3 H2 HT 0.417000 1.0080 0 + 18828 W1 5447 TIP3 OH2 OT -0.834000 15.9994 0 + 18829 W1 5447 TIP3 H1 HT 0.417000 1.0080 0 + 18830 W1 5447 TIP3 H2 HT 0.417000 1.0080 0 + 18831 W1 5448 TIP3 OH2 OT -0.834000 15.9994 0 + 18832 W1 5448 TIP3 H1 HT 0.417000 1.0080 0 + 18833 W1 5448 TIP3 H2 HT 0.417000 1.0080 0 + 18834 W1 5449 TIP3 OH2 OT -0.834000 15.9994 0 + 18835 W1 5449 TIP3 H1 HT 0.417000 1.0080 0 + 18836 W1 5449 TIP3 H2 HT 0.417000 1.0080 0 + 18837 W1 5450 TIP3 OH2 OT -0.834000 15.9994 0 + 18838 W1 5450 TIP3 H1 HT 0.417000 1.0080 0 + 18839 W1 5450 TIP3 H2 HT 0.417000 1.0080 0 + 18840 W1 5451 TIP3 OH2 OT -0.834000 15.9994 0 + 18841 W1 5451 TIP3 H1 HT 0.417000 1.0080 0 + 18842 W1 5451 TIP3 H2 HT 0.417000 1.0080 0 + 18843 W1 5452 TIP3 OH2 OT -0.834000 15.9994 0 + 18844 W1 5452 TIP3 H1 HT 0.417000 1.0080 0 + 18845 W1 5452 TIP3 H2 HT 0.417000 1.0080 0 + 18846 W1 5453 TIP3 OH2 OT -0.834000 15.9994 0 + 18847 W1 5453 TIP3 H1 HT 0.417000 1.0080 0 + 18848 W1 5453 TIP3 H2 HT 0.417000 1.0080 0 + 18849 W1 5454 TIP3 OH2 OT -0.834000 15.9994 0 + 18850 W1 5454 TIP3 H1 HT 0.417000 1.0080 0 + 18851 W1 5454 TIP3 H2 HT 0.417000 1.0080 0 + 18852 W1 5455 TIP3 OH2 OT -0.834000 15.9994 0 + 18853 W1 5455 TIP3 H1 HT 0.417000 1.0080 0 + 18854 W1 5455 TIP3 H2 HT 0.417000 1.0080 0 + 18855 W1 5456 TIP3 OH2 OT -0.834000 15.9994 0 + 18856 W1 5456 TIP3 H1 HT 0.417000 1.0080 0 + 18857 W1 5456 TIP3 H2 HT 0.417000 1.0080 0 + 18858 W1 5457 TIP3 OH2 OT -0.834000 15.9994 0 + 18859 W1 5457 TIP3 H1 HT 0.417000 1.0080 0 + 18860 W1 5457 TIP3 H2 HT 0.417000 1.0080 0 + 18861 W1 5458 TIP3 OH2 OT -0.834000 15.9994 0 + 18862 W1 5458 TIP3 H1 HT 0.417000 1.0080 0 + 18863 W1 5458 TIP3 H2 HT 0.417000 1.0080 0 + 18864 W1 5459 TIP3 OH2 OT -0.834000 15.9994 0 + 18865 W1 5459 TIP3 H1 HT 0.417000 1.0080 0 + 18866 W1 5459 TIP3 H2 HT 0.417000 1.0080 0 + 18867 W1 5460 TIP3 OH2 OT -0.834000 15.9994 0 + 18868 W1 5460 TIP3 H1 HT 0.417000 1.0080 0 + 18869 W1 5460 TIP3 H2 HT 0.417000 1.0080 0 + 18870 W1 5461 TIP3 OH2 OT -0.834000 15.9994 0 + 18871 W1 5461 TIP3 H1 HT 0.417000 1.0080 0 + 18872 W1 5461 TIP3 H2 HT 0.417000 1.0080 0 + 18873 W1 5462 TIP3 OH2 OT -0.834000 15.9994 0 + 18874 W1 5462 TIP3 H1 HT 0.417000 1.0080 0 + 18875 W1 5462 TIP3 H2 HT 0.417000 1.0080 0 + 18876 W1 5463 TIP3 OH2 OT -0.834000 15.9994 0 + 18877 W1 5463 TIP3 H1 HT 0.417000 1.0080 0 + 18878 W1 5463 TIP3 H2 HT 0.417000 1.0080 0 + 18879 W1 5464 TIP3 OH2 OT -0.834000 15.9994 0 + 18880 W1 5464 TIP3 H1 HT 0.417000 1.0080 0 + 18881 W1 5464 TIP3 H2 HT 0.417000 1.0080 0 + 18882 W1 5465 TIP3 OH2 OT -0.834000 15.9994 0 + 18883 W1 5465 TIP3 H1 HT 0.417000 1.0080 0 + 18884 W1 5465 TIP3 H2 HT 0.417000 1.0080 0 + 18885 W1 5466 TIP3 OH2 OT -0.834000 15.9994 0 + 18886 W1 5466 TIP3 H1 HT 0.417000 1.0080 0 + 18887 W1 5466 TIP3 H2 HT 0.417000 1.0080 0 + 18888 W1 5467 TIP3 OH2 OT -0.834000 15.9994 0 + 18889 W1 5467 TIP3 H1 HT 0.417000 1.0080 0 + 18890 W1 5467 TIP3 H2 HT 0.417000 1.0080 0 + 18891 W1 5468 TIP3 OH2 OT -0.834000 15.9994 0 + 18892 W1 5468 TIP3 H1 HT 0.417000 1.0080 0 + 18893 W1 5468 TIP3 H2 HT 0.417000 1.0080 0 + 18894 W1 5469 TIP3 OH2 OT -0.834000 15.9994 0 + 18895 W1 5469 TIP3 H1 HT 0.417000 1.0080 0 + 18896 W1 5469 TIP3 H2 HT 0.417000 1.0080 0 + 18897 W1 5470 TIP3 OH2 OT -0.834000 15.9994 0 + 18898 W1 5470 TIP3 H1 HT 0.417000 1.0080 0 + 18899 W1 5470 TIP3 H2 HT 0.417000 1.0080 0 + 18900 W1 5471 TIP3 OH2 OT -0.834000 15.9994 0 + 18901 W1 5471 TIP3 H1 HT 0.417000 1.0080 0 + 18902 W1 5471 TIP3 H2 HT 0.417000 1.0080 0 + 18903 W1 5472 TIP3 OH2 OT -0.834000 15.9994 0 + 18904 W1 5472 TIP3 H1 HT 0.417000 1.0080 0 + 18905 W1 5472 TIP3 H2 HT 0.417000 1.0080 0 + 18906 W1 5473 TIP3 OH2 OT -0.834000 15.9994 0 + 18907 W1 5473 TIP3 H1 HT 0.417000 1.0080 0 + 18908 W1 5473 TIP3 H2 HT 0.417000 1.0080 0 + 18909 W1 5474 TIP3 OH2 OT -0.834000 15.9994 0 + 18910 W1 5474 TIP3 H1 HT 0.417000 1.0080 0 + 18911 W1 5474 TIP3 H2 HT 0.417000 1.0080 0 + 18912 W1 5475 TIP3 OH2 OT -0.834000 15.9994 0 + 18913 W1 5475 TIP3 H1 HT 0.417000 1.0080 0 + 18914 W1 5475 TIP3 H2 HT 0.417000 1.0080 0 + 18915 W1 5476 TIP3 OH2 OT -0.834000 15.9994 0 + 18916 W1 5476 TIP3 H1 HT 0.417000 1.0080 0 + 18917 W1 5476 TIP3 H2 HT 0.417000 1.0080 0 + 18918 W1 5477 TIP3 OH2 OT -0.834000 15.9994 0 + 18919 W1 5477 TIP3 H1 HT 0.417000 1.0080 0 + 18920 W1 5477 TIP3 H2 HT 0.417000 1.0080 0 + 18921 W1 5478 TIP3 OH2 OT -0.834000 15.9994 0 + 18922 W1 5478 TIP3 H1 HT 0.417000 1.0080 0 + 18923 W1 5478 TIP3 H2 HT 0.417000 1.0080 0 + 18924 W1 5479 TIP3 OH2 OT -0.834000 15.9994 0 + 18925 W1 5479 TIP3 H1 HT 0.417000 1.0080 0 + 18926 W1 5479 TIP3 H2 HT 0.417000 1.0080 0 + 18927 W1 5480 TIP3 OH2 OT -0.834000 15.9994 0 + 18928 W1 5480 TIP3 H1 HT 0.417000 1.0080 0 + 18929 W1 5480 TIP3 H2 HT 0.417000 1.0080 0 + 18930 W1 5481 TIP3 OH2 OT -0.834000 15.9994 0 + 18931 W1 5481 TIP3 H1 HT 0.417000 1.0080 0 + 18932 W1 5481 TIP3 H2 HT 0.417000 1.0080 0 + 18933 W1 5482 TIP3 OH2 OT -0.834000 15.9994 0 + 18934 W1 5482 TIP3 H1 HT 0.417000 1.0080 0 + 18935 W1 5482 TIP3 H2 HT 0.417000 1.0080 0 + 18936 W1 5483 TIP3 OH2 OT -0.834000 15.9994 0 + 18937 W1 5483 TIP3 H1 HT 0.417000 1.0080 0 + 18938 W1 5483 TIP3 H2 HT 0.417000 1.0080 0 + 18939 W1 5484 TIP3 OH2 OT -0.834000 15.9994 0 + 18940 W1 5484 TIP3 H1 HT 0.417000 1.0080 0 + 18941 W1 5484 TIP3 H2 HT 0.417000 1.0080 0 + 18942 W1 5485 TIP3 OH2 OT -0.834000 15.9994 0 + 18943 W1 5485 TIP3 H1 HT 0.417000 1.0080 0 + 18944 W1 5485 TIP3 H2 HT 0.417000 1.0080 0 + 18945 W1 5486 TIP3 OH2 OT -0.834000 15.9994 0 + 18946 W1 5486 TIP3 H1 HT 0.417000 1.0080 0 + 18947 W1 5486 TIP3 H2 HT 0.417000 1.0080 0 + 18948 W1 5487 TIP3 OH2 OT -0.834000 15.9994 0 + 18949 W1 5487 TIP3 H1 HT 0.417000 1.0080 0 + 18950 W1 5487 TIP3 H2 HT 0.417000 1.0080 0 + 18951 W1 5488 TIP3 OH2 OT -0.834000 15.9994 0 + 18952 W1 5488 TIP3 H1 HT 0.417000 1.0080 0 + 18953 W1 5488 TIP3 H2 HT 0.417000 1.0080 0 + 18954 W1 5489 TIP3 OH2 OT -0.834000 15.9994 0 + 18955 W1 5489 TIP3 H1 HT 0.417000 1.0080 0 + 18956 W1 5489 TIP3 H2 HT 0.417000 1.0080 0 + 18957 W1 5490 TIP3 OH2 OT -0.834000 15.9994 0 + 18958 W1 5490 TIP3 H1 HT 0.417000 1.0080 0 + 18959 W1 5490 TIP3 H2 HT 0.417000 1.0080 0 + 18960 W1 5491 TIP3 OH2 OT -0.834000 15.9994 0 + 18961 W1 5491 TIP3 H1 HT 0.417000 1.0080 0 + 18962 W1 5491 TIP3 H2 HT 0.417000 1.0080 0 + 18963 W1 5492 TIP3 OH2 OT -0.834000 15.9994 0 + 18964 W1 5492 TIP3 H1 HT 0.417000 1.0080 0 + 18965 W1 5492 TIP3 H2 HT 0.417000 1.0080 0 + 18966 W1 5493 TIP3 OH2 OT -0.834000 15.9994 0 + 18967 W1 5493 TIP3 H1 HT 0.417000 1.0080 0 + 18968 W1 5493 TIP3 H2 HT 0.417000 1.0080 0 + 18969 W1 5494 TIP3 OH2 OT -0.834000 15.9994 0 + 18970 W1 5494 TIP3 H1 HT 0.417000 1.0080 0 + 18971 W1 5494 TIP3 H2 HT 0.417000 1.0080 0 + 18972 W1 5495 TIP3 OH2 OT -0.834000 15.9994 0 + 18973 W1 5495 TIP3 H1 HT 0.417000 1.0080 0 + 18974 W1 5495 TIP3 H2 HT 0.417000 1.0080 0 + 18975 W1 5496 TIP3 OH2 OT -0.834000 15.9994 0 + 18976 W1 5496 TIP3 H1 HT 0.417000 1.0080 0 + 18977 W1 5496 TIP3 H2 HT 0.417000 1.0080 0 + 18978 W1 5497 TIP3 OH2 OT -0.834000 15.9994 0 + 18979 W1 5497 TIP3 H1 HT 0.417000 1.0080 0 + 18980 W1 5497 TIP3 H2 HT 0.417000 1.0080 0 + 18981 W1 5498 TIP3 OH2 OT -0.834000 15.9994 0 + 18982 W1 5498 TIP3 H1 HT 0.417000 1.0080 0 + 18983 W1 5498 TIP3 H2 HT 0.417000 1.0080 0 + 18984 W1 5499 TIP3 OH2 OT -0.834000 15.9994 0 + 18985 W1 5499 TIP3 H1 HT 0.417000 1.0080 0 + 18986 W1 5499 TIP3 H2 HT 0.417000 1.0080 0 + 18987 W1 5500 TIP3 OH2 OT -0.834000 15.9994 0 + 18988 W1 5500 TIP3 H1 HT 0.417000 1.0080 0 + 18989 W1 5500 TIP3 H2 HT 0.417000 1.0080 0 + 18990 W1 5501 TIP3 OH2 OT -0.834000 15.9994 0 + 18991 W1 5501 TIP3 H1 HT 0.417000 1.0080 0 + 18992 W1 5501 TIP3 H2 HT 0.417000 1.0080 0 + 18993 W1 5502 TIP3 OH2 OT -0.834000 15.9994 0 + 18994 W1 5502 TIP3 H1 HT 0.417000 1.0080 0 + 18995 W1 5502 TIP3 H2 HT 0.417000 1.0080 0 + 18996 W1 5503 TIP3 OH2 OT -0.834000 15.9994 0 + 18997 W1 5503 TIP3 H1 HT 0.417000 1.0080 0 + 18998 W1 5503 TIP3 H2 HT 0.417000 1.0080 0 + 18999 W1 5504 TIP3 OH2 OT -0.834000 15.9994 0 + 19000 W1 5504 TIP3 H1 HT 0.417000 1.0080 0 + 19001 W1 5504 TIP3 H2 HT 0.417000 1.0080 0 + 19002 W1 5505 TIP3 OH2 OT -0.834000 15.9994 0 + 19003 W1 5505 TIP3 H1 HT 0.417000 1.0080 0 + 19004 W1 5505 TIP3 H2 HT 0.417000 1.0080 0 + 19005 W1 5506 TIP3 OH2 OT -0.834000 15.9994 0 + 19006 W1 5506 TIP3 H1 HT 0.417000 1.0080 0 + 19007 W1 5506 TIP3 H2 HT 0.417000 1.0080 0 + 19008 W1 5507 TIP3 OH2 OT -0.834000 15.9994 0 + 19009 W1 5507 TIP3 H1 HT 0.417000 1.0080 0 + 19010 W1 5507 TIP3 H2 HT 0.417000 1.0080 0 + 19011 W1 5508 TIP3 OH2 OT -0.834000 15.9994 0 + 19012 W1 5508 TIP3 H1 HT 0.417000 1.0080 0 + 19013 W1 5508 TIP3 H2 HT 0.417000 1.0080 0 + 19014 W1 5509 TIP3 OH2 OT -0.834000 15.9994 0 + 19015 W1 5509 TIP3 H1 HT 0.417000 1.0080 0 + 19016 W1 5509 TIP3 H2 HT 0.417000 1.0080 0 + 19017 W1 5510 TIP3 OH2 OT -0.834000 15.9994 0 + 19018 W1 5510 TIP3 H1 HT 0.417000 1.0080 0 + 19019 W1 5510 TIP3 H2 HT 0.417000 1.0080 0 + 19020 W1 5511 TIP3 OH2 OT -0.834000 15.9994 0 + 19021 W1 5511 TIP3 H1 HT 0.417000 1.0080 0 + 19022 W1 5511 TIP3 H2 HT 0.417000 1.0080 0 + 19023 W1 5512 TIP3 OH2 OT -0.834000 15.9994 0 + 19024 W1 5512 TIP3 H1 HT 0.417000 1.0080 0 + 19025 W1 5512 TIP3 H2 HT 0.417000 1.0080 0 + 19026 W1 5513 TIP3 OH2 OT -0.834000 15.9994 0 + 19027 W1 5513 TIP3 H1 HT 0.417000 1.0080 0 + 19028 W1 5513 TIP3 H2 HT 0.417000 1.0080 0 + 19029 W1 5514 TIP3 OH2 OT -0.834000 15.9994 0 + 19030 W1 5514 TIP3 H1 HT 0.417000 1.0080 0 + 19031 W1 5514 TIP3 H2 HT 0.417000 1.0080 0 + 19032 W1 5515 TIP3 OH2 OT -0.834000 15.9994 0 + 19033 W1 5515 TIP3 H1 HT 0.417000 1.0080 0 + 19034 W1 5515 TIP3 H2 HT 0.417000 1.0080 0 + 19035 W1 5516 TIP3 OH2 OT -0.834000 15.9994 0 + 19036 W1 5516 TIP3 H1 HT 0.417000 1.0080 0 + 19037 W1 5516 TIP3 H2 HT 0.417000 1.0080 0 + 19038 W1 5517 TIP3 OH2 OT -0.834000 15.9994 0 + 19039 W1 5517 TIP3 H1 HT 0.417000 1.0080 0 + 19040 W1 5517 TIP3 H2 HT 0.417000 1.0080 0 + 19041 W1 5518 TIP3 OH2 OT -0.834000 15.9994 0 + 19042 W1 5518 TIP3 H1 HT 0.417000 1.0080 0 + 19043 W1 5518 TIP3 H2 HT 0.417000 1.0080 0 + 19044 W1 5519 TIP3 OH2 OT -0.834000 15.9994 0 + 19045 W1 5519 TIP3 H1 HT 0.417000 1.0080 0 + 19046 W1 5519 TIP3 H2 HT 0.417000 1.0080 0 + 19047 W1 5520 TIP3 OH2 OT -0.834000 15.9994 0 + 19048 W1 5520 TIP3 H1 HT 0.417000 1.0080 0 + 19049 W1 5520 TIP3 H2 HT 0.417000 1.0080 0 + 19050 W1 5521 TIP3 OH2 OT -0.834000 15.9994 0 + 19051 W1 5521 TIP3 H1 HT 0.417000 1.0080 0 + 19052 W1 5521 TIP3 H2 HT 0.417000 1.0080 0 + 19053 W1 5522 TIP3 OH2 OT -0.834000 15.9994 0 + 19054 W1 5522 TIP3 H1 HT 0.417000 1.0080 0 + 19055 W1 5522 TIP3 H2 HT 0.417000 1.0080 0 + 19056 W1 5523 TIP3 OH2 OT -0.834000 15.9994 0 + 19057 W1 5523 TIP3 H1 HT 0.417000 1.0080 0 + 19058 W1 5523 TIP3 H2 HT 0.417000 1.0080 0 + 19059 W1 5524 TIP3 OH2 OT -0.834000 15.9994 0 + 19060 W1 5524 TIP3 H1 HT 0.417000 1.0080 0 + 19061 W1 5524 TIP3 H2 HT 0.417000 1.0080 0 + 19062 W1 5525 TIP3 OH2 OT -0.834000 15.9994 0 + 19063 W1 5525 TIP3 H1 HT 0.417000 1.0080 0 + 19064 W1 5525 TIP3 H2 HT 0.417000 1.0080 0 + 19065 W1 5526 TIP3 OH2 OT -0.834000 15.9994 0 + 19066 W1 5526 TIP3 H1 HT 0.417000 1.0080 0 + 19067 W1 5526 TIP3 H2 HT 0.417000 1.0080 0 + 19068 W1 5527 TIP3 OH2 OT -0.834000 15.9994 0 + 19069 W1 5527 TIP3 H1 HT 0.417000 1.0080 0 + 19070 W1 5527 TIP3 H2 HT 0.417000 1.0080 0 + 19071 W1 5528 TIP3 OH2 OT -0.834000 15.9994 0 + 19072 W1 5528 TIP3 H1 HT 0.417000 1.0080 0 + 19073 W1 5528 TIP3 H2 HT 0.417000 1.0080 0 + 19074 W1 5529 TIP3 OH2 OT -0.834000 15.9994 0 + 19075 W1 5529 TIP3 H1 HT 0.417000 1.0080 0 + 19076 W1 5529 TIP3 H2 HT 0.417000 1.0080 0 + 19077 W1 5530 TIP3 OH2 OT -0.834000 15.9994 0 + 19078 W1 5530 TIP3 H1 HT 0.417000 1.0080 0 + 19079 W1 5530 TIP3 H2 HT 0.417000 1.0080 0 + 19080 W1 5531 TIP3 OH2 OT -0.834000 15.9994 0 + 19081 W1 5531 TIP3 H1 HT 0.417000 1.0080 0 + 19082 W1 5531 TIP3 H2 HT 0.417000 1.0080 0 + 19083 W1 5532 TIP3 OH2 OT -0.834000 15.9994 0 + 19084 W1 5532 TIP3 H1 HT 0.417000 1.0080 0 + 19085 W1 5532 TIP3 H2 HT 0.417000 1.0080 0 + 19086 W1 5533 TIP3 OH2 OT -0.834000 15.9994 0 + 19087 W1 5533 TIP3 H1 HT 0.417000 1.0080 0 + 19088 W1 5533 TIP3 H2 HT 0.417000 1.0080 0 + 19089 W1 5534 TIP3 OH2 OT -0.834000 15.9994 0 + 19090 W1 5534 TIP3 H1 HT 0.417000 1.0080 0 + 19091 W1 5534 TIP3 H2 HT 0.417000 1.0080 0 + 19092 W1 5535 TIP3 OH2 OT -0.834000 15.9994 0 + 19093 W1 5535 TIP3 H1 HT 0.417000 1.0080 0 + 19094 W1 5535 TIP3 H2 HT 0.417000 1.0080 0 + 19095 W1 5536 TIP3 OH2 OT -0.834000 15.9994 0 + 19096 W1 5536 TIP3 H1 HT 0.417000 1.0080 0 + 19097 W1 5536 TIP3 H2 HT 0.417000 1.0080 0 + 19098 W1 5537 TIP3 OH2 OT -0.834000 15.9994 0 + 19099 W1 5537 TIP3 H1 HT 0.417000 1.0080 0 + 19100 W1 5537 TIP3 H2 HT 0.417000 1.0080 0 + 19101 W1 5538 TIP3 OH2 OT -0.834000 15.9994 0 + 19102 W1 5538 TIP3 H1 HT 0.417000 1.0080 0 + 19103 W1 5538 TIP3 H2 HT 0.417000 1.0080 0 + 19104 W1 5539 TIP3 OH2 OT -0.834000 15.9994 0 + 19105 W1 5539 TIP3 H1 HT 0.417000 1.0080 0 + 19106 W1 5539 TIP3 H2 HT 0.417000 1.0080 0 + 19107 W1 5540 TIP3 OH2 OT -0.834000 15.9994 0 + 19108 W1 5540 TIP3 H1 HT 0.417000 1.0080 0 + 19109 W1 5540 TIP3 H2 HT 0.417000 1.0080 0 + 19110 W1 5541 TIP3 OH2 OT -0.834000 15.9994 0 + 19111 W1 5541 TIP3 H1 HT 0.417000 1.0080 0 + 19112 W1 5541 TIP3 H2 HT 0.417000 1.0080 0 + 19113 W1 5542 TIP3 OH2 OT -0.834000 15.9994 0 + 19114 W1 5542 TIP3 H1 HT 0.417000 1.0080 0 + 19115 W1 5542 TIP3 H2 HT 0.417000 1.0080 0 + 19116 W1 5543 TIP3 OH2 OT -0.834000 15.9994 0 + 19117 W1 5543 TIP3 H1 HT 0.417000 1.0080 0 + 19118 W1 5543 TIP3 H2 HT 0.417000 1.0080 0 + 19119 W1 5544 TIP3 OH2 OT -0.834000 15.9994 0 + 19120 W1 5544 TIP3 H1 HT 0.417000 1.0080 0 + 19121 W1 5544 TIP3 H2 HT 0.417000 1.0080 0 + 19122 W1 5545 TIP3 OH2 OT -0.834000 15.9994 0 + 19123 W1 5545 TIP3 H1 HT 0.417000 1.0080 0 + 19124 W1 5545 TIP3 H2 HT 0.417000 1.0080 0 + 19125 W1 5546 TIP3 OH2 OT -0.834000 15.9994 0 + 19126 W1 5546 TIP3 H1 HT 0.417000 1.0080 0 + 19127 W1 5546 TIP3 H2 HT 0.417000 1.0080 0 + 19128 W1 5547 TIP3 OH2 OT -0.834000 15.9994 0 + 19129 W1 5547 TIP3 H1 HT 0.417000 1.0080 0 + 19130 W1 5547 TIP3 H2 HT 0.417000 1.0080 0 + 19131 W1 5548 TIP3 OH2 OT -0.834000 15.9994 0 + 19132 W1 5548 TIP3 H1 HT 0.417000 1.0080 0 + 19133 W1 5548 TIP3 H2 HT 0.417000 1.0080 0 + 19134 W1 5549 TIP3 OH2 OT -0.834000 15.9994 0 + 19135 W1 5549 TIP3 H1 HT 0.417000 1.0080 0 + 19136 W1 5549 TIP3 H2 HT 0.417000 1.0080 0 + 19137 W1 5550 TIP3 OH2 OT -0.834000 15.9994 0 + 19138 W1 5550 TIP3 H1 HT 0.417000 1.0080 0 + 19139 W1 5550 TIP3 H2 HT 0.417000 1.0080 0 + 19140 W1 5551 TIP3 OH2 OT -0.834000 15.9994 0 + 19141 W1 5551 TIP3 H1 HT 0.417000 1.0080 0 + 19142 W1 5551 TIP3 H2 HT 0.417000 1.0080 0 + 19143 W1 5552 TIP3 OH2 OT -0.834000 15.9994 0 + 19144 W1 5552 TIP3 H1 HT 0.417000 1.0080 0 + 19145 W1 5552 TIP3 H2 HT 0.417000 1.0080 0 + 19146 W1 5553 TIP3 OH2 OT -0.834000 15.9994 0 + 19147 W1 5553 TIP3 H1 HT 0.417000 1.0080 0 + 19148 W1 5553 TIP3 H2 HT 0.417000 1.0080 0 + 19149 W1 5554 TIP3 OH2 OT -0.834000 15.9994 0 + 19150 W1 5554 TIP3 H1 HT 0.417000 1.0080 0 + 19151 W1 5554 TIP3 H2 HT 0.417000 1.0080 0 + 19152 W1 5555 TIP3 OH2 OT -0.834000 15.9994 0 + 19153 W1 5555 TIP3 H1 HT 0.417000 1.0080 0 + 19154 W1 5555 TIP3 H2 HT 0.417000 1.0080 0 + 19155 W1 5556 TIP3 OH2 OT -0.834000 15.9994 0 + 19156 W1 5556 TIP3 H1 HT 0.417000 1.0080 0 + 19157 W1 5556 TIP3 H2 HT 0.417000 1.0080 0 + 19158 W1 5557 TIP3 OH2 OT -0.834000 15.9994 0 + 19159 W1 5557 TIP3 H1 HT 0.417000 1.0080 0 + 19160 W1 5557 TIP3 H2 HT 0.417000 1.0080 0 + 19161 W1 5558 TIP3 OH2 OT -0.834000 15.9994 0 + 19162 W1 5558 TIP3 H1 HT 0.417000 1.0080 0 + 19163 W1 5558 TIP3 H2 HT 0.417000 1.0080 0 + 19164 W1 5559 TIP3 OH2 OT -0.834000 15.9994 0 + 19165 W1 5559 TIP3 H1 HT 0.417000 1.0080 0 + 19166 W1 5559 TIP3 H2 HT 0.417000 1.0080 0 + 19167 W1 5560 TIP3 OH2 OT -0.834000 15.9994 0 + 19168 W1 5560 TIP3 H1 HT 0.417000 1.0080 0 + 19169 W1 5560 TIP3 H2 HT 0.417000 1.0080 0 + 19170 W1 5561 TIP3 OH2 OT -0.834000 15.9994 0 + 19171 W1 5561 TIP3 H1 HT 0.417000 1.0080 0 + 19172 W1 5561 TIP3 H2 HT 0.417000 1.0080 0 + 19173 W1 5562 TIP3 OH2 OT -0.834000 15.9994 0 + 19174 W1 5562 TIP3 H1 HT 0.417000 1.0080 0 + 19175 W1 5562 TIP3 H2 HT 0.417000 1.0080 0 + 19176 W1 5563 TIP3 OH2 OT -0.834000 15.9994 0 + 19177 W1 5563 TIP3 H1 HT 0.417000 1.0080 0 + 19178 W1 5563 TIP3 H2 HT 0.417000 1.0080 0 + 19179 W1 5564 TIP3 OH2 OT -0.834000 15.9994 0 + 19180 W1 5564 TIP3 H1 HT 0.417000 1.0080 0 + 19181 W1 5564 TIP3 H2 HT 0.417000 1.0080 0 + 19182 W1 5565 TIP3 OH2 OT -0.834000 15.9994 0 + 19183 W1 5565 TIP3 H1 HT 0.417000 1.0080 0 + 19184 W1 5565 TIP3 H2 HT 0.417000 1.0080 0 + 19185 W1 5566 TIP3 OH2 OT -0.834000 15.9994 0 + 19186 W1 5566 TIP3 H1 HT 0.417000 1.0080 0 + 19187 W1 5566 TIP3 H2 HT 0.417000 1.0080 0 + 19188 W1 5567 TIP3 OH2 OT -0.834000 15.9994 0 + 19189 W1 5567 TIP3 H1 HT 0.417000 1.0080 0 + 19190 W1 5567 TIP3 H2 HT 0.417000 1.0080 0 + 19191 W1 5568 TIP3 OH2 OT -0.834000 15.9994 0 + 19192 W1 5568 TIP3 H1 HT 0.417000 1.0080 0 + 19193 W1 5568 TIP3 H2 HT 0.417000 1.0080 0 + 19194 W1 5569 TIP3 OH2 OT -0.834000 15.9994 0 + 19195 W1 5569 TIP3 H1 HT 0.417000 1.0080 0 + 19196 W1 5569 TIP3 H2 HT 0.417000 1.0080 0 + 19197 W1 5570 TIP3 OH2 OT -0.834000 15.9994 0 + 19198 W1 5570 TIP3 H1 HT 0.417000 1.0080 0 + 19199 W1 5570 TIP3 H2 HT 0.417000 1.0080 0 + 19200 W1 5571 TIP3 OH2 OT -0.834000 15.9994 0 + 19201 W1 5571 TIP3 H1 HT 0.417000 1.0080 0 + 19202 W1 5571 TIP3 H2 HT 0.417000 1.0080 0 + 19203 W1 5572 TIP3 OH2 OT -0.834000 15.9994 0 + 19204 W1 5572 TIP3 H1 HT 0.417000 1.0080 0 + 19205 W1 5572 TIP3 H2 HT 0.417000 1.0080 0 + 19206 W1 5573 TIP3 OH2 OT -0.834000 15.9994 0 + 19207 W1 5573 TIP3 H1 HT 0.417000 1.0080 0 + 19208 W1 5573 TIP3 H2 HT 0.417000 1.0080 0 + 19209 W1 5574 TIP3 OH2 OT -0.834000 15.9994 0 + 19210 W1 5574 TIP3 H1 HT 0.417000 1.0080 0 + 19211 W1 5574 TIP3 H2 HT 0.417000 1.0080 0 + 19212 W1 5575 TIP3 OH2 OT -0.834000 15.9994 0 + 19213 W1 5575 TIP3 H1 HT 0.417000 1.0080 0 + 19214 W1 5575 TIP3 H2 HT 0.417000 1.0080 0 + 19215 W1 5576 TIP3 OH2 OT -0.834000 15.9994 0 + 19216 W1 5576 TIP3 H1 HT 0.417000 1.0080 0 + 19217 W1 5576 TIP3 H2 HT 0.417000 1.0080 0 + 19218 W1 5577 TIP3 OH2 OT -0.834000 15.9994 0 + 19219 W1 5577 TIP3 H1 HT 0.417000 1.0080 0 + 19220 W1 5577 TIP3 H2 HT 0.417000 1.0080 0 + 19221 W1 5578 TIP3 OH2 OT -0.834000 15.9994 0 + 19222 W1 5578 TIP3 H1 HT 0.417000 1.0080 0 + 19223 W1 5578 TIP3 H2 HT 0.417000 1.0080 0 + 19224 W1 5579 TIP3 OH2 OT -0.834000 15.9994 0 + 19225 W1 5579 TIP3 H1 HT 0.417000 1.0080 0 + 19226 W1 5579 TIP3 H2 HT 0.417000 1.0080 0 + 19227 W1 5580 TIP3 OH2 OT -0.834000 15.9994 0 + 19228 W1 5580 TIP3 H1 HT 0.417000 1.0080 0 + 19229 W1 5580 TIP3 H2 HT 0.417000 1.0080 0 + 19230 W1 5581 TIP3 OH2 OT -0.834000 15.9994 0 + 19231 W1 5581 TIP3 H1 HT 0.417000 1.0080 0 + 19232 W1 5581 TIP3 H2 HT 0.417000 1.0080 0 + 19233 W1 5582 TIP3 OH2 OT -0.834000 15.9994 0 + 19234 W1 5582 TIP3 H1 HT 0.417000 1.0080 0 + 19235 W1 5582 TIP3 H2 HT 0.417000 1.0080 0 + 19236 W1 5583 TIP3 OH2 OT -0.834000 15.9994 0 + 19237 W1 5583 TIP3 H1 HT 0.417000 1.0080 0 + 19238 W1 5583 TIP3 H2 HT 0.417000 1.0080 0 + 19239 W1 5584 TIP3 OH2 OT -0.834000 15.9994 0 + 19240 W1 5584 TIP3 H1 HT 0.417000 1.0080 0 + 19241 W1 5584 TIP3 H2 HT 0.417000 1.0080 0 + 19242 W1 5585 TIP3 OH2 OT -0.834000 15.9994 0 + 19243 W1 5585 TIP3 H1 HT 0.417000 1.0080 0 + 19244 W1 5585 TIP3 H2 HT 0.417000 1.0080 0 + 19245 W1 5586 TIP3 OH2 OT -0.834000 15.9994 0 + 19246 W1 5586 TIP3 H1 HT 0.417000 1.0080 0 + 19247 W1 5586 TIP3 H2 HT 0.417000 1.0080 0 + 19248 W1 5587 TIP3 OH2 OT -0.834000 15.9994 0 + 19249 W1 5587 TIP3 H1 HT 0.417000 1.0080 0 + 19250 W1 5587 TIP3 H2 HT 0.417000 1.0080 0 + 19251 W1 5588 TIP3 OH2 OT -0.834000 15.9994 0 + 19252 W1 5588 TIP3 H1 HT 0.417000 1.0080 0 + 19253 W1 5588 TIP3 H2 HT 0.417000 1.0080 0 + 19254 W1 5589 TIP3 OH2 OT -0.834000 15.9994 0 + 19255 W1 5589 TIP3 H1 HT 0.417000 1.0080 0 + 19256 W1 5589 TIP3 H2 HT 0.417000 1.0080 0 + 19257 W1 5590 TIP3 OH2 OT -0.834000 15.9994 0 + 19258 W1 5590 TIP3 H1 HT 0.417000 1.0080 0 + 19259 W1 5590 TIP3 H2 HT 0.417000 1.0080 0 + 19260 W1 5591 TIP3 OH2 OT -0.834000 15.9994 0 + 19261 W1 5591 TIP3 H1 HT 0.417000 1.0080 0 + 19262 W1 5591 TIP3 H2 HT 0.417000 1.0080 0 + 19263 W1 5592 TIP3 OH2 OT -0.834000 15.9994 0 + 19264 W1 5592 TIP3 H1 HT 0.417000 1.0080 0 + 19265 W1 5592 TIP3 H2 HT 0.417000 1.0080 0 + 19266 W1 5593 TIP3 OH2 OT -0.834000 15.9994 0 + 19267 W1 5593 TIP3 H1 HT 0.417000 1.0080 0 + 19268 W1 5593 TIP3 H2 HT 0.417000 1.0080 0 + 19269 W1 5594 TIP3 OH2 OT -0.834000 15.9994 0 + 19270 W1 5594 TIP3 H1 HT 0.417000 1.0080 0 + 19271 W1 5594 TIP3 H2 HT 0.417000 1.0080 0 + 19272 W1 5595 TIP3 OH2 OT -0.834000 15.9994 0 + 19273 W1 5595 TIP3 H1 HT 0.417000 1.0080 0 + 19274 W1 5595 TIP3 H2 HT 0.417000 1.0080 0 + 19275 W1 5596 TIP3 OH2 OT -0.834000 15.9994 0 + 19276 W1 5596 TIP3 H1 HT 0.417000 1.0080 0 + 19277 W1 5596 TIP3 H2 HT 0.417000 1.0080 0 + 19278 W1 5597 TIP3 OH2 OT -0.834000 15.9994 0 + 19279 W1 5597 TIP3 H1 HT 0.417000 1.0080 0 + 19280 W1 5597 TIP3 H2 HT 0.417000 1.0080 0 + 19281 W1 5598 TIP3 OH2 OT -0.834000 15.9994 0 + 19282 W1 5598 TIP3 H1 HT 0.417000 1.0080 0 + 19283 W1 5598 TIP3 H2 HT 0.417000 1.0080 0 + 19284 W1 5599 TIP3 OH2 OT -0.834000 15.9994 0 + 19285 W1 5599 TIP3 H1 HT 0.417000 1.0080 0 + 19286 W1 5599 TIP3 H2 HT 0.417000 1.0080 0 + 19287 W1 5600 TIP3 OH2 OT -0.834000 15.9994 0 + 19288 W1 5600 TIP3 H1 HT 0.417000 1.0080 0 + 19289 W1 5600 TIP3 H2 HT 0.417000 1.0080 0 + 19290 W1 5601 TIP3 OH2 OT -0.834000 15.9994 0 + 19291 W1 5601 TIP3 H1 HT 0.417000 1.0080 0 + 19292 W1 5601 TIP3 H2 HT 0.417000 1.0080 0 + 19293 W1 5602 TIP3 OH2 OT -0.834000 15.9994 0 + 19294 W1 5602 TIP3 H1 HT 0.417000 1.0080 0 + 19295 W1 5602 TIP3 H2 HT 0.417000 1.0080 0 + 19296 W1 5603 TIP3 OH2 OT -0.834000 15.9994 0 + 19297 W1 5603 TIP3 H1 HT 0.417000 1.0080 0 + 19298 W1 5603 TIP3 H2 HT 0.417000 1.0080 0 + 19299 W1 5604 TIP3 OH2 OT -0.834000 15.9994 0 + 19300 W1 5604 TIP3 H1 HT 0.417000 1.0080 0 + 19301 W1 5604 TIP3 H2 HT 0.417000 1.0080 0 + 19302 W1 5605 TIP3 OH2 OT -0.834000 15.9994 0 + 19303 W1 5605 TIP3 H1 HT 0.417000 1.0080 0 + 19304 W1 5605 TIP3 H2 HT 0.417000 1.0080 0 + 19305 W1 5606 TIP3 OH2 OT -0.834000 15.9994 0 + 19306 W1 5606 TIP3 H1 HT 0.417000 1.0080 0 + 19307 W1 5606 TIP3 H2 HT 0.417000 1.0080 0 + 19308 W1 5607 TIP3 OH2 OT -0.834000 15.9994 0 + 19309 W1 5607 TIP3 H1 HT 0.417000 1.0080 0 + 19310 W1 5607 TIP3 H2 HT 0.417000 1.0080 0 + 19311 W1 5608 TIP3 OH2 OT -0.834000 15.9994 0 + 19312 W1 5608 TIP3 H1 HT 0.417000 1.0080 0 + 19313 W1 5608 TIP3 H2 HT 0.417000 1.0080 0 + 19314 W1 5609 TIP3 OH2 OT -0.834000 15.9994 0 + 19315 W1 5609 TIP3 H1 HT 0.417000 1.0080 0 + 19316 W1 5609 TIP3 H2 HT 0.417000 1.0080 0 + 19317 W1 5610 TIP3 OH2 OT -0.834000 15.9994 0 + 19318 W1 5610 TIP3 H1 HT 0.417000 1.0080 0 + 19319 W1 5610 TIP3 H2 HT 0.417000 1.0080 0 + 19320 W1 5611 TIP3 OH2 OT -0.834000 15.9994 0 + 19321 W1 5611 TIP3 H1 HT 0.417000 1.0080 0 + 19322 W1 5611 TIP3 H2 HT 0.417000 1.0080 0 + 19323 W1 5612 TIP3 OH2 OT -0.834000 15.9994 0 + 19324 W1 5612 TIP3 H1 HT 0.417000 1.0080 0 + 19325 W1 5612 TIP3 H2 HT 0.417000 1.0080 0 + 19326 W1 5613 TIP3 OH2 OT -0.834000 15.9994 0 + 19327 W1 5613 TIP3 H1 HT 0.417000 1.0080 0 + 19328 W1 5613 TIP3 H2 HT 0.417000 1.0080 0 + 19329 W1 5614 TIP3 OH2 OT -0.834000 15.9994 0 + 19330 W1 5614 TIP3 H1 HT 0.417000 1.0080 0 + 19331 W1 5614 TIP3 H2 HT 0.417000 1.0080 0 + 19332 W1 5615 TIP3 OH2 OT -0.834000 15.9994 0 + 19333 W1 5615 TIP3 H1 HT 0.417000 1.0080 0 + 19334 W1 5615 TIP3 H2 HT 0.417000 1.0080 0 + 19335 W1 5616 TIP3 OH2 OT -0.834000 15.9994 0 + 19336 W1 5616 TIP3 H1 HT 0.417000 1.0080 0 + 19337 W1 5616 TIP3 H2 HT 0.417000 1.0080 0 + 19338 W1 5617 TIP3 OH2 OT -0.834000 15.9994 0 + 19339 W1 5617 TIP3 H1 HT 0.417000 1.0080 0 + 19340 W1 5617 TIP3 H2 HT 0.417000 1.0080 0 + 19341 W1 5618 TIP3 OH2 OT -0.834000 15.9994 0 + 19342 W1 5618 TIP3 H1 HT 0.417000 1.0080 0 + 19343 W1 5618 TIP3 H2 HT 0.417000 1.0080 0 + 19344 W1 5619 TIP3 OH2 OT -0.834000 15.9994 0 + 19345 W1 5619 TIP3 H1 HT 0.417000 1.0080 0 + 19346 W1 5619 TIP3 H2 HT 0.417000 1.0080 0 + 19347 W1 5620 TIP3 OH2 OT -0.834000 15.9994 0 + 19348 W1 5620 TIP3 H1 HT 0.417000 1.0080 0 + 19349 W1 5620 TIP3 H2 HT 0.417000 1.0080 0 + 19350 W1 5621 TIP3 OH2 OT -0.834000 15.9994 0 + 19351 W1 5621 TIP3 H1 HT 0.417000 1.0080 0 + 19352 W1 5621 TIP3 H2 HT 0.417000 1.0080 0 + 19353 W1 5622 TIP3 OH2 OT -0.834000 15.9994 0 + 19354 W1 5622 TIP3 H1 HT 0.417000 1.0080 0 + 19355 W1 5622 TIP3 H2 HT 0.417000 1.0080 0 + 19356 W1 5623 TIP3 OH2 OT -0.834000 15.9994 0 + 19357 W1 5623 TIP3 H1 HT 0.417000 1.0080 0 + 19358 W1 5623 TIP3 H2 HT 0.417000 1.0080 0 + 19359 W1 5624 TIP3 OH2 OT -0.834000 15.9994 0 + 19360 W1 5624 TIP3 H1 HT 0.417000 1.0080 0 + 19361 W1 5624 TIP3 H2 HT 0.417000 1.0080 0 + 19362 W1 5625 TIP3 OH2 OT -0.834000 15.9994 0 + 19363 W1 5625 TIP3 H1 HT 0.417000 1.0080 0 + 19364 W1 5625 TIP3 H2 HT 0.417000 1.0080 0 + 19365 W1 5626 TIP3 OH2 OT -0.834000 15.9994 0 + 19366 W1 5626 TIP3 H1 HT 0.417000 1.0080 0 + 19367 W1 5626 TIP3 H2 HT 0.417000 1.0080 0 + 19368 W1 5627 TIP3 OH2 OT -0.834000 15.9994 0 + 19369 W1 5627 TIP3 H1 HT 0.417000 1.0080 0 + 19370 W1 5627 TIP3 H2 HT 0.417000 1.0080 0 + 19371 W1 5628 TIP3 OH2 OT -0.834000 15.9994 0 + 19372 W1 5628 TIP3 H1 HT 0.417000 1.0080 0 + 19373 W1 5628 TIP3 H2 HT 0.417000 1.0080 0 + 19374 W1 5629 TIP3 OH2 OT -0.834000 15.9994 0 + 19375 W1 5629 TIP3 H1 HT 0.417000 1.0080 0 + 19376 W1 5629 TIP3 H2 HT 0.417000 1.0080 0 + 19377 W1 5630 TIP3 OH2 OT -0.834000 15.9994 0 + 19378 W1 5630 TIP3 H1 HT 0.417000 1.0080 0 + 19379 W1 5630 TIP3 H2 HT 0.417000 1.0080 0 + 19380 W1 5631 TIP3 OH2 OT -0.834000 15.9994 0 + 19381 W1 5631 TIP3 H1 HT 0.417000 1.0080 0 + 19382 W1 5631 TIP3 H2 HT 0.417000 1.0080 0 + 19383 W1 5632 TIP3 OH2 OT -0.834000 15.9994 0 + 19384 W1 5632 TIP3 H1 HT 0.417000 1.0080 0 + 19385 W1 5632 TIP3 H2 HT 0.417000 1.0080 0 + 19386 W1 5633 TIP3 OH2 OT -0.834000 15.9994 0 + 19387 W1 5633 TIP3 H1 HT 0.417000 1.0080 0 + 19388 W1 5633 TIP3 H2 HT 0.417000 1.0080 0 + 19389 W1 5634 TIP3 OH2 OT -0.834000 15.9994 0 + 19390 W1 5634 TIP3 H1 HT 0.417000 1.0080 0 + 19391 W1 5634 TIP3 H2 HT 0.417000 1.0080 0 + 19392 W1 5635 TIP3 OH2 OT -0.834000 15.9994 0 + 19393 W1 5635 TIP3 H1 HT 0.417000 1.0080 0 + 19394 W1 5635 TIP3 H2 HT 0.417000 1.0080 0 + 19395 W1 5636 TIP3 OH2 OT -0.834000 15.9994 0 + 19396 W1 5636 TIP3 H1 HT 0.417000 1.0080 0 + 19397 W1 5636 TIP3 H2 HT 0.417000 1.0080 0 + 19398 W1 5637 TIP3 OH2 OT -0.834000 15.9994 0 + 19399 W1 5637 TIP3 H1 HT 0.417000 1.0080 0 + 19400 W1 5637 TIP3 H2 HT 0.417000 1.0080 0 + 19401 W1 5638 TIP3 OH2 OT -0.834000 15.9994 0 + 19402 W1 5638 TIP3 H1 HT 0.417000 1.0080 0 + 19403 W1 5638 TIP3 H2 HT 0.417000 1.0080 0 + 19404 W1 5639 TIP3 OH2 OT -0.834000 15.9994 0 + 19405 W1 5639 TIP3 H1 HT 0.417000 1.0080 0 + 19406 W1 5639 TIP3 H2 HT 0.417000 1.0080 0 + 19407 W1 5640 TIP3 OH2 OT -0.834000 15.9994 0 + 19408 W1 5640 TIP3 H1 HT 0.417000 1.0080 0 + 19409 W1 5640 TIP3 H2 HT 0.417000 1.0080 0 + 19410 W1 5641 TIP3 OH2 OT -0.834000 15.9994 0 + 19411 W1 5641 TIP3 H1 HT 0.417000 1.0080 0 + 19412 W1 5641 TIP3 H2 HT 0.417000 1.0080 0 + 19413 W1 5642 TIP3 OH2 OT -0.834000 15.9994 0 + 19414 W1 5642 TIP3 H1 HT 0.417000 1.0080 0 + 19415 W1 5642 TIP3 H2 HT 0.417000 1.0080 0 + 19416 W1 5643 TIP3 OH2 OT -0.834000 15.9994 0 + 19417 W1 5643 TIP3 H1 HT 0.417000 1.0080 0 + 19418 W1 5643 TIP3 H2 HT 0.417000 1.0080 0 + 19419 W1 5644 TIP3 OH2 OT -0.834000 15.9994 0 + 19420 W1 5644 TIP3 H1 HT 0.417000 1.0080 0 + 19421 W1 5644 TIP3 H2 HT 0.417000 1.0080 0 + 19422 W1 5645 TIP3 OH2 OT -0.834000 15.9994 0 + 19423 W1 5645 TIP3 H1 HT 0.417000 1.0080 0 + 19424 W1 5645 TIP3 H2 HT 0.417000 1.0080 0 + 19425 W1 5646 TIP3 OH2 OT -0.834000 15.9994 0 + 19426 W1 5646 TIP3 H1 HT 0.417000 1.0080 0 + 19427 W1 5646 TIP3 H2 HT 0.417000 1.0080 0 + 19428 W1 5647 TIP3 OH2 OT -0.834000 15.9994 0 + 19429 W1 5647 TIP3 H1 HT 0.417000 1.0080 0 + 19430 W1 5647 TIP3 H2 HT 0.417000 1.0080 0 + 19431 W1 5648 TIP3 OH2 OT -0.834000 15.9994 0 + 19432 W1 5648 TIP3 H1 HT 0.417000 1.0080 0 + 19433 W1 5648 TIP3 H2 HT 0.417000 1.0080 0 + 19434 W1 5649 TIP3 OH2 OT -0.834000 15.9994 0 + 19435 W1 5649 TIP3 H1 HT 0.417000 1.0080 0 + 19436 W1 5649 TIP3 H2 HT 0.417000 1.0080 0 + 19437 W1 5650 TIP3 OH2 OT -0.834000 15.9994 0 + 19438 W1 5650 TIP3 H1 HT 0.417000 1.0080 0 + 19439 W1 5650 TIP3 H2 HT 0.417000 1.0080 0 + 19440 W1 5651 TIP3 OH2 OT -0.834000 15.9994 0 + 19441 W1 5651 TIP3 H1 HT 0.417000 1.0080 0 + 19442 W1 5651 TIP3 H2 HT 0.417000 1.0080 0 + 19443 W1 5652 TIP3 OH2 OT -0.834000 15.9994 0 + 19444 W1 5652 TIP3 H1 HT 0.417000 1.0080 0 + 19445 W1 5652 TIP3 H2 HT 0.417000 1.0080 0 + 19446 W1 5653 TIP3 OH2 OT -0.834000 15.9994 0 + 19447 W1 5653 TIP3 H1 HT 0.417000 1.0080 0 + 19448 W1 5653 TIP3 H2 HT 0.417000 1.0080 0 + 19449 W1 5654 TIP3 OH2 OT -0.834000 15.9994 0 + 19450 W1 5654 TIP3 H1 HT 0.417000 1.0080 0 + 19451 W1 5654 TIP3 H2 HT 0.417000 1.0080 0 + 19452 W1 5655 TIP3 OH2 OT -0.834000 15.9994 0 + 19453 W1 5655 TIP3 H1 HT 0.417000 1.0080 0 + 19454 W1 5655 TIP3 H2 HT 0.417000 1.0080 0 + 19455 W1 5656 TIP3 OH2 OT -0.834000 15.9994 0 + 19456 W1 5656 TIP3 H1 HT 0.417000 1.0080 0 + 19457 W1 5656 TIP3 H2 HT 0.417000 1.0080 0 + 19458 W1 5657 TIP3 OH2 OT -0.834000 15.9994 0 + 19459 W1 5657 TIP3 H1 HT 0.417000 1.0080 0 + 19460 W1 5657 TIP3 H2 HT 0.417000 1.0080 0 + 19461 W1 5658 TIP3 OH2 OT -0.834000 15.9994 0 + 19462 W1 5658 TIP3 H1 HT 0.417000 1.0080 0 + 19463 W1 5658 TIP3 H2 HT 0.417000 1.0080 0 + 19464 W1 5659 TIP3 OH2 OT -0.834000 15.9994 0 + 19465 W1 5659 TIP3 H1 HT 0.417000 1.0080 0 + 19466 W1 5659 TIP3 H2 HT 0.417000 1.0080 0 + 19467 W1 5660 TIP3 OH2 OT -0.834000 15.9994 0 + 19468 W1 5660 TIP3 H1 HT 0.417000 1.0080 0 + 19469 W1 5660 TIP3 H2 HT 0.417000 1.0080 0 + 19470 W1 5661 TIP3 OH2 OT -0.834000 15.9994 0 + 19471 W1 5661 TIP3 H1 HT 0.417000 1.0080 0 + 19472 W1 5661 TIP3 H2 HT 0.417000 1.0080 0 + 19473 W1 5662 TIP3 OH2 OT -0.834000 15.9994 0 + 19474 W1 5662 TIP3 H1 HT 0.417000 1.0080 0 + 19475 W1 5662 TIP3 H2 HT 0.417000 1.0080 0 + 19476 W1 5663 TIP3 OH2 OT -0.834000 15.9994 0 + 19477 W1 5663 TIP3 H1 HT 0.417000 1.0080 0 + 19478 W1 5663 TIP3 H2 HT 0.417000 1.0080 0 + 19479 W1 5664 TIP3 OH2 OT -0.834000 15.9994 0 + 19480 W1 5664 TIP3 H1 HT 0.417000 1.0080 0 + 19481 W1 5664 TIP3 H2 HT 0.417000 1.0080 0 + 19482 W1 5665 TIP3 OH2 OT -0.834000 15.9994 0 + 19483 W1 5665 TIP3 H1 HT 0.417000 1.0080 0 + 19484 W1 5665 TIP3 H2 HT 0.417000 1.0080 0 + 19485 W1 5666 TIP3 OH2 OT -0.834000 15.9994 0 + 19486 W1 5666 TIP3 H1 HT 0.417000 1.0080 0 + 19487 W1 5666 TIP3 H2 HT 0.417000 1.0080 0 + 19488 W1 5667 TIP3 OH2 OT -0.834000 15.9994 0 + 19489 W1 5667 TIP3 H1 HT 0.417000 1.0080 0 + 19490 W1 5667 TIP3 H2 HT 0.417000 1.0080 0 + 19491 W1 5668 TIP3 OH2 OT -0.834000 15.9994 0 + 19492 W1 5668 TIP3 H1 HT 0.417000 1.0080 0 + 19493 W1 5668 TIP3 H2 HT 0.417000 1.0080 0 + 19494 W1 5669 TIP3 OH2 OT -0.834000 15.9994 0 + 19495 W1 5669 TIP3 H1 HT 0.417000 1.0080 0 + 19496 W1 5669 TIP3 H2 HT 0.417000 1.0080 0 + 19497 W1 5670 TIP3 OH2 OT -0.834000 15.9994 0 + 19498 W1 5670 TIP3 H1 HT 0.417000 1.0080 0 + 19499 W1 5670 TIP3 H2 HT 0.417000 1.0080 0 + 19500 W1 5671 TIP3 OH2 OT -0.834000 15.9994 0 + 19501 W1 5671 TIP3 H1 HT 0.417000 1.0080 0 + 19502 W1 5671 TIP3 H2 HT 0.417000 1.0080 0 + 19503 W1 5672 TIP3 OH2 OT -0.834000 15.9994 0 + 19504 W1 5672 TIP3 H1 HT 0.417000 1.0080 0 + 19505 W1 5672 TIP3 H2 HT 0.417000 1.0080 0 + 19506 W1 5673 TIP3 OH2 OT -0.834000 15.9994 0 + 19507 W1 5673 TIP3 H1 HT 0.417000 1.0080 0 + 19508 W1 5673 TIP3 H2 HT 0.417000 1.0080 0 + 19509 W1 5674 TIP3 OH2 OT -0.834000 15.9994 0 + 19510 W1 5674 TIP3 H1 HT 0.417000 1.0080 0 + 19511 W1 5674 TIP3 H2 HT 0.417000 1.0080 0 + 19512 W1 5675 TIP3 OH2 OT -0.834000 15.9994 0 + 19513 W1 5675 TIP3 H1 HT 0.417000 1.0080 0 + 19514 W1 5675 TIP3 H2 HT 0.417000 1.0080 0 + 19515 W1 5676 TIP3 OH2 OT -0.834000 15.9994 0 + 19516 W1 5676 TIP3 H1 HT 0.417000 1.0080 0 + 19517 W1 5676 TIP3 H2 HT 0.417000 1.0080 0 + 19518 W1 5677 TIP3 OH2 OT -0.834000 15.9994 0 + 19519 W1 5677 TIP3 H1 HT 0.417000 1.0080 0 + 19520 W1 5677 TIP3 H2 HT 0.417000 1.0080 0 + 19521 W1 5678 TIP3 OH2 OT -0.834000 15.9994 0 + 19522 W1 5678 TIP3 H1 HT 0.417000 1.0080 0 + 19523 W1 5678 TIP3 H2 HT 0.417000 1.0080 0 + 19524 W1 5679 TIP3 OH2 OT -0.834000 15.9994 0 + 19525 W1 5679 TIP3 H1 HT 0.417000 1.0080 0 + 19526 W1 5679 TIP3 H2 HT 0.417000 1.0080 0 + 19527 W1 5680 TIP3 OH2 OT -0.834000 15.9994 0 + 19528 W1 5680 TIP3 H1 HT 0.417000 1.0080 0 + 19529 W1 5680 TIP3 H2 HT 0.417000 1.0080 0 + 19530 W1 5681 TIP3 OH2 OT -0.834000 15.9994 0 + 19531 W1 5681 TIP3 H1 HT 0.417000 1.0080 0 + 19532 W1 5681 TIP3 H2 HT 0.417000 1.0080 0 + 19533 W1 5682 TIP3 OH2 OT -0.834000 15.9994 0 + 19534 W1 5682 TIP3 H1 HT 0.417000 1.0080 0 + 19535 W1 5682 TIP3 H2 HT 0.417000 1.0080 0 + 19536 W1 5683 TIP3 OH2 OT -0.834000 15.9994 0 + 19537 W1 5683 TIP3 H1 HT 0.417000 1.0080 0 + 19538 W1 5683 TIP3 H2 HT 0.417000 1.0080 0 + 19539 W1 5684 TIP3 OH2 OT -0.834000 15.9994 0 + 19540 W1 5684 TIP3 H1 HT 0.417000 1.0080 0 + 19541 W1 5684 TIP3 H2 HT 0.417000 1.0080 0 + 19542 W1 5685 TIP3 OH2 OT -0.834000 15.9994 0 + 19543 W1 5685 TIP3 H1 HT 0.417000 1.0080 0 + 19544 W1 5685 TIP3 H2 HT 0.417000 1.0080 0 + 19545 W1 5686 TIP3 OH2 OT -0.834000 15.9994 0 + 19546 W1 5686 TIP3 H1 HT 0.417000 1.0080 0 + 19547 W1 5686 TIP3 H2 HT 0.417000 1.0080 0 + 19548 W1 5687 TIP3 OH2 OT -0.834000 15.9994 0 + 19549 W1 5687 TIP3 H1 HT 0.417000 1.0080 0 + 19550 W1 5687 TIP3 H2 HT 0.417000 1.0080 0 + 19551 W1 5688 TIP3 OH2 OT -0.834000 15.9994 0 + 19552 W1 5688 TIP3 H1 HT 0.417000 1.0080 0 + 19553 W1 5688 TIP3 H2 HT 0.417000 1.0080 0 + 19554 W1 5689 TIP3 OH2 OT -0.834000 15.9994 0 + 19555 W1 5689 TIP3 H1 HT 0.417000 1.0080 0 + 19556 W1 5689 TIP3 H2 HT 0.417000 1.0080 0 + 19557 W1 5690 TIP3 OH2 OT -0.834000 15.9994 0 + 19558 W1 5690 TIP3 H1 HT 0.417000 1.0080 0 + 19559 W1 5690 TIP3 H2 HT 0.417000 1.0080 0 + 19560 W1 5691 TIP3 OH2 OT -0.834000 15.9994 0 + 19561 W1 5691 TIP3 H1 HT 0.417000 1.0080 0 + 19562 W1 5691 TIP3 H2 HT 0.417000 1.0080 0 + 19563 W1 5692 TIP3 OH2 OT -0.834000 15.9994 0 + 19564 W1 5692 TIP3 H1 HT 0.417000 1.0080 0 + 19565 W1 5692 TIP3 H2 HT 0.417000 1.0080 0 + 19566 W1 5693 TIP3 OH2 OT -0.834000 15.9994 0 + 19567 W1 5693 TIP3 H1 HT 0.417000 1.0080 0 + 19568 W1 5693 TIP3 H2 HT 0.417000 1.0080 0 + 19569 W1 5694 TIP3 OH2 OT -0.834000 15.9994 0 + 19570 W1 5694 TIP3 H1 HT 0.417000 1.0080 0 + 19571 W1 5694 TIP3 H2 HT 0.417000 1.0080 0 + 19572 W1 5695 TIP3 OH2 OT -0.834000 15.9994 0 + 19573 W1 5695 TIP3 H1 HT 0.417000 1.0080 0 + 19574 W1 5695 TIP3 H2 HT 0.417000 1.0080 0 + 19575 W1 5696 TIP3 OH2 OT -0.834000 15.9994 0 + 19576 W1 5696 TIP3 H1 HT 0.417000 1.0080 0 + 19577 W1 5696 TIP3 H2 HT 0.417000 1.0080 0 + 19578 W1 5697 TIP3 OH2 OT -0.834000 15.9994 0 + 19579 W1 5697 TIP3 H1 HT 0.417000 1.0080 0 + 19580 W1 5697 TIP3 H2 HT 0.417000 1.0080 0 + 19581 W1 5698 TIP3 OH2 OT -0.834000 15.9994 0 + 19582 W1 5698 TIP3 H1 HT 0.417000 1.0080 0 + 19583 W1 5698 TIP3 H2 HT 0.417000 1.0080 0 + 19584 W1 5699 TIP3 OH2 OT -0.834000 15.9994 0 + 19585 W1 5699 TIP3 H1 HT 0.417000 1.0080 0 + 19586 W1 5699 TIP3 H2 HT 0.417000 1.0080 0 + 19587 W1 5700 TIP3 OH2 OT -0.834000 15.9994 0 + 19588 W1 5700 TIP3 H1 HT 0.417000 1.0080 0 + 19589 W1 5700 TIP3 H2 HT 0.417000 1.0080 0 + 19590 W1 5701 TIP3 OH2 OT -0.834000 15.9994 0 + 19591 W1 5701 TIP3 H1 HT 0.417000 1.0080 0 + 19592 W1 5701 TIP3 H2 HT 0.417000 1.0080 0 + 19593 W1 5702 TIP3 OH2 OT -0.834000 15.9994 0 + 19594 W1 5702 TIP3 H1 HT 0.417000 1.0080 0 + 19595 W1 5702 TIP3 H2 HT 0.417000 1.0080 0 + 19596 W1 5703 TIP3 OH2 OT -0.834000 15.9994 0 + 19597 W1 5703 TIP3 H1 HT 0.417000 1.0080 0 + 19598 W1 5703 TIP3 H2 HT 0.417000 1.0080 0 + 19599 W1 5704 TIP3 OH2 OT -0.834000 15.9994 0 + 19600 W1 5704 TIP3 H1 HT 0.417000 1.0080 0 + 19601 W1 5704 TIP3 H2 HT 0.417000 1.0080 0 + 19602 W1 5705 TIP3 OH2 OT -0.834000 15.9994 0 + 19603 W1 5705 TIP3 H1 HT 0.417000 1.0080 0 + 19604 W1 5705 TIP3 H2 HT 0.417000 1.0080 0 + 19605 W1 5706 TIP3 OH2 OT -0.834000 15.9994 0 + 19606 W1 5706 TIP3 H1 HT 0.417000 1.0080 0 + 19607 W1 5706 TIP3 H2 HT 0.417000 1.0080 0 + 19608 W1 5707 TIP3 OH2 OT -0.834000 15.9994 0 + 19609 W1 5707 TIP3 H1 HT 0.417000 1.0080 0 + 19610 W1 5707 TIP3 H2 HT 0.417000 1.0080 0 + 19611 W1 5708 TIP3 OH2 OT -0.834000 15.9994 0 + 19612 W1 5708 TIP3 H1 HT 0.417000 1.0080 0 + 19613 W1 5708 TIP3 H2 HT 0.417000 1.0080 0 + 19614 W1 5709 TIP3 OH2 OT -0.834000 15.9994 0 + 19615 W1 5709 TIP3 H1 HT 0.417000 1.0080 0 + 19616 W1 5709 TIP3 H2 HT 0.417000 1.0080 0 + 19617 W1 5710 TIP3 OH2 OT -0.834000 15.9994 0 + 19618 W1 5710 TIP3 H1 HT 0.417000 1.0080 0 + 19619 W1 5710 TIP3 H2 HT 0.417000 1.0080 0 + 19620 W1 5711 TIP3 OH2 OT -0.834000 15.9994 0 + 19621 W1 5711 TIP3 H1 HT 0.417000 1.0080 0 + 19622 W1 5711 TIP3 H2 HT 0.417000 1.0080 0 + 19623 W1 5712 TIP3 OH2 OT -0.834000 15.9994 0 + 19624 W1 5712 TIP3 H1 HT 0.417000 1.0080 0 + 19625 W1 5712 TIP3 H2 HT 0.417000 1.0080 0 + 19626 W1 5713 TIP3 OH2 OT -0.834000 15.9994 0 + 19627 W1 5713 TIP3 H1 HT 0.417000 1.0080 0 + 19628 W1 5713 TIP3 H2 HT 0.417000 1.0080 0 + 19629 W1 5714 TIP3 OH2 OT -0.834000 15.9994 0 + 19630 W1 5714 TIP3 H1 HT 0.417000 1.0080 0 + 19631 W1 5714 TIP3 H2 HT 0.417000 1.0080 0 + 19632 W1 5715 TIP3 OH2 OT -0.834000 15.9994 0 + 19633 W1 5715 TIP3 H1 HT 0.417000 1.0080 0 + 19634 W1 5715 TIP3 H2 HT 0.417000 1.0080 0 + 19635 W1 5716 TIP3 OH2 OT -0.834000 15.9994 0 + 19636 W1 5716 TIP3 H1 HT 0.417000 1.0080 0 + 19637 W1 5716 TIP3 H2 HT 0.417000 1.0080 0 + 19638 W1 5717 TIP3 OH2 OT -0.834000 15.9994 0 + 19639 W1 5717 TIP3 H1 HT 0.417000 1.0080 0 + 19640 W1 5717 TIP3 H2 HT 0.417000 1.0080 0 + 19641 W1 5718 TIP3 OH2 OT -0.834000 15.9994 0 + 19642 W1 5718 TIP3 H1 HT 0.417000 1.0080 0 + 19643 W1 5718 TIP3 H2 HT 0.417000 1.0080 0 + 19644 W1 5719 TIP3 OH2 OT -0.834000 15.9994 0 + 19645 W1 5719 TIP3 H1 HT 0.417000 1.0080 0 + 19646 W1 5719 TIP3 H2 HT 0.417000 1.0080 0 + 19647 W1 5720 TIP3 OH2 OT -0.834000 15.9994 0 + 19648 W1 5720 TIP3 H1 HT 0.417000 1.0080 0 + 19649 W1 5720 TIP3 H2 HT 0.417000 1.0080 0 + 19650 W1 5721 TIP3 OH2 OT -0.834000 15.9994 0 + 19651 W1 5721 TIP3 H1 HT 0.417000 1.0080 0 + 19652 W1 5721 TIP3 H2 HT 0.417000 1.0080 0 + 19653 W1 5722 TIP3 OH2 OT -0.834000 15.9994 0 + 19654 W1 5722 TIP3 H1 HT 0.417000 1.0080 0 + 19655 W1 5722 TIP3 H2 HT 0.417000 1.0080 0 + 19656 W1 5723 TIP3 OH2 OT -0.834000 15.9994 0 + 19657 W1 5723 TIP3 H1 HT 0.417000 1.0080 0 + 19658 W1 5723 TIP3 H2 HT 0.417000 1.0080 0 + 19659 W1 5724 TIP3 OH2 OT -0.834000 15.9994 0 + 19660 W1 5724 TIP3 H1 HT 0.417000 1.0080 0 + 19661 W1 5724 TIP3 H2 HT 0.417000 1.0080 0 + 19662 W1 5725 TIP3 OH2 OT -0.834000 15.9994 0 + 19663 W1 5725 TIP3 H1 HT 0.417000 1.0080 0 + 19664 W1 5725 TIP3 H2 HT 0.417000 1.0080 0 + 19665 W1 5726 TIP3 OH2 OT -0.834000 15.9994 0 + 19666 W1 5726 TIP3 H1 HT 0.417000 1.0080 0 + 19667 W1 5726 TIP3 H2 HT 0.417000 1.0080 0 + 19668 W1 5727 TIP3 OH2 OT -0.834000 15.9994 0 + 19669 W1 5727 TIP3 H1 HT 0.417000 1.0080 0 + 19670 W1 5727 TIP3 H2 HT 0.417000 1.0080 0 + 19671 W1 5728 TIP3 OH2 OT -0.834000 15.9994 0 + 19672 W1 5728 TIP3 H1 HT 0.417000 1.0080 0 + 19673 W1 5728 TIP3 H2 HT 0.417000 1.0080 0 + 19674 W1 5729 TIP3 OH2 OT -0.834000 15.9994 0 + 19675 W1 5729 TIP3 H1 HT 0.417000 1.0080 0 + 19676 W1 5729 TIP3 H2 HT 0.417000 1.0080 0 + 19677 W1 5730 TIP3 OH2 OT -0.834000 15.9994 0 + 19678 W1 5730 TIP3 H1 HT 0.417000 1.0080 0 + 19679 W1 5730 TIP3 H2 HT 0.417000 1.0080 0 + 19680 W1 5731 TIP3 OH2 OT -0.834000 15.9994 0 + 19681 W1 5731 TIP3 H1 HT 0.417000 1.0080 0 + 19682 W1 5731 TIP3 H2 HT 0.417000 1.0080 0 + 19683 W1 5732 TIP3 OH2 OT -0.834000 15.9994 0 + 19684 W1 5732 TIP3 H1 HT 0.417000 1.0080 0 + 19685 W1 5732 TIP3 H2 HT 0.417000 1.0080 0 + 19686 W1 5733 TIP3 OH2 OT -0.834000 15.9994 0 + 19687 W1 5733 TIP3 H1 HT 0.417000 1.0080 0 + 19688 W1 5733 TIP3 H2 HT 0.417000 1.0080 0 + 19689 W1 5734 TIP3 OH2 OT -0.834000 15.9994 0 + 19690 W1 5734 TIP3 H1 HT 0.417000 1.0080 0 + 19691 W1 5734 TIP3 H2 HT 0.417000 1.0080 0 + 19692 W1 5735 TIP3 OH2 OT -0.834000 15.9994 0 + 19693 W1 5735 TIP3 H1 HT 0.417000 1.0080 0 + 19694 W1 5735 TIP3 H2 HT 0.417000 1.0080 0 + 19695 W1 5736 TIP3 OH2 OT -0.834000 15.9994 0 + 19696 W1 5736 TIP3 H1 HT 0.417000 1.0080 0 + 19697 W1 5736 TIP3 H2 HT 0.417000 1.0080 0 + 19698 W1 5737 TIP3 OH2 OT -0.834000 15.9994 0 + 19699 W1 5737 TIP3 H1 HT 0.417000 1.0080 0 + 19700 W1 5737 TIP3 H2 HT 0.417000 1.0080 0 + 19701 W1 5738 TIP3 OH2 OT -0.834000 15.9994 0 + 19702 W1 5738 TIP3 H1 HT 0.417000 1.0080 0 + 19703 W1 5738 TIP3 H2 HT 0.417000 1.0080 0 + 19704 W1 5739 TIP3 OH2 OT -0.834000 15.9994 0 + 19705 W1 5739 TIP3 H1 HT 0.417000 1.0080 0 + 19706 W1 5739 TIP3 H2 HT 0.417000 1.0080 0 + 19707 W1 5740 TIP3 OH2 OT -0.834000 15.9994 0 + 19708 W1 5740 TIP3 H1 HT 0.417000 1.0080 0 + 19709 W1 5740 TIP3 H2 HT 0.417000 1.0080 0 + 19710 W1 5741 TIP3 OH2 OT -0.834000 15.9994 0 + 19711 W1 5741 TIP3 H1 HT 0.417000 1.0080 0 + 19712 W1 5741 TIP3 H2 HT 0.417000 1.0080 0 + 19713 W1 5742 TIP3 OH2 OT -0.834000 15.9994 0 + 19714 W1 5742 TIP3 H1 HT 0.417000 1.0080 0 + 19715 W1 5742 TIP3 H2 HT 0.417000 1.0080 0 + 19716 W1 5743 TIP3 OH2 OT -0.834000 15.9994 0 + 19717 W1 5743 TIP3 H1 HT 0.417000 1.0080 0 + 19718 W1 5743 TIP3 H2 HT 0.417000 1.0080 0 + 19719 W1 5744 TIP3 OH2 OT -0.834000 15.9994 0 + 19720 W1 5744 TIP3 H1 HT 0.417000 1.0080 0 + 19721 W1 5744 TIP3 H2 HT 0.417000 1.0080 0 + 19722 W1 5745 TIP3 OH2 OT -0.834000 15.9994 0 + 19723 W1 5745 TIP3 H1 HT 0.417000 1.0080 0 + 19724 W1 5745 TIP3 H2 HT 0.417000 1.0080 0 + 19725 W1 5746 TIP3 OH2 OT -0.834000 15.9994 0 + 19726 W1 5746 TIP3 H1 HT 0.417000 1.0080 0 + 19727 W1 5746 TIP3 H2 HT 0.417000 1.0080 0 + 19728 W1 5747 TIP3 OH2 OT -0.834000 15.9994 0 + 19729 W1 5747 TIP3 H1 HT 0.417000 1.0080 0 + 19730 W1 5747 TIP3 H2 HT 0.417000 1.0080 0 + 19731 W1 5748 TIP3 OH2 OT -0.834000 15.9994 0 + 19732 W1 5748 TIP3 H1 HT 0.417000 1.0080 0 + 19733 W1 5748 TIP3 H2 HT 0.417000 1.0080 0 + 19734 W1 5749 TIP3 OH2 OT -0.834000 15.9994 0 + 19735 W1 5749 TIP3 H1 HT 0.417000 1.0080 0 + 19736 W1 5749 TIP3 H2 HT 0.417000 1.0080 0 + 19737 W1 5750 TIP3 OH2 OT -0.834000 15.9994 0 + 19738 W1 5750 TIP3 H1 HT 0.417000 1.0080 0 + 19739 W1 5750 TIP3 H2 HT 0.417000 1.0080 0 + 19740 W1 5751 TIP3 OH2 OT -0.834000 15.9994 0 + 19741 W1 5751 TIP3 H1 HT 0.417000 1.0080 0 + 19742 W1 5751 TIP3 H2 HT 0.417000 1.0080 0 + 19743 W1 5752 TIP3 OH2 OT -0.834000 15.9994 0 + 19744 W1 5752 TIP3 H1 HT 0.417000 1.0080 0 + 19745 W1 5752 TIP3 H2 HT 0.417000 1.0080 0 + 19746 W1 5753 TIP3 OH2 OT -0.834000 15.9994 0 + 19747 W1 5753 TIP3 H1 HT 0.417000 1.0080 0 + 19748 W1 5753 TIP3 H2 HT 0.417000 1.0080 0 + 19749 W1 5754 TIP3 OH2 OT -0.834000 15.9994 0 + 19750 W1 5754 TIP3 H1 HT 0.417000 1.0080 0 + 19751 W1 5754 TIP3 H2 HT 0.417000 1.0080 0 + 19752 W1 5755 TIP3 OH2 OT -0.834000 15.9994 0 + 19753 W1 5755 TIP3 H1 HT 0.417000 1.0080 0 + 19754 W1 5755 TIP3 H2 HT 0.417000 1.0080 0 + 19755 W1 5756 TIP3 OH2 OT -0.834000 15.9994 0 + 19756 W1 5756 TIP3 H1 HT 0.417000 1.0080 0 + 19757 W1 5756 TIP3 H2 HT 0.417000 1.0080 0 + 19758 W1 5757 TIP3 OH2 OT -0.834000 15.9994 0 + 19759 W1 5757 TIP3 H1 HT 0.417000 1.0080 0 + 19760 W1 5757 TIP3 H2 HT 0.417000 1.0080 0 + 19761 W1 5758 TIP3 OH2 OT -0.834000 15.9994 0 + 19762 W1 5758 TIP3 H1 HT 0.417000 1.0080 0 + 19763 W1 5758 TIP3 H2 HT 0.417000 1.0080 0 + 19764 W1 5759 TIP3 OH2 OT -0.834000 15.9994 0 + 19765 W1 5759 TIP3 H1 HT 0.417000 1.0080 0 + 19766 W1 5759 TIP3 H2 HT 0.417000 1.0080 0 + 19767 W1 5760 TIP3 OH2 OT -0.834000 15.9994 0 + 19768 W1 5760 TIP3 H1 HT 0.417000 1.0080 0 + 19769 W1 5760 TIP3 H2 HT 0.417000 1.0080 0 + 19770 W1 5761 TIP3 OH2 OT -0.834000 15.9994 0 + 19771 W1 5761 TIP3 H1 HT 0.417000 1.0080 0 + 19772 W1 5761 TIP3 H2 HT 0.417000 1.0080 0 + 19773 W1 5762 TIP3 OH2 OT -0.834000 15.9994 0 + 19774 W1 5762 TIP3 H1 HT 0.417000 1.0080 0 + 19775 W1 5762 TIP3 H2 HT 0.417000 1.0080 0 + 19776 W1 5763 TIP3 OH2 OT -0.834000 15.9994 0 + 19777 W1 5763 TIP3 H1 HT 0.417000 1.0080 0 + 19778 W1 5763 TIP3 H2 HT 0.417000 1.0080 0 + 19779 W1 5764 TIP3 OH2 OT -0.834000 15.9994 0 + 19780 W1 5764 TIP3 H1 HT 0.417000 1.0080 0 + 19781 W1 5764 TIP3 H2 HT 0.417000 1.0080 0 + 19782 W1 5765 TIP3 OH2 OT -0.834000 15.9994 0 + 19783 W1 5765 TIP3 H1 HT 0.417000 1.0080 0 + 19784 W1 5765 TIP3 H2 HT 0.417000 1.0080 0 + 19785 W1 5766 TIP3 OH2 OT -0.834000 15.9994 0 + 19786 W1 5766 TIP3 H1 HT 0.417000 1.0080 0 + 19787 W1 5766 TIP3 H2 HT 0.417000 1.0080 0 + 19788 W1 5767 TIP3 OH2 OT -0.834000 15.9994 0 + 19789 W1 5767 TIP3 H1 HT 0.417000 1.0080 0 + 19790 W1 5767 TIP3 H2 HT 0.417000 1.0080 0 + 19791 W1 5768 TIP3 OH2 OT -0.834000 15.9994 0 + 19792 W1 5768 TIP3 H1 HT 0.417000 1.0080 0 + 19793 W1 5768 TIP3 H2 HT 0.417000 1.0080 0 + 19794 W1 5769 TIP3 OH2 OT -0.834000 15.9994 0 + 19795 W1 5769 TIP3 H1 HT 0.417000 1.0080 0 + 19796 W1 5769 TIP3 H2 HT 0.417000 1.0080 0 + 19797 W1 5770 TIP3 OH2 OT -0.834000 15.9994 0 + 19798 W1 5770 TIP3 H1 HT 0.417000 1.0080 0 + 19799 W1 5770 TIP3 H2 HT 0.417000 1.0080 0 + 19800 W1 5771 TIP3 OH2 OT -0.834000 15.9994 0 + 19801 W1 5771 TIP3 H1 HT 0.417000 1.0080 0 + 19802 W1 5771 TIP3 H2 HT 0.417000 1.0080 0 + 19803 W1 5772 TIP3 OH2 OT -0.834000 15.9994 0 + 19804 W1 5772 TIP3 H1 HT 0.417000 1.0080 0 + 19805 W1 5772 TIP3 H2 HT 0.417000 1.0080 0 + 19806 W1 5773 TIP3 OH2 OT -0.834000 15.9994 0 + 19807 W1 5773 TIP3 H1 HT 0.417000 1.0080 0 + 19808 W1 5773 TIP3 H2 HT 0.417000 1.0080 0 + 19809 W1 5774 TIP3 OH2 OT -0.834000 15.9994 0 + 19810 W1 5774 TIP3 H1 HT 0.417000 1.0080 0 + 19811 W1 5774 TIP3 H2 HT 0.417000 1.0080 0 + 19812 W1 5775 TIP3 OH2 OT -0.834000 15.9994 0 + 19813 W1 5775 TIP3 H1 HT 0.417000 1.0080 0 + 19814 W1 5775 TIP3 H2 HT 0.417000 1.0080 0 + 19815 W1 5776 TIP3 OH2 OT -0.834000 15.9994 0 + 19816 W1 5776 TIP3 H1 HT 0.417000 1.0080 0 + 19817 W1 5776 TIP3 H2 HT 0.417000 1.0080 0 + 19818 W1 5777 TIP3 OH2 OT -0.834000 15.9994 0 + 19819 W1 5777 TIP3 H1 HT 0.417000 1.0080 0 + 19820 W1 5777 TIP3 H2 HT 0.417000 1.0080 0 + 19821 W1 5778 TIP3 OH2 OT -0.834000 15.9994 0 + 19822 W1 5778 TIP3 H1 HT 0.417000 1.0080 0 + 19823 W1 5778 TIP3 H2 HT 0.417000 1.0080 0 + 19824 W1 5779 TIP3 OH2 OT -0.834000 15.9994 0 + 19825 W1 5779 TIP3 H1 HT 0.417000 1.0080 0 + 19826 W1 5779 TIP3 H2 HT 0.417000 1.0080 0 + 19827 W1 5780 TIP3 OH2 OT -0.834000 15.9994 0 + 19828 W1 5780 TIP3 H1 HT 0.417000 1.0080 0 + 19829 W1 5780 TIP3 H2 HT 0.417000 1.0080 0 + 19830 W1 5781 TIP3 OH2 OT -0.834000 15.9994 0 + 19831 W1 5781 TIP3 H1 HT 0.417000 1.0080 0 + 19832 W1 5781 TIP3 H2 HT 0.417000 1.0080 0 + 19833 W1 5782 TIP3 OH2 OT -0.834000 15.9994 0 + 19834 W1 5782 TIP3 H1 HT 0.417000 1.0080 0 + 19835 W1 5782 TIP3 H2 HT 0.417000 1.0080 0 + 19836 W1 5783 TIP3 OH2 OT -0.834000 15.9994 0 + 19837 W1 5783 TIP3 H1 HT 0.417000 1.0080 0 + 19838 W1 5783 TIP3 H2 HT 0.417000 1.0080 0 + 19839 W1 5784 TIP3 OH2 OT -0.834000 15.9994 0 + 19840 W1 5784 TIP3 H1 HT 0.417000 1.0080 0 + 19841 W1 5784 TIP3 H2 HT 0.417000 1.0080 0 + 19842 W1 5785 TIP3 OH2 OT -0.834000 15.9994 0 + 19843 W1 5785 TIP3 H1 HT 0.417000 1.0080 0 + 19844 W1 5785 TIP3 H2 HT 0.417000 1.0080 0 + 19845 W1 5786 TIP3 OH2 OT -0.834000 15.9994 0 + 19846 W1 5786 TIP3 H1 HT 0.417000 1.0080 0 + 19847 W1 5786 TIP3 H2 HT 0.417000 1.0080 0 + 19848 W1 5787 TIP3 OH2 OT -0.834000 15.9994 0 + 19849 W1 5787 TIP3 H1 HT 0.417000 1.0080 0 + 19850 W1 5787 TIP3 H2 HT 0.417000 1.0080 0 + 19851 W1 5788 TIP3 OH2 OT -0.834000 15.9994 0 + 19852 W1 5788 TIP3 H1 HT 0.417000 1.0080 0 + 19853 W1 5788 TIP3 H2 HT 0.417000 1.0080 0 + 19854 W1 5789 TIP3 OH2 OT -0.834000 15.9994 0 + 19855 W1 5789 TIP3 H1 HT 0.417000 1.0080 0 + 19856 W1 5789 TIP3 H2 HT 0.417000 1.0080 0 + 19857 W1 5790 TIP3 OH2 OT -0.834000 15.9994 0 + 19858 W1 5790 TIP3 H1 HT 0.417000 1.0080 0 + 19859 W1 5790 TIP3 H2 HT 0.417000 1.0080 0 + 19860 W1 5791 TIP3 OH2 OT -0.834000 15.9994 0 + 19861 W1 5791 TIP3 H1 HT 0.417000 1.0080 0 + 19862 W1 5791 TIP3 H2 HT 0.417000 1.0080 0 + 19863 W1 5792 TIP3 OH2 OT -0.834000 15.9994 0 + 19864 W1 5792 TIP3 H1 HT 0.417000 1.0080 0 + 19865 W1 5792 TIP3 H2 HT 0.417000 1.0080 0 + 19866 W1 5793 TIP3 OH2 OT -0.834000 15.9994 0 + 19867 W1 5793 TIP3 H1 HT 0.417000 1.0080 0 + 19868 W1 5793 TIP3 H2 HT 0.417000 1.0080 0 + 19869 W1 5794 TIP3 OH2 OT -0.834000 15.9994 0 + 19870 W1 5794 TIP3 H1 HT 0.417000 1.0080 0 + 19871 W1 5794 TIP3 H2 HT 0.417000 1.0080 0 + 19872 W1 5795 TIP3 OH2 OT -0.834000 15.9994 0 + 19873 W1 5795 TIP3 H1 HT 0.417000 1.0080 0 + 19874 W1 5795 TIP3 H2 HT 0.417000 1.0080 0 + 19875 W1 5796 TIP3 OH2 OT -0.834000 15.9994 0 + 19876 W1 5796 TIP3 H1 HT 0.417000 1.0080 0 + 19877 W1 5796 TIP3 H2 HT 0.417000 1.0080 0 + 19878 W1 5797 TIP3 OH2 OT -0.834000 15.9994 0 + 19879 W1 5797 TIP3 H1 HT 0.417000 1.0080 0 + 19880 W1 5797 TIP3 H2 HT 0.417000 1.0080 0 + 19881 W1 5798 TIP3 OH2 OT -0.834000 15.9994 0 + 19882 W1 5798 TIP3 H1 HT 0.417000 1.0080 0 + 19883 W1 5798 TIP3 H2 HT 0.417000 1.0080 0 + 19884 W1 5799 TIP3 OH2 OT -0.834000 15.9994 0 + 19885 W1 5799 TIP3 H1 HT 0.417000 1.0080 0 + 19886 W1 5799 TIP3 H2 HT 0.417000 1.0080 0 + 19887 W1 5800 TIP3 OH2 OT -0.834000 15.9994 0 + 19888 W1 5800 TIP3 H1 HT 0.417000 1.0080 0 + 19889 W1 5800 TIP3 H2 HT 0.417000 1.0080 0 + 19890 W1 5801 TIP3 OH2 OT -0.834000 15.9994 0 + 19891 W1 5801 TIP3 H1 HT 0.417000 1.0080 0 + 19892 W1 5801 TIP3 H2 HT 0.417000 1.0080 0 + 19893 W1 5802 TIP3 OH2 OT -0.834000 15.9994 0 + 19894 W1 5802 TIP3 H1 HT 0.417000 1.0080 0 + 19895 W1 5802 TIP3 H2 HT 0.417000 1.0080 0 + 19896 W1 5803 TIP3 OH2 OT -0.834000 15.9994 0 + 19897 W1 5803 TIP3 H1 HT 0.417000 1.0080 0 + 19898 W1 5803 TIP3 H2 HT 0.417000 1.0080 0 + 19899 W1 5804 TIP3 OH2 OT -0.834000 15.9994 0 + 19900 W1 5804 TIP3 H1 HT 0.417000 1.0080 0 + 19901 W1 5804 TIP3 H2 HT 0.417000 1.0080 0 + 19902 W1 5805 TIP3 OH2 OT -0.834000 15.9994 0 + 19903 W1 5805 TIP3 H1 HT 0.417000 1.0080 0 + 19904 W1 5805 TIP3 H2 HT 0.417000 1.0080 0 + 19905 W1 5806 TIP3 OH2 OT -0.834000 15.9994 0 + 19906 W1 5806 TIP3 H1 HT 0.417000 1.0080 0 + 19907 W1 5806 TIP3 H2 HT 0.417000 1.0080 0 + 19908 W1 5807 TIP3 OH2 OT -0.834000 15.9994 0 + 19909 W1 5807 TIP3 H1 HT 0.417000 1.0080 0 + 19910 W1 5807 TIP3 H2 HT 0.417000 1.0080 0 + 19911 W1 5808 TIP3 OH2 OT -0.834000 15.9994 0 + 19912 W1 5808 TIP3 H1 HT 0.417000 1.0080 0 + 19913 W1 5808 TIP3 H2 HT 0.417000 1.0080 0 + 19914 W1 5809 TIP3 OH2 OT -0.834000 15.9994 0 + 19915 W1 5809 TIP3 H1 HT 0.417000 1.0080 0 + 19916 W1 5809 TIP3 H2 HT 0.417000 1.0080 0 + 19917 W1 5810 TIP3 OH2 OT -0.834000 15.9994 0 + 19918 W1 5810 TIP3 H1 HT 0.417000 1.0080 0 + 19919 W1 5810 TIP3 H2 HT 0.417000 1.0080 0 + 19920 W1 5811 TIP3 OH2 OT -0.834000 15.9994 0 + 19921 W1 5811 TIP3 H1 HT 0.417000 1.0080 0 + 19922 W1 5811 TIP3 H2 HT 0.417000 1.0080 0 + 19923 W1 5812 TIP3 OH2 OT -0.834000 15.9994 0 + 19924 W1 5812 TIP3 H1 HT 0.417000 1.0080 0 + 19925 W1 5812 TIP3 H2 HT 0.417000 1.0080 0 + 19926 W1 5813 TIP3 OH2 OT -0.834000 15.9994 0 + 19927 W1 5813 TIP3 H1 HT 0.417000 1.0080 0 + 19928 W1 5813 TIP3 H2 HT 0.417000 1.0080 0 + 19929 W1 5814 TIP3 OH2 OT -0.834000 15.9994 0 + 19930 W1 5814 TIP3 H1 HT 0.417000 1.0080 0 + 19931 W1 5814 TIP3 H2 HT 0.417000 1.0080 0 + 19932 W1 5815 TIP3 OH2 OT -0.834000 15.9994 0 + 19933 W1 5815 TIP3 H1 HT 0.417000 1.0080 0 + 19934 W1 5815 TIP3 H2 HT 0.417000 1.0080 0 + 19935 W1 5816 TIP3 OH2 OT -0.834000 15.9994 0 + 19936 W1 5816 TIP3 H1 HT 0.417000 1.0080 0 + 19937 W1 5816 TIP3 H2 HT 0.417000 1.0080 0 + 19938 W1 5817 TIP3 OH2 OT -0.834000 15.9994 0 + 19939 W1 5817 TIP3 H1 HT 0.417000 1.0080 0 + 19940 W1 5817 TIP3 H2 HT 0.417000 1.0080 0 + 19941 W1 5818 TIP3 OH2 OT -0.834000 15.9994 0 + 19942 W1 5818 TIP3 H1 HT 0.417000 1.0080 0 + 19943 W1 5818 TIP3 H2 HT 0.417000 1.0080 0 + 19944 W1 5819 TIP3 OH2 OT -0.834000 15.9994 0 + 19945 W1 5819 TIP3 H1 HT 0.417000 1.0080 0 + 19946 W1 5819 TIP3 H2 HT 0.417000 1.0080 0 + 19947 W1 5820 TIP3 OH2 OT -0.834000 15.9994 0 + 19948 W1 5820 TIP3 H1 HT 0.417000 1.0080 0 + 19949 W1 5820 TIP3 H2 HT 0.417000 1.0080 0 + 19950 W1 5821 TIP3 OH2 OT -0.834000 15.9994 0 + 19951 W1 5821 TIP3 H1 HT 0.417000 1.0080 0 + 19952 W1 5821 TIP3 H2 HT 0.417000 1.0080 0 + 19953 W1 5822 TIP3 OH2 OT -0.834000 15.9994 0 + 19954 W1 5822 TIP3 H1 HT 0.417000 1.0080 0 + 19955 W1 5822 TIP3 H2 HT 0.417000 1.0080 0 + 19956 W1 5823 TIP3 OH2 OT -0.834000 15.9994 0 + 19957 W1 5823 TIP3 H1 HT 0.417000 1.0080 0 + 19958 W1 5823 TIP3 H2 HT 0.417000 1.0080 0 + 19959 W1 5824 TIP3 OH2 OT -0.834000 15.9994 0 + 19960 W1 5824 TIP3 H1 HT 0.417000 1.0080 0 + 19961 W1 5824 TIP3 H2 HT 0.417000 1.0080 0 + 19962 W1 5825 TIP3 OH2 OT -0.834000 15.9994 0 + 19963 W1 5825 TIP3 H1 HT 0.417000 1.0080 0 + 19964 W1 5825 TIP3 H2 HT 0.417000 1.0080 0 + 19965 W1 5826 TIP3 OH2 OT -0.834000 15.9994 0 + 19966 W1 5826 TIP3 H1 HT 0.417000 1.0080 0 + 19967 W1 5826 TIP3 H2 HT 0.417000 1.0080 0 + 19968 W1 5827 TIP3 OH2 OT -0.834000 15.9994 0 + 19969 W1 5827 TIP3 H1 HT 0.417000 1.0080 0 + 19970 W1 5827 TIP3 H2 HT 0.417000 1.0080 0 + 19971 W1 5828 TIP3 OH2 OT -0.834000 15.9994 0 + 19972 W1 5828 TIP3 H1 HT 0.417000 1.0080 0 + 19973 W1 5828 TIP3 H2 HT 0.417000 1.0080 0 + 19974 W1 5829 TIP3 OH2 OT -0.834000 15.9994 0 + 19975 W1 5829 TIP3 H1 HT 0.417000 1.0080 0 + 19976 W1 5829 TIP3 H2 HT 0.417000 1.0080 0 + 19977 W1 5830 TIP3 OH2 OT -0.834000 15.9994 0 + 19978 W1 5830 TIP3 H1 HT 0.417000 1.0080 0 + 19979 W1 5830 TIP3 H2 HT 0.417000 1.0080 0 + 19980 W1 5831 TIP3 OH2 OT -0.834000 15.9994 0 + 19981 W1 5831 TIP3 H1 HT 0.417000 1.0080 0 + 19982 W1 5831 TIP3 H2 HT 0.417000 1.0080 0 + 19983 W1 5832 TIP3 OH2 OT -0.834000 15.9994 0 + 19984 W1 5832 TIP3 H1 HT 0.417000 1.0080 0 + 19985 W1 5832 TIP3 H2 HT 0.417000 1.0080 0 + 19986 W1 5833 TIP3 OH2 OT -0.834000 15.9994 0 + 19987 W1 5833 TIP3 H1 HT 0.417000 1.0080 0 + 19988 W1 5833 TIP3 H2 HT 0.417000 1.0080 0 + 19989 W1 5834 TIP3 OH2 OT -0.834000 15.9994 0 + 19990 W1 5834 TIP3 H1 HT 0.417000 1.0080 0 + 19991 W1 5834 TIP3 H2 HT 0.417000 1.0080 0 + 19992 W1 5835 TIP3 OH2 OT -0.834000 15.9994 0 + 19993 W1 5835 TIP3 H1 HT 0.417000 1.0080 0 + 19994 W1 5835 TIP3 H2 HT 0.417000 1.0080 0 + 19995 W1 5836 TIP3 OH2 OT -0.834000 15.9994 0 + 19996 W1 5836 TIP3 H1 HT 0.417000 1.0080 0 + 19997 W1 5836 TIP3 H2 HT 0.417000 1.0080 0 + 19998 W1 5837 TIP3 OH2 OT -0.834000 15.9994 0 + 19999 W1 5837 TIP3 H1 HT 0.417000 1.0080 0 + 20000 W1 5837 TIP3 H2 HT 0.417000 1.0080 0 + 20001 W1 5838 TIP3 OH2 OT -0.834000 15.9994 0 + 20002 W1 5838 TIP3 H1 HT 0.417000 1.0080 0 + 20003 W1 5838 TIP3 H2 HT 0.417000 1.0080 0 + 20004 W1 5839 TIP3 OH2 OT -0.834000 15.9994 0 + 20005 W1 5839 TIP3 H1 HT 0.417000 1.0080 0 + 20006 W1 5839 TIP3 H2 HT 0.417000 1.0080 0 + 20007 W1 5840 TIP3 OH2 OT -0.834000 15.9994 0 + 20008 W1 5840 TIP3 H1 HT 0.417000 1.0080 0 + 20009 W1 5840 TIP3 H2 HT 0.417000 1.0080 0 + 20010 W1 5841 TIP3 OH2 OT -0.834000 15.9994 0 + 20011 W1 5841 TIP3 H1 HT 0.417000 1.0080 0 + 20012 W1 5841 TIP3 H2 HT 0.417000 1.0080 0 + 20013 W1 5842 TIP3 OH2 OT -0.834000 15.9994 0 + 20014 W1 5842 TIP3 H1 HT 0.417000 1.0080 0 + 20015 W1 5842 TIP3 H2 HT 0.417000 1.0080 0 + 20016 W1 5843 TIP3 OH2 OT -0.834000 15.9994 0 + 20017 W1 5843 TIP3 H1 HT 0.417000 1.0080 0 + 20018 W1 5843 TIP3 H2 HT 0.417000 1.0080 0 + 20019 W1 5844 TIP3 OH2 OT -0.834000 15.9994 0 + 20020 W1 5844 TIP3 H1 HT 0.417000 1.0080 0 + 20021 W1 5844 TIP3 H2 HT 0.417000 1.0080 0 + 20022 W1 5845 TIP3 OH2 OT -0.834000 15.9994 0 + 20023 W1 5845 TIP3 H1 HT 0.417000 1.0080 0 + 20024 W1 5845 TIP3 H2 HT 0.417000 1.0080 0 + 20025 W1 5846 TIP3 OH2 OT -0.834000 15.9994 0 + 20026 W1 5846 TIP3 H1 HT 0.417000 1.0080 0 + 20027 W1 5846 TIP3 H2 HT 0.417000 1.0080 0 + 20028 W1 5847 TIP3 OH2 OT -0.834000 15.9994 0 + 20029 W1 5847 TIP3 H1 HT 0.417000 1.0080 0 + 20030 W1 5847 TIP3 H2 HT 0.417000 1.0080 0 + 20031 W1 5848 TIP3 OH2 OT -0.834000 15.9994 0 + 20032 W1 5848 TIP3 H1 HT 0.417000 1.0080 0 + 20033 W1 5848 TIP3 H2 HT 0.417000 1.0080 0 + 20034 W1 5849 TIP3 OH2 OT -0.834000 15.9994 0 + 20035 W1 5849 TIP3 H1 HT 0.417000 1.0080 0 + 20036 W1 5849 TIP3 H2 HT 0.417000 1.0080 0 + 20037 W1 5850 TIP3 OH2 OT -0.834000 15.9994 0 + 20038 W1 5850 TIP3 H1 HT 0.417000 1.0080 0 + 20039 W1 5850 TIP3 H2 HT 0.417000 1.0080 0 + 20040 W1 5851 TIP3 OH2 OT -0.834000 15.9994 0 + 20041 W1 5851 TIP3 H1 HT 0.417000 1.0080 0 + 20042 W1 5851 TIP3 H2 HT 0.417000 1.0080 0 + 20043 W1 5852 TIP3 OH2 OT -0.834000 15.9994 0 + 20044 W1 5852 TIP3 H1 HT 0.417000 1.0080 0 + 20045 W1 5852 TIP3 H2 HT 0.417000 1.0080 0 + 20046 W1 5853 TIP3 OH2 OT -0.834000 15.9994 0 + 20047 W1 5853 TIP3 H1 HT 0.417000 1.0080 0 + 20048 W1 5853 TIP3 H2 HT 0.417000 1.0080 0 + 20049 W1 5854 TIP3 OH2 OT -0.834000 15.9994 0 + 20050 W1 5854 TIP3 H1 HT 0.417000 1.0080 0 + 20051 W1 5854 TIP3 H2 HT 0.417000 1.0080 0 + 20052 W1 5855 TIP3 OH2 OT -0.834000 15.9994 0 + 20053 W1 5855 TIP3 H1 HT 0.417000 1.0080 0 + 20054 W1 5855 TIP3 H2 HT 0.417000 1.0080 0 + 20055 W1 5856 TIP3 OH2 OT -0.834000 15.9994 0 + 20056 W1 5856 TIP3 H1 HT 0.417000 1.0080 0 + 20057 W1 5856 TIP3 H2 HT 0.417000 1.0080 0 + 20058 W1 5857 TIP3 OH2 OT -0.834000 15.9994 0 + 20059 W1 5857 TIP3 H1 HT 0.417000 1.0080 0 + 20060 W1 5857 TIP3 H2 HT 0.417000 1.0080 0 + 20061 W1 5858 TIP3 OH2 OT -0.834000 15.9994 0 + 20062 W1 5858 TIP3 H1 HT 0.417000 1.0080 0 + 20063 W1 5858 TIP3 H2 HT 0.417000 1.0080 0 + 20064 W1 5859 TIP3 OH2 OT -0.834000 15.9994 0 + 20065 W1 5859 TIP3 H1 HT 0.417000 1.0080 0 + 20066 W1 5859 TIP3 H2 HT 0.417000 1.0080 0 + 20067 W1 5860 TIP3 OH2 OT -0.834000 15.9994 0 + 20068 W1 5860 TIP3 H1 HT 0.417000 1.0080 0 + 20069 W1 5860 TIP3 H2 HT 0.417000 1.0080 0 + 20070 W1 5861 TIP3 OH2 OT -0.834000 15.9994 0 + 20071 W1 5861 TIP3 H1 HT 0.417000 1.0080 0 + 20072 W1 5861 TIP3 H2 HT 0.417000 1.0080 0 + 20073 W1 5862 TIP3 OH2 OT -0.834000 15.9994 0 + 20074 W1 5862 TIP3 H1 HT 0.417000 1.0080 0 + 20075 W1 5862 TIP3 H2 HT 0.417000 1.0080 0 + 20076 W1 5863 TIP3 OH2 OT -0.834000 15.9994 0 + 20077 W1 5863 TIP3 H1 HT 0.417000 1.0080 0 + 20078 W1 5863 TIP3 H2 HT 0.417000 1.0080 0 + 20079 W1 5864 TIP3 OH2 OT -0.834000 15.9994 0 + 20080 W1 5864 TIP3 H1 HT 0.417000 1.0080 0 + 20081 W1 5864 TIP3 H2 HT 0.417000 1.0080 0 + 20082 W1 5865 TIP3 OH2 OT -0.834000 15.9994 0 + 20083 W1 5865 TIP3 H1 HT 0.417000 1.0080 0 + 20084 W1 5865 TIP3 H2 HT 0.417000 1.0080 0 + 20085 W1 5866 TIP3 OH2 OT -0.834000 15.9994 0 + 20086 W1 5866 TIP3 H1 HT 0.417000 1.0080 0 + 20087 W1 5866 TIP3 H2 HT 0.417000 1.0080 0 + 20088 W1 5867 TIP3 OH2 OT -0.834000 15.9994 0 + 20089 W1 5867 TIP3 H1 HT 0.417000 1.0080 0 + 20090 W1 5867 TIP3 H2 HT 0.417000 1.0080 0 + 20091 W1 5868 TIP3 OH2 OT -0.834000 15.9994 0 + 20092 W1 5868 TIP3 H1 HT 0.417000 1.0080 0 + 20093 W1 5868 TIP3 H2 HT 0.417000 1.0080 0 + 20094 W1 5869 TIP3 OH2 OT -0.834000 15.9994 0 + 20095 W1 5869 TIP3 H1 HT 0.417000 1.0080 0 + 20096 W1 5869 TIP3 H2 HT 0.417000 1.0080 0 + 20097 W1 5870 TIP3 OH2 OT -0.834000 15.9994 0 + 20098 W1 5870 TIP3 H1 HT 0.417000 1.0080 0 + 20099 W1 5870 TIP3 H2 HT 0.417000 1.0080 0 + 20100 W1 5871 TIP3 OH2 OT -0.834000 15.9994 0 + 20101 W1 5871 TIP3 H1 HT 0.417000 1.0080 0 + 20102 W1 5871 TIP3 H2 HT 0.417000 1.0080 0 + 20103 W1 5872 TIP3 OH2 OT -0.834000 15.9994 0 + 20104 W1 5872 TIP3 H1 HT 0.417000 1.0080 0 + 20105 W1 5872 TIP3 H2 HT 0.417000 1.0080 0 + 20106 W1 5873 TIP3 OH2 OT -0.834000 15.9994 0 + 20107 W1 5873 TIP3 H1 HT 0.417000 1.0080 0 + 20108 W1 5873 TIP3 H2 HT 0.417000 1.0080 0 + 20109 W1 5874 TIP3 OH2 OT -0.834000 15.9994 0 + 20110 W1 5874 TIP3 H1 HT 0.417000 1.0080 0 + 20111 W1 5874 TIP3 H2 HT 0.417000 1.0080 0 + 20112 W1 5875 TIP3 OH2 OT -0.834000 15.9994 0 + 20113 W1 5875 TIP3 H1 HT 0.417000 1.0080 0 + 20114 W1 5875 TIP3 H2 HT 0.417000 1.0080 0 + 20115 W1 5876 TIP3 OH2 OT -0.834000 15.9994 0 + 20116 W1 5876 TIP3 H1 HT 0.417000 1.0080 0 + 20117 W1 5876 TIP3 H2 HT 0.417000 1.0080 0 + 20118 W1 5877 TIP3 OH2 OT -0.834000 15.9994 0 + 20119 W1 5877 TIP3 H1 HT 0.417000 1.0080 0 + 20120 W1 5877 TIP3 H2 HT 0.417000 1.0080 0 + 20121 W1 5878 TIP3 OH2 OT -0.834000 15.9994 0 + 20122 W1 5878 TIP3 H1 HT 0.417000 1.0080 0 + 20123 W1 5878 TIP3 H2 HT 0.417000 1.0080 0 + 20124 W1 5879 TIP3 OH2 OT -0.834000 15.9994 0 + 20125 W1 5879 TIP3 H1 HT 0.417000 1.0080 0 + 20126 W1 5879 TIP3 H2 HT 0.417000 1.0080 0 + 20127 W1 5880 TIP3 OH2 OT -0.834000 15.9994 0 + 20128 W1 5880 TIP3 H1 HT 0.417000 1.0080 0 + 20129 W1 5880 TIP3 H2 HT 0.417000 1.0080 0 + 20130 W1 5881 TIP3 OH2 OT -0.834000 15.9994 0 + 20131 W1 5881 TIP3 H1 HT 0.417000 1.0080 0 + 20132 W1 5881 TIP3 H2 HT 0.417000 1.0080 0 + 20133 W1 5882 TIP3 OH2 OT -0.834000 15.9994 0 + 20134 W1 5882 TIP3 H1 HT 0.417000 1.0080 0 + 20135 W1 5882 TIP3 H2 HT 0.417000 1.0080 0 + 20136 W1 5883 TIP3 OH2 OT -0.834000 15.9994 0 + 20137 W1 5883 TIP3 H1 HT 0.417000 1.0080 0 + 20138 W1 5883 TIP3 H2 HT 0.417000 1.0080 0 + 20139 W1 5884 TIP3 OH2 OT -0.834000 15.9994 0 + 20140 W1 5884 TIP3 H1 HT 0.417000 1.0080 0 + 20141 W1 5884 TIP3 H2 HT 0.417000 1.0080 0 + 20142 W1 5885 TIP3 OH2 OT -0.834000 15.9994 0 + 20143 W1 5885 TIP3 H1 HT 0.417000 1.0080 0 + 20144 W1 5885 TIP3 H2 HT 0.417000 1.0080 0 + 20145 W1 5886 TIP3 OH2 OT -0.834000 15.9994 0 + 20146 W1 5886 TIP3 H1 HT 0.417000 1.0080 0 + 20147 W1 5886 TIP3 H2 HT 0.417000 1.0080 0 + 20148 W1 5887 TIP3 OH2 OT -0.834000 15.9994 0 + 20149 W1 5887 TIP3 H1 HT 0.417000 1.0080 0 + 20150 W1 5887 TIP3 H2 HT 0.417000 1.0080 0 + 20151 W1 5888 TIP3 OH2 OT -0.834000 15.9994 0 + 20152 W1 5888 TIP3 H1 HT 0.417000 1.0080 0 + 20153 W1 5888 TIP3 H2 HT 0.417000 1.0080 0 + 20154 W1 5889 TIP3 OH2 OT -0.834000 15.9994 0 + 20155 W1 5889 TIP3 H1 HT 0.417000 1.0080 0 + 20156 W1 5889 TIP3 H2 HT 0.417000 1.0080 0 + 20157 W1 5890 TIP3 OH2 OT -0.834000 15.9994 0 + 20158 W1 5890 TIP3 H1 HT 0.417000 1.0080 0 + 20159 W1 5890 TIP3 H2 HT 0.417000 1.0080 0 + 20160 W1 5891 TIP3 OH2 OT -0.834000 15.9994 0 + 20161 W1 5891 TIP3 H1 HT 0.417000 1.0080 0 + 20162 W1 5891 TIP3 H2 HT 0.417000 1.0080 0 + 20163 W1 5892 TIP3 OH2 OT -0.834000 15.9994 0 + 20164 W1 5892 TIP3 H1 HT 0.417000 1.0080 0 + 20165 W1 5892 TIP3 H2 HT 0.417000 1.0080 0 + 20166 W1 5893 TIP3 OH2 OT -0.834000 15.9994 0 + 20167 W1 5893 TIP3 H1 HT 0.417000 1.0080 0 + 20168 W1 5893 TIP3 H2 HT 0.417000 1.0080 0 + 20169 W1 5894 TIP3 OH2 OT -0.834000 15.9994 0 + 20170 W1 5894 TIP3 H1 HT 0.417000 1.0080 0 + 20171 W1 5894 TIP3 H2 HT 0.417000 1.0080 0 + 20172 W1 5895 TIP3 OH2 OT -0.834000 15.9994 0 + 20173 W1 5895 TIP3 H1 HT 0.417000 1.0080 0 + 20174 W1 5895 TIP3 H2 HT 0.417000 1.0080 0 + 20175 W1 5896 TIP3 OH2 OT -0.834000 15.9994 0 + 20176 W1 5896 TIP3 H1 HT 0.417000 1.0080 0 + 20177 W1 5896 TIP3 H2 HT 0.417000 1.0080 0 + 20178 W1 5897 TIP3 OH2 OT -0.834000 15.9994 0 + 20179 W1 5897 TIP3 H1 HT 0.417000 1.0080 0 + 20180 W1 5897 TIP3 H2 HT 0.417000 1.0080 0 + 20181 W1 5898 TIP3 OH2 OT -0.834000 15.9994 0 + 20182 W1 5898 TIP3 H1 HT 0.417000 1.0080 0 + 20183 W1 5898 TIP3 H2 HT 0.417000 1.0080 0 + 20184 W1 5899 TIP3 OH2 OT -0.834000 15.9994 0 + 20185 W1 5899 TIP3 H1 HT 0.417000 1.0080 0 + 20186 W1 5899 TIP3 H2 HT 0.417000 1.0080 0 + 20187 W1 5900 TIP3 OH2 OT -0.834000 15.9994 0 + 20188 W1 5900 TIP3 H1 HT 0.417000 1.0080 0 + 20189 W1 5900 TIP3 H2 HT 0.417000 1.0080 0 + 20190 W1 5901 TIP3 OH2 OT -0.834000 15.9994 0 + 20191 W1 5901 TIP3 H1 HT 0.417000 1.0080 0 + 20192 W1 5901 TIP3 H2 HT 0.417000 1.0080 0 + 20193 W1 5902 TIP3 OH2 OT -0.834000 15.9994 0 + 20194 W1 5902 TIP3 H1 HT 0.417000 1.0080 0 + 20195 W1 5902 TIP3 H2 HT 0.417000 1.0080 0 + 20196 W1 5903 TIP3 OH2 OT -0.834000 15.9994 0 + 20197 W1 5903 TIP3 H1 HT 0.417000 1.0080 0 + 20198 W1 5903 TIP3 H2 HT 0.417000 1.0080 0 + 20199 W1 5904 TIP3 OH2 OT -0.834000 15.9994 0 + 20200 W1 5904 TIP3 H1 HT 0.417000 1.0080 0 + 20201 W1 5904 TIP3 H2 HT 0.417000 1.0080 0 + 20202 W1 5905 TIP3 OH2 OT -0.834000 15.9994 0 + 20203 W1 5905 TIP3 H1 HT 0.417000 1.0080 0 + 20204 W1 5905 TIP3 H2 HT 0.417000 1.0080 0 + 20205 W1 5906 TIP3 OH2 OT -0.834000 15.9994 0 + 20206 W1 5906 TIP3 H1 HT 0.417000 1.0080 0 + 20207 W1 5906 TIP3 H2 HT 0.417000 1.0080 0 + 20208 W1 5907 TIP3 OH2 OT -0.834000 15.9994 0 + 20209 W1 5907 TIP3 H1 HT 0.417000 1.0080 0 + 20210 W1 5907 TIP3 H2 HT 0.417000 1.0080 0 + 20211 W1 5908 TIP3 OH2 OT -0.834000 15.9994 0 + 20212 W1 5908 TIP3 H1 HT 0.417000 1.0080 0 + 20213 W1 5908 TIP3 H2 HT 0.417000 1.0080 0 + 20214 W1 5909 TIP3 OH2 OT -0.834000 15.9994 0 + 20215 W1 5909 TIP3 H1 HT 0.417000 1.0080 0 + 20216 W1 5909 TIP3 H2 HT 0.417000 1.0080 0 + 20217 W1 5910 TIP3 OH2 OT -0.834000 15.9994 0 + 20218 W1 5910 TIP3 H1 HT 0.417000 1.0080 0 + 20219 W1 5910 TIP3 H2 HT 0.417000 1.0080 0 + 20220 W1 5911 TIP3 OH2 OT -0.834000 15.9994 0 + 20221 W1 5911 TIP3 H1 HT 0.417000 1.0080 0 + 20222 W1 5911 TIP3 H2 HT 0.417000 1.0080 0 + 20223 W1 5912 TIP3 OH2 OT -0.834000 15.9994 0 + 20224 W1 5912 TIP3 H1 HT 0.417000 1.0080 0 + 20225 W1 5912 TIP3 H2 HT 0.417000 1.0080 0 + 20226 W1 5913 TIP3 OH2 OT -0.834000 15.9994 0 + 20227 W1 5913 TIP3 H1 HT 0.417000 1.0080 0 + 20228 W1 5913 TIP3 H2 HT 0.417000 1.0080 0 + 20229 W1 5914 TIP3 OH2 OT -0.834000 15.9994 0 + 20230 W1 5914 TIP3 H1 HT 0.417000 1.0080 0 + 20231 W1 5914 TIP3 H2 HT 0.417000 1.0080 0 + 20232 W1 5915 TIP3 OH2 OT -0.834000 15.9994 0 + 20233 W1 5915 TIP3 H1 HT 0.417000 1.0080 0 + 20234 W1 5915 TIP3 H2 HT 0.417000 1.0080 0 + 20235 W1 5916 TIP3 OH2 OT -0.834000 15.9994 0 + 20236 W1 5916 TIP3 H1 HT 0.417000 1.0080 0 + 20237 W1 5916 TIP3 H2 HT 0.417000 1.0080 0 + 20238 W1 5917 TIP3 OH2 OT -0.834000 15.9994 0 + 20239 W1 5917 TIP3 H1 HT 0.417000 1.0080 0 + 20240 W1 5917 TIP3 H2 HT 0.417000 1.0080 0 + 20241 W1 5918 TIP3 OH2 OT -0.834000 15.9994 0 + 20242 W1 5918 TIP3 H1 HT 0.417000 1.0080 0 + 20243 W1 5918 TIP3 H2 HT 0.417000 1.0080 0 + 20244 W1 5919 TIP3 OH2 OT -0.834000 15.9994 0 + 20245 W1 5919 TIP3 H1 HT 0.417000 1.0080 0 + 20246 W1 5919 TIP3 H2 HT 0.417000 1.0080 0 + 20247 W1 5920 TIP3 OH2 OT -0.834000 15.9994 0 + 20248 W1 5920 TIP3 H1 HT 0.417000 1.0080 0 + 20249 W1 5920 TIP3 H2 HT 0.417000 1.0080 0 + 20250 W1 5921 TIP3 OH2 OT -0.834000 15.9994 0 + 20251 W1 5921 TIP3 H1 HT 0.417000 1.0080 0 + 20252 W1 5921 TIP3 H2 HT 0.417000 1.0080 0 + 20253 W1 5922 TIP3 OH2 OT -0.834000 15.9994 0 + 20254 W1 5922 TIP3 H1 HT 0.417000 1.0080 0 + 20255 W1 5922 TIP3 H2 HT 0.417000 1.0080 0 + 20256 W1 5923 TIP3 OH2 OT -0.834000 15.9994 0 + 20257 W1 5923 TIP3 H1 HT 0.417000 1.0080 0 + 20258 W1 5923 TIP3 H2 HT 0.417000 1.0080 0 + 20259 W1 5924 TIP3 OH2 OT -0.834000 15.9994 0 + 20260 W1 5924 TIP3 H1 HT 0.417000 1.0080 0 + 20261 W1 5924 TIP3 H2 HT 0.417000 1.0080 0 + 20262 W1 5925 TIP3 OH2 OT -0.834000 15.9994 0 + 20263 W1 5925 TIP3 H1 HT 0.417000 1.0080 0 + 20264 W1 5925 TIP3 H2 HT 0.417000 1.0080 0 + 20265 W1 5926 TIP3 OH2 OT -0.834000 15.9994 0 + 20266 W1 5926 TIP3 H1 HT 0.417000 1.0080 0 + 20267 W1 5926 TIP3 H2 HT 0.417000 1.0080 0 + 20268 W1 5927 TIP3 OH2 OT -0.834000 15.9994 0 + 20269 W1 5927 TIP3 H1 HT 0.417000 1.0080 0 + 20270 W1 5927 TIP3 H2 HT 0.417000 1.0080 0 + 20271 W1 5928 TIP3 OH2 OT -0.834000 15.9994 0 + 20272 W1 5928 TIP3 H1 HT 0.417000 1.0080 0 + 20273 W1 5928 TIP3 H2 HT 0.417000 1.0080 0 + 20274 W1 5929 TIP3 OH2 OT -0.834000 15.9994 0 + 20275 W1 5929 TIP3 H1 HT 0.417000 1.0080 0 + 20276 W1 5929 TIP3 H2 HT 0.417000 1.0080 0 + 20277 W1 5930 TIP3 OH2 OT -0.834000 15.9994 0 + 20278 W1 5930 TIP3 H1 HT 0.417000 1.0080 0 + 20279 W1 5930 TIP3 H2 HT 0.417000 1.0080 0 + 20280 W1 5931 TIP3 OH2 OT -0.834000 15.9994 0 + 20281 W1 5931 TIP3 H1 HT 0.417000 1.0080 0 + 20282 W1 5931 TIP3 H2 HT 0.417000 1.0080 0 + 20283 W1 5932 TIP3 OH2 OT -0.834000 15.9994 0 + 20284 W1 5932 TIP3 H1 HT 0.417000 1.0080 0 + 20285 W1 5932 TIP3 H2 HT 0.417000 1.0080 0 + 20286 W1 5933 TIP3 OH2 OT -0.834000 15.9994 0 + 20287 W1 5933 TIP3 H1 HT 0.417000 1.0080 0 + 20288 W1 5933 TIP3 H2 HT 0.417000 1.0080 0 + 20289 W1 5934 TIP3 OH2 OT -0.834000 15.9994 0 + 20290 W1 5934 TIP3 H1 HT 0.417000 1.0080 0 + 20291 W1 5934 TIP3 H2 HT 0.417000 1.0080 0 + 20292 W1 5935 TIP3 OH2 OT -0.834000 15.9994 0 + 20293 W1 5935 TIP3 H1 HT 0.417000 1.0080 0 + 20294 W1 5935 TIP3 H2 HT 0.417000 1.0080 0 + 20295 W1 5936 TIP3 OH2 OT -0.834000 15.9994 0 + 20296 W1 5936 TIP3 H1 HT 0.417000 1.0080 0 + 20297 W1 5936 TIP3 H2 HT 0.417000 1.0080 0 + 20298 W1 5937 TIP3 OH2 OT -0.834000 15.9994 0 + 20299 W1 5937 TIP3 H1 HT 0.417000 1.0080 0 + 20300 W1 5937 TIP3 H2 HT 0.417000 1.0080 0 + 20301 W1 5938 TIP3 OH2 OT -0.834000 15.9994 0 + 20302 W1 5938 TIP3 H1 HT 0.417000 1.0080 0 + 20303 W1 5938 TIP3 H2 HT 0.417000 1.0080 0 + 20304 W1 5939 TIP3 OH2 OT -0.834000 15.9994 0 + 20305 W1 5939 TIP3 H1 HT 0.417000 1.0080 0 + 20306 W1 5939 TIP3 H2 HT 0.417000 1.0080 0 + 20307 W1 5940 TIP3 OH2 OT -0.834000 15.9994 0 + 20308 W1 5940 TIP3 H1 HT 0.417000 1.0080 0 + 20309 W1 5940 TIP3 H2 HT 0.417000 1.0080 0 + 20310 W1 5941 TIP3 OH2 OT -0.834000 15.9994 0 + 20311 W1 5941 TIP3 H1 HT 0.417000 1.0080 0 + 20312 W1 5941 TIP3 H2 HT 0.417000 1.0080 0 + 20313 W1 5942 TIP3 OH2 OT -0.834000 15.9994 0 + 20314 W1 5942 TIP3 H1 HT 0.417000 1.0080 0 + 20315 W1 5942 TIP3 H2 HT 0.417000 1.0080 0 + 20316 W1 5943 TIP3 OH2 OT -0.834000 15.9994 0 + 20317 W1 5943 TIP3 H1 HT 0.417000 1.0080 0 + 20318 W1 5943 TIP3 H2 HT 0.417000 1.0080 0 + 20319 W1 5944 TIP3 OH2 OT -0.834000 15.9994 0 + 20320 W1 5944 TIP3 H1 HT 0.417000 1.0080 0 + 20321 W1 5944 TIP3 H2 HT 0.417000 1.0080 0 + 20322 W1 5945 TIP3 OH2 OT -0.834000 15.9994 0 + 20323 W1 5945 TIP3 H1 HT 0.417000 1.0080 0 + 20324 W1 5945 TIP3 H2 HT 0.417000 1.0080 0 + 20325 W1 5946 TIP3 OH2 OT -0.834000 15.9994 0 + 20326 W1 5946 TIP3 H1 HT 0.417000 1.0080 0 + 20327 W1 5946 TIP3 H2 HT 0.417000 1.0080 0 + 20328 W1 5947 TIP3 OH2 OT -0.834000 15.9994 0 + 20329 W1 5947 TIP3 H1 HT 0.417000 1.0080 0 + 20330 W1 5947 TIP3 H2 HT 0.417000 1.0080 0 + 20331 W1 5948 TIP3 OH2 OT -0.834000 15.9994 0 + 20332 W1 5948 TIP3 H1 HT 0.417000 1.0080 0 + 20333 W1 5948 TIP3 H2 HT 0.417000 1.0080 0 + 20334 W1 5949 TIP3 OH2 OT -0.834000 15.9994 0 + 20335 W1 5949 TIP3 H1 HT 0.417000 1.0080 0 + 20336 W1 5949 TIP3 H2 HT 0.417000 1.0080 0 + 20337 W1 5950 TIP3 OH2 OT -0.834000 15.9994 0 + 20338 W1 5950 TIP3 H1 HT 0.417000 1.0080 0 + 20339 W1 5950 TIP3 H2 HT 0.417000 1.0080 0 + 20340 W1 5951 TIP3 OH2 OT -0.834000 15.9994 0 + 20341 W1 5951 TIP3 H1 HT 0.417000 1.0080 0 + 20342 W1 5951 TIP3 H2 HT 0.417000 1.0080 0 + 20343 W1 5952 TIP3 OH2 OT -0.834000 15.9994 0 + 20344 W1 5952 TIP3 H1 HT 0.417000 1.0080 0 + 20345 W1 5952 TIP3 H2 HT 0.417000 1.0080 0 + 20346 W1 5953 TIP3 OH2 OT -0.834000 15.9994 0 + 20347 W1 5953 TIP3 H1 HT 0.417000 1.0080 0 + 20348 W1 5953 TIP3 H2 HT 0.417000 1.0080 0 + 20349 W1 5954 TIP3 OH2 OT -0.834000 15.9994 0 + 20350 W1 5954 TIP3 H1 HT 0.417000 1.0080 0 + 20351 W1 5954 TIP3 H2 HT 0.417000 1.0080 0 + 20352 W1 5955 TIP3 OH2 OT -0.834000 15.9994 0 + 20353 W1 5955 TIP3 H1 HT 0.417000 1.0080 0 + 20354 W1 5955 TIP3 H2 HT 0.417000 1.0080 0 + 20355 W1 5956 TIP3 OH2 OT -0.834000 15.9994 0 + 20356 W1 5956 TIP3 H1 HT 0.417000 1.0080 0 + 20357 W1 5956 TIP3 H2 HT 0.417000 1.0080 0 + 20358 W1 5957 TIP3 OH2 OT -0.834000 15.9994 0 + 20359 W1 5957 TIP3 H1 HT 0.417000 1.0080 0 + 20360 W1 5957 TIP3 H2 HT 0.417000 1.0080 0 + 20361 W1 5958 TIP3 OH2 OT -0.834000 15.9994 0 + 20362 W1 5958 TIP3 H1 HT 0.417000 1.0080 0 + 20363 W1 5958 TIP3 H2 HT 0.417000 1.0080 0 + 20364 W1 5959 TIP3 OH2 OT -0.834000 15.9994 0 + 20365 W1 5959 TIP3 H1 HT 0.417000 1.0080 0 + 20366 W1 5959 TIP3 H2 HT 0.417000 1.0080 0 + 20367 W1 5960 TIP3 OH2 OT -0.834000 15.9994 0 + 20368 W1 5960 TIP3 H1 HT 0.417000 1.0080 0 + 20369 W1 5960 TIP3 H2 HT 0.417000 1.0080 0 + 20370 W1 5961 TIP3 OH2 OT -0.834000 15.9994 0 + 20371 W1 5961 TIP3 H1 HT 0.417000 1.0080 0 + 20372 W1 5961 TIP3 H2 HT 0.417000 1.0080 0 + 20373 W1 5962 TIP3 OH2 OT -0.834000 15.9994 0 + 20374 W1 5962 TIP3 H1 HT 0.417000 1.0080 0 + 20375 W1 5962 TIP3 H2 HT 0.417000 1.0080 0 + 20376 W1 5963 TIP3 OH2 OT -0.834000 15.9994 0 + 20377 W1 5963 TIP3 H1 HT 0.417000 1.0080 0 + 20378 W1 5963 TIP3 H2 HT 0.417000 1.0080 0 + 20379 W1 5964 TIP3 OH2 OT -0.834000 15.9994 0 + 20380 W1 5964 TIP3 H1 HT 0.417000 1.0080 0 + 20381 W1 5964 TIP3 H2 HT 0.417000 1.0080 0 + 20382 W1 5965 TIP3 OH2 OT -0.834000 15.9994 0 + 20383 W1 5965 TIP3 H1 HT 0.417000 1.0080 0 + 20384 W1 5965 TIP3 H2 HT 0.417000 1.0080 0 + 20385 W1 5966 TIP3 OH2 OT -0.834000 15.9994 0 + 20386 W1 5966 TIP3 H1 HT 0.417000 1.0080 0 + 20387 W1 5966 TIP3 H2 HT 0.417000 1.0080 0 + 20388 W1 5967 TIP3 OH2 OT -0.834000 15.9994 0 + 20389 W1 5967 TIP3 H1 HT 0.417000 1.0080 0 + 20390 W1 5967 TIP3 H2 HT 0.417000 1.0080 0 + 20391 W1 5968 TIP3 OH2 OT -0.834000 15.9994 0 + 20392 W1 5968 TIP3 H1 HT 0.417000 1.0080 0 + 20393 W1 5968 TIP3 H2 HT 0.417000 1.0080 0 + 20394 W1 5969 TIP3 OH2 OT -0.834000 15.9994 0 + 20395 W1 5969 TIP3 H1 HT 0.417000 1.0080 0 + 20396 W1 5969 TIP3 H2 HT 0.417000 1.0080 0 + 20397 W1 5970 TIP3 OH2 OT -0.834000 15.9994 0 + 20398 W1 5970 TIP3 H1 HT 0.417000 1.0080 0 + 20399 W1 5970 TIP3 H2 HT 0.417000 1.0080 0 + 20400 W1 5971 TIP3 OH2 OT -0.834000 15.9994 0 + 20401 W1 5971 TIP3 H1 HT 0.417000 1.0080 0 + 20402 W1 5971 TIP3 H2 HT 0.417000 1.0080 0 + 20403 W1 5972 TIP3 OH2 OT -0.834000 15.9994 0 + 20404 W1 5972 TIP3 H1 HT 0.417000 1.0080 0 + 20405 W1 5972 TIP3 H2 HT 0.417000 1.0080 0 + 20406 W1 5973 TIP3 OH2 OT -0.834000 15.9994 0 + 20407 W1 5973 TIP3 H1 HT 0.417000 1.0080 0 + 20408 W1 5973 TIP3 H2 HT 0.417000 1.0080 0 + 20409 W1 5974 TIP3 OH2 OT -0.834000 15.9994 0 + 20410 W1 5974 TIP3 H1 HT 0.417000 1.0080 0 + 20411 W1 5974 TIP3 H2 HT 0.417000 1.0080 0 + 20412 W1 5975 TIP3 OH2 OT -0.834000 15.9994 0 + 20413 W1 5975 TIP3 H1 HT 0.417000 1.0080 0 + 20414 W1 5975 TIP3 H2 HT 0.417000 1.0080 0 + 20415 W1 5976 TIP3 OH2 OT -0.834000 15.9994 0 + 20416 W1 5976 TIP3 H1 HT 0.417000 1.0080 0 + 20417 W1 5976 TIP3 H2 HT 0.417000 1.0080 0 + 20418 W1 5977 TIP3 OH2 OT -0.834000 15.9994 0 + 20419 W1 5977 TIP3 H1 HT 0.417000 1.0080 0 + 20420 W1 5977 TIP3 H2 HT 0.417000 1.0080 0 + 20421 W1 5978 TIP3 OH2 OT -0.834000 15.9994 0 + 20422 W1 5978 TIP3 H1 HT 0.417000 1.0080 0 + 20423 W1 5978 TIP3 H2 HT 0.417000 1.0080 0 + 20424 W1 5979 TIP3 OH2 OT -0.834000 15.9994 0 + 20425 W1 5979 TIP3 H1 HT 0.417000 1.0080 0 + 20426 W1 5979 TIP3 H2 HT 0.417000 1.0080 0 + 20427 W1 5980 TIP3 OH2 OT -0.834000 15.9994 0 + 20428 W1 5980 TIP3 H1 HT 0.417000 1.0080 0 + 20429 W1 5980 TIP3 H2 HT 0.417000 1.0080 0 + 20430 W1 5981 TIP3 OH2 OT -0.834000 15.9994 0 + 20431 W1 5981 TIP3 H1 HT 0.417000 1.0080 0 + 20432 W1 5981 TIP3 H2 HT 0.417000 1.0080 0 + 20433 W1 5982 TIP3 OH2 OT -0.834000 15.9994 0 + 20434 W1 5982 TIP3 H1 HT 0.417000 1.0080 0 + 20435 W1 5982 TIP3 H2 HT 0.417000 1.0080 0 + 20436 W1 5983 TIP3 OH2 OT -0.834000 15.9994 0 + 20437 W1 5983 TIP3 H1 HT 0.417000 1.0080 0 + 20438 W1 5983 TIP3 H2 HT 0.417000 1.0080 0 + 20439 W1 5984 TIP3 OH2 OT -0.834000 15.9994 0 + 20440 W1 5984 TIP3 H1 HT 0.417000 1.0080 0 + 20441 W1 5984 TIP3 H2 HT 0.417000 1.0080 0 + 20442 W1 5985 TIP3 OH2 OT -0.834000 15.9994 0 + 20443 W1 5985 TIP3 H1 HT 0.417000 1.0080 0 + 20444 W1 5985 TIP3 H2 HT 0.417000 1.0080 0 + 20445 W1 5986 TIP3 OH2 OT -0.834000 15.9994 0 + 20446 W1 5986 TIP3 H1 HT 0.417000 1.0080 0 + 20447 W1 5986 TIP3 H2 HT 0.417000 1.0080 0 + 20448 W1 5987 TIP3 OH2 OT -0.834000 15.9994 0 + 20449 W1 5987 TIP3 H1 HT 0.417000 1.0080 0 + 20450 W1 5987 TIP3 H2 HT 0.417000 1.0080 0 + 20451 W1 5988 TIP3 OH2 OT -0.834000 15.9994 0 + 20452 W1 5988 TIP3 H1 HT 0.417000 1.0080 0 + 20453 W1 5988 TIP3 H2 HT 0.417000 1.0080 0 + 20454 W1 5989 TIP3 OH2 OT -0.834000 15.9994 0 + 20455 W1 5989 TIP3 H1 HT 0.417000 1.0080 0 + 20456 W1 5989 TIP3 H2 HT 0.417000 1.0080 0 + 20457 W1 5990 TIP3 OH2 OT -0.834000 15.9994 0 + 20458 W1 5990 TIP3 H1 HT 0.417000 1.0080 0 + 20459 W1 5990 TIP3 H2 HT 0.417000 1.0080 0 + 20460 W1 5991 TIP3 OH2 OT -0.834000 15.9994 0 + 20461 W1 5991 TIP3 H1 HT 0.417000 1.0080 0 + 20462 W1 5991 TIP3 H2 HT 0.417000 1.0080 0 + 20463 W1 5992 TIP3 OH2 OT -0.834000 15.9994 0 + 20464 W1 5992 TIP3 H1 HT 0.417000 1.0080 0 + 20465 W1 5992 TIP3 H2 HT 0.417000 1.0080 0 + 20466 W1 5993 TIP3 OH2 OT -0.834000 15.9994 0 + 20467 W1 5993 TIP3 H1 HT 0.417000 1.0080 0 + 20468 W1 5993 TIP3 H2 HT 0.417000 1.0080 0 + 20469 W1 5994 TIP3 OH2 OT -0.834000 15.9994 0 + 20470 W1 5994 TIP3 H1 HT 0.417000 1.0080 0 + 20471 W1 5994 TIP3 H2 HT 0.417000 1.0080 0 + 20472 W1 5995 TIP3 OH2 OT -0.834000 15.9994 0 + 20473 W1 5995 TIP3 H1 HT 0.417000 1.0080 0 + 20474 W1 5995 TIP3 H2 HT 0.417000 1.0080 0 + 20475 W1 5996 TIP3 OH2 OT -0.834000 15.9994 0 + 20476 W1 5996 TIP3 H1 HT 0.417000 1.0080 0 + 20477 W1 5996 TIP3 H2 HT 0.417000 1.0080 0 + 20478 W1 5997 TIP3 OH2 OT -0.834000 15.9994 0 + 20479 W1 5997 TIP3 H1 HT 0.417000 1.0080 0 + 20480 W1 5997 TIP3 H2 HT 0.417000 1.0080 0 + 20481 W1 5998 TIP3 OH2 OT -0.834000 15.9994 0 + 20482 W1 5998 TIP3 H1 HT 0.417000 1.0080 0 + 20483 W1 5998 TIP3 H2 HT 0.417000 1.0080 0 + 20484 W1 5999 TIP3 OH2 OT -0.834000 15.9994 0 + 20485 W1 5999 TIP3 H1 HT 0.417000 1.0080 0 + 20486 W1 5999 TIP3 H2 HT 0.417000 1.0080 0 + 20487 W1 6000 TIP3 OH2 OT -0.834000 15.9994 0 + 20488 W1 6000 TIP3 H1 HT 0.417000 1.0080 0 + 20489 W1 6000 TIP3 H2 HT 0.417000 1.0080 0 + 20490 W1 6001 TIP3 OH2 OT -0.834000 15.9994 0 + 20491 W1 6001 TIP3 H1 HT 0.417000 1.0080 0 + 20492 W1 6001 TIP3 H2 HT 0.417000 1.0080 0 + 20493 W1 6002 TIP3 OH2 OT -0.834000 15.9994 0 + 20494 W1 6002 TIP3 H1 HT 0.417000 1.0080 0 + 20495 W1 6002 TIP3 H2 HT 0.417000 1.0080 0 + 20496 W1 6003 TIP3 OH2 OT -0.834000 15.9994 0 + 20497 W1 6003 TIP3 H1 HT 0.417000 1.0080 0 + 20498 W1 6003 TIP3 H2 HT 0.417000 1.0080 0 + 20499 W1 6004 TIP3 OH2 OT -0.834000 15.9994 0 + 20500 W1 6004 TIP3 H1 HT 0.417000 1.0080 0 + 20501 W1 6004 TIP3 H2 HT 0.417000 1.0080 0 + 20502 W1 6005 TIP3 OH2 OT -0.834000 15.9994 0 + 20503 W1 6005 TIP3 H1 HT 0.417000 1.0080 0 + 20504 W1 6005 TIP3 H2 HT 0.417000 1.0080 0 + 20505 W1 6006 TIP3 OH2 OT -0.834000 15.9994 0 + 20506 W1 6006 TIP3 H1 HT 0.417000 1.0080 0 + 20507 W1 6006 TIP3 H2 HT 0.417000 1.0080 0 + 20508 W1 6007 TIP3 OH2 OT -0.834000 15.9994 0 + 20509 W1 6007 TIP3 H1 HT 0.417000 1.0080 0 + 20510 W1 6007 TIP3 H2 HT 0.417000 1.0080 0 + 20511 W1 6008 TIP3 OH2 OT -0.834000 15.9994 0 + 20512 W1 6008 TIP3 H1 HT 0.417000 1.0080 0 + 20513 W1 6008 TIP3 H2 HT 0.417000 1.0080 0 + 20514 W1 6009 TIP3 OH2 OT -0.834000 15.9994 0 + 20515 W1 6009 TIP3 H1 HT 0.417000 1.0080 0 + 20516 W1 6009 TIP3 H2 HT 0.417000 1.0080 0 + 20517 W1 6010 TIP3 OH2 OT -0.834000 15.9994 0 + 20518 W1 6010 TIP3 H1 HT 0.417000 1.0080 0 + 20519 W1 6010 TIP3 H2 HT 0.417000 1.0080 0 + 20520 W1 6011 TIP3 OH2 OT -0.834000 15.9994 0 + 20521 W1 6011 TIP3 H1 HT 0.417000 1.0080 0 + 20522 W1 6011 TIP3 H2 HT 0.417000 1.0080 0 + 20523 W1 6012 TIP3 OH2 OT -0.834000 15.9994 0 + 20524 W1 6012 TIP3 H1 HT 0.417000 1.0080 0 + 20525 W1 6012 TIP3 H2 HT 0.417000 1.0080 0 + 20526 W1 6013 TIP3 OH2 OT -0.834000 15.9994 0 + 20527 W1 6013 TIP3 H1 HT 0.417000 1.0080 0 + 20528 W1 6013 TIP3 H2 HT 0.417000 1.0080 0 + 20529 W1 6014 TIP3 OH2 OT -0.834000 15.9994 0 + 20530 W1 6014 TIP3 H1 HT 0.417000 1.0080 0 + 20531 W1 6014 TIP3 H2 HT 0.417000 1.0080 0 + 20532 W1 6015 TIP3 OH2 OT -0.834000 15.9994 0 + 20533 W1 6015 TIP3 H1 HT 0.417000 1.0080 0 + 20534 W1 6015 TIP3 H2 HT 0.417000 1.0080 0 + 20535 W1 6016 TIP3 OH2 OT -0.834000 15.9994 0 + 20536 W1 6016 TIP3 H1 HT 0.417000 1.0080 0 + 20537 W1 6016 TIP3 H2 HT 0.417000 1.0080 0 + 20538 W1 6017 TIP3 OH2 OT -0.834000 15.9994 0 + 20539 W1 6017 TIP3 H1 HT 0.417000 1.0080 0 + 20540 W1 6017 TIP3 H2 HT 0.417000 1.0080 0 + 20541 W1 6018 TIP3 OH2 OT -0.834000 15.9994 0 + 20542 W1 6018 TIP3 H1 HT 0.417000 1.0080 0 + 20543 W1 6018 TIP3 H2 HT 0.417000 1.0080 0 + 20544 W1 6019 TIP3 OH2 OT -0.834000 15.9994 0 + 20545 W1 6019 TIP3 H1 HT 0.417000 1.0080 0 + 20546 W1 6019 TIP3 H2 HT 0.417000 1.0080 0 + 20547 W1 6020 TIP3 OH2 OT -0.834000 15.9994 0 + 20548 W1 6020 TIP3 H1 HT 0.417000 1.0080 0 + 20549 W1 6020 TIP3 H2 HT 0.417000 1.0080 0 + 20550 W1 6021 TIP3 OH2 OT -0.834000 15.9994 0 + 20551 W1 6021 TIP3 H1 HT 0.417000 1.0080 0 + 20552 W1 6021 TIP3 H2 HT 0.417000 1.0080 0 + 20553 W1 6022 TIP3 OH2 OT -0.834000 15.9994 0 + 20554 W1 6022 TIP3 H1 HT 0.417000 1.0080 0 + 20555 W1 6022 TIP3 H2 HT 0.417000 1.0080 0 + 20556 W1 6023 TIP3 OH2 OT -0.834000 15.9994 0 + 20557 W1 6023 TIP3 H1 HT 0.417000 1.0080 0 + 20558 W1 6023 TIP3 H2 HT 0.417000 1.0080 0 + 20559 W1 6024 TIP3 OH2 OT -0.834000 15.9994 0 + 20560 W1 6024 TIP3 H1 HT 0.417000 1.0080 0 + 20561 W1 6024 TIP3 H2 HT 0.417000 1.0080 0 + 20562 W1 6025 TIP3 OH2 OT -0.834000 15.9994 0 + 20563 W1 6025 TIP3 H1 HT 0.417000 1.0080 0 + 20564 W1 6025 TIP3 H2 HT 0.417000 1.0080 0 + 20565 W1 6026 TIP3 OH2 OT -0.834000 15.9994 0 + 20566 W1 6026 TIP3 H1 HT 0.417000 1.0080 0 + 20567 W1 6026 TIP3 H2 HT 0.417000 1.0080 0 + 20568 W1 6027 TIP3 OH2 OT -0.834000 15.9994 0 + 20569 W1 6027 TIP3 H1 HT 0.417000 1.0080 0 + 20570 W1 6027 TIP3 H2 HT 0.417000 1.0080 0 + 20571 W1 6028 TIP3 OH2 OT -0.834000 15.9994 0 + 20572 W1 6028 TIP3 H1 HT 0.417000 1.0080 0 + 20573 W1 6028 TIP3 H2 HT 0.417000 1.0080 0 + 20574 W1 6029 TIP3 OH2 OT -0.834000 15.9994 0 + 20575 W1 6029 TIP3 H1 HT 0.417000 1.0080 0 + 20576 W1 6029 TIP3 H2 HT 0.417000 1.0080 0 + 20577 W1 6030 TIP3 OH2 OT -0.834000 15.9994 0 + 20578 W1 6030 TIP3 H1 HT 0.417000 1.0080 0 + 20579 W1 6030 TIP3 H2 HT 0.417000 1.0080 0 + 20580 W1 6031 TIP3 OH2 OT -0.834000 15.9994 0 + 20581 W1 6031 TIP3 H1 HT 0.417000 1.0080 0 + 20582 W1 6031 TIP3 H2 HT 0.417000 1.0080 0 + 20583 W1 6032 TIP3 OH2 OT -0.834000 15.9994 0 + 20584 W1 6032 TIP3 H1 HT 0.417000 1.0080 0 + 20585 W1 6032 TIP3 H2 HT 0.417000 1.0080 0 + 20586 W1 6033 TIP3 OH2 OT -0.834000 15.9994 0 + 20587 W1 6033 TIP3 H1 HT 0.417000 1.0080 0 + 20588 W1 6033 TIP3 H2 HT 0.417000 1.0080 0 + 20589 W1 6034 TIP3 OH2 OT -0.834000 15.9994 0 + 20590 W1 6034 TIP3 H1 HT 0.417000 1.0080 0 + 20591 W1 6034 TIP3 H2 HT 0.417000 1.0080 0 + 20592 W1 6035 TIP3 OH2 OT -0.834000 15.9994 0 + 20593 W1 6035 TIP3 H1 HT 0.417000 1.0080 0 + 20594 W1 6035 TIP3 H2 HT 0.417000 1.0080 0 + 20595 W1 6036 TIP3 OH2 OT -0.834000 15.9994 0 + 20596 W1 6036 TIP3 H1 HT 0.417000 1.0080 0 + 20597 W1 6036 TIP3 H2 HT 0.417000 1.0080 0 + 20598 W1 6037 TIP3 OH2 OT -0.834000 15.9994 0 + 20599 W1 6037 TIP3 H1 HT 0.417000 1.0080 0 + 20600 W1 6037 TIP3 H2 HT 0.417000 1.0080 0 + 20601 W1 6038 TIP3 OH2 OT -0.834000 15.9994 0 + 20602 W1 6038 TIP3 H1 HT 0.417000 1.0080 0 + 20603 W1 6038 TIP3 H2 HT 0.417000 1.0080 0 + 20604 W1 6039 TIP3 OH2 OT -0.834000 15.9994 0 + 20605 W1 6039 TIP3 H1 HT 0.417000 1.0080 0 + 20606 W1 6039 TIP3 H2 HT 0.417000 1.0080 0 + 20607 W1 6040 TIP3 OH2 OT -0.834000 15.9994 0 + 20608 W1 6040 TIP3 H1 HT 0.417000 1.0080 0 + 20609 W1 6040 TIP3 H2 HT 0.417000 1.0080 0 + 20610 W1 6041 TIP3 OH2 OT -0.834000 15.9994 0 + 20611 W1 6041 TIP3 H1 HT 0.417000 1.0080 0 + 20612 W1 6041 TIP3 H2 HT 0.417000 1.0080 0 + 20613 W1 6042 TIP3 OH2 OT -0.834000 15.9994 0 + 20614 W1 6042 TIP3 H1 HT 0.417000 1.0080 0 + 20615 W1 6042 TIP3 H2 HT 0.417000 1.0080 0 + 20616 W1 6043 TIP3 OH2 OT -0.834000 15.9994 0 + 20617 W1 6043 TIP3 H1 HT 0.417000 1.0080 0 + 20618 W1 6043 TIP3 H2 HT 0.417000 1.0080 0 + 20619 W1 6044 TIP3 OH2 OT -0.834000 15.9994 0 + 20620 W1 6044 TIP3 H1 HT 0.417000 1.0080 0 + 20621 W1 6044 TIP3 H2 HT 0.417000 1.0080 0 + 20622 W1 6045 TIP3 OH2 OT -0.834000 15.9994 0 + 20623 W1 6045 TIP3 H1 HT 0.417000 1.0080 0 + 20624 W1 6045 TIP3 H2 HT 0.417000 1.0080 0 + 20625 W1 6046 TIP3 OH2 OT -0.834000 15.9994 0 + 20626 W1 6046 TIP3 H1 HT 0.417000 1.0080 0 + 20627 W1 6046 TIP3 H2 HT 0.417000 1.0080 0 + 20628 W1 6047 TIP3 OH2 OT -0.834000 15.9994 0 + 20629 W1 6047 TIP3 H1 HT 0.417000 1.0080 0 + 20630 W1 6047 TIP3 H2 HT 0.417000 1.0080 0 + 20631 W1 6048 TIP3 OH2 OT -0.834000 15.9994 0 + 20632 W1 6048 TIP3 H1 HT 0.417000 1.0080 0 + 20633 W1 6048 TIP3 H2 HT 0.417000 1.0080 0 + 20634 W1 6049 TIP3 OH2 OT -0.834000 15.9994 0 + 20635 W1 6049 TIP3 H1 HT 0.417000 1.0080 0 + 20636 W1 6049 TIP3 H2 HT 0.417000 1.0080 0 + 20637 W1 6050 TIP3 OH2 OT -0.834000 15.9994 0 + 20638 W1 6050 TIP3 H1 HT 0.417000 1.0080 0 + 20639 W1 6050 TIP3 H2 HT 0.417000 1.0080 0 + 20640 W1 6051 TIP3 OH2 OT -0.834000 15.9994 0 + 20641 W1 6051 TIP3 H1 HT 0.417000 1.0080 0 + 20642 W1 6051 TIP3 H2 HT 0.417000 1.0080 0 + 20643 W1 6052 TIP3 OH2 OT -0.834000 15.9994 0 + 20644 W1 6052 TIP3 H1 HT 0.417000 1.0080 0 + 20645 W1 6052 TIP3 H2 HT 0.417000 1.0080 0 + 20646 W1 6053 TIP3 OH2 OT -0.834000 15.9994 0 + 20647 W1 6053 TIP3 H1 HT 0.417000 1.0080 0 + 20648 W1 6053 TIP3 H2 HT 0.417000 1.0080 0 + 20649 W1 6054 TIP3 OH2 OT -0.834000 15.9994 0 + 20650 W1 6054 TIP3 H1 HT 0.417000 1.0080 0 + 20651 W1 6054 TIP3 H2 HT 0.417000 1.0080 0 + 20652 W1 6055 TIP3 OH2 OT -0.834000 15.9994 0 + 20653 W1 6055 TIP3 H1 HT 0.417000 1.0080 0 + 20654 W1 6055 TIP3 H2 HT 0.417000 1.0080 0 + 20655 W1 6056 TIP3 OH2 OT -0.834000 15.9994 0 + 20656 W1 6056 TIP3 H1 HT 0.417000 1.0080 0 + 20657 W1 6056 TIP3 H2 HT 0.417000 1.0080 0 + 20658 W1 6057 TIP3 OH2 OT -0.834000 15.9994 0 + 20659 W1 6057 TIP3 H1 HT 0.417000 1.0080 0 + 20660 W1 6057 TIP3 H2 HT 0.417000 1.0080 0 + 20661 W1 6058 TIP3 OH2 OT -0.834000 15.9994 0 + 20662 W1 6058 TIP3 H1 HT 0.417000 1.0080 0 + 20663 W1 6058 TIP3 H2 HT 0.417000 1.0080 0 + 20664 W1 6059 TIP3 OH2 OT -0.834000 15.9994 0 + 20665 W1 6059 TIP3 H1 HT 0.417000 1.0080 0 + 20666 W1 6059 TIP3 H2 HT 0.417000 1.0080 0 + 20667 W1 6060 TIP3 OH2 OT -0.834000 15.9994 0 + 20668 W1 6060 TIP3 H1 HT 0.417000 1.0080 0 + 20669 W1 6060 TIP3 H2 HT 0.417000 1.0080 0 + 20670 W1 6061 TIP3 OH2 OT -0.834000 15.9994 0 + 20671 W1 6061 TIP3 H1 HT 0.417000 1.0080 0 + 20672 W1 6061 TIP3 H2 HT 0.417000 1.0080 0 + 20673 W1 6062 TIP3 OH2 OT -0.834000 15.9994 0 + 20674 W1 6062 TIP3 H1 HT 0.417000 1.0080 0 + 20675 W1 6062 TIP3 H2 HT 0.417000 1.0080 0 + 20676 W1 6063 TIP3 OH2 OT -0.834000 15.9994 0 + 20677 W1 6063 TIP3 H1 HT 0.417000 1.0080 0 + 20678 W1 6063 TIP3 H2 HT 0.417000 1.0080 0 + 20679 W1 6064 TIP3 OH2 OT -0.834000 15.9994 0 + 20680 W1 6064 TIP3 H1 HT 0.417000 1.0080 0 + 20681 W1 6064 TIP3 H2 HT 0.417000 1.0080 0 + 20682 W1 6065 TIP3 OH2 OT -0.834000 15.9994 0 + 20683 W1 6065 TIP3 H1 HT 0.417000 1.0080 0 + 20684 W1 6065 TIP3 H2 HT 0.417000 1.0080 0 + 20685 W1 6066 TIP3 OH2 OT -0.834000 15.9994 0 + 20686 W1 6066 TIP3 H1 HT 0.417000 1.0080 0 + 20687 W1 6066 TIP3 H2 HT 0.417000 1.0080 0 + 20688 W1 6067 TIP3 OH2 OT -0.834000 15.9994 0 + 20689 W1 6067 TIP3 H1 HT 0.417000 1.0080 0 + 20690 W1 6067 TIP3 H2 HT 0.417000 1.0080 0 + 20691 W1 6068 TIP3 OH2 OT -0.834000 15.9994 0 + 20692 W1 6068 TIP3 H1 HT 0.417000 1.0080 0 + 20693 W1 6068 TIP3 H2 HT 0.417000 1.0080 0 + 20694 W1 6069 TIP3 OH2 OT -0.834000 15.9994 0 + 20695 W1 6069 TIP3 H1 HT 0.417000 1.0080 0 + 20696 W1 6069 TIP3 H2 HT 0.417000 1.0080 0 + 20697 W1 6070 TIP3 OH2 OT -0.834000 15.9994 0 + 20698 W1 6070 TIP3 H1 HT 0.417000 1.0080 0 + 20699 W1 6070 TIP3 H2 HT 0.417000 1.0080 0 + 20700 W1 6071 TIP3 OH2 OT -0.834000 15.9994 0 + 20701 W1 6071 TIP3 H1 HT 0.417000 1.0080 0 + 20702 W1 6071 TIP3 H2 HT 0.417000 1.0080 0 + 20703 W1 6072 TIP3 OH2 OT -0.834000 15.9994 0 + 20704 W1 6072 TIP3 H1 HT 0.417000 1.0080 0 + 20705 W1 6072 TIP3 H2 HT 0.417000 1.0080 0 + 20706 W1 6073 TIP3 OH2 OT -0.834000 15.9994 0 + 20707 W1 6073 TIP3 H1 HT 0.417000 1.0080 0 + 20708 W1 6073 TIP3 H2 HT 0.417000 1.0080 0 + 20709 W1 6074 TIP3 OH2 OT -0.834000 15.9994 0 + 20710 W1 6074 TIP3 H1 HT 0.417000 1.0080 0 + 20711 W1 6074 TIP3 H2 HT 0.417000 1.0080 0 + 20712 W1 6075 TIP3 OH2 OT -0.834000 15.9994 0 + 20713 W1 6075 TIP3 H1 HT 0.417000 1.0080 0 + 20714 W1 6075 TIP3 H2 HT 0.417000 1.0080 0 + 20715 W1 6076 TIP3 OH2 OT -0.834000 15.9994 0 + 20716 W1 6076 TIP3 H1 HT 0.417000 1.0080 0 + 20717 W1 6076 TIP3 H2 HT 0.417000 1.0080 0 + 20718 W1 6077 TIP3 OH2 OT -0.834000 15.9994 0 + 20719 W1 6077 TIP3 H1 HT 0.417000 1.0080 0 + 20720 W1 6077 TIP3 H2 HT 0.417000 1.0080 0 + 20721 W1 6078 TIP3 OH2 OT -0.834000 15.9994 0 + 20722 W1 6078 TIP3 H1 HT 0.417000 1.0080 0 + 20723 W1 6078 TIP3 H2 HT 0.417000 1.0080 0 + 20724 W1 6079 TIP3 OH2 OT -0.834000 15.9994 0 + 20725 W1 6079 TIP3 H1 HT 0.417000 1.0080 0 + 20726 W1 6079 TIP3 H2 HT 0.417000 1.0080 0 + 20727 W1 6080 TIP3 OH2 OT -0.834000 15.9994 0 + 20728 W1 6080 TIP3 H1 HT 0.417000 1.0080 0 + 20729 W1 6080 TIP3 H2 HT 0.417000 1.0080 0 + 20730 W1 6081 TIP3 OH2 OT -0.834000 15.9994 0 + 20731 W1 6081 TIP3 H1 HT 0.417000 1.0080 0 + 20732 W1 6081 TIP3 H2 HT 0.417000 1.0080 0 + 20733 W1 6082 TIP3 OH2 OT -0.834000 15.9994 0 + 20734 W1 6082 TIP3 H1 HT 0.417000 1.0080 0 + 20735 W1 6082 TIP3 H2 HT 0.417000 1.0080 0 + 20736 W1 6083 TIP3 OH2 OT -0.834000 15.9994 0 + 20737 W1 6083 TIP3 H1 HT 0.417000 1.0080 0 + 20738 W1 6083 TIP3 H2 HT 0.417000 1.0080 0 + 20739 W1 6084 TIP3 OH2 OT -0.834000 15.9994 0 + 20740 W1 6084 TIP3 H1 HT 0.417000 1.0080 0 + 20741 W1 6084 TIP3 H2 HT 0.417000 1.0080 0 + 20742 W1 6085 TIP3 OH2 OT -0.834000 15.9994 0 + 20743 W1 6085 TIP3 H1 HT 0.417000 1.0080 0 + 20744 W1 6085 TIP3 H2 HT 0.417000 1.0080 0 + 20745 W1 6086 TIP3 OH2 OT -0.834000 15.9994 0 + 20746 W1 6086 TIP3 H1 HT 0.417000 1.0080 0 + 20747 W1 6086 TIP3 H2 HT 0.417000 1.0080 0 + 20748 W1 6087 TIP3 OH2 OT -0.834000 15.9994 0 + 20749 W1 6087 TIP3 H1 HT 0.417000 1.0080 0 + 20750 W1 6087 TIP3 H2 HT 0.417000 1.0080 0 + 20751 W1 6088 TIP3 OH2 OT -0.834000 15.9994 0 + 20752 W1 6088 TIP3 H1 HT 0.417000 1.0080 0 + 20753 W1 6088 TIP3 H2 HT 0.417000 1.0080 0 + 20754 W1 6089 TIP3 OH2 OT -0.834000 15.9994 0 + 20755 W1 6089 TIP3 H1 HT 0.417000 1.0080 0 + 20756 W1 6089 TIP3 H2 HT 0.417000 1.0080 0 + 20757 W1 6090 TIP3 OH2 OT -0.834000 15.9994 0 + 20758 W1 6090 TIP3 H1 HT 0.417000 1.0080 0 + 20759 W1 6090 TIP3 H2 HT 0.417000 1.0080 0 + 20760 W1 6091 TIP3 OH2 OT -0.834000 15.9994 0 + 20761 W1 6091 TIP3 H1 HT 0.417000 1.0080 0 + 20762 W1 6091 TIP3 H2 HT 0.417000 1.0080 0 + 20763 W1 6092 TIP3 OH2 OT -0.834000 15.9994 0 + 20764 W1 6092 TIP3 H1 HT 0.417000 1.0080 0 + 20765 W1 6092 TIP3 H2 HT 0.417000 1.0080 0 + 20766 W1 6093 TIP3 OH2 OT -0.834000 15.9994 0 + 20767 W1 6093 TIP3 H1 HT 0.417000 1.0080 0 + 20768 W1 6093 TIP3 H2 HT 0.417000 1.0080 0 + 20769 W1 6094 TIP3 OH2 OT -0.834000 15.9994 0 + 20770 W1 6094 TIP3 H1 HT 0.417000 1.0080 0 + 20771 W1 6094 TIP3 H2 HT 0.417000 1.0080 0 + 20772 W1 6095 TIP3 OH2 OT -0.834000 15.9994 0 + 20773 W1 6095 TIP3 H1 HT 0.417000 1.0080 0 + 20774 W1 6095 TIP3 H2 HT 0.417000 1.0080 0 + 20775 W1 6096 TIP3 OH2 OT -0.834000 15.9994 0 + 20776 W1 6096 TIP3 H1 HT 0.417000 1.0080 0 + 20777 W1 6096 TIP3 H2 HT 0.417000 1.0080 0 + 20778 W1 6097 TIP3 OH2 OT -0.834000 15.9994 0 + 20779 W1 6097 TIP3 H1 HT 0.417000 1.0080 0 + 20780 W1 6097 TIP3 H2 HT 0.417000 1.0080 0 + 20781 W1 6098 TIP3 OH2 OT -0.834000 15.9994 0 + 20782 W1 6098 TIP3 H1 HT 0.417000 1.0080 0 + 20783 W1 6098 TIP3 H2 HT 0.417000 1.0080 0 + 20784 W1 6099 TIP3 OH2 OT -0.834000 15.9994 0 + 20785 W1 6099 TIP3 H1 HT 0.417000 1.0080 0 + 20786 W1 6099 TIP3 H2 HT 0.417000 1.0080 0 + 20787 W1 6100 TIP3 OH2 OT -0.834000 15.9994 0 + 20788 W1 6100 TIP3 H1 HT 0.417000 1.0080 0 + 20789 W1 6100 TIP3 H2 HT 0.417000 1.0080 0 + 20790 W1 6101 TIP3 OH2 OT -0.834000 15.9994 0 + 20791 W1 6101 TIP3 H1 HT 0.417000 1.0080 0 + 20792 W1 6101 TIP3 H2 HT 0.417000 1.0080 0 + 20793 W1 6102 TIP3 OH2 OT -0.834000 15.9994 0 + 20794 W1 6102 TIP3 H1 HT 0.417000 1.0080 0 + 20795 W1 6102 TIP3 H2 HT 0.417000 1.0080 0 + 20796 W1 6103 TIP3 OH2 OT -0.834000 15.9994 0 + 20797 W1 6103 TIP3 H1 HT 0.417000 1.0080 0 + 20798 W1 6103 TIP3 H2 HT 0.417000 1.0080 0 + 20799 W1 6104 TIP3 OH2 OT -0.834000 15.9994 0 + 20800 W1 6104 TIP3 H1 HT 0.417000 1.0080 0 + 20801 W1 6104 TIP3 H2 HT 0.417000 1.0080 0 + 20802 W1 6105 TIP3 OH2 OT -0.834000 15.9994 0 + 20803 W1 6105 TIP3 H1 HT 0.417000 1.0080 0 + 20804 W1 6105 TIP3 H2 HT 0.417000 1.0080 0 + 20805 W1 6106 TIP3 OH2 OT -0.834000 15.9994 0 + 20806 W1 6106 TIP3 H1 HT 0.417000 1.0080 0 + 20807 W1 6106 TIP3 H2 HT 0.417000 1.0080 0 + 20808 W1 6107 TIP3 OH2 OT -0.834000 15.9994 0 + 20809 W1 6107 TIP3 H1 HT 0.417000 1.0080 0 + 20810 W1 6107 TIP3 H2 HT 0.417000 1.0080 0 + 20811 W1 6108 TIP3 OH2 OT -0.834000 15.9994 0 + 20812 W1 6108 TIP3 H1 HT 0.417000 1.0080 0 + 20813 W1 6108 TIP3 H2 HT 0.417000 1.0080 0 + 20814 W1 6109 TIP3 OH2 OT -0.834000 15.9994 0 + 20815 W1 6109 TIP3 H1 HT 0.417000 1.0080 0 + 20816 W1 6109 TIP3 H2 HT 0.417000 1.0080 0 + 20817 W1 6110 TIP3 OH2 OT -0.834000 15.9994 0 + 20818 W1 6110 TIP3 H1 HT 0.417000 1.0080 0 + 20819 W1 6110 TIP3 H2 HT 0.417000 1.0080 0 + 20820 W1 6111 TIP3 OH2 OT -0.834000 15.9994 0 + 20821 W1 6111 TIP3 H1 HT 0.417000 1.0080 0 + 20822 W1 6111 TIP3 H2 HT 0.417000 1.0080 0 + 20823 W1 6112 TIP3 OH2 OT -0.834000 15.9994 0 + 20824 W1 6112 TIP3 H1 HT 0.417000 1.0080 0 + 20825 W1 6112 TIP3 H2 HT 0.417000 1.0080 0 + 20826 W1 6113 TIP3 OH2 OT -0.834000 15.9994 0 + 20827 W1 6113 TIP3 H1 HT 0.417000 1.0080 0 + 20828 W1 6113 TIP3 H2 HT 0.417000 1.0080 0 + 20829 W1 6114 TIP3 OH2 OT -0.834000 15.9994 0 + 20830 W1 6114 TIP3 H1 HT 0.417000 1.0080 0 + 20831 W1 6114 TIP3 H2 HT 0.417000 1.0080 0 + 20832 W1 6115 TIP3 OH2 OT -0.834000 15.9994 0 + 20833 W1 6115 TIP3 H1 HT 0.417000 1.0080 0 + 20834 W1 6115 TIP3 H2 HT 0.417000 1.0080 0 + 20835 W1 6116 TIP3 OH2 OT -0.834000 15.9994 0 + 20836 W1 6116 TIP3 H1 HT 0.417000 1.0080 0 + 20837 W1 6116 TIP3 H2 HT 0.417000 1.0080 0 + 20838 W1 6117 TIP3 OH2 OT -0.834000 15.9994 0 + 20839 W1 6117 TIP3 H1 HT 0.417000 1.0080 0 + 20840 W1 6117 TIP3 H2 HT 0.417000 1.0080 0 + 20841 W1 6118 TIP3 OH2 OT -0.834000 15.9994 0 + 20842 W1 6118 TIP3 H1 HT 0.417000 1.0080 0 + 20843 W1 6118 TIP3 H2 HT 0.417000 1.0080 0 + 20844 W1 6119 TIP3 OH2 OT -0.834000 15.9994 0 + 20845 W1 6119 TIP3 H1 HT 0.417000 1.0080 0 + 20846 W1 6119 TIP3 H2 HT 0.417000 1.0080 0 + 20847 W1 6120 TIP3 OH2 OT -0.834000 15.9994 0 + 20848 W1 6120 TIP3 H1 HT 0.417000 1.0080 0 + 20849 W1 6120 TIP3 H2 HT 0.417000 1.0080 0 + 20850 W1 6121 TIP3 OH2 OT -0.834000 15.9994 0 + 20851 W1 6121 TIP3 H1 HT 0.417000 1.0080 0 + 20852 W1 6121 TIP3 H2 HT 0.417000 1.0080 0 + 20853 W1 6122 TIP3 OH2 OT -0.834000 15.9994 0 + 20854 W1 6122 TIP3 H1 HT 0.417000 1.0080 0 + 20855 W1 6122 TIP3 H2 HT 0.417000 1.0080 0 + 20856 W1 6123 TIP3 OH2 OT -0.834000 15.9994 0 + 20857 W1 6123 TIP3 H1 HT 0.417000 1.0080 0 + 20858 W1 6123 TIP3 H2 HT 0.417000 1.0080 0 + 20859 W1 6124 TIP3 OH2 OT -0.834000 15.9994 0 + 20860 W1 6124 TIP3 H1 HT 0.417000 1.0080 0 + 20861 W1 6124 TIP3 H2 HT 0.417000 1.0080 0 + 20862 W1 6125 TIP3 OH2 OT -0.834000 15.9994 0 + 20863 W1 6125 TIP3 H1 HT 0.417000 1.0080 0 + 20864 W1 6125 TIP3 H2 HT 0.417000 1.0080 0 + 20865 W1 6126 TIP3 OH2 OT -0.834000 15.9994 0 + 20866 W1 6126 TIP3 H1 HT 0.417000 1.0080 0 + 20867 W1 6126 TIP3 H2 HT 0.417000 1.0080 0 + 20868 W1 6127 TIP3 OH2 OT -0.834000 15.9994 0 + 20869 W1 6127 TIP3 H1 HT 0.417000 1.0080 0 + 20870 W1 6127 TIP3 H2 HT 0.417000 1.0080 0 + 20871 W1 6128 TIP3 OH2 OT -0.834000 15.9994 0 + 20872 W1 6128 TIP3 H1 HT 0.417000 1.0080 0 + 20873 W1 6128 TIP3 H2 HT 0.417000 1.0080 0 + 20874 W1 6129 TIP3 OH2 OT -0.834000 15.9994 0 + 20875 W1 6129 TIP3 H1 HT 0.417000 1.0080 0 + 20876 W1 6129 TIP3 H2 HT 0.417000 1.0080 0 + 20877 W1 6130 TIP3 OH2 OT -0.834000 15.9994 0 + 20878 W1 6130 TIP3 H1 HT 0.417000 1.0080 0 + 20879 W1 6130 TIP3 H2 HT 0.417000 1.0080 0 + 20880 W1 6131 TIP3 OH2 OT -0.834000 15.9994 0 + 20881 W1 6131 TIP3 H1 HT 0.417000 1.0080 0 + 20882 W1 6131 TIP3 H2 HT 0.417000 1.0080 0 + 20883 W1 6132 TIP3 OH2 OT -0.834000 15.9994 0 + 20884 W1 6132 TIP3 H1 HT 0.417000 1.0080 0 + 20885 W1 6132 TIP3 H2 HT 0.417000 1.0080 0 + 20886 W1 6133 TIP3 OH2 OT -0.834000 15.9994 0 + 20887 W1 6133 TIP3 H1 HT 0.417000 1.0080 0 + 20888 W1 6133 TIP3 H2 HT 0.417000 1.0080 0 + 20889 W1 6134 TIP3 OH2 OT -0.834000 15.9994 0 + 20890 W1 6134 TIP3 H1 HT 0.417000 1.0080 0 + 20891 W1 6134 TIP3 H2 HT 0.417000 1.0080 0 + 20892 W1 6135 TIP3 OH2 OT -0.834000 15.9994 0 + 20893 W1 6135 TIP3 H1 HT 0.417000 1.0080 0 + 20894 W1 6135 TIP3 H2 HT 0.417000 1.0080 0 + 20895 W1 6136 TIP3 OH2 OT -0.834000 15.9994 0 + 20896 W1 6136 TIP3 H1 HT 0.417000 1.0080 0 + 20897 W1 6136 TIP3 H2 HT 0.417000 1.0080 0 + 20898 W1 6137 TIP3 OH2 OT -0.834000 15.9994 0 + 20899 W1 6137 TIP3 H1 HT 0.417000 1.0080 0 + 20900 W1 6137 TIP3 H2 HT 0.417000 1.0080 0 + 20901 W1 6138 TIP3 OH2 OT -0.834000 15.9994 0 + 20902 W1 6138 TIP3 H1 HT 0.417000 1.0080 0 + 20903 W1 6138 TIP3 H2 HT 0.417000 1.0080 0 + 20904 W1 6139 TIP3 OH2 OT -0.834000 15.9994 0 + 20905 W1 6139 TIP3 H1 HT 0.417000 1.0080 0 + 20906 W1 6139 TIP3 H2 HT 0.417000 1.0080 0 + 20907 W1 6140 TIP3 OH2 OT -0.834000 15.9994 0 + 20908 W1 6140 TIP3 H1 HT 0.417000 1.0080 0 + 20909 W1 6140 TIP3 H2 HT 0.417000 1.0080 0 + 20910 W1 6141 TIP3 OH2 OT -0.834000 15.9994 0 + 20911 W1 6141 TIP3 H1 HT 0.417000 1.0080 0 + 20912 W1 6141 TIP3 H2 HT 0.417000 1.0080 0 + 20913 W1 6142 TIP3 OH2 OT -0.834000 15.9994 0 + 20914 W1 6142 TIP3 H1 HT 0.417000 1.0080 0 + 20915 W1 6142 TIP3 H2 HT 0.417000 1.0080 0 + 20916 W1 6143 TIP3 OH2 OT -0.834000 15.9994 0 + 20917 W1 6143 TIP3 H1 HT 0.417000 1.0080 0 + 20918 W1 6143 TIP3 H2 HT 0.417000 1.0080 0 + 20919 W1 6144 TIP3 OH2 OT -0.834000 15.9994 0 + 20920 W1 6144 TIP3 H1 HT 0.417000 1.0080 0 + 20921 W1 6144 TIP3 H2 HT 0.417000 1.0080 0 + 20922 W1 6145 TIP3 OH2 OT -0.834000 15.9994 0 + 20923 W1 6145 TIP3 H1 HT 0.417000 1.0080 0 + 20924 W1 6145 TIP3 H2 HT 0.417000 1.0080 0 + 20925 W1 6146 TIP3 OH2 OT -0.834000 15.9994 0 + 20926 W1 6146 TIP3 H1 HT 0.417000 1.0080 0 + 20927 W1 6146 TIP3 H2 HT 0.417000 1.0080 0 + 20928 W1 6147 TIP3 OH2 OT -0.834000 15.9994 0 + 20929 W1 6147 TIP3 H1 HT 0.417000 1.0080 0 + 20930 W1 6147 TIP3 H2 HT 0.417000 1.0080 0 + 20931 W1 6148 TIP3 OH2 OT -0.834000 15.9994 0 + 20932 W1 6148 TIP3 H1 HT 0.417000 1.0080 0 + 20933 W1 6148 TIP3 H2 HT 0.417000 1.0080 0 + 20934 W1 6149 TIP3 OH2 OT -0.834000 15.9994 0 + 20935 W1 6149 TIP3 H1 HT 0.417000 1.0080 0 + 20936 W1 6149 TIP3 H2 HT 0.417000 1.0080 0 + 20937 W1 6150 TIP3 OH2 OT -0.834000 15.9994 0 + 20938 W1 6150 TIP3 H1 HT 0.417000 1.0080 0 + 20939 W1 6150 TIP3 H2 HT 0.417000 1.0080 0 + 20940 W1 6151 TIP3 OH2 OT -0.834000 15.9994 0 + 20941 W1 6151 TIP3 H1 HT 0.417000 1.0080 0 + 20942 W1 6151 TIP3 H2 HT 0.417000 1.0080 0 + 20943 W1 6152 TIP3 OH2 OT -0.834000 15.9994 0 + 20944 W1 6152 TIP3 H1 HT 0.417000 1.0080 0 + 20945 W1 6152 TIP3 H2 HT 0.417000 1.0080 0 + 20946 W1 6153 TIP3 OH2 OT -0.834000 15.9994 0 + 20947 W1 6153 TIP3 H1 HT 0.417000 1.0080 0 + 20948 W1 6153 TIP3 H2 HT 0.417000 1.0080 0 + 20949 W1 6154 TIP3 OH2 OT -0.834000 15.9994 0 + 20950 W1 6154 TIP3 H1 HT 0.417000 1.0080 0 + 20951 W1 6154 TIP3 H2 HT 0.417000 1.0080 0 + 20952 W1 6155 TIP3 OH2 OT -0.834000 15.9994 0 + 20953 W1 6155 TIP3 H1 HT 0.417000 1.0080 0 + 20954 W1 6155 TIP3 H2 HT 0.417000 1.0080 0 + 20955 W1 6156 TIP3 OH2 OT -0.834000 15.9994 0 + 20956 W1 6156 TIP3 H1 HT 0.417000 1.0080 0 + 20957 W1 6156 TIP3 H2 HT 0.417000 1.0080 0 + 20958 W1 6157 TIP3 OH2 OT -0.834000 15.9994 0 + 20959 W1 6157 TIP3 H1 HT 0.417000 1.0080 0 + 20960 W1 6157 TIP3 H2 HT 0.417000 1.0080 0 + 20961 W1 6158 TIP3 OH2 OT -0.834000 15.9994 0 + 20962 W1 6158 TIP3 H1 HT 0.417000 1.0080 0 + 20963 W1 6158 TIP3 H2 HT 0.417000 1.0080 0 + 20964 W1 6159 TIP3 OH2 OT -0.834000 15.9994 0 + 20965 W1 6159 TIP3 H1 HT 0.417000 1.0080 0 + 20966 W1 6159 TIP3 H2 HT 0.417000 1.0080 0 + 20967 W1 6160 TIP3 OH2 OT -0.834000 15.9994 0 + 20968 W1 6160 TIP3 H1 HT 0.417000 1.0080 0 + 20969 W1 6160 TIP3 H2 HT 0.417000 1.0080 0 + 20970 W1 6161 TIP3 OH2 OT -0.834000 15.9994 0 + 20971 W1 6161 TIP3 H1 HT 0.417000 1.0080 0 + 20972 W1 6161 TIP3 H2 HT 0.417000 1.0080 0 + 20973 W1 6162 TIP3 OH2 OT -0.834000 15.9994 0 + 20974 W1 6162 TIP3 H1 HT 0.417000 1.0080 0 + 20975 W1 6162 TIP3 H2 HT 0.417000 1.0080 0 + 20976 W1 6163 TIP3 OH2 OT -0.834000 15.9994 0 + 20977 W1 6163 TIP3 H1 HT 0.417000 1.0080 0 + 20978 W1 6163 TIP3 H2 HT 0.417000 1.0080 0 + 20979 W1 6164 TIP3 OH2 OT -0.834000 15.9994 0 + 20980 W1 6164 TIP3 H1 HT 0.417000 1.0080 0 + 20981 W1 6164 TIP3 H2 HT 0.417000 1.0080 0 + 20982 W1 6165 TIP3 OH2 OT -0.834000 15.9994 0 + 20983 W1 6165 TIP3 H1 HT 0.417000 1.0080 0 + 20984 W1 6165 TIP3 H2 HT 0.417000 1.0080 0 + 20985 W1 6166 TIP3 OH2 OT -0.834000 15.9994 0 + 20986 W1 6166 TIP3 H1 HT 0.417000 1.0080 0 + 20987 W1 6166 TIP3 H2 HT 0.417000 1.0080 0 + 20988 W1 6167 TIP3 OH2 OT -0.834000 15.9994 0 + 20989 W1 6167 TIP3 H1 HT 0.417000 1.0080 0 + 20990 W1 6167 TIP3 H2 HT 0.417000 1.0080 0 + 20991 W1 6168 TIP3 OH2 OT -0.834000 15.9994 0 + 20992 W1 6168 TIP3 H1 HT 0.417000 1.0080 0 + 20993 W1 6168 TIP3 H2 HT 0.417000 1.0080 0 + 20994 W1 6169 TIP3 OH2 OT -0.834000 15.9994 0 + 20995 W1 6169 TIP3 H1 HT 0.417000 1.0080 0 + 20996 W1 6169 TIP3 H2 HT 0.417000 1.0080 0 + 20997 W1 6170 TIP3 OH2 OT -0.834000 15.9994 0 + 20998 W1 6170 TIP3 H1 HT 0.417000 1.0080 0 + 20999 W1 6170 TIP3 H2 HT 0.417000 1.0080 0 + 21000 W1 6171 TIP3 OH2 OT -0.834000 15.9994 0 + 21001 W1 6171 TIP3 H1 HT 0.417000 1.0080 0 + 21002 W1 6171 TIP3 H2 HT 0.417000 1.0080 0 + 21003 W1 6172 TIP3 OH2 OT -0.834000 15.9994 0 + 21004 W1 6172 TIP3 H1 HT 0.417000 1.0080 0 + 21005 W1 6172 TIP3 H2 HT 0.417000 1.0080 0 + 21006 W1 6173 TIP3 OH2 OT -0.834000 15.9994 0 + 21007 W1 6173 TIP3 H1 HT 0.417000 1.0080 0 + 21008 W1 6173 TIP3 H2 HT 0.417000 1.0080 0 + 21009 W1 6174 TIP3 OH2 OT -0.834000 15.9994 0 + 21010 W1 6174 TIP3 H1 HT 0.417000 1.0080 0 + 21011 W1 6174 TIP3 H2 HT 0.417000 1.0080 0 + 21012 W1 6175 TIP3 OH2 OT -0.834000 15.9994 0 + 21013 W1 6175 TIP3 H1 HT 0.417000 1.0080 0 + 21014 W1 6175 TIP3 H2 HT 0.417000 1.0080 0 + 21015 W1 6176 TIP3 OH2 OT -0.834000 15.9994 0 + 21016 W1 6176 TIP3 H1 HT 0.417000 1.0080 0 + 21017 W1 6176 TIP3 H2 HT 0.417000 1.0080 0 + 21018 W1 6177 TIP3 OH2 OT -0.834000 15.9994 0 + 21019 W1 6177 TIP3 H1 HT 0.417000 1.0080 0 + 21020 W1 6177 TIP3 H2 HT 0.417000 1.0080 0 + 21021 W1 6178 TIP3 OH2 OT -0.834000 15.9994 0 + 21022 W1 6178 TIP3 H1 HT 0.417000 1.0080 0 + 21023 W1 6178 TIP3 H2 HT 0.417000 1.0080 0 + 21024 W1 6179 TIP3 OH2 OT -0.834000 15.9994 0 + 21025 W1 6179 TIP3 H1 HT 0.417000 1.0080 0 + 21026 W1 6179 TIP3 H2 HT 0.417000 1.0080 0 + 21027 W1 6180 TIP3 OH2 OT -0.834000 15.9994 0 + 21028 W1 6180 TIP3 H1 HT 0.417000 1.0080 0 + 21029 W1 6180 TIP3 H2 HT 0.417000 1.0080 0 + 21030 W1 6181 TIP3 OH2 OT -0.834000 15.9994 0 + 21031 W1 6181 TIP3 H1 HT 0.417000 1.0080 0 + 21032 W1 6181 TIP3 H2 HT 0.417000 1.0080 0 + 21033 W1 6182 TIP3 OH2 OT -0.834000 15.9994 0 + 21034 W1 6182 TIP3 H1 HT 0.417000 1.0080 0 + 21035 W1 6182 TIP3 H2 HT 0.417000 1.0080 0 + 21036 W1 6183 TIP3 OH2 OT -0.834000 15.9994 0 + 21037 W1 6183 TIP3 H1 HT 0.417000 1.0080 0 + 21038 W1 6183 TIP3 H2 HT 0.417000 1.0080 0 + 21039 W1 6184 TIP3 OH2 OT -0.834000 15.9994 0 + 21040 W1 6184 TIP3 H1 HT 0.417000 1.0080 0 + 21041 W1 6184 TIP3 H2 HT 0.417000 1.0080 0 + 21042 W1 6185 TIP3 OH2 OT -0.834000 15.9994 0 + 21043 W1 6185 TIP3 H1 HT 0.417000 1.0080 0 + 21044 W1 6185 TIP3 H2 HT 0.417000 1.0080 0 + 21045 W1 6186 TIP3 OH2 OT -0.834000 15.9994 0 + 21046 W1 6186 TIP3 H1 HT 0.417000 1.0080 0 + 21047 W1 6186 TIP3 H2 HT 0.417000 1.0080 0 + 21048 W1 6187 TIP3 OH2 OT -0.834000 15.9994 0 + 21049 W1 6187 TIP3 H1 HT 0.417000 1.0080 0 + 21050 W1 6187 TIP3 H2 HT 0.417000 1.0080 0 + 21051 W1 6188 TIP3 OH2 OT -0.834000 15.9994 0 + 21052 W1 6188 TIP3 H1 HT 0.417000 1.0080 0 + 21053 W1 6188 TIP3 H2 HT 0.417000 1.0080 0 + 21054 W1 6189 TIP3 OH2 OT -0.834000 15.9994 0 + 21055 W1 6189 TIP3 H1 HT 0.417000 1.0080 0 + 21056 W1 6189 TIP3 H2 HT 0.417000 1.0080 0 + 21057 W1 6190 TIP3 OH2 OT -0.834000 15.9994 0 + 21058 W1 6190 TIP3 H1 HT 0.417000 1.0080 0 + 21059 W1 6190 TIP3 H2 HT 0.417000 1.0080 0 + 21060 W1 6191 TIP3 OH2 OT -0.834000 15.9994 0 + 21061 W1 6191 TIP3 H1 HT 0.417000 1.0080 0 + 21062 W1 6191 TIP3 H2 HT 0.417000 1.0080 0 + 21063 W1 6192 TIP3 OH2 OT -0.834000 15.9994 0 + 21064 W1 6192 TIP3 H1 HT 0.417000 1.0080 0 + 21065 W1 6192 TIP3 H2 HT 0.417000 1.0080 0 + 21066 W1 6193 TIP3 OH2 OT -0.834000 15.9994 0 + 21067 W1 6193 TIP3 H1 HT 0.417000 1.0080 0 + 21068 W1 6193 TIP3 H2 HT 0.417000 1.0080 0 + 21069 W1 6194 TIP3 OH2 OT -0.834000 15.9994 0 + 21070 W1 6194 TIP3 H1 HT 0.417000 1.0080 0 + 21071 W1 6194 TIP3 H2 HT 0.417000 1.0080 0 + 21072 W1 6195 TIP3 OH2 OT -0.834000 15.9994 0 + 21073 W1 6195 TIP3 H1 HT 0.417000 1.0080 0 + 21074 W1 6195 TIP3 H2 HT 0.417000 1.0080 0 + 21075 W1 6196 TIP3 OH2 OT -0.834000 15.9994 0 + 21076 W1 6196 TIP3 H1 HT 0.417000 1.0080 0 + 21077 W1 6196 TIP3 H2 HT 0.417000 1.0080 0 + 21078 W1 6197 TIP3 OH2 OT -0.834000 15.9994 0 + 21079 W1 6197 TIP3 H1 HT 0.417000 1.0080 0 + 21080 W1 6197 TIP3 H2 HT 0.417000 1.0080 0 + 21081 W1 6198 TIP3 OH2 OT -0.834000 15.9994 0 + 21082 W1 6198 TIP3 H1 HT 0.417000 1.0080 0 + 21083 W1 6198 TIP3 H2 HT 0.417000 1.0080 0 + 21084 W1 6199 TIP3 OH2 OT -0.834000 15.9994 0 + 21085 W1 6199 TIP3 H1 HT 0.417000 1.0080 0 + 21086 W1 6199 TIP3 H2 HT 0.417000 1.0080 0 + 21087 W1 6200 TIP3 OH2 OT -0.834000 15.9994 0 + 21088 W1 6200 TIP3 H1 HT 0.417000 1.0080 0 + 21089 W1 6200 TIP3 H2 HT 0.417000 1.0080 0 + 21090 W1 6201 TIP3 OH2 OT -0.834000 15.9994 0 + 21091 W1 6201 TIP3 H1 HT 0.417000 1.0080 0 + 21092 W1 6201 TIP3 H2 HT 0.417000 1.0080 0 + 21093 W1 6202 TIP3 OH2 OT -0.834000 15.9994 0 + 21094 W1 6202 TIP3 H1 HT 0.417000 1.0080 0 + 21095 W1 6202 TIP3 H2 HT 0.417000 1.0080 0 + 21096 W1 6203 TIP3 OH2 OT -0.834000 15.9994 0 + 21097 W1 6203 TIP3 H1 HT 0.417000 1.0080 0 + 21098 W1 6203 TIP3 H2 HT 0.417000 1.0080 0 + 21099 W1 6204 TIP3 OH2 OT -0.834000 15.9994 0 + 21100 W1 6204 TIP3 H1 HT 0.417000 1.0080 0 + 21101 W1 6204 TIP3 H2 HT 0.417000 1.0080 0 + 21102 W1 6205 TIP3 OH2 OT -0.834000 15.9994 0 + 21103 W1 6205 TIP3 H1 HT 0.417000 1.0080 0 + 21104 W1 6205 TIP3 H2 HT 0.417000 1.0080 0 + 21105 W1 6206 TIP3 OH2 OT -0.834000 15.9994 0 + 21106 W1 6206 TIP3 H1 HT 0.417000 1.0080 0 + 21107 W1 6206 TIP3 H2 HT 0.417000 1.0080 0 + 21108 W1 6207 TIP3 OH2 OT -0.834000 15.9994 0 + 21109 W1 6207 TIP3 H1 HT 0.417000 1.0080 0 + 21110 W1 6207 TIP3 H2 HT 0.417000 1.0080 0 + 21111 W1 6208 TIP3 OH2 OT -0.834000 15.9994 0 + 21112 W1 6208 TIP3 H1 HT 0.417000 1.0080 0 + 21113 W1 6208 TIP3 H2 HT 0.417000 1.0080 0 + 21114 W1 6209 TIP3 OH2 OT -0.834000 15.9994 0 + 21115 W1 6209 TIP3 H1 HT 0.417000 1.0080 0 + 21116 W1 6209 TIP3 H2 HT 0.417000 1.0080 0 + 21117 W1 6210 TIP3 OH2 OT -0.834000 15.9994 0 + 21118 W1 6210 TIP3 H1 HT 0.417000 1.0080 0 + 21119 W1 6210 TIP3 H2 HT 0.417000 1.0080 0 + 21120 W1 6211 TIP3 OH2 OT -0.834000 15.9994 0 + 21121 W1 6211 TIP3 H1 HT 0.417000 1.0080 0 + 21122 W1 6211 TIP3 H2 HT 0.417000 1.0080 0 + 21123 W1 6212 TIP3 OH2 OT -0.834000 15.9994 0 + 21124 W1 6212 TIP3 H1 HT 0.417000 1.0080 0 + 21125 W1 6212 TIP3 H2 HT 0.417000 1.0080 0 + 21126 W1 6213 TIP3 OH2 OT -0.834000 15.9994 0 + 21127 W1 6213 TIP3 H1 HT 0.417000 1.0080 0 + 21128 W1 6213 TIP3 H2 HT 0.417000 1.0080 0 + 21129 W1 6214 TIP3 OH2 OT -0.834000 15.9994 0 + 21130 W1 6214 TIP3 H1 HT 0.417000 1.0080 0 + 21131 W1 6214 TIP3 H2 HT 0.417000 1.0080 0 + 21132 W1 6215 TIP3 OH2 OT -0.834000 15.9994 0 + 21133 W1 6215 TIP3 H1 HT 0.417000 1.0080 0 + 21134 W1 6215 TIP3 H2 HT 0.417000 1.0080 0 + 21135 W1 6216 TIP3 OH2 OT -0.834000 15.9994 0 + 21136 W1 6216 TIP3 H1 HT 0.417000 1.0080 0 + 21137 W1 6216 TIP3 H2 HT 0.417000 1.0080 0 + 21138 W1 6217 TIP3 OH2 OT -0.834000 15.9994 0 + 21139 W1 6217 TIP3 H1 HT 0.417000 1.0080 0 + 21140 W1 6217 TIP3 H2 HT 0.417000 1.0080 0 + 21141 W1 6218 TIP3 OH2 OT -0.834000 15.9994 0 + 21142 W1 6218 TIP3 H1 HT 0.417000 1.0080 0 + 21143 W1 6218 TIP3 H2 HT 0.417000 1.0080 0 + 21144 W1 6219 TIP3 OH2 OT -0.834000 15.9994 0 + 21145 W1 6219 TIP3 H1 HT 0.417000 1.0080 0 + 21146 W1 6219 TIP3 H2 HT 0.417000 1.0080 0 + 21147 W1 6220 TIP3 OH2 OT -0.834000 15.9994 0 + 21148 W1 6220 TIP3 H1 HT 0.417000 1.0080 0 + 21149 W1 6220 TIP3 H2 HT 0.417000 1.0080 0 + 21150 W1 6221 TIP3 OH2 OT -0.834000 15.9994 0 + 21151 W1 6221 TIP3 H1 HT 0.417000 1.0080 0 + 21152 W1 6221 TIP3 H2 HT 0.417000 1.0080 0 + 21153 W1 6222 TIP3 OH2 OT -0.834000 15.9994 0 + 21154 W1 6222 TIP3 H1 HT 0.417000 1.0080 0 + 21155 W1 6222 TIP3 H2 HT 0.417000 1.0080 0 + 21156 W1 6223 TIP3 OH2 OT -0.834000 15.9994 0 + 21157 W1 6223 TIP3 H1 HT 0.417000 1.0080 0 + 21158 W1 6223 TIP3 H2 HT 0.417000 1.0080 0 + 21159 W1 6224 TIP3 OH2 OT -0.834000 15.9994 0 + 21160 W1 6224 TIP3 H1 HT 0.417000 1.0080 0 + 21161 W1 6224 TIP3 H2 HT 0.417000 1.0080 0 + 21162 W1 6225 TIP3 OH2 OT -0.834000 15.9994 0 + 21163 W1 6225 TIP3 H1 HT 0.417000 1.0080 0 + 21164 W1 6225 TIP3 H2 HT 0.417000 1.0080 0 + 21165 W1 6226 TIP3 OH2 OT -0.834000 15.9994 0 + 21166 W1 6226 TIP3 H1 HT 0.417000 1.0080 0 + 21167 W1 6226 TIP3 H2 HT 0.417000 1.0080 0 + 21168 W1 6227 TIP3 OH2 OT -0.834000 15.9994 0 + 21169 W1 6227 TIP3 H1 HT 0.417000 1.0080 0 + 21170 W1 6227 TIP3 H2 HT 0.417000 1.0080 0 + 21171 W1 6228 TIP3 OH2 OT -0.834000 15.9994 0 + 21172 W1 6228 TIP3 H1 HT 0.417000 1.0080 0 + 21173 W1 6228 TIP3 H2 HT 0.417000 1.0080 0 + 21174 W1 6229 TIP3 OH2 OT -0.834000 15.9994 0 + 21175 W1 6229 TIP3 H1 HT 0.417000 1.0080 0 + 21176 W1 6229 TIP3 H2 HT 0.417000 1.0080 0 + 21177 W1 6230 TIP3 OH2 OT -0.834000 15.9994 0 + 21178 W1 6230 TIP3 H1 HT 0.417000 1.0080 0 + 21179 W1 6230 TIP3 H2 HT 0.417000 1.0080 0 + 21180 W1 6231 TIP3 OH2 OT -0.834000 15.9994 0 + 21181 W1 6231 TIP3 H1 HT 0.417000 1.0080 0 + 21182 W1 6231 TIP3 H2 HT 0.417000 1.0080 0 + 21183 W1 6232 TIP3 OH2 OT -0.834000 15.9994 0 + 21184 W1 6232 TIP3 H1 HT 0.417000 1.0080 0 + 21185 W1 6232 TIP3 H2 HT 0.417000 1.0080 0 + 21186 W1 6233 TIP3 OH2 OT -0.834000 15.9994 0 + 21187 W1 6233 TIP3 H1 HT 0.417000 1.0080 0 + 21188 W1 6233 TIP3 H2 HT 0.417000 1.0080 0 + 21189 W1 6234 TIP3 OH2 OT -0.834000 15.9994 0 + 21190 W1 6234 TIP3 H1 HT 0.417000 1.0080 0 + 21191 W1 6234 TIP3 H2 HT 0.417000 1.0080 0 + 21192 W1 6235 TIP3 OH2 OT -0.834000 15.9994 0 + 21193 W1 6235 TIP3 H1 HT 0.417000 1.0080 0 + 21194 W1 6235 TIP3 H2 HT 0.417000 1.0080 0 + 21195 W1 6236 TIP3 OH2 OT -0.834000 15.9994 0 + 21196 W1 6236 TIP3 H1 HT 0.417000 1.0080 0 + 21197 W1 6236 TIP3 H2 HT 0.417000 1.0080 0 + 21198 W1 6237 TIP3 OH2 OT -0.834000 15.9994 0 + 21199 W1 6237 TIP3 H1 HT 0.417000 1.0080 0 + 21200 W1 6237 TIP3 H2 HT 0.417000 1.0080 0 + 21201 W1 6238 TIP3 OH2 OT -0.834000 15.9994 0 + 21202 W1 6238 TIP3 H1 HT 0.417000 1.0080 0 + 21203 W1 6238 TIP3 H2 HT 0.417000 1.0080 0 + 21204 W1 6239 TIP3 OH2 OT -0.834000 15.9994 0 + 21205 W1 6239 TIP3 H1 HT 0.417000 1.0080 0 + 21206 W1 6239 TIP3 H2 HT 0.417000 1.0080 0 + 21207 W1 6240 TIP3 OH2 OT -0.834000 15.9994 0 + 21208 W1 6240 TIP3 H1 HT 0.417000 1.0080 0 + 21209 W1 6240 TIP3 H2 HT 0.417000 1.0080 0 + 21210 W1 6241 TIP3 OH2 OT -0.834000 15.9994 0 + 21211 W1 6241 TIP3 H1 HT 0.417000 1.0080 0 + 21212 W1 6241 TIP3 H2 HT 0.417000 1.0080 0 + 21213 W1 6242 TIP3 OH2 OT -0.834000 15.9994 0 + 21214 W1 6242 TIP3 H1 HT 0.417000 1.0080 0 + 21215 W1 6242 TIP3 H2 HT 0.417000 1.0080 0 + 21216 W1 6243 TIP3 OH2 OT -0.834000 15.9994 0 + 21217 W1 6243 TIP3 H1 HT 0.417000 1.0080 0 + 21218 W1 6243 TIP3 H2 HT 0.417000 1.0080 0 + 21219 W1 6244 TIP3 OH2 OT -0.834000 15.9994 0 + 21220 W1 6244 TIP3 H1 HT 0.417000 1.0080 0 + 21221 W1 6244 TIP3 H2 HT 0.417000 1.0080 0 + 21222 W1 6245 TIP3 OH2 OT -0.834000 15.9994 0 + 21223 W1 6245 TIP3 H1 HT 0.417000 1.0080 0 + 21224 W1 6245 TIP3 H2 HT 0.417000 1.0080 0 + 21225 W1 6246 TIP3 OH2 OT -0.834000 15.9994 0 + 21226 W1 6246 TIP3 H1 HT 0.417000 1.0080 0 + 21227 W1 6246 TIP3 H2 HT 0.417000 1.0080 0 + 21228 W1 6247 TIP3 OH2 OT -0.834000 15.9994 0 + 21229 W1 6247 TIP3 H1 HT 0.417000 1.0080 0 + 21230 W1 6247 TIP3 H2 HT 0.417000 1.0080 0 + 21231 W1 6248 TIP3 OH2 OT -0.834000 15.9994 0 + 21232 W1 6248 TIP3 H1 HT 0.417000 1.0080 0 + 21233 W1 6248 TIP3 H2 HT 0.417000 1.0080 0 + 21234 W1 6249 TIP3 OH2 OT -0.834000 15.9994 0 + 21235 W1 6249 TIP3 H1 HT 0.417000 1.0080 0 + 21236 W1 6249 TIP3 H2 HT 0.417000 1.0080 0 + 21237 W1 6250 TIP3 OH2 OT -0.834000 15.9994 0 + 21238 W1 6250 TIP3 H1 HT 0.417000 1.0080 0 + 21239 W1 6250 TIP3 H2 HT 0.417000 1.0080 0 + 21240 W1 6251 TIP3 OH2 OT -0.834000 15.9994 0 + 21241 W1 6251 TIP3 H1 HT 0.417000 1.0080 0 + 21242 W1 6251 TIP3 H2 HT 0.417000 1.0080 0 + 21243 W1 6252 TIP3 OH2 OT -0.834000 15.9994 0 + 21244 W1 6252 TIP3 H1 HT 0.417000 1.0080 0 + 21245 W1 6252 TIP3 H2 HT 0.417000 1.0080 0 + 21246 W1 6253 TIP3 OH2 OT -0.834000 15.9994 0 + 21247 W1 6253 TIP3 H1 HT 0.417000 1.0080 0 + 21248 W1 6253 TIP3 H2 HT 0.417000 1.0080 0 + 21249 W1 6254 TIP3 OH2 OT -0.834000 15.9994 0 + 21250 W1 6254 TIP3 H1 HT 0.417000 1.0080 0 + 21251 W1 6254 TIP3 H2 HT 0.417000 1.0080 0 + 21252 W1 6255 TIP3 OH2 OT -0.834000 15.9994 0 + 21253 W1 6255 TIP3 H1 HT 0.417000 1.0080 0 + 21254 W1 6255 TIP3 H2 HT 0.417000 1.0080 0 + 21255 W1 6256 TIP3 OH2 OT -0.834000 15.9994 0 + 21256 W1 6256 TIP3 H1 HT 0.417000 1.0080 0 + 21257 W1 6256 TIP3 H2 HT 0.417000 1.0080 0 + 21258 W1 6257 TIP3 OH2 OT -0.834000 15.9994 0 + 21259 W1 6257 TIP3 H1 HT 0.417000 1.0080 0 + 21260 W1 6257 TIP3 H2 HT 0.417000 1.0080 0 + 21261 W1 6258 TIP3 OH2 OT -0.834000 15.9994 0 + 21262 W1 6258 TIP3 H1 HT 0.417000 1.0080 0 + 21263 W1 6258 TIP3 H2 HT 0.417000 1.0080 0 + 21264 W1 6259 TIP3 OH2 OT -0.834000 15.9994 0 + 21265 W1 6259 TIP3 H1 HT 0.417000 1.0080 0 + 21266 W1 6259 TIP3 H2 HT 0.417000 1.0080 0 + 21267 W1 6260 TIP3 OH2 OT -0.834000 15.9994 0 + 21268 W1 6260 TIP3 H1 HT 0.417000 1.0080 0 + 21269 W1 6260 TIP3 H2 HT 0.417000 1.0080 0 + 21270 W1 6261 TIP3 OH2 OT -0.834000 15.9994 0 + 21271 W1 6261 TIP3 H1 HT 0.417000 1.0080 0 + 21272 W1 6261 TIP3 H2 HT 0.417000 1.0080 0 + 21273 W1 6262 TIP3 OH2 OT -0.834000 15.9994 0 + 21274 W1 6262 TIP3 H1 HT 0.417000 1.0080 0 + 21275 W1 6262 TIP3 H2 HT 0.417000 1.0080 0 + 21276 W1 6263 TIP3 OH2 OT -0.834000 15.9994 0 + 21277 W1 6263 TIP3 H1 HT 0.417000 1.0080 0 + 21278 W1 6263 TIP3 H2 HT 0.417000 1.0080 0 + 21279 W1 6264 TIP3 OH2 OT -0.834000 15.9994 0 + 21280 W1 6264 TIP3 H1 HT 0.417000 1.0080 0 + 21281 W1 6264 TIP3 H2 HT 0.417000 1.0080 0 + 21282 W1 6265 TIP3 OH2 OT -0.834000 15.9994 0 + 21283 W1 6265 TIP3 H1 HT 0.417000 1.0080 0 + 21284 W1 6265 TIP3 H2 HT 0.417000 1.0080 0 + 21285 W1 6266 TIP3 OH2 OT -0.834000 15.9994 0 + 21286 W1 6266 TIP3 H1 HT 0.417000 1.0080 0 + 21287 W1 6266 TIP3 H2 HT 0.417000 1.0080 0 + 21288 W1 6267 TIP3 OH2 OT -0.834000 15.9994 0 + 21289 W1 6267 TIP3 H1 HT 0.417000 1.0080 0 + 21290 W1 6267 TIP3 H2 HT 0.417000 1.0080 0 + 21291 W1 6268 TIP3 OH2 OT -0.834000 15.9994 0 + 21292 W1 6268 TIP3 H1 HT 0.417000 1.0080 0 + 21293 W1 6268 TIP3 H2 HT 0.417000 1.0080 0 + 21294 W1 6269 TIP3 OH2 OT -0.834000 15.9994 0 + 21295 W1 6269 TIP3 H1 HT 0.417000 1.0080 0 + 21296 W1 6269 TIP3 H2 HT 0.417000 1.0080 0 + 21297 W1 6270 TIP3 OH2 OT -0.834000 15.9994 0 + 21298 W1 6270 TIP3 H1 HT 0.417000 1.0080 0 + 21299 W1 6270 TIP3 H2 HT 0.417000 1.0080 0 + 21300 W1 6271 TIP3 OH2 OT -0.834000 15.9994 0 + 21301 W1 6271 TIP3 H1 HT 0.417000 1.0080 0 + 21302 W1 6271 TIP3 H2 HT 0.417000 1.0080 0 + 21303 W1 6272 TIP3 OH2 OT -0.834000 15.9994 0 + 21304 W1 6272 TIP3 H1 HT 0.417000 1.0080 0 + 21305 W1 6272 TIP3 H2 HT 0.417000 1.0080 0 + 21306 W1 6273 TIP3 OH2 OT -0.834000 15.9994 0 + 21307 W1 6273 TIP3 H1 HT 0.417000 1.0080 0 + 21308 W1 6273 TIP3 H2 HT 0.417000 1.0080 0 + 21309 W1 6274 TIP3 OH2 OT -0.834000 15.9994 0 + 21310 W1 6274 TIP3 H1 HT 0.417000 1.0080 0 + 21311 W1 6274 TIP3 H2 HT 0.417000 1.0080 0 + 21312 W1 6275 TIP3 OH2 OT -0.834000 15.9994 0 + 21313 W1 6275 TIP3 H1 HT 0.417000 1.0080 0 + 21314 W1 6275 TIP3 H2 HT 0.417000 1.0080 0 + 21315 W1 6276 TIP3 OH2 OT -0.834000 15.9994 0 + 21316 W1 6276 TIP3 H1 HT 0.417000 1.0080 0 + 21317 W1 6276 TIP3 H2 HT 0.417000 1.0080 0 + 21318 W1 6277 TIP3 OH2 OT -0.834000 15.9994 0 + 21319 W1 6277 TIP3 H1 HT 0.417000 1.0080 0 + 21320 W1 6277 TIP3 H2 HT 0.417000 1.0080 0 + 21321 W1 6278 TIP3 OH2 OT -0.834000 15.9994 0 + 21322 W1 6278 TIP3 H1 HT 0.417000 1.0080 0 + 21323 W1 6278 TIP3 H2 HT 0.417000 1.0080 0 + 21324 W1 6279 TIP3 OH2 OT -0.834000 15.9994 0 + 21325 W1 6279 TIP3 H1 HT 0.417000 1.0080 0 + 21326 W1 6279 TIP3 H2 HT 0.417000 1.0080 0 + 21327 W1 6280 TIP3 OH2 OT -0.834000 15.9994 0 + 21328 W1 6280 TIP3 H1 HT 0.417000 1.0080 0 + 21329 W1 6280 TIP3 H2 HT 0.417000 1.0080 0 + 21330 W1 6281 TIP3 OH2 OT -0.834000 15.9994 0 + 21331 W1 6281 TIP3 H1 HT 0.417000 1.0080 0 + 21332 W1 6281 TIP3 H2 HT 0.417000 1.0080 0 + 21333 W1 6282 TIP3 OH2 OT -0.834000 15.9994 0 + 21334 W1 6282 TIP3 H1 HT 0.417000 1.0080 0 + 21335 W1 6282 TIP3 H2 HT 0.417000 1.0080 0 + 21336 W1 6283 TIP3 OH2 OT -0.834000 15.9994 0 + 21337 W1 6283 TIP3 H1 HT 0.417000 1.0080 0 + 21338 W1 6283 TIP3 H2 HT 0.417000 1.0080 0 + 21339 W1 6284 TIP3 OH2 OT -0.834000 15.9994 0 + 21340 W1 6284 TIP3 H1 HT 0.417000 1.0080 0 + 21341 W1 6284 TIP3 H2 HT 0.417000 1.0080 0 + 21342 W1 6285 TIP3 OH2 OT -0.834000 15.9994 0 + 21343 W1 6285 TIP3 H1 HT 0.417000 1.0080 0 + 21344 W1 6285 TIP3 H2 HT 0.417000 1.0080 0 + 21345 W1 6286 TIP3 OH2 OT -0.834000 15.9994 0 + 21346 W1 6286 TIP3 H1 HT 0.417000 1.0080 0 + 21347 W1 6286 TIP3 H2 HT 0.417000 1.0080 0 + 21348 W1 6287 TIP3 OH2 OT -0.834000 15.9994 0 + 21349 W1 6287 TIP3 H1 HT 0.417000 1.0080 0 + 21350 W1 6287 TIP3 H2 HT 0.417000 1.0080 0 + 21351 W1 6288 TIP3 OH2 OT -0.834000 15.9994 0 + 21352 W1 6288 TIP3 H1 HT 0.417000 1.0080 0 + 21353 W1 6288 TIP3 H2 HT 0.417000 1.0080 0 + 21354 W1 6289 TIP3 OH2 OT -0.834000 15.9994 0 + 21355 W1 6289 TIP3 H1 HT 0.417000 1.0080 0 + 21356 W1 6289 TIP3 H2 HT 0.417000 1.0080 0 + 21357 W1 6290 TIP3 OH2 OT -0.834000 15.9994 0 + 21358 W1 6290 TIP3 H1 HT 0.417000 1.0080 0 + 21359 W1 6290 TIP3 H2 HT 0.417000 1.0080 0 + 21360 W1 6291 TIP3 OH2 OT -0.834000 15.9994 0 + 21361 W1 6291 TIP3 H1 HT 0.417000 1.0080 0 + 21362 W1 6291 TIP3 H2 HT 0.417000 1.0080 0 + 21363 W1 6292 TIP3 OH2 OT -0.834000 15.9994 0 + 21364 W1 6292 TIP3 H1 HT 0.417000 1.0080 0 + 21365 W1 6292 TIP3 H2 HT 0.417000 1.0080 0 + 21366 W1 6293 TIP3 OH2 OT -0.834000 15.9994 0 + 21367 W1 6293 TIP3 H1 HT 0.417000 1.0080 0 + 21368 W1 6293 TIP3 H2 HT 0.417000 1.0080 0 + 21369 W1 6294 TIP3 OH2 OT -0.834000 15.9994 0 + 21370 W1 6294 TIP3 H1 HT 0.417000 1.0080 0 + 21371 W1 6294 TIP3 H2 HT 0.417000 1.0080 0 + 21372 W1 6295 TIP3 OH2 OT -0.834000 15.9994 0 + 21373 W1 6295 TIP3 H1 HT 0.417000 1.0080 0 + 21374 W1 6295 TIP3 H2 HT 0.417000 1.0080 0 + 21375 W1 6296 TIP3 OH2 OT -0.834000 15.9994 0 + 21376 W1 6296 TIP3 H1 HT 0.417000 1.0080 0 + 21377 W1 6296 TIP3 H2 HT 0.417000 1.0080 0 + 21378 W1 6297 TIP3 OH2 OT -0.834000 15.9994 0 + 21379 W1 6297 TIP3 H1 HT 0.417000 1.0080 0 + 21380 W1 6297 TIP3 H2 HT 0.417000 1.0080 0 + 21381 W1 6298 TIP3 OH2 OT -0.834000 15.9994 0 + 21382 W1 6298 TIP3 H1 HT 0.417000 1.0080 0 + 21383 W1 6298 TIP3 H2 HT 0.417000 1.0080 0 + 21384 W1 6299 TIP3 OH2 OT -0.834000 15.9994 0 + 21385 W1 6299 TIP3 H1 HT 0.417000 1.0080 0 + 21386 W1 6299 TIP3 H2 HT 0.417000 1.0080 0 + 21387 W1 6300 TIP3 OH2 OT -0.834000 15.9994 0 + 21388 W1 6300 TIP3 H1 HT 0.417000 1.0080 0 + 21389 W1 6300 TIP3 H2 HT 0.417000 1.0080 0 + 21390 W1 6301 TIP3 OH2 OT -0.834000 15.9994 0 + 21391 W1 6301 TIP3 H1 HT 0.417000 1.0080 0 + 21392 W1 6301 TIP3 H2 HT 0.417000 1.0080 0 + 21393 W1 6302 TIP3 OH2 OT -0.834000 15.9994 0 + 21394 W1 6302 TIP3 H1 HT 0.417000 1.0080 0 + 21395 W1 6302 TIP3 H2 HT 0.417000 1.0080 0 + 21396 W1 6303 TIP3 OH2 OT -0.834000 15.9994 0 + 21397 W1 6303 TIP3 H1 HT 0.417000 1.0080 0 + 21398 W1 6303 TIP3 H2 HT 0.417000 1.0080 0 + 21399 W1 6304 TIP3 OH2 OT -0.834000 15.9994 0 + 21400 W1 6304 TIP3 H1 HT 0.417000 1.0080 0 + 21401 W1 6304 TIP3 H2 HT 0.417000 1.0080 0 + 21402 W1 6305 TIP3 OH2 OT -0.834000 15.9994 0 + 21403 W1 6305 TIP3 H1 HT 0.417000 1.0080 0 + 21404 W1 6305 TIP3 H2 HT 0.417000 1.0080 0 + 21405 W1 6306 TIP3 OH2 OT -0.834000 15.9994 0 + 21406 W1 6306 TIP3 H1 HT 0.417000 1.0080 0 + 21407 W1 6306 TIP3 H2 HT 0.417000 1.0080 0 + 21408 W1 6307 TIP3 OH2 OT -0.834000 15.9994 0 + 21409 W1 6307 TIP3 H1 HT 0.417000 1.0080 0 + 21410 W1 6307 TIP3 H2 HT 0.417000 1.0080 0 + 21411 W1 6308 TIP3 OH2 OT -0.834000 15.9994 0 + 21412 W1 6308 TIP3 H1 HT 0.417000 1.0080 0 + 21413 W1 6308 TIP3 H2 HT 0.417000 1.0080 0 + 21414 W1 6309 TIP3 OH2 OT -0.834000 15.9994 0 + 21415 W1 6309 TIP3 H1 HT 0.417000 1.0080 0 + 21416 W1 6309 TIP3 H2 HT 0.417000 1.0080 0 + 21417 W1 6310 TIP3 OH2 OT -0.834000 15.9994 0 + 21418 W1 6310 TIP3 H1 HT 0.417000 1.0080 0 + 21419 W1 6310 TIP3 H2 HT 0.417000 1.0080 0 + 21420 W1 6311 TIP3 OH2 OT -0.834000 15.9994 0 + 21421 W1 6311 TIP3 H1 HT 0.417000 1.0080 0 + 21422 W1 6311 TIP3 H2 HT 0.417000 1.0080 0 + 21423 W1 6312 TIP3 OH2 OT -0.834000 15.9994 0 + 21424 W1 6312 TIP3 H1 HT 0.417000 1.0080 0 + 21425 W1 6312 TIP3 H2 HT 0.417000 1.0080 0 + 21426 W1 6313 TIP3 OH2 OT -0.834000 15.9994 0 + 21427 W1 6313 TIP3 H1 HT 0.417000 1.0080 0 + 21428 W1 6313 TIP3 H2 HT 0.417000 1.0080 0 + 21429 W1 6314 TIP3 OH2 OT -0.834000 15.9994 0 + 21430 W1 6314 TIP3 H1 HT 0.417000 1.0080 0 + 21431 W1 6314 TIP3 H2 HT 0.417000 1.0080 0 + 21432 W1 6315 TIP3 OH2 OT -0.834000 15.9994 0 + 21433 W1 6315 TIP3 H1 HT 0.417000 1.0080 0 + 21434 W1 6315 TIP3 H2 HT 0.417000 1.0080 0 + 21435 W1 6316 TIP3 OH2 OT -0.834000 15.9994 0 + 21436 W1 6316 TIP3 H1 HT 0.417000 1.0080 0 + 21437 W1 6316 TIP3 H2 HT 0.417000 1.0080 0 + 21438 W1 6317 TIP3 OH2 OT -0.834000 15.9994 0 + 21439 W1 6317 TIP3 H1 HT 0.417000 1.0080 0 + 21440 W1 6317 TIP3 H2 HT 0.417000 1.0080 0 + 21441 W1 6318 TIP3 OH2 OT -0.834000 15.9994 0 + 21442 W1 6318 TIP3 H1 HT 0.417000 1.0080 0 + 21443 W1 6318 TIP3 H2 HT 0.417000 1.0080 0 + 21444 W1 6319 TIP3 OH2 OT -0.834000 15.9994 0 + 21445 W1 6319 TIP3 H1 HT 0.417000 1.0080 0 + 21446 W1 6319 TIP3 H2 HT 0.417000 1.0080 0 + 21447 W1 6320 TIP3 OH2 OT -0.834000 15.9994 0 + 21448 W1 6320 TIP3 H1 HT 0.417000 1.0080 0 + 21449 W1 6320 TIP3 H2 HT 0.417000 1.0080 0 + 21450 W1 6321 TIP3 OH2 OT -0.834000 15.9994 0 + 21451 W1 6321 TIP3 H1 HT 0.417000 1.0080 0 + 21452 W1 6321 TIP3 H2 HT 0.417000 1.0080 0 + 21453 W1 6322 TIP3 OH2 OT -0.834000 15.9994 0 + 21454 W1 6322 TIP3 H1 HT 0.417000 1.0080 0 + 21455 W1 6322 TIP3 H2 HT 0.417000 1.0080 0 + 21456 W1 6323 TIP3 OH2 OT -0.834000 15.9994 0 + 21457 W1 6323 TIP3 H1 HT 0.417000 1.0080 0 + 21458 W1 6323 TIP3 H2 HT 0.417000 1.0080 0 + 21459 W1 6324 TIP3 OH2 OT -0.834000 15.9994 0 + 21460 W1 6324 TIP3 H1 HT 0.417000 1.0080 0 + 21461 W1 6324 TIP3 H2 HT 0.417000 1.0080 0 + 21462 W1 6325 TIP3 OH2 OT -0.834000 15.9994 0 + 21463 W1 6325 TIP3 H1 HT 0.417000 1.0080 0 + 21464 W1 6325 TIP3 H2 HT 0.417000 1.0080 0 + 21465 W1 6326 TIP3 OH2 OT -0.834000 15.9994 0 + 21466 W1 6326 TIP3 H1 HT 0.417000 1.0080 0 + 21467 W1 6326 TIP3 H2 HT 0.417000 1.0080 0 + 21468 W1 6327 TIP3 OH2 OT -0.834000 15.9994 0 + 21469 W1 6327 TIP3 H1 HT 0.417000 1.0080 0 + 21470 W1 6327 TIP3 H2 HT 0.417000 1.0080 0 + 21471 W1 6328 TIP3 OH2 OT -0.834000 15.9994 0 + 21472 W1 6328 TIP3 H1 HT 0.417000 1.0080 0 + 21473 W1 6328 TIP3 H2 HT 0.417000 1.0080 0 + 21474 W1 6329 TIP3 OH2 OT -0.834000 15.9994 0 + 21475 W1 6329 TIP3 H1 HT 0.417000 1.0080 0 + 21476 W1 6329 TIP3 H2 HT 0.417000 1.0080 0 + 21477 W1 6330 TIP3 OH2 OT -0.834000 15.9994 0 + 21478 W1 6330 TIP3 H1 HT 0.417000 1.0080 0 + 21479 W1 6330 TIP3 H2 HT 0.417000 1.0080 0 + 21480 W1 6331 TIP3 OH2 OT -0.834000 15.9994 0 + 21481 W1 6331 TIP3 H1 HT 0.417000 1.0080 0 + 21482 W1 6331 TIP3 H2 HT 0.417000 1.0080 0 + 21483 W1 6332 TIP3 OH2 OT -0.834000 15.9994 0 + 21484 W1 6332 TIP3 H1 HT 0.417000 1.0080 0 + 21485 W1 6332 TIP3 H2 HT 0.417000 1.0080 0 + 21486 W1 6333 TIP3 OH2 OT -0.834000 15.9994 0 + 21487 W1 6333 TIP3 H1 HT 0.417000 1.0080 0 + 21488 W1 6333 TIP3 H2 HT 0.417000 1.0080 0 + 21489 W1 6334 TIP3 OH2 OT -0.834000 15.9994 0 + 21490 W1 6334 TIP3 H1 HT 0.417000 1.0080 0 + 21491 W1 6334 TIP3 H2 HT 0.417000 1.0080 0 + 21492 W1 6335 TIP3 OH2 OT -0.834000 15.9994 0 + 21493 W1 6335 TIP3 H1 HT 0.417000 1.0080 0 + 21494 W1 6335 TIP3 H2 HT 0.417000 1.0080 0 + 21495 W1 6336 TIP3 OH2 OT -0.834000 15.9994 0 + 21496 W1 6336 TIP3 H1 HT 0.417000 1.0080 0 + 21497 W1 6336 TIP3 H2 HT 0.417000 1.0080 0 + 21498 W1 6337 TIP3 OH2 OT -0.834000 15.9994 0 + 21499 W1 6337 TIP3 H1 HT 0.417000 1.0080 0 + 21500 W1 6337 TIP3 H2 HT 0.417000 1.0080 0 + 21501 W1 6338 TIP3 OH2 OT -0.834000 15.9994 0 + 21502 W1 6338 TIP3 H1 HT 0.417000 1.0080 0 + 21503 W1 6338 TIP3 H2 HT 0.417000 1.0080 0 + 21504 W1 6339 TIP3 OH2 OT -0.834000 15.9994 0 + 21505 W1 6339 TIP3 H1 HT 0.417000 1.0080 0 + 21506 W1 6339 TIP3 H2 HT 0.417000 1.0080 0 + 21507 W1 6340 TIP3 OH2 OT -0.834000 15.9994 0 + 21508 W1 6340 TIP3 H1 HT 0.417000 1.0080 0 + 21509 W1 6340 TIP3 H2 HT 0.417000 1.0080 0 + 21510 W1 6341 TIP3 OH2 OT -0.834000 15.9994 0 + 21511 W1 6341 TIP3 H1 HT 0.417000 1.0080 0 + 21512 W1 6341 TIP3 H2 HT 0.417000 1.0080 0 + 21513 W1 6342 TIP3 OH2 OT -0.834000 15.9994 0 + 21514 W1 6342 TIP3 H1 HT 0.417000 1.0080 0 + 21515 W1 6342 TIP3 H2 HT 0.417000 1.0080 0 + 21516 W1 6343 TIP3 OH2 OT -0.834000 15.9994 0 + 21517 W1 6343 TIP3 H1 HT 0.417000 1.0080 0 + 21518 W1 6343 TIP3 H2 HT 0.417000 1.0080 0 + 21519 W1 6344 TIP3 OH2 OT -0.834000 15.9994 0 + 21520 W1 6344 TIP3 H1 HT 0.417000 1.0080 0 + 21521 W1 6344 TIP3 H2 HT 0.417000 1.0080 0 + 21522 W1 6345 TIP3 OH2 OT -0.834000 15.9994 0 + 21523 W1 6345 TIP3 H1 HT 0.417000 1.0080 0 + 21524 W1 6345 TIP3 H2 HT 0.417000 1.0080 0 + 21525 W1 6346 TIP3 OH2 OT -0.834000 15.9994 0 + 21526 W1 6346 TIP3 H1 HT 0.417000 1.0080 0 + 21527 W1 6346 TIP3 H2 HT 0.417000 1.0080 0 + 21528 W1 6347 TIP3 OH2 OT -0.834000 15.9994 0 + 21529 W1 6347 TIP3 H1 HT 0.417000 1.0080 0 + 21530 W1 6347 TIP3 H2 HT 0.417000 1.0080 0 + 21531 W1 6348 TIP3 OH2 OT -0.834000 15.9994 0 + 21532 W1 6348 TIP3 H1 HT 0.417000 1.0080 0 + 21533 W1 6348 TIP3 H2 HT 0.417000 1.0080 0 + 21534 W1 6349 TIP3 OH2 OT -0.834000 15.9994 0 + 21535 W1 6349 TIP3 H1 HT 0.417000 1.0080 0 + 21536 W1 6349 TIP3 H2 HT 0.417000 1.0080 0 + 21537 W1 6350 TIP3 OH2 OT -0.834000 15.9994 0 + 21538 W1 6350 TIP3 H1 HT 0.417000 1.0080 0 + 21539 W1 6350 TIP3 H2 HT 0.417000 1.0080 0 + 21540 W1 6351 TIP3 OH2 OT -0.834000 15.9994 0 + 21541 W1 6351 TIP3 H1 HT 0.417000 1.0080 0 + 21542 W1 6351 TIP3 H2 HT 0.417000 1.0080 0 + 21543 W1 6352 TIP3 OH2 OT -0.834000 15.9994 0 + 21544 W1 6352 TIP3 H1 HT 0.417000 1.0080 0 + 21545 W1 6352 TIP3 H2 HT 0.417000 1.0080 0 + 21546 W1 6353 TIP3 OH2 OT -0.834000 15.9994 0 + 21547 W1 6353 TIP3 H1 HT 0.417000 1.0080 0 + 21548 W1 6353 TIP3 H2 HT 0.417000 1.0080 0 + 21549 W1 6354 TIP3 OH2 OT -0.834000 15.9994 0 + 21550 W1 6354 TIP3 H1 HT 0.417000 1.0080 0 + 21551 W1 6354 TIP3 H2 HT 0.417000 1.0080 0 + 21552 W1 6355 TIP3 OH2 OT -0.834000 15.9994 0 + 21553 W1 6355 TIP3 H1 HT 0.417000 1.0080 0 + 21554 W1 6355 TIP3 H2 HT 0.417000 1.0080 0 + 21555 W1 6356 TIP3 OH2 OT -0.834000 15.9994 0 + 21556 W1 6356 TIP3 H1 HT 0.417000 1.0080 0 + 21557 W1 6356 TIP3 H2 HT 0.417000 1.0080 0 + 21558 W1 6357 TIP3 OH2 OT -0.834000 15.9994 0 + 21559 W1 6357 TIP3 H1 HT 0.417000 1.0080 0 + 21560 W1 6357 TIP3 H2 HT 0.417000 1.0080 0 + 21561 W1 6358 TIP3 OH2 OT -0.834000 15.9994 0 + 21562 W1 6358 TIP3 H1 HT 0.417000 1.0080 0 + 21563 W1 6358 TIP3 H2 HT 0.417000 1.0080 0 + 21564 W1 6359 TIP3 OH2 OT -0.834000 15.9994 0 + 21565 W1 6359 TIP3 H1 HT 0.417000 1.0080 0 + 21566 W1 6359 TIP3 H2 HT 0.417000 1.0080 0 + 21567 W1 6360 TIP3 OH2 OT -0.834000 15.9994 0 + 21568 W1 6360 TIP3 H1 HT 0.417000 1.0080 0 + 21569 W1 6360 TIP3 H2 HT 0.417000 1.0080 0 + 21570 W1 6361 TIP3 OH2 OT -0.834000 15.9994 0 + 21571 W1 6361 TIP3 H1 HT 0.417000 1.0080 0 + 21572 W1 6361 TIP3 H2 HT 0.417000 1.0080 0 + 21573 W1 6362 TIP3 OH2 OT -0.834000 15.9994 0 + 21574 W1 6362 TIP3 H1 HT 0.417000 1.0080 0 + 21575 W1 6362 TIP3 H2 HT 0.417000 1.0080 0 + 21576 W1 6363 TIP3 OH2 OT -0.834000 15.9994 0 + 21577 W1 6363 TIP3 H1 HT 0.417000 1.0080 0 + 21578 W1 6363 TIP3 H2 HT 0.417000 1.0080 0 + 21579 W1 6364 TIP3 OH2 OT -0.834000 15.9994 0 + 21580 W1 6364 TIP3 H1 HT 0.417000 1.0080 0 + 21581 W1 6364 TIP3 H2 HT 0.417000 1.0080 0 + 21582 W1 6365 TIP3 OH2 OT -0.834000 15.9994 0 + 21583 W1 6365 TIP3 H1 HT 0.417000 1.0080 0 + 21584 W1 6365 TIP3 H2 HT 0.417000 1.0080 0 + 21585 W1 6366 TIP3 OH2 OT -0.834000 15.9994 0 + 21586 W1 6366 TIP3 H1 HT 0.417000 1.0080 0 + 21587 W1 6366 TIP3 H2 HT 0.417000 1.0080 0 + 21588 W1 6367 TIP3 OH2 OT -0.834000 15.9994 0 + 21589 W1 6367 TIP3 H1 HT 0.417000 1.0080 0 + 21590 W1 6367 TIP3 H2 HT 0.417000 1.0080 0 + 21591 W1 6368 TIP3 OH2 OT -0.834000 15.9994 0 + 21592 W1 6368 TIP3 H1 HT 0.417000 1.0080 0 + 21593 W1 6368 TIP3 H2 HT 0.417000 1.0080 0 + 21594 W1 6369 TIP3 OH2 OT -0.834000 15.9994 0 + 21595 W1 6369 TIP3 H1 HT 0.417000 1.0080 0 + 21596 W1 6369 TIP3 H2 HT 0.417000 1.0080 0 + 21597 W1 6370 TIP3 OH2 OT -0.834000 15.9994 0 + 21598 W1 6370 TIP3 H1 HT 0.417000 1.0080 0 + 21599 W1 6370 TIP3 H2 HT 0.417000 1.0080 0 + 21600 W1 6371 TIP3 OH2 OT -0.834000 15.9994 0 + 21601 W1 6371 TIP3 H1 HT 0.417000 1.0080 0 + 21602 W1 6371 TIP3 H2 HT 0.417000 1.0080 0 + 21603 W1 6372 TIP3 OH2 OT -0.834000 15.9994 0 + 21604 W1 6372 TIP3 H1 HT 0.417000 1.0080 0 + 21605 W1 6372 TIP3 H2 HT 0.417000 1.0080 0 + 21606 W1 6373 TIP3 OH2 OT -0.834000 15.9994 0 + 21607 W1 6373 TIP3 H1 HT 0.417000 1.0080 0 + 21608 W1 6373 TIP3 H2 HT 0.417000 1.0080 0 + 21609 W1 6374 TIP3 OH2 OT -0.834000 15.9994 0 + 21610 W1 6374 TIP3 H1 HT 0.417000 1.0080 0 + 21611 W1 6374 TIP3 H2 HT 0.417000 1.0080 0 + 21612 W1 6375 TIP3 OH2 OT -0.834000 15.9994 0 + 21613 W1 6375 TIP3 H1 HT 0.417000 1.0080 0 + 21614 W1 6375 TIP3 H2 HT 0.417000 1.0080 0 + 21615 W1 6376 TIP3 OH2 OT -0.834000 15.9994 0 + 21616 W1 6376 TIP3 H1 HT 0.417000 1.0080 0 + 21617 W1 6376 TIP3 H2 HT 0.417000 1.0080 0 + 21618 W1 6377 TIP3 OH2 OT -0.834000 15.9994 0 + 21619 W1 6377 TIP3 H1 HT 0.417000 1.0080 0 + 21620 W1 6377 TIP3 H2 HT 0.417000 1.0080 0 + 21621 W1 6378 TIP3 OH2 OT -0.834000 15.9994 0 + 21622 W1 6378 TIP3 H1 HT 0.417000 1.0080 0 + 21623 W1 6378 TIP3 H2 HT 0.417000 1.0080 0 + 21624 W1 6379 TIP3 OH2 OT -0.834000 15.9994 0 + 21625 W1 6379 TIP3 H1 HT 0.417000 1.0080 0 + 21626 W1 6379 TIP3 H2 HT 0.417000 1.0080 0 + 21627 W1 6380 TIP3 OH2 OT -0.834000 15.9994 0 + 21628 W1 6380 TIP3 H1 HT 0.417000 1.0080 0 + 21629 W1 6380 TIP3 H2 HT 0.417000 1.0080 0 + 21630 W1 6381 TIP3 OH2 OT -0.834000 15.9994 0 + 21631 W1 6381 TIP3 H1 HT 0.417000 1.0080 0 + 21632 W1 6381 TIP3 H2 HT 0.417000 1.0080 0 + 21633 W1 6382 TIP3 OH2 OT -0.834000 15.9994 0 + 21634 W1 6382 TIP3 H1 HT 0.417000 1.0080 0 + 21635 W1 6382 TIP3 H2 HT 0.417000 1.0080 0 + 21636 W1 6383 TIP3 OH2 OT -0.834000 15.9994 0 + 21637 W1 6383 TIP3 H1 HT 0.417000 1.0080 0 + 21638 W1 6383 TIP3 H2 HT 0.417000 1.0080 0 + 21639 W1 6384 TIP3 OH2 OT -0.834000 15.9994 0 + 21640 W1 6384 TIP3 H1 HT 0.417000 1.0080 0 + 21641 W1 6384 TIP3 H2 HT 0.417000 1.0080 0 + 21642 W1 6385 TIP3 OH2 OT -0.834000 15.9994 0 + 21643 W1 6385 TIP3 H1 HT 0.417000 1.0080 0 + 21644 W1 6385 TIP3 H2 HT 0.417000 1.0080 0 + 21645 W1 6386 TIP3 OH2 OT -0.834000 15.9994 0 + 21646 W1 6386 TIP3 H1 HT 0.417000 1.0080 0 + 21647 W1 6386 TIP3 H2 HT 0.417000 1.0080 0 + 21648 W1 6387 TIP3 OH2 OT -0.834000 15.9994 0 + 21649 W1 6387 TIP3 H1 HT 0.417000 1.0080 0 + 21650 W1 6387 TIP3 H2 HT 0.417000 1.0080 0 + 21651 W1 6388 TIP3 OH2 OT -0.834000 15.9994 0 + 21652 W1 6388 TIP3 H1 HT 0.417000 1.0080 0 + 21653 W1 6388 TIP3 H2 HT 0.417000 1.0080 0 + 21654 W1 6389 TIP3 OH2 OT -0.834000 15.9994 0 + 21655 W1 6389 TIP3 H1 HT 0.417000 1.0080 0 + 21656 W1 6389 TIP3 H2 HT 0.417000 1.0080 0 + 21657 W1 6390 TIP3 OH2 OT -0.834000 15.9994 0 + 21658 W1 6390 TIP3 H1 HT 0.417000 1.0080 0 + 21659 W1 6390 TIP3 H2 HT 0.417000 1.0080 0 + 21660 W1 6391 TIP3 OH2 OT -0.834000 15.9994 0 + 21661 W1 6391 TIP3 H1 HT 0.417000 1.0080 0 + 21662 W1 6391 TIP3 H2 HT 0.417000 1.0080 0 + 21663 W1 6392 TIP3 OH2 OT -0.834000 15.9994 0 + 21664 W1 6392 TIP3 H1 HT 0.417000 1.0080 0 + 21665 W1 6392 TIP3 H2 HT 0.417000 1.0080 0 + 21666 W1 6393 TIP3 OH2 OT -0.834000 15.9994 0 + 21667 W1 6393 TIP3 H1 HT 0.417000 1.0080 0 + 21668 W1 6393 TIP3 H2 HT 0.417000 1.0080 0 + 21669 W1 6394 TIP3 OH2 OT -0.834000 15.9994 0 + 21670 W1 6394 TIP3 H1 HT 0.417000 1.0080 0 + 21671 W1 6394 TIP3 H2 HT 0.417000 1.0080 0 + 21672 W1 6395 TIP3 OH2 OT -0.834000 15.9994 0 + 21673 W1 6395 TIP3 H1 HT 0.417000 1.0080 0 + 21674 W1 6395 TIP3 H2 HT 0.417000 1.0080 0 + 21675 W1 6396 TIP3 OH2 OT -0.834000 15.9994 0 + 21676 W1 6396 TIP3 H1 HT 0.417000 1.0080 0 + 21677 W1 6396 TIP3 H2 HT 0.417000 1.0080 0 + 21678 W1 6397 TIP3 OH2 OT -0.834000 15.9994 0 + 21679 W1 6397 TIP3 H1 HT 0.417000 1.0080 0 + 21680 W1 6397 TIP3 H2 HT 0.417000 1.0080 0 + 21681 W1 6398 TIP3 OH2 OT -0.834000 15.9994 0 + 21682 W1 6398 TIP3 H1 HT 0.417000 1.0080 0 + 21683 W1 6398 TIP3 H2 HT 0.417000 1.0080 0 + 21684 W1 6399 TIP3 OH2 OT -0.834000 15.9994 0 + 21685 W1 6399 TIP3 H1 HT 0.417000 1.0080 0 + 21686 W1 6399 TIP3 H2 HT 0.417000 1.0080 0 + 21687 W1 6400 TIP3 OH2 OT -0.834000 15.9994 0 + 21688 W1 6400 TIP3 H1 HT 0.417000 1.0080 0 + 21689 W1 6400 TIP3 H2 HT 0.417000 1.0080 0 + 21690 W1 6401 TIP3 OH2 OT -0.834000 15.9994 0 + 21691 W1 6401 TIP3 H1 HT 0.417000 1.0080 0 + 21692 W1 6401 TIP3 H2 HT 0.417000 1.0080 0 + 21693 W1 6402 TIP3 OH2 OT -0.834000 15.9994 0 + 21694 W1 6402 TIP3 H1 HT 0.417000 1.0080 0 + 21695 W1 6402 TIP3 H2 HT 0.417000 1.0080 0 + 21696 W1 6403 TIP3 OH2 OT -0.834000 15.9994 0 + 21697 W1 6403 TIP3 H1 HT 0.417000 1.0080 0 + 21698 W1 6403 TIP3 H2 HT 0.417000 1.0080 0 + 21699 W1 6404 TIP3 OH2 OT -0.834000 15.9994 0 + 21700 W1 6404 TIP3 H1 HT 0.417000 1.0080 0 + 21701 W1 6404 TIP3 H2 HT 0.417000 1.0080 0 + 21702 W1 6405 TIP3 OH2 OT -0.834000 15.9994 0 + 21703 W1 6405 TIP3 H1 HT 0.417000 1.0080 0 + 21704 W1 6405 TIP3 H2 HT 0.417000 1.0080 0 + 21705 W1 6406 TIP3 OH2 OT -0.834000 15.9994 0 + 21706 W1 6406 TIP3 H1 HT 0.417000 1.0080 0 + 21707 W1 6406 TIP3 H2 HT 0.417000 1.0080 0 + 21708 W1 6407 TIP3 OH2 OT -0.834000 15.9994 0 + 21709 W1 6407 TIP3 H1 HT 0.417000 1.0080 0 + 21710 W1 6407 TIP3 H2 HT 0.417000 1.0080 0 + 21711 W1 6408 TIP3 OH2 OT -0.834000 15.9994 0 + 21712 W1 6408 TIP3 H1 HT 0.417000 1.0080 0 + 21713 W1 6408 TIP3 H2 HT 0.417000 1.0080 0 + 21714 W1 6409 TIP3 OH2 OT -0.834000 15.9994 0 + 21715 W1 6409 TIP3 H1 HT 0.417000 1.0080 0 + 21716 W1 6409 TIP3 H2 HT 0.417000 1.0080 0 + 21717 W1 6410 TIP3 OH2 OT -0.834000 15.9994 0 + 21718 W1 6410 TIP3 H1 HT 0.417000 1.0080 0 + 21719 W1 6410 TIP3 H2 HT 0.417000 1.0080 0 + 21720 W1 6411 TIP3 OH2 OT -0.834000 15.9994 0 + 21721 W1 6411 TIP3 H1 HT 0.417000 1.0080 0 + 21722 W1 6411 TIP3 H2 HT 0.417000 1.0080 0 + 21723 W1 6412 TIP3 OH2 OT -0.834000 15.9994 0 + 21724 W1 6412 TIP3 H1 HT 0.417000 1.0080 0 + 21725 W1 6412 TIP3 H2 HT 0.417000 1.0080 0 + 21726 W1 6413 TIP3 OH2 OT -0.834000 15.9994 0 + 21727 W1 6413 TIP3 H1 HT 0.417000 1.0080 0 + 21728 W1 6413 TIP3 H2 HT 0.417000 1.0080 0 + 21729 W1 6414 TIP3 OH2 OT -0.834000 15.9994 0 + 21730 W1 6414 TIP3 H1 HT 0.417000 1.0080 0 + 21731 W1 6414 TIP3 H2 HT 0.417000 1.0080 0 + 21732 W1 6415 TIP3 OH2 OT -0.834000 15.9994 0 + 21733 W1 6415 TIP3 H1 HT 0.417000 1.0080 0 + 21734 W1 6415 TIP3 H2 HT 0.417000 1.0080 0 + 21735 W1 6416 TIP3 OH2 OT -0.834000 15.9994 0 + 21736 W1 6416 TIP3 H1 HT 0.417000 1.0080 0 + 21737 W1 6416 TIP3 H2 HT 0.417000 1.0080 0 + 21738 W1 6417 TIP3 OH2 OT -0.834000 15.9994 0 + 21739 W1 6417 TIP3 H1 HT 0.417000 1.0080 0 + 21740 W1 6417 TIP3 H2 HT 0.417000 1.0080 0 + 21741 W1 6418 TIP3 OH2 OT -0.834000 15.9994 0 + 21742 W1 6418 TIP3 H1 HT 0.417000 1.0080 0 + 21743 W1 6418 TIP3 H2 HT 0.417000 1.0080 0 + 21744 W1 6419 TIP3 OH2 OT -0.834000 15.9994 0 + 21745 W1 6419 TIP3 H1 HT 0.417000 1.0080 0 + 21746 W1 6419 TIP3 H2 HT 0.417000 1.0080 0 + 21747 W1 6420 TIP3 OH2 OT -0.834000 15.9994 0 + 21748 W1 6420 TIP3 H1 HT 0.417000 1.0080 0 + 21749 W1 6420 TIP3 H2 HT 0.417000 1.0080 0 + 21750 W1 6421 TIP3 OH2 OT -0.834000 15.9994 0 + 21751 W1 6421 TIP3 H1 HT 0.417000 1.0080 0 + 21752 W1 6421 TIP3 H2 HT 0.417000 1.0080 0 + 21753 W1 6422 TIP3 OH2 OT -0.834000 15.9994 0 + 21754 W1 6422 TIP3 H1 HT 0.417000 1.0080 0 + 21755 W1 6422 TIP3 H2 HT 0.417000 1.0080 0 + 21756 W1 6423 TIP3 OH2 OT -0.834000 15.9994 0 + 21757 W1 6423 TIP3 H1 HT 0.417000 1.0080 0 + 21758 W1 6423 TIP3 H2 HT 0.417000 1.0080 0 + 21759 W1 6424 TIP3 OH2 OT -0.834000 15.9994 0 + 21760 W1 6424 TIP3 H1 HT 0.417000 1.0080 0 + 21761 W1 6424 TIP3 H2 HT 0.417000 1.0080 0 + 21762 W1 6425 TIP3 OH2 OT -0.834000 15.9994 0 + 21763 W1 6425 TIP3 H1 HT 0.417000 1.0080 0 + 21764 W1 6425 TIP3 H2 HT 0.417000 1.0080 0 + 21765 W1 6426 TIP3 OH2 OT -0.834000 15.9994 0 + 21766 W1 6426 TIP3 H1 HT 0.417000 1.0080 0 + 21767 W1 6426 TIP3 H2 HT 0.417000 1.0080 0 + 21768 W1 6427 TIP3 OH2 OT -0.834000 15.9994 0 + 21769 W1 6427 TIP3 H1 HT 0.417000 1.0080 0 + 21770 W1 6427 TIP3 H2 HT 0.417000 1.0080 0 + 21771 W1 6428 TIP3 OH2 OT -0.834000 15.9994 0 + 21772 W1 6428 TIP3 H1 HT 0.417000 1.0080 0 + 21773 W1 6428 TIP3 H2 HT 0.417000 1.0080 0 + 21774 W1 6429 TIP3 OH2 OT -0.834000 15.9994 0 + 21775 W1 6429 TIP3 H1 HT 0.417000 1.0080 0 + 21776 W1 6429 TIP3 H2 HT 0.417000 1.0080 0 + 21777 W1 6430 TIP3 OH2 OT -0.834000 15.9994 0 + 21778 W1 6430 TIP3 H1 HT 0.417000 1.0080 0 + 21779 W1 6430 TIP3 H2 HT 0.417000 1.0080 0 + 21780 W1 6431 TIP3 OH2 OT -0.834000 15.9994 0 + 21781 W1 6431 TIP3 H1 HT 0.417000 1.0080 0 + 21782 W1 6431 TIP3 H2 HT 0.417000 1.0080 0 + 21783 W1 6432 TIP3 OH2 OT -0.834000 15.9994 0 + 21784 W1 6432 TIP3 H1 HT 0.417000 1.0080 0 + 21785 W1 6432 TIP3 H2 HT 0.417000 1.0080 0 + 21786 W1 6433 TIP3 OH2 OT -0.834000 15.9994 0 + 21787 W1 6433 TIP3 H1 HT 0.417000 1.0080 0 + 21788 W1 6433 TIP3 H2 HT 0.417000 1.0080 0 + 21789 W1 6434 TIP3 OH2 OT -0.834000 15.9994 0 + 21790 W1 6434 TIP3 H1 HT 0.417000 1.0080 0 + 21791 W1 6434 TIP3 H2 HT 0.417000 1.0080 0 + 21792 W1 6435 TIP3 OH2 OT -0.834000 15.9994 0 + 21793 W1 6435 TIP3 H1 HT 0.417000 1.0080 0 + 21794 W1 6435 TIP3 H2 HT 0.417000 1.0080 0 + 21795 W1 6436 TIP3 OH2 OT -0.834000 15.9994 0 + 21796 W1 6436 TIP3 H1 HT 0.417000 1.0080 0 + 21797 W1 6436 TIP3 H2 HT 0.417000 1.0080 0 + 21798 W1 6437 TIP3 OH2 OT -0.834000 15.9994 0 + 21799 W1 6437 TIP3 H1 HT 0.417000 1.0080 0 + 21800 W1 6437 TIP3 H2 HT 0.417000 1.0080 0 + 21801 W1 6438 TIP3 OH2 OT -0.834000 15.9994 0 + 21802 W1 6438 TIP3 H1 HT 0.417000 1.0080 0 + 21803 W1 6438 TIP3 H2 HT 0.417000 1.0080 0 + 21804 W1 6439 TIP3 OH2 OT -0.834000 15.9994 0 + 21805 W1 6439 TIP3 H1 HT 0.417000 1.0080 0 + 21806 W1 6439 TIP3 H2 HT 0.417000 1.0080 0 + 21807 W1 6440 TIP3 OH2 OT -0.834000 15.9994 0 + 21808 W1 6440 TIP3 H1 HT 0.417000 1.0080 0 + 21809 W1 6440 TIP3 H2 HT 0.417000 1.0080 0 + 21810 W1 6441 TIP3 OH2 OT -0.834000 15.9994 0 + 21811 W1 6441 TIP3 H1 HT 0.417000 1.0080 0 + 21812 W1 6441 TIP3 H2 HT 0.417000 1.0080 0 + 21813 W1 6442 TIP3 OH2 OT -0.834000 15.9994 0 + 21814 W1 6442 TIP3 H1 HT 0.417000 1.0080 0 + 21815 W1 6442 TIP3 H2 HT 0.417000 1.0080 0 + 21816 W1 6443 TIP3 OH2 OT -0.834000 15.9994 0 + 21817 W1 6443 TIP3 H1 HT 0.417000 1.0080 0 + 21818 W1 6443 TIP3 H2 HT 0.417000 1.0080 0 + 21819 W1 6444 TIP3 OH2 OT -0.834000 15.9994 0 + 21820 W1 6444 TIP3 H1 HT 0.417000 1.0080 0 + 21821 W1 6444 TIP3 H2 HT 0.417000 1.0080 0 + 21822 W1 6445 TIP3 OH2 OT -0.834000 15.9994 0 + 21823 W1 6445 TIP3 H1 HT 0.417000 1.0080 0 + 21824 W1 6445 TIP3 H2 HT 0.417000 1.0080 0 + 21825 W1 6446 TIP3 OH2 OT -0.834000 15.9994 0 + 21826 W1 6446 TIP3 H1 HT 0.417000 1.0080 0 + 21827 W1 6446 TIP3 H2 HT 0.417000 1.0080 0 + 21828 W1 6447 TIP3 OH2 OT -0.834000 15.9994 0 + 21829 W1 6447 TIP3 H1 HT 0.417000 1.0080 0 + 21830 W1 6447 TIP3 H2 HT 0.417000 1.0080 0 + 21831 W1 6448 TIP3 OH2 OT -0.834000 15.9994 0 + 21832 W1 6448 TIP3 H1 HT 0.417000 1.0080 0 + 21833 W1 6448 TIP3 H2 HT 0.417000 1.0080 0 + 21834 W1 6449 TIP3 OH2 OT -0.834000 15.9994 0 + 21835 W1 6449 TIP3 H1 HT 0.417000 1.0080 0 + 21836 W1 6449 TIP3 H2 HT 0.417000 1.0080 0 + 21837 W1 6450 TIP3 OH2 OT -0.834000 15.9994 0 + 21838 W1 6450 TIP3 H1 HT 0.417000 1.0080 0 + 21839 W1 6450 TIP3 H2 HT 0.417000 1.0080 0 + 21840 W1 6451 TIP3 OH2 OT -0.834000 15.9994 0 + 21841 W1 6451 TIP3 H1 HT 0.417000 1.0080 0 + 21842 W1 6451 TIP3 H2 HT 0.417000 1.0080 0 + 21843 W1 6452 TIP3 OH2 OT -0.834000 15.9994 0 + 21844 W1 6452 TIP3 H1 HT 0.417000 1.0080 0 + 21845 W1 6452 TIP3 H2 HT 0.417000 1.0080 0 + 21846 W1 6453 TIP3 OH2 OT -0.834000 15.9994 0 + 21847 W1 6453 TIP3 H1 HT 0.417000 1.0080 0 + 21848 W1 6453 TIP3 H2 HT 0.417000 1.0080 0 + 21849 W1 6454 TIP3 OH2 OT -0.834000 15.9994 0 + 21850 W1 6454 TIP3 H1 HT 0.417000 1.0080 0 + 21851 W1 6454 TIP3 H2 HT 0.417000 1.0080 0 + 21852 W1 6455 TIP3 OH2 OT -0.834000 15.9994 0 + 21853 W1 6455 TIP3 H1 HT 0.417000 1.0080 0 + 21854 W1 6455 TIP3 H2 HT 0.417000 1.0080 0 + 21855 W1 6456 TIP3 OH2 OT -0.834000 15.9994 0 + 21856 W1 6456 TIP3 H1 HT 0.417000 1.0080 0 + 21857 W1 6456 TIP3 H2 HT 0.417000 1.0080 0 + 21858 W1 6457 TIP3 OH2 OT -0.834000 15.9994 0 + 21859 W1 6457 TIP3 H1 HT 0.417000 1.0080 0 + 21860 W1 6457 TIP3 H2 HT 0.417000 1.0080 0 + 21861 W1 6458 TIP3 OH2 OT -0.834000 15.9994 0 + 21862 W1 6458 TIP3 H1 HT 0.417000 1.0080 0 + 21863 W1 6458 TIP3 H2 HT 0.417000 1.0080 0 + 21864 W1 6459 TIP3 OH2 OT -0.834000 15.9994 0 + 21865 W1 6459 TIP3 H1 HT 0.417000 1.0080 0 + 21866 W1 6459 TIP3 H2 HT 0.417000 1.0080 0 + 21867 W1 6460 TIP3 OH2 OT -0.834000 15.9994 0 + 21868 W1 6460 TIP3 H1 HT 0.417000 1.0080 0 + 21869 W1 6460 TIP3 H2 HT 0.417000 1.0080 0 + 21870 W1 6461 TIP3 OH2 OT -0.834000 15.9994 0 + 21871 W1 6461 TIP3 H1 HT 0.417000 1.0080 0 + 21872 W1 6461 TIP3 H2 HT 0.417000 1.0080 0 + 21873 W1 6462 TIP3 OH2 OT -0.834000 15.9994 0 + 21874 W1 6462 TIP3 H1 HT 0.417000 1.0080 0 + 21875 W1 6462 TIP3 H2 HT 0.417000 1.0080 0 + 21876 W1 6463 TIP3 OH2 OT -0.834000 15.9994 0 + 21877 W1 6463 TIP3 H1 HT 0.417000 1.0080 0 + 21878 W1 6463 TIP3 H2 HT 0.417000 1.0080 0 + 21879 W1 6464 TIP3 OH2 OT -0.834000 15.9994 0 + 21880 W1 6464 TIP3 H1 HT 0.417000 1.0080 0 + 21881 W1 6464 TIP3 H2 HT 0.417000 1.0080 0 + 21882 W1 6465 TIP3 OH2 OT -0.834000 15.9994 0 + 21883 W1 6465 TIP3 H1 HT 0.417000 1.0080 0 + 21884 W1 6465 TIP3 H2 HT 0.417000 1.0080 0 + 21885 W1 6466 TIP3 OH2 OT -0.834000 15.9994 0 + 21886 W1 6466 TIP3 H1 HT 0.417000 1.0080 0 + 21887 W1 6466 TIP3 H2 HT 0.417000 1.0080 0 + 21888 W1 6467 TIP3 OH2 OT -0.834000 15.9994 0 + 21889 W1 6467 TIP3 H1 HT 0.417000 1.0080 0 + 21890 W1 6467 TIP3 H2 HT 0.417000 1.0080 0 + 21891 W1 6468 TIP3 OH2 OT -0.834000 15.9994 0 + 21892 W1 6468 TIP3 H1 HT 0.417000 1.0080 0 + 21893 W1 6468 TIP3 H2 HT 0.417000 1.0080 0 + 21894 W1 6469 TIP3 OH2 OT -0.834000 15.9994 0 + 21895 W1 6469 TIP3 H1 HT 0.417000 1.0080 0 + 21896 W1 6469 TIP3 H2 HT 0.417000 1.0080 0 + 21897 W1 6470 TIP3 OH2 OT -0.834000 15.9994 0 + 21898 W1 6470 TIP3 H1 HT 0.417000 1.0080 0 + 21899 W1 6470 TIP3 H2 HT 0.417000 1.0080 0 + 21900 W1 6471 TIP3 OH2 OT -0.834000 15.9994 0 + 21901 W1 6471 TIP3 H1 HT 0.417000 1.0080 0 + 21902 W1 6471 TIP3 H2 HT 0.417000 1.0080 0 + 21903 W1 6472 TIP3 OH2 OT -0.834000 15.9994 0 + 21904 W1 6472 TIP3 H1 HT 0.417000 1.0080 0 + 21905 W1 6472 TIP3 H2 HT 0.417000 1.0080 0 + 21906 W1 6473 TIP3 OH2 OT -0.834000 15.9994 0 + 21907 W1 6473 TIP3 H1 HT 0.417000 1.0080 0 + 21908 W1 6473 TIP3 H2 HT 0.417000 1.0080 0 + 21909 W1 6474 TIP3 OH2 OT -0.834000 15.9994 0 + 21910 W1 6474 TIP3 H1 HT 0.417000 1.0080 0 + 21911 W1 6474 TIP3 H2 HT 0.417000 1.0080 0 + 21912 W1 6475 TIP3 OH2 OT -0.834000 15.9994 0 + 21913 W1 6475 TIP3 H1 HT 0.417000 1.0080 0 + 21914 W1 6475 TIP3 H2 HT 0.417000 1.0080 0 + 21915 W1 6476 TIP3 OH2 OT -0.834000 15.9994 0 + 21916 W1 6476 TIP3 H1 HT 0.417000 1.0080 0 + 21917 W1 6476 TIP3 H2 HT 0.417000 1.0080 0 + 21918 W1 6477 TIP3 OH2 OT -0.834000 15.9994 0 + 21919 W1 6477 TIP3 H1 HT 0.417000 1.0080 0 + 21920 W1 6477 TIP3 H2 HT 0.417000 1.0080 0 + 21921 W1 6478 TIP3 OH2 OT -0.834000 15.9994 0 + 21922 W1 6478 TIP3 H1 HT 0.417000 1.0080 0 + 21923 W1 6478 TIP3 H2 HT 0.417000 1.0080 0 + 21924 W1 6479 TIP3 OH2 OT -0.834000 15.9994 0 + 21925 W1 6479 TIP3 H1 HT 0.417000 1.0080 0 + 21926 W1 6479 TIP3 H2 HT 0.417000 1.0080 0 + 21927 W1 6480 TIP3 OH2 OT -0.834000 15.9994 0 + 21928 W1 6480 TIP3 H1 HT 0.417000 1.0080 0 + 21929 W1 6480 TIP3 H2 HT 0.417000 1.0080 0 + 21930 W1 6481 TIP3 OH2 OT -0.834000 15.9994 0 + 21931 W1 6481 TIP3 H1 HT 0.417000 1.0080 0 + 21932 W1 6481 TIP3 H2 HT 0.417000 1.0080 0 + 21933 W1 6482 TIP3 OH2 OT -0.834000 15.9994 0 + 21934 W1 6482 TIP3 H1 HT 0.417000 1.0080 0 + 21935 W1 6482 TIP3 H2 HT 0.417000 1.0080 0 + 21936 W1 6483 TIP3 OH2 OT -0.834000 15.9994 0 + 21937 W1 6483 TIP3 H1 HT 0.417000 1.0080 0 + 21938 W1 6483 TIP3 H2 HT 0.417000 1.0080 0 + 21939 W1 6484 TIP3 OH2 OT -0.834000 15.9994 0 + 21940 W1 6484 TIP3 H1 HT 0.417000 1.0080 0 + 21941 W1 6484 TIP3 H2 HT 0.417000 1.0080 0 + 21942 W1 6485 TIP3 OH2 OT -0.834000 15.9994 0 + 21943 W1 6485 TIP3 H1 HT 0.417000 1.0080 0 + 21944 W1 6485 TIP3 H2 HT 0.417000 1.0080 0 + 21945 W1 6486 TIP3 OH2 OT -0.834000 15.9994 0 + 21946 W1 6486 TIP3 H1 HT 0.417000 1.0080 0 + 21947 W1 6486 TIP3 H2 HT 0.417000 1.0080 0 + 21948 W1 6487 TIP3 OH2 OT -0.834000 15.9994 0 + 21949 W1 6487 TIP3 H1 HT 0.417000 1.0080 0 + 21950 W1 6487 TIP3 H2 HT 0.417000 1.0080 0 + 21951 W1 6488 TIP3 OH2 OT -0.834000 15.9994 0 + 21952 W1 6488 TIP3 H1 HT 0.417000 1.0080 0 + 21953 W1 6488 TIP3 H2 HT 0.417000 1.0080 0 + 21954 W1 6489 TIP3 OH2 OT -0.834000 15.9994 0 + 21955 W1 6489 TIP3 H1 HT 0.417000 1.0080 0 + 21956 W1 6489 TIP3 H2 HT 0.417000 1.0080 0 + 21957 W1 6490 TIP3 OH2 OT -0.834000 15.9994 0 + 21958 W1 6490 TIP3 H1 HT 0.417000 1.0080 0 + 21959 W1 6490 TIP3 H2 HT 0.417000 1.0080 0 + 21960 W1 6491 TIP3 OH2 OT -0.834000 15.9994 0 + 21961 W1 6491 TIP3 H1 HT 0.417000 1.0080 0 + 21962 W1 6491 TIP3 H2 HT 0.417000 1.0080 0 + 21963 W1 6492 TIP3 OH2 OT -0.834000 15.9994 0 + 21964 W1 6492 TIP3 H1 HT 0.417000 1.0080 0 + 21965 W1 6492 TIP3 H2 HT 0.417000 1.0080 0 + 21966 W1 6493 TIP3 OH2 OT -0.834000 15.9994 0 + 21967 W1 6493 TIP3 H1 HT 0.417000 1.0080 0 + 21968 W1 6493 TIP3 H2 HT 0.417000 1.0080 0 + 21969 W1 6494 TIP3 OH2 OT -0.834000 15.9994 0 + 21970 W1 6494 TIP3 H1 HT 0.417000 1.0080 0 + 21971 W1 6494 TIP3 H2 HT 0.417000 1.0080 0 + 21972 W1 6495 TIP3 OH2 OT -0.834000 15.9994 0 + 21973 W1 6495 TIP3 H1 HT 0.417000 1.0080 0 + 21974 W1 6495 TIP3 H2 HT 0.417000 1.0080 0 + 21975 W1 6496 TIP3 OH2 OT -0.834000 15.9994 0 + 21976 W1 6496 TIP3 H1 HT 0.417000 1.0080 0 + 21977 W1 6496 TIP3 H2 HT 0.417000 1.0080 0 + 21978 W1 6497 TIP3 OH2 OT -0.834000 15.9994 0 + 21979 W1 6497 TIP3 H1 HT 0.417000 1.0080 0 + 21980 W1 6497 TIP3 H2 HT 0.417000 1.0080 0 + 21981 W1 6498 TIP3 OH2 OT -0.834000 15.9994 0 + 21982 W1 6498 TIP3 H1 HT 0.417000 1.0080 0 + 21983 W1 6498 TIP3 H2 HT 0.417000 1.0080 0 + 21984 W1 6499 TIP3 OH2 OT -0.834000 15.9994 0 + 21985 W1 6499 TIP3 H1 HT 0.417000 1.0080 0 + 21986 W1 6499 TIP3 H2 HT 0.417000 1.0080 0 + 21987 W1 6500 TIP3 OH2 OT -0.834000 15.9994 0 + 21988 W1 6500 TIP3 H1 HT 0.417000 1.0080 0 + 21989 W1 6500 TIP3 H2 HT 0.417000 1.0080 0 + 21990 W1 6501 TIP3 OH2 OT -0.834000 15.9994 0 + 21991 W1 6501 TIP3 H1 HT 0.417000 1.0080 0 + 21992 W1 6501 TIP3 H2 HT 0.417000 1.0080 0 + 21993 W1 6502 TIP3 OH2 OT -0.834000 15.9994 0 + 21994 W1 6502 TIP3 H1 HT 0.417000 1.0080 0 + 21995 W1 6502 TIP3 H2 HT 0.417000 1.0080 0 + 21996 W1 6503 TIP3 OH2 OT -0.834000 15.9994 0 + 21997 W1 6503 TIP3 H1 HT 0.417000 1.0080 0 + 21998 W1 6503 TIP3 H2 HT 0.417000 1.0080 0 + 21999 W1 6504 TIP3 OH2 OT -0.834000 15.9994 0 + 22000 W1 6504 TIP3 H1 HT 0.417000 1.0080 0 + 22001 W1 6504 TIP3 H2 HT 0.417000 1.0080 0 + 22002 W1 6505 TIP3 OH2 OT -0.834000 15.9994 0 + 22003 W1 6505 TIP3 H1 HT 0.417000 1.0080 0 + 22004 W1 6505 TIP3 H2 HT 0.417000 1.0080 0 + 22005 W1 6506 TIP3 OH2 OT -0.834000 15.9994 0 + 22006 W1 6506 TIP3 H1 HT 0.417000 1.0080 0 + 22007 W1 6506 TIP3 H2 HT 0.417000 1.0080 0 + 22008 W1 6507 TIP3 OH2 OT -0.834000 15.9994 0 + 22009 W1 6507 TIP3 H1 HT 0.417000 1.0080 0 + 22010 W1 6507 TIP3 H2 HT 0.417000 1.0080 0 + 22011 W1 6508 TIP3 OH2 OT -0.834000 15.9994 0 + 22012 W1 6508 TIP3 H1 HT 0.417000 1.0080 0 + 22013 W1 6508 TIP3 H2 HT 0.417000 1.0080 0 + 22014 W1 6509 TIP3 OH2 OT -0.834000 15.9994 0 + 22015 W1 6509 TIP3 H1 HT 0.417000 1.0080 0 + 22016 W1 6509 TIP3 H2 HT 0.417000 1.0080 0 + 22017 W1 6510 TIP3 OH2 OT -0.834000 15.9994 0 + 22018 W1 6510 TIP3 H1 HT 0.417000 1.0080 0 + 22019 W1 6510 TIP3 H2 HT 0.417000 1.0080 0 + 22020 W1 6511 TIP3 OH2 OT -0.834000 15.9994 0 + 22021 W1 6511 TIP3 H1 HT 0.417000 1.0080 0 + 22022 W1 6511 TIP3 H2 HT 0.417000 1.0080 0 + 22023 W1 6512 TIP3 OH2 OT -0.834000 15.9994 0 + 22024 W1 6512 TIP3 H1 HT 0.417000 1.0080 0 + 22025 W1 6512 TIP3 H2 HT 0.417000 1.0080 0 + 22026 W1 6513 TIP3 OH2 OT -0.834000 15.9994 0 + 22027 W1 6513 TIP3 H1 HT 0.417000 1.0080 0 + 22028 W1 6513 TIP3 H2 HT 0.417000 1.0080 0 + 22029 W1 6514 TIP3 OH2 OT -0.834000 15.9994 0 + 22030 W1 6514 TIP3 H1 HT 0.417000 1.0080 0 + 22031 W1 6514 TIP3 H2 HT 0.417000 1.0080 0 + 22032 W1 6515 TIP3 OH2 OT -0.834000 15.9994 0 + 22033 W1 6515 TIP3 H1 HT 0.417000 1.0080 0 + 22034 W1 6515 TIP3 H2 HT 0.417000 1.0080 0 + 22035 W1 6516 TIP3 OH2 OT -0.834000 15.9994 0 + 22036 W1 6516 TIP3 H1 HT 0.417000 1.0080 0 + 22037 W1 6516 TIP3 H2 HT 0.417000 1.0080 0 + 22038 W1 6517 TIP3 OH2 OT -0.834000 15.9994 0 + 22039 W1 6517 TIP3 H1 HT 0.417000 1.0080 0 + 22040 W1 6517 TIP3 H2 HT 0.417000 1.0080 0 + 22041 W1 6518 TIP3 OH2 OT -0.834000 15.9994 0 + 22042 W1 6518 TIP3 H1 HT 0.417000 1.0080 0 + 22043 W1 6518 TIP3 H2 HT 0.417000 1.0080 0 + 22044 W1 6519 TIP3 OH2 OT -0.834000 15.9994 0 + 22045 W1 6519 TIP3 H1 HT 0.417000 1.0080 0 + 22046 W1 6519 TIP3 H2 HT 0.417000 1.0080 0 + 22047 W1 6520 TIP3 OH2 OT -0.834000 15.9994 0 + 22048 W1 6520 TIP3 H1 HT 0.417000 1.0080 0 + 22049 W1 6520 TIP3 H2 HT 0.417000 1.0080 0 + 22050 W1 6521 TIP3 OH2 OT -0.834000 15.9994 0 + 22051 W1 6521 TIP3 H1 HT 0.417000 1.0080 0 + 22052 W1 6521 TIP3 H2 HT 0.417000 1.0080 0 + 22053 W1 6522 TIP3 OH2 OT -0.834000 15.9994 0 + 22054 W1 6522 TIP3 H1 HT 0.417000 1.0080 0 + 22055 W1 6522 TIP3 H2 HT 0.417000 1.0080 0 + 22056 W1 6523 TIP3 OH2 OT -0.834000 15.9994 0 + 22057 W1 6523 TIP3 H1 HT 0.417000 1.0080 0 + 22058 W1 6523 TIP3 H2 HT 0.417000 1.0080 0 + 22059 W1 6524 TIP3 OH2 OT -0.834000 15.9994 0 + 22060 W1 6524 TIP3 H1 HT 0.417000 1.0080 0 + 22061 W1 6524 TIP3 H2 HT 0.417000 1.0080 0 + 22062 W1 6525 TIP3 OH2 OT -0.834000 15.9994 0 + 22063 W1 6525 TIP3 H1 HT 0.417000 1.0080 0 + 22064 W1 6525 TIP3 H2 HT 0.417000 1.0080 0 + 22065 W1 6526 TIP3 OH2 OT -0.834000 15.9994 0 + 22066 W1 6526 TIP3 H1 HT 0.417000 1.0080 0 + 22067 W1 6526 TIP3 H2 HT 0.417000 1.0080 0 + 22068 W1 6527 TIP3 OH2 OT -0.834000 15.9994 0 + 22069 W1 6527 TIP3 H1 HT 0.417000 1.0080 0 + 22070 W1 6527 TIP3 H2 HT 0.417000 1.0080 0 + 22071 W1 6528 TIP3 OH2 OT -0.834000 15.9994 0 + 22072 W1 6528 TIP3 H1 HT 0.417000 1.0080 0 + 22073 W1 6528 TIP3 H2 HT 0.417000 1.0080 0 + 22074 W1 6529 TIP3 OH2 OT -0.834000 15.9994 0 + 22075 W1 6529 TIP3 H1 HT 0.417000 1.0080 0 + 22076 W1 6529 TIP3 H2 HT 0.417000 1.0080 0 + 22077 W1 6530 TIP3 OH2 OT -0.834000 15.9994 0 + 22078 W1 6530 TIP3 H1 HT 0.417000 1.0080 0 + 22079 W1 6530 TIP3 H2 HT 0.417000 1.0080 0 + 22080 W1 6531 TIP3 OH2 OT -0.834000 15.9994 0 + 22081 W1 6531 TIP3 H1 HT 0.417000 1.0080 0 + 22082 W1 6531 TIP3 H2 HT 0.417000 1.0080 0 + 22083 W1 6532 TIP3 OH2 OT -0.834000 15.9994 0 + 22084 W1 6532 TIP3 H1 HT 0.417000 1.0080 0 + 22085 W1 6532 TIP3 H2 HT 0.417000 1.0080 0 + 22086 W1 6533 TIP3 OH2 OT -0.834000 15.9994 0 + 22087 W1 6533 TIP3 H1 HT 0.417000 1.0080 0 + 22088 W1 6533 TIP3 H2 HT 0.417000 1.0080 0 + 22089 W1 6534 TIP3 OH2 OT -0.834000 15.9994 0 + 22090 W1 6534 TIP3 H1 HT 0.417000 1.0080 0 + 22091 W1 6534 TIP3 H2 HT 0.417000 1.0080 0 + 22092 W1 6535 TIP3 OH2 OT -0.834000 15.9994 0 + 22093 W1 6535 TIP3 H1 HT 0.417000 1.0080 0 + 22094 W1 6535 TIP3 H2 HT 0.417000 1.0080 0 + 22095 W1 6536 TIP3 OH2 OT -0.834000 15.9994 0 + 22096 W1 6536 TIP3 H1 HT 0.417000 1.0080 0 + 22097 W1 6536 TIP3 H2 HT 0.417000 1.0080 0 + 22098 W1 6537 TIP3 OH2 OT -0.834000 15.9994 0 + 22099 W1 6537 TIP3 H1 HT 0.417000 1.0080 0 + 22100 W1 6537 TIP3 H2 HT 0.417000 1.0080 0 + 22101 W1 6538 TIP3 OH2 OT -0.834000 15.9994 0 + 22102 W1 6538 TIP3 H1 HT 0.417000 1.0080 0 + 22103 W1 6538 TIP3 H2 HT 0.417000 1.0080 0 + 22104 W1 6539 TIP3 OH2 OT -0.834000 15.9994 0 + 22105 W1 6539 TIP3 H1 HT 0.417000 1.0080 0 + 22106 W1 6539 TIP3 H2 HT 0.417000 1.0080 0 + 22107 W1 6540 TIP3 OH2 OT -0.834000 15.9994 0 + 22108 W1 6540 TIP3 H1 HT 0.417000 1.0080 0 + 22109 W1 6540 TIP3 H2 HT 0.417000 1.0080 0 + 22110 W1 6541 TIP3 OH2 OT -0.834000 15.9994 0 + 22111 W1 6541 TIP3 H1 HT 0.417000 1.0080 0 + 22112 W1 6541 TIP3 H2 HT 0.417000 1.0080 0 + 22113 W1 6542 TIP3 OH2 OT -0.834000 15.9994 0 + 22114 W1 6542 TIP3 H1 HT 0.417000 1.0080 0 + 22115 W1 6542 TIP3 H2 HT 0.417000 1.0080 0 + 22116 W1 6543 TIP3 OH2 OT -0.834000 15.9994 0 + 22117 W1 6543 TIP3 H1 HT 0.417000 1.0080 0 + 22118 W1 6543 TIP3 H2 HT 0.417000 1.0080 0 + 22119 W1 6544 TIP3 OH2 OT -0.834000 15.9994 0 + 22120 W1 6544 TIP3 H1 HT 0.417000 1.0080 0 + 22121 W1 6544 TIP3 H2 HT 0.417000 1.0080 0 + 22122 W1 6545 TIP3 OH2 OT -0.834000 15.9994 0 + 22123 W1 6545 TIP3 H1 HT 0.417000 1.0080 0 + 22124 W1 6545 TIP3 H2 HT 0.417000 1.0080 0 + 22125 W1 6546 TIP3 OH2 OT -0.834000 15.9994 0 + 22126 W1 6546 TIP3 H1 HT 0.417000 1.0080 0 + 22127 W1 6546 TIP3 H2 HT 0.417000 1.0080 0 + 22128 W1 6547 TIP3 OH2 OT -0.834000 15.9994 0 + 22129 W1 6547 TIP3 H1 HT 0.417000 1.0080 0 + 22130 W1 6547 TIP3 H2 HT 0.417000 1.0080 0 + 22131 W1 6548 TIP3 OH2 OT -0.834000 15.9994 0 + 22132 W1 6548 TIP3 H1 HT 0.417000 1.0080 0 + 22133 W1 6548 TIP3 H2 HT 0.417000 1.0080 0 + 22134 W1 6549 TIP3 OH2 OT -0.834000 15.9994 0 + 22135 W1 6549 TIP3 H1 HT 0.417000 1.0080 0 + 22136 W1 6549 TIP3 H2 HT 0.417000 1.0080 0 + 22137 W1 6550 TIP3 OH2 OT -0.834000 15.9994 0 + 22138 W1 6550 TIP3 H1 HT 0.417000 1.0080 0 + 22139 W1 6550 TIP3 H2 HT 0.417000 1.0080 0 + 22140 W1 6551 TIP3 OH2 OT -0.834000 15.9994 0 + 22141 W1 6551 TIP3 H1 HT 0.417000 1.0080 0 + 22142 W1 6551 TIP3 H2 HT 0.417000 1.0080 0 + 22143 W1 6552 TIP3 OH2 OT -0.834000 15.9994 0 + 22144 W1 6552 TIP3 H1 HT 0.417000 1.0080 0 + 22145 W1 6552 TIP3 H2 HT 0.417000 1.0080 0 + 22146 W1 6553 TIP3 OH2 OT -0.834000 15.9994 0 + 22147 W1 6553 TIP3 H1 HT 0.417000 1.0080 0 + 22148 W1 6553 TIP3 H2 HT 0.417000 1.0080 0 + 22149 W1 6554 TIP3 OH2 OT -0.834000 15.9994 0 + 22150 W1 6554 TIP3 H1 HT 0.417000 1.0080 0 + 22151 W1 6554 TIP3 H2 HT 0.417000 1.0080 0 + 22152 W1 6555 TIP3 OH2 OT -0.834000 15.9994 0 + 22153 W1 6555 TIP3 H1 HT 0.417000 1.0080 0 + 22154 W1 6555 TIP3 H2 HT 0.417000 1.0080 0 + 22155 W1 6556 TIP3 OH2 OT -0.834000 15.9994 0 + 22156 W1 6556 TIP3 H1 HT 0.417000 1.0080 0 + 22157 W1 6556 TIP3 H2 HT 0.417000 1.0080 0 + 22158 W1 6557 TIP3 OH2 OT -0.834000 15.9994 0 + 22159 W1 6557 TIP3 H1 HT 0.417000 1.0080 0 + 22160 W1 6557 TIP3 H2 HT 0.417000 1.0080 0 + 22161 W1 6558 TIP3 OH2 OT -0.834000 15.9994 0 + 22162 W1 6558 TIP3 H1 HT 0.417000 1.0080 0 + 22163 W1 6558 TIP3 H2 HT 0.417000 1.0080 0 + 22164 W1 6559 TIP3 OH2 OT -0.834000 15.9994 0 + 22165 W1 6559 TIP3 H1 HT 0.417000 1.0080 0 + 22166 W1 6559 TIP3 H2 HT 0.417000 1.0080 0 + 22167 W1 6560 TIP3 OH2 OT -0.834000 15.9994 0 + 22168 W1 6560 TIP3 H1 HT 0.417000 1.0080 0 + 22169 W1 6560 TIP3 H2 HT 0.417000 1.0080 0 + 22170 W1 6561 TIP3 OH2 OT -0.834000 15.9994 0 + 22171 W1 6561 TIP3 H1 HT 0.417000 1.0080 0 + 22172 W1 6561 TIP3 H2 HT 0.417000 1.0080 0 + 22173 W1 6562 TIP3 OH2 OT -0.834000 15.9994 0 + 22174 W1 6562 TIP3 H1 HT 0.417000 1.0080 0 + 22175 W1 6562 TIP3 H2 HT 0.417000 1.0080 0 + 22176 W1 6563 TIP3 OH2 OT -0.834000 15.9994 0 + 22177 W1 6563 TIP3 H1 HT 0.417000 1.0080 0 + 22178 W1 6563 TIP3 H2 HT 0.417000 1.0080 0 + 22179 W1 6564 TIP3 OH2 OT -0.834000 15.9994 0 + 22180 W1 6564 TIP3 H1 HT 0.417000 1.0080 0 + 22181 W1 6564 TIP3 H2 HT 0.417000 1.0080 0 + 22182 W1 6565 TIP3 OH2 OT -0.834000 15.9994 0 + 22183 W1 6565 TIP3 H1 HT 0.417000 1.0080 0 + 22184 W1 6565 TIP3 H2 HT 0.417000 1.0080 0 + 22185 W1 6566 TIP3 OH2 OT -0.834000 15.9994 0 + 22186 W1 6566 TIP3 H1 HT 0.417000 1.0080 0 + 22187 W1 6566 TIP3 H2 HT 0.417000 1.0080 0 + 22188 W1 6567 TIP3 OH2 OT -0.834000 15.9994 0 + 22189 W1 6567 TIP3 H1 HT 0.417000 1.0080 0 + 22190 W1 6567 TIP3 H2 HT 0.417000 1.0080 0 + 22191 W1 6568 TIP3 OH2 OT -0.834000 15.9994 0 + 22192 W1 6568 TIP3 H1 HT 0.417000 1.0080 0 + 22193 W1 6568 TIP3 H2 HT 0.417000 1.0080 0 + 22194 W1 6569 TIP3 OH2 OT -0.834000 15.9994 0 + 22195 W1 6569 TIP3 H1 HT 0.417000 1.0080 0 + 22196 W1 6569 TIP3 H2 HT 0.417000 1.0080 0 + 22197 W1 6570 TIP3 OH2 OT -0.834000 15.9994 0 + 22198 W1 6570 TIP3 H1 HT 0.417000 1.0080 0 + 22199 W1 6570 TIP3 H2 HT 0.417000 1.0080 0 + 22200 W1 6571 TIP3 OH2 OT -0.834000 15.9994 0 + 22201 W1 6571 TIP3 H1 HT 0.417000 1.0080 0 + 22202 W1 6571 TIP3 H2 HT 0.417000 1.0080 0 + 22203 W1 6572 TIP3 OH2 OT -0.834000 15.9994 0 + 22204 W1 6572 TIP3 H1 HT 0.417000 1.0080 0 + 22205 W1 6572 TIP3 H2 HT 0.417000 1.0080 0 + 22206 W1 6573 TIP3 OH2 OT -0.834000 15.9994 0 + 22207 W1 6573 TIP3 H1 HT 0.417000 1.0080 0 + 22208 W1 6573 TIP3 H2 HT 0.417000 1.0080 0 + 22209 W1 6574 TIP3 OH2 OT -0.834000 15.9994 0 + 22210 W1 6574 TIP3 H1 HT 0.417000 1.0080 0 + 22211 W1 6574 TIP3 H2 HT 0.417000 1.0080 0 + 22212 W1 6575 TIP3 OH2 OT -0.834000 15.9994 0 + 22213 W1 6575 TIP3 H1 HT 0.417000 1.0080 0 + 22214 W1 6575 TIP3 H2 HT 0.417000 1.0080 0 + 22215 W1 6576 TIP3 OH2 OT -0.834000 15.9994 0 + 22216 W1 6576 TIP3 H1 HT 0.417000 1.0080 0 + 22217 W1 6576 TIP3 H2 HT 0.417000 1.0080 0 + 22218 W1 6577 TIP3 OH2 OT -0.834000 15.9994 0 + 22219 W1 6577 TIP3 H1 HT 0.417000 1.0080 0 + 22220 W1 6577 TIP3 H2 HT 0.417000 1.0080 0 + 22221 W1 6578 TIP3 OH2 OT -0.834000 15.9994 0 + 22222 W1 6578 TIP3 H1 HT 0.417000 1.0080 0 + 22223 W1 6578 TIP3 H2 HT 0.417000 1.0080 0 + 22224 W1 6579 TIP3 OH2 OT -0.834000 15.9994 0 + 22225 W1 6579 TIP3 H1 HT 0.417000 1.0080 0 + 22226 W1 6579 TIP3 H2 HT 0.417000 1.0080 0 + 22227 W1 6580 TIP3 OH2 OT -0.834000 15.9994 0 + 22228 W1 6580 TIP3 H1 HT 0.417000 1.0080 0 + 22229 W1 6580 TIP3 H2 HT 0.417000 1.0080 0 + 22230 W1 6581 TIP3 OH2 OT -0.834000 15.9994 0 + 22231 W1 6581 TIP3 H1 HT 0.417000 1.0080 0 + 22232 W1 6581 TIP3 H2 HT 0.417000 1.0080 0 + 22233 W1 6582 TIP3 OH2 OT -0.834000 15.9994 0 + 22234 W1 6582 TIP3 H1 HT 0.417000 1.0080 0 + 22235 W1 6582 TIP3 H2 HT 0.417000 1.0080 0 + 22236 W1 6583 TIP3 OH2 OT -0.834000 15.9994 0 + 22237 W1 6583 TIP3 H1 HT 0.417000 1.0080 0 + 22238 W1 6583 TIP3 H2 HT 0.417000 1.0080 0 + 22239 W1 6584 TIP3 OH2 OT -0.834000 15.9994 0 + 22240 W1 6584 TIP3 H1 HT 0.417000 1.0080 0 + 22241 W1 6584 TIP3 H2 HT 0.417000 1.0080 0 + 22242 W1 6585 TIP3 OH2 OT -0.834000 15.9994 0 + 22243 W1 6585 TIP3 H1 HT 0.417000 1.0080 0 + 22244 W1 6585 TIP3 H2 HT 0.417000 1.0080 0 + 22245 W1 6586 TIP3 OH2 OT -0.834000 15.9994 0 + 22246 W1 6586 TIP3 H1 HT 0.417000 1.0080 0 + 22247 W1 6586 TIP3 H2 HT 0.417000 1.0080 0 + 22248 W1 6587 TIP3 OH2 OT -0.834000 15.9994 0 + 22249 W1 6587 TIP3 H1 HT 0.417000 1.0080 0 + 22250 W1 6587 TIP3 H2 HT 0.417000 1.0080 0 + 22251 W1 6588 TIP3 OH2 OT -0.834000 15.9994 0 + 22252 W1 6588 TIP3 H1 HT 0.417000 1.0080 0 + 22253 W1 6588 TIP3 H2 HT 0.417000 1.0080 0 + 22254 W1 6589 TIP3 OH2 OT -0.834000 15.9994 0 + 22255 W1 6589 TIP3 H1 HT 0.417000 1.0080 0 + 22256 W1 6589 TIP3 H2 HT 0.417000 1.0080 0 + 22257 W1 6590 TIP3 OH2 OT -0.834000 15.9994 0 + 22258 W1 6590 TIP3 H1 HT 0.417000 1.0080 0 + 22259 W1 6590 TIP3 H2 HT 0.417000 1.0080 0 + 22260 W1 6591 TIP3 OH2 OT -0.834000 15.9994 0 + 22261 W1 6591 TIP3 H1 HT 0.417000 1.0080 0 + 22262 W1 6591 TIP3 H2 HT 0.417000 1.0080 0 + 22263 W1 6592 TIP3 OH2 OT -0.834000 15.9994 0 + 22264 W1 6592 TIP3 H1 HT 0.417000 1.0080 0 + 22265 W1 6592 TIP3 H2 HT 0.417000 1.0080 0 + 22266 W1 6593 TIP3 OH2 OT -0.834000 15.9994 0 + 22267 W1 6593 TIP3 H1 HT 0.417000 1.0080 0 + 22268 W1 6593 TIP3 H2 HT 0.417000 1.0080 0 + 22269 W1 6594 TIP3 OH2 OT -0.834000 15.9994 0 + 22270 W1 6594 TIP3 H1 HT 0.417000 1.0080 0 + 22271 W1 6594 TIP3 H2 HT 0.417000 1.0080 0 + 22272 W1 6595 TIP3 OH2 OT -0.834000 15.9994 0 + 22273 W1 6595 TIP3 H1 HT 0.417000 1.0080 0 + 22274 W1 6595 TIP3 H2 HT 0.417000 1.0080 0 + 22275 W1 6596 TIP3 OH2 OT -0.834000 15.9994 0 + 22276 W1 6596 TIP3 H1 HT 0.417000 1.0080 0 + 22277 W1 6596 TIP3 H2 HT 0.417000 1.0080 0 + 22278 W1 6597 TIP3 OH2 OT -0.834000 15.9994 0 + 22279 W1 6597 TIP3 H1 HT 0.417000 1.0080 0 + 22280 W1 6597 TIP3 H2 HT 0.417000 1.0080 0 + 22281 W1 6598 TIP3 OH2 OT -0.834000 15.9994 0 + 22282 W1 6598 TIP3 H1 HT 0.417000 1.0080 0 + 22283 W1 6598 TIP3 H2 HT 0.417000 1.0080 0 + 22284 W1 6599 TIP3 OH2 OT -0.834000 15.9994 0 + 22285 W1 6599 TIP3 H1 HT 0.417000 1.0080 0 + 22286 W1 6599 TIP3 H2 HT 0.417000 1.0080 0 + 22287 W1 6600 TIP3 OH2 OT -0.834000 15.9994 0 + 22288 W1 6600 TIP3 H1 HT 0.417000 1.0080 0 + 22289 W1 6600 TIP3 H2 HT 0.417000 1.0080 0 + 22290 W1 6601 TIP3 OH2 OT -0.834000 15.9994 0 + 22291 W1 6601 TIP3 H1 HT 0.417000 1.0080 0 + 22292 W1 6601 TIP3 H2 HT 0.417000 1.0080 0 + 22293 W1 6602 TIP3 OH2 OT -0.834000 15.9994 0 + 22294 W1 6602 TIP3 H1 HT 0.417000 1.0080 0 + 22295 W1 6602 TIP3 H2 HT 0.417000 1.0080 0 + 22296 W1 6603 TIP3 OH2 OT -0.834000 15.9994 0 + 22297 W1 6603 TIP3 H1 HT 0.417000 1.0080 0 + 22298 W1 6603 TIP3 H2 HT 0.417000 1.0080 0 + 22299 W1 6604 TIP3 OH2 OT -0.834000 15.9994 0 + 22300 W1 6604 TIP3 H1 HT 0.417000 1.0080 0 + 22301 W1 6604 TIP3 H2 HT 0.417000 1.0080 0 + 22302 W1 6605 TIP3 OH2 OT -0.834000 15.9994 0 + 22303 W1 6605 TIP3 H1 HT 0.417000 1.0080 0 + 22304 W1 6605 TIP3 H2 HT 0.417000 1.0080 0 + 22305 W1 6606 TIP3 OH2 OT -0.834000 15.9994 0 + 22306 W1 6606 TIP3 H1 HT 0.417000 1.0080 0 + 22307 W1 6606 TIP3 H2 HT 0.417000 1.0080 0 + 22308 W1 6607 TIP3 OH2 OT -0.834000 15.9994 0 + 22309 W1 6607 TIP3 H1 HT 0.417000 1.0080 0 + 22310 W1 6607 TIP3 H2 HT 0.417000 1.0080 0 + 22311 W1 6608 TIP3 OH2 OT -0.834000 15.9994 0 + 22312 W1 6608 TIP3 H1 HT 0.417000 1.0080 0 + 22313 W1 6608 TIP3 H2 HT 0.417000 1.0080 0 + 22314 W1 6609 TIP3 OH2 OT -0.834000 15.9994 0 + 22315 W1 6609 TIP3 H1 HT 0.417000 1.0080 0 + 22316 W1 6609 TIP3 H2 HT 0.417000 1.0080 0 + 22317 W1 6610 TIP3 OH2 OT -0.834000 15.9994 0 + 22318 W1 6610 TIP3 H1 HT 0.417000 1.0080 0 + 22319 W1 6610 TIP3 H2 HT 0.417000 1.0080 0 + 22320 W1 6611 TIP3 OH2 OT -0.834000 15.9994 0 + 22321 W1 6611 TIP3 H1 HT 0.417000 1.0080 0 + 22322 W1 6611 TIP3 H2 HT 0.417000 1.0080 0 + 22323 W1 6612 TIP3 OH2 OT -0.834000 15.9994 0 + 22324 W1 6612 TIP3 H1 HT 0.417000 1.0080 0 + 22325 W1 6612 TIP3 H2 HT 0.417000 1.0080 0 + 22326 W1 6613 TIP3 OH2 OT -0.834000 15.9994 0 + 22327 W1 6613 TIP3 H1 HT 0.417000 1.0080 0 + 22328 W1 6613 TIP3 H2 HT 0.417000 1.0080 0 + 22329 W1 6614 TIP3 OH2 OT -0.834000 15.9994 0 + 22330 W1 6614 TIP3 H1 HT 0.417000 1.0080 0 + 22331 W1 6614 TIP3 H2 HT 0.417000 1.0080 0 + 22332 W1 6615 TIP3 OH2 OT -0.834000 15.9994 0 + 22333 W1 6615 TIP3 H1 HT 0.417000 1.0080 0 + 22334 W1 6615 TIP3 H2 HT 0.417000 1.0080 0 + 22335 W1 6616 TIP3 OH2 OT -0.834000 15.9994 0 + 22336 W1 6616 TIP3 H1 HT 0.417000 1.0080 0 + 22337 W1 6616 TIP3 H2 HT 0.417000 1.0080 0 + 22338 W1 6617 TIP3 OH2 OT -0.834000 15.9994 0 + 22339 W1 6617 TIP3 H1 HT 0.417000 1.0080 0 + 22340 W1 6617 TIP3 H2 HT 0.417000 1.0080 0 + 22341 W1 6618 TIP3 OH2 OT -0.834000 15.9994 0 + 22342 W1 6618 TIP3 H1 HT 0.417000 1.0080 0 + 22343 W1 6618 TIP3 H2 HT 0.417000 1.0080 0 + 22344 W1 6619 TIP3 OH2 OT -0.834000 15.9994 0 + 22345 W1 6619 TIP3 H1 HT 0.417000 1.0080 0 + 22346 W1 6619 TIP3 H2 HT 0.417000 1.0080 0 + 22347 W1 6620 TIP3 OH2 OT -0.834000 15.9994 0 + 22348 W1 6620 TIP3 H1 HT 0.417000 1.0080 0 + 22349 W1 6620 TIP3 H2 HT 0.417000 1.0080 0 + 22350 W1 6621 TIP3 OH2 OT -0.834000 15.9994 0 + 22351 W1 6621 TIP3 H1 HT 0.417000 1.0080 0 + 22352 W1 6621 TIP3 H2 HT 0.417000 1.0080 0 + 22353 W1 6622 TIP3 OH2 OT -0.834000 15.9994 0 + 22354 W1 6622 TIP3 H1 HT 0.417000 1.0080 0 + 22355 W1 6622 TIP3 H2 HT 0.417000 1.0080 0 + 22356 W1 6623 TIP3 OH2 OT -0.834000 15.9994 0 + 22357 W1 6623 TIP3 H1 HT 0.417000 1.0080 0 + 22358 W1 6623 TIP3 H2 HT 0.417000 1.0080 0 + 22359 W1 6624 TIP3 OH2 OT -0.834000 15.9994 0 + 22360 W1 6624 TIP3 H1 HT 0.417000 1.0080 0 + 22361 W1 6624 TIP3 H2 HT 0.417000 1.0080 0 + 22362 W1 6625 TIP3 OH2 OT -0.834000 15.9994 0 + 22363 W1 6625 TIP3 H1 HT 0.417000 1.0080 0 + 22364 W1 6625 TIP3 H2 HT 0.417000 1.0080 0 + 22365 W1 6626 TIP3 OH2 OT -0.834000 15.9994 0 + 22366 W1 6626 TIP3 H1 HT 0.417000 1.0080 0 + 22367 W1 6626 TIP3 H2 HT 0.417000 1.0080 0 + 22368 W1 6627 TIP3 OH2 OT -0.834000 15.9994 0 + 22369 W1 6627 TIP3 H1 HT 0.417000 1.0080 0 + 22370 W1 6627 TIP3 H2 HT 0.417000 1.0080 0 + 22371 W1 6628 TIP3 OH2 OT -0.834000 15.9994 0 + 22372 W1 6628 TIP3 H1 HT 0.417000 1.0080 0 + 22373 W1 6628 TIP3 H2 HT 0.417000 1.0080 0 + 22374 W1 6629 TIP3 OH2 OT -0.834000 15.9994 0 + 22375 W1 6629 TIP3 H1 HT 0.417000 1.0080 0 + 22376 W1 6629 TIP3 H2 HT 0.417000 1.0080 0 + 22377 W1 6630 TIP3 OH2 OT -0.834000 15.9994 0 + 22378 W1 6630 TIP3 H1 HT 0.417000 1.0080 0 + 22379 W1 6630 TIP3 H2 HT 0.417000 1.0080 0 + 22380 W1 6631 TIP3 OH2 OT -0.834000 15.9994 0 + 22381 W1 6631 TIP3 H1 HT 0.417000 1.0080 0 + 22382 W1 6631 TIP3 H2 HT 0.417000 1.0080 0 + 22383 W1 6632 TIP3 OH2 OT -0.834000 15.9994 0 + 22384 W1 6632 TIP3 H1 HT 0.417000 1.0080 0 + 22385 W1 6632 TIP3 H2 HT 0.417000 1.0080 0 + 22386 W1 6633 TIP3 OH2 OT -0.834000 15.9994 0 + 22387 W1 6633 TIP3 H1 HT 0.417000 1.0080 0 + 22388 W1 6633 TIP3 H2 HT 0.417000 1.0080 0 + 22389 W1 6634 TIP3 OH2 OT -0.834000 15.9994 0 + 22390 W1 6634 TIP3 H1 HT 0.417000 1.0080 0 + 22391 W1 6634 TIP3 H2 HT 0.417000 1.0080 0 + 22392 W1 6635 TIP3 OH2 OT -0.834000 15.9994 0 + 22393 W1 6635 TIP3 H1 HT 0.417000 1.0080 0 + 22394 W1 6635 TIP3 H2 HT 0.417000 1.0080 0 + 22395 W1 6636 TIP3 OH2 OT -0.834000 15.9994 0 + 22396 W1 6636 TIP3 H1 HT 0.417000 1.0080 0 + 22397 W1 6636 TIP3 H2 HT 0.417000 1.0080 0 + 22398 W1 6637 TIP3 OH2 OT -0.834000 15.9994 0 + 22399 W1 6637 TIP3 H1 HT 0.417000 1.0080 0 + 22400 W1 6637 TIP3 H2 HT 0.417000 1.0080 0 + 22401 W1 6638 TIP3 OH2 OT -0.834000 15.9994 0 + 22402 W1 6638 TIP3 H1 HT 0.417000 1.0080 0 + 22403 W1 6638 TIP3 H2 HT 0.417000 1.0080 0 + 22404 W1 6639 TIP3 OH2 OT -0.834000 15.9994 0 + 22405 W1 6639 TIP3 H1 HT 0.417000 1.0080 0 + 22406 W1 6639 TIP3 H2 HT 0.417000 1.0080 0 + 22407 W1 6640 TIP3 OH2 OT -0.834000 15.9994 0 + 22408 W1 6640 TIP3 H1 HT 0.417000 1.0080 0 + 22409 W1 6640 TIP3 H2 HT 0.417000 1.0080 0 + 22410 W1 6641 TIP3 OH2 OT -0.834000 15.9994 0 + 22411 W1 6641 TIP3 H1 HT 0.417000 1.0080 0 + 22412 W1 6641 TIP3 H2 HT 0.417000 1.0080 0 + 22413 W1 6642 TIP3 OH2 OT -0.834000 15.9994 0 + 22414 W1 6642 TIP3 H1 HT 0.417000 1.0080 0 + 22415 W1 6642 TIP3 H2 HT 0.417000 1.0080 0 + 22416 W1 6643 TIP3 OH2 OT -0.834000 15.9994 0 + 22417 W1 6643 TIP3 H1 HT 0.417000 1.0080 0 + 22418 W1 6643 TIP3 H2 HT 0.417000 1.0080 0 + 22419 W1 6644 TIP3 OH2 OT -0.834000 15.9994 0 + 22420 W1 6644 TIP3 H1 HT 0.417000 1.0080 0 + 22421 W1 6644 TIP3 H2 HT 0.417000 1.0080 0 + 22422 W1 6645 TIP3 OH2 OT -0.834000 15.9994 0 + 22423 W1 6645 TIP3 H1 HT 0.417000 1.0080 0 + 22424 W1 6645 TIP3 H2 HT 0.417000 1.0080 0 + 22425 W1 6646 TIP3 OH2 OT -0.834000 15.9994 0 + 22426 W1 6646 TIP3 H1 HT 0.417000 1.0080 0 + 22427 W1 6646 TIP3 H2 HT 0.417000 1.0080 0 + 22428 W1 6647 TIP3 OH2 OT -0.834000 15.9994 0 + 22429 W1 6647 TIP3 H1 HT 0.417000 1.0080 0 + 22430 W1 6647 TIP3 H2 HT 0.417000 1.0080 0 + 22431 W1 6648 TIP3 OH2 OT -0.834000 15.9994 0 + 22432 W1 6648 TIP3 H1 HT 0.417000 1.0080 0 + 22433 W1 6648 TIP3 H2 HT 0.417000 1.0080 0 + 22434 W1 6649 TIP3 OH2 OT -0.834000 15.9994 0 + 22435 W1 6649 TIP3 H1 HT 0.417000 1.0080 0 + 22436 W1 6649 TIP3 H2 HT 0.417000 1.0080 0 + 22437 W1 6650 TIP3 OH2 OT -0.834000 15.9994 0 + 22438 W1 6650 TIP3 H1 HT 0.417000 1.0080 0 + 22439 W1 6650 TIP3 H2 HT 0.417000 1.0080 0 + 22440 W1 6651 TIP3 OH2 OT -0.834000 15.9994 0 + 22441 W1 6651 TIP3 H1 HT 0.417000 1.0080 0 + 22442 W1 6651 TIP3 H2 HT 0.417000 1.0080 0 + 22443 W1 6652 TIP3 OH2 OT -0.834000 15.9994 0 + 22444 W1 6652 TIP3 H1 HT 0.417000 1.0080 0 + 22445 W1 6652 TIP3 H2 HT 0.417000 1.0080 0 + 22446 W1 6653 TIP3 OH2 OT -0.834000 15.9994 0 + 22447 W1 6653 TIP3 H1 HT 0.417000 1.0080 0 + 22448 W1 6653 TIP3 H2 HT 0.417000 1.0080 0 + 22449 W1 6654 TIP3 OH2 OT -0.834000 15.9994 0 + 22450 W1 6654 TIP3 H1 HT 0.417000 1.0080 0 + 22451 W1 6654 TIP3 H2 HT 0.417000 1.0080 0 + 22452 W1 6655 TIP3 OH2 OT -0.834000 15.9994 0 + 22453 W1 6655 TIP3 H1 HT 0.417000 1.0080 0 + 22454 W1 6655 TIP3 H2 HT 0.417000 1.0080 0 + 22455 W1 6656 TIP3 OH2 OT -0.834000 15.9994 0 + 22456 W1 6656 TIP3 H1 HT 0.417000 1.0080 0 + 22457 W1 6656 TIP3 H2 HT 0.417000 1.0080 0 + 22458 W1 6657 TIP3 OH2 OT -0.834000 15.9994 0 + 22459 W1 6657 TIP3 H1 HT 0.417000 1.0080 0 + 22460 W1 6657 TIP3 H2 HT 0.417000 1.0080 0 + 22461 W1 6658 TIP3 OH2 OT -0.834000 15.9994 0 + 22462 W1 6658 TIP3 H1 HT 0.417000 1.0080 0 + 22463 W1 6658 TIP3 H2 HT 0.417000 1.0080 0 + 22464 W1 6659 TIP3 OH2 OT -0.834000 15.9994 0 + 22465 W1 6659 TIP3 H1 HT 0.417000 1.0080 0 + 22466 W1 6659 TIP3 H2 HT 0.417000 1.0080 0 + 22467 W1 6660 TIP3 OH2 OT -0.834000 15.9994 0 + 22468 W1 6660 TIP3 H1 HT 0.417000 1.0080 0 + 22469 W1 6660 TIP3 H2 HT 0.417000 1.0080 0 + 22470 W1 6661 TIP3 OH2 OT -0.834000 15.9994 0 + 22471 W1 6661 TIP3 H1 HT 0.417000 1.0080 0 + 22472 W1 6661 TIP3 H2 HT 0.417000 1.0080 0 + 22473 W1 6662 TIP3 OH2 OT -0.834000 15.9994 0 + 22474 W1 6662 TIP3 H1 HT 0.417000 1.0080 0 + 22475 W1 6662 TIP3 H2 HT 0.417000 1.0080 0 + 22476 W1 6663 TIP3 OH2 OT -0.834000 15.9994 0 + 22477 W1 6663 TIP3 H1 HT 0.417000 1.0080 0 + 22478 W1 6663 TIP3 H2 HT 0.417000 1.0080 0 + 22479 W1 6664 TIP3 OH2 OT -0.834000 15.9994 0 + 22480 W1 6664 TIP3 H1 HT 0.417000 1.0080 0 + 22481 W1 6664 TIP3 H2 HT 0.417000 1.0080 0 + 22482 W1 6665 TIP3 OH2 OT -0.834000 15.9994 0 + 22483 W1 6665 TIP3 H1 HT 0.417000 1.0080 0 + 22484 W1 6665 TIP3 H2 HT 0.417000 1.0080 0 + 22485 W1 6666 TIP3 OH2 OT -0.834000 15.9994 0 + 22486 W1 6666 TIP3 H1 HT 0.417000 1.0080 0 + 22487 W1 6666 TIP3 H2 HT 0.417000 1.0080 0 + 22488 W1 6667 TIP3 OH2 OT -0.834000 15.9994 0 + 22489 W1 6667 TIP3 H1 HT 0.417000 1.0080 0 + 22490 W1 6667 TIP3 H2 HT 0.417000 1.0080 0 + 22491 W1 6668 TIP3 OH2 OT -0.834000 15.9994 0 + 22492 W1 6668 TIP3 H1 HT 0.417000 1.0080 0 + 22493 W1 6668 TIP3 H2 HT 0.417000 1.0080 0 + 22494 W1 6669 TIP3 OH2 OT -0.834000 15.9994 0 + 22495 W1 6669 TIP3 H1 HT 0.417000 1.0080 0 + 22496 W1 6669 TIP3 H2 HT 0.417000 1.0080 0 + 22497 W1 6670 TIP3 OH2 OT -0.834000 15.9994 0 + 22498 W1 6670 TIP3 H1 HT 0.417000 1.0080 0 + 22499 W1 6670 TIP3 H2 HT 0.417000 1.0080 0 + 22500 W1 6671 TIP3 OH2 OT -0.834000 15.9994 0 + 22501 W1 6671 TIP3 H1 HT 0.417000 1.0080 0 + 22502 W1 6671 TIP3 H2 HT 0.417000 1.0080 0 + 22503 W1 6672 TIP3 OH2 OT -0.834000 15.9994 0 + 22504 W1 6672 TIP3 H1 HT 0.417000 1.0080 0 + 22505 W1 6672 TIP3 H2 HT 0.417000 1.0080 0 + 22506 W1 6673 TIP3 OH2 OT -0.834000 15.9994 0 + 22507 W1 6673 TIP3 H1 HT 0.417000 1.0080 0 + 22508 W1 6673 TIP3 H2 HT 0.417000 1.0080 0 + 22509 W1 6674 TIP3 OH2 OT -0.834000 15.9994 0 + 22510 W1 6674 TIP3 H1 HT 0.417000 1.0080 0 + 22511 W1 6674 TIP3 H2 HT 0.417000 1.0080 0 + 22512 W1 6675 TIP3 OH2 OT -0.834000 15.9994 0 + 22513 W1 6675 TIP3 H1 HT 0.417000 1.0080 0 + 22514 W1 6675 TIP3 H2 HT 0.417000 1.0080 0 + 22515 W1 6676 TIP3 OH2 OT -0.834000 15.9994 0 + 22516 W1 6676 TIP3 H1 HT 0.417000 1.0080 0 + 22517 W1 6676 TIP3 H2 HT 0.417000 1.0080 0 + 22518 W1 6677 TIP3 OH2 OT -0.834000 15.9994 0 + 22519 W1 6677 TIP3 H1 HT 0.417000 1.0080 0 + 22520 W1 6677 TIP3 H2 HT 0.417000 1.0080 0 + 22521 W1 6678 TIP3 OH2 OT -0.834000 15.9994 0 + 22522 W1 6678 TIP3 H1 HT 0.417000 1.0080 0 + 22523 W1 6678 TIP3 H2 HT 0.417000 1.0080 0 + 22524 W1 6679 TIP3 OH2 OT -0.834000 15.9994 0 + 22525 W1 6679 TIP3 H1 HT 0.417000 1.0080 0 + 22526 W1 6679 TIP3 H2 HT 0.417000 1.0080 0 + 22527 W1 6680 TIP3 OH2 OT -0.834000 15.9994 0 + 22528 W1 6680 TIP3 H1 HT 0.417000 1.0080 0 + 22529 W1 6680 TIP3 H2 HT 0.417000 1.0080 0 + 22530 W1 6681 TIP3 OH2 OT -0.834000 15.9994 0 + 22531 W1 6681 TIP3 H1 HT 0.417000 1.0080 0 + 22532 W1 6681 TIP3 H2 HT 0.417000 1.0080 0 + 22533 W1 6682 TIP3 OH2 OT -0.834000 15.9994 0 + 22534 W1 6682 TIP3 H1 HT 0.417000 1.0080 0 + 22535 W1 6682 TIP3 H2 HT 0.417000 1.0080 0 + 22536 W1 6683 TIP3 OH2 OT -0.834000 15.9994 0 + 22537 W1 6683 TIP3 H1 HT 0.417000 1.0080 0 + 22538 W1 6683 TIP3 H2 HT 0.417000 1.0080 0 + 22539 W1 6684 TIP3 OH2 OT -0.834000 15.9994 0 + 22540 W1 6684 TIP3 H1 HT 0.417000 1.0080 0 + 22541 W1 6684 TIP3 H2 HT 0.417000 1.0080 0 + 22542 W1 6685 TIP3 OH2 OT -0.834000 15.9994 0 + 22543 W1 6685 TIP3 H1 HT 0.417000 1.0080 0 + 22544 W1 6685 TIP3 H2 HT 0.417000 1.0080 0 + 22545 W1 6686 TIP3 OH2 OT -0.834000 15.9994 0 + 22546 W1 6686 TIP3 H1 HT 0.417000 1.0080 0 + 22547 W1 6686 TIP3 H2 HT 0.417000 1.0080 0 + 22548 W1 6687 TIP3 OH2 OT -0.834000 15.9994 0 + 22549 W1 6687 TIP3 H1 HT 0.417000 1.0080 0 + 22550 W1 6687 TIP3 H2 HT 0.417000 1.0080 0 + 22551 W1 6688 TIP3 OH2 OT -0.834000 15.9994 0 + 22552 W1 6688 TIP3 H1 HT 0.417000 1.0080 0 + 22553 W1 6688 TIP3 H2 HT 0.417000 1.0080 0 + 22554 W1 6689 TIP3 OH2 OT -0.834000 15.9994 0 + 22555 W1 6689 TIP3 H1 HT 0.417000 1.0080 0 + 22556 W1 6689 TIP3 H2 HT 0.417000 1.0080 0 + 22557 W1 6690 TIP3 OH2 OT -0.834000 15.9994 0 + 22558 W1 6690 TIP3 H1 HT 0.417000 1.0080 0 + 22559 W1 6690 TIP3 H2 HT 0.417000 1.0080 0 + 22560 W1 6691 TIP3 OH2 OT -0.834000 15.9994 0 + 22561 W1 6691 TIP3 H1 HT 0.417000 1.0080 0 + 22562 W1 6691 TIP3 H2 HT 0.417000 1.0080 0 + 22563 W1 6692 TIP3 OH2 OT -0.834000 15.9994 0 + 22564 W1 6692 TIP3 H1 HT 0.417000 1.0080 0 + 22565 W1 6692 TIP3 H2 HT 0.417000 1.0080 0 + 22566 W1 6693 TIP3 OH2 OT -0.834000 15.9994 0 + 22567 W1 6693 TIP3 H1 HT 0.417000 1.0080 0 + 22568 W1 6693 TIP3 H2 HT 0.417000 1.0080 0 + 22569 W1 6694 TIP3 OH2 OT -0.834000 15.9994 0 + 22570 W1 6694 TIP3 H1 HT 0.417000 1.0080 0 + 22571 W1 6694 TIP3 H2 HT 0.417000 1.0080 0 + 22572 W1 6695 TIP3 OH2 OT -0.834000 15.9994 0 + 22573 W1 6695 TIP3 H1 HT 0.417000 1.0080 0 + 22574 W1 6695 TIP3 H2 HT 0.417000 1.0080 0 + 22575 W1 6696 TIP3 OH2 OT -0.834000 15.9994 0 + 22576 W1 6696 TIP3 H1 HT 0.417000 1.0080 0 + 22577 W1 6696 TIP3 H2 HT 0.417000 1.0080 0 + 22578 W1 6697 TIP3 OH2 OT -0.834000 15.9994 0 + 22579 W1 6697 TIP3 H1 HT 0.417000 1.0080 0 + 22580 W1 6697 TIP3 H2 HT 0.417000 1.0080 0 + 22581 W1 6698 TIP3 OH2 OT -0.834000 15.9994 0 + 22582 W1 6698 TIP3 H1 HT 0.417000 1.0080 0 + 22583 W1 6698 TIP3 H2 HT 0.417000 1.0080 0 + 22584 W1 6699 TIP3 OH2 OT -0.834000 15.9994 0 + 22585 W1 6699 TIP3 H1 HT 0.417000 1.0080 0 + 22586 W1 6699 TIP3 H2 HT 0.417000 1.0080 0 + 22587 W1 6700 TIP3 OH2 OT -0.834000 15.9994 0 + 22588 W1 6700 TIP3 H1 HT 0.417000 1.0080 0 + 22589 W1 6700 TIP3 H2 HT 0.417000 1.0080 0 + 22590 W1 6701 TIP3 OH2 OT -0.834000 15.9994 0 + 22591 W1 6701 TIP3 H1 HT 0.417000 1.0080 0 + 22592 W1 6701 TIP3 H2 HT 0.417000 1.0080 0 + 22593 W1 6702 TIP3 OH2 OT -0.834000 15.9994 0 + 22594 W1 6702 TIP3 H1 HT 0.417000 1.0080 0 + 22595 W1 6702 TIP3 H2 HT 0.417000 1.0080 0 + 22596 W1 6703 TIP3 OH2 OT -0.834000 15.9994 0 + 22597 W1 6703 TIP3 H1 HT 0.417000 1.0080 0 + 22598 W1 6703 TIP3 H2 HT 0.417000 1.0080 0 + 22599 W1 6704 TIP3 OH2 OT -0.834000 15.9994 0 + 22600 W1 6704 TIP3 H1 HT 0.417000 1.0080 0 + 22601 W1 6704 TIP3 H2 HT 0.417000 1.0080 0 + 22602 W1 6705 TIP3 OH2 OT -0.834000 15.9994 0 + 22603 W1 6705 TIP3 H1 HT 0.417000 1.0080 0 + 22604 W1 6705 TIP3 H2 HT 0.417000 1.0080 0 + 22605 W1 6706 TIP3 OH2 OT -0.834000 15.9994 0 + 22606 W1 6706 TIP3 H1 HT 0.417000 1.0080 0 + 22607 W1 6706 TIP3 H2 HT 0.417000 1.0080 0 + 22608 W1 6707 TIP3 OH2 OT -0.834000 15.9994 0 + 22609 W1 6707 TIP3 H1 HT 0.417000 1.0080 0 + 22610 W1 6707 TIP3 H2 HT 0.417000 1.0080 0 + 22611 W1 6708 TIP3 OH2 OT -0.834000 15.9994 0 + 22612 W1 6708 TIP3 H1 HT 0.417000 1.0080 0 + 22613 W1 6708 TIP3 H2 HT 0.417000 1.0080 0 + 22614 W1 6709 TIP3 OH2 OT -0.834000 15.9994 0 + 22615 W1 6709 TIP3 H1 HT 0.417000 1.0080 0 + 22616 W1 6709 TIP3 H2 HT 0.417000 1.0080 0 + 22617 W1 6710 TIP3 OH2 OT -0.834000 15.9994 0 + 22618 W1 6710 TIP3 H1 HT 0.417000 1.0080 0 + 22619 W1 6710 TIP3 H2 HT 0.417000 1.0080 0 + 22620 W1 6711 TIP3 OH2 OT -0.834000 15.9994 0 + 22621 W1 6711 TIP3 H1 HT 0.417000 1.0080 0 + 22622 W1 6711 TIP3 H2 HT 0.417000 1.0080 0 + 22623 W1 6712 TIP3 OH2 OT -0.834000 15.9994 0 + 22624 W1 6712 TIP3 H1 HT 0.417000 1.0080 0 + 22625 W1 6712 TIP3 H2 HT 0.417000 1.0080 0 + 22626 W1 6713 TIP3 OH2 OT -0.834000 15.9994 0 + 22627 W1 6713 TIP3 H1 HT 0.417000 1.0080 0 + 22628 W1 6713 TIP3 H2 HT 0.417000 1.0080 0 + 22629 W1 6714 TIP3 OH2 OT -0.834000 15.9994 0 + 22630 W1 6714 TIP3 H1 HT 0.417000 1.0080 0 + 22631 W1 6714 TIP3 H2 HT 0.417000 1.0080 0 + 22632 W1 6715 TIP3 OH2 OT -0.834000 15.9994 0 + 22633 W1 6715 TIP3 H1 HT 0.417000 1.0080 0 + 22634 W1 6715 TIP3 H2 HT 0.417000 1.0080 0 + 22635 W1 6716 TIP3 OH2 OT -0.834000 15.9994 0 + 22636 W1 6716 TIP3 H1 HT 0.417000 1.0080 0 + 22637 W1 6716 TIP3 H2 HT 0.417000 1.0080 0 + 22638 W1 6717 TIP3 OH2 OT -0.834000 15.9994 0 + 22639 W1 6717 TIP3 H1 HT 0.417000 1.0080 0 + 22640 W1 6717 TIP3 H2 HT 0.417000 1.0080 0 + 22641 W1 6718 TIP3 OH2 OT -0.834000 15.9994 0 + 22642 W1 6718 TIP3 H1 HT 0.417000 1.0080 0 + 22643 W1 6718 TIP3 H2 HT 0.417000 1.0080 0 + 22644 W1 6719 TIP3 OH2 OT -0.834000 15.9994 0 + 22645 W1 6719 TIP3 H1 HT 0.417000 1.0080 0 + 22646 W1 6719 TIP3 H2 HT 0.417000 1.0080 0 + 22647 W1 6720 TIP3 OH2 OT -0.834000 15.9994 0 + 22648 W1 6720 TIP3 H1 HT 0.417000 1.0080 0 + 22649 W1 6720 TIP3 H2 HT 0.417000 1.0080 0 + 22650 W1 6721 TIP3 OH2 OT -0.834000 15.9994 0 + 22651 W1 6721 TIP3 H1 HT 0.417000 1.0080 0 + 22652 W1 6721 TIP3 H2 HT 0.417000 1.0080 0 + 22653 W1 6722 TIP3 OH2 OT -0.834000 15.9994 0 + 22654 W1 6722 TIP3 H1 HT 0.417000 1.0080 0 + 22655 W1 6722 TIP3 H2 HT 0.417000 1.0080 0 + 22656 W1 6723 TIP3 OH2 OT -0.834000 15.9994 0 + 22657 W1 6723 TIP3 H1 HT 0.417000 1.0080 0 + 22658 W1 6723 TIP3 H2 HT 0.417000 1.0080 0 + 22659 W1 6724 TIP3 OH2 OT -0.834000 15.9994 0 + 22660 W1 6724 TIP3 H1 HT 0.417000 1.0080 0 + 22661 W1 6724 TIP3 H2 HT 0.417000 1.0080 0 + 22662 W1 6725 TIP3 OH2 OT -0.834000 15.9994 0 + 22663 W1 6725 TIP3 H1 HT 0.417000 1.0080 0 + 22664 W1 6725 TIP3 H2 HT 0.417000 1.0080 0 + 22665 W1 6726 TIP3 OH2 OT -0.834000 15.9994 0 + 22666 W1 6726 TIP3 H1 HT 0.417000 1.0080 0 + 22667 W1 6726 TIP3 H2 HT 0.417000 1.0080 0 + 22668 W1 6727 TIP3 OH2 OT -0.834000 15.9994 0 + 22669 W1 6727 TIP3 H1 HT 0.417000 1.0080 0 + 22670 W1 6727 TIP3 H2 HT 0.417000 1.0080 0 + 22671 W1 6728 TIP3 OH2 OT -0.834000 15.9994 0 + 22672 W1 6728 TIP3 H1 HT 0.417000 1.0080 0 + 22673 W1 6728 TIP3 H2 HT 0.417000 1.0080 0 + 22674 W1 6729 TIP3 OH2 OT -0.834000 15.9994 0 + 22675 W1 6729 TIP3 H1 HT 0.417000 1.0080 0 + 22676 W1 6729 TIP3 H2 HT 0.417000 1.0080 0 + 22677 W1 6730 TIP3 OH2 OT -0.834000 15.9994 0 + 22678 W1 6730 TIP3 H1 HT 0.417000 1.0080 0 + 22679 W1 6730 TIP3 H2 HT 0.417000 1.0080 0 + 22680 W1 6731 TIP3 OH2 OT -0.834000 15.9994 0 + 22681 W1 6731 TIP3 H1 HT 0.417000 1.0080 0 + 22682 W1 6731 TIP3 H2 HT 0.417000 1.0080 0 + 22683 W1 6732 TIP3 OH2 OT -0.834000 15.9994 0 + 22684 W1 6732 TIP3 H1 HT 0.417000 1.0080 0 + 22685 W1 6732 TIP3 H2 HT 0.417000 1.0080 0 + 22686 W1 6733 TIP3 OH2 OT -0.834000 15.9994 0 + 22687 W1 6733 TIP3 H1 HT 0.417000 1.0080 0 + 22688 W1 6733 TIP3 H2 HT 0.417000 1.0080 0 + 22689 W1 6734 TIP3 OH2 OT -0.834000 15.9994 0 + 22690 W1 6734 TIP3 H1 HT 0.417000 1.0080 0 + 22691 W1 6734 TIP3 H2 HT 0.417000 1.0080 0 + 22692 W1 6735 TIP3 OH2 OT -0.834000 15.9994 0 + 22693 W1 6735 TIP3 H1 HT 0.417000 1.0080 0 + 22694 W1 6735 TIP3 H2 HT 0.417000 1.0080 0 + 22695 W1 6736 TIP3 OH2 OT -0.834000 15.9994 0 + 22696 W1 6736 TIP3 H1 HT 0.417000 1.0080 0 + 22697 W1 6736 TIP3 H2 HT 0.417000 1.0080 0 + 22698 W1 6737 TIP3 OH2 OT -0.834000 15.9994 0 + 22699 W1 6737 TIP3 H1 HT 0.417000 1.0080 0 + 22700 W1 6737 TIP3 H2 HT 0.417000 1.0080 0 + 22701 W1 6738 TIP3 OH2 OT -0.834000 15.9994 0 + 22702 W1 6738 TIP3 H1 HT 0.417000 1.0080 0 + 22703 W1 6738 TIP3 H2 HT 0.417000 1.0080 0 + 22704 W1 6739 TIP3 OH2 OT -0.834000 15.9994 0 + 22705 W1 6739 TIP3 H1 HT 0.417000 1.0080 0 + 22706 W1 6739 TIP3 H2 HT 0.417000 1.0080 0 + 22707 W1 6740 TIP3 OH2 OT -0.834000 15.9994 0 + 22708 W1 6740 TIP3 H1 HT 0.417000 1.0080 0 + 22709 W1 6740 TIP3 H2 HT 0.417000 1.0080 0 + 22710 W1 6741 TIP3 OH2 OT -0.834000 15.9994 0 + 22711 W1 6741 TIP3 H1 HT 0.417000 1.0080 0 + 22712 W1 6741 TIP3 H2 HT 0.417000 1.0080 0 + 22713 W1 6742 TIP3 OH2 OT -0.834000 15.9994 0 + 22714 W1 6742 TIP3 H1 HT 0.417000 1.0080 0 + 22715 W1 6742 TIP3 H2 HT 0.417000 1.0080 0 + 22716 W1 6743 TIP3 OH2 OT -0.834000 15.9994 0 + 22717 W1 6743 TIP3 H1 HT 0.417000 1.0080 0 + 22718 W1 6743 TIP3 H2 HT 0.417000 1.0080 0 + 22719 W1 6744 TIP3 OH2 OT -0.834000 15.9994 0 + 22720 W1 6744 TIP3 H1 HT 0.417000 1.0080 0 + 22721 W1 6744 TIP3 H2 HT 0.417000 1.0080 0 + 22722 W1 6745 TIP3 OH2 OT -0.834000 15.9994 0 + 22723 W1 6745 TIP3 H1 HT 0.417000 1.0080 0 + 22724 W1 6745 TIP3 H2 HT 0.417000 1.0080 0 + 22725 W1 6746 TIP3 OH2 OT -0.834000 15.9994 0 + 22726 W1 6746 TIP3 H1 HT 0.417000 1.0080 0 + 22727 W1 6746 TIP3 H2 HT 0.417000 1.0080 0 + 22728 W1 6747 TIP3 OH2 OT -0.834000 15.9994 0 + 22729 W1 6747 TIP3 H1 HT 0.417000 1.0080 0 + 22730 W1 6747 TIP3 H2 HT 0.417000 1.0080 0 + 22731 W1 6748 TIP3 OH2 OT -0.834000 15.9994 0 + 22732 W1 6748 TIP3 H1 HT 0.417000 1.0080 0 + 22733 W1 6748 TIP3 H2 HT 0.417000 1.0080 0 + 22734 W1 6749 TIP3 OH2 OT -0.834000 15.9994 0 + 22735 W1 6749 TIP3 H1 HT 0.417000 1.0080 0 + 22736 W1 6749 TIP3 H2 HT 0.417000 1.0080 0 + 22737 W1 6750 TIP3 OH2 OT -0.834000 15.9994 0 + 22738 W1 6750 TIP3 H1 HT 0.417000 1.0080 0 + 22739 W1 6750 TIP3 H2 HT 0.417000 1.0080 0 + 22740 W1 6751 TIP3 OH2 OT -0.834000 15.9994 0 + 22741 W1 6751 TIP3 H1 HT 0.417000 1.0080 0 + 22742 W1 6751 TIP3 H2 HT 0.417000 1.0080 0 + 22743 W1 6752 TIP3 OH2 OT -0.834000 15.9994 0 + 22744 W1 6752 TIP3 H1 HT 0.417000 1.0080 0 + 22745 W1 6752 TIP3 H2 HT 0.417000 1.0080 0 + 22746 W1 6753 TIP3 OH2 OT -0.834000 15.9994 0 + 22747 W1 6753 TIP3 H1 HT 0.417000 1.0080 0 + 22748 W1 6753 TIP3 H2 HT 0.417000 1.0080 0 + 22749 W1 6754 TIP3 OH2 OT -0.834000 15.9994 0 + 22750 W1 6754 TIP3 H1 HT 0.417000 1.0080 0 + 22751 W1 6754 TIP3 H2 HT 0.417000 1.0080 0 + 22752 W1 6755 TIP3 OH2 OT -0.834000 15.9994 0 + 22753 W1 6755 TIP3 H1 HT 0.417000 1.0080 0 + 22754 W1 6755 TIP3 H2 HT 0.417000 1.0080 0 + 22755 W1 6756 TIP3 OH2 OT -0.834000 15.9994 0 + 22756 W1 6756 TIP3 H1 HT 0.417000 1.0080 0 + 22757 W1 6756 TIP3 H2 HT 0.417000 1.0080 0 + 22758 W1 6757 TIP3 OH2 OT -0.834000 15.9994 0 + 22759 W1 6757 TIP3 H1 HT 0.417000 1.0080 0 + 22760 W1 6757 TIP3 H2 HT 0.417000 1.0080 0 + 22761 W1 6758 TIP3 OH2 OT -0.834000 15.9994 0 + 22762 W1 6758 TIP3 H1 HT 0.417000 1.0080 0 + 22763 W1 6758 TIP3 H2 HT 0.417000 1.0080 0 + 22764 W1 6759 TIP3 OH2 OT -0.834000 15.9994 0 + 22765 W1 6759 TIP3 H1 HT 0.417000 1.0080 0 + 22766 W1 6759 TIP3 H2 HT 0.417000 1.0080 0 + 22767 W1 6760 TIP3 OH2 OT -0.834000 15.9994 0 + 22768 W1 6760 TIP3 H1 HT 0.417000 1.0080 0 + 22769 W1 6760 TIP3 H2 HT 0.417000 1.0080 0 + 22770 W1 6761 TIP3 OH2 OT -0.834000 15.9994 0 + 22771 W1 6761 TIP3 H1 HT 0.417000 1.0080 0 + 22772 W1 6761 TIP3 H2 HT 0.417000 1.0080 0 + 22773 W1 6762 TIP3 OH2 OT -0.834000 15.9994 0 + 22774 W1 6762 TIP3 H1 HT 0.417000 1.0080 0 + 22775 W1 6762 TIP3 H2 HT 0.417000 1.0080 0 + 22776 W1 6763 TIP3 OH2 OT -0.834000 15.9994 0 + 22777 W1 6763 TIP3 H1 HT 0.417000 1.0080 0 + 22778 W1 6763 TIP3 H2 HT 0.417000 1.0080 0 + 22779 W1 6764 TIP3 OH2 OT -0.834000 15.9994 0 + 22780 W1 6764 TIP3 H1 HT 0.417000 1.0080 0 + 22781 W1 6764 TIP3 H2 HT 0.417000 1.0080 0 + 22782 W1 6765 TIP3 OH2 OT -0.834000 15.9994 0 + 22783 W1 6765 TIP3 H1 HT 0.417000 1.0080 0 + 22784 W1 6765 TIP3 H2 HT 0.417000 1.0080 0 + 22785 W1 6766 TIP3 OH2 OT -0.834000 15.9994 0 + 22786 W1 6766 TIP3 H1 HT 0.417000 1.0080 0 + 22787 W1 6766 TIP3 H2 HT 0.417000 1.0080 0 + 22788 W1 6767 TIP3 OH2 OT -0.834000 15.9994 0 + 22789 W1 6767 TIP3 H1 HT 0.417000 1.0080 0 + 22790 W1 6767 TIP3 H2 HT 0.417000 1.0080 0 + 22791 W1 6768 TIP3 OH2 OT -0.834000 15.9994 0 + 22792 W1 6768 TIP3 H1 HT 0.417000 1.0080 0 + 22793 W1 6768 TIP3 H2 HT 0.417000 1.0080 0 + 22794 W1 6769 TIP3 OH2 OT -0.834000 15.9994 0 + 22795 W1 6769 TIP3 H1 HT 0.417000 1.0080 0 + 22796 W1 6769 TIP3 H2 HT 0.417000 1.0080 0 + 22797 W1 6770 TIP3 OH2 OT -0.834000 15.9994 0 + 22798 W1 6770 TIP3 H1 HT 0.417000 1.0080 0 + 22799 W1 6770 TIP3 H2 HT 0.417000 1.0080 0 + 22800 W1 6771 TIP3 OH2 OT -0.834000 15.9994 0 + 22801 W1 6771 TIP3 H1 HT 0.417000 1.0080 0 + 22802 W1 6771 TIP3 H2 HT 0.417000 1.0080 0 + 22803 W1 6772 TIP3 OH2 OT -0.834000 15.9994 0 + 22804 W1 6772 TIP3 H1 HT 0.417000 1.0080 0 + 22805 W1 6772 TIP3 H2 HT 0.417000 1.0080 0 + 22806 W1 6773 TIP3 OH2 OT -0.834000 15.9994 0 + 22807 W1 6773 TIP3 H1 HT 0.417000 1.0080 0 + 22808 W1 6773 TIP3 H2 HT 0.417000 1.0080 0 + 22809 W1 6774 TIP3 OH2 OT -0.834000 15.9994 0 + 22810 W1 6774 TIP3 H1 HT 0.417000 1.0080 0 + 22811 W1 6774 TIP3 H2 HT 0.417000 1.0080 0 + 22812 W1 6775 TIP3 OH2 OT -0.834000 15.9994 0 + 22813 W1 6775 TIP3 H1 HT 0.417000 1.0080 0 + 22814 W1 6775 TIP3 H2 HT 0.417000 1.0080 0 + 22815 W1 6776 TIP3 OH2 OT -0.834000 15.9994 0 + 22816 W1 6776 TIP3 H1 HT 0.417000 1.0080 0 + 22817 W1 6776 TIP3 H2 HT 0.417000 1.0080 0 + 22818 W1 6777 TIP3 OH2 OT -0.834000 15.9994 0 + 22819 W1 6777 TIP3 H1 HT 0.417000 1.0080 0 + 22820 W1 6777 TIP3 H2 HT 0.417000 1.0080 0 + 22821 W1 6778 TIP3 OH2 OT -0.834000 15.9994 0 + 22822 W1 6778 TIP3 H1 HT 0.417000 1.0080 0 + 22823 W1 6778 TIP3 H2 HT 0.417000 1.0080 0 + 22824 W1 6779 TIP3 OH2 OT -0.834000 15.9994 0 + 22825 W1 6779 TIP3 H1 HT 0.417000 1.0080 0 + 22826 W1 6779 TIP3 H2 HT 0.417000 1.0080 0 + 22827 W1 6780 TIP3 OH2 OT -0.834000 15.9994 0 + 22828 W1 6780 TIP3 H1 HT 0.417000 1.0080 0 + 22829 W1 6780 TIP3 H2 HT 0.417000 1.0080 0 + 22830 W1 6781 TIP3 OH2 OT -0.834000 15.9994 0 + 22831 W1 6781 TIP3 H1 HT 0.417000 1.0080 0 + 22832 W1 6781 TIP3 H2 HT 0.417000 1.0080 0 + 22833 W1 6782 TIP3 OH2 OT -0.834000 15.9994 0 + 22834 W1 6782 TIP3 H1 HT 0.417000 1.0080 0 + 22835 W1 6782 TIP3 H2 HT 0.417000 1.0080 0 + 22836 W1 6783 TIP3 OH2 OT -0.834000 15.9994 0 + 22837 W1 6783 TIP3 H1 HT 0.417000 1.0080 0 + 22838 W1 6783 TIP3 H2 HT 0.417000 1.0080 0 + 22839 W1 6784 TIP3 OH2 OT -0.834000 15.9994 0 + 22840 W1 6784 TIP3 H1 HT 0.417000 1.0080 0 + 22841 W1 6784 TIP3 H2 HT 0.417000 1.0080 0 + 22842 W1 6785 TIP3 OH2 OT -0.834000 15.9994 0 + 22843 W1 6785 TIP3 H1 HT 0.417000 1.0080 0 + 22844 W1 6785 TIP3 H2 HT 0.417000 1.0080 0 + 22845 W1 6786 TIP3 OH2 OT -0.834000 15.9994 0 + 22846 W1 6786 TIP3 H1 HT 0.417000 1.0080 0 + 22847 W1 6786 TIP3 H2 HT 0.417000 1.0080 0 + 22848 W1 6787 TIP3 OH2 OT -0.834000 15.9994 0 + 22849 W1 6787 TIP3 H1 HT 0.417000 1.0080 0 + 22850 W1 6787 TIP3 H2 HT 0.417000 1.0080 0 + 22851 W1 6788 TIP3 OH2 OT -0.834000 15.9994 0 + 22852 W1 6788 TIP3 H1 HT 0.417000 1.0080 0 + 22853 W1 6788 TIP3 H2 HT 0.417000 1.0080 0 + 22854 W1 6789 TIP3 OH2 OT -0.834000 15.9994 0 + 22855 W1 6789 TIP3 H1 HT 0.417000 1.0080 0 + 22856 W1 6789 TIP3 H2 HT 0.417000 1.0080 0 + 22857 W1 6790 TIP3 OH2 OT -0.834000 15.9994 0 + 22858 W1 6790 TIP3 H1 HT 0.417000 1.0080 0 + 22859 W1 6790 TIP3 H2 HT 0.417000 1.0080 0 + 22860 W1 6791 TIP3 OH2 OT -0.834000 15.9994 0 + 22861 W1 6791 TIP3 H1 HT 0.417000 1.0080 0 + 22862 W1 6791 TIP3 H2 HT 0.417000 1.0080 0 + 22863 W1 6792 TIP3 OH2 OT -0.834000 15.9994 0 + 22864 W1 6792 TIP3 H1 HT 0.417000 1.0080 0 + 22865 W1 6792 TIP3 H2 HT 0.417000 1.0080 0 + 22866 W1 6793 TIP3 OH2 OT -0.834000 15.9994 0 + 22867 W1 6793 TIP3 H1 HT 0.417000 1.0080 0 + 22868 W1 6793 TIP3 H2 HT 0.417000 1.0080 0 + 22869 W1 6794 TIP3 OH2 OT -0.834000 15.9994 0 + 22870 W1 6794 TIP3 H1 HT 0.417000 1.0080 0 + 22871 W1 6794 TIP3 H2 HT 0.417000 1.0080 0 + 22872 W1 6795 TIP3 OH2 OT -0.834000 15.9994 0 + 22873 W1 6795 TIP3 H1 HT 0.417000 1.0080 0 + 22874 W1 6795 TIP3 H2 HT 0.417000 1.0080 0 + 22875 W1 6796 TIP3 OH2 OT -0.834000 15.9994 0 + 22876 W1 6796 TIP3 H1 HT 0.417000 1.0080 0 + 22877 W1 6796 TIP3 H2 HT 0.417000 1.0080 0 + 22878 W1 6797 TIP3 OH2 OT -0.834000 15.9994 0 + 22879 W1 6797 TIP3 H1 HT 0.417000 1.0080 0 + 22880 W1 6797 TIP3 H2 HT 0.417000 1.0080 0 + 22881 W1 6798 TIP3 OH2 OT -0.834000 15.9994 0 + 22882 W1 6798 TIP3 H1 HT 0.417000 1.0080 0 + 22883 W1 6798 TIP3 H2 HT 0.417000 1.0080 0 + 22884 W1 6799 TIP3 OH2 OT -0.834000 15.9994 0 + 22885 W1 6799 TIP3 H1 HT 0.417000 1.0080 0 + 22886 W1 6799 TIP3 H2 HT 0.417000 1.0080 0 + 22887 W1 6800 TIP3 OH2 OT -0.834000 15.9994 0 + 22888 W1 6800 TIP3 H1 HT 0.417000 1.0080 0 + 22889 W1 6800 TIP3 H2 HT 0.417000 1.0080 0 + 22890 W1 6801 TIP3 OH2 OT -0.834000 15.9994 0 + 22891 W1 6801 TIP3 H1 HT 0.417000 1.0080 0 + 22892 W1 6801 TIP3 H2 HT 0.417000 1.0080 0 + 22893 W1 6802 TIP3 OH2 OT -0.834000 15.9994 0 + 22894 W1 6802 TIP3 H1 HT 0.417000 1.0080 0 + 22895 W1 6802 TIP3 H2 HT 0.417000 1.0080 0 + 22896 W1 6803 TIP3 OH2 OT -0.834000 15.9994 0 + 22897 W1 6803 TIP3 H1 HT 0.417000 1.0080 0 + 22898 W1 6803 TIP3 H2 HT 0.417000 1.0080 0 + 22899 W1 6804 TIP3 OH2 OT -0.834000 15.9994 0 + 22900 W1 6804 TIP3 H1 HT 0.417000 1.0080 0 + 22901 W1 6804 TIP3 H2 HT 0.417000 1.0080 0 + 22902 W1 6805 TIP3 OH2 OT -0.834000 15.9994 0 + 22903 W1 6805 TIP3 H1 HT 0.417000 1.0080 0 + 22904 W1 6805 TIP3 H2 HT 0.417000 1.0080 0 + 22905 W1 6806 TIP3 OH2 OT -0.834000 15.9994 0 + 22906 W1 6806 TIP3 H1 HT 0.417000 1.0080 0 + 22907 W1 6806 TIP3 H2 HT 0.417000 1.0080 0 + 22908 W1 6807 TIP3 OH2 OT -0.834000 15.9994 0 + 22909 W1 6807 TIP3 H1 HT 0.417000 1.0080 0 + 22910 W1 6807 TIP3 H2 HT 0.417000 1.0080 0 + 22911 W1 6808 TIP3 OH2 OT -0.834000 15.9994 0 + 22912 W1 6808 TIP3 H1 HT 0.417000 1.0080 0 + 22913 W1 6808 TIP3 H2 HT 0.417000 1.0080 0 + 22914 W1 6809 TIP3 OH2 OT -0.834000 15.9994 0 + 22915 W1 6809 TIP3 H1 HT 0.417000 1.0080 0 + 22916 W1 6809 TIP3 H2 HT 0.417000 1.0080 0 + 22917 W1 6810 TIP3 OH2 OT -0.834000 15.9994 0 + 22918 W1 6810 TIP3 H1 HT 0.417000 1.0080 0 + 22919 W1 6810 TIP3 H2 HT 0.417000 1.0080 0 + 22920 W1 6811 TIP3 OH2 OT -0.834000 15.9994 0 + 22921 W1 6811 TIP3 H1 HT 0.417000 1.0080 0 + 22922 W1 6811 TIP3 H2 HT 0.417000 1.0080 0 + 22923 W1 6812 TIP3 OH2 OT -0.834000 15.9994 0 + 22924 W1 6812 TIP3 H1 HT 0.417000 1.0080 0 + 22925 W1 6812 TIP3 H2 HT 0.417000 1.0080 0 + 22926 W1 6813 TIP3 OH2 OT -0.834000 15.9994 0 + 22927 W1 6813 TIP3 H1 HT 0.417000 1.0080 0 + 22928 W1 6813 TIP3 H2 HT 0.417000 1.0080 0 + 22929 W1 6814 TIP3 OH2 OT -0.834000 15.9994 0 + 22930 W1 6814 TIP3 H1 HT 0.417000 1.0080 0 + 22931 W1 6814 TIP3 H2 HT 0.417000 1.0080 0 + 22932 W1 6815 TIP3 OH2 OT -0.834000 15.9994 0 + 22933 W1 6815 TIP3 H1 HT 0.417000 1.0080 0 + 22934 W1 6815 TIP3 H2 HT 0.417000 1.0080 0 + 22935 W1 6816 TIP3 OH2 OT -0.834000 15.9994 0 + 22936 W1 6816 TIP3 H1 HT 0.417000 1.0080 0 + 22937 W1 6816 TIP3 H2 HT 0.417000 1.0080 0 + 22938 W1 6817 TIP3 OH2 OT -0.834000 15.9994 0 + 22939 W1 6817 TIP3 H1 HT 0.417000 1.0080 0 + 22940 W1 6817 TIP3 H2 HT 0.417000 1.0080 0 + 22941 W1 6818 TIP3 OH2 OT -0.834000 15.9994 0 + 22942 W1 6818 TIP3 H1 HT 0.417000 1.0080 0 + 22943 W1 6818 TIP3 H2 HT 0.417000 1.0080 0 + 22944 W1 6819 TIP3 OH2 OT -0.834000 15.9994 0 + 22945 W1 6819 TIP3 H1 HT 0.417000 1.0080 0 + 22946 W1 6819 TIP3 H2 HT 0.417000 1.0080 0 + 22947 W1 6820 TIP3 OH2 OT -0.834000 15.9994 0 + 22948 W1 6820 TIP3 H1 HT 0.417000 1.0080 0 + 22949 W1 6820 TIP3 H2 HT 0.417000 1.0080 0 + 22950 W1 6821 TIP3 OH2 OT -0.834000 15.9994 0 + 22951 W1 6821 TIP3 H1 HT 0.417000 1.0080 0 + 22952 W1 6821 TIP3 H2 HT 0.417000 1.0080 0 + 22953 W1 6822 TIP3 OH2 OT -0.834000 15.9994 0 + 22954 W1 6822 TIP3 H1 HT 0.417000 1.0080 0 + 22955 W1 6822 TIP3 H2 HT 0.417000 1.0080 0 + 22956 W1 6823 TIP3 OH2 OT -0.834000 15.9994 0 + 22957 W1 6823 TIP3 H1 HT 0.417000 1.0080 0 + 22958 W1 6823 TIP3 H2 HT 0.417000 1.0080 0 + 22959 W1 6824 TIP3 OH2 OT -0.834000 15.9994 0 + 22960 W1 6824 TIP3 H1 HT 0.417000 1.0080 0 + 22961 W1 6824 TIP3 H2 HT 0.417000 1.0080 0 + 22962 W1 6825 TIP3 OH2 OT -0.834000 15.9994 0 + 22963 W1 6825 TIP3 H1 HT 0.417000 1.0080 0 + 22964 W1 6825 TIP3 H2 HT 0.417000 1.0080 0 + 22965 W1 6826 TIP3 OH2 OT -0.834000 15.9994 0 + 22966 W1 6826 TIP3 H1 HT 0.417000 1.0080 0 + 22967 W1 6826 TIP3 H2 HT 0.417000 1.0080 0 + 22968 W1 6827 TIP3 OH2 OT -0.834000 15.9994 0 + 22969 W1 6827 TIP3 H1 HT 0.417000 1.0080 0 + 22970 W1 6827 TIP3 H2 HT 0.417000 1.0080 0 + 22971 W1 6828 TIP3 OH2 OT -0.834000 15.9994 0 + 22972 W1 6828 TIP3 H1 HT 0.417000 1.0080 0 + 22973 W1 6828 TIP3 H2 HT 0.417000 1.0080 0 + 22974 W1 6829 TIP3 OH2 OT -0.834000 15.9994 0 + 22975 W1 6829 TIP3 H1 HT 0.417000 1.0080 0 + 22976 W1 6829 TIP3 H2 HT 0.417000 1.0080 0 + 22977 W1 6830 TIP3 OH2 OT -0.834000 15.9994 0 + 22978 W1 6830 TIP3 H1 HT 0.417000 1.0080 0 + 22979 W1 6830 TIP3 H2 HT 0.417000 1.0080 0 + 22980 W1 6831 TIP3 OH2 OT -0.834000 15.9994 0 + 22981 W1 6831 TIP3 H1 HT 0.417000 1.0080 0 + 22982 W1 6831 TIP3 H2 HT 0.417000 1.0080 0 + 22983 W1 6832 TIP3 OH2 OT -0.834000 15.9994 0 + 22984 W1 6832 TIP3 H1 HT 0.417000 1.0080 0 + 22985 W1 6832 TIP3 H2 HT 0.417000 1.0080 0 + 22986 W1 6833 TIP3 OH2 OT -0.834000 15.9994 0 + 22987 W1 6833 TIP3 H1 HT 0.417000 1.0080 0 + 22988 W1 6833 TIP3 H2 HT 0.417000 1.0080 0 + 22989 W1 6834 TIP3 OH2 OT -0.834000 15.9994 0 + 22990 W1 6834 TIP3 H1 HT 0.417000 1.0080 0 + 22991 W1 6834 TIP3 H2 HT 0.417000 1.0080 0 + 22992 W1 6835 TIP3 OH2 OT -0.834000 15.9994 0 + 22993 W1 6835 TIP3 H1 HT 0.417000 1.0080 0 + 22994 W1 6835 TIP3 H2 HT 0.417000 1.0080 0 + 22995 W1 6836 TIP3 OH2 OT -0.834000 15.9994 0 + 22996 W1 6836 TIP3 H1 HT 0.417000 1.0080 0 + 22997 W1 6836 TIP3 H2 HT 0.417000 1.0080 0 + 22998 W1 6837 TIP3 OH2 OT -0.834000 15.9994 0 + 22999 W1 6837 TIP3 H1 HT 0.417000 1.0080 0 + 23000 W1 6837 TIP3 H2 HT 0.417000 1.0080 0 + 23001 W1 6838 TIP3 OH2 OT -0.834000 15.9994 0 + 23002 W1 6838 TIP3 H1 HT 0.417000 1.0080 0 + 23003 W1 6838 TIP3 H2 HT 0.417000 1.0080 0 + 23004 W1 6839 TIP3 OH2 OT -0.834000 15.9994 0 + 23005 W1 6839 TIP3 H1 HT 0.417000 1.0080 0 + 23006 W1 6839 TIP3 H2 HT 0.417000 1.0080 0 + 23007 W1 6840 TIP3 OH2 OT -0.834000 15.9994 0 + 23008 W1 6840 TIP3 H1 HT 0.417000 1.0080 0 + 23009 W1 6840 TIP3 H2 HT 0.417000 1.0080 0 + 23010 W1 6841 TIP3 OH2 OT -0.834000 15.9994 0 + 23011 W1 6841 TIP3 H1 HT 0.417000 1.0080 0 + 23012 W1 6841 TIP3 H2 HT 0.417000 1.0080 0 + 23013 W1 6842 TIP3 OH2 OT -0.834000 15.9994 0 + 23014 W1 6842 TIP3 H1 HT 0.417000 1.0080 0 + 23015 W1 6842 TIP3 H2 HT 0.417000 1.0080 0 + 23016 W1 6843 TIP3 OH2 OT -0.834000 15.9994 0 + 23017 W1 6843 TIP3 H1 HT 0.417000 1.0080 0 + 23018 W1 6843 TIP3 H2 HT 0.417000 1.0080 0 + 23019 W1 6844 TIP3 OH2 OT -0.834000 15.9994 0 + 23020 W1 6844 TIP3 H1 HT 0.417000 1.0080 0 + 23021 W1 6844 TIP3 H2 HT 0.417000 1.0080 0 + 23022 W1 6845 TIP3 OH2 OT -0.834000 15.9994 0 + 23023 W1 6845 TIP3 H1 HT 0.417000 1.0080 0 + 23024 W1 6845 TIP3 H2 HT 0.417000 1.0080 0 + 23025 W1 6846 TIP3 OH2 OT -0.834000 15.9994 0 + 23026 W1 6846 TIP3 H1 HT 0.417000 1.0080 0 + 23027 W1 6846 TIP3 H2 HT 0.417000 1.0080 0 + 23028 W1 6847 TIP3 OH2 OT -0.834000 15.9994 0 + 23029 W1 6847 TIP3 H1 HT 0.417000 1.0080 0 + 23030 W1 6847 TIP3 H2 HT 0.417000 1.0080 0 + 23031 W1 6848 TIP3 OH2 OT -0.834000 15.9994 0 + 23032 W1 6848 TIP3 H1 HT 0.417000 1.0080 0 + 23033 W1 6848 TIP3 H2 HT 0.417000 1.0080 0 + 23034 W1 6849 TIP3 OH2 OT -0.834000 15.9994 0 + 23035 W1 6849 TIP3 H1 HT 0.417000 1.0080 0 + 23036 W1 6849 TIP3 H2 HT 0.417000 1.0080 0 + 23037 W1 6850 TIP3 OH2 OT -0.834000 15.9994 0 + 23038 W1 6850 TIP3 H1 HT 0.417000 1.0080 0 + 23039 W1 6850 TIP3 H2 HT 0.417000 1.0080 0 + 23040 W1 6851 TIP3 OH2 OT -0.834000 15.9994 0 + 23041 W1 6851 TIP3 H1 HT 0.417000 1.0080 0 + 23042 W1 6851 TIP3 H2 HT 0.417000 1.0080 0 + 23043 W1 6852 TIP3 OH2 OT -0.834000 15.9994 0 + 23044 W1 6852 TIP3 H1 HT 0.417000 1.0080 0 + 23045 W1 6852 TIP3 H2 HT 0.417000 1.0080 0 + 23046 W1 6853 TIP3 OH2 OT -0.834000 15.9994 0 + 23047 W1 6853 TIP3 H1 HT 0.417000 1.0080 0 + 23048 W1 6853 TIP3 H2 HT 0.417000 1.0080 0 + 23049 W1 6854 TIP3 OH2 OT -0.834000 15.9994 0 + 23050 W1 6854 TIP3 H1 HT 0.417000 1.0080 0 + 23051 W1 6854 TIP3 H2 HT 0.417000 1.0080 0 + 23052 W1 6855 TIP3 OH2 OT -0.834000 15.9994 0 + 23053 W1 6855 TIP3 H1 HT 0.417000 1.0080 0 + 23054 W1 6855 TIP3 H2 HT 0.417000 1.0080 0 + 23055 W1 6856 TIP3 OH2 OT -0.834000 15.9994 0 + 23056 W1 6856 TIP3 H1 HT 0.417000 1.0080 0 + 23057 W1 6856 TIP3 H2 HT 0.417000 1.0080 0 + 23058 W1 6857 TIP3 OH2 OT -0.834000 15.9994 0 + 23059 W1 6857 TIP3 H1 HT 0.417000 1.0080 0 + 23060 W1 6857 TIP3 H2 HT 0.417000 1.0080 0 + 23061 W1 6858 TIP3 OH2 OT -0.834000 15.9994 0 + 23062 W1 6858 TIP3 H1 HT 0.417000 1.0080 0 + 23063 W1 6858 TIP3 H2 HT 0.417000 1.0080 0 + 23064 W1 6859 TIP3 OH2 OT -0.834000 15.9994 0 + 23065 W1 6859 TIP3 H1 HT 0.417000 1.0080 0 + 23066 W1 6859 TIP3 H2 HT 0.417000 1.0080 0 + 23067 W1 6860 TIP3 OH2 OT -0.834000 15.9994 0 + 23068 W1 6860 TIP3 H1 HT 0.417000 1.0080 0 + 23069 W1 6860 TIP3 H2 HT 0.417000 1.0080 0 + 23070 W1 6861 TIP3 OH2 OT -0.834000 15.9994 0 + 23071 W1 6861 TIP3 H1 HT 0.417000 1.0080 0 + 23072 W1 6861 TIP3 H2 HT 0.417000 1.0080 0 + 23073 W1 6862 TIP3 OH2 OT -0.834000 15.9994 0 + 23074 W1 6862 TIP3 H1 HT 0.417000 1.0080 0 + 23075 W1 6862 TIP3 H2 HT 0.417000 1.0080 0 + 23076 W1 6863 TIP3 OH2 OT -0.834000 15.9994 0 + 23077 W1 6863 TIP3 H1 HT 0.417000 1.0080 0 + 23078 W1 6863 TIP3 H2 HT 0.417000 1.0080 0 + 23079 W1 6864 TIP3 OH2 OT -0.834000 15.9994 0 + 23080 W1 6864 TIP3 H1 HT 0.417000 1.0080 0 + 23081 W1 6864 TIP3 H2 HT 0.417000 1.0080 0 + 23082 W1 6865 TIP3 OH2 OT -0.834000 15.9994 0 + 23083 W1 6865 TIP3 H1 HT 0.417000 1.0080 0 + 23084 W1 6865 TIP3 H2 HT 0.417000 1.0080 0 + 23085 W1 6866 TIP3 OH2 OT -0.834000 15.9994 0 + 23086 W1 6866 TIP3 H1 HT 0.417000 1.0080 0 + 23087 W1 6866 TIP3 H2 HT 0.417000 1.0080 0 + 23088 W1 6867 TIP3 OH2 OT -0.834000 15.9994 0 + 23089 W1 6867 TIP3 H1 HT 0.417000 1.0080 0 + 23090 W1 6867 TIP3 H2 HT 0.417000 1.0080 0 + 23091 W1 6868 TIP3 OH2 OT -0.834000 15.9994 0 + 23092 W1 6868 TIP3 H1 HT 0.417000 1.0080 0 + 23093 W1 6868 TIP3 H2 HT 0.417000 1.0080 0 + 23094 W1 6869 TIP3 OH2 OT -0.834000 15.9994 0 + 23095 W1 6869 TIP3 H1 HT 0.417000 1.0080 0 + 23096 W1 6869 TIP3 H2 HT 0.417000 1.0080 0 + 23097 W1 6870 TIP3 OH2 OT -0.834000 15.9994 0 + 23098 W1 6870 TIP3 H1 HT 0.417000 1.0080 0 + 23099 W1 6870 TIP3 H2 HT 0.417000 1.0080 0 + 23100 W1 6871 TIP3 OH2 OT -0.834000 15.9994 0 + 23101 W1 6871 TIP3 H1 HT 0.417000 1.0080 0 + 23102 W1 6871 TIP3 H2 HT 0.417000 1.0080 0 + 23103 W1 6872 TIP3 OH2 OT -0.834000 15.9994 0 + 23104 W1 6872 TIP3 H1 HT 0.417000 1.0080 0 + 23105 W1 6872 TIP3 H2 HT 0.417000 1.0080 0 + 23106 W1 6873 TIP3 OH2 OT -0.834000 15.9994 0 + 23107 W1 6873 TIP3 H1 HT 0.417000 1.0080 0 + 23108 W1 6873 TIP3 H2 HT 0.417000 1.0080 0 + 23109 W1 6874 TIP3 OH2 OT -0.834000 15.9994 0 + 23110 W1 6874 TIP3 H1 HT 0.417000 1.0080 0 + 23111 W1 6874 TIP3 H2 HT 0.417000 1.0080 0 + 23112 W1 6875 TIP3 OH2 OT -0.834000 15.9994 0 + 23113 W1 6875 TIP3 H1 HT 0.417000 1.0080 0 + 23114 W1 6875 TIP3 H2 HT 0.417000 1.0080 0 + 23115 W1 6876 TIP3 OH2 OT -0.834000 15.9994 0 + 23116 W1 6876 TIP3 H1 HT 0.417000 1.0080 0 + 23117 W1 6876 TIP3 H2 HT 0.417000 1.0080 0 + 23118 W1 6877 TIP3 OH2 OT -0.834000 15.9994 0 + 23119 W1 6877 TIP3 H1 HT 0.417000 1.0080 0 + 23120 W1 6877 TIP3 H2 HT 0.417000 1.0080 0 + 23121 W1 6878 TIP3 OH2 OT -0.834000 15.9994 0 + 23122 W1 6878 TIP3 H1 HT 0.417000 1.0080 0 + 23123 W1 6878 TIP3 H2 HT 0.417000 1.0080 0 + 23124 W1 6879 TIP3 OH2 OT -0.834000 15.9994 0 + 23125 W1 6879 TIP3 H1 HT 0.417000 1.0080 0 + 23126 W1 6879 TIP3 H2 HT 0.417000 1.0080 0 + 23127 W1 6880 TIP3 OH2 OT -0.834000 15.9994 0 + 23128 W1 6880 TIP3 H1 HT 0.417000 1.0080 0 + 23129 W1 6880 TIP3 H2 HT 0.417000 1.0080 0 + 23130 W1 6881 TIP3 OH2 OT -0.834000 15.9994 0 + 23131 W1 6881 TIP3 H1 HT 0.417000 1.0080 0 + 23132 W1 6881 TIP3 H2 HT 0.417000 1.0080 0 + 23133 W1 6882 TIP3 OH2 OT -0.834000 15.9994 0 + 23134 W1 6882 TIP3 H1 HT 0.417000 1.0080 0 + 23135 W1 6882 TIP3 H2 HT 0.417000 1.0080 0 + 23136 W1 6883 TIP3 OH2 OT -0.834000 15.9994 0 + 23137 W1 6883 TIP3 H1 HT 0.417000 1.0080 0 + 23138 W1 6883 TIP3 H2 HT 0.417000 1.0080 0 + 23139 W1 6884 TIP3 OH2 OT -0.834000 15.9994 0 + 23140 W1 6884 TIP3 H1 HT 0.417000 1.0080 0 + 23141 W1 6884 TIP3 H2 HT 0.417000 1.0080 0 + 23142 W1 6885 TIP3 OH2 OT -0.834000 15.9994 0 + 23143 W1 6885 TIP3 H1 HT 0.417000 1.0080 0 + 23144 W1 6885 TIP3 H2 HT 0.417000 1.0080 0 + 23145 W1 6886 TIP3 OH2 OT -0.834000 15.9994 0 + 23146 W1 6886 TIP3 H1 HT 0.417000 1.0080 0 + 23147 W1 6886 TIP3 H2 HT 0.417000 1.0080 0 + 23148 W1 6887 TIP3 OH2 OT -0.834000 15.9994 0 + 23149 W1 6887 TIP3 H1 HT 0.417000 1.0080 0 + 23150 W1 6887 TIP3 H2 HT 0.417000 1.0080 0 + 23151 W1 6888 TIP3 OH2 OT -0.834000 15.9994 0 + 23152 W1 6888 TIP3 H1 HT 0.417000 1.0080 0 + 23153 W1 6888 TIP3 H2 HT 0.417000 1.0080 0 + 23154 W1 6889 TIP3 OH2 OT -0.834000 15.9994 0 + 23155 W1 6889 TIP3 H1 HT 0.417000 1.0080 0 + 23156 W1 6889 TIP3 H2 HT 0.417000 1.0080 0 + 23157 W1 6890 TIP3 OH2 OT -0.834000 15.9994 0 + 23158 W1 6890 TIP3 H1 HT 0.417000 1.0080 0 + 23159 W1 6890 TIP3 H2 HT 0.417000 1.0080 0 + 23160 W1 6891 TIP3 OH2 OT -0.834000 15.9994 0 + 23161 W1 6891 TIP3 H1 HT 0.417000 1.0080 0 + 23162 W1 6891 TIP3 H2 HT 0.417000 1.0080 0 + 23163 W1 6892 TIP3 OH2 OT -0.834000 15.9994 0 + 23164 W1 6892 TIP3 H1 HT 0.417000 1.0080 0 + 23165 W1 6892 TIP3 H2 HT 0.417000 1.0080 0 + 23166 W1 6893 TIP3 OH2 OT -0.834000 15.9994 0 + 23167 W1 6893 TIP3 H1 HT 0.417000 1.0080 0 + 23168 W1 6893 TIP3 H2 HT 0.417000 1.0080 0 + 23169 W1 6894 TIP3 OH2 OT -0.834000 15.9994 0 + 23170 W1 6894 TIP3 H1 HT 0.417000 1.0080 0 + 23171 W1 6894 TIP3 H2 HT 0.417000 1.0080 0 + 23172 W1 6895 TIP3 OH2 OT -0.834000 15.9994 0 + 23173 W1 6895 TIP3 H1 HT 0.417000 1.0080 0 + 23174 W1 6895 TIP3 H2 HT 0.417000 1.0080 0 + 23175 W1 6896 TIP3 OH2 OT -0.834000 15.9994 0 + 23176 W1 6896 TIP3 H1 HT 0.417000 1.0080 0 + 23177 W1 6896 TIP3 H2 HT 0.417000 1.0080 0 + 23178 W1 6897 TIP3 OH2 OT -0.834000 15.9994 0 + 23179 W1 6897 TIP3 H1 HT 0.417000 1.0080 0 + 23180 W1 6897 TIP3 H2 HT 0.417000 1.0080 0 + 23181 W1 6898 TIP3 OH2 OT -0.834000 15.9994 0 + 23182 W1 6898 TIP3 H1 HT 0.417000 1.0080 0 + 23183 W1 6898 TIP3 H2 HT 0.417000 1.0080 0 + 23184 W1 6899 TIP3 OH2 OT -0.834000 15.9994 0 + 23185 W1 6899 TIP3 H1 HT 0.417000 1.0080 0 + 23186 W1 6899 TIP3 H2 HT 0.417000 1.0080 0 + 23187 W1 6900 TIP3 OH2 OT -0.834000 15.9994 0 + 23188 W1 6900 TIP3 H1 HT 0.417000 1.0080 0 + 23189 W1 6900 TIP3 H2 HT 0.417000 1.0080 0 + 23190 W1 6901 TIP3 OH2 OT -0.834000 15.9994 0 + 23191 W1 6901 TIP3 H1 HT 0.417000 1.0080 0 + 23192 W1 6901 TIP3 H2 HT 0.417000 1.0080 0 + 23193 W1 6902 TIP3 OH2 OT -0.834000 15.9994 0 + 23194 W1 6902 TIP3 H1 HT 0.417000 1.0080 0 + 23195 W1 6902 TIP3 H2 HT 0.417000 1.0080 0 + 23196 W1 6903 TIP3 OH2 OT -0.834000 15.9994 0 + 23197 W1 6903 TIP3 H1 HT 0.417000 1.0080 0 + 23198 W1 6903 TIP3 H2 HT 0.417000 1.0080 0 + 23199 W1 6904 TIP3 OH2 OT -0.834000 15.9994 0 + 23200 W1 6904 TIP3 H1 HT 0.417000 1.0080 0 + 23201 W1 6904 TIP3 H2 HT 0.417000 1.0080 0 + 23202 W1 6905 TIP3 OH2 OT -0.834000 15.9994 0 + 23203 W1 6905 TIP3 H1 HT 0.417000 1.0080 0 + 23204 W1 6905 TIP3 H2 HT 0.417000 1.0080 0 + 23205 W1 6906 TIP3 OH2 OT -0.834000 15.9994 0 + 23206 W1 6906 TIP3 H1 HT 0.417000 1.0080 0 + 23207 W1 6906 TIP3 H2 HT 0.417000 1.0080 0 + 23208 W1 6907 TIP3 OH2 OT -0.834000 15.9994 0 + 23209 W1 6907 TIP3 H1 HT 0.417000 1.0080 0 + 23210 W1 6907 TIP3 H2 HT 0.417000 1.0080 0 + 23211 W1 6908 TIP3 OH2 OT -0.834000 15.9994 0 + 23212 W1 6908 TIP3 H1 HT 0.417000 1.0080 0 + 23213 W1 6908 TIP3 H2 HT 0.417000 1.0080 0 + 23214 W1 6909 TIP3 OH2 OT -0.834000 15.9994 0 + 23215 W1 6909 TIP3 H1 HT 0.417000 1.0080 0 + 23216 W1 6909 TIP3 H2 HT 0.417000 1.0080 0 + 23217 W1 6910 TIP3 OH2 OT -0.834000 15.9994 0 + 23218 W1 6910 TIP3 H1 HT 0.417000 1.0080 0 + 23219 W1 6910 TIP3 H2 HT 0.417000 1.0080 0 + 23220 W1 6911 TIP3 OH2 OT -0.834000 15.9994 0 + 23221 W1 6911 TIP3 H1 HT 0.417000 1.0080 0 + 23222 W1 6911 TIP3 H2 HT 0.417000 1.0080 0 + 23223 W1 6912 TIP3 OH2 OT -0.834000 15.9994 0 + 23224 W1 6912 TIP3 H1 HT 0.417000 1.0080 0 + 23225 W1 6912 TIP3 H2 HT 0.417000 1.0080 0 + 23226 W1 6913 TIP3 OH2 OT -0.834000 15.9994 0 + 23227 W1 6913 TIP3 H1 HT 0.417000 1.0080 0 + 23228 W1 6913 TIP3 H2 HT 0.417000 1.0080 0 + 23229 W1 6914 TIP3 OH2 OT -0.834000 15.9994 0 + 23230 W1 6914 TIP3 H1 HT 0.417000 1.0080 0 + 23231 W1 6914 TIP3 H2 HT 0.417000 1.0080 0 + 23232 W1 6915 TIP3 OH2 OT -0.834000 15.9994 0 + 23233 W1 6915 TIP3 H1 HT 0.417000 1.0080 0 + 23234 W1 6915 TIP3 H2 HT 0.417000 1.0080 0 + 23235 W1 6916 TIP3 OH2 OT -0.834000 15.9994 0 + 23236 W1 6916 TIP3 H1 HT 0.417000 1.0080 0 + 23237 W1 6916 TIP3 H2 HT 0.417000 1.0080 0 + 23238 W1 6917 TIP3 OH2 OT -0.834000 15.9994 0 + 23239 W1 6917 TIP3 H1 HT 0.417000 1.0080 0 + 23240 W1 6917 TIP3 H2 HT 0.417000 1.0080 0 + 23241 W1 6918 TIP3 OH2 OT -0.834000 15.9994 0 + 23242 W1 6918 TIP3 H1 HT 0.417000 1.0080 0 + 23243 W1 6918 TIP3 H2 HT 0.417000 1.0080 0 + 23244 W1 6919 TIP3 OH2 OT -0.834000 15.9994 0 + 23245 W1 6919 TIP3 H1 HT 0.417000 1.0080 0 + 23246 W1 6919 TIP3 H2 HT 0.417000 1.0080 0 + 23247 W1 6920 TIP3 OH2 OT -0.834000 15.9994 0 + 23248 W1 6920 TIP3 H1 HT 0.417000 1.0080 0 + 23249 W1 6920 TIP3 H2 HT 0.417000 1.0080 0 + 23250 W1 6921 TIP3 OH2 OT -0.834000 15.9994 0 + 23251 W1 6921 TIP3 H1 HT 0.417000 1.0080 0 + 23252 W1 6921 TIP3 H2 HT 0.417000 1.0080 0 + 23253 W1 6922 TIP3 OH2 OT -0.834000 15.9994 0 + 23254 W1 6922 TIP3 H1 HT 0.417000 1.0080 0 + 23255 W1 6922 TIP3 H2 HT 0.417000 1.0080 0 + 23256 W1 6923 TIP3 OH2 OT -0.834000 15.9994 0 + 23257 W1 6923 TIP3 H1 HT 0.417000 1.0080 0 + 23258 W1 6923 TIP3 H2 HT 0.417000 1.0080 0 + 23259 W1 6924 TIP3 OH2 OT -0.834000 15.9994 0 + 23260 W1 6924 TIP3 H1 HT 0.417000 1.0080 0 + 23261 W1 6924 TIP3 H2 HT 0.417000 1.0080 0 + 23262 W1 6925 TIP3 OH2 OT -0.834000 15.9994 0 + 23263 W1 6925 TIP3 H1 HT 0.417000 1.0080 0 + 23264 W1 6925 TIP3 H2 HT 0.417000 1.0080 0 + 23265 W1 6926 TIP3 OH2 OT -0.834000 15.9994 0 + 23266 W1 6926 TIP3 H1 HT 0.417000 1.0080 0 + 23267 W1 6926 TIP3 H2 HT 0.417000 1.0080 0 + 23268 W1 6927 TIP3 OH2 OT -0.834000 15.9994 0 + 23269 W1 6927 TIP3 H1 HT 0.417000 1.0080 0 + 23270 W1 6927 TIP3 H2 HT 0.417000 1.0080 0 + 23271 W1 6928 TIP3 OH2 OT -0.834000 15.9994 0 + 23272 W1 6928 TIP3 H1 HT 0.417000 1.0080 0 + 23273 W1 6928 TIP3 H2 HT 0.417000 1.0080 0 + 23274 W1 6929 TIP3 OH2 OT -0.834000 15.9994 0 + 23275 W1 6929 TIP3 H1 HT 0.417000 1.0080 0 + 23276 W1 6929 TIP3 H2 HT 0.417000 1.0080 0 + 23277 W1 6930 TIP3 OH2 OT -0.834000 15.9994 0 + 23278 W1 6930 TIP3 H1 HT 0.417000 1.0080 0 + 23279 W1 6930 TIP3 H2 HT 0.417000 1.0080 0 + 23280 W1 6931 TIP3 OH2 OT -0.834000 15.9994 0 + 23281 W1 6931 TIP3 H1 HT 0.417000 1.0080 0 + 23282 W1 6931 TIP3 H2 HT 0.417000 1.0080 0 + 23283 W1 6932 TIP3 OH2 OT -0.834000 15.9994 0 + 23284 W1 6932 TIP3 H1 HT 0.417000 1.0080 0 + 23285 W1 6932 TIP3 H2 HT 0.417000 1.0080 0 + 23286 W1 6933 TIP3 OH2 OT -0.834000 15.9994 0 + 23287 W1 6933 TIP3 H1 HT 0.417000 1.0080 0 + 23288 W1 6933 TIP3 H2 HT 0.417000 1.0080 0 + 23289 W1 6934 TIP3 OH2 OT -0.834000 15.9994 0 + 23290 W1 6934 TIP3 H1 HT 0.417000 1.0080 0 + 23291 W1 6934 TIP3 H2 HT 0.417000 1.0080 0 + 23292 W1 6935 TIP3 OH2 OT -0.834000 15.9994 0 + 23293 W1 6935 TIP3 H1 HT 0.417000 1.0080 0 + 23294 W1 6935 TIP3 H2 HT 0.417000 1.0080 0 + 23295 W1 6936 TIP3 OH2 OT -0.834000 15.9994 0 + 23296 W1 6936 TIP3 H1 HT 0.417000 1.0080 0 + 23297 W1 6936 TIP3 H2 HT 0.417000 1.0080 0 + 23298 W1 6937 TIP3 OH2 OT -0.834000 15.9994 0 + 23299 W1 6937 TIP3 H1 HT 0.417000 1.0080 0 + 23300 W1 6937 TIP3 H2 HT 0.417000 1.0080 0 + 23301 W1 6938 TIP3 OH2 OT -0.834000 15.9994 0 + 23302 W1 6938 TIP3 H1 HT 0.417000 1.0080 0 + 23303 W1 6938 TIP3 H2 HT 0.417000 1.0080 0 + 23304 W1 6939 TIP3 OH2 OT -0.834000 15.9994 0 + 23305 W1 6939 TIP3 H1 HT 0.417000 1.0080 0 + 23306 W1 6939 TIP3 H2 HT 0.417000 1.0080 0 + 23307 W1 6940 TIP3 OH2 OT -0.834000 15.9994 0 + 23308 W1 6940 TIP3 H1 HT 0.417000 1.0080 0 + 23309 W1 6940 TIP3 H2 HT 0.417000 1.0080 0 + 23310 W1 6941 TIP3 OH2 OT -0.834000 15.9994 0 + 23311 W1 6941 TIP3 H1 HT 0.417000 1.0080 0 + 23312 W1 6941 TIP3 H2 HT 0.417000 1.0080 0 + 23313 W1 6942 TIP3 OH2 OT -0.834000 15.9994 0 + 23314 W1 6942 TIP3 H1 HT 0.417000 1.0080 0 + 23315 W1 6942 TIP3 H2 HT 0.417000 1.0080 0 + 23316 W1 6943 TIP3 OH2 OT -0.834000 15.9994 0 + 23317 W1 6943 TIP3 H1 HT 0.417000 1.0080 0 + 23318 W1 6943 TIP3 H2 HT 0.417000 1.0080 0 + 23319 W1 6944 TIP3 OH2 OT -0.834000 15.9994 0 + 23320 W1 6944 TIP3 H1 HT 0.417000 1.0080 0 + 23321 W1 6944 TIP3 H2 HT 0.417000 1.0080 0 + 23322 W1 6945 TIP3 OH2 OT -0.834000 15.9994 0 + 23323 W1 6945 TIP3 H1 HT 0.417000 1.0080 0 + 23324 W1 6945 TIP3 H2 HT 0.417000 1.0080 0 + 23325 W1 6946 TIP3 OH2 OT -0.834000 15.9994 0 + 23326 W1 6946 TIP3 H1 HT 0.417000 1.0080 0 + 23327 W1 6946 TIP3 H2 HT 0.417000 1.0080 0 + 23328 W1 6947 TIP3 OH2 OT -0.834000 15.9994 0 + 23329 W1 6947 TIP3 H1 HT 0.417000 1.0080 0 + 23330 W1 6947 TIP3 H2 HT 0.417000 1.0080 0 + 23331 W1 6948 TIP3 OH2 OT -0.834000 15.9994 0 + 23332 W1 6948 TIP3 H1 HT 0.417000 1.0080 0 + 23333 W1 6948 TIP3 H2 HT 0.417000 1.0080 0 + 23334 W1 6949 TIP3 OH2 OT -0.834000 15.9994 0 + 23335 W1 6949 TIP3 H1 HT 0.417000 1.0080 0 + 23336 W1 6949 TIP3 H2 HT 0.417000 1.0080 0 + 23337 W1 6950 TIP3 OH2 OT -0.834000 15.9994 0 + 23338 W1 6950 TIP3 H1 HT 0.417000 1.0080 0 + 23339 W1 6950 TIP3 H2 HT 0.417000 1.0080 0 + 23340 W1 6951 TIP3 OH2 OT -0.834000 15.9994 0 + 23341 W1 6951 TIP3 H1 HT 0.417000 1.0080 0 + 23342 W1 6951 TIP3 H2 HT 0.417000 1.0080 0 + 23343 W1 6952 TIP3 OH2 OT -0.834000 15.9994 0 + 23344 W1 6952 TIP3 H1 HT 0.417000 1.0080 0 + 23345 W1 6952 TIP3 H2 HT 0.417000 1.0080 0 + 23346 W1 6953 TIP3 OH2 OT -0.834000 15.9994 0 + 23347 W1 6953 TIP3 H1 HT 0.417000 1.0080 0 + 23348 W1 6953 TIP3 H2 HT 0.417000 1.0080 0 + 23349 W1 6954 TIP3 OH2 OT -0.834000 15.9994 0 + 23350 W1 6954 TIP3 H1 HT 0.417000 1.0080 0 + 23351 W1 6954 TIP3 H2 HT 0.417000 1.0080 0 + 23352 W1 6955 TIP3 OH2 OT -0.834000 15.9994 0 + 23353 W1 6955 TIP3 H1 HT 0.417000 1.0080 0 + 23354 W1 6955 TIP3 H2 HT 0.417000 1.0080 0 + 23355 W1 6956 TIP3 OH2 OT -0.834000 15.9994 0 + 23356 W1 6956 TIP3 H1 HT 0.417000 1.0080 0 + 23357 W1 6956 TIP3 H2 HT 0.417000 1.0080 0 + 23358 W1 6957 TIP3 OH2 OT -0.834000 15.9994 0 + 23359 W1 6957 TIP3 H1 HT 0.417000 1.0080 0 + 23360 W1 6957 TIP3 H2 HT 0.417000 1.0080 0 + 23361 W1 6958 TIP3 OH2 OT -0.834000 15.9994 0 + 23362 W1 6958 TIP3 H1 HT 0.417000 1.0080 0 + 23363 W1 6958 TIP3 H2 HT 0.417000 1.0080 0 + 23364 W1 6959 TIP3 OH2 OT -0.834000 15.9994 0 + 23365 W1 6959 TIP3 H1 HT 0.417000 1.0080 0 + 23366 W1 6959 TIP3 H2 HT 0.417000 1.0080 0 + 23367 W1 6960 TIP3 OH2 OT -0.834000 15.9994 0 + 23368 W1 6960 TIP3 H1 HT 0.417000 1.0080 0 + 23369 W1 6960 TIP3 H2 HT 0.417000 1.0080 0 + 23370 W1 6961 TIP3 OH2 OT -0.834000 15.9994 0 + 23371 W1 6961 TIP3 H1 HT 0.417000 1.0080 0 + 23372 W1 6961 TIP3 H2 HT 0.417000 1.0080 0 + 23373 W1 6962 TIP3 OH2 OT -0.834000 15.9994 0 + 23374 W1 6962 TIP3 H1 HT 0.417000 1.0080 0 + 23375 W1 6962 TIP3 H2 HT 0.417000 1.0080 0 + 23376 W1 6963 TIP3 OH2 OT -0.834000 15.9994 0 + 23377 W1 6963 TIP3 H1 HT 0.417000 1.0080 0 + 23378 W1 6963 TIP3 H2 HT 0.417000 1.0080 0 + 23379 W1 6964 TIP3 OH2 OT -0.834000 15.9994 0 + 23380 W1 6964 TIP3 H1 HT 0.417000 1.0080 0 + 23381 W1 6964 TIP3 H2 HT 0.417000 1.0080 0 + 23382 W1 6965 TIP3 OH2 OT -0.834000 15.9994 0 + 23383 W1 6965 TIP3 H1 HT 0.417000 1.0080 0 + 23384 W1 6965 TIP3 H2 HT 0.417000 1.0080 0 + 23385 W1 6966 TIP3 OH2 OT -0.834000 15.9994 0 + 23386 W1 6966 TIP3 H1 HT 0.417000 1.0080 0 + 23387 W1 6966 TIP3 H2 HT 0.417000 1.0080 0 + 23388 W1 6967 TIP3 OH2 OT -0.834000 15.9994 0 + 23389 W1 6967 TIP3 H1 HT 0.417000 1.0080 0 + 23390 W1 6967 TIP3 H2 HT 0.417000 1.0080 0 + 23391 W1 6968 TIP3 OH2 OT -0.834000 15.9994 0 + 23392 W1 6968 TIP3 H1 HT 0.417000 1.0080 0 + 23393 W1 6968 TIP3 H2 HT 0.417000 1.0080 0 + 23394 W1 6969 TIP3 OH2 OT -0.834000 15.9994 0 + 23395 W1 6969 TIP3 H1 HT 0.417000 1.0080 0 + 23396 W1 6969 TIP3 H2 HT 0.417000 1.0080 0 + 23397 W1 6970 TIP3 OH2 OT -0.834000 15.9994 0 + 23398 W1 6970 TIP3 H1 HT 0.417000 1.0080 0 + 23399 W1 6970 TIP3 H2 HT 0.417000 1.0080 0 + 23400 W1 6971 TIP3 OH2 OT -0.834000 15.9994 0 + 23401 W1 6971 TIP3 H1 HT 0.417000 1.0080 0 + 23402 W1 6971 TIP3 H2 HT 0.417000 1.0080 0 + 23403 W1 6972 TIP3 OH2 OT -0.834000 15.9994 0 + 23404 W1 6972 TIP3 H1 HT 0.417000 1.0080 0 + 23405 W1 6972 TIP3 H2 HT 0.417000 1.0080 0 + 23406 W1 6973 TIP3 OH2 OT -0.834000 15.9994 0 + 23407 W1 6973 TIP3 H1 HT 0.417000 1.0080 0 + 23408 W1 6973 TIP3 H2 HT 0.417000 1.0080 0 + 23409 W1 6974 TIP3 OH2 OT -0.834000 15.9994 0 + 23410 W1 6974 TIP3 H1 HT 0.417000 1.0080 0 + 23411 W1 6974 TIP3 H2 HT 0.417000 1.0080 0 + 23412 W1 6975 TIP3 OH2 OT -0.834000 15.9994 0 + 23413 W1 6975 TIP3 H1 HT 0.417000 1.0080 0 + 23414 W1 6975 TIP3 H2 HT 0.417000 1.0080 0 + 23415 W1 6976 TIP3 OH2 OT -0.834000 15.9994 0 + 23416 W1 6976 TIP3 H1 HT 0.417000 1.0080 0 + 23417 W1 6976 TIP3 H2 HT 0.417000 1.0080 0 + 23418 W1 6977 TIP3 OH2 OT -0.834000 15.9994 0 + 23419 W1 6977 TIP3 H1 HT 0.417000 1.0080 0 + 23420 W1 6977 TIP3 H2 HT 0.417000 1.0080 0 + 23421 W1 6978 TIP3 OH2 OT -0.834000 15.9994 0 + 23422 W1 6978 TIP3 H1 HT 0.417000 1.0080 0 + 23423 W1 6978 TIP3 H2 HT 0.417000 1.0080 0 + 23424 W1 6979 TIP3 OH2 OT -0.834000 15.9994 0 + 23425 W1 6979 TIP3 H1 HT 0.417000 1.0080 0 + 23426 W1 6979 TIP3 H2 HT 0.417000 1.0080 0 + 23427 W1 6980 TIP3 OH2 OT -0.834000 15.9994 0 + 23428 W1 6980 TIP3 H1 HT 0.417000 1.0080 0 + 23429 W1 6980 TIP3 H2 HT 0.417000 1.0080 0 + 23430 W1 6981 TIP3 OH2 OT -0.834000 15.9994 0 + 23431 W1 6981 TIP3 H1 HT 0.417000 1.0080 0 + 23432 W1 6981 TIP3 H2 HT 0.417000 1.0080 0 + 23433 W1 6982 TIP3 OH2 OT -0.834000 15.9994 0 + 23434 W1 6982 TIP3 H1 HT 0.417000 1.0080 0 + 23435 W1 6982 TIP3 H2 HT 0.417000 1.0080 0 + 23436 W1 6983 TIP3 OH2 OT -0.834000 15.9994 0 + 23437 W1 6983 TIP3 H1 HT 0.417000 1.0080 0 + 23438 W1 6983 TIP3 H2 HT 0.417000 1.0080 0 + 23439 W1 6984 TIP3 OH2 OT -0.834000 15.9994 0 + 23440 W1 6984 TIP3 H1 HT 0.417000 1.0080 0 + 23441 W1 6984 TIP3 H2 HT 0.417000 1.0080 0 + 23442 W1 6985 TIP3 OH2 OT -0.834000 15.9994 0 + 23443 W1 6985 TIP3 H1 HT 0.417000 1.0080 0 + 23444 W1 6985 TIP3 H2 HT 0.417000 1.0080 0 + 23445 W1 6986 TIP3 OH2 OT -0.834000 15.9994 0 + 23446 W1 6986 TIP3 H1 HT 0.417000 1.0080 0 + 23447 W1 6986 TIP3 H2 HT 0.417000 1.0080 0 + 23448 W1 6987 TIP3 OH2 OT -0.834000 15.9994 0 + 23449 W1 6987 TIP3 H1 HT 0.417000 1.0080 0 + 23450 W1 6987 TIP3 H2 HT 0.417000 1.0080 0 + 23451 W1 6988 TIP3 OH2 OT -0.834000 15.9994 0 + 23452 W1 6988 TIP3 H1 HT 0.417000 1.0080 0 + 23453 W1 6988 TIP3 H2 HT 0.417000 1.0080 0 + 23454 W1 6989 TIP3 OH2 OT -0.834000 15.9994 0 + 23455 W1 6989 TIP3 H1 HT 0.417000 1.0080 0 + 23456 W1 6989 TIP3 H2 HT 0.417000 1.0080 0 + 23457 W1 6990 TIP3 OH2 OT -0.834000 15.9994 0 + 23458 W1 6990 TIP3 H1 HT 0.417000 1.0080 0 + 23459 W1 6990 TIP3 H2 HT 0.417000 1.0080 0 + 23460 W1 6991 TIP3 OH2 OT -0.834000 15.9994 0 + 23461 W1 6991 TIP3 H1 HT 0.417000 1.0080 0 + 23462 W1 6991 TIP3 H2 HT 0.417000 1.0080 0 + 23463 W1 6992 TIP3 OH2 OT -0.834000 15.9994 0 + 23464 W1 6992 TIP3 H1 HT 0.417000 1.0080 0 + 23465 W1 6992 TIP3 H2 HT 0.417000 1.0080 0 + 23466 W1 6993 TIP3 OH2 OT -0.834000 15.9994 0 + 23467 W1 6993 TIP3 H1 HT 0.417000 1.0080 0 + 23468 W1 6993 TIP3 H2 HT 0.417000 1.0080 0 + 23469 W1 6994 TIP3 OH2 OT -0.834000 15.9994 0 + 23470 W1 6994 TIP3 H1 HT 0.417000 1.0080 0 + 23471 W1 6994 TIP3 H2 HT 0.417000 1.0080 0 + 23472 W1 6995 TIP3 OH2 OT -0.834000 15.9994 0 + 23473 W1 6995 TIP3 H1 HT 0.417000 1.0080 0 + 23474 W1 6995 TIP3 H2 HT 0.417000 1.0080 0 + 23475 W1 6996 TIP3 OH2 OT -0.834000 15.9994 0 + 23476 W1 6996 TIP3 H1 HT 0.417000 1.0080 0 + 23477 W1 6996 TIP3 H2 HT 0.417000 1.0080 0 + 23478 W1 6997 TIP3 OH2 OT -0.834000 15.9994 0 + 23479 W1 6997 TIP3 H1 HT 0.417000 1.0080 0 + 23480 W1 6997 TIP3 H2 HT 0.417000 1.0080 0 + 23481 W1 6998 TIP3 OH2 OT -0.834000 15.9994 0 + 23482 W1 6998 TIP3 H1 HT 0.417000 1.0080 0 + 23483 W1 6998 TIP3 H2 HT 0.417000 1.0080 0 + 23484 W1 6999 TIP3 OH2 OT -0.834000 15.9994 0 + 23485 W1 6999 TIP3 H1 HT 0.417000 1.0080 0 + 23486 W1 6999 TIP3 H2 HT 0.417000 1.0080 0 + 23487 W1 7000 TIP3 OH2 OT -0.834000 15.9994 0 + 23488 W1 7000 TIP3 H1 HT 0.417000 1.0080 0 + 23489 W1 7000 TIP3 H2 HT 0.417000 1.0080 0 + 23490 W1 7001 TIP3 OH2 OT -0.834000 15.9994 0 + 23491 W1 7001 TIP3 H1 HT 0.417000 1.0080 0 + 23492 W1 7001 TIP3 H2 HT 0.417000 1.0080 0 + 23493 W1 7002 TIP3 OH2 OT -0.834000 15.9994 0 + 23494 W1 7002 TIP3 H1 HT 0.417000 1.0080 0 + 23495 W1 7002 TIP3 H2 HT 0.417000 1.0080 0 + 23496 W1 7003 TIP3 OH2 OT -0.834000 15.9994 0 + 23497 W1 7003 TIP3 H1 HT 0.417000 1.0080 0 + 23498 W1 7003 TIP3 H2 HT 0.417000 1.0080 0 + 23499 W1 7004 TIP3 OH2 OT -0.834000 15.9994 0 + 23500 W1 7004 TIP3 H1 HT 0.417000 1.0080 0 + 23501 W1 7004 TIP3 H2 HT 0.417000 1.0080 0 + 23502 W1 7005 TIP3 OH2 OT -0.834000 15.9994 0 + 23503 W1 7005 TIP3 H1 HT 0.417000 1.0080 0 + 23504 W1 7005 TIP3 H2 HT 0.417000 1.0080 0 + 23505 W1 7006 TIP3 OH2 OT -0.834000 15.9994 0 + 23506 W1 7006 TIP3 H1 HT 0.417000 1.0080 0 + 23507 W1 7006 TIP3 H2 HT 0.417000 1.0080 0 + 23508 W1 7007 TIP3 OH2 OT -0.834000 15.9994 0 + 23509 W1 7007 TIP3 H1 HT 0.417000 1.0080 0 + 23510 W1 7007 TIP3 H2 HT 0.417000 1.0080 0 + 23511 W1 7008 TIP3 OH2 OT -0.834000 15.9994 0 + 23512 W1 7008 TIP3 H1 HT 0.417000 1.0080 0 + 23513 W1 7008 TIP3 H2 HT 0.417000 1.0080 0 + 23514 W1 7009 TIP3 OH2 OT -0.834000 15.9994 0 + 23515 W1 7009 TIP3 H1 HT 0.417000 1.0080 0 + 23516 W1 7009 TIP3 H2 HT 0.417000 1.0080 0 + 23517 W1 7010 TIP3 OH2 OT -0.834000 15.9994 0 + 23518 W1 7010 TIP3 H1 HT 0.417000 1.0080 0 + 23519 W1 7010 TIP3 H2 HT 0.417000 1.0080 0 + 23520 W1 7011 TIP3 OH2 OT -0.834000 15.9994 0 + 23521 W1 7011 TIP3 H1 HT 0.417000 1.0080 0 + 23522 W1 7011 TIP3 H2 HT 0.417000 1.0080 0 + 23523 W1 7012 TIP3 OH2 OT -0.834000 15.9994 0 + 23524 W1 7012 TIP3 H1 HT 0.417000 1.0080 0 + 23525 W1 7012 TIP3 H2 HT 0.417000 1.0080 0 + 23526 W1 7013 TIP3 OH2 OT -0.834000 15.9994 0 + 23527 W1 7013 TIP3 H1 HT 0.417000 1.0080 0 + 23528 W1 7013 TIP3 H2 HT 0.417000 1.0080 0 + 23529 W1 7014 TIP3 OH2 OT -0.834000 15.9994 0 + 23530 W1 7014 TIP3 H1 HT 0.417000 1.0080 0 + 23531 W1 7014 TIP3 H2 HT 0.417000 1.0080 0 + 23532 W1 7015 TIP3 OH2 OT -0.834000 15.9994 0 + 23533 W1 7015 TIP3 H1 HT 0.417000 1.0080 0 + 23534 W1 7015 TIP3 H2 HT 0.417000 1.0080 0 + 23535 W1 7016 TIP3 OH2 OT -0.834000 15.9994 0 + 23536 W1 7016 TIP3 H1 HT 0.417000 1.0080 0 + 23537 W1 7016 TIP3 H2 HT 0.417000 1.0080 0 + 23538 W1 7017 TIP3 OH2 OT -0.834000 15.9994 0 + 23539 W1 7017 TIP3 H1 HT 0.417000 1.0080 0 + 23540 W1 7017 TIP3 H2 HT 0.417000 1.0080 0 + 23541 W1 7018 TIP3 OH2 OT -0.834000 15.9994 0 + 23542 W1 7018 TIP3 H1 HT 0.417000 1.0080 0 + 23543 W1 7018 TIP3 H2 HT 0.417000 1.0080 0 + 23544 W1 7019 TIP3 OH2 OT -0.834000 15.9994 0 + 23545 W1 7019 TIP3 H1 HT 0.417000 1.0080 0 + 23546 W1 7019 TIP3 H2 HT 0.417000 1.0080 0 + 23547 W1 7020 TIP3 OH2 OT -0.834000 15.9994 0 + 23548 W1 7020 TIP3 H1 HT 0.417000 1.0080 0 + 23549 W1 7020 TIP3 H2 HT 0.417000 1.0080 0 + 23550 W1 7021 TIP3 OH2 OT -0.834000 15.9994 0 + 23551 W1 7021 TIP3 H1 HT 0.417000 1.0080 0 + 23552 W1 7021 TIP3 H2 HT 0.417000 1.0080 0 + 23553 W1 7022 TIP3 OH2 OT -0.834000 15.9994 0 + 23554 W1 7022 TIP3 H1 HT 0.417000 1.0080 0 + 23555 W1 7022 TIP3 H2 HT 0.417000 1.0080 0 + 23556 W1 7023 TIP3 OH2 OT -0.834000 15.9994 0 + 23557 W1 7023 TIP3 H1 HT 0.417000 1.0080 0 + 23558 W1 7023 TIP3 H2 HT 0.417000 1.0080 0 + + 16569 !NBOND: bonds + 1 5 2 1 3 1 4 1 + 5 6 7 5 7 8 7 9 + 10 7 10 11 10 12 13 10 + 14 13 14 15 14 16 14 17 + 18 5 18 20 19 18 20 21 + 20 22 22 23 24 22 24 25 + 26 24 26 27 26 28 26 29 + 30 24 30 31 30 32 33 30 + 33 34 33 35 33 36 37 22 + 37 39 38 37 39 40 39 41 + 41 42 43 41 43 44 43 45 + 46 43 46 47 48 41 48 50 + 49 48 50 51 50 52 52 53 + 54 52 54 55 54 56 57 54 + 57 58 59 57 59 60 59 61 + 59 62 63 57 63 64 63 65 + 63 66 67 52 67 69 68 67 + 69 70 69 71 71 72 73 71 + 73 74 75 73 75 76 75 77 + 75 78 79 73 79 80 79 81 + 82 79 82 83 82 84 82 85 + 86 71 86 88 87 86 88 89 + 88 90 90 91 92 90 92 93 + 92 94 92 95 96 90 96 98 + 97 96 98 99 98 100 100 101 + 102 100 102 103 102 104 102 105 + 106 100 106 108 107 106 108 109 + 108 110 110 111 112 110 112 113 + 112 114 115 112 115 116 117 115 + 117 118 117 119 117 120 121 115 + 121 122 121 123 121 124 125 110 + 125 127 126 125 127 128 127 129 + 129 130 131 129 131 132 131 133 + 131 134 135 129 135 137 136 135 + 137 138 137 139 139 140 141 139 + 141 142 143 141 143 144 143 145 + 143 146 147 141 147 148 147 149 + 147 150 151 139 151 153 152 151 + 153 154 153 155 155 156 157 155 + 157 158 157 159 160 157 160 161 + 162 160 163 155 163 165 164 163 + 165 166 165 167 167 168 169 167 + 169 170 169 171 172 169 172 173 + 172 174 175 172 175 176 175 177 + 178 175 178 179 180 178 180 181 + 181 182 181 183 184 180 184 185 + 184 186 187 167 187 189 188 187 + 189 190 189 191 191 192 193 191 + 193 194 195 193 195 196 195 197 + 195 198 199 193 199 200 199 201 + 199 202 203 191 203 205 204 203 + 205 206 205 207 207 208 209 207 + 209 210 211 209 211 212 211 213 + 211 214 215 209 215 216 215 217 + 218 215 218 219 218 220 218 221 + 222 207 222 224 223 222 224 225 + 224 226 226 227 226 228 229 226 + 229 231 230 229 231 232 231 233 + 233 234 235 233 235 236 235 237 + 238 235 238 239 238 240 241 238 + 242 241 242 243 242 244 242 245 + 246 233 246 248 247 246 248 249 + 248 250 250 251 252 250 252 253 + 252 254 255 252 255 256 255 257 + 258 255 258 259 260 258 261 250 + 261 263 262 261 263 264 263 265 + 265 266 267 265 267 268 267 269 + 270 267 270 271 272 270 272 273 + 272 274 275 265 275 277 275 276 + 277 278 277 279 279 280 281 279 + 281 282 281 283 281 284 285 279 + 285 287 286 285 287 288 287 289 + 289 290 291 289 291 292 291 293 + 294 291 294 295 294 296 297 294 + 298 297 298 299 298 300 298 301 + 302 289 302 304 303 302 304 308 + 304 305 306 305 307 305 308 310 + 309 308 310 313 311 310 312 310 + 313 305 314 313 315 313 316 308 + 316 318 317 316 318 319 318 320 + 320 321 322 320 322 323 322 324 + 325 322 326 327 326 325 328 326 + 328 330 328 329 330 331 331 325 + 331 332 332 333 334 338 334 335 + 334 332 336 330 336 337 338 339 + 338 336 340 320 340 342 341 340 + 342 343 342 344 344 345 346 344 + 346 347 346 348 349 346 349 350 + 351 349 351 352 351 353 354 344 + 354 356 354 355 356 357 356 358 + 358 359 360 358 360 361 360 362 + 363 360 363 364 365 363 365 366 + 365 367 365 368 369 363 369 370 + 369 371 369 372 373 358 373 375 + 374 373 375 379 375 376 377 376 + 378 376 379 381 380 379 381 384 + 382 381 383 381 384 376 385 384 + 386 384 387 379 387 389 388 387 + 389 390 389 391 391 392 393 391 + 393 394 393 395 393 396 397 391 + 397 399 398 397 399 400 399 401 + 401 402 403 401 403 404 403 405 + 406 403 406 407 408 406 409 401 + 409 411 410 409 411 412 411 413 + 413 414 415 413 415 416 415 417 + 418 415 418 419 420 418 420 421 + 420 422 420 423 424 418 424 425 + 424 426 424 427 428 413 428 430 + 429 428 430 431 430 432 432 433 + 434 432 434 435 434 436 434 437 + 438 432 438 440 439 438 440 441 + 440 442 442 443 444 442 444 445 + 444 446 447 444 448 449 448 447 + 450 448 450 452 450 451 452 453 + 453 447 453 454 454 455 456 460 + 456 457 456 454 458 452 458 459 + 460 461 460 458 462 442 462 464 + 463 462 464 465 464 466 466 467 + 468 466 468 469 468 470 471 468 + 472 473 472 471 474 472 474 475 + 476 480 476 474 476 477 478 471 + 478 479 480 478 480 481 482 466 + 482 484 483 482 484 485 484 486 + 486 487 488 486 488 489 488 490 + 491 488 491 492 491 493 494 491 + 494 495 494 496 497 494 497 498 + 497 499 500 497 500 501 500 502 + 500 503 504 486 504 506 505 504 + 506 507 506 508 508 509 510 508 + 510 511 510 512 513 510 513 514 + 513 515 516 513 516 517 516 518 + 519 516 519 520 521 519 521 522 + 522 523 522 524 525 521 525 526 + 525 527 528 508 528 530 529 528 + 530 531 530 532 532 533 534 532 + 534 535 534 536 537 534 537 538 + 539 537 539 540 539 541 542 532 + 542 544 542 543 544 545 544 546 + 546 547 548 546 548 549 550 548 + 550 551 552 548 552 553 552 554 + 552 555 556 546 556 558 557 556 + 558 559 558 560 560 561 562 560 + 562 563 562 564 565 562 565 566 + 567 565 567 568 567 569 567 570 + 571 565 571 572 571 573 571 574 + 575 560 575 577 576 575 577 578 + 577 579 579 580 581 579 581 582 + 581 583 584 581 584 585 586 584 + 587 579 587 589 588 587 589 590 + 589 591 591 592 593 591 593 594 + 593 595 596 593 596 597 596 598 + 599 596 599 600 599 601 602 599 + 602 603 602 604 605 602 605 606 + 605 607 605 608 609 591 609 611 + 610 609 611 615 611 612 613 612 + 614 612 615 617 616 615 617 620 + 618 617 619 617 620 612 621 620 + 622 620 623 615 623 625 624 623 + 625 626 625 627 627 628 629 627 + 629 630 631 629 631 632 631 633 + 631 634 635 629 635 636 635 637 + 635 638 639 627 639 641 640 639 + 641 642 641 643 643 644 645 643 + 645 646 647 645 647 648 647 649 + 647 650 651 645 651 652 651 653 + 654 651 654 655 654 656 654 657 + 658 643 658 660 659 658 660 661 + 660 662 662 663 664 662 664 665 + 664 666 667 664 667 668 667 669 + 670 667 671 670 671 672 671 673 + 671 674 675 662 675 677 676 675 + 677 678 677 679 679 680 679 681 + 682 679 682 684 683 682 684 685 + 684 686 686 687 688 686 688 689 + 688 690 691 688 691 692 691 693 + 694 691 694 695 694 696 697 694 + 697 698 699 697 699 700 700 701 + 700 702 703 699 703 704 703 705 + 706 686 706 708 707 706 708 709 + 708 710 710 711 712 710 712 713 + 712 714 715 717 715 716 717 712 + 717 721 718 715 718 719 718 720 + 720 721 721 722 723 710 723 725 + 724 723 725 726 725 727 727 728 + 729 727 729 730 731 729 731 732 + 733 729 733 734 733 735 733 736 + 737 727 737 739 738 737 739 740 + 739 741 741 742 743 741 743 744 + 743 745 746 743 747 748 747 746 + 749 747 749 751 749 750 751 752 + 752 746 752 753 753 754 755 759 + 755 756 755 753 757 751 757 758 + 759 760 759 757 761 741 761 763 + 762 761 763 764 763 765 765 766 + 767 765 767 768 767 769 770 767 + 770 771 770 772 773 770 773 774 + 775 773 776 765 776 778 777 776 + 778 779 778 780 780 781 782 780 + 782 783 782 784 785 782 785 786 + 787 780 787 789 788 787 789 790 + 789 791 791 792 793 791 793 794 + 795 793 795 796 795 797 795 798 + 799 793 799 800 799 801 802 799 + 802 803 802 804 802 805 806 791 + 806 808 807 806 808 809 808 810 + 810 811 810 812 813 810 813 815 + 814 813 815 816 815 817 817 818 + 819 817 819 820 819 821 822 819 + 822 823 822 824 825 822 825 826 + 825 827 828 825 828 829 830 828 + 830 831 831 832 831 833 834 830 + 834 835 834 836 837 817 837 839 + 838 837 839 843 839 840 841 840 + 842 840 843 845 844 843 845 848 + 846 845 847 845 848 840 849 848 + 850 848 851 843 851 853 852 851 + 853 854 853 855 855 856 857 855 + 857 858 857 859 860 857 860 861 + 862 860 862 863 862 864 862 865 + 866 860 866 867 866 868 866 869 + 870 855 870 872 871 870 872 876 + 872 873 874 873 875 873 876 878 + 877 876 878 881 879 878 880 878 + 881 873 882 881 883 881 884 876 + 884 886 885 884 886 887 886 888 + 888 889 888 890 891 888 891 893 + 892 891 893 894 893 895 895 896 + 897 895 897 898 897 899 900 897 + 900 901 900 902 903 900 903 904 + 903 905 906 903 906 907 908 906 + 908 909 909 910 909 911 912 908 + 912 913 912 914 915 895 915 917 + 916 915 917 918 917 919 919 920 + 921 919 921 922 921 923 924 921 + 924 925 924 926 927 924 927 928 + 927 929 930 927 930 931 930 932 + 933 930 933 934 933 935 933 936 + 937 919 937 939 938 937 939 940 + 939 941 941 942 943 941 943 944 + 943 945 946 943 946 947 948 946 + 948 949 948 950 951 941 951 953 + 951 952 953 954 953 955 955 956 + 957 955 957 958 959 957 959 960 + 959 961 959 962 963 957 963 964 + 963 965 966 963 966 967 966 968 + 966 969 970 955 970 972 971 970 + 972 973 972 974 974 975 976 974 + 976 977 978 976 978 979 978 980 + 978 981 982 976 982 983 982 984 + 985 982 985 986 985 987 985 988 + 989 974 989 991 990 989 991 992 + 991 993 993 994 995 993 995 996 + 995 997 998 995 998 999 1000 998 + 1000 1001 1000 1002 1000 1003 1004 998 + 1004 1005 1004 1006 1004 1007 1008 993 + 1008 1010 1009 1008 1010 1011 1010 1012 + 1012 1013 1014 1012 1014 1015 1014 1016 + 1017 1014 1017 1018 1019 1012 1019 1021 + 1020 1019 1021 1022 1021 1023 1023 1024 + 1025 1023 1025 1026 1025 1027 1028 1025 + 1028 1029 1030 1023 1030 1032 1031 1030 + 1032 1033 1032 1034 1034 1035 1036 1034 + 1036 1037 1036 1038 1039 1036 1039 1040 + 1039 1041 1042 1039 1042 1043 1044 1042 + 1044 1045 1044 1046 1047 1034 1047 1049 + 1048 1047 1049 1053 1049 1050 1051 1050 + 1052 1050 1053 1055 1054 1053 1055 1058 + 1056 1055 1057 1055 1058 1050 1059 1058 + 1060 1058 1061 1053 1061 1063 1062 1061 + 1063 1064 1063 1065 1065 1066 1065 1067 + 1068 1065 1068 1070 1069 1068 1070 1071 + 1070 1072 1072 1073 1074 1072 1074 1075 + 1076 1074 1076 1077 1078 1074 1078 1079 + 1078 1080 1078 1081 1082 1072 1082 1084 + 1083 1082 1084 1085 1084 1086 1086 1087 + 1088 1086 1088 1089 1088 1090 1091 1088 + 1091 1092 1093 1091 1094 1086 1094 1096 + 1095 1094 1096 1097 1096 1098 1098 1099 + 1100 1098 1100 1101 1100 1102 1103 1100 + 1103 1104 1105 1103 1106 1098 1106 1108 + 1107 1106 1108 1109 1108 1110 1110 1111 + 1112 1110 1112 1113 1112 1114 1115 1112 + 1115 1116 1115 1117 1118 1115 1118 1119 + 1118 1120 1121 1118 1121 1122 1123 1121 + 1123 1124 1124 1125 1124 1126 1127 1123 + 1127 1128 1127 1129 1130 1110 1130 1132 + 1131 1130 1132 1133 1132 1134 1134 1135 + 1136 1134 1136 1137 1138 1136 1138 1139 + 1138 1140 1138 1141 1142 1136 1142 1143 + 1142 1144 1142 1145 1146 1134 1146 1148 + 1147 1146 1148 1149 1148 1150 1150 1151 + 1152 1150 1152 1153 1154 1152 1154 1155 + 1156 1152 1156 1157 1156 1158 1156 1159 + 1160 1150 1160 1162 1161 1160 1162 1163 + 1162 1164 1164 1165 1166 1164 1166 1167 + 1166 1168 1169 1166 1170 1171 1170 1169 + 1172 1170 1172 1174 1172 1173 1174 1175 + 1175 1169 1175 1176 1176 1177 1178 1182 + 1178 1179 1178 1176 1180 1174 1180 1181 + 1182 1183 1182 1180 1184 1164 1184 1186 + 1185 1184 1186 1187 1186 1188 1188 1189 + 1190 1188 1190 1191 1192 1190 1192 1193 + 1192 1194 1192 1195 1196 1190 1196 1197 + 1196 1198 1196 1199 1200 1188 1200 1202 + 1201 1200 1202 1203 1202 1204 1204 1205 + 1206 1204 1206 1207 1206 1208 1209 1206 + 1209 1210 1209 1211 1212 1209 1212 1213 + 1212 1214 1215 1212 1215 1216 1215 1217 + 1218 1215 1218 1219 1218 1220 1218 1221 + 1222 1204 1222 1224 1223 1222 1224 1225 + 1224 1226 1226 1227 1228 1226 1228 1229 + 1228 1230 1231 1228 1231 1232 1233 1226 + 1233 1235 1234 1233 1235 1236 1235 1237 + 1237 1238 1239 1237 1239 1240 1241 1239 + 1241 1242 1241 1243 1241 1244 1245 1239 + 1245 1246 1245 1247 1245 1248 1249 1237 + 1249 1251 1250 1249 1251 1252 1251 1253 + 1253 1254 1255 1253 1255 1256 1255 1257 + 1258 1255 1258 1259 1260 1258 1261 1253 + 1261 1263 1262 1261 1263 1264 1263 1265 + 1265 1266 1267 1265 1267 1268 1267 1269 + 1270 1267 1270 1271 1270 1272 1273 1270 + 1273 1274 1275 1273 1276 1265 1276 1278 + 1277 1276 1278 1279 1278 1280 1280 1281 + 1282 1280 1282 1283 1282 1284 1282 1285 + 1286 1280 1286 1288 1287 1286 1288 1289 + 1288 1290 1290 1291 1292 1290 1292 1293 + 1294 1292 1294 1295 1294 1296 1294 1297 + 1298 1292 1298 1299 1298 1300 1301 1298 + 1301 1302 1301 1303 1301 1304 1305 1290 + 1305 1307 1306 1305 1307 1308 1307 1309 + 1309 1310 1311 1309 1311 1312 1311 1313 + 1311 1314 1315 1309 1315 1317 1316 1315 + 1317 1318 1317 1319 1319 1320 1321 1319 + 1321 1322 1321 1323 1321 1324 1325 1319 + 1325 1327 1326 1325 1327 1328 1327 1329 + 1329 1330 1331 1329 1331 1332 1331 1333 + 1334 1331 1334 1335 1336 1329 1336 1338 + 1337 1336 1338 1339 1338 1340 1340 1341 + 1340 1342 1343 1340 1343 1345 1344 1343 + 1345 1346 1345 1347 1347 1348 1349 1347 + 1349 1350 1349 1351 1352 1349 1352 1353 + 1354 1352 1355 1347 1355 1357 1356 1355 + 1357 1358 1357 1359 1359 1360 1361 1359 + 1361 1362 1363 1361 1363 1364 1363 1365 + 1363 1366 1367 1361 1367 1368 1367 1369 + 1367 1370 1371 1359 1371 1373 1372 1371 + 1373 1377 1373 1374 1375 1374 1376 1374 + 1377 1379 1378 1377 1379 1382 1380 1379 + 1381 1379 1382 1374 1383 1382 1384 1382 + 1385 1377 1385 1387 1386 1385 1387 1388 + 1387 1389 1389 1390 1391 1389 1391 1392 + 1391 1393 1394 1391 1394 1395 1394 1396 + 1397 1394 1397 1398 1399 1397 1400 1389 + 1400 1402 1401 1400 1402 1403 1402 1404 + 1404 1405 1406 1404 1406 1407 1408 1406 + 1408 1409 1408 1410 1408 1411 1412 1406 + 1412 1413 1412 1414 1415 1412 1415 1416 + 1415 1417 1415 1418 1419 1404 1419 1421 + 1420 1419 1421 1422 1421 1423 1423 1424 + 1425 1423 1425 1426 1425 1427 1428 1425 + 1428 1429 1428 1430 1431 1428 1432 1431 + 1432 1433 1432 1434 1432 1435 1436 1423 + 1436 1438 1437 1436 1438 1439 1438 1440 + 1440 1441 1442 1440 1442 1443 1444 1442 + 1444 1445 1444 1446 1444 1447 1448 1442 + 1448 1449 1448 1450 1448 1451 1452 1440 + 1452 1454 1453 1452 1454 1455 1454 1456 + 1456 1457 1458 1456 1458 1459 1460 1458 + 1460 1461 1460 1462 1460 1463 1464 1458 + 1464 1465 1464 1466 1467 1464 1467 1468 + 1467 1469 1467 1470 1471 1456 1471 1473 + 1472 1471 1473 1474 1473 1475 1475 1476 + 1475 1477 1478 1475 1478 1480 1479 1478 + 1480 1481 1480 1482 1482 1483 1482 1484 + 1485 1482 1485 1487 1486 1485 1487 1488 + 1487 1489 1489 1490 1489 1491 1492 1489 + 1492 1494 1493 1492 1494 1495 1494 1496 + 1496 1497 1498 1496 1498 1499 1498 1500 + 1501 1498 1501 1502 1501 1503 1504 1501 + 1504 1505 1504 1506 1507 1504 1507 1508 + 1509 1507 1509 1510 1510 1511 1510 1512 + 1513 1509 1513 1514 1513 1515 1516 1496 + 1516 1518 1517 1516 1518 1519 1518 1520 + 1520 1521 1522 1520 1522 1523 1524 1522 + 1524 1525 1524 1526 1524 1527 1528 1522 + 1528 1529 1528 1530 1528 1531 1532 1520 + 1532 1534 1533 1532 1534 1535 1534 1536 + 1536 1537 1538 1536 1538 1539 1538 1540 + 1541 1538 1542 1543 1542 1541 1544 1542 + 1544 1545 1544 1546 1546 1551 1547 1546 + 1547 1548 1549 1541 1549 1550 1551 1552 + 1551 1549 1553 1536 1553 1555 1554 1553 + 1555 1556 1555 1557 1557 1558 1559 1557 + 1559 1560 1559 1561 1562 1559 1562 1563 + 1562 1564 1565 1562 1565 1566 1567 1565 + 1568 1557 1568 1570 1569 1568 1570 1571 + 1570 1572 1572 1573 1574 1572 1574 1575 + 1574 1576 1577 1574 1577 1578 1577 1579 + 1580 1577 1580 1581 1582 1580 1582 1583 + 1582 1584 1585 1572 1585 1587 1586 1585 + 1587 1588 1587 1589 1589 1590 1591 1589 + 1591 1592 1591 1593 1594 1591 1595 1596 + 1595 1594 1597 1595 1597 1598 1599 1603 + 1599 1597 1599 1600 1601 1594 1601 1602 + 1603 1601 1603 1604 1605 1589 1605 1607 + 1606 1605 1607 1608 1607 1609 1609 1610 + 1611 1609 1611 1612 1611 1613 1614 1611 + 1614 1615 1616 1614 1616 1617 1616 1618 + 1616 1619 1620 1614 1620 1621 1620 1622 + 1620 1623 1624 1609 1624 1626 1625 1624 + 1626 1630 1626 1627 1628 1627 1629 1627 + 1630 1632 1631 1630 1632 1635 1633 1632 + 1634 1632 1635 1627 1636 1635 1637 1635 + 1638 1630 1638 1640 1639 1638 1640 1641 + 1640 1642 1642 1643 1644 1642 1644 1645 + 1644 1646 1647 1644 1647 1648 1647 1649 + 1650 1647 1650 1651 1650 1652 1653 1650 + 1653 1654 1653 1655 1656 1653 1656 1657 + 1656 1658 1656 1659 1660 1642 1660 1662 + 1661 1660 1662 1663 1662 1664 1664 1665 + 1666 1664 1666 1667 1666 1668 1666 1669 + 1670 1664 1670 1672 1671 1670 1672 1673 + 1672 1674 1674 1675 1676 1674 1676 1677 + 1676 1678 1679 1676 1679 1680 1679 1681 + 1682 1679 1682 1683 1684 1682 1684 1685 + 1684 1686 1687 1674 1687 1689 1688 1687 + 1689 1690 1689 1691 1691 1692 1693 1691 + 1693 1694 1693 1695 1696 1693 1696 1697 + 1696 1698 1699 1696 1699 1700 1699 1701 + 1702 1699 1702 1703 1702 1704 1705 1702 + 1705 1706 1705 1707 1705 1708 1709 1691 + 1709 1711 1710 1709 1711 1712 1711 1713 + 1713 1714 1715 1713 1715 1716 1715 1717 + 1718 1715 1718 1719 1720 1718 1720 1721 + 1720 1722 1720 1723 1724 1718 1724 1725 + 1724 1726 1724 1727 1728 1713 1728 1730 + 1729 1728 1730 1731 1730 1732 1732 1733 + 1734 1732 1734 1735 1734 1736 1737 1734 + 1738 1739 1738 1737 1740 1738 1740 1741 + 1740 1742 1742 1747 1743 1742 1743 1744 + 1745 1737 1745 1746 1747 1748 1747 1745 + 1749 1732 1749 1751 1750 1749 1751 1752 + 1751 1753 1753 1754 1755 1753 1755 1756 + 1755 1757 1758 1755 1758 1759 1760 1758 + 1760 1761 1760 1762 1760 1763 1764 1758 + 1764 1765 1764 1766 1764 1767 1768 1753 + 1768 1770 1769 1768 1770 1771 1770 1772 + 1772 1773 1774 1772 1774 1775 1776 1774 + 1776 1777 1778 1774 1778 1779 1778 1780 + 1778 1781 1782 1772 1782 1784 1783 1782 + 1784 1785 1784 1786 1786 1787 1788 1786 + 1788 1789 1788 1790 1791 1793 1791 1792 + 1793 1788 1793 1797 1794 1791 1794 1795 + 1794 1796 1796 1797 1797 1798 1799 1786 + 1799 1801 1800 1799 1801 1802 1801 1803 + 1803 1804 1805 1803 1805 1806 1807 1805 + 1807 1808 1807 1809 1807 1810 1811 1805 + 1811 1812 1811 1813 1814 1811 1814 1815 + 1814 1816 1814 1817 1818 1803 1818 1820 + 1819 1818 1820 1821 1820 1822 1822 1823 + 1824 1822 1824 1825 1824 1826 1827 1824 + 1827 1828 1829 1827 1830 1822 1830 1832 + 1831 1830 1832 1833 1832 1834 1834 1835 + 1836 1834 1836 1837 1836 1838 1836 1839 + 1840 1834 1840 1842 1841 1840 1842 1843 + 1842 1844 1844 1845 1846 1844 1846 1847 + 1846 1848 1849 1846 1849 1850 1849 1851 + 1852 1849 1852 1853 1854 1852 1855 1844 + 1855 1857 1856 1855 1857 1858 1857 1859 + 1859 1860 1861 1859 1861 1862 1863 1861 + 1863 1864 1863 1865 1863 1866 1867 1861 + 1867 1868 1867 1869 1867 1870 1871 1859 + 1871 1873 1872 1871 1873 1874 1873 1875 + 1875 1876 1877 1875 1877 1878 1877 1879 + 1880 1877 1880 1881 1880 1882 1883 1880 + 1883 1884 1885 1883 1886 1875 1886 1888 + 1887 1886 1888 1889 1888 1890 1890 1891 + 1890 1892 1893 1890 1893 1895 1894 1893 + 1895 1896 1895 1897 1897 1898 1899 1897 + 1899 1900 1899 1901 1902 1899 1902 1903 + 1904 1902 1905 1897 1905 1907 1906 1905 + 1907 1908 1907 1909 1909 1910 1911 1909 + 1911 1912 1913 1911 1913 1914 1915 1911 + 1915 1916 1915 1917 1915 1918 1919 1909 + 1919 1921 1920 1919 1921 1922 1921 1923 + 1923 1924 1925 1923 1925 1926 1925 1927 + 1928 1930 1928 1929 1930 1925 1930 1934 + 1931 1928 1931 1932 1931 1933 1933 1934 + 1934 1935 1936 1923 1936 1938 1937 1936 + 1938 1939 1938 1940 1940 1941 1942 1940 + 1942 1943 1942 1944 1945 1942 1946 1947 + 1946 1945 1948 1946 1948 1949 1950 1954 + 1950 1948 1950 1951 1952 1945 1952 1953 + 1954 1952 1954 1955 1956 1940 1956 1958 + 1957 1956 1958 1962 1958 1959 1960 1959 + 1961 1959 1962 1964 1963 1962 1964 1967 + 1965 1964 1966 1964 1967 1959 1968 1967 + 1969 1967 1970 1962 1970 1972 1971 1970 + 1972 1973 1972 1974 1974 1975 1976 1974 + 1976 1977 1976 1978 1979 1976 1979 1980 + 1981 1979 1982 1974 1982 1984 1983 1982 + 1984 1985 1984 1986 1986 1987 1988 1986 + 1988 1989 1988 1990 1991 1988 1992 1993 + 1992 1991 1994 1992 1994 1995 1994 1996 + 1996 2001 1997 1996 1997 1998 1999 1991 + 1999 2000 2001 2002 2001 1999 2003 1986 + 2003 2005 2004 2003 2005 2006 2005 2007 + 2007 2008 2009 2007 2009 2010 2009 2011 + 2012 2009 2012 2013 2012 2014 2015 2012 + 2015 2016 2017 2015 2018 2007 2018 2020 + 2019 2018 2020 2024 2020 2021 2022 2021 + 2023 2021 2024 2026 2025 2024 2026 2029 + 2027 2026 2028 2026 2029 2021 2030 2029 + 2031 2029 2032 2024 2032 2034 2033 2032 + 2034 2035 2034 2036 2036 2037 2038 2036 + 2038 2039 2038 2040 2041 2038 2041 2042 + 2043 2041 2044 2036 2044 2046 2045 2044 + 2046 2047 2046 2048 2048 2049 2050 2048 + 2050 2051 2050 2052 2053 2050 2053 2054 + 2055 2053 2056 2048 2056 2058 2057 2056 + 2058 2059 2058 2060 2060 2061 2062 2060 + 2062 2063 2062 2064 2065 2062 2066 2067 + 2066 2065 2068 2066 2068 2070 2068 2069 + 2070 2071 2071 2065 2071 2072 2072 2073 + 2074 2078 2074 2075 2074 2072 2076 2070 + 2076 2077 2078 2079 2078 2076 2080 2060 + 2080 2082 2081 2080 2082 2083 2082 2084 + 2084 2085 2086 2084 2086 2087 2086 2088 + 2089 2086 2089 2090 2089 2091 2092 2089 + 2092 2093 2094 2092 2095 2084 2095 2097 + 2096 2095 2097 2098 2097 2099 2099 2100 + 2101 2099 2101 2102 2101 2103 2104 2101 + 2104 2105 2106 2099 2106 2108 2107 2106 + 2108 2109 2108 2110 2110 2111 2112 2110 + 2112 2113 2114 2112 2114 2115 2114 2116 + 2114 2117 2118 2112 2118 2119 2118 2120 + 2118 2121 2122 2110 2122 2124 2123 2122 + 2124 2125 2124 2126 2126 2127 2128 2126 + 2128 2129 2128 2130 2131 2128 2132 2133 + 2132 2131 2134 2132 2134 2135 2136 2140 + 2136 2134 2136 2137 2138 2131 2138 2139 + 2140 2138 2140 2141 2142 2126 2142 2144 + 2143 2142 2144 2145 2144 2146 2146 2147 + 2148 2146 2148 2149 2148 2150 2151 2148 + 2151 2152 2153 2146 2153 2155 2154 2153 + 2155 2156 2155 2157 2157 2158 2159 2157 + 2159 2160 2159 2161 2162 2159 2162 2163 + 2162 2164 2165 2162 2165 2166 2167 2165 + 2168 2157 2168 2170 2169 2168 2170 2171 + 2170 2172 2172 2173 2174 2172 2174 2175 + 2174 2176 2177 2174 2178 2179 2178 2177 + 2180 2178 2180 2181 2182 2186 2182 2180 + 2182 2183 2184 2177 2184 2185 2186 2184 + 2186 2187 2188 2172 2188 2190 2189 2188 + 2190 2191 2190 2192 2192 2193 2194 2192 + 2194 2195 2194 2196 2197 2199 2197 2198 + 2199 2194 2199 2203 2200 2197 2200 2201 + 2200 2202 2202 2203 2203 2204 2205 2192 + 2205 2207 2206 2205 2207 2208 2207 2209 + 2209 2210 2211 2209 2211 2212 2211 2213 + 2214 2211 2214 2215 2216 2214 2217 2209 + 2217 2219 2218 2217 2219 2220 2219 2221 + 2221 2222 2223 2221 2223 2224 2223 2225 + 2223 2226 2227 2221 2227 2229 2228 2227 + 2229 2230 2229 2231 2231 2232 2233 2231 + 2233 2234 2233 2235 2236 2233 2236 2237 + 2238 2236 2239 2231 2239 2241 2240 2239 + 2241 2242 2241 2243 2243 2244 2245 2243 + 2245 2246 2245 2247 2245 2248 2249 2243 + 2249 2251 2250 2249 2251 2252 2251 2253 + 2253 2254 2255 2253 2255 2256 2255 2257 + 2258 2255 2258 2259 2258 2260 2261 2258 + 2261 2262 2263 2261 2263 2264 2263 2265 + 2266 2253 2266 2268 2267 2266 2268 2269 + 2268 2270 2270 2271 2272 2270 2272 2273 + 2272 2274 2275 2272 2275 2276 2277 2275 + 2277 2278 2277 2279 2280 2270 2280 2282 + 2280 2281 2282 2283 2282 2284 2284 2285 + 2286 2284 2286 2287 2286 2288 2289 2286 + 2289 2290 2291 2284 2291 2293 2292 2291 + 2293 2294 2293 2295 2295 2296 2297 2295 + 2297 2298 2297 2299 2300 2302 2300 2301 + 2302 2297 2302 2306 2303 2300 2303 2304 + 2303 2305 2305 2306 2306 2307 2308 2295 + 2308 2310 2309 2308 2310 2311 2310 2312 + 2312 2313 2314 2312 2314 2315 2314 2316 + 2317 2314 2317 2318 2319 2312 2319 2321 + 2320 2319 2321 2322 2321 2323 2323 2324 + 2325 2323 2325 2326 2325 2327 2328 2325 + 2329 2330 2329 2328 2331 2329 2331 2332 + 2331 2333 2333 2338 2334 2333 2334 2335 + 2336 2328 2336 2337 2338 2339 2338 2336 + 2340 2323 2340 2342 2341 2340 2342 2343 + 2342 2344 2344 2345 2346 2344 2346 2347 + 2346 2348 2349 2346 2349 2350 2351 2344 + 2351 2353 2352 2351 2353 2354 2353 2355 + 2355 2356 2357 2355 2357 2358 2357 2359 + 2360 2357 2361 2362 2361 2360 2363 2361 + 2363 2364 2365 2369 2365 2363 2365 2366 + 2367 2360 2367 2368 2369 2367 2369 2370 + 2371 2355 2371 2373 2372 2371 2373 2374 + 2373 2375 2375 2376 2377 2375 2377 2378 + 2377 2379 2380 2377 2380 2381 2380 2382 + 2383 2380 2383 2384 2385 2383 2386 2375 + 2386 2388 2387 2386 2388 2389 2388 2390 + 2390 2391 2392 2390 2392 2393 2394 2392 + 2394 2395 2394 2396 2394 2397 2398 2392 + 2398 2399 2398 2400 2401 2398 2401 2402 + 2401 2403 2401 2404 2405 2390 2405 2407 + 2406 2405 2407 2408 2407 2409 2409 2410 + 2411 2409 2411 2412 2411 2413 2414 2411 + 2414 2415 2416 2414 2416 2417 2416 2418 + 2416 2419 2420 2414 2420 2421 2420 2422 + 2420 2423 2424 2409 2424 2426 2425 2424 + 2426 2427 2426 2428 2428 2429 2430 2428 + 2430 2431 2430 2432 2433 2430 2433 2434 + 2433 2435 2436 2433 2436 2437 2438 2436 + 2439 2428 2439 2441 2440 2439 2441 2442 + 2441 2443 2443 2444 2445 2443 2445 2446 + 2445 2447 2448 2445 2448 2449 2448 2450 + 2451 2448 2451 2452 2451 2453 2454 2451 + 2454 2455 2456 2454 2456 2457 2457 2458 + 2457 2459 2460 2456 2460 2461 2460 2462 + 2463 2443 2463 2468 2464 2463 2465 2467 + 2465 2466 2465 2470 2468 2469 2468 2470 + 2470 2471 2472 2470 2472 2473 2472 2474 + 2475 2472 2475 2476 2475 2477 2478 2475 + 2478 2479 2478 2480 2481 2478 2481 2482 + 2483 2481 2483 2484 2484 2485 2484 2486 + 2487 2483 2487 2488 2487 2489 2490 2491 + 2490 2492 2493 2494 2493 2495 2496 2497 + 2496 2498 2499 2500 2499 2501 2502 2503 + 2502 2504 2505 2506 2505 2507 2508 2509 + 2508 2510 2511 2512 2511 2513 2514 2515 + 2514 2516 2517 2518 2517 2519 2520 2521 + 2520 2522 2523 2524 2523 2525 2526 2527 + 2526 2528 2529 2530 2529 2531 2532 2533 + 2532 2534 2535 2536 2535 2537 2538 2539 + 2538 2540 2541 2542 2541 2543 2544 2545 + 2544 2546 2547 2548 2547 2549 2550 2551 + 2550 2552 2553 2554 2553 2555 2556 2557 + 2556 2558 2559 2560 2559 2561 2562 2563 + 2562 2564 2565 2566 2565 2567 2568 2569 + 2568 2570 2571 2572 2571 2573 2574 2575 + 2574 2576 2577 2578 2577 2579 2580 2581 + 2580 2582 2583 2584 2583 2585 2586 2587 + 2586 2588 2589 2590 2589 2591 2592 2593 + 2592 2594 2595 2596 2595 2597 2598 2599 + 2598 2600 2601 2602 2601 2603 2604 2605 + 2604 2606 2607 2608 2607 2609 2610 2611 + 2610 2612 2613 2614 2613 2615 2616 2617 + 2616 2618 2619 2620 2619 2621 2622 2623 + 2622 2624 2625 2626 2625 2627 2628 2629 + 2628 2630 2631 2632 2631 2633 2634 2635 + 2634 2636 2637 2638 2637 2639 2640 2641 + 2640 2642 2643 2644 2643 2645 2646 2647 + 2646 2648 2649 2650 2649 2651 2652 2653 + 2652 2654 2655 2656 2655 2657 2658 2659 + 2658 2660 2661 2662 2661 2663 2664 2665 + 2664 2666 2667 2668 2667 2669 2670 2671 + 2670 2672 2673 2674 2673 2675 2676 2677 + 2676 2678 2679 2680 2679 2681 2682 2683 + 2682 2684 2685 2686 2685 2687 2688 2689 + 2688 2690 2691 2692 2691 2693 2694 2695 + 2694 2696 2697 2698 2697 2699 2700 2701 + 2700 2702 2703 2704 2703 2705 2706 2707 + 2706 2708 2709 2710 2709 2711 2712 2713 + 2712 2714 2715 2716 2715 2717 2718 2719 + 2718 2720 2721 2722 2721 2723 2724 2725 + 2724 2726 2727 2728 2727 2729 2730 2731 + 2730 2732 2733 2734 2733 2735 2736 2737 + 2736 2738 2739 2740 2739 2741 2742 2743 + 2742 2744 2745 2746 2745 2747 2748 2749 + 2748 2750 2751 2752 2751 2753 2754 2755 + 2754 2756 2757 2758 2757 2759 2760 2761 + 2760 2762 2763 2764 2763 2765 2766 2767 + 2766 2768 2769 2770 2769 2771 2772 2773 + 2772 2774 2775 2776 2775 2777 2778 2779 + 2778 2780 2781 2782 2781 2783 2784 2785 + 2784 2786 2787 2788 2787 2789 2790 2791 + 2790 2792 2793 2794 2793 2795 2796 2797 + 2796 2798 2799 2800 2799 2801 2802 2803 + 2802 2804 2805 2806 2805 2807 2808 2809 + 2808 2810 2811 2812 2811 2813 2814 2815 + 2814 2816 2817 2818 2817 2819 2820 2821 + 2820 2822 2823 2824 2823 2825 2826 2827 + 2826 2828 2829 2830 2829 2831 2832 2833 + 2832 2834 2835 2836 2835 2837 2838 2839 + 2838 2840 2841 2842 2841 2843 2844 2845 + 2844 2846 2847 2848 2847 2849 2850 2851 + 2850 2852 2853 2854 2853 2855 2856 2857 + 2856 2858 2859 2860 2859 2861 2862 2863 + 2862 2864 2865 2866 2865 2867 2868 2869 + 2868 2870 2871 2872 2871 2873 2874 2875 + 2874 2876 2877 2878 2877 2879 2880 2881 + 2880 2882 2883 2884 2883 2885 2886 2887 + 2886 2888 2889 2890 2889 2891 2892 2893 + 2892 2894 2895 2896 2895 2897 2898 2899 + 2898 2900 2901 2902 2901 2903 2904 2905 + 2904 2906 2907 2908 2907 2909 2910 2911 + 2910 2912 2913 2914 2913 2915 2916 2917 + 2916 2918 2919 2920 2919 2921 2922 2923 + 2922 2924 2925 2926 2925 2927 2928 2929 + 2928 2930 2931 2932 2931 2933 2934 2935 + 2934 2936 2937 2938 2937 2939 2940 2941 + 2940 2942 2943 2944 2943 2945 2946 2947 + 2946 2948 2949 2950 2949 2951 2952 2953 + 2952 2954 2955 2956 2955 2957 2958 2959 + 2958 2960 2961 2962 2961 2963 2964 2965 + 2964 2966 2967 2968 2967 2969 2970 2971 + 2970 2972 2973 2974 2973 2975 2976 2977 + 2976 2978 2979 2980 2979 2981 2982 2983 + 2982 2984 2985 2986 2985 2987 2988 2989 + 2988 2990 2991 2992 2991 2993 2994 2995 + 2994 2996 2997 2998 2997 2999 3000 3001 + 3000 3002 3003 3004 3003 3005 3006 3007 + 3006 3008 3009 3010 3009 3011 3012 3013 + 3012 3014 3015 3016 3015 3017 3018 3019 + 3018 3020 3021 3022 3021 3023 3024 3025 + 3024 3026 3027 3028 3027 3029 3030 3031 + 3030 3032 3033 3034 3033 3035 3036 3037 + 3036 3038 3039 3040 3039 3041 3042 3043 + 3042 3044 3045 3046 3045 3047 3048 3049 + 3048 3050 3051 3052 3051 3053 3054 3055 + 3054 3056 3057 3058 3057 3059 3060 3061 + 3060 3062 3063 3064 3063 3065 3066 3067 + 3066 3068 3069 3070 3069 3071 3072 3073 + 3072 3074 3075 3076 3075 3077 3078 3079 + 3078 3080 3081 3082 3081 3083 3084 3085 + 3084 3086 3087 3088 3087 3089 3090 3091 + 3090 3092 3093 3094 3093 3095 3096 3097 + 3096 3098 3099 3100 3099 3101 3102 3103 + 3102 3104 3105 3106 3105 3107 3108 3109 + 3108 3110 3111 3112 3111 3113 3114 3115 + 3114 3116 3117 3118 3117 3119 3120 3121 + 3120 3122 3123 3124 3123 3125 3126 3127 + 3126 3128 3129 3130 3129 3131 3132 3133 + 3132 3134 3135 3136 3135 3137 3138 3139 + 3138 3140 3141 3142 3141 3143 3144 3145 + 3144 3146 3147 3148 3147 3149 3150 3151 + 3150 3152 3153 3154 3153 3155 3156 3157 + 3156 3158 3159 3160 3159 3161 3162 3163 + 3162 3164 3165 3166 3165 3167 3168 3169 + 3168 3170 3171 3172 3171 3173 3174 3175 + 3174 3176 3177 3178 3177 3179 3180 3181 + 3180 3182 3183 3184 3183 3185 3186 3187 + 3186 3188 3189 3190 3189 3191 3192 3193 + 3192 3194 3195 3196 3195 3197 3198 3199 + 3198 3200 3201 3202 3201 3203 3204 3205 + 3204 3206 3207 3208 3207 3209 3210 3211 + 3210 3212 3213 3214 3213 3215 3216 3217 + 3216 3218 3219 3220 3219 3221 3222 3223 + 3222 3224 3225 3226 3225 3227 3228 3229 + 3228 3230 3231 3232 3231 3233 3234 3235 + 3234 3236 3237 3238 3237 3239 3240 3241 + 3240 3242 3243 3244 3243 3245 3246 3247 + 3246 3248 3249 3250 3249 3251 3252 3253 + 3252 3254 3255 3256 3255 3257 3258 3259 + 3258 3260 3261 3262 3261 3263 3264 3265 + 3264 3266 3267 3268 3267 3269 3270 3271 + 3270 3272 3273 3274 3273 3275 3276 3277 + 3276 3278 3279 3280 3279 3281 3282 3283 + 3282 3284 3285 3286 3285 3287 3288 3289 + 3288 3290 3291 3292 3291 3293 3294 3295 + 3294 3296 3297 3298 3297 3299 3300 3301 + 3300 3302 3303 3304 3303 3305 3306 3307 + 3306 3308 3309 3310 3309 3311 3312 3313 + 3312 3314 3315 3316 3315 3317 3318 3319 + 3318 3320 3321 3322 3321 3323 3324 3325 + 3324 3326 3327 3328 3327 3329 3330 3331 + 3330 3332 3333 3334 3333 3335 3336 3337 + 3336 3338 3339 3340 3339 3341 3342 3343 + 3342 3344 3345 3346 3345 3347 3348 3349 + 3348 3350 3351 3352 3351 3353 3354 3355 + 3354 3356 3357 3358 3357 3359 3360 3361 + 3360 3362 3363 3364 3363 3365 3366 3367 + 3366 3368 3369 3370 3369 3371 3372 3373 + 3372 3374 3375 3376 3375 3377 3378 3379 + 3378 3380 3381 3382 3381 3383 3384 3385 + 3384 3386 3387 3388 3387 3389 3390 3391 + 3390 3392 3393 3394 3393 3395 3396 3397 + 3396 3398 3399 3400 3399 3401 3402 3403 + 3402 3404 3405 3406 3405 3407 3408 3409 + 3408 3410 3411 3412 3411 3413 3414 3415 + 3414 3416 3417 3418 3417 3419 3420 3421 + 3420 3422 3423 3424 3423 3425 3426 3427 + 3426 3428 3429 3430 3429 3431 3432 3433 + 3432 3434 3435 3436 3435 3437 3438 3439 + 3438 3440 3441 3442 3441 3443 3444 3445 + 3444 3446 3447 3448 3447 3449 3450 3451 + 3450 3452 3453 3454 3453 3455 3456 3457 + 3456 3458 3459 3460 3459 3461 3462 3463 + 3462 3464 3465 3466 3465 3467 3468 3469 + 3468 3470 3471 3472 3471 3473 3474 3475 + 3474 3476 3477 3478 3477 3479 3480 3481 + 3480 3482 3483 3484 3483 3485 3486 3487 + 3486 3488 3489 3490 3489 3491 3492 3493 + 3492 3494 3495 3496 3495 3497 3498 3499 + 3498 3500 3501 3502 3501 3503 3504 3505 + 3504 3506 3507 3508 3507 3509 3510 3511 + 3510 3512 3513 3514 3513 3515 3516 3517 + 3516 3518 3519 3520 3519 3521 3522 3523 + 3522 3524 3525 3526 3525 3527 3528 3529 + 3528 3530 3531 3532 3531 3533 3534 3535 + 3534 3536 3537 3538 3537 3539 3540 3541 + 3540 3542 3543 3544 3543 3545 3546 3547 + 3546 3548 3549 3550 3549 3551 3552 3553 + 3552 3554 3555 3556 3555 3557 3558 3559 + 3558 3560 3561 3562 3561 3563 3564 3565 + 3564 3566 3567 3568 3567 3569 3570 3571 + 3570 3572 3573 3574 3573 3575 3576 3577 + 3576 3578 3579 3580 3579 3581 3582 3583 + 3582 3584 3585 3586 3585 3587 3588 3589 + 3588 3590 3591 3592 3591 3593 3594 3595 + 3594 3596 3597 3598 3597 3599 3600 3601 + 3600 3602 3603 3604 3603 3605 3606 3607 + 3606 3608 3609 3610 3609 3611 3612 3613 + 3612 3614 3615 3616 3615 3617 3618 3619 + 3618 3620 3621 3622 3621 3623 3624 3625 + 3624 3626 3627 3628 3627 3629 3630 3631 + 3630 3632 3633 3634 3633 3635 3636 3637 + 3636 3638 3639 3640 3639 3641 3642 3643 + 3642 3644 3645 3646 3645 3647 3648 3649 + 3648 3650 3651 3652 3651 3653 3654 3655 + 3654 3656 3657 3658 3657 3659 3660 3661 + 3660 3662 3663 3664 3663 3665 3666 3667 + 3666 3668 3669 3670 3669 3671 3672 3673 + 3672 3674 3675 3676 3675 3677 3678 3679 + 3678 3680 3681 3682 3681 3683 3684 3685 + 3684 3686 3687 3688 3687 3689 3690 3691 + 3690 3692 3693 3694 3693 3695 3696 3697 + 3696 3698 3699 3700 3699 3701 3702 3703 + 3702 3704 3705 3706 3705 3707 3708 3709 + 3708 3710 3711 3712 3711 3713 3714 3715 + 3714 3716 3717 3718 3717 3719 3720 3721 + 3720 3722 3723 3724 3723 3725 3726 3727 + 3726 3728 3729 3730 3729 3731 3732 3733 + 3732 3734 3735 3736 3735 3737 3738 3739 + 3738 3740 3741 3742 3741 3743 3744 3745 + 3744 3746 3747 3748 3747 3749 3750 3751 + 3750 3752 3753 3754 3753 3755 3756 3757 + 3756 3758 3759 3760 3759 3761 3762 3763 + 3762 3764 3765 3766 3765 3767 3768 3769 + 3768 3770 3771 3772 3771 3773 3774 3775 + 3774 3776 3777 3778 3777 3779 3780 3781 + 3780 3782 3783 3784 3783 3785 3786 3787 + 3786 3788 3789 3790 3789 3791 3792 3793 + 3792 3794 3795 3796 3795 3797 3798 3799 + 3798 3800 3801 3802 3801 3803 3804 3805 + 3804 3806 3807 3808 3807 3809 3810 3811 + 3810 3812 3813 3814 3813 3815 3816 3817 + 3816 3818 3819 3820 3819 3821 3822 3823 + 3822 3824 3825 3826 3825 3827 3828 3829 + 3828 3830 3831 3832 3831 3833 3834 3835 + 3834 3836 3837 3838 3837 3839 3840 3841 + 3840 3842 3843 3844 3843 3845 3846 3847 + 3846 3848 3849 3850 3849 3851 3852 3853 + 3852 3854 3855 3856 3855 3857 3858 3859 + 3858 3860 3861 3862 3861 3863 3864 3865 + 3864 3866 3867 3868 3867 3869 3870 3871 + 3870 3872 3873 3874 3873 3875 3876 3877 + 3876 3878 3879 3880 3879 3881 3882 3883 + 3882 3884 3885 3886 3885 3887 3888 3889 + 3888 3890 3891 3892 3891 3893 3894 3895 + 3894 3896 3897 3898 3897 3899 3900 3901 + 3900 3902 3903 3904 3903 3905 3906 3907 + 3906 3908 3909 3910 3909 3911 3912 3913 + 3912 3914 3915 3916 3915 3917 3918 3919 + 3918 3920 3921 3922 3921 3923 3924 3925 + 3924 3926 3927 3928 3927 3929 3930 3931 + 3930 3932 3933 3934 3933 3935 3936 3937 + 3936 3938 3939 3940 3939 3941 3942 3943 + 3942 3944 3945 3946 3945 3947 3948 3949 + 3948 3950 3951 3952 3951 3953 3954 3955 + 3954 3956 3957 3958 3957 3959 3960 3961 + 3960 3962 3963 3964 3963 3965 3966 3967 + 3966 3968 3969 3970 3969 3971 3972 3973 + 3972 3974 3975 3976 3975 3977 3978 3979 + 3978 3980 3981 3982 3981 3983 3984 3985 + 3984 3986 3987 3988 3987 3989 3990 3991 + 3990 3992 3993 3994 3993 3995 3996 3997 + 3996 3998 3999 4000 3999 4001 4002 4003 + 4002 4004 4005 4006 4005 4007 4008 4009 + 4008 4010 4011 4012 4011 4013 4014 4015 + 4014 4016 4017 4018 4017 4019 4020 4021 + 4020 4022 4023 4024 4023 4025 4026 4027 + 4026 4028 4029 4030 4029 4031 4032 4033 + 4032 4034 4035 4036 4035 4037 4038 4039 + 4038 4040 4041 4042 4041 4043 4044 4045 + 4044 4046 4047 4048 4047 4049 4050 4051 + 4050 4052 4053 4054 4053 4055 4056 4057 + 4056 4058 4059 4060 4059 4061 4062 4063 + 4062 4064 4065 4066 4065 4067 4068 4069 + 4068 4070 4071 4072 4071 4073 4074 4075 + 4074 4076 4077 4078 4077 4079 4080 4081 + 4080 4082 4083 4084 4083 4085 4086 4087 + 4086 4088 4089 4090 4089 4091 4092 4093 + 4092 4094 4095 4096 4095 4097 4098 4099 + 4098 4100 4101 4102 4101 4103 4104 4105 + 4104 4106 4107 4108 4107 4109 4110 4111 + 4110 4112 4113 4114 4113 4115 4116 4117 + 4116 4118 4119 4120 4119 4121 4122 4123 + 4122 4124 4125 4126 4125 4127 4128 4129 + 4128 4130 4131 4132 4131 4133 4134 4135 + 4134 4136 4137 4138 4137 4139 4140 4141 + 4140 4142 4143 4144 4143 4145 4146 4147 + 4146 4148 4149 4150 4149 4151 4152 4153 + 4152 4154 4155 4156 4155 4157 4158 4159 + 4158 4160 4161 4162 4161 4163 4164 4165 + 4164 4166 4167 4168 4167 4169 4170 4171 + 4170 4172 4173 4174 4173 4175 4176 4177 + 4176 4178 4179 4180 4179 4181 4182 4183 + 4182 4184 4185 4186 4185 4187 4188 4189 + 4188 4190 4191 4192 4191 4193 4194 4195 + 4194 4196 4197 4198 4197 4199 4200 4201 + 4200 4202 4203 4204 4203 4205 4206 4207 + 4206 4208 4209 4210 4209 4211 4212 4213 + 4212 4214 4215 4216 4215 4217 4218 4219 + 4218 4220 4221 4222 4221 4223 4224 4225 + 4224 4226 4227 4228 4227 4229 4230 4231 + 4230 4232 4233 4234 4233 4235 4236 4237 + 4236 4238 4239 4240 4239 4241 4242 4243 + 4242 4244 4245 4246 4245 4247 4248 4249 + 4248 4250 4251 4252 4251 4253 4254 4255 + 4254 4256 4257 4258 4257 4259 4260 4261 + 4260 4262 4263 4264 4263 4265 4266 4267 + 4266 4268 4269 4270 4269 4271 4272 4273 + 4272 4274 4275 4276 4275 4277 4278 4279 + 4278 4280 4281 4282 4281 4283 4284 4285 + 4284 4286 4287 4288 4287 4289 4290 4291 + 4290 4292 4293 4294 4293 4295 4296 4297 + 4296 4298 4299 4300 4299 4301 4302 4303 + 4302 4304 4305 4306 4305 4307 4308 4309 + 4308 4310 4311 4312 4311 4313 4314 4315 + 4314 4316 4317 4318 4317 4319 4320 4321 + 4320 4322 4323 4324 4323 4325 4326 4327 + 4326 4328 4329 4330 4329 4331 4332 4333 + 4332 4334 4335 4336 4335 4337 4338 4339 + 4338 4340 4341 4342 4341 4343 4344 4345 + 4344 4346 4347 4348 4347 4349 4350 4351 + 4350 4352 4353 4354 4353 4355 4356 4357 + 4356 4358 4359 4360 4359 4361 4362 4363 + 4362 4364 4365 4366 4365 4367 4368 4369 + 4368 4370 4371 4372 4371 4373 4374 4375 + 4374 4376 4377 4378 4377 4379 4380 4381 + 4380 4382 4383 4384 4383 4385 4386 4387 + 4386 4388 4389 4390 4389 4391 4392 4393 + 4392 4394 4395 4396 4395 4397 4398 4399 + 4398 4400 4401 4402 4401 4403 4404 4405 + 4404 4406 4407 4408 4407 4409 4410 4411 + 4410 4412 4413 4414 4413 4415 4416 4417 + 4416 4418 4419 4420 4419 4421 4422 4423 + 4422 4424 4425 4426 4425 4427 4428 4429 + 4428 4430 4431 4432 4431 4433 4434 4435 + 4434 4436 4437 4438 4437 4439 4440 4441 + 4440 4442 4443 4444 4443 4445 4446 4447 + 4446 4448 4449 4450 4449 4451 4452 4453 + 4452 4454 4455 4456 4455 4457 4458 4459 + 4458 4460 4461 4462 4461 4463 4464 4465 + 4464 4466 4467 4468 4467 4469 4470 4471 + 4470 4472 4473 4474 4473 4475 4476 4477 + 4476 4478 4479 4480 4479 4481 4482 4483 + 4482 4484 4485 4486 4485 4487 4488 4489 + 4488 4490 4491 4492 4491 4493 4494 4495 + 4494 4496 4497 4498 4497 4499 4500 4501 + 4500 4502 4503 4504 4503 4505 4506 4507 + 4506 4508 4509 4510 4509 4511 4512 4513 + 4512 4514 4515 4516 4515 4517 4518 4519 + 4518 4520 4521 4522 4521 4523 4524 4525 + 4524 4526 4527 4528 4527 4529 4530 4531 + 4530 4532 4533 4534 4533 4535 4536 4537 + 4536 4538 4539 4540 4539 4541 4542 4543 + 4542 4544 4545 4546 4545 4547 4548 4549 + 4548 4550 4551 4552 4551 4553 4554 4555 + 4554 4556 4557 4558 4557 4559 4560 4561 + 4560 4562 4563 4564 4563 4565 4566 4567 + 4566 4568 4569 4570 4569 4571 4572 4573 + 4572 4574 4575 4576 4575 4577 4578 4579 + 4578 4580 4581 4582 4581 4583 4584 4585 + 4584 4586 4587 4588 4587 4589 4590 4591 + 4590 4592 4593 4594 4593 4595 4596 4597 + 4596 4598 4599 4600 4599 4601 4602 4603 + 4602 4604 4605 4606 4605 4607 4608 4609 + 4608 4610 4611 4612 4611 4613 4614 4615 + 4614 4616 4617 4618 4617 4619 4620 4621 + 4620 4622 4623 4624 4623 4625 4626 4627 + 4626 4628 4629 4630 4629 4631 4632 4633 + 4632 4634 4635 4636 4635 4637 4638 4639 + 4638 4640 4641 4642 4641 4643 4644 4645 + 4644 4646 4647 4648 4647 4649 4650 4651 + 4650 4652 4653 4654 4653 4655 4656 4657 + 4656 4658 4659 4660 4659 4661 4662 4663 + 4662 4664 4665 4666 4665 4667 4668 4669 + 4668 4670 4671 4672 4671 4673 4674 4675 + 4674 4676 4677 4678 4677 4679 4680 4681 + 4680 4682 4683 4684 4683 4685 4686 4687 + 4686 4688 4689 4690 4689 4691 4692 4693 + 4692 4694 4695 4696 4695 4697 4698 4699 + 4698 4700 4701 4702 4701 4703 4704 4705 + 4704 4706 4707 4708 4707 4709 4710 4711 + 4710 4712 4713 4714 4713 4715 4716 4717 + 4716 4718 4719 4720 4719 4721 4722 4723 + 4722 4724 4725 4726 4725 4727 4728 4729 + 4728 4730 4731 4732 4731 4733 4734 4735 + 4734 4736 4737 4738 4737 4739 4740 4741 + 4740 4742 4743 4744 4743 4745 4746 4747 + 4746 4748 4749 4750 4749 4751 4752 4753 + 4752 4754 4755 4756 4755 4757 4758 4759 + 4758 4760 4761 4762 4761 4763 4764 4765 + 4764 4766 4767 4768 4767 4769 4770 4771 + 4770 4772 4773 4774 4773 4775 4776 4777 + 4776 4778 4779 4780 4779 4781 4782 4783 + 4782 4784 4785 4786 4785 4787 4788 4789 + 4788 4790 4791 4792 4791 4793 4794 4795 + 4794 4796 4797 4798 4797 4799 4800 4801 + 4800 4802 4803 4804 4803 4805 4806 4807 + 4806 4808 4809 4810 4809 4811 4812 4813 + 4812 4814 4815 4816 4815 4817 4818 4819 + 4818 4820 4821 4822 4821 4823 4824 4825 + 4824 4826 4827 4828 4827 4829 4830 4831 + 4830 4832 4833 4834 4833 4835 4836 4837 + 4836 4838 4839 4840 4839 4841 4842 4843 + 4842 4844 4845 4846 4845 4847 4848 4849 + 4848 4850 4851 4852 4851 4853 4854 4855 + 4854 4856 4857 4858 4857 4859 4860 4861 + 4860 4862 4863 4864 4863 4865 4866 4867 + 4866 4868 4869 4870 4869 4871 4872 4873 + 4872 4874 4875 4876 4875 4877 4878 4879 + 4878 4880 4881 4882 4881 4883 4884 4885 + 4884 4886 4887 4888 4887 4889 4890 4891 + 4890 4892 4893 4894 4893 4895 4896 4897 + 4896 4898 4899 4900 4899 4901 4902 4903 + 4902 4904 4905 4906 4905 4907 4908 4909 + 4908 4910 4911 4912 4911 4913 4914 4915 + 4914 4916 4917 4918 4917 4919 4920 4921 + 4920 4922 4923 4924 4923 4925 4926 4927 + 4926 4928 4929 4930 4929 4931 4932 4933 + 4932 4934 4935 4936 4935 4937 4938 4939 + 4938 4940 4941 4942 4941 4943 4944 4945 + 4944 4946 4947 4948 4947 4949 4950 4951 + 4950 4952 4953 4954 4953 4955 4956 4957 + 4956 4958 4959 4960 4959 4961 4962 4963 + 4962 4964 4965 4966 4965 4967 4968 4969 + 4968 4970 4971 4972 4971 4973 4974 4975 + 4974 4976 4977 4978 4977 4979 4980 4981 + 4980 4982 4983 4984 4983 4985 4986 4987 + 4986 4988 4989 4990 4989 4991 4992 4993 + 4992 4994 4995 4996 4995 4997 4998 4999 + 4998 5000 5001 5002 5001 5003 5004 5005 + 5004 5006 5007 5008 5007 5009 5010 5011 + 5010 5012 5013 5014 5013 5015 5016 5017 + 5016 5018 5019 5020 5019 5021 5022 5023 + 5022 5024 5025 5026 5025 5027 5028 5029 + 5028 5030 5031 5032 5031 5033 5034 5035 + 5034 5036 5037 5038 5037 5039 5040 5041 + 5040 5042 5043 5044 5043 5045 5046 5047 + 5046 5048 5049 5050 5049 5051 5052 5053 + 5052 5054 5055 5056 5055 5057 5058 5059 + 5058 5060 5061 5062 5061 5063 5064 5065 + 5064 5066 5067 5068 5067 5069 5070 5071 + 5070 5072 5073 5074 5073 5075 5076 5077 + 5076 5078 5079 5080 5079 5081 5082 5083 + 5082 5084 5085 5086 5085 5087 5088 5089 + 5088 5090 5091 5092 5091 5093 5094 5095 + 5094 5096 5097 5098 5097 5099 5100 5101 + 5100 5102 5103 5104 5103 5105 5106 5107 + 5106 5108 5109 5110 5109 5111 5112 5113 + 5112 5114 5115 5116 5115 5117 5118 5119 + 5118 5120 5121 5122 5121 5123 5124 5125 + 5124 5126 5127 5128 5127 5129 5130 5131 + 5130 5132 5133 5134 5133 5135 5136 5137 + 5136 5138 5139 5140 5139 5141 5142 5143 + 5142 5144 5145 5146 5145 5147 5148 5149 + 5148 5150 5151 5152 5151 5153 5154 5155 + 5154 5156 5157 5158 5157 5159 5160 5161 + 5160 5162 5163 5164 5163 5165 5166 5167 + 5166 5168 5169 5170 5169 5171 5172 5173 + 5172 5174 5175 5176 5175 5177 5178 5179 + 5178 5180 5181 5182 5181 5183 5184 5185 + 5184 5186 5187 5188 5187 5189 5190 5191 + 5190 5192 5193 5194 5193 5195 5196 5197 + 5196 5198 5199 5200 5199 5201 5202 5203 + 5202 5204 5205 5206 5205 5207 5208 5209 + 5208 5210 5211 5212 5211 5213 5214 5215 + 5214 5216 5217 5218 5217 5219 5220 5221 + 5220 5222 5223 5224 5223 5225 5226 5227 + 5226 5228 5229 5230 5229 5231 5232 5233 + 5232 5234 5235 5236 5235 5237 5238 5239 + 5238 5240 5241 5242 5241 5243 5244 5245 + 5244 5246 5247 5248 5247 5249 5250 5251 + 5250 5252 5253 5254 5253 5255 5256 5257 + 5256 5258 5259 5260 5259 5261 5262 5263 + 5262 5264 5265 5266 5265 5267 5268 5269 + 5268 5270 5271 5272 5271 5273 5274 5275 + 5274 5276 5277 5278 5277 5279 5280 5281 + 5280 5282 5283 5284 5283 5285 5286 5287 + 5286 5288 5289 5290 5289 5291 5292 5293 + 5292 5294 5295 5296 5295 5297 5298 5299 + 5298 5300 5301 5302 5301 5303 5304 5305 + 5304 5306 5307 5308 5307 5309 5310 5311 + 5310 5312 5313 5314 5313 5315 5316 5317 + 5316 5318 5319 5320 5319 5321 5322 5323 + 5322 5324 5325 5326 5325 5327 5328 5329 + 5328 5330 5331 5332 5331 5333 5334 5335 + 5334 5336 5337 5338 5337 5339 5340 5341 + 5340 5342 5343 5344 5343 5345 5346 5347 + 5346 5348 5349 5350 5349 5351 5352 5353 + 5352 5354 5355 5356 5355 5357 5358 5359 + 5358 5360 5361 5362 5361 5363 5364 5365 + 5364 5366 5367 5368 5367 5369 5370 5371 + 5370 5372 5373 5374 5373 5375 5376 5377 + 5376 5378 5379 5380 5379 5381 5382 5383 + 5382 5384 5385 5386 5385 5387 5388 5389 + 5388 5390 5391 5392 5391 5393 5394 5395 + 5394 5396 5397 5398 5397 5399 5400 5401 + 5400 5402 5403 5404 5403 5405 5406 5407 + 5406 5408 5409 5410 5409 5411 5412 5413 + 5412 5414 5415 5416 5415 5417 5418 5419 + 5418 5420 5421 5422 5421 5423 5424 5425 + 5424 5426 5427 5428 5427 5429 5430 5431 + 5430 5432 5433 5434 5433 5435 5436 5437 + 5436 5438 5439 5440 5439 5441 5442 5443 + 5442 5444 5445 5446 5445 5447 5448 5449 + 5448 5450 5451 5452 5451 5453 5454 5455 + 5454 5456 5457 5458 5457 5459 5460 5461 + 5460 5462 5463 5464 5463 5465 5466 5467 + 5466 5468 5469 5470 5469 5471 5472 5473 + 5472 5474 5475 5476 5475 5477 5478 5479 + 5478 5480 5481 5482 5481 5483 5484 5485 + 5484 5486 5487 5488 5487 5489 5490 5491 + 5490 5492 5493 5494 5493 5495 5496 5497 + 5496 5498 5499 5500 5499 5501 5502 5503 + 5502 5504 5505 5506 5505 5507 5508 5509 + 5508 5510 5511 5512 5511 5513 5514 5515 + 5514 5516 5517 5518 5517 5519 5520 5521 + 5520 5522 5523 5524 5523 5525 5526 5527 + 5526 5528 5529 5530 5529 5531 5532 5533 + 5532 5534 5535 5536 5535 5537 5538 5539 + 5538 5540 5541 5542 5541 5543 5544 5545 + 5544 5546 5547 5548 5547 5549 5550 5551 + 5550 5552 5553 5554 5553 5555 5556 5557 + 5556 5558 5559 5560 5559 5561 5562 5563 + 5562 5564 5565 5566 5565 5567 5568 5569 + 5568 5570 5571 5572 5571 5573 5574 5575 + 5574 5576 5577 5578 5577 5579 5580 5581 + 5580 5582 5583 5584 5583 5585 5586 5587 + 5586 5588 5589 5590 5589 5591 5592 5593 + 5592 5594 5595 5596 5595 5597 5598 5599 + 5598 5600 5601 5602 5601 5603 5604 5605 + 5604 5606 5607 5608 5607 5609 5610 5611 + 5610 5612 5613 5614 5613 5615 5616 5617 + 5616 5618 5619 5620 5619 5621 5622 5623 + 5622 5624 5625 5626 5625 5627 5628 5629 + 5628 5630 5631 5632 5631 5633 5634 5635 + 5634 5636 5637 5638 5637 5639 5640 5641 + 5640 5642 5643 5644 5643 5645 5646 5647 + 5646 5648 5649 5650 5649 5651 5652 5653 + 5652 5654 5655 5656 5655 5657 5658 5659 + 5658 5660 5661 5662 5661 5663 5664 5665 + 5664 5666 5667 5668 5667 5669 5670 5671 + 5670 5672 5673 5674 5673 5675 5676 5677 + 5676 5678 5679 5680 5679 5681 5682 5683 + 5682 5684 5685 5686 5685 5687 5688 5689 + 5688 5690 5691 5692 5691 5693 5694 5695 + 5694 5696 5697 5698 5697 5699 5700 5701 + 5700 5702 5703 5704 5703 5705 5706 5707 + 5706 5708 5709 5710 5709 5711 5712 5713 + 5712 5714 5715 5716 5715 5717 5718 5719 + 5718 5720 5721 5722 5721 5723 5724 5725 + 5724 5726 5727 5728 5727 5729 5730 5731 + 5730 5732 5733 5734 5733 5735 5736 5737 + 5736 5738 5739 5740 5739 5741 5742 5743 + 5742 5744 5745 5746 5745 5747 5748 5749 + 5748 5750 5751 5752 5751 5753 5754 5755 + 5754 5756 5757 5758 5757 5759 5760 5761 + 5760 5762 5763 5764 5763 5765 5766 5767 + 5766 5768 5769 5770 5769 5771 5772 5773 + 5772 5774 5775 5776 5775 5777 5778 5779 + 5778 5780 5781 5782 5781 5783 5784 5785 + 5784 5786 5787 5788 5787 5789 5790 5791 + 5790 5792 5793 5794 5793 5795 5796 5797 + 5796 5798 5799 5800 5799 5801 5802 5803 + 5802 5804 5805 5806 5805 5807 5808 5809 + 5808 5810 5811 5812 5811 5813 5814 5815 + 5814 5816 5817 5818 5817 5819 5820 5821 + 5820 5822 5823 5824 5823 5825 5826 5827 + 5826 5828 5829 5830 5829 5831 5832 5833 + 5832 5834 5835 5836 5835 5837 5838 5839 + 5838 5840 5841 5842 5841 5843 5844 5845 + 5844 5846 5847 5848 5847 5849 5850 5851 + 5850 5852 5853 5854 5853 5855 5856 5857 + 5856 5858 5859 5860 5859 5861 5862 5863 + 5862 5864 5865 5866 5865 5867 5868 5869 + 5868 5870 5871 5872 5871 5873 5874 5875 + 5874 5876 5877 5878 5877 5879 5880 5881 + 5880 5882 5883 5884 5883 5885 5886 5887 + 5886 5888 5889 5890 5889 5891 5892 5893 + 5892 5894 5895 5896 5895 5897 5898 5899 + 5898 5900 5901 5902 5901 5903 5904 5905 + 5904 5906 5907 5908 5907 5909 5910 5911 + 5910 5912 5913 5914 5913 5915 5916 5917 + 5916 5918 5919 5920 5919 5921 5922 5923 + 5922 5924 5925 5926 5925 5927 5928 5929 + 5928 5930 5931 5932 5931 5933 5934 5935 + 5934 5936 5937 5938 5937 5939 5940 5941 + 5940 5942 5943 5944 5943 5945 5946 5947 + 5946 5948 5949 5950 5949 5951 5952 5953 + 5952 5954 5955 5956 5955 5957 5958 5959 + 5958 5960 5961 5962 5961 5963 5964 5965 + 5964 5966 5967 5968 5967 5969 5970 5971 + 5970 5972 5973 5974 5973 5975 5976 5977 + 5976 5978 5979 5980 5979 5981 5982 5983 + 5982 5984 5985 5986 5985 5987 5988 5989 + 5988 5990 5991 5992 5991 5993 5994 5995 + 5994 5996 5997 5998 5997 5999 6000 6001 + 6000 6002 6003 6004 6003 6005 6006 6007 + 6006 6008 6009 6010 6009 6011 6012 6013 + 6012 6014 6015 6016 6015 6017 6018 6019 + 6018 6020 6021 6022 6021 6023 6024 6025 + 6024 6026 6027 6028 6027 6029 6030 6031 + 6030 6032 6033 6034 6033 6035 6036 6037 + 6036 6038 6039 6040 6039 6041 6042 6043 + 6042 6044 6045 6046 6045 6047 6048 6049 + 6048 6050 6051 6052 6051 6053 6054 6055 + 6054 6056 6057 6058 6057 6059 6060 6061 + 6060 6062 6063 6064 6063 6065 6066 6067 + 6066 6068 6069 6070 6069 6071 6072 6073 + 6072 6074 6075 6076 6075 6077 6078 6079 + 6078 6080 6081 6082 6081 6083 6084 6085 + 6084 6086 6087 6088 6087 6089 6090 6091 + 6090 6092 6093 6094 6093 6095 6096 6097 + 6096 6098 6099 6100 6099 6101 6102 6103 + 6102 6104 6105 6106 6105 6107 6108 6109 + 6108 6110 6111 6112 6111 6113 6114 6115 + 6114 6116 6117 6118 6117 6119 6120 6121 + 6120 6122 6123 6124 6123 6125 6126 6127 + 6126 6128 6129 6130 6129 6131 6132 6133 + 6132 6134 6135 6136 6135 6137 6138 6139 + 6138 6140 6141 6142 6141 6143 6144 6145 + 6144 6146 6147 6148 6147 6149 6150 6151 + 6150 6152 6153 6154 6153 6155 6156 6157 + 6156 6158 6159 6160 6159 6161 6162 6163 + 6162 6164 6165 6166 6165 6167 6168 6169 + 6168 6170 6171 6172 6171 6173 6174 6175 + 6174 6176 6177 6178 6177 6179 6180 6181 + 6180 6182 6183 6184 6183 6185 6186 6187 + 6186 6188 6189 6190 6189 6191 6192 6193 + 6192 6194 6195 6196 6195 6197 6198 6199 + 6198 6200 6201 6202 6201 6203 6204 6205 + 6204 6206 6207 6208 6207 6209 6210 6211 + 6210 6212 6213 6214 6213 6215 6216 6217 + 6216 6218 6219 6220 6219 6221 6222 6223 + 6222 6224 6225 6226 6225 6227 6228 6229 + 6228 6230 6231 6232 6231 6233 6234 6235 + 6234 6236 6237 6238 6237 6239 6240 6241 + 6240 6242 6243 6244 6243 6245 6246 6247 + 6246 6248 6249 6250 6249 6251 6252 6253 + 6252 6254 6255 6256 6255 6257 6258 6259 + 6258 6260 6261 6262 6261 6263 6264 6265 + 6264 6266 6267 6268 6267 6269 6270 6271 + 6270 6272 6273 6274 6273 6275 6276 6277 + 6276 6278 6279 6280 6279 6281 6282 6283 + 6282 6284 6285 6286 6285 6287 6288 6289 + 6288 6290 6291 6292 6291 6293 6294 6295 + 6294 6296 6297 6298 6297 6299 6300 6301 + 6300 6302 6303 6304 6303 6305 6306 6307 + 6306 6308 6309 6310 6309 6311 6312 6313 + 6312 6314 6315 6316 6315 6317 6318 6319 + 6318 6320 6321 6322 6321 6323 6324 6325 + 6324 6326 6327 6328 6327 6329 6330 6331 + 6330 6332 6333 6334 6333 6335 6336 6337 + 6336 6338 6339 6340 6339 6341 6342 6343 + 6342 6344 6345 6346 6345 6347 6348 6349 + 6348 6350 6351 6352 6351 6353 6354 6355 + 6354 6356 6357 6358 6357 6359 6360 6361 + 6360 6362 6363 6364 6363 6365 6366 6367 + 6366 6368 6369 6370 6369 6371 6372 6373 + 6372 6374 6375 6376 6375 6377 6378 6379 + 6378 6380 6381 6382 6381 6383 6384 6385 + 6384 6386 6387 6388 6387 6389 6390 6391 + 6390 6392 6393 6394 6393 6395 6396 6397 + 6396 6398 6399 6400 6399 6401 6402 6403 + 6402 6404 6405 6406 6405 6407 6408 6409 + 6408 6410 6411 6412 6411 6413 6414 6415 + 6414 6416 6417 6418 6417 6419 6420 6421 + 6420 6422 6423 6424 6423 6425 6426 6427 + 6426 6428 6429 6430 6429 6431 6432 6433 + 6432 6434 6435 6436 6435 6437 6438 6439 + 6438 6440 6441 6442 6441 6443 6444 6445 + 6444 6446 6447 6448 6447 6449 6450 6451 + 6450 6452 6453 6454 6453 6455 6456 6457 + 6456 6458 6459 6460 6459 6461 6462 6463 + 6462 6464 6465 6466 6465 6467 6468 6469 + 6468 6470 6471 6472 6471 6473 6474 6475 + 6474 6476 6477 6478 6477 6479 6480 6481 + 6480 6482 6483 6484 6483 6485 6486 6487 + 6486 6488 6489 6490 6489 6491 6492 6493 + 6492 6494 6495 6496 6495 6497 6498 6499 + 6498 6500 6501 6502 6501 6503 6504 6505 + 6504 6506 6507 6508 6507 6509 6510 6511 + 6510 6512 6513 6514 6513 6515 6516 6517 + 6516 6518 6519 6520 6519 6521 6522 6523 + 6522 6524 6525 6526 6525 6527 6528 6529 + 6528 6530 6531 6532 6531 6533 6534 6535 + 6534 6536 6537 6538 6537 6539 6540 6541 + 6540 6542 6543 6544 6543 6545 6546 6547 + 6546 6548 6549 6550 6549 6551 6552 6553 + 6552 6554 6555 6556 6555 6557 6558 6559 + 6558 6560 6561 6562 6561 6563 6564 6565 + 6564 6566 6567 6568 6567 6569 6570 6571 + 6570 6572 6573 6574 6573 6575 6576 6577 + 6576 6578 6579 6580 6579 6581 6582 6583 + 6582 6584 6585 6586 6585 6587 6588 6589 + 6588 6590 6591 6592 6591 6593 6594 6595 + 6594 6596 6597 6598 6597 6599 6600 6601 + 6600 6602 6603 6604 6603 6605 6606 6607 + 6606 6608 6609 6610 6609 6611 6612 6613 + 6612 6614 6615 6616 6615 6617 6618 6619 + 6618 6620 6621 6622 6621 6623 6624 6625 + 6624 6626 6627 6628 6627 6629 6630 6631 + 6630 6632 6633 6634 6633 6635 6636 6637 + 6636 6638 6639 6640 6639 6641 6642 6643 + 6642 6644 6645 6646 6645 6647 6648 6649 + 6648 6650 6651 6652 6651 6653 6654 6655 + 6654 6656 6657 6658 6657 6659 6660 6661 + 6660 6662 6663 6664 6663 6665 6666 6667 + 6666 6668 6669 6670 6669 6671 6672 6673 + 6672 6674 6675 6676 6675 6677 6678 6679 + 6678 6680 6681 6682 6681 6683 6684 6685 + 6684 6686 6687 6688 6687 6689 6690 6691 + 6690 6692 6693 6694 6693 6695 6696 6697 + 6696 6698 6699 6700 6699 6701 6702 6703 + 6702 6704 6705 6706 6705 6707 6708 6709 + 6708 6710 6711 6712 6711 6713 6714 6715 + 6714 6716 6717 6718 6717 6719 6720 6721 + 6720 6722 6723 6724 6723 6725 6726 6727 + 6726 6728 6729 6730 6729 6731 6732 6733 + 6732 6734 6735 6736 6735 6737 6738 6739 + 6738 6740 6741 6742 6741 6743 6744 6745 + 6744 6746 6747 6748 6747 6749 6750 6751 + 6750 6752 6753 6754 6753 6755 6756 6757 + 6756 6758 6759 6760 6759 6761 6762 6763 + 6762 6764 6765 6766 6765 6767 6768 6769 + 6768 6770 6771 6772 6771 6773 6774 6775 + 6774 6776 6777 6778 6777 6779 6780 6781 + 6780 6782 6783 6784 6783 6785 6786 6787 + 6786 6788 6789 6790 6789 6791 6792 6793 + 6792 6794 6795 6796 6795 6797 6798 6799 + 6798 6800 6801 6802 6801 6803 6804 6805 + 6804 6806 6807 6808 6807 6809 6810 6811 + 6810 6812 6813 6814 6813 6815 6816 6817 + 6816 6818 6819 6820 6819 6821 6822 6823 + 6822 6824 6825 6826 6825 6827 6828 6829 + 6828 6830 6831 6832 6831 6833 6834 6835 + 6834 6836 6837 6838 6837 6839 6840 6841 + 6840 6842 6843 6844 6843 6845 6846 6847 + 6846 6848 6849 6850 6849 6851 6852 6853 + 6852 6854 6855 6856 6855 6857 6858 6859 + 6858 6860 6861 6862 6861 6863 6864 6865 + 6864 6866 6867 6868 6867 6869 6870 6871 + 6870 6872 6873 6874 6873 6875 6876 6877 + 6876 6878 6879 6880 6879 6881 6882 6883 + 6882 6884 6885 6886 6885 6887 6888 6889 + 6888 6890 6891 6892 6891 6893 6894 6895 + 6894 6896 6897 6898 6897 6899 6900 6901 + 6900 6902 6903 6904 6903 6905 6906 6907 + 6906 6908 6909 6910 6909 6911 6912 6913 + 6912 6914 6915 6916 6915 6917 6918 6919 + 6918 6920 6921 6922 6921 6923 6924 6925 + 6924 6926 6927 6928 6927 6929 6930 6931 + 6930 6932 6933 6934 6933 6935 6936 6937 + 6936 6938 6939 6940 6939 6941 6942 6943 + 6942 6944 6945 6946 6945 6947 6948 6949 + 6948 6950 6951 6952 6951 6953 6954 6955 + 6954 6956 6957 6958 6957 6959 6960 6961 + 6960 6962 6963 6964 6963 6965 6966 6967 + 6966 6968 6969 6970 6969 6971 6972 6973 + 6972 6974 6975 6976 6975 6977 6978 6979 + 6978 6980 6981 6982 6981 6983 6984 6985 + 6984 6986 6987 6988 6987 6989 6990 6991 + 6990 6992 6993 6994 6993 6995 6996 6997 + 6996 6998 6999 7000 6999 7001 7002 7003 + 7002 7004 7005 7006 7005 7007 7008 7009 + 7008 7010 7011 7012 7011 7013 7014 7015 + 7014 7016 7017 7018 7017 7019 7020 7021 + 7020 7022 7023 7024 7023 7025 7026 7027 + 7026 7028 7029 7030 7029 7031 7032 7033 + 7032 7034 7035 7036 7035 7037 7038 7039 + 7038 7040 7041 7042 7041 7043 7044 7045 + 7044 7046 7047 7048 7047 7049 7050 7051 + 7050 7052 7053 7054 7053 7055 7056 7057 + 7056 7058 7059 7060 7059 7061 7062 7063 + 7062 7064 7065 7066 7065 7067 7068 7069 + 7068 7070 7071 7072 7071 7073 7074 7075 + 7074 7076 7077 7078 7077 7079 7080 7081 + 7080 7082 7083 7084 7083 7085 7086 7087 + 7086 7088 7089 7090 7089 7091 7092 7093 + 7092 7094 7095 7096 7095 7097 7098 7099 + 7098 7100 7101 7102 7101 7103 7104 7105 + 7104 7106 7107 7108 7107 7109 7110 7111 + 7110 7112 7113 7114 7113 7115 7116 7117 + 7116 7118 7119 7120 7119 7121 7122 7123 + 7122 7124 7125 7126 7125 7127 7128 7129 + 7128 7130 7131 7132 7131 7133 7134 7135 + 7134 7136 7137 7138 7137 7139 7140 7141 + 7140 7142 7143 7144 7143 7145 7146 7147 + 7146 7148 7149 7150 7149 7151 7152 7153 + 7152 7154 7155 7156 7155 7157 7158 7159 + 7158 7160 7161 7162 7161 7163 7164 7165 + 7164 7166 7167 7168 7167 7169 7170 7171 + 7170 7172 7173 7174 7173 7175 7176 7177 + 7176 7178 7179 7180 7179 7181 7182 7183 + 7182 7184 7185 7186 7185 7187 7188 7189 + 7188 7190 7191 7192 7191 7193 7194 7195 + 7194 7196 7197 7198 7197 7199 7200 7201 + 7200 7202 7203 7204 7203 7205 7206 7207 + 7206 7208 7209 7210 7209 7211 7212 7213 + 7212 7214 7215 7216 7215 7217 7218 7219 + 7218 7220 7221 7222 7221 7223 7224 7225 + 7224 7226 7227 7228 7227 7229 7230 7231 + 7230 7232 7233 7234 7233 7235 7236 7237 + 7236 7238 7239 7240 7239 7241 7242 7243 + 7242 7244 7245 7246 7245 7247 7248 7249 + 7248 7250 7251 7252 7251 7253 7254 7255 + 7254 7256 7257 7258 7257 7259 7260 7261 + 7260 7262 7263 7264 7263 7265 7266 7267 + 7266 7268 7269 7270 7269 7271 7272 7273 + 7272 7274 7275 7276 7275 7277 7278 7279 + 7278 7280 7281 7282 7281 7283 7284 7285 + 7284 7286 7287 7288 7287 7289 7290 7291 + 7290 7292 7293 7294 7293 7295 7296 7297 + 7296 7298 7299 7300 7299 7301 7302 7303 + 7302 7304 7305 7306 7305 7307 7308 7309 + 7308 7310 7311 7312 7311 7313 7314 7315 + 7314 7316 7317 7318 7317 7319 7320 7321 + 7320 7322 7323 7324 7323 7325 7326 7327 + 7326 7328 7329 7330 7329 7331 7332 7333 + 7332 7334 7335 7336 7335 7337 7338 7339 + 7338 7340 7341 7342 7341 7343 7344 7345 + 7344 7346 7347 7348 7347 7349 7350 7351 + 7350 7352 7353 7354 7353 7355 7356 7357 + 7356 7358 7359 7360 7359 7361 7362 7363 + 7362 7364 7365 7366 7365 7367 7368 7369 + 7368 7370 7371 7372 7371 7373 7374 7375 + 7374 7376 7377 7378 7377 7379 7380 7381 + 7380 7382 7383 7384 7383 7385 7386 7387 + 7386 7388 7389 7390 7389 7391 7392 7393 + 7392 7394 7395 7396 7395 7397 7398 7399 + 7398 7400 7401 7402 7401 7403 7404 7405 + 7404 7406 7407 7408 7407 7409 7410 7411 + 7410 7412 7413 7414 7413 7415 7416 7417 + 7416 7418 7419 7420 7419 7421 7422 7423 + 7422 7424 7425 7426 7425 7427 7428 7429 + 7428 7430 7431 7432 7431 7433 7434 7435 + 7434 7436 7437 7438 7437 7439 7440 7441 + 7440 7442 7443 7444 7443 7445 7446 7447 + 7446 7448 7449 7450 7449 7451 7452 7453 + 7452 7454 7455 7456 7455 7457 7458 7459 + 7458 7460 7461 7462 7461 7463 7464 7465 + 7464 7466 7467 7468 7467 7469 7470 7471 + 7470 7472 7473 7474 7473 7475 7476 7477 + 7476 7478 7479 7480 7479 7481 7482 7483 + 7482 7484 7485 7486 7485 7487 7488 7489 + 7488 7490 7491 7492 7491 7493 7494 7495 + 7494 7496 7497 7498 7497 7499 7500 7501 + 7500 7502 7503 7504 7503 7505 7506 7507 + 7506 7508 7509 7510 7509 7511 7512 7513 + 7512 7514 7515 7516 7515 7517 7518 7519 + 7518 7520 7521 7522 7521 7523 7524 7525 + 7524 7526 7527 7528 7527 7529 7530 7531 + 7530 7532 7533 7534 7533 7535 7536 7537 + 7536 7538 7539 7540 7539 7541 7542 7543 + 7542 7544 7545 7546 7545 7547 7548 7549 + 7548 7550 7551 7552 7551 7553 7554 7555 + 7554 7556 7557 7558 7557 7559 7560 7561 + 7560 7562 7563 7564 7563 7565 7566 7567 + 7566 7568 7569 7570 7569 7571 7572 7573 + 7572 7574 7575 7576 7575 7577 7578 7579 + 7578 7580 7581 7582 7581 7583 7584 7585 + 7584 7586 7587 7588 7587 7589 7590 7591 + 7590 7592 7593 7594 7593 7595 7596 7597 + 7596 7598 7599 7600 7599 7601 7602 7603 + 7602 7604 7605 7606 7605 7607 7608 7609 + 7608 7610 7611 7612 7611 7613 7614 7615 + 7614 7616 7617 7618 7617 7619 7620 7621 + 7620 7622 7623 7624 7623 7625 7626 7627 + 7626 7628 7629 7630 7629 7631 7632 7633 + 7632 7634 7635 7636 7635 7637 7638 7639 + 7638 7640 7641 7642 7641 7643 7644 7645 + 7644 7646 7647 7648 7647 7649 7650 7651 + 7650 7652 7653 7654 7653 7655 7656 7657 + 7656 7658 7659 7660 7659 7661 7662 7663 + 7662 7664 7665 7666 7665 7667 7668 7669 + 7668 7670 7671 7672 7671 7673 7674 7675 + 7674 7676 7677 7678 7677 7679 7680 7681 + 7680 7682 7683 7684 7683 7685 7686 7687 + 7686 7688 7689 7690 7689 7691 7692 7693 + 7692 7694 7695 7696 7695 7697 7698 7699 + 7698 7700 7701 7702 7701 7703 7704 7705 + 7704 7706 7707 7708 7707 7709 7710 7711 + 7710 7712 7713 7714 7713 7715 7716 7717 + 7716 7718 7719 7720 7719 7721 7722 7723 + 7722 7724 7725 7726 7725 7727 7728 7729 + 7728 7730 7731 7732 7731 7733 7734 7735 + 7734 7736 7737 7738 7737 7739 7740 7741 + 7740 7742 7743 7744 7743 7745 7746 7747 + 7746 7748 7749 7750 7749 7751 7752 7753 + 7752 7754 7755 7756 7755 7757 7758 7759 + 7758 7760 7761 7762 7761 7763 7764 7765 + 7764 7766 7767 7768 7767 7769 7770 7771 + 7770 7772 7773 7774 7773 7775 7776 7777 + 7776 7778 7779 7780 7779 7781 7782 7783 + 7782 7784 7785 7786 7785 7787 7788 7789 + 7788 7790 7791 7792 7791 7793 7794 7795 + 7794 7796 7797 7798 7797 7799 7800 7801 + 7800 7802 7803 7804 7803 7805 7806 7807 + 7806 7808 7809 7810 7809 7811 7812 7813 + 7812 7814 7815 7816 7815 7817 7818 7819 + 7818 7820 7821 7822 7821 7823 7824 7825 + 7824 7826 7827 7828 7827 7829 7830 7831 + 7830 7832 7833 7834 7833 7835 7836 7837 + 7836 7838 7839 7840 7839 7841 7842 7843 + 7842 7844 7845 7846 7845 7847 7848 7849 + 7848 7850 7851 7852 7851 7853 7854 7855 + 7854 7856 7857 7858 7857 7859 7860 7861 + 7860 7862 7863 7864 7863 7865 7866 7867 + 7866 7868 7869 7870 7869 7871 7872 7873 + 7872 7874 7875 7876 7875 7877 7878 7879 + 7878 7880 7881 7882 7881 7883 7884 7885 + 7884 7886 7887 7888 7887 7889 7890 7891 + 7890 7892 7893 7894 7893 7895 7896 7897 + 7896 7898 7899 7900 7899 7901 7902 7903 + 7902 7904 7905 7906 7905 7907 7908 7909 + 7908 7910 7911 7912 7911 7913 7914 7915 + 7914 7916 7917 7918 7917 7919 7920 7921 + 7920 7922 7923 7924 7923 7925 7926 7927 + 7926 7928 7929 7930 7929 7931 7932 7933 + 7932 7934 7935 7936 7935 7937 7938 7939 + 7938 7940 7941 7942 7941 7943 7944 7945 + 7944 7946 7947 7948 7947 7949 7950 7951 + 7950 7952 7953 7954 7953 7955 7956 7957 + 7956 7958 7959 7960 7959 7961 7962 7963 + 7962 7964 7965 7966 7965 7967 7968 7969 + 7968 7970 7971 7972 7971 7973 7974 7975 + 7974 7976 7977 7978 7977 7979 7980 7981 + 7980 7982 7983 7984 7983 7985 7986 7987 + 7986 7988 7989 7990 7989 7991 7992 7993 + 7992 7994 7995 7996 7995 7997 7998 7999 + 7998 8000 8001 8002 8001 8003 8004 8005 + 8004 8006 8007 8008 8007 8009 8010 8011 + 8010 8012 8013 8014 8013 8015 8016 8017 + 8016 8018 8019 8020 8019 8021 8022 8023 + 8022 8024 8025 8026 8025 8027 8028 8029 + 8028 8030 8031 8032 8031 8033 8034 8035 + 8034 8036 8037 8038 8037 8039 8040 8041 + 8040 8042 8043 8044 8043 8045 8046 8047 + 8046 8048 8049 8050 8049 8051 8052 8053 + 8052 8054 8055 8056 8055 8057 8058 8059 + 8058 8060 8061 8062 8061 8063 8064 8065 + 8064 8066 8067 8068 8067 8069 8070 8071 + 8070 8072 8073 8074 8073 8075 8076 8077 + 8076 8078 8079 8080 8079 8081 8082 8083 + 8082 8084 8085 8086 8085 8087 8088 8089 + 8088 8090 8091 8092 8091 8093 8094 8095 + 8094 8096 8097 8098 8097 8099 8100 8101 + 8100 8102 8103 8104 8103 8105 8106 8107 + 8106 8108 8109 8110 8109 8111 8112 8113 + 8112 8114 8115 8116 8115 8117 8118 8119 + 8118 8120 8121 8122 8121 8123 8124 8125 + 8124 8126 8127 8128 8127 8129 8130 8131 + 8130 8132 8133 8134 8133 8135 8136 8137 + 8136 8138 8139 8140 8139 8141 8142 8143 + 8142 8144 8145 8146 8145 8147 8148 8149 + 8148 8150 8151 8152 8151 8153 8154 8155 + 8154 8156 8157 8158 8157 8159 8160 8161 + 8160 8162 8163 8164 8163 8165 8166 8167 + 8166 8168 8169 8170 8169 8171 8172 8173 + 8172 8174 8175 8176 8175 8177 8178 8179 + 8178 8180 8181 8182 8181 8183 8184 8185 + 8184 8186 8187 8188 8187 8189 8190 8191 + 8190 8192 8193 8194 8193 8195 8196 8197 + 8196 8198 8199 8200 8199 8201 8202 8203 + 8202 8204 8205 8206 8205 8207 8208 8209 + 8208 8210 8211 8212 8211 8213 8214 8215 + 8214 8216 8217 8218 8217 8219 8220 8221 + 8220 8222 8223 8224 8223 8225 8226 8227 + 8226 8228 8229 8230 8229 8231 8232 8233 + 8232 8234 8235 8236 8235 8237 8238 8239 + 8238 8240 8241 8242 8241 8243 8244 8245 + 8244 8246 8247 8248 8247 8249 8250 8251 + 8250 8252 8253 8254 8253 8255 8256 8257 + 8256 8258 8259 8260 8259 8261 8262 8263 + 8262 8264 8265 8266 8265 8267 8268 8269 + 8268 8270 8271 8272 8271 8273 8274 8275 + 8274 8276 8277 8278 8277 8279 8280 8281 + 8280 8282 8283 8284 8283 8285 8286 8287 + 8286 8288 8289 8290 8289 8291 8292 8293 + 8292 8294 8295 8296 8295 8297 8298 8299 + 8298 8300 8301 8302 8301 8303 8304 8305 + 8304 8306 8307 8308 8307 8309 8310 8311 + 8310 8312 8313 8314 8313 8315 8316 8317 + 8316 8318 8319 8320 8319 8321 8322 8323 + 8322 8324 8325 8326 8325 8327 8328 8329 + 8328 8330 8331 8332 8331 8333 8334 8335 + 8334 8336 8337 8338 8337 8339 8340 8341 + 8340 8342 8343 8344 8343 8345 8346 8347 + 8346 8348 8349 8350 8349 8351 8352 8353 + 8352 8354 8355 8356 8355 8357 8358 8359 + 8358 8360 8361 8362 8361 8363 8364 8365 + 8364 8366 8367 8368 8367 8369 8370 8371 + 8370 8372 8373 8374 8373 8375 8376 8377 + 8376 8378 8379 8380 8379 8381 8382 8383 + 8382 8384 8385 8386 8385 8387 8388 8389 + 8388 8390 8391 8392 8391 8393 8394 8395 + 8394 8396 8397 8398 8397 8399 8400 8401 + 8400 8402 8403 8404 8403 8405 8406 8407 + 8406 8408 8409 8410 8409 8411 8412 8413 + 8412 8414 8415 8416 8415 8417 8418 8419 + 8418 8420 8421 8422 8421 8423 8424 8425 + 8424 8426 8427 8428 8427 8429 8430 8431 + 8430 8432 8433 8434 8433 8435 8436 8437 + 8436 8438 8439 8440 8439 8441 8442 8443 + 8442 8444 8445 8446 8445 8447 8448 8449 + 8448 8450 8451 8452 8451 8453 8454 8455 + 8454 8456 8457 8458 8457 8459 8460 8461 + 8460 8462 8463 8464 8463 8465 8466 8467 + 8466 8468 8469 8470 8469 8471 8472 8473 + 8472 8474 8475 8476 8475 8477 8478 8479 + 8478 8480 8481 8482 8481 8483 8484 8485 + 8484 8486 8487 8488 8487 8489 8490 8491 + 8490 8492 8493 8494 8493 8495 8496 8497 + 8496 8498 8499 8500 8499 8501 8502 8503 + 8502 8504 8505 8506 8505 8507 8508 8509 + 8508 8510 8511 8512 8511 8513 8514 8515 + 8514 8516 8517 8518 8517 8519 8520 8521 + 8520 8522 8523 8524 8523 8525 8526 8527 + 8526 8528 8529 8530 8529 8531 8532 8533 + 8532 8534 8535 8536 8535 8537 8538 8539 + 8538 8540 8541 8542 8541 8543 8544 8545 + 8544 8546 8547 8548 8547 8549 8550 8551 + 8550 8552 8553 8554 8553 8555 8556 8557 + 8556 8558 8559 8560 8559 8561 8562 8563 + 8562 8564 8565 8566 8565 8567 8568 8569 + 8568 8570 8571 8572 8571 8573 8574 8575 + 8574 8576 8577 8578 8577 8579 8580 8581 + 8580 8582 8583 8584 8583 8585 8586 8587 + 8586 8588 8589 8590 8589 8591 8592 8593 + 8592 8594 8595 8596 8595 8597 8598 8599 + 8598 8600 8601 8602 8601 8603 8604 8605 + 8604 8606 8607 8608 8607 8609 8610 8611 + 8610 8612 8613 8614 8613 8615 8616 8617 + 8616 8618 8619 8620 8619 8621 8622 8623 + 8622 8624 8625 8626 8625 8627 8628 8629 + 8628 8630 8631 8632 8631 8633 8634 8635 + 8634 8636 8637 8638 8637 8639 8640 8641 + 8640 8642 8643 8644 8643 8645 8646 8647 + 8646 8648 8649 8650 8649 8651 8652 8653 + 8652 8654 8655 8656 8655 8657 8658 8659 + 8658 8660 8661 8662 8661 8663 8664 8665 + 8664 8666 8667 8668 8667 8669 8670 8671 + 8670 8672 8673 8674 8673 8675 8676 8677 + 8676 8678 8679 8680 8679 8681 8682 8683 + 8682 8684 8685 8686 8685 8687 8688 8689 + 8688 8690 8691 8692 8691 8693 8694 8695 + 8694 8696 8697 8698 8697 8699 8700 8701 + 8700 8702 8703 8704 8703 8705 8706 8707 + 8706 8708 8709 8710 8709 8711 8712 8713 + 8712 8714 8715 8716 8715 8717 8718 8719 + 8718 8720 8721 8722 8721 8723 8724 8725 + 8724 8726 8727 8728 8727 8729 8730 8731 + 8730 8732 8733 8734 8733 8735 8736 8737 + 8736 8738 8739 8740 8739 8741 8742 8743 + 8742 8744 8745 8746 8745 8747 8748 8749 + 8748 8750 8751 8752 8751 8753 8754 8755 + 8754 8756 8757 8758 8757 8759 8760 8761 + 8760 8762 8763 8764 8763 8765 8766 8767 + 8766 8768 8769 8770 8769 8771 8772 8773 + 8772 8774 8775 8776 8775 8777 8778 8779 + 8778 8780 8781 8782 8781 8783 8784 8785 + 8784 8786 8787 8788 8787 8789 8790 8791 + 8790 8792 8793 8794 8793 8795 8796 8797 + 8796 8798 8799 8800 8799 8801 8802 8803 + 8802 8804 8805 8806 8805 8807 8808 8809 + 8808 8810 8811 8812 8811 8813 8814 8815 + 8814 8816 8817 8818 8817 8819 8820 8821 + 8820 8822 8823 8824 8823 8825 8826 8827 + 8826 8828 8829 8830 8829 8831 8832 8833 + 8832 8834 8835 8836 8835 8837 8838 8839 + 8838 8840 8841 8842 8841 8843 8844 8845 + 8844 8846 8847 8848 8847 8849 8850 8851 + 8850 8852 8853 8854 8853 8855 8856 8857 + 8856 8858 8859 8860 8859 8861 8862 8863 + 8862 8864 8865 8866 8865 8867 8868 8869 + 8868 8870 8871 8872 8871 8873 8874 8875 + 8874 8876 8877 8878 8877 8879 8880 8881 + 8880 8882 8883 8884 8883 8885 8886 8887 + 8886 8888 8889 8890 8889 8891 8892 8893 + 8892 8894 8895 8896 8895 8897 8898 8899 + 8898 8900 8901 8902 8901 8903 8904 8905 + 8904 8906 8907 8908 8907 8909 8910 8911 + 8910 8912 8913 8914 8913 8915 8916 8917 + 8916 8918 8919 8920 8919 8921 8922 8923 + 8922 8924 8925 8926 8925 8927 8928 8929 + 8928 8930 8931 8932 8931 8933 8934 8935 + 8934 8936 8937 8938 8937 8939 8940 8941 + 8940 8942 8943 8944 8943 8945 8946 8947 + 8946 8948 8949 8950 8949 8951 8952 8953 + 8952 8954 8955 8956 8955 8957 8958 8959 + 8958 8960 8961 8962 8961 8963 8964 8965 + 8964 8966 8967 8968 8967 8969 8970 8971 + 8970 8972 8973 8974 8973 8975 8976 8977 + 8976 8978 8979 8980 8979 8981 8982 8983 + 8982 8984 8985 8986 8985 8987 8988 8989 + 8988 8990 8991 8992 8991 8993 8994 8995 + 8994 8996 8997 8998 8997 8999 9000 9001 + 9000 9002 9003 9004 9003 9005 9006 9007 + 9006 9008 9009 9010 9009 9011 9012 9013 + 9012 9014 9015 9016 9015 9017 9018 9019 + 9018 9020 9021 9022 9021 9023 9024 9025 + 9024 9026 9027 9028 9027 9029 9030 9031 + 9030 9032 9033 9034 9033 9035 9036 9037 + 9036 9038 9039 9040 9039 9041 9042 9043 + 9042 9044 9045 9046 9045 9047 9048 9049 + 9048 9050 9051 9052 9051 9053 9054 9055 + 9054 9056 9057 9058 9057 9059 9060 9061 + 9060 9062 9063 9064 9063 9065 9066 9067 + 9066 9068 9069 9070 9069 9071 9072 9073 + 9072 9074 9075 9076 9075 9077 9078 9079 + 9078 9080 9081 9082 9081 9083 9084 9085 + 9084 9086 9087 9088 9087 9089 9090 9091 + 9090 9092 9093 9094 9093 9095 9096 9097 + 9096 9098 9099 9100 9099 9101 9102 9103 + 9102 9104 9105 9106 9105 9107 9108 9109 + 9108 9110 9111 9112 9111 9113 9114 9115 + 9114 9116 9117 9118 9117 9119 9120 9121 + 9120 9122 9123 9124 9123 9125 9126 9127 + 9126 9128 9129 9130 9129 9131 9132 9133 + 9132 9134 9135 9136 9135 9137 9138 9139 + 9138 9140 9141 9142 9141 9143 9144 9145 + 9144 9146 9147 9148 9147 9149 9150 9151 + 9150 9152 9153 9154 9153 9155 9156 9157 + 9156 9158 9159 9160 9159 9161 9162 9163 + 9162 9164 9165 9166 9165 9167 9168 9169 + 9168 9170 9171 9172 9171 9173 9174 9175 + 9174 9176 9177 9178 9177 9179 9180 9181 + 9180 9182 9183 9184 9183 9185 9186 9187 + 9186 9188 9189 9190 9189 9191 9192 9193 + 9192 9194 9195 9196 9195 9197 9198 9199 + 9198 9200 9201 9202 9201 9203 9204 9205 + 9204 9206 9207 9208 9207 9209 9210 9211 + 9210 9212 9213 9214 9213 9215 9216 9217 + 9216 9218 9219 9220 9219 9221 9222 9223 + 9222 9224 9225 9226 9225 9227 9228 9229 + 9228 9230 9231 9232 9231 9233 9234 9235 + 9234 9236 9237 9238 9237 9239 9240 9241 + 9240 9242 9243 9244 9243 9245 9246 9247 + 9246 9248 9249 9250 9249 9251 9252 9253 + 9252 9254 9255 9256 9255 9257 9258 9259 + 9258 9260 9261 9262 9261 9263 9264 9265 + 9264 9266 9267 9268 9267 9269 9270 9271 + 9270 9272 9273 9274 9273 9275 9276 9277 + 9276 9278 9279 9280 9279 9281 9282 9283 + 9282 9284 9285 9286 9285 9287 9288 9289 + 9288 9290 9291 9292 9291 9293 9294 9295 + 9294 9296 9297 9298 9297 9299 9300 9301 + 9300 9302 9303 9304 9303 9305 9306 9307 + 9306 9308 9309 9310 9309 9311 9312 9313 + 9312 9314 9315 9316 9315 9317 9318 9319 + 9318 9320 9321 9322 9321 9323 9324 9325 + 9324 9326 9327 9328 9327 9329 9330 9331 + 9330 9332 9333 9334 9333 9335 9336 9337 + 9336 9338 9339 9340 9339 9341 9342 9343 + 9342 9344 9345 9346 9345 9347 9348 9349 + 9348 9350 9351 9352 9351 9353 9354 9355 + 9354 9356 9357 9358 9357 9359 9360 9361 + 9360 9362 9363 9364 9363 9365 9366 9367 + 9366 9368 9369 9370 9369 9371 9372 9373 + 9372 9374 9375 9376 9375 9377 9378 9379 + 9378 9380 9381 9382 9381 9383 9384 9385 + 9384 9386 9387 9388 9387 9389 9390 9391 + 9390 9392 9393 9394 9393 9395 9396 9397 + 9396 9398 9399 9400 9399 9401 9402 9403 + 9402 9404 9405 9406 9405 9407 9408 9409 + 9408 9410 9411 9412 9411 9413 9414 9415 + 9414 9416 9417 9418 9417 9419 9420 9421 + 9420 9422 9423 9424 9423 9425 9426 9427 + 9426 9428 9429 9430 9429 9431 9432 9433 + 9432 9434 9435 9436 9435 9437 9438 9439 + 9438 9440 9441 9442 9441 9443 9444 9445 + 9444 9446 9447 9448 9447 9449 9450 9451 + 9450 9452 9453 9454 9453 9455 9456 9457 + 9456 9458 9459 9460 9459 9461 9462 9463 + 9462 9464 9465 9466 9465 9467 9468 9469 + 9468 9470 9471 9472 9471 9473 9474 9475 + 9474 9476 9477 9478 9477 9479 9480 9481 + 9480 9482 9483 9484 9483 9485 9486 9487 + 9486 9488 9489 9490 9489 9491 9492 9493 + 9492 9494 9495 9496 9495 9497 9498 9499 + 9498 9500 9501 9502 9501 9503 9504 9505 + 9504 9506 9507 9508 9507 9509 9510 9511 + 9510 9512 9513 9514 9513 9515 9516 9517 + 9516 9518 9519 9520 9519 9521 9522 9523 + 9522 9524 9525 9526 9525 9527 9528 9529 + 9528 9530 9531 9532 9531 9533 9534 9535 + 9534 9536 9537 9538 9537 9539 9540 9541 + 9540 9542 9543 9544 9543 9545 9546 9547 + 9546 9548 9549 9550 9549 9551 9552 9553 + 9552 9554 9555 9556 9555 9557 9558 9559 + 9558 9560 9561 9562 9561 9563 9564 9565 + 9564 9566 9567 9568 9567 9569 9570 9571 + 9570 9572 9573 9574 9573 9575 9576 9577 + 9576 9578 9579 9580 9579 9581 9582 9583 + 9582 9584 9585 9586 9585 9587 9588 9589 + 9588 9590 9591 9592 9591 9593 9594 9595 + 9594 9596 9597 9598 9597 9599 9600 9601 + 9600 9602 9603 9604 9603 9605 9606 9607 + 9606 9608 9609 9610 9609 9611 9612 9613 + 9612 9614 9615 9616 9615 9617 9618 9619 + 9618 9620 9621 9622 9621 9623 9624 9625 + 9624 9626 9627 9628 9627 9629 9630 9631 + 9630 9632 9633 9634 9633 9635 9636 9637 + 9636 9638 9639 9640 9639 9641 9642 9643 + 9642 9644 9645 9646 9645 9647 9648 9649 + 9648 9650 9651 9652 9651 9653 9654 9655 + 9654 9656 9657 9658 9657 9659 9660 9661 + 9660 9662 9663 9664 9663 9665 9666 9667 + 9666 9668 9669 9670 9669 9671 9672 9673 + 9672 9674 9675 9676 9675 9677 9678 9679 + 9678 9680 9681 9682 9681 9683 9684 9685 + 9684 9686 9687 9688 9687 9689 9690 9691 + 9690 9692 9693 9694 9693 9695 9696 9697 + 9696 9698 9699 9700 9699 9701 9702 9703 + 9702 9704 9705 9706 9705 9707 9708 9709 + 9708 9710 9711 9712 9711 9713 9714 9715 + 9714 9716 9717 9718 9717 9719 9720 9721 + 9720 9722 9723 9724 9723 9725 9726 9727 + 9726 9728 9729 9730 9729 9731 9732 9733 + 9732 9734 9735 9736 9735 9737 9738 9739 + 9738 9740 9741 9742 9741 9743 9744 9745 + 9744 9746 9747 9748 9747 9749 9750 9751 + 9750 9752 9753 9754 9753 9755 9756 9757 + 9756 9758 9759 9760 9759 9761 9762 9763 + 9762 9764 9765 9766 9765 9767 9768 9769 + 9768 9770 9771 9772 9771 9773 9774 9775 + 9774 9776 9777 9778 9777 9779 9780 9781 + 9780 9782 9783 9784 9783 9785 9786 9787 + 9786 9788 9789 9790 9789 9791 9792 9793 + 9792 9794 9795 9796 9795 9797 9798 9799 + 9798 9800 9801 9802 9801 9803 9804 9805 + 9804 9806 9807 9808 9807 9809 9810 9811 + 9810 9812 9813 9814 9813 9815 9816 9817 + 9816 9818 9819 9820 9819 9821 9822 9823 + 9822 9824 9825 9826 9825 9827 9828 9829 + 9828 9830 9831 9832 9831 9833 9834 9835 + 9834 9836 9837 9838 9837 9839 9840 9841 + 9840 9842 9843 9844 9843 9845 9846 9847 + 9846 9848 9849 9850 9849 9851 9852 9853 + 9852 9854 9855 9856 9855 9857 9858 9859 + 9858 9860 9861 9862 9861 9863 9864 9865 + 9864 9866 9867 9868 9867 9869 9870 9871 + 9870 9872 9873 9874 9873 9875 9876 9877 + 9876 9878 9879 9880 9879 9881 9882 9883 + 9882 9884 9885 9886 9885 9887 9888 9889 + 9888 9890 9891 9892 9891 9893 9894 9895 + 9894 9896 9897 9898 9897 9899 9900 9901 + 9900 9902 9903 9904 9903 9905 9906 9907 + 9906 9908 9909 9910 9909 9911 9912 9913 + 9912 9914 9915 9916 9915 9917 9918 9919 + 9918 9920 9921 9922 9921 9923 9924 9925 + 9924 9926 9927 9928 9927 9929 9930 9931 + 9930 9932 9933 9934 9933 9935 9936 9937 + 9936 9938 9939 9940 9939 9941 9942 9943 + 9942 9944 9945 9946 9945 9947 9948 9949 + 9948 9950 9951 9952 9951 9953 9954 9955 + 9954 9956 9957 9958 9957 9959 9960 9961 + 9960 9962 9963 9964 9963 9965 9966 9967 + 9966 9968 9969 9970 9969 9971 9972 9973 + 9972 9974 9975 9976 9975 9977 9978 9979 + 9978 9980 9981 9982 9981 9983 9984 9985 + 9984 9986 9987 9988 9987 9989 9990 9991 + 9990 9992 9993 9994 9993 9995 9996 9997 + 9996 9998 9999 10000 9999 10001 10002 10003 + 10002 10004 10005 10006 10005 10007 10008 10009 + 10008 10010 10011 10012 10011 10013 10014 10015 + 10014 10016 10017 10018 10017 10019 10020 10021 + 10020 10022 10023 10024 10023 10025 10026 10027 + 10026 10028 10029 10030 10029 10031 10032 10033 + 10032 10034 10035 10036 10035 10037 10038 10039 + 10038 10040 10041 10042 10041 10043 10044 10045 + 10044 10046 10047 10048 10047 10049 10050 10051 + 10050 10052 10053 10054 10053 10055 10056 10057 + 10056 10058 10059 10060 10059 10061 10062 10063 + 10062 10064 10065 10066 10065 10067 10068 10069 + 10068 10070 10071 10072 10071 10073 10074 10075 + 10074 10076 10077 10078 10077 10079 10080 10081 + 10080 10082 10083 10084 10083 10085 10086 10087 + 10086 10088 10089 10090 10089 10091 10092 10093 + 10092 10094 10095 10096 10095 10097 10098 10099 + 10098 10100 10101 10102 10101 10103 10104 10105 + 10104 10106 10107 10108 10107 10109 10110 10111 + 10110 10112 10113 10114 10113 10115 10116 10117 + 10116 10118 10119 10120 10119 10121 10122 10123 + 10122 10124 10125 10126 10125 10127 10128 10129 + 10128 10130 10131 10132 10131 10133 10134 10135 + 10134 10136 10137 10138 10137 10139 10140 10141 + 10140 10142 10143 10144 10143 10145 10146 10147 + 10146 10148 10149 10150 10149 10151 10152 10153 + 10152 10154 10155 10156 10155 10157 10158 10159 + 10158 10160 10161 10162 10161 10163 10164 10165 + 10164 10166 10167 10168 10167 10169 10170 10171 + 10170 10172 10173 10174 10173 10175 10176 10177 + 10176 10178 10179 10180 10179 10181 10182 10183 + 10182 10184 10185 10186 10185 10187 10188 10189 + 10188 10190 10191 10192 10191 10193 10194 10195 + 10194 10196 10197 10198 10197 10199 10200 10201 + 10200 10202 10203 10204 10203 10205 10206 10207 + 10206 10208 10209 10210 10209 10211 10212 10213 + 10212 10214 10215 10216 10215 10217 10218 10219 + 10218 10220 10221 10222 10221 10223 10224 10225 + 10224 10226 10227 10228 10227 10229 10230 10231 + 10230 10232 10233 10234 10233 10235 10236 10237 + 10236 10238 10239 10240 10239 10241 10242 10243 + 10242 10244 10245 10246 10245 10247 10248 10249 + 10248 10250 10251 10252 10251 10253 10254 10255 + 10254 10256 10257 10258 10257 10259 10260 10261 + 10260 10262 10263 10264 10263 10265 10266 10267 + 10266 10268 10269 10270 10269 10271 10272 10273 + 10272 10274 10275 10276 10275 10277 10278 10279 + 10278 10280 10281 10282 10281 10283 10284 10285 + 10284 10286 10287 10288 10287 10289 10290 10291 + 10290 10292 10293 10294 10293 10295 10296 10297 + 10296 10298 10299 10300 10299 10301 10302 10303 + 10302 10304 10305 10306 10305 10307 10308 10309 + 10308 10310 10311 10312 10311 10313 10314 10315 + 10314 10316 10317 10318 10317 10319 10320 10321 + 10320 10322 10323 10324 10323 10325 10326 10327 + 10326 10328 10329 10330 10329 10331 10332 10333 + 10332 10334 10335 10336 10335 10337 10338 10339 + 10338 10340 10341 10342 10341 10343 10344 10345 + 10344 10346 10347 10348 10347 10349 10350 10351 + 10350 10352 10353 10354 10353 10355 10356 10357 + 10356 10358 10359 10360 10359 10361 10362 10363 + 10362 10364 10365 10366 10365 10367 10368 10369 + 10368 10370 10371 10372 10371 10373 10374 10375 + 10374 10376 10377 10378 10377 10379 10380 10381 + 10380 10382 10383 10384 10383 10385 10386 10387 + 10386 10388 10389 10390 10389 10391 10392 10393 + 10392 10394 10395 10396 10395 10397 10398 10399 + 10398 10400 10401 10402 10401 10403 10404 10405 + 10404 10406 10407 10408 10407 10409 10410 10411 + 10410 10412 10413 10414 10413 10415 10416 10417 + 10416 10418 10419 10420 10419 10421 10422 10423 + 10422 10424 10425 10426 10425 10427 10428 10429 + 10428 10430 10431 10432 10431 10433 10434 10435 + 10434 10436 10437 10438 10437 10439 10440 10441 + 10440 10442 10443 10444 10443 10445 10446 10447 + 10446 10448 10449 10450 10449 10451 10452 10453 + 10452 10454 10455 10456 10455 10457 10458 10459 + 10458 10460 10461 10462 10461 10463 10464 10465 + 10464 10466 10467 10468 10467 10469 10470 10471 + 10470 10472 10473 10474 10473 10475 10476 10477 + 10476 10478 10479 10480 10479 10481 10482 10483 + 10482 10484 10485 10486 10485 10487 10488 10489 + 10488 10490 10491 10492 10491 10493 10494 10495 + 10494 10496 10497 10498 10497 10499 10500 10501 + 10500 10502 10503 10504 10503 10505 10506 10507 + 10506 10508 10509 10510 10509 10511 10512 10513 + 10512 10514 10515 10516 10515 10517 10518 10519 + 10518 10520 10521 10522 10521 10523 10524 10525 + 10524 10526 10527 10528 10527 10529 10530 10531 + 10530 10532 10533 10534 10533 10535 10536 10537 + 10536 10538 10539 10540 10539 10541 10542 10543 + 10542 10544 10545 10546 10545 10547 10548 10549 + 10548 10550 10551 10552 10551 10553 10554 10555 + 10554 10556 10557 10558 10557 10559 10560 10561 + 10560 10562 10563 10564 10563 10565 10566 10567 + 10566 10568 10569 10570 10569 10571 10572 10573 + 10572 10574 10575 10576 10575 10577 10578 10579 + 10578 10580 10581 10582 10581 10583 10584 10585 + 10584 10586 10587 10588 10587 10589 10590 10591 + 10590 10592 10593 10594 10593 10595 10596 10597 + 10596 10598 10599 10600 10599 10601 10602 10603 + 10602 10604 10605 10606 10605 10607 10608 10609 + 10608 10610 10611 10612 10611 10613 10614 10615 + 10614 10616 10617 10618 10617 10619 10620 10621 + 10620 10622 10623 10624 10623 10625 10626 10627 + 10626 10628 10629 10630 10629 10631 10632 10633 + 10632 10634 10635 10636 10635 10637 10638 10639 + 10638 10640 10641 10642 10641 10643 10644 10645 + 10644 10646 10647 10648 10647 10649 10650 10651 + 10650 10652 10653 10654 10653 10655 10656 10657 + 10656 10658 10659 10660 10659 10661 10662 10663 + 10662 10664 10665 10666 10665 10667 10668 10669 + 10668 10670 10671 10672 10671 10673 10674 10675 + 10674 10676 10677 10678 10677 10679 10680 10681 + 10680 10682 10683 10684 10683 10685 10686 10687 + 10686 10688 10689 10690 10689 10691 10692 10693 + 10692 10694 10695 10696 10695 10697 10698 10699 + 10698 10700 10701 10702 10701 10703 10704 10705 + 10704 10706 10707 10708 10707 10709 10710 10711 + 10710 10712 10713 10714 10713 10715 10716 10717 + 10716 10718 10719 10720 10719 10721 10722 10723 + 10722 10724 10725 10726 10725 10727 10728 10729 + 10728 10730 10731 10732 10731 10733 10734 10735 + 10734 10736 10737 10738 10737 10739 10740 10741 + 10740 10742 10743 10744 10743 10745 10746 10747 + 10746 10748 10749 10750 10749 10751 10752 10753 + 10752 10754 10755 10756 10755 10757 10758 10759 + 10758 10760 10761 10762 10761 10763 10764 10765 + 10764 10766 10767 10768 10767 10769 10770 10771 + 10770 10772 10773 10774 10773 10775 10776 10777 + 10776 10778 10779 10780 10779 10781 10782 10783 + 10782 10784 10785 10786 10785 10787 10788 10789 + 10788 10790 10791 10792 10791 10793 10794 10795 + 10794 10796 10797 10798 10797 10799 10800 10801 + 10800 10802 10803 10804 10803 10805 10806 10807 + 10806 10808 10809 10810 10809 10811 10812 10813 + 10812 10814 10815 10816 10815 10817 10818 10819 + 10818 10820 10821 10822 10821 10823 10824 10825 + 10824 10826 10827 10828 10827 10829 10830 10831 + 10830 10832 10833 10834 10833 10835 10836 10837 + 10836 10838 10839 10840 10839 10841 10842 10843 + 10842 10844 10845 10846 10845 10847 10848 10849 + 10848 10850 10851 10852 10851 10853 10854 10855 + 10854 10856 10857 10858 10857 10859 10860 10861 + 10860 10862 10863 10864 10863 10865 10866 10867 + 10866 10868 10869 10870 10869 10871 10872 10873 + 10872 10874 10875 10876 10875 10877 10878 10879 + 10878 10880 10881 10882 10881 10883 10884 10885 + 10884 10886 10887 10888 10887 10889 10890 10891 + 10890 10892 10893 10894 10893 10895 10896 10897 + 10896 10898 10899 10900 10899 10901 10902 10903 + 10902 10904 10905 10906 10905 10907 10908 10909 + 10908 10910 10911 10912 10911 10913 10914 10915 + 10914 10916 10917 10918 10917 10919 10920 10921 + 10920 10922 10923 10924 10923 10925 10926 10927 + 10926 10928 10929 10930 10929 10931 10932 10933 + 10932 10934 10935 10936 10935 10937 10938 10939 + 10938 10940 10941 10942 10941 10943 10944 10945 + 10944 10946 10947 10948 10947 10949 10950 10951 + 10950 10952 10953 10954 10953 10955 10956 10957 + 10956 10958 10959 10960 10959 10961 10962 10963 + 10962 10964 10965 10966 10965 10967 10968 10969 + 10968 10970 10971 10972 10971 10973 10974 10975 + 10974 10976 10977 10978 10977 10979 10980 10981 + 10980 10982 10983 10984 10983 10985 10986 10987 + 10986 10988 10989 10990 10989 10991 10992 10993 + 10992 10994 10995 10996 10995 10997 10998 10999 + 10998 11000 11001 11002 11001 11003 11004 11005 + 11004 11006 11007 11008 11007 11009 11010 11011 + 11010 11012 11013 11014 11013 11015 11016 11017 + 11016 11018 11019 11020 11019 11021 11022 11023 + 11022 11024 11025 11026 11025 11027 11028 11029 + 11028 11030 11031 11032 11031 11033 11034 11035 + 11034 11036 11037 11038 11037 11039 11040 11041 + 11040 11042 11043 11044 11043 11045 11046 11047 + 11046 11048 11049 11050 11049 11051 11052 11053 + 11052 11054 11055 11056 11055 11057 11058 11059 + 11058 11060 11061 11062 11061 11063 11064 11065 + 11064 11066 11067 11068 11067 11069 11070 11071 + 11070 11072 11073 11074 11073 11075 11076 11077 + 11076 11078 11079 11080 11079 11081 11082 11083 + 11082 11084 11085 11086 11085 11087 11088 11089 + 11088 11090 11091 11092 11091 11093 11094 11095 + 11094 11096 11097 11098 11097 11099 11100 11101 + 11100 11102 11103 11104 11103 11105 11106 11107 + 11106 11108 11109 11110 11109 11111 11112 11113 + 11112 11114 11115 11116 11115 11117 11118 11119 + 11118 11120 11121 11122 11121 11123 11124 11125 + 11124 11126 11127 11128 11127 11129 11130 11131 + 11130 11132 11133 11134 11133 11135 11136 11137 + 11136 11138 11139 11140 11139 11141 11142 11143 + 11142 11144 11145 11146 11145 11147 11148 11149 + 11148 11150 11151 11152 11151 11153 11154 11155 + 11154 11156 11157 11158 11157 11159 11160 11161 + 11160 11162 11163 11164 11163 11165 11166 11167 + 11166 11168 11169 11170 11169 11171 11172 11173 + 11172 11174 11175 11176 11175 11177 11178 11179 + 11178 11180 11181 11182 11181 11183 11184 11185 + 11184 11186 11187 11188 11187 11189 11190 11191 + 11190 11192 11193 11194 11193 11195 11196 11197 + 11196 11198 11199 11200 11199 11201 11202 11203 + 11202 11204 11205 11206 11205 11207 11208 11209 + 11208 11210 11211 11212 11211 11213 11214 11215 + 11214 11216 11217 11218 11217 11219 11220 11221 + 11220 11222 11223 11224 11223 11225 11226 11227 + 11226 11228 11229 11230 11229 11231 11232 11233 + 11232 11234 11235 11236 11235 11237 11238 11239 + 11238 11240 11241 11242 11241 11243 11244 11245 + 11244 11246 11247 11248 11247 11249 11250 11251 + 11250 11252 11253 11254 11253 11255 11256 11257 + 11256 11258 11259 11260 11259 11261 11262 11263 + 11262 11264 11265 11266 11265 11267 11268 11269 + 11268 11270 11271 11272 11271 11273 11274 11275 + 11274 11276 11277 11278 11277 11279 11280 11281 + 11280 11282 11283 11284 11283 11285 11286 11287 + 11286 11288 11289 11290 11289 11291 11292 11293 + 11292 11294 11295 11296 11295 11297 11298 11299 + 11298 11300 11301 11302 11301 11303 11304 11305 + 11304 11306 11307 11308 11307 11309 11310 11311 + 11310 11312 11313 11314 11313 11315 11316 11317 + 11316 11318 11319 11320 11319 11321 11322 11323 + 11322 11324 11325 11326 11325 11327 11328 11329 + 11328 11330 11331 11332 11331 11333 11334 11335 + 11334 11336 11337 11338 11337 11339 11340 11341 + 11340 11342 11343 11344 11343 11345 11346 11347 + 11346 11348 11349 11350 11349 11351 11352 11353 + 11352 11354 11355 11356 11355 11357 11358 11359 + 11358 11360 11361 11362 11361 11363 11364 11365 + 11364 11366 11367 11368 11367 11369 11370 11371 + 11370 11372 11373 11374 11373 11375 11376 11377 + 11376 11378 11379 11380 11379 11381 11382 11383 + 11382 11384 11385 11386 11385 11387 11388 11389 + 11388 11390 11391 11392 11391 11393 11394 11395 + 11394 11396 11397 11398 11397 11399 11400 11401 + 11400 11402 11403 11404 11403 11405 11406 11407 + 11406 11408 11409 11410 11409 11411 11412 11413 + 11412 11414 11415 11416 11415 11417 11418 11419 + 11418 11420 11421 11422 11421 11423 11424 11425 + 11424 11426 11427 11428 11427 11429 11430 11431 + 11430 11432 11433 11434 11433 11435 11436 11437 + 11436 11438 11439 11440 11439 11441 11442 11443 + 11442 11444 11445 11446 11445 11447 11448 11449 + 11448 11450 11451 11452 11451 11453 11454 11455 + 11454 11456 11457 11458 11457 11459 11460 11461 + 11460 11462 11463 11464 11463 11465 11466 11467 + 11466 11468 11469 11470 11469 11471 11472 11473 + 11472 11474 11475 11476 11475 11477 11478 11479 + 11478 11480 11481 11482 11481 11483 11484 11485 + 11484 11486 11487 11488 11487 11489 11490 11491 + 11490 11492 11493 11494 11493 11495 11496 11497 + 11496 11498 11499 11500 11499 11501 11502 11503 + 11502 11504 11505 11506 11505 11507 11508 11509 + 11508 11510 11511 11512 11511 11513 11514 11515 + 11514 11516 11517 11518 11517 11519 11520 11521 + 11520 11522 11523 11524 11523 11525 11526 11527 + 11526 11528 11529 11530 11529 11531 11532 11533 + 11532 11534 11535 11536 11535 11537 11538 11539 + 11538 11540 11541 11542 11541 11543 11544 11545 + 11544 11546 11547 11548 11547 11549 11550 11551 + 11550 11552 11553 11554 11553 11555 11556 11557 + 11556 11558 11559 11560 11559 11561 11562 11563 + 11562 11564 11565 11566 11565 11567 11568 11569 + 11568 11570 11571 11572 11571 11573 11574 11575 + 11574 11576 11577 11578 11577 11579 11580 11581 + 11580 11582 11583 11584 11583 11585 11586 11587 + 11586 11588 11589 11590 11589 11591 11592 11593 + 11592 11594 11595 11596 11595 11597 11598 11599 + 11598 11600 11601 11602 11601 11603 11604 11605 + 11604 11606 11607 11608 11607 11609 11610 11611 + 11610 11612 11613 11614 11613 11615 11616 11617 + 11616 11618 11619 11620 11619 11621 11622 11623 + 11622 11624 11625 11626 11625 11627 11628 11629 + 11628 11630 11631 11632 11631 11633 11634 11635 + 11634 11636 11637 11638 11637 11639 11640 11641 + 11640 11642 11643 11644 11643 11645 11646 11647 + 11646 11648 11649 11650 11649 11651 11652 11653 + 11652 11654 11655 11656 11655 11657 11658 11659 + 11658 11660 11661 11662 11661 11663 11664 11665 + 11664 11666 11667 11668 11667 11669 11670 11671 + 11670 11672 11673 11674 11673 11675 11676 11677 + 11676 11678 11679 11680 11679 11681 11682 11683 + 11682 11684 11685 11686 11685 11687 11688 11689 + 11688 11690 11691 11692 11691 11693 11694 11695 + 11694 11696 11697 11698 11697 11699 11700 11701 + 11700 11702 11703 11704 11703 11705 11706 11707 + 11706 11708 11709 11710 11709 11711 11712 11713 + 11712 11714 11715 11716 11715 11717 11718 11719 + 11718 11720 11721 11722 11721 11723 11724 11725 + 11724 11726 11727 11728 11727 11729 11730 11731 + 11730 11732 11733 11734 11733 11735 11736 11737 + 11736 11738 11739 11740 11739 11741 11742 11743 + 11742 11744 11745 11746 11745 11747 11748 11749 + 11748 11750 11751 11752 11751 11753 11754 11755 + 11754 11756 11757 11758 11757 11759 11760 11761 + 11760 11762 11763 11764 11763 11765 11766 11767 + 11766 11768 11769 11770 11769 11771 11772 11773 + 11772 11774 11775 11776 11775 11777 11778 11779 + 11778 11780 11781 11782 11781 11783 11784 11785 + 11784 11786 11787 11788 11787 11789 11790 11791 + 11790 11792 11793 11794 11793 11795 11796 11797 + 11796 11798 11799 11800 11799 11801 11802 11803 + 11802 11804 11805 11806 11805 11807 11808 11809 + 11808 11810 11811 11812 11811 11813 11814 11815 + 11814 11816 11817 11818 11817 11819 11820 11821 + 11820 11822 11823 11824 11823 11825 11826 11827 + 11826 11828 11829 11830 11829 11831 11832 11833 + 11832 11834 11835 11836 11835 11837 11838 11839 + 11838 11840 11841 11842 11841 11843 11844 11845 + 11844 11846 11847 11848 11847 11849 11850 11851 + 11850 11852 11853 11854 11853 11855 11856 11857 + 11856 11858 11859 11860 11859 11861 11862 11863 + 11862 11864 11865 11866 11865 11867 11868 11869 + 11868 11870 11871 11872 11871 11873 11874 11875 + 11874 11876 11877 11878 11877 11879 11880 11881 + 11880 11882 11883 11884 11883 11885 11886 11887 + 11886 11888 11889 11890 11889 11891 11892 11893 + 11892 11894 11895 11896 11895 11897 11898 11899 + 11898 11900 11901 11902 11901 11903 11904 11905 + 11904 11906 11907 11908 11907 11909 11910 11911 + 11910 11912 11913 11914 11913 11915 11916 11917 + 11916 11918 11919 11920 11919 11921 11922 11923 + 11922 11924 11925 11926 11925 11927 11928 11929 + 11928 11930 11931 11932 11931 11933 11934 11935 + 11934 11936 11937 11938 11937 11939 11940 11941 + 11940 11942 11943 11944 11943 11945 11946 11947 + 11946 11948 11949 11950 11949 11951 11952 11953 + 11952 11954 11955 11956 11955 11957 11958 11959 + 11958 11960 11961 11962 11961 11963 11964 11965 + 11964 11966 11967 11968 11967 11969 11970 11971 + 11970 11972 11973 11974 11973 11975 11976 11977 + 11976 11978 11979 11980 11979 11981 11982 11983 + 11982 11984 11985 11986 11985 11987 11988 11989 + 11988 11990 11991 11992 11991 11993 11994 11995 + 11994 11996 11997 11998 11997 11999 12000 12001 + 12000 12002 12003 12004 12003 12005 12006 12007 + 12006 12008 12009 12010 12009 12011 12012 12013 + 12012 12014 12015 12016 12015 12017 12018 12019 + 12018 12020 12021 12022 12021 12023 12024 12025 + 12024 12026 12027 12028 12027 12029 12030 12031 + 12030 12032 12033 12034 12033 12035 12036 12037 + 12036 12038 12039 12040 12039 12041 12042 12043 + 12042 12044 12045 12046 12045 12047 12048 12049 + 12048 12050 12051 12052 12051 12053 12054 12055 + 12054 12056 12057 12058 12057 12059 12060 12061 + 12060 12062 12063 12064 12063 12065 12066 12067 + 12066 12068 12069 12070 12069 12071 12072 12073 + 12072 12074 12075 12076 12075 12077 12078 12079 + 12078 12080 12081 12082 12081 12083 12084 12085 + 12084 12086 12087 12088 12087 12089 12090 12091 + 12090 12092 12093 12094 12093 12095 12096 12097 + 12096 12098 12099 12100 12099 12101 12102 12103 + 12102 12104 12105 12106 12105 12107 12108 12109 + 12108 12110 12111 12112 12111 12113 12114 12115 + 12114 12116 12117 12118 12117 12119 12120 12121 + 12120 12122 12123 12124 12123 12125 12126 12127 + 12126 12128 12129 12130 12129 12131 12132 12133 + 12132 12134 12135 12136 12135 12137 12138 12139 + 12138 12140 12141 12142 12141 12143 12144 12145 + 12144 12146 12147 12148 12147 12149 12150 12151 + 12150 12152 12153 12154 12153 12155 12156 12157 + 12156 12158 12159 12160 12159 12161 12162 12163 + 12162 12164 12165 12166 12165 12167 12168 12169 + 12168 12170 12171 12172 12171 12173 12174 12175 + 12174 12176 12177 12178 12177 12179 12180 12181 + 12180 12182 12183 12184 12183 12185 12186 12187 + 12186 12188 12189 12190 12189 12191 12192 12193 + 12192 12194 12195 12196 12195 12197 12198 12199 + 12198 12200 12201 12202 12201 12203 12204 12205 + 12204 12206 12207 12208 12207 12209 12210 12211 + 12210 12212 12213 12214 12213 12215 12216 12217 + 12216 12218 12219 12220 12219 12221 12222 12223 + 12222 12224 12225 12226 12225 12227 12228 12229 + 12228 12230 12231 12232 12231 12233 12234 12235 + 12234 12236 12237 12238 12237 12239 12240 12241 + 12240 12242 12243 12244 12243 12245 12246 12247 + 12246 12248 12249 12250 12249 12251 12252 12253 + 12252 12254 12255 12256 12255 12257 12258 12259 + 12258 12260 12261 12262 12261 12263 12264 12265 + 12264 12266 12267 12268 12267 12269 12270 12271 + 12270 12272 12273 12274 12273 12275 12276 12277 + 12276 12278 12279 12280 12279 12281 12282 12283 + 12282 12284 12285 12286 12285 12287 12288 12289 + 12288 12290 12291 12292 12291 12293 12294 12295 + 12294 12296 12297 12298 12297 12299 12300 12301 + 12300 12302 12303 12304 12303 12305 12306 12307 + 12306 12308 12309 12310 12309 12311 12312 12313 + 12312 12314 12315 12316 12315 12317 12318 12319 + 12318 12320 12321 12322 12321 12323 12324 12325 + 12324 12326 12327 12328 12327 12329 12330 12331 + 12330 12332 12333 12334 12333 12335 12336 12337 + 12336 12338 12339 12340 12339 12341 12342 12343 + 12342 12344 12345 12346 12345 12347 12348 12349 + 12348 12350 12351 12352 12351 12353 12354 12355 + 12354 12356 12357 12358 12357 12359 12360 12361 + 12360 12362 12363 12364 12363 12365 12366 12367 + 12366 12368 12369 12370 12369 12371 12372 12373 + 12372 12374 12375 12376 12375 12377 12378 12379 + 12378 12380 12381 12382 12381 12383 12384 12385 + 12384 12386 12387 12388 12387 12389 12390 12391 + 12390 12392 12393 12394 12393 12395 12396 12397 + 12396 12398 12399 12400 12399 12401 12402 12403 + 12402 12404 12405 12406 12405 12407 12408 12409 + 12408 12410 12411 12412 12411 12413 12414 12415 + 12414 12416 12417 12418 12417 12419 12420 12421 + 12420 12422 12423 12424 12423 12425 12426 12427 + 12426 12428 12429 12430 12429 12431 12432 12433 + 12432 12434 12435 12436 12435 12437 12438 12439 + 12438 12440 12441 12442 12441 12443 12444 12445 + 12444 12446 12447 12448 12447 12449 12450 12451 + 12450 12452 12453 12454 12453 12455 12456 12457 + 12456 12458 12459 12460 12459 12461 12462 12463 + 12462 12464 12465 12466 12465 12467 12468 12469 + 12468 12470 12471 12472 12471 12473 12474 12475 + 12474 12476 12477 12478 12477 12479 12480 12481 + 12480 12482 12483 12484 12483 12485 12486 12487 + 12486 12488 12489 12490 12489 12491 12492 12493 + 12492 12494 12495 12496 12495 12497 12498 12499 + 12498 12500 12501 12502 12501 12503 12504 12505 + 12504 12506 12507 12508 12507 12509 12510 12511 + 12510 12512 12513 12514 12513 12515 12516 12517 + 12516 12518 12519 12520 12519 12521 12522 12523 + 12522 12524 12525 12526 12525 12527 12528 12529 + 12528 12530 12531 12532 12531 12533 12534 12535 + 12534 12536 12537 12538 12537 12539 12540 12541 + 12540 12542 12543 12544 12543 12545 12546 12547 + 12546 12548 12549 12550 12549 12551 12552 12553 + 12552 12554 12555 12556 12555 12557 12558 12559 + 12558 12560 12561 12562 12561 12563 12564 12565 + 12564 12566 12567 12568 12567 12569 12570 12571 + 12570 12572 12573 12574 12573 12575 12576 12577 + 12576 12578 12579 12580 12579 12581 12582 12583 + 12582 12584 12585 12586 12585 12587 12588 12589 + 12588 12590 12591 12592 12591 12593 12594 12595 + 12594 12596 12597 12598 12597 12599 12600 12601 + 12600 12602 12603 12604 12603 12605 12606 12607 + 12606 12608 12609 12610 12609 12611 12612 12613 + 12612 12614 12615 12616 12615 12617 12618 12619 + 12618 12620 12621 12622 12621 12623 12624 12625 + 12624 12626 12627 12628 12627 12629 12630 12631 + 12630 12632 12633 12634 12633 12635 12636 12637 + 12636 12638 12639 12640 12639 12641 12642 12643 + 12642 12644 12645 12646 12645 12647 12648 12649 + 12648 12650 12651 12652 12651 12653 12654 12655 + 12654 12656 12657 12658 12657 12659 12660 12661 + 12660 12662 12663 12664 12663 12665 12666 12667 + 12666 12668 12669 12670 12669 12671 12672 12673 + 12672 12674 12675 12676 12675 12677 12678 12679 + 12678 12680 12681 12682 12681 12683 12684 12685 + 12684 12686 12687 12688 12687 12689 12690 12691 + 12690 12692 12693 12694 12693 12695 12696 12697 + 12696 12698 12699 12700 12699 12701 12702 12703 + 12702 12704 12705 12706 12705 12707 12708 12709 + 12708 12710 12711 12712 12711 12713 12714 12715 + 12714 12716 12717 12718 12717 12719 12720 12721 + 12720 12722 12723 12724 12723 12725 12726 12727 + 12726 12728 12729 12730 12729 12731 12732 12733 + 12732 12734 12735 12736 12735 12737 12738 12739 + 12738 12740 12741 12742 12741 12743 12744 12745 + 12744 12746 12747 12748 12747 12749 12750 12751 + 12750 12752 12753 12754 12753 12755 12756 12757 + 12756 12758 12759 12760 12759 12761 12762 12763 + 12762 12764 12765 12766 12765 12767 12768 12769 + 12768 12770 12771 12772 12771 12773 12774 12775 + 12774 12776 12777 12778 12777 12779 12780 12781 + 12780 12782 12783 12784 12783 12785 12786 12787 + 12786 12788 12789 12790 12789 12791 12792 12793 + 12792 12794 12795 12796 12795 12797 12798 12799 + 12798 12800 12801 12802 12801 12803 12804 12805 + 12804 12806 12807 12808 12807 12809 12810 12811 + 12810 12812 12813 12814 12813 12815 12816 12817 + 12816 12818 12819 12820 12819 12821 12822 12823 + 12822 12824 12825 12826 12825 12827 12828 12829 + 12828 12830 12831 12832 12831 12833 12834 12835 + 12834 12836 12837 12838 12837 12839 12840 12841 + 12840 12842 12843 12844 12843 12845 12846 12847 + 12846 12848 12849 12850 12849 12851 12852 12853 + 12852 12854 12855 12856 12855 12857 12858 12859 + 12858 12860 12861 12862 12861 12863 12864 12865 + 12864 12866 12867 12868 12867 12869 12870 12871 + 12870 12872 12873 12874 12873 12875 12876 12877 + 12876 12878 12879 12880 12879 12881 12882 12883 + 12882 12884 12885 12886 12885 12887 12888 12889 + 12888 12890 12891 12892 12891 12893 12894 12895 + 12894 12896 12897 12898 12897 12899 12900 12901 + 12900 12902 12903 12904 12903 12905 12906 12907 + 12906 12908 12909 12910 12909 12911 12912 12913 + 12912 12914 12915 12916 12915 12917 12918 12919 + 12918 12920 12921 12922 12921 12923 12924 12925 + 12924 12926 12927 12928 12927 12929 12930 12931 + 12930 12932 12933 12934 12933 12935 12936 12937 + 12936 12938 12939 12940 12939 12941 12942 12943 + 12942 12944 12945 12946 12945 12947 12948 12949 + 12948 12950 12951 12952 12951 12953 12954 12955 + 12954 12956 12957 12958 12957 12959 12960 12961 + 12960 12962 12963 12964 12963 12965 12966 12967 + 12966 12968 12969 12970 12969 12971 12972 12973 + 12972 12974 12975 12976 12975 12977 12978 12979 + 12978 12980 12981 12982 12981 12983 12984 12985 + 12984 12986 12987 12988 12987 12989 12990 12991 + 12990 12992 12993 12994 12993 12995 12996 12997 + 12996 12998 12999 13000 12999 13001 13002 13003 + 13002 13004 13005 13006 13005 13007 13008 13009 + 13008 13010 13011 13012 13011 13013 13014 13015 + 13014 13016 13017 13018 13017 13019 13020 13021 + 13020 13022 13023 13024 13023 13025 13026 13027 + 13026 13028 13029 13030 13029 13031 13032 13033 + 13032 13034 13035 13036 13035 13037 13038 13039 + 13038 13040 13041 13042 13041 13043 13044 13045 + 13044 13046 13047 13048 13047 13049 13050 13051 + 13050 13052 13053 13054 13053 13055 13056 13057 + 13056 13058 13059 13060 13059 13061 13062 13063 + 13062 13064 13065 13066 13065 13067 13068 13069 + 13068 13070 13071 13072 13071 13073 13074 13075 + 13074 13076 13077 13078 13077 13079 13080 13081 + 13080 13082 13083 13084 13083 13085 13086 13087 + 13086 13088 13089 13090 13089 13091 13092 13093 + 13092 13094 13095 13096 13095 13097 13098 13099 + 13098 13100 13101 13102 13101 13103 13104 13105 + 13104 13106 13107 13108 13107 13109 13110 13111 + 13110 13112 13113 13114 13113 13115 13116 13117 + 13116 13118 13119 13120 13119 13121 13122 13123 + 13122 13124 13125 13126 13125 13127 13128 13129 + 13128 13130 13131 13132 13131 13133 13134 13135 + 13134 13136 13137 13138 13137 13139 13140 13141 + 13140 13142 13143 13144 13143 13145 13146 13147 + 13146 13148 13149 13150 13149 13151 13152 13153 + 13152 13154 13155 13156 13155 13157 13158 13159 + 13158 13160 13161 13162 13161 13163 13164 13165 + 13164 13166 13167 13168 13167 13169 13170 13171 + 13170 13172 13173 13174 13173 13175 13176 13177 + 13176 13178 13179 13180 13179 13181 13182 13183 + 13182 13184 13185 13186 13185 13187 13188 13189 + 13188 13190 13191 13192 13191 13193 13194 13195 + 13194 13196 13197 13198 13197 13199 13200 13201 + 13200 13202 13203 13204 13203 13205 13206 13207 + 13206 13208 13209 13210 13209 13211 13212 13213 + 13212 13214 13215 13216 13215 13217 13218 13219 + 13218 13220 13221 13222 13221 13223 13224 13225 + 13224 13226 13227 13228 13227 13229 13230 13231 + 13230 13232 13233 13234 13233 13235 13236 13237 + 13236 13238 13239 13240 13239 13241 13242 13243 + 13242 13244 13245 13246 13245 13247 13248 13249 + 13248 13250 13251 13252 13251 13253 13254 13255 + 13254 13256 13257 13258 13257 13259 13260 13261 + 13260 13262 13263 13264 13263 13265 13266 13267 + 13266 13268 13269 13270 13269 13271 13272 13273 + 13272 13274 13275 13276 13275 13277 13278 13279 + 13278 13280 13281 13282 13281 13283 13284 13285 + 13284 13286 13287 13288 13287 13289 13290 13291 + 13290 13292 13293 13294 13293 13295 13296 13297 + 13296 13298 13299 13300 13299 13301 13302 13303 + 13302 13304 13305 13306 13305 13307 13308 13309 + 13308 13310 13311 13312 13311 13313 13314 13315 + 13314 13316 13317 13318 13317 13319 13320 13321 + 13320 13322 13323 13324 13323 13325 13326 13327 + 13326 13328 13329 13330 13329 13331 13332 13333 + 13332 13334 13335 13336 13335 13337 13338 13339 + 13338 13340 13341 13342 13341 13343 13344 13345 + 13344 13346 13347 13348 13347 13349 13350 13351 + 13350 13352 13353 13354 13353 13355 13356 13357 + 13356 13358 13359 13360 13359 13361 13362 13363 + 13362 13364 13365 13366 13365 13367 13368 13369 + 13368 13370 13371 13372 13371 13373 13374 13375 + 13374 13376 13377 13378 13377 13379 13380 13381 + 13380 13382 13383 13384 13383 13385 13386 13387 + 13386 13388 13389 13390 13389 13391 13392 13393 + 13392 13394 13395 13396 13395 13397 13398 13399 + 13398 13400 13401 13402 13401 13403 13404 13405 + 13404 13406 13407 13408 13407 13409 13410 13411 + 13410 13412 13413 13414 13413 13415 13416 13417 + 13416 13418 13419 13420 13419 13421 13422 13423 + 13422 13424 13425 13426 13425 13427 13428 13429 + 13428 13430 13431 13432 13431 13433 13434 13435 + 13434 13436 13437 13438 13437 13439 13440 13441 + 13440 13442 13443 13444 13443 13445 13446 13447 + 13446 13448 13449 13450 13449 13451 13452 13453 + 13452 13454 13455 13456 13455 13457 13458 13459 + 13458 13460 13461 13462 13461 13463 13464 13465 + 13464 13466 13467 13468 13467 13469 13470 13471 + 13470 13472 13473 13474 13473 13475 13476 13477 + 13476 13478 13479 13480 13479 13481 13482 13483 + 13482 13484 13485 13486 13485 13487 13488 13489 + 13488 13490 13491 13492 13491 13493 13494 13495 + 13494 13496 13497 13498 13497 13499 13500 13501 + 13500 13502 13503 13504 13503 13505 13506 13507 + 13506 13508 13509 13510 13509 13511 13512 13513 + 13512 13514 13515 13516 13515 13517 13518 13519 + 13518 13520 13521 13522 13521 13523 13524 13525 + 13524 13526 13527 13528 13527 13529 13530 13531 + 13530 13532 13533 13534 13533 13535 13536 13537 + 13536 13538 13539 13540 13539 13541 13542 13543 + 13542 13544 13545 13546 13545 13547 13548 13549 + 13548 13550 13551 13552 13551 13553 13554 13555 + 13554 13556 13557 13558 13557 13559 13560 13561 + 13560 13562 13563 13564 13563 13565 13566 13567 + 13566 13568 13569 13570 13569 13571 13572 13573 + 13572 13574 13575 13576 13575 13577 13578 13579 + 13578 13580 13581 13582 13581 13583 13584 13585 + 13584 13586 13587 13588 13587 13589 13590 13591 + 13590 13592 13593 13594 13593 13595 13596 13597 + 13596 13598 13599 13600 13599 13601 13602 13603 + 13602 13604 13605 13606 13605 13607 13608 13609 + 13608 13610 13611 13612 13611 13613 13614 13615 + 13614 13616 13617 13618 13617 13619 13620 13621 + 13620 13622 13623 13624 13623 13625 13626 13627 + 13626 13628 13629 13630 13629 13631 13632 13633 + 13632 13634 13635 13636 13635 13637 13638 13639 + 13638 13640 13641 13642 13641 13643 13644 13645 + 13644 13646 13647 13648 13647 13649 13650 13651 + 13650 13652 13653 13654 13653 13655 13656 13657 + 13656 13658 13659 13660 13659 13661 13662 13663 + 13662 13664 13665 13666 13665 13667 13668 13669 + 13668 13670 13671 13672 13671 13673 13674 13675 + 13674 13676 13677 13678 13677 13679 13680 13681 + 13680 13682 13683 13684 13683 13685 13686 13687 + 13686 13688 13689 13690 13689 13691 13692 13693 + 13692 13694 13695 13696 13695 13697 13698 13699 + 13698 13700 13701 13702 13701 13703 13704 13705 + 13704 13706 13707 13708 13707 13709 13710 13711 + 13710 13712 13713 13714 13713 13715 13716 13717 + 13716 13718 13719 13720 13719 13721 13722 13723 + 13722 13724 13725 13726 13725 13727 13728 13729 + 13728 13730 13731 13732 13731 13733 13734 13735 + 13734 13736 13737 13738 13737 13739 13740 13741 + 13740 13742 13743 13744 13743 13745 13746 13747 + 13746 13748 13749 13750 13749 13751 13752 13753 + 13752 13754 13755 13756 13755 13757 13758 13759 + 13758 13760 13761 13762 13761 13763 13764 13765 + 13764 13766 13767 13768 13767 13769 13770 13771 + 13770 13772 13773 13774 13773 13775 13776 13777 + 13776 13778 13779 13780 13779 13781 13782 13783 + 13782 13784 13785 13786 13785 13787 13788 13789 + 13788 13790 13791 13792 13791 13793 13794 13795 + 13794 13796 13797 13798 13797 13799 13800 13801 + 13800 13802 13803 13804 13803 13805 13806 13807 + 13806 13808 13809 13810 13809 13811 13812 13813 + 13812 13814 13815 13816 13815 13817 13818 13819 + 13818 13820 13821 13822 13821 13823 13824 13825 + 13824 13826 13827 13828 13827 13829 13830 13831 + 13830 13832 13833 13834 13833 13835 13836 13837 + 13836 13838 13839 13840 13839 13841 13842 13843 + 13842 13844 13845 13846 13845 13847 13848 13849 + 13848 13850 13851 13852 13851 13853 13854 13855 + 13854 13856 13857 13858 13857 13859 13860 13861 + 13860 13862 13863 13864 13863 13865 13866 13867 + 13866 13868 13869 13870 13869 13871 13872 13873 + 13872 13874 13875 13876 13875 13877 13878 13879 + 13878 13880 13881 13882 13881 13883 13884 13885 + 13884 13886 13887 13888 13887 13889 13890 13891 + 13890 13892 13893 13894 13893 13895 13896 13897 + 13896 13898 13899 13900 13899 13901 13902 13903 + 13902 13904 13905 13906 13905 13907 13908 13909 + 13908 13910 13911 13912 13911 13913 13914 13915 + 13914 13916 13917 13918 13917 13919 13920 13921 + 13920 13922 13923 13924 13923 13925 13926 13927 + 13926 13928 13929 13930 13929 13931 13932 13933 + 13932 13934 13935 13936 13935 13937 13938 13939 + 13938 13940 13941 13942 13941 13943 13944 13945 + 13944 13946 13947 13948 13947 13949 13950 13951 + 13950 13952 13953 13954 13953 13955 13956 13957 + 13956 13958 13959 13960 13959 13961 13962 13963 + 13962 13964 13965 13966 13965 13967 13968 13969 + 13968 13970 13971 13972 13971 13973 13974 13975 + 13974 13976 13977 13978 13977 13979 13980 13981 + 13980 13982 13983 13984 13983 13985 13986 13987 + 13986 13988 13989 13990 13989 13991 13992 13993 + 13992 13994 13995 13996 13995 13997 13998 13999 + 13998 14000 14001 14002 14001 14003 14004 14005 + 14004 14006 14007 14008 14007 14009 14010 14011 + 14010 14012 14013 14014 14013 14015 14016 14017 + 14016 14018 14019 14020 14019 14021 14022 14023 + 14022 14024 14025 14026 14025 14027 14028 14029 + 14028 14030 14031 14032 14031 14033 14034 14035 + 14034 14036 14037 14038 14037 14039 14040 14041 + 14040 14042 14043 14044 14043 14045 14046 14047 + 14046 14048 14049 14050 14049 14051 14052 14053 + 14052 14054 14055 14056 14055 14057 14058 14059 + 14058 14060 14061 14062 14061 14063 14064 14065 + 14064 14066 14067 14068 14067 14069 14070 14071 + 14070 14072 14073 14074 14073 14075 14076 14077 + 14076 14078 14079 14080 14079 14081 14082 14083 + 14082 14084 14085 14086 14085 14087 14088 14089 + 14088 14090 14091 14092 14091 14093 14094 14095 + 14094 14096 14097 14098 14097 14099 14100 14101 + 14100 14102 14103 14104 14103 14105 14106 14107 + 14106 14108 14109 14110 14109 14111 14112 14113 + 14112 14114 14115 14116 14115 14117 14118 14119 + 14118 14120 14121 14122 14121 14123 14124 14125 + 14124 14126 14127 14128 14127 14129 14130 14131 + 14130 14132 14133 14134 14133 14135 14136 14137 + 14136 14138 14139 14140 14139 14141 14142 14143 + 14142 14144 14145 14146 14145 14147 14148 14149 + 14148 14150 14151 14152 14151 14153 14154 14155 + 14154 14156 14157 14158 14157 14159 14160 14161 + 14160 14162 14163 14164 14163 14165 14166 14167 + 14166 14168 14169 14170 14169 14171 14172 14173 + 14172 14174 14175 14176 14175 14177 14178 14179 + 14178 14180 14181 14182 14181 14183 14184 14185 + 14184 14186 14187 14188 14187 14189 14190 14191 + 14190 14192 14193 14194 14193 14195 14196 14197 + 14196 14198 14199 14200 14199 14201 14202 14203 + 14202 14204 14205 14206 14205 14207 14208 14209 + 14208 14210 14211 14212 14211 14213 14214 14215 + 14214 14216 14217 14218 14217 14219 14220 14221 + 14220 14222 14223 14224 14223 14225 14226 14227 + 14226 14228 14229 14230 14229 14231 14232 14233 + 14232 14234 14235 14236 14235 14237 14238 14239 + 14238 14240 14241 14242 14241 14243 14244 14245 + 14244 14246 14247 14248 14247 14249 14250 14251 + 14250 14252 14253 14254 14253 14255 14256 14257 + 14256 14258 14259 14260 14259 14261 14262 14263 + 14262 14264 14265 14266 14265 14267 14268 14269 + 14268 14270 14271 14272 14271 14273 14274 14275 + 14274 14276 14277 14278 14277 14279 14280 14281 + 14280 14282 14283 14284 14283 14285 14286 14287 + 14286 14288 14289 14290 14289 14291 14292 14293 + 14292 14294 14295 14296 14295 14297 14298 14299 + 14298 14300 14301 14302 14301 14303 14304 14305 + 14304 14306 14307 14308 14307 14309 14310 14311 + 14310 14312 14313 14314 14313 14315 14316 14317 + 14316 14318 14319 14320 14319 14321 14322 14323 + 14322 14324 14325 14326 14325 14327 14328 14329 + 14328 14330 14331 14332 14331 14333 14334 14335 + 14334 14336 14337 14338 14337 14339 14340 14341 + 14340 14342 14343 14344 14343 14345 14346 14347 + 14346 14348 14349 14350 14349 14351 14352 14353 + 14352 14354 14355 14356 14355 14357 14358 14359 + 14358 14360 14361 14362 14361 14363 14364 14365 + 14364 14366 14367 14368 14367 14369 14370 14371 + 14370 14372 14373 14374 14373 14375 14376 14377 + 14376 14378 14379 14380 14379 14381 14382 14383 + 14382 14384 14385 14386 14385 14387 14388 14389 + 14388 14390 14391 14392 14391 14393 14394 14395 + 14394 14396 14397 14398 14397 14399 14400 14401 + 14400 14402 14403 14404 14403 14405 14406 14407 + 14406 14408 14409 14410 14409 14411 14412 14413 + 14412 14414 14415 14416 14415 14417 14418 14419 + 14418 14420 14421 14422 14421 14423 14424 14425 + 14424 14426 14427 14428 14427 14429 14430 14431 + 14430 14432 14433 14434 14433 14435 14436 14437 + 14436 14438 14439 14440 14439 14441 14442 14443 + 14442 14444 14445 14446 14445 14447 14448 14449 + 14448 14450 14451 14452 14451 14453 14454 14455 + 14454 14456 14457 14458 14457 14459 14460 14461 + 14460 14462 14463 14464 14463 14465 14466 14467 + 14466 14468 14469 14470 14469 14471 14472 14473 + 14472 14474 14475 14476 14475 14477 14478 14479 + 14478 14480 14481 14482 14481 14483 14484 14485 + 14484 14486 14487 14488 14487 14489 14490 14491 + 14490 14492 14493 14494 14493 14495 14496 14497 + 14496 14498 14499 14500 14499 14501 14502 14503 + 14502 14504 14505 14506 14505 14507 14508 14509 + 14508 14510 14511 14512 14511 14513 14514 14515 + 14514 14516 14517 14518 14517 14519 14520 14521 + 14520 14522 14523 14524 14523 14525 14526 14527 + 14526 14528 14529 14530 14529 14531 14532 14533 + 14532 14534 14535 14536 14535 14537 14538 14539 + 14538 14540 14541 14542 14541 14543 14544 14545 + 14544 14546 14547 14548 14547 14549 14550 14551 + 14550 14552 14553 14554 14553 14555 14556 14557 + 14556 14558 14559 14560 14559 14561 14562 14563 + 14562 14564 14565 14566 14565 14567 14568 14569 + 14568 14570 14571 14572 14571 14573 14574 14575 + 14574 14576 14577 14578 14577 14579 14580 14581 + 14580 14582 14583 14584 14583 14585 14586 14587 + 14586 14588 14589 14590 14589 14591 14592 14593 + 14592 14594 14595 14596 14595 14597 14598 14599 + 14598 14600 14601 14602 14601 14603 14604 14605 + 14604 14606 14607 14608 14607 14609 14610 14611 + 14610 14612 14613 14614 14613 14615 14616 14617 + 14616 14618 14619 14620 14619 14621 14622 14623 + 14622 14624 14625 14626 14625 14627 14628 14629 + 14628 14630 14631 14632 14631 14633 14634 14635 + 14634 14636 14637 14638 14637 14639 14640 14641 + 14640 14642 14643 14644 14643 14645 14646 14647 + 14646 14648 14649 14650 14649 14651 14652 14653 + 14652 14654 14655 14656 14655 14657 14658 14659 + 14658 14660 14661 14662 14661 14663 14664 14665 + 14664 14666 14667 14668 14667 14669 14670 14671 + 14670 14672 14673 14674 14673 14675 14676 14677 + 14676 14678 14679 14680 14679 14681 14682 14683 + 14682 14684 14685 14686 14685 14687 14688 14689 + 14688 14690 14691 14692 14691 14693 14694 14695 + 14694 14696 14697 14698 14697 14699 14700 14701 + 14700 14702 14703 14704 14703 14705 14706 14707 + 14706 14708 14709 14710 14709 14711 14712 14713 + 14712 14714 14715 14716 14715 14717 14718 14719 + 14718 14720 14721 14722 14721 14723 14724 14725 + 14724 14726 14727 14728 14727 14729 14730 14731 + 14730 14732 14733 14734 14733 14735 14736 14737 + 14736 14738 14739 14740 14739 14741 14742 14743 + 14742 14744 14745 14746 14745 14747 14748 14749 + 14748 14750 14751 14752 14751 14753 14754 14755 + 14754 14756 14757 14758 14757 14759 14760 14761 + 14760 14762 14763 14764 14763 14765 14766 14767 + 14766 14768 14769 14770 14769 14771 14772 14773 + 14772 14774 14775 14776 14775 14777 14778 14779 + 14778 14780 14781 14782 14781 14783 14784 14785 + 14784 14786 14787 14788 14787 14789 14790 14791 + 14790 14792 14793 14794 14793 14795 14796 14797 + 14796 14798 14799 14800 14799 14801 14802 14803 + 14802 14804 14805 14806 14805 14807 14808 14809 + 14808 14810 14811 14812 14811 14813 14814 14815 + 14814 14816 14817 14818 14817 14819 14820 14821 + 14820 14822 14823 14824 14823 14825 14826 14827 + 14826 14828 14829 14830 14829 14831 14832 14833 + 14832 14834 14835 14836 14835 14837 14838 14839 + 14838 14840 14841 14842 14841 14843 14844 14845 + 14844 14846 14847 14848 14847 14849 14850 14851 + 14850 14852 14853 14854 14853 14855 14856 14857 + 14856 14858 14859 14860 14859 14861 14862 14863 + 14862 14864 14865 14866 14865 14867 14868 14869 + 14868 14870 14871 14872 14871 14873 14874 14875 + 14874 14876 14877 14878 14877 14879 14880 14881 + 14880 14882 14883 14884 14883 14885 14886 14887 + 14886 14888 14889 14890 14889 14891 14892 14893 + 14892 14894 14895 14896 14895 14897 14898 14899 + 14898 14900 14901 14902 14901 14903 14904 14905 + 14904 14906 14907 14908 14907 14909 14910 14911 + 14910 14912 14913 14914 14913 14915 14916 14917 + 14916 14918 14919 14920 14919 14921 14922 14923 + 14922 14924 14925 14926 14925 14927 14928 14929 + 14928 14930 14931 14932 14931 14933 14934 14935 + 14934 14936 14937 14938 14937 14939 14940 14941 + 14940 14942 14943 14944 14943 14945 14946 14947 + 14946 14948 14949 14950 14949 14951 14952 14953 + 14952 14954 14955 14956 14955 14957 14958 14959 + 14958 14960 14961 14962 14961 14963 14964 14965 + 14964 14966 14967 14968 14967 14969 14970 14971 + 14970 14972 14973 14974 14973 14975 14976 14977 + 14976 14978 14979 14980 14979 14981 14982 14983 + 14982 14984 14985 14986 14985 14987 14988 14989 + 14988 14990 14991 14992 14991 14993 14994 14995 + 14994 14996 14997 14998 14997 14999 15000 15001 + 15000 15002 15003 15004 15003 15005 15006 15007 + 15006 15008 15009 15010 15009 15011 15012 15013 + 15012 15014 15015 15016 15015 15017 15018 15019 + 15018 15020 15021 15022 15021 15023 15024 15025 + 15024 15026 15027 15028 15027 15029 15030 15031 + 15030 15032 15033 15034 15033 15035 15036 15037 + 15036 15038 15039 15040 15039 15041 15042 15043 + 15042 15044 15045 15046 15045 15047 15048 15049 + 15048 15050 15051 15052 15051 15053 15054 15055 + 15054 15056 15057 15058 15057 15059 15060 15061 + 15060 15062 15063 15064 15063 15065 15066 15067 + 15066 15068 15069 15070 15069 15071 15072 15073 + 15072 15074 15075 15076 15075 15077 15078 15079 + 15078 15080 15081 15082 15081 15083 15084 15085 + 15084 15086 15087 15088 15087 15089 15090 15091 + 15090 15092 15093 15094 15093 15095 15096 15097 + 15096 15098 15099 15100 15099 15101 15102 15103 + 15102 15104 15105 15106 15105 15107 15108 15109 + 15108 15110 15111 15112 15111 15113 15114 15115 + 15114 15116 15117 15118 15117 15119 15120 15121 + 15120 15122 15123 15124 15123 15125 15126 15127 + 15126 15128 15129 15130 15129 15131 15132 15133 + 15132 15134 15135 15136 15135 15137 15138 15139 + 15138 15140 15141 15142 15141 15143 15144 15145 + 15144 15146 15147 15148 15147 15149 15150 15151 + 15150 15152 15153 15154 15153 15155 15156 15157 + 15156 15158 15159 15160 15159 15161 15162 15163 + 15162 15164 15165 15166 15165 15167 15168 15169 + 15168 15170 15171 15172 15171 15173 15174 15175 + 15174 15176 15177 15178 15177 15179 15180 15181 + 15180 15182 15183 15184 15183 15185 15186 15187 + 15186 15188 15189 15190 15189 15191 15192 15193 + 15192 15194 15195 15196 15195 15197 15198 15199 + 15198 15200 15201 15202 15201 15203 15204 15205 + 15204 15206 15207 15208 15207 15209 15210 15211 + 15210 15212 15213 15214 15213 15215 15216 15217 + 15216 15218 15219 15220 15219 15221 15222 15223 + 15222 15224 15225 15226 15225 15227 15228 15229 + 15228 15230 15231 15232 15231 15233 15234 15235 + 15234 15236 15237 15238 15237 15239 15240 15241 + 15240 15242 15243 15244 15243 15245 15246 15247 + 15246 15248 15249 15250 15249 15251 15252 15253 + 15252 15254 15255 15256 15255 15257 15258 15259 + 15258 15260 15261 15262 15261 15263 15264 15265 + 15264 15266 15267 15268 15267 15269 15270 15271 + 15270 15272 15273 15274 15273 15275 15276 15277 + 15276 15278 15279 15280 15279 15281 15282 15283 + 15282 15284 15285 15286 15285 15287 15288 15289 + 15288 15290 15291 15292 15291 15293 15294 15295 + 15294 15296 15297 15298 15297 15299 15300 15301 + 15300 15302 15303 15304 15303 15305 15306 15307 + 15306 15308 15309 15310 15309 15311 15312 15313 + 15312 15314 15315 15316 15315 15317 15318 15319 + 15318 15320 15321 15322 15321 15323 15324 15325 + 15324 15326 15327 15328 15327 15329 15330 15331 + 15330 15332 15333 15334 15333 15335 15336 15337 + 15336 15338 15339 15340 15339 15341 15342 15343 + 15342 15344 15345 15346 15345 15347 15348 15349 + 15348 15350 15351 15352 15351 15353 15354 15355 + 15354 15356 15357 15358 15357 15359 15360 15361 + 15360 15362 15363 15364 15363 15365 15366 15367 + 15366 15368 15369 15370 15369 15371 15372 15373 + 15372 15374 15375 15376 15375 15377 15378 15379 + 15378 15380 15381 15382 15381 15383 15384 15385 + 15384 15386 15387 15388 15387 15389 15390 15391 + 15390 15392 15393 15394 15393 15395 15396 15397 + 15396 15398 15399 15400 15399 15401 15402 15403 + 15402 15404 15405 15406 15405 15407 15408 15409 + 15408 15410 15411 15412 15411 15413 15414 15415 + 15414 15416 15417 15418 15417 15419 15420 15421 + 15420 15422 15423 15424 15423 15425 15426 15427 + 15426 15428 15429 15430 15429 15431 15432 15433 + 15432 15434 15435 15436 15435 15437 15438 15439 + 15438 15440 15441 15442 15441 15443 15444 15445 + 15444 15446 15447 15448 15447 15449 15450 15451 + 15450 15452 15453 15454 15453 15455 15456 15457 + 15456 15458 15459 15460 15459 15461 15462 15463 + 15462 15464 15465 15466 15465 15467 15468 15469 + 15468 15470 15471 15472 15471 15473 15474 15475 + 15474 15476 15477 15478 15477 15479 15480 15481 + 15480 15482 15483 15484 15483 15485 15486 15487 + 15486 15488 15489 15490 15489 15491 15492 15493 + 15492 15494 15495 15496 15495 15497 15498 15499 + 15498 15500 15501 15502 15501 15503 15504 15505 + 15504 15506 15507 15508 15507 15509 15510 15511 + 15510 15512 15513 15514 15513 15515 15516 15517 + 15516 15518 15519 15520 15519 15521 15522 15523 + 15522 15524 15525 15526 15525 15527 15528 15529 + 15528 15530 15531 15532 15531 15533 15534 15535 + 15534 15536 15537 15538 15537 15539 15540 15541 + 15540 15542 15543 15544 15543 15545 15546 15547 + 15546 15548 15549 15550 15549 15551 15552 15553 + 15552 15554 15555 15556 15555 15557 15558 15559 + 15558 15560 15561 15562 15561 15563 15564 15565 + 15564 15566 15567 15568 15567 15569 15570 15571 + 15570 15572 15573 15574 15573 15575 15576 15577 + 15576 15578 15579 15580 15579 15581 15582 15583 + 15582 15584 15585 15586 15585 15587 15588 15589 + 15588 15590 15591 15592 15591 15593 15594 15595 + 15594 15596 15597 15598 15597 15599 15600 15601 + 15600 15602 15603 15604 15603 15605 15606 15607 + 15606 15608 15609 15610 15609 15611 15612 15613 + 15612 15614 15615 15616 15615 15617 15618 15619 + 15618 15620 15621 15622 15621 15623 15624 15625 + 15624 15626 15627 15628 15627 15629 15630 15631 + 15630 15632 15633 15634 15633 15635 15636 15637 + 15636 15638 15639 15640 15639 15641 15642 15643 + 15642 15644 15645 15646 15645 15647 15648 15649 + 15648 15650 15651 15652 15651 15653 15654 15655 + 15654 15656 15657 15658 15657 15659 15660 15661 + 15660 15662 15663 15664 15663 15665 15666 15667 + 15666 15668 15669 15670 15669 15671 15672 15673 + 15672 15674 15675 15676 15675 15677 15678 15679 + 15678 15680 15681 15682 15681 15683 15684 15685 + 15684 15686 15687 15688 15687 15689 15690 15691 + 15690 15692 15693 15694 15693 15695 15696 15697 + 15696 15698 15699 15700 15699 15701 15702 15703 + 15702 15704 15705 15706 15705 15707 15708 15709 + 15708 15710 15711 15712 15711 15713 15714 15715 + 15714 15716 15717 15718 15717 15719 15720 15721 + 15720 15722 15723 15724 15723 15725 15726 15727 + 15726 15728 15729 15730 15729 15731 15732 15733 + 15732 15734 15735 15736 15735 15737 15738 15739 + 15738 15740 15741 15742 15741 15743 15744 15745 + 15744 15746 15747 15748 15747 15749 15750 15751 + 15750 15752 15753 15754 15753 15755 15756 15757 + 15756 15758 15759 15760 15759 15761 15762 15763 + 15762 15764 15765 15766 15765 15767 15768 15769 + 15768 15770 15771 15772 15771 15773 15774 15775 + 15774 15776 15777 15778 15777 15779 15780 15781 + 15780 15782 15783 15784 15783 15785 15786 15787 + 15786 15788 15789 15790 15789 15791 15792 15793 + 15792 15794 15795 15796 15795 15797 15798 15799 + 15798 15800 15801 15802 15801 15803 15804 15805 + 15804 15806 15807 15808 15807 15809 15810 15811 + 15810 15812 15813 15814 15813 15815 15816 15817 + 15816 15818 15819 15820 15819 15821 15822 15823 + 15822 15824 15825 15826 15825 15827 15828 15829 + 15828 15830 15831 15832 15831 15833 15834 15835 + 15834 15836 15837 15838 15837 15839 15840 15841 + 15840 15842 15843 15844 15843 15845 15846 15847 + 15846 15848 15849 15850 15849 15851 15852 15853 + 15852 15854 15855 15856 15855 15857 15858 15859 + 15858 15860 15861 15862 15861 15863 15864 15865 + 15864 15866 15867 15868 15867 15869 15870 15871 + 15870 15872 15873 15874 15873 15875 15876 15877 + 15876 15878 15879 15880 15879 15881 15882 15883 + 15882 15884 15885 15886 15885 15887 15888 15889 + 15888 15890 15891 15892 15891 15893 15894 15895 + 15894 15896 15897 15898 15897 15899 15900 15901 + 15900 15902 15903 15904 15903 15905 15906 15907 + 15906 15908 15909 15910 15909 15911 15912 15913 + 15912 15914 15915 15916 15915 15917 15918 15919 + 15918 15920 15921 15922 15921 15923 15924 15925 + 15924 15926 15927 15928 15927 15929 15930 15931 + 15930 15932 15933 15934 15933 15935 15936 15937 + 15936 15938 15939 15940 15939 15941 15942 15943 + 15942 15944 15945 15946 15945 15947 15948 15949 + 15948 15950 15951 15952 15951 15953 15954 15955 + 15954 15956 15957 15958 15957 15959 15960 15961 + 15960 15962 15963 15964 15963 15965 15966 15967 + 15966 15968 15969 15970 15969 15971 15972 15973 + 15972 15974 15975 15976 15975 15977 15978 15979 + 15978 15980 15981 15982 15981 15983 15984 15985 + 15984 15986 15987 15988 15987 15989 15990 15991 + 15990 15992 15993 15994 15993 15995 15996 15997 + 15996 15998 15999 16000 15999 16001 16002 16003 + 16002 16004 16005 16006 16005 16007 16008 16009 + 16008 16010 16011 16012 16011 16013 16014 16015 + 16014 16016 16017 16018 16017 16019 16020 16021 + 16020 16022 16023 16024 16023 16025 16026 16027 + 16026 16028 16029 16030 16029 16031 16032 16033 + 16032 16034 16035 16036 16035 16037 16038 16039 + 16038 16040 16041 16042 16041 16043 16044 16045 + 16044 16046 16047 16048 16047 16049 16050 16051 + 16050 16052 16053 16054 16053 16055 16056 16057 + 16056 16058 16059 16060 16059 16061 16062 16063 + 16062 16064 16065 16066 16065 16067 16068 16069 + 16068 16070 16071 16072 16071 16073 16074 16075 + 16074 16076 16077 16078 16077 16079 16080 16081 + 16080 16082 16083 16084 16083 16085 16086 16087 + 16086 16088 16089 16090 16089 16091 16092 16093 + 16092 16094 16095 16096 16095 16097 16098 16099 + 16098 16100 16101 16102 16101 16103 16104 16105 + 16104 16106 16107 16108 16107 16109 16110 16111 + 16110 16112 16113 16114 16113 16115 16116 16117 + 16116 16118 16119 16120 16119 16121 16122 16123 + 16122 16124 16125 16126 16125 16127 16128 16129 + 16128 16130 16131 16132 16131 16133 16134 16135 + 16134 16136 16137 16138 16137 16139 16140 16141 + 16140 16142 16143 16144 16143 16145 16146 16147 + 16146 16148 16149 16150 16149 16151 16152 16153 + 16152 16154 16155 16156 16155 16157 16158 16159 + 16158 16160 16161 16162 16161 16163 16164 16165 + 16164 16166 16167 16168 16167 16169 16170 16171 + 16170 16172 16173 16174 16173 16175 16176 16177 + 16176 16178 16179 16180 16179 16181 16182 16183 + 16182 16184 16185 16186 16185 16187 16188 16189 + 16188 16190 16191 16192 16191 16193 16194 16195 + 16194 16196 16197 16198 16197 16199 16200 16201 + 16200 16202 16203 16204 16203 16205 16206 16207 + 16206 16208 16209 16210 16209 16211 16212 16213 + 16212 16214 16215 16216 16215 16217 16218 16219 + 16218 16220 16221 16222 16221 16223 16224 16225 + 16224 16226 16227 16228 16227 16229 16230 16231 + 16230 16232 16233 16234 16233 16235 16236 16237 + 16236 16238 16239 16240 16239 16241 16242 16243 + 16242 16244 16245 16246 16245 16247 16248 16249 + 16248 16250 16251 16252 16251 16253 16254 16255 + 16254 16256 16257 16258 16257 16259 16260 16261 + 16260 16262 16263 16264 16263 16265 16266 16267 + 16266 16268 16269 16270 16269 16271 16272 16273 + 16272 16274 16275 16276 16275 16277 16278 16279 + 16278 16280 16281 16282 16281 16283 16284 16285 + 16284 16286 16287 16288 16287 16289 16290 16291 + 16290 16292 16293 16294 16293 16295 16296 16297 + 16296 16298 16299 16300 16299 16301 16302 16303 + 16302 16304 16305 16306 16305 16307 16308 16309 + 16308 16310 16311 16312 16311 16313 16314 16315 + 16314 16316 16317 16318 16317 16319 16320 16321 + 16320 16322 16323 16324 16323 16325 16326 16327 + 16326 16328 16329 16330 16329 16331 16332 16333 + 16332 16334 16335 16336 16335 16337 16338 16339 + 16338 16340 16341 16342 16341 16343 16344 16345 + 16344 16346 16347 16348 16347 16349 16350 16351 + 16350 16352 16353 16354 16353 16355 16356 16357 + 16356 16358 16359 16360 16359 16361 16362 16363 + 16362 16364 16365 16366 16365 16367 16368 16369 + 16368 16370 16371 16372 16371 16373 16374 16375 + 16374 16376 16377 16378 16377 16379 16380 16381 + 16380 16382 16383 16384 16383 16385 16386 16387 + 16386 16388 16389 16390 16389 16391 16392 16393 + 16392 16394 16395 16396 16395 16397 16398 16399 + 16398 16400 16401 16402 16401 16403 16404 16405 + 16404 16406 16407 16408 16407 16409 16410 16411 + 16410 16412 16413 16414 16413 16415 16416 16417 + 16416 16418 16419 16420 16419 16421 16422 16423 + 16422 16424 16425 16426 16425 16427 16428 16429 + 16428 16430 16431 16432 16431 16433 16434 16435 + 16434 16436 16437 16438 16437 16439 16440 16441 + 16440 16442 16443 16444 16443 16445 16446 16447 + 16446 16448 16449 16450 16449 16451 16452 16453 + 16452 16454 16455 16456 16455 16457 16458 16459 + 16458 16460 16461 16462 16461 16463 16464 16465 + 16464 16466 16467 16468 16467 16469 16470 16471 + 16470 16472 16473 16474 16473 16475 16476 16477 + 16476 16478 16479 16480 16479 16481 16482 16483 + 16482 16484 16485 16486 16485 16487 16488 16489 + 16488 16490 16491 16492 16491 16493 16494 16495 + 16494 16496 16497 16498 16497 16499 16500 16501 + 16500 16502 16503 16504 16503 16505 16506 16507 + 16506 16508 16509 16510 16509 16511 16512 16513 + 16512 16514 16515 16516 16515 16517 16518 16519 + 16518 16520 16521 16522 16521 16523 16524 16525 + 16524 16526 16527 16528 16527 16529 16530 16531 + 16530 16532 16533 16534 16533 16535 16536 16537 + 16536 16538 16539 16540 16539 16541 16542 16543 + 16542 16544 16545 16546 16545 16547 16548 16549 + 16548 16550 16551 16552 16551 16553 16554 16555 + 16554 16556 16557 16558 16557 16559 16560 16561 + 16560 16562 16563 16564 16563 16565 16566 16567 + 16566 16568 16569 16570 16569 16571 16572 16573 + 16572 16574 16575 16576 16575 16577 16578 16579 + 16578 16580 16581 16582 16581 16583 16584 16585 + 16584 16586 16587 16588 16587 16589 16590 16591 + 16590 16592 16593 16594 16593 16595 16596 16597 + 16596 16598 16599 16600 16599 16601 16602 16603 + 16602 16604 16605 16606 16605 16607 16608 16609 + 16608 16610 16611 16612 16611 16613 16614 16615 + 16614 16616 16617 16618 16617 16619 16620 16621 + 16620 16622 16623 16624 16623 16625 16626 16627 + 16626 16628 16629 16630 16629 16631 16632 16633 + 16632 16634 16635 16636 16635 16637 16638 16639 + 16638 16640 16641 16642 16641 16643 16644 16645 + 16644 16646 16647 16648 16647 16649 16650 16651 + 16650 16652 16653 16654 16653 16655 16656 16657 + 16656 16658 16659 16660 16659 16661 16662 16663 + 16662 16664 16665 16666 16665 16667 16668 16669 + 16668 16670 16671 16672 16671 16673 16674 16675 + 16674 16676 16677 16678 16677 16679 16680 16681 + 16680 16682 16683 16684 16683 16685 16686 16687 + 16686 16688 16689 16690 16689 16691 16692 16693 + 16692 16694 16695 16696 16695 16697 16698 16699 + 16698 16700 16701 16702 16701 16703 16704 16705 + 16704 16706 16707 16708 16707 16709 16710 16711 + 16710 16712 16713 16714 16713 16715 16716 16717 + 16716 16718 16719 16720 16719 16721 16722 16723 + 16722 16724 16725 16726 16725 16727 16728 16729 + 16728 16730 16731 16732 16731 16733 16734 16735 + 16734 16736 16737 16738 16737 16739 16740 16741 + 16740 16742 16743 16744 16743 16745 16746 16747 + 16746 16748 16749 16750 16749 16751 16752 16753 + 16752 16754 16755 16756 16755 16757 16758 16759 + 16758 16760 16761 16762 16761 16763 16764 16765 + 16764 16766 16767 16768 16767 16769 16770 16771 + 16770 16772 16773 16774 16773 16775 16776 16777 + 16776 16778 16779 16780 16779 16781 16782 16783 + 16782 16784 16785 16786 16785 16787 16788 16789 + 16788 16790 16791 16792 16791 16793 16794 16795 + 16794 16796 16797 16798 16797 16799 16800 16801 + 16800 16802 16803 16804 16803 16805 16806 16807 + 16806 16808 16809 16810 16809 16811 16812 16813 + 16812 16814 16815 16816 16815 16817 16818 16819 + 16818 16820 16821 16822 16821 16823 16824 16825 + 16824 16826 16827 16828 16827 16829 16830 16831 + 16830 16832 16833 16834 16833 16835 16836 16837 + 16836 16838 16839 16840 16839 16841 16842 16843 + 16842 16844 16845 16846 16845 16847 16848 16849 + 16848 16850 16851 16852 16851 16853 16854 16855 + 16854 16856 16857 16858 16857 16859 16860 16861 + 16860 16862 16863 16864 16863 16865 16866 16867 + 16866 16868 16869 16870 16869 16871 16872 16873 + 16872 16874 16875 16876 16875 16877 16878 16879 + 16878 16880 16881 16882 16881 16883 16884 16885 + 16884 16886 16887 16888 16887 16889 16890 16891 + 16890 16892 16893 16894 16893 16895 16896 16897 + 16896 16898 16899 16900 16899 16901 16902 16903 + 16902 16904 16905 16906 16905 16907 16908 16909 + 16908 16910 16911 16912 16911 16913 16914 16915 + 16914 16916 16917 16918 16917 16919 16920 16921 + 16920 16922 16923 16924 16923 16925 16926 16927 + 16926 16928 16929 16930 16929 16931 16932 16933 + 16932 16934 16935 16936 16935 16937 16938 16939 + 16938 16940 16941 16942 16941 16943 16944 16945 + 16944 16946 16947 16948 16947 16949 16950 16951 + 16950 16952 16953 16954 16953 16955 16956 16957 + 16956 16958 16959 16960 16959 16961 16962 16963 + 16962 16964 16965 16966 16965 16967 16968 16969 + 16968 16970 16971 16972 16971 16973 16974 16975 + 16974 16976 16977 16978 16977 16979 16980 16981 + 16980 16982 16983 16984 16983 16985 16986 16987 + 16986 16988 16989 16990 16989 16991 16992 16993 + 16992 16994 16995 16996 16995 16997 16998 16999 + 16998 17000 17001 17002 17001 17003 17004 17005 + 17004 17006 17007 17008 17007 17009 17010 17011 + 17010 17012 17013 17014 17013 17015 17016 17017 + 17016 17018 17019 17020 17019 17021 17022 17023 + 17022 17024 17025 17026 17025 17027 17028 17029 + 17028 17030 17031 17032 17031 17033 17034 17035 + 17034 17036 17037 17038 17037 17039 17040 17041 + 17040 17042 17043 17044 17043 17045 17046 17047 + 17046 17048 17049 17050 17049 17051 17052 17053 + 17052 17054 17055 17056 17055 17057 17058 17059 + 17058 17060 17061 17062 17061 17063 17064 17065 + 17064 17066 17067 17068 17067 17069 17070 17071 + 17070 17072 17073 17074 17073 17075 17076 17077 + 17076 17078 17079 17080 17079 17081 17082 17083 + 17082 17084 17085 17086 17085 17087 17088 17089 + 17088 17090 17091 17092 17091 17093 17094 17095 + 17094 17096 17097 17098 17097 17099 17100 17101 + 17100 17102 17103 17104 17103 17105 17106 17107 + 17106 17108 17109 17110 17109 17111 17112 17113 + 17112 17114 17115 17116 17115 17117 17118 17119 + 17118 17120 17121 17122 17121 17123 17124 17125 + 17124 17126 17127 17128 17127 17129 17130 17131 + 17130 17132 17133 17134 17133 17135 17136 17137 + 17136 17138 17139 17140 17139 17141 17142 17143 + 17142 17144 17145 17146 17145 17147 17148 17149 + 17148 17150 17151 17152 17151 17153 17154 17155 + 17154 17156 17157 17158 17157 17159 17160 17161 + 17160 17162 17163 17164 17163 17165 17166 17167 + 17166 17168 17169 17170 17169 17171 17172 17173 + 17172 17174 17175 17176 17175 17177 17178 17179 + 17178 17180 17181 17182 17181 17183 17184 17185 + 17184 17186 17187 17188 17187 17189 17190 17191 + 17190 17192 17193 17194 17193 17195 17196 17197 + 17196 17198 17199 17200 17199 17201 17202 17203 + 17202 17204 17205 17206 17205 17207 17208 17209 + 17208 17210 17211 17212 17211 17213 17214 17215 + 17214 17216 17217 17218 17217 17219 17220 17221 + 17220 17222 17223 17224 17223 17225 17226 17227 + 17226 17228 17229 17230 17229 17231 17232 17233 + 17232 17234 17235 17236 17235 17237 17238 17239 + 17238 17240 17241 17242 17241 17243 17244 17245 + 17244 17246 17247 17248 17247 17249 17250 17251 + 17250 17252 17253 17254 17253 17255 17256 17257 + 17256 17258 17259 17260 17259 17261 17262 17263 + 17262 17264 17265 17266 17265 17267 17268 17269 + 17268 17270 17271 17272 17271 17273 17274 17275 + 17274 17276 17277 17278 17277 17279 17280 17281 + 17280 17282 17283 17284 17283 17285 17286 17287 + 17286 17288 17289 17290 17289 17291 17292 17293 + 17292 17294 17295 17296 17295 17297 17298 17299 + 17298 17300 17301 17302 17301 17303 17304 17305 + 17304 17306 17307 17308 17307 17309 17310 17311 + 17310 17312 17313 17314 17313 17315 17316 17317 + 17316 17318 17319 17320 17319 17321 17322 17323 + 17322 17324 17325 17326 17325 17327 17328 17329 + 17328 17330 17331 17332 17331 17333 17334 17335 + 17334 17336 17337 17338 17337 17339 17340 17341 + 17340 17342 17343 17344 17343 17345 17346 17347 + 17346 17348 17349 17350 17349 17351 17352 17353 + 17352 17354 17355 17356 17355 17357 17358 17359 + 17358 17360 17361 17362 17361 17363 17364 17365 + 17364 17366 17367 17368 17367 17369 17370 17371 + 17370 17372 17373 17374 17373 17375 17376 17377 + 17376 17378 17379 17380 17379 17381 17382 17383 + 17382 17384 17385 17386 17385 17387 17388 17389 + 17388 17390 17391 17392 17391 17393 17394 17395 + 17394 17396 17397 17398 17397 17399 17400 17401 + 17400 17402 17403 17404 17403 17405 17406 17407 + 17406 17408 17409 17410 17409 17411 17412 17413 + 17412 17414 17415 17416 17415 17417 17418 17419 + 17418 17420 17421 17422 17421 17423 17424 17425 + 17424 17426 17427 17428 17427 17429 17430 17431 + 17430 17432 17433 17434 17433 17435 17436 17437 + 17436 17438 17439 17440 17439 17441 17442 17443 + 17442 17444 17445 17446 17445 17447 17448 17449 + 17448 17450 17451 17452 17451 17453 17454 17455 + 17454 17456 17457 17458 17457 17459 17460 17461 + 17460 17462 17463 17464 17463 17465 17466 17467 + 17466 17468 17469 17470 17469 17471 17472 17473 + 17472 17474 17475 17476 17475 17477 17478 17479 + 17478 17480 17481 17482 17481 17483 17484 17485 + 17484 17486 17487 17488 17487 17489 17490 17491 + 17490 17492 17493 17494 17493 17495 17496 17497 + 17496 17498 17499 17500 17499 17501 17502 17503 + 17502 17504 17505 17506 17505 17507 17508 17509 + 17508 17510 17511 17512 17511 17513 17514 17515 + 17514 17516 17517 17518 17517 17519 17520 17521 + 17520 17522 17523 17524 17523 17525 17526 17527 + 17526 17528 17529 17530 17529 17531 17532 17533 + 17532 17534 17535 17536 17535 17537 17538 17539 + 17538 17540 17541 17542 17541 17543 17544 17545 + 17544 17546 17547 17548 17547 17549 17550 17551 + 17550 17552 17553 17554 17553 17555 17556 17557 + 17556 17558 17559 17560 17559 17561 17562 17563 + 17562 17564 17565 17566 17565 17567 17568 17569 + 17568 17570 17571 17572 17571 17573 17574 17575 + 17574 17576 17577 17578 17577 17579 17580 17581 + 17580 17582 17583 17584 17583 17585 17586 17587 + 17586 17588 17589 17590 17589 17591 17592 17593 + 17592 17594 17595 17596 17595 17597 17598 17599 + 17598 17600 17601 17602 17601 17603 17604 17605 + 17604 17606 17607 17608 17607 17609 17610 17611 + 17610 17612 17613 17614 17613 17615 17616 17617 + 17616 17618 17619 17620 17619 17621 17622 17623 + 17622 17624 17625 17626 17625 17627 17628 17629 + 17628 17630 17631 17632 17631 17633 17634 17635 + 17634 17636 17637 17638 17637 17639 17640 17641 + 17640 17642 17643 17644 17643 17645 17646 17647 + 17646 17648 17649 17650 17649 17651 17652 17653 + 17652 17654 17655 17656 17655 17657 17658 17659 + 17658 17660 17661 17662 17661 17663 17664 17665 + 17664 17666 17667 17668 17667 17669 17670 17671 + 17670 17672 17673 17674 17673 17675 17676 17677 + 17676 17678 17679 17680 17679 17681 17682 17683 + 17682 17684 17685 17686 17685 17687 17688 17689 + 17688 17690 17691 17692 17691 17693 17694 17695 + 17694 17696 17697 17698 17697 17699 17700 17701 + 17700 17702 17703 17704 17703 17705 17706 17707 + 17706 17708 17709 17710 17709 17711 17712 17713 + 17712 17714 17715 17716 17715 17717 17718 17719 + 17718 17720 17721 17722 17721 17723 17724 17725 + 17724 17726 17727 17728 17727 17729 17730 17731 + 17730 17732 17733 17734 17733 17735 17736 17737 + 17736 17738 17739 17740 17739 17741 17742 17743 + 17742 17744 17745 17746 17745 17747 17748 17749 + 17748 17750 17751 17752 17751 17753 17754 17755 + 17754 17756 17757 17758 17757 17759 17760 17761 + 17760 17762 17763 17764 17763 17765 17766 17767 + 17766 17768 17769 17770 17769 17771 17772 17773 + 17772 17774 17775 17776 17775 17777 17778 17779 + 17778 17780 17781 17782 17781 17783 17784 17785 + 17784 17786 17787 17788 17787 17789 17790 17791 + 17790 17792 17793 17794 17793 17795 17796 17797 + 17796 17798 17799 17800 17799 17801 17802 17803 + 17802 17804 17805 17806 17805 17807 17808 17809 + 17808 17810 17811 17812 17811 17813 17814 17815 + 17814 17816 17817 17818 17817 17819 17820 17821 + 17820 17822 17823 17824 17823 17825 17826 17827 + 17826 17828 17829 17830 17829 17831 17832 17833 + 17832 17834 17835 17836 17835 17837 17838 17839 + 17838 17840 17841 17842 17841 17843 17844 17845 + 17844 17846 17847 17848 17847 17849 17850 17851 + 17850 17852 17853 17854 17853 17855 17856 17857 + 17856 17858 17859 17860 17859 17861 17862 17863 + 17862 17864 17865 17866 17865 17867 17868 17869 + 17868 17870 17871 17872 17871 17873 17874 17875 + 17874 17876 17877 17878 17877 17879 17880 17881 + 17880 17882 17883 17884 17883 17885 17886 17887 + 17886 17888 17889 17890 17889 17891 17892 17893 + 17892 17894 17895 17896 17895 17897 17898 17899 + 17898 17900 17901 17902 17901 17903 17904 17905 + 17904 17906 17907 17908 17907 17909 17910 17911 + 17910 17912 17913 17914 17913 17915 17916 17917 + 17916 17918 17919 17920 17919 17921 17922 17923 + 17922 17924 17925 17926 17925 17927 17928 17929 + 17928 17930 17931 17932 17931 17933 17934 17935 + 17934 17936 17937 17938 17937 17939 17940 17941 + 17940 17942 17943 17944 17943 17945 17946 17947 + 17946 17948 17949 17950 17949 17951 17952 17953 + 17952 17954 17955 17956 17955 17957 17958 17959 + 17958 17960 17961 17962 17961 17963 17964 17965 + 17964 17966 17967 17968 17967 17969 17970 17971 + 17970 17972 17973 17974 17973 17975 17976 17977 + 17976 17978 17979 17980 17979 17981 17982 17983 + 17982 17984 17985 17986 17985 17987 17988 17989 + 17988 17990 17991 17992 17991 17993 17994 17995 + 17994 17996 17997 17998 17997 17999 18000 18001 + 18000 18002 18003 18004 18003 18005 18006 18007 + 18006 18008 18009 18010 18009 18011 18012 18013 + 18012 18014 18015 18016 18015 18017 18018 18019 + 18018 18020 18021 18022 18021 18023 18024 18025 + 18024 18026 18027 18028 18027 18029 18030 18031 + 18030 18032 18033 18034 18033 18035 18036 18037 + 18036 18038 18039 18040 18039 18041 18042 18043 + 18042 18044 18045 18046 18045 18047 18048 18049 + 18048 18050 18051 18052 18051 18053 18054 18055 + 18054 18056 18057 18058 18057 18059 18060 18061 + 18060 18062 18063 18064 18063 18065 18066 18067 + 18066 18068 18069 18070 18069 18071 18072 18073 + 18072 18074 18075 18076 18075 18077 18078 18079 + 18078 18080 18081 18082 18081 18083 18084 18085 + 18084 18086 18087 18088 18087 18089 18090 18091 + 18090 18092 18093 18094 18093 18095 18096 18097 + 18096 18098 18099 18100 18099 18101 18102 18103 + 18102 18104 18105 18106 18105 18107 18108 18109 + 18108 18110 18111 18112 18111 18113 18114 18115 + 18114 18116 18117 18118 18117 18119 18120 18121 + 18120 18122 18123 18124 18123 18125 18126 18127 + 18126 18128 18129 18130 18129 18131 18132 18133 + 18132 18134 18135 18136 18135 18137 18138 18139 + 18138 18140 18141 18142 18141 18143 18144 18145 + 18144 18146 18147 18148 18147 18149 18150 18151 + 18150 18152 18153 18154 18153 18155 18156 18157 + 18156 18158 18159 18160 18159 18161 18162 18163 + 18162 18164 18165 18166 18165 18167 18168 18169 + 18168 18170 18171 18172 18171 18173 18174 18175 + 18174 18176 18177 18178 18177 18179 18180 18181 + 18180 18182 18183 18184 18183 18185 18186 18187 + 18186 18188 18189 18190 18189 18191 18192 18193 + 18192 18194 18195 18196 18195 18197 18198 18199 + 18198 18200 18201 18202 18201 18203 18204 18205 + 18204 18206 18207 18208 18207 18209 18210 18211 + 18210 18212 18213 18214 18213 18215 18216 18217 + 18216 18218 18219 18220 18219 18221 18222 18223 + 18222 18224 18225 18226 18225 18227 18228 18229 + 18228 18230 18231 18232 18231 18233 18234 18235 + 18234 18236 18237 18238 18237 18239 18240 18241 + 18240 18242 18243 18244 18243 18245 18246 18247 + 18246 18248 18249 18250 18249 18251 18252 18253 + 18252 18254 18255 18256 18255 18257 18258 18259 + 18258 18260 18261 18262 18261 18263 18264 18265 + 18264 18266 18267 18268 18267 18269 18270 18271 + 18270 18272 18273 18274 18273 18275 18276 18277 + 18276 18278 18279 18280 18279 18281 18282 18283 + 18282 18284 18285 18286 18285 18287 18288 18289 + 18288 18290 18291 18292 18291 18293 18294 18295 + 18294 18296 18297 18298 18297 18299 18300 18301 + 18300 18302 18303 18304 18303 18305 18306 18307 + 18306 18308 18309 18310 18309 18311 18312 18313 + 18312 18314 18315 18316 18315 18317 18318 18319 + 18318 18320 18321 18322 18321 18323 18324 18325 + 18324 18326 18327 18328 18327 18329 18330 18331 + 18330 18332 18333 18334 18333 18335 18336 18337 + 18336 18338 18339 18340 18339 18341 18342 18343 + 18342 18344 18345 18346 18345 18347 18348 18349 + 18348 18350 18351 18352 18351 18353 18354 18355 + 18354 18356 18357 18358 18357 18359 18360 18361 + 18360 18362 18363 18364 18363 18365 18366 18367 + 18366 18368 18369 18370 18369 18371 18372 18373 + 18372 18374 18375 18376 18375 18377 18378 18379 + 18378 18380 18381 18382 18381 18383 18384 18385 + 18384 18386 18387 18388 18387 18389 18390 18391 + 18390 18392 18393 18394 18393 18395 18396 18397 + 18396 18398 18399 18400 18399 18401 18402 18403 + 18402 18404 18405 18406 18405 18407 18408 18409 + 18408 18410 18411 18412 18411 18413 18414 18415 + 18414 18416 18417 18418 18417 18419 18420 18421 + 18420 18422 18423 18424 18423 18425 18426 18427 + 18426 18428 18429 18430 18429 18431 18432 18433 + 18432 18434 18435 18436 18435 18437 18438 18439 + 18438 18440 18441 18442 18441 18443 18444 18445 + 18444 18446 18447 18448 18447 18449 18450 18451 + 18450 18452 18453 18454 18453 18455 18456 18457 + 18456 18458 18459 18460 18459 18461 18462 18463 + 18462 18464 18465 18466 18465 18467 18468 18469 + 18468 18470 18471 18472 18471 18473 18474 18475 + 18474 18476 18477 18478 18477 18479 18480 18481 + 18480 18482 18483 18484 18483 18485 18486 18487 + 18486 18488 18489 18490 18489 18491 18492 18493 + 18492 18494 18495 18496 18495 18497 18498 18499 + 18498 18500 18501 18502 18501 18503 18504 18505 + 18504 18506 18507 18508 18507 18509 18510 18511 + 18510 18512 18513 18514 18513 18515 18516 18517 + 18516 18518 18519 18520 18519 18521 18522 18523 + 18522 18524 18525 18526 18525 18527 18528 18529 + 18528 18530 18531 18532 18531 18533 18534 18535 + 18534 18536 18537 18538 18537 18539 18540 18541 + 18540 18542 18543 18544 18543 18545 18546 18547 + 18546 18548 18549 18550 18549 18551 18552 18553 + 18552 18554 18555 18556 18555 18557 18558 18559 + 18558 18560 18561 18562 18561 18563 18564 18565 + 18564 18566 18567 18568 18567 18569 18570 18571 + 18570 18572 18573 18574 18573 18575 18576 18577 + 18576 18578 18579 18580 18579 18581 18582 18583 + 18582 18584 18585 18586 18585 18587 18588 18589 + 18588 18590 18591 18592 18591 18593 18594 18595 + 18594 18596 18597 18598 18597 18599 18600 18601 + 18600 18602 18603 18604 18603 18605 18606 18607 + 18606 18608 18609 18610 18609 18611 18612 18613 + 18612 18614 18615 18616 18615 18617 18618 18619 + 18618 18620 18621 18622 18621 18623 18624 18625 + 18624 18626 18627 18628 18627 18629 18630 18631 + 18630 18632 18633 18634 18633 18635 18636 18637 + 18636 18638 18639 18640 18639 18641 18642 18643 + 18642 18644 18645 18646 18645 18647 18648 18649 + 18648 18650 18651 18652 18651 18653 18654 18655 + 18654 18656 18657 18658 18657 18659 18660 18661 + 18660 18662 18663 18664 18663 18665 18666 18667 + 18666 18668 18669 18670 18669 18671 18672 18673 + 18672 18674 18675 18676 18675 18677 18678 18679 + 18678 18680 18681 18682 18681 18683 18684 18685 + 18684 18686 18687 18688 18687 18689 18690 18691 + 18690 18692 18693 18694 18693 18695 18696 18697 + 18696 18698 18699 18700 18699 18701 18702 18703 + 18702 18704 18705 18706 18705 18707 18708 18709 + 18708 18710 18711 18712 18711 18713 18714 18715 + 18714 18716 18717 18718 18717 18719 18720 18721 + 18720 18722 18723 18724 18723 18725 18726 18727 + 18726 18728 18729 18730 18729 18731 18732 18733 + 18732 18734 18735 18736 18735 18737 18738 18739 + 18738 18740 18741 18742 18741 18743 18744 18745 + 18744 18746 18747 18748 18747 18749 18750 18751 + 18750 18752 18753 18754 18753 18755 18756 18757 + 18756 18758 18759 18760 18759 18761 18762 18763 + 18762 18764 18765 18766 18765 18767 18768 18769 + 18768 18770 18771 18772 18771 18773 18774 18775 + 18774 18776 18777 18778 18777 18779 18780 18781 + 18780 18782 18783 18784 18783 18785 18786 18787 + 18786 18788 18789 18790 18789 18791 18792 18793 + 18792 18794 18795 18796 18795 18797 18798 18799 + 18798 18800 18801 18802 18801 18803 18804 18805 + 18804 18806 18807 18808 18807 18809 18810 18811 + 18810 18812 18813 18814 18813 18815 18816 18817 + 18816 18818 18819 18820 18819 18821 18822 18823 + 18822 18824 18825 18826 18825 18827 18828 18829 + 18828 18830 18831 18832 18831 18833 18834 18835 + 18834 18836 18837 18838 18837 18839 18840 18841 + 18840 18842 18843 18844 18843 18845 18846 18847 + 18846 18848 18849 18850 18849 18851 18852 18853 + 18852 18854 18855 18856 18855 18857 18858 18859 + 18858 18860 18861 18862 18861 18863 18864 18865 + 18864 18866 18867 18868 18867 18869 18870 18871 + 18870 18872 18873 18874 18873 18875 18876 18877 + 18876 18878 18879 18880 18879 18881 18882 18883 + 18882 18884 18885 18886 18885 18887 18888 18889 + 18888 18890 18891 18892 18891 18893 18894 18895 + 18894 18896 18897 18898 18897 18899 18900 18901 + 18900 18902 18903 18904 18903 18905 18906 18907 + 18906 18908 18909 18910 18909 18911 18912 18913 + 18912 18914 18915 18916 18915 18917 18918 18919 + 18918 18920 18921 18922 18921 18923 18924 18925 + 18924 18926 18927 18928 18927 18929 18930 18931 + 18930 18932 18933 18934 18933 18935 18936 18937 + 18936 18938 18939 18940 18939 18941 18942 18943 + 18942 18944 18945 18946 18945 18947 18948 18949 + 18948 18950 18951 18952 18951 18953 18954 18955 + 18954 18956 18957 18958 18957 18959 18960 18961 + 18960 18962 18963 18964 18963 18965 18966 18967 + 18966 18968 18969 18970 18969 18971 18972 18973 + 18972 18974 18975 18976 18975 18977 18978 18979 + 18978 18980 18981 18982 18981 18983 18984 18985 + 18984 18986 18987 18988 18987 18989 18990 18991 + 18990 18992 18993 18994 18993 18995 18996 18997 + 18996 18998 18999 19000 18999 19001 19002 19003 + 19002 19004 19005 19006 19005 19007 19008 19009 + 19008 19010 19011 19012 19011 19013 19014 19015 + 19014 19016 19017 19018 19017 19019 19020 19021 + 19020 19022 19023 19024 19023 19025 19026 19027 + 19026 19028 19029 19030 19029 19031 19032 19033 + 19032 19034 19035 19036 19035 19037 19038 19039 + 19038 19040 19041 19042 19041 19043 19044 19045 + 19044 19046 19047 19048 19047 19049 19050 19051 + 19050 19052 19053 19054 19053 19055 19056 19057 + 19056 19058 19059 19060 19059 19061 19062 19063 + 19062 19064 19065 19066 19065 19067 19068 19069 + 19068 19070 19071 19072 19071 19073 19074 19075 + 19074 19076 19077 19078 19077 19079 19080 19081 + 19080 19082 19083 19084 19083 19085 19086 19087 + 19086 19088 19089 19090 19089 19091 19092 19093 + 19092 19094 19095 19096 19095 19097 19098 19099 + 19098 19100 19101 19102 19101 19103 19104 19105 + 19104 19106 19107 19108 19107 19109 19110 19111 + 19110 19112 19113 19114 19113 19115 19116 19117 + 19116 19118 19119 19120 19119 19121 19122 19123 + 19122 19124 19125 19126 19125 19127 19128 19129 + 19128 19130 19131 19132 19131 19133 19134 19135 + 19134 19136 19137 19138 19137 19139 19140 19141 + 19140 19142 19143 19144 19143 19145 19146 19147 + 19146 19148 19149 19150 19149 19151 19152 19153 + 19152 19154 19155 19156 19155 19157 19158 19159 + 19158 19160 19161 19162 19161 19163 19164 19165 + 19164 19166 19167 19168 19167 19169 19170 19171 + 19170 19172 19173 19174 19173 19175 19176 19177 + 19176 19178 19179 19180 19179 19181 19182 19183 + 19182 19184 19185 19186 19185 19187 19188 19189 + 19188 19190 19191 19192 19191 19193 19194 19195 + 19194 19196 19197 19198 19197 19199 19200 19201 + 19200 19202 19203 19204 19203 19205 19206 19207 + 19206 19208 19209 19210 19209 19211 19212 19213 + 19212 19214 19215 19216 19215 19217 19218 19219 + 19218 19220 19221 19222 19221 19223 19224 19225 + 19224 19226 19227 19228 19227 19229 19230 19231 + 19230 19232 19233 19234 19233 19235 19236 19237 + 19236 19238 19239 19240 19239 19241 19242 19243 + 19242 19244 19245 19246 19245 19247 19248 19249 + 19248 19250 19251 19252 19251 19253 19254 19255 + 19254 19256 19257 19258 19257 19259 19260 19261 + 19260 19262 19263 19264 19263 19265 19266 19267 + 19266 19268 19269 19270 19269 19271 19272 19273 + 19272 19274 19275 19276 19275 19277 19278 19279 + 19278 19280 19281 19282 19281 19283 19284 19285 + 19284 19286 19287 19288 19287 19289 19290 19291 + 19290 19292 19293 19294 19293 19295 19296 19297 + 19296 19298 19299 19300 19299 19301 19302 19303 + 19302 19304 19305 19306 19305 19307 19308 19309 + 19308 19310 19311 19312 19311 19313 19314 19315 + 19314 19316 19317 19318 19317 19319 19320 19321 + 19320 19322 19323 19324 19323 19325 19326 19327 + 19326 19328 19329 19330 19329 19331 19332 19333 + 19332 19334 19335 19336 19335 19337 19338 19339 + 19338 19340 19341 19342 19341 19343 19344 19345 + 19344 19346 19347 19348 19347 19349 19350 19351 + 19350 19352 19353 19354 19353 19355 19356 19357 + 19356 19358 19359 19360 19359 19361 19362 19363 + 19362 19364 19365 19366 19365 19367 19368 19369 + 19368 19370 19371 19372 19371 19373 19374 19375 + 19374 19376 19377 19378 19377 19379 19380 19381 + 19380 19382 19383 19384 19383 19385 19386 19387 + 19386 19388 19389 19390 19389 19391 19392 19393 + 19392 19394 19395 19396 19395 19397 19398 19399 + 19398 19400 19401 19402 19401 19403 19404 19405 + 19404 19406 19407 19408 19407 19409 19410 19411 + 19410 19412 19413 19414 19413 19415 19416 19417 + 19416 19418 19419 19420 19419 19421 19422 19423 + 19422 19424 19425 19426 19425 19427 19428 19429 + 19428 19430 19431 19432 19431 19433 19434 19435 + 19434 19436 19437 19438 19437 19439 19440 19441 + 19440 19442 19443 19444 19443 19445 19446 19447 + 19446 19448 19449 19450 19449 19451 19452 19453 + 19452 19454 19455 19456 19455 19457 19458 19459 + 19458 19460 19461 19462 19461 19463 19464 19465 + 19464 19466 19467 19468 19467 19469 19470 19471 + 19470 19472 19473 19474 19473 19475 19476 19477 + 19476 19478 19479 19480 19479 19481 19482 19483 + 19482 19484 19485 19486 19485 19487 19488 19489 + 19488 19490 19491 19492 19491 19493 19494 19495 + 19494 19496 19497 19498 19497 19499 19500 19501 + 19500 19502 19503 19504 19503 19505 19506 19507 + 19506 19508 19509 19510 19509 19511 19512 19513 + 19512 19514 19515 19516 19515 19517 19518 19519 + 19518 19520 19521 19522 19521 19523 19524 19525 + 19524 19526 19527 19528 19527 19529 19530 19531 + 19530 19532 19533 19534 19533 19535 19536 19537 + 19536 19538 19539 19540 19539 19541 19542 19543 + 19542 19544 19545 19546 19545 19547 19548 19549 + 19548 19550 19551 19552 19551 19553 19554 19555 + 19554 19556 19557 19558 19557 19559 19560 19561 + 19560 19562 19563 19564 19563 19565 19566 19567 + 19566 19568 19569 19570 19569 19571 19572 19573 + 19572 19574 19575 19576 19575 19577 19578 19579 + 19578 19580 19581 19582 19581 19583 19584 19585 + 19584 19586 19587 19588 19587 19589 19590 19591 + 19590 19592 19593 19594 19593 19595 19596 19597 + 19596 19598 19599 19600 19599 19601 19602 19603 + 19602 19604 19605 19606 19605 19607 19608 19609 + 19608 19610 19611 19612 19611 19613 19614 19615 + 19614 19616 19617 19618 19617 19619 19620 19621 + 19620 19622 19623 19624 19623 19625 19626 19627 + 19626 19628 19629 19630 19629 19631 19632 19633 + 19632 19634 19635 19636 19635 19637 19638 19639 + 19638 19640 19641 19642 19641 19643 19644 19645 + 19644 19646 19647 19648 19647 19649 19650 19651 + 19650 19652 19653 19654 19653 19655 19656 19657 + 19656 19658 19659 19660 19659 19661 19662 19663 + 19662 19664 19665 19666 19665 19667 19668 19669 + 19668 19670 19671 19672 19671 19673 19674 19675 + 19674 19676 19677 19678 19677 19679 19680 19681 + 19680 19682 19683 19684 19683 19685 19686 19687 + 19686 19688 19689 19690 19689 19691 19692 19693 + 19692 19694 19695 19696 19695 19697 19698 19699 + 19698 19700 19701 19702 19701 19703 19704 19705 + 19704 19706 19707 19708 19707 19709 19710 19711 + 19710 19712 19713 19714 19713 19715 19716 19717 + 19716 19718 19719 19720 19719 19721 19722 19723 + 19722 19724 19725 19726 19725 19727 19728 19729 + 19728 19730 19731 19732 19731 19733 19734 19735 + 19734 19736 19737 19738 19737 19739 19740 19741 + 19740 19742 19743 19744 19743 19745 19746 19747 + 19746 19748 19749 19750 19749 19751 19752 19753 + 19752 19754 19755 19756 19755 19757 19758 19759 + 19758 19760 19761 19762 19761 19763 19764 19765 + 19764 19766 19767 19768 19767 19769 19770 19771 + 19770 19772 19773 19774 19773 19775 19776 19777 + 19776 19778 19779 19780 19779 19781 19782 19783 + 19782 19784 19785 19786 19785 19787 19788 19789 + 19788 19790 19791 19792 19791 19793 19794 19795 + 19794 19796 19797 19798 19797 19799 19800 19801 + 19800 19802 19803 19804 19803 19805 19806 19807 + 19806 19808 19809 19810 19809 19811 19812 19813 + 19812 19814 19815 19816 19815 19817 19818 19819 + 19818 19820 19821 19822 19821 19823 19824 19825 + 19824 19826 19827 19828 19827 19829 19830 19831 + 19830 19832 19833 19834 19833 19835 19836 19837 + 19836 19838 19839 19840 19839 19841 19842 19843 + 19842 19844 19845 19846 19845 19847 19848 19849 + 19848 19850 19851 19852 19851 19853 19854 19855 + 19854 19856 19857 19858 19857 19859 19860 19861 + 19860 19862 19863 19864 19863 19865 19866 19867 + 19866 19868 19869 19870 19869 19871 19872 19873 + 19872 19874 19875 19876 19875 19877 19878 19879 + 19878 19880 19881 19882 19881 19883 19884 19885 + 19884 19886 19887 19888 19887 19889 19890 19891 + 19890 19892 19893 19894 19893 19895 19896 19897 + 19896 19898 19899 19900 19899 19901 19902 19903 + 19902 19904 19905 19906 19905 19907 19908 19909 + 19908 19910 19911 19912 19911 19913 19914 19915 + 19914 19916 19917 19918 19917 19919 19920 19921 + 19920 19922 19923 19924 19923 19925 19926 19927 + 19926 19928 19929 19930 19929 19931 19932 19933 + 19932 19934 19935 19936 19935 19937 19938 19939 + 19938 19940 19941 19942 19941 19943 19944 19945 + 19944 19946 19947 19948 19947 19949 19950 19951 + 19950 19952 19953 19954 19953 19955 19956 19957 + 19956 19958 19959 19960 19959 19961 19962 19963 + 19962 19964 19965 19966 19965 19967 19968 19969 + 19968 19970 19971 19972 19971 19973 19974 19975 + 19974 19976 19977 19978 19977 19979 19980 19981 + 19980 19982 19983 19984 19983 19985 19986 19987 + 19986 19988 19989 19990 19989 19991 19992 19993 + 19992 19994 19995 19996 19995 19997 19998 19999 + 19998 20000 20001 20002 20001 20003 20004 20005 + 20004 20006 20007 20008 20007 20009 20010 20011 + 20010 20012 20013 20014 20013 20015 20016 20017 + 20016 20018 20019 20020 20019 20021 20022 20023 + 20022 20024 20025 20026 20025 20027 20028 20029 + 20028 20030 20031 20032 20031 20033 20034 20035 + 20034 20036 20037 20038 20037 20039 20040 20041 + 20040 20042 20043 20044 20043 20045 20046 20047 + 20046 20048 20049 20050 20049 20051 20052 20053 + 20052 20054 20055 20056 20055 20057 20058 20059 + 20058 20060 20061 20062 20061 20063 20064 20065 + 20064 20066 20067 20068 20067 20069 20070 20071 + 20070 20072 20073 20074 20073 20075 20076 20077 + 20076 20078 20079 20080 20079 20081 20082 20083 + 20082 20084 20085 20086 20085 20087 20088 20089 + 20088 20090 20091 20092 20091 20093 20094 20095 + 20094 20096 20097 20098 20097 20099 20100 20101 + 20100 20102 20103 20104 20103 20105 20106 20107 + 20106 20108 20109 20110 20109 20111 20112 20113 + 20112 20114 20115 20116 20115 20117 20118 20119 + 20118 20120 20121 20122 20121 20123 20124 20125 + 20124 20126 20127 20128 20127 20129 20130 20131 + 20130 20132 20133 20134 20133 20135 20136 20137 + 20136 20138 20139 20140 20139 20141 20142 20143 + 20142 20144 20145 20146 20145 20147 20148 20149 + 20148 20150 20151 20152 20151 20153 20154 20155 + 20154 20156 20157 20158 20157 20159 20160 20161 + 20160 20162 20163 20164 20163 20165 20166 20167 + 20166 20168 20169 20170 20169 20171 20172 20173 + 20172 20174 20175 20176 20175 20177 20178 20179 + 20178 20180 20181 20182 20181 20183 20184 20185 + 20184 20186 20187 20188 20187 20189 20190 20191 + 20190 20192 20193 20194 20193 20195 20196 20197 + 20196 20198 20199 20200 20199 20201 20202 20203 + 20202 20204 20205 20206 20205 20207 20208 20209 + 20208 20210 20211 20212 20211 20213 20214 20215 + 20214 20216 20217 20218 20217 20219 20220 20221 + 20220 20222 20223 20224 20223 20225 20226 20227 + 20226 20228 20229 20230 20229 20231 20232 20233 + 20232 20234 20235 20236 20235 20237 20238 20239 + 20238 20240 20241 20242 20241 20243 20244 20245 + 20244 20246 20247 20248 20247 20249 20250 20251 + 20250 20252 20253 20254 20253 20255 20256 20257 + 20256 20258 20259 20260 20259 20261 20262 20263 + 20262 20264 20265 20266 20265 20267 20268 20269 + 20268 20270 20271 20272 20271 20273 20274 20275 + 20274 20276 20277 20278 20277 20279 20280 20281 + 20280 20282 20283 20284 20283 20285 20286 20287 + 20286 20288 20289 20290 20289 20291 20292 20293 + 20292 20294 20295 20296 20295 20297 20298 20299 + 20298 20300 20301 20302 20301 20303 20304 20305 + 20304 20306 20307 20308 20307 20309 20310 20311 + 20310 20312 20313 20314 20313 20315 20316 20317 + 20316 20318 20319 20320 20319 20321 20322 20323 + 20322 20324 20325 20326 20325 20327 20328 20329 + 20328 20330 20331 20332 20331 20333 20334 20335 + 20334 20336 20337 20338 20337 20339 20340 20341 + 20340 20342 20343 20344 20343 20345 20346 20347 + 20346 20348 20349 20350 20349 20351 20352 20353 + 20352 20354 20355 20356 20355 20357 20358 20359 + 20358 20360 20361 20362 20361 20363 20364 20365 + 20364 20366 20367 20368 20367 20369 20370 20371 + 20370 20372 20373 20374 20373 20375 20376 20377 + 20376 20378 20379 20380 20379 20381 20382 20383 + 20382 20384 20385 20386 20385 20387 20388 20389 + 20388 20390 20391 20392 20391 20393 20394 20395 + 20394 20396 20397 20398 20397 20399 20400 20401 + 20400 20402 20403 20404 20403 20405 20406 20407 + 20406 20408 20409 20410 20409 20411 20412 20413 + 20412 20414 20415 20416 20415 20417 20418 20419 + 20418 20420 20421 20422 20421 20423 20424 20425 + 20424 20426 20427 20428 20427 20429 20430 20431 + 20430 20432 20433 20434 20433 20435 20436 20437 + 20436 20438 20439 20440 20439 20441 20442 20443 + 20442 20444 20445 20446 20445 20447 20448 20449 + 20448 20450 20451 20452 20451 20453 20454 20455 + 20454 20456 20457 20458 20457 20459 20460 20461 + 20460 20462 20463 20464 20463 20465 20466 20467 + 20466 20468 20469 20470 20469 20471 20472 20473 + 20472 20474 20475 20476 20475 20477 20478 20479 + 20478 20480 20481 20482 20481 20483 20484 20485 + 20484 20486 20487 20488 20487 20489 20490 20491 + 20490 20492 20493 20494 20493 20495 20496 20497 + 20496 20498 20499 20500 20499 20501 20502 20503 + 20502 20504 20505 20506 20505 20507 20508 20509 + 20508 20510 20511 20512 20511 20513 20514 20515 + 20514 20516 20517 20518 20517 20519 20520 20521 + 20520 20522 20523 20524 20523 20525 20526 20527 + 20526 20528 20529 20530 20529 20531 20532 20533 + 20532 20534 20535 20536 20535 20537 20538 20539 + 20538 20540 20541 20542 20541 20543 20544 20545 + 20544 20546 20547 20548 20547 20549 20550 20551 + 20550 20552 20553 20554 20553 20555 20556 20557 + 20556 20558 20559 20560 20559 20561 20562 20563 + 20562 20564 20565 20566 20565 20567 20568 20569 + 20568 20570 20571 20572 20571 20573 20574 20575 + 20574 20576 20577 20578 20577 20579 20580 20581 + 20580 20582 20583 20584 20583 20585 20586 20587 + 20586 20588 20589 20590 20589 20591 20592 20593 + 20592 20594 20595 20596 20595 20597 20598 20599 + 20598 20600 20601 20602 20601 20603 20604 20605 + 20604 20606 20607 20608 20607 20609 20610 20611 + 20610 20612 20613 20614 20613 20615 20616 20617 + 20616 20618 20619 20620 20619 20621 20622 20623 + 20622 20624 20625 20626 20625 20627 20628 20629 + 20628 20630 20631 20632 20631 20633 20634 20635 + 20634 20636 20637 20638 20637 20639 20640 20641 + 20640 20642 20643 20644 20643 20645 20646 20647 + 20646 20648 20649 20650 20649 20651 20652 20653 + 20652 20654 20655 20656 20655 20657 20658 20659 + 20658 20660 20661 20662 20661 20663 20664 20665 + 20664 20666 20667 20668 20667 20669 20670 20671 + 20670 20672 20673 20674 20673 20675 20676 20677 + 20676 20678 20679 20680 20679 20681 20682 20683 + 20682 20684 20685 20686 20685 20687 20688 20689 + 20688 20690 20691 20692 20691 20693 20694 20695 + 20694 20696 20697 20698 20697 20699 20700 20701 + 20700 20702 20703 20704 20703 20705 20706 20707 + 20706 20708 20709 20710 20709 20711 20712 20713 + 20712 20714 20715 20716 20715 20717 20718 20719 + 20718 20720 20721 20722 20721 20723 20724 20725 + 20724 20726 20727 20728 20727 20729 20730 20731 + 20730 20732 20733 20734 20733 20735 20736 20737 + 20736 20738 20739 20740 20739 20741 20742 20743 + 20742 20744 20745 20746 20745 20747 20748 20749 + 20748 20750 20751 20752 20751 20753 20754 20755 + 20754 20756 20757 20758 20757 20759 20760 20761 + 20760 20762 20763 20764 20763 20765 20766 20767 + 20766 20768 20769 20770 20769 20771 20772 20773 + 20772 20774 20775 20776 20775 20777 20778 20779 + 20778 20780 20781 20782 20781 20783 20784 20785 + 20784 20786 20787 20788 20787 20789 20790 20791 + 20790 20792 20793 20794 20793 20795 20796 20797 + 20796 20798 20799 20800 20799 20801 20802 20803 + 20802 20804 20805 20806 20805 20807 20808 20809 + 20808 20810 20811 20812 20811 20813 20814 20815 + 20814 20816 20817 20818 20817 20819 20820 20821 + 20820 20822 20823 20824 20823 20825 20826 20827 + 20826 20828 20829 20830 20829 20831 20832 20833 + 20832 20834 20835 20836 20835 20837 20838 20839 + 20838 20840 20841 20842 20841 20843 20844 20845 + 20844 20846 20847 20848 20847 20849 20850 20851 + 20850 20852 20853 20854 20853 20855 20856 20857 + 20856 20858 20859 20860 20859 20861 20862 20863 + 20862 20864 20865 20866 20865 20867 20868 20869 + 20868 20870 20871 20872 20871 20873 20874 20875 + 20874 20876 20877 20878 20877 20879 20880 20881 + 20880 20882 20883 20884 20883 20885 20886 20887 + 20886 20888 20889 20890 20889 20891 20892 20893 + 20892 20894 20895 20896 20895 20897 20898 20899 + 20898 20900 20901 20902 20901 20903 20904 20905 + 20904 20906 20907 20908 20907 20909 20910 20911 + 20910 20912 20913 20914 20913 20915 20916 20917 + 20916 20918 20919 20920 20919 20921 20922 20923 + 20922 20924 20925 20926 20925 20927 20928 20929 + 20928 20930 20931 20932 20931 20933 20934 20935 + 20934 20936 20937 20938 20937 20939 20940 20941 + 20940 20942 20943 20944 20943 20945 20946 20947 + 20946 20948 20949 20950 20949 20951 20952 20953 + 20952 20954 20955 20956 20955 20957 20958 20959 + 20958 20960 20961 20962 20961 20963 20964 20965 + 20964 20966 20967 20968 20967 20969 20970 20971 + 20970 20972 20973 20974 20973 20975 20976 20977 + 20976 20978 20979 20980 20979 20981 20982 20983 + 20982 20984 20985 20986 20985 20987 20988 20989 + 20988 20990 20991 20992 20991 20993 20994 20995 + 20994 20996 20997 20998 20997 20999 21000 21001 + 21000 21002 21003 21004 21003 21005 21006 21007 + 21006 21008 21009 21010 21009 21011 21012 21013 + 21012 21014 21015 21016 21015 21017 21018 21019 + 21018 21020 21021 21022 21021 21023 21024 21025 + 21024 21026 21027 21028 21027 21029 21030 21031 + 21030 21032 21033 21034 21033 21035 21036 21037 + 21036 21038 21039 21040 21039 21041 21042 21043 + 21042 21044 21045 21046 21045 21047 21048 21049 + 21048 21050 21051 21052 21051 21053 21054 21055 + 21054 21056 21057 21058 21057 21059 21060 21061 + 21060 21062 21063 21064 21063 21065 21066 21067 + 21066 21068 21069 21070 21069 21071 21072 21073 + 21072 21074 21075 21076 21075 21077 21078 21079 + 21078 21080 21081 21082 21081 21083 21084 21085 + 21084 21086 21087 21088 21087 21089 21090 21091 + 21090 21092 21093 21094 21093 21095 21096 21097 + 21096 21098 21099 21100 21099 21101 21102 21103 + 21102 21104 21105 21106 21105 21107 21108 21109 + 21108 21110 21111 21112 21111 21113 21114 21115 + 21114 21116 21117 21118 21117 21119 21120 21121 + 21120 21122 21123 21124 21123 21125 21126 21127 + 21126 21128 21129 21130 21129 21131 21132 21133 + 21132 21134 21135 21136 21135 21137 21138 21139 + 21138 21140 21141 21142 21141 21143 21144 21145 + 21144 21146 21147 21148 21147 21149 21150 21151 + 21150 21152 21153 21154 21153 21155 21156 21157 + 21156 21158 21159 21160 21159 21161 21162 21163 + 21162 21164 21165 21166 21165 21167 21168 21169 + 21168 21170 21171 21172 21171 21173 21174 21175 + 21174 21176 21177 21178 21177 21179 21180 21181 + 21180 21182 21183 21184 21183 21185 21186 21187 + 21186 21188 21189 21190 21189 21191 21192 21193 + 21192 21194 21195 21196 21195 21197 21198 21199 + 21198 21200 21201 21202 21201 21203 21204 21205 + 21204 21206 21207 21208 21207 21209 21210 21211 + 21210 21212 21213 21214 21213 21215 21216 21217 + 21216 21218 21219 21220 21219 21221 21222 21223 + 21222 21224 21225 21226 21225 21227 21228 21229 + 21228 21230 21231 21232 21231 21233 21234 21235 + 21234 21236 21237 21238 21237 21239 21240 21241 + 21240 21242 21243 21244 21243 21245 21246 21247 + 21246 21248 21249 21250 21249 21251 21252 21253 + 21252 21254 21255 21256 21255 21257 21258 21259 + 21258 21260 21261 21262 21261 21263 21264 21265 + 21264 21266 21267 21268 21267 21269 21270 21271 + 21270 21272 21273 21274 21273 21275 21276 21277 + 21276 21278 21279 21280 21279 21281 21282 21283 + 21282 21284 21285 21286 21285 21287 21288 21289 + 21288 21290 21291 21292 21291 21293 21294 21295 + 21294 21296 21297 21298 21297 21299 21300 21301 + 21300 21302 21303 21304 21303 21305 21306 21307 + 21306 21308 21309 21310 21309 21311 21312 21313 + 21312 21314 21315 21316 21315 21317 21318 21319 + 21318 21320 21321 21322 21321 21323 21324 21325 + 21324 21326 21327 21328 21327 21329 21330 21331 + 21330 21332 21333 21334 21333 21335 21336 21337 + 21336 21338 21339 21340 21339 21341 21342 21343 + 21342 21344 21345 21346 21345 21347 21348 21349 + 21348 21350 21351 21352 21351 21353 21354 21355 + 21354 21356 21357 21358 21357 21359 21360 21361 + 21360 21362 21363 21364 21363 21365 21366 21367 + 21366 21368 21369 21370 21369 21371 21372 21373 + 21372 21374 21375 21376 21375 21377 21378 21379 + 21378 21380 21381 21382 21381 21383 21384 21385 + 21384 21386 21387 21388 21387 21389 21390 21391 + 21390 21392 21393 21394 21393 21395 21396 21397 + 21396 21398 21399 21400 21399 21401 21402 21403 + 21402 21404 21405 21406 21405 21407 21408 21409 + 21408 21410 21411 21412 21411 21413 21414 21415 + 21414 21416 21417 21418 21417 21419 21420 21421 + 21420 21422 21423 21424 21423 21425 21426 21427 + 21426 21428 21429 21430 21429 21431 21432 21433 + 21432 21434 21435 21436 21435 21437 21438 21439 + 21438 21440 21441 21442 21441 21443 21444 21445 + 21444 21446 21447 21448 21447 21449 21450 21451 + 21450 21452 21453 21454 21453 21455 21456 21457 + 21456 21458 21459 21460 21459 21461 21462 21463 + 21462 21464 21465 21466 21465 21467 21468 21469 + 21468 21470 21471 21472 21471 21473 21474 21475 + 21474 21476 21477 21478 21477 21479 21480 21481 + 21480 21482 21483 21484 21483 21485 21486 21487 + 21486 21488 21489 21490 21489 21491 21492 21493 + 21492 21494 21495 21496 21495 21497 21498 21499 + 21498 21500 21501 21502 21501 21503 21504 21505 + 21504 21506 21507 21508 21507 21509 21510 21511 + 21510 21512 21513 21514 21513 21515 21516 21517 + 21516 21518 21519 21520 21519 21521 21522 21523 + 21522 21524 21525 21526 21525 21527 21528 21529 + 21528 21530 21531 21532 21531 21533 21534 21535 + 21534 21536 21537 21538 21537 21539 21540 21541 + 21540 21542 21543 21544 21543 21545 21546 21547 + 21546 21548 21549 21550 21549 21551 21552 21553 + 21552 21554 21555 21556 21555 21557 21558 21559 + 21558 21560 21561 21562 21561 21563 21564 21565 + 21564 21566 21567 21568 21567 21569 21570 21571 + 21570 21572 21573 21574 21573 21575 21576 21577 + 21576 21578 21579 21580 21579 21581 21582 21583 + 21582 21584 21585 21586 21585 21587 21588 21589 + 21588 21590 21591 21592 21591 21593 21594 21595 + 21594 21596 21597 21598 21597 21599 21600 21601 + 21600 21602 21603 21604 21603 21605 21606 21607 + 21606 21608 21609 21610 21609 21611 21612 21613 + 21612 21614 21615 21616 21615 21617 21618 21619 + 21618 21620 21621 21622 21621 21623 21624 21625 + 21624 21626 21627 21628 21627 21629 21630 21631 + 21630 21632 21633 21634 21633 21635 21636 21637 + 21636 21638 21639 21640 21639 21641 21642 21643 + 21642 21644 21645 21646 21645 21647 21648 21649 + 21648 21650 21651 21652 21651 21653 21654 21655 + 21654 21656 21657 21658 21657 21659 21660 21661 + 21660 21662 21663 21664 21663 21665 21666 21667 + 21666 21668 21669 21670 21669 21671 21672 21673 + 21672 21674 21675 21676 21675 21677 21678 21679 + 21678 21680 21681 21682 21681 21683 21684 21685 + 21684 21686 21687 21688 21687 21689 21690 21691 + 21690 21692 21693 21694 21693 21695 21696 21697 + 21696 21698 21699 21700 21699 21701 21702 21703 + 21702 21704 21705 21706 21705 21707 21708 21709 + 21708 21710 21711 21712 21711 21713 21714 21715 + 21714 21716 21717 21718 21717 21719 21720 21721 + 21720 21722 21723 21724 21723 21725 21726 21727 + 21726 21728 21729 21730 21729 21731 21732 21733 + 21732 21734 21735 21736 21735 21737 21738 21739 + 21738 21740 21741 21742 21741 21743 21744 21745 + 21744 21746 21747 21748 21747 21749 21750 21751 + 21750 21752 21753 21754 21753 21755 21756 21757 + 21756 21758 21759 21760 21759 21761 21762 21763 + 21762 21764 21765 21766 21765 21767 21768 21769 + 21768 21770 21771 21772 21771 21773 21774 21775 + 21774 21776 21777 21778 21777 21779 21780 21781 + 21780 21782 21783 21784 21783 21785 21786 21787 + 21786 21788 21789 21790 21789 21791 21792 21793 + 21792 21794 21795 21796 21795 21797 21798 21799 + 21798 21800 21801 21802 21801 21803 21804 21805 + 21804 21806 21807 21808 21807 21809 21810 21811 + 21810 21812 21813 21814 21813 21815 21816 21817 + 21816 21818 21819 21820 21819 21821 21822 21823 + 21822 21824 21825 21826 21825 21827 21828 21829 + 21828 21830 21831 21832 21831 21833 21834 21835 + 21834 21836 21837 21838 21837 21839 21840 21841 + 21840 21842 21843 21844 21843 21845 21846 21847 + 21846 21848 21849 21850 21849 21851 21852 21853 + 21852 21854 21855 21856 21855 21857 21858 21859 + 21858 21860 21861 21862 21861 21863 21864 21865 + 21864 21866 21867 21868 21867 21869 21870 21871 + 21870 21872 21873 21874 21873 21875 21876 21877 + 21876 21878 21879 21880 21879 21881 21882 21883 + 21882 21884 21885 21886 21885 21887 21888 21889 + 21888 21890 21891 21892 21891 21893 21894 21895 + 21894 21896 21897 21898 21897 21899 21900 21901 + 21900 21902 21903 21904 21903 21905 21906 21907 + 21906 21908 21909 21910 21909 21911 21912 21913 + 21912 21914 21915 21916 21915 21917 21918 21919 + 21918 21920 21921 21922 21921 21923 21924 21925 + 21924 21926 21927 21928 21927 21929 21930 21931 + 21930 21932 21933 21934 21933 21935 21936 21937 + 21936 21938 21939 21940 21939 21941 21942 21943 + 21942 21944 21945 21946 21945 21947 21948 21949 + 21948 21950 21951 21952 21951 21953 21954 21955 + 21954 21956 21957 21958 21957 21959 21960 21961 + 21960 21962 21963 21964 21963 21965 21966 21967 + 21966 21968 21969 21970 21969 21971 21972 21973 + 21972 21974 21975 21976 21975 21977 21978 21979 + 21978 21980 21981 21982 21981 21983 21984 21985 + 21984 21986 21987 21988 21987 21989 21990 21991 + 21990 21992 21993 21994 21993 21995 21996 21997 + 21996 21998 21999 22000 21999 22001 22002 22003 + 22002 22004 22005 22006 22005 22007 22008 22009 + 22008 22010 22011 22012 22011 22013 22014 22015 + 22014 22016 22017 22018 22017 22019 22020 22021 + 22020 22022 22023 22024 22023 22025 22026 22027 + 22026 22028 22029 22030 22029 22031 22032 22033 + 22032 22034 22035 22036 22035 22037 22038 22039 + 22038 22040 22041 22042 22041 22043 22044 22045 + 22044 22046 22047 22048 22047 22049 22050 22051 + 22050 22052 22053 22054 22053 22055 22056 22057 + 22056 22058 22059 22060 22059 22061 22062 22063 + 22062 22064 22065 22066 22065 22067 22068 22069 + 22068 22070 22071 22072 22071 22073 22074 22075 + 22074 22076 22077 22078 22077 22079 22080 22081 + 22080 22082 22083 22084 22083 22085 22086 22087 + 22086 22088 22089 22090 22089 22091 22092 22093 + 22092 22094 22095 22096 22095 22097 22098 22099 + 22098 22100 22101 22102 22101 22103 22104 22105 + 22104 22106 22107 22108 22107 22109 22110 22111 + 22110 22112 22113 22114 22113 22115 22116 22117 + 22116 22118 22119 22120 22119 22121 22122 22123 + 22122 22124 22125 22126 22125 22127 22128 22129 + 22128 22130 22131 22132 22131 22133 22134 22135 + 22134 22136 22137 22138 22137 22139 22140 22141 + 22140 22142 22143 22144 22143 22145 22146 22147 + 22146 22148 22149 22150 22149 22151 22152 22153 + 22152 22154 22155 22156 22155 22157 22158 22159 + 22158 22160 22161 22162 22161 22163 22164 22165 + 22164 22166 22167 22168 22167 22169 22170 22171 + 22170 22172 22173 22174 22173 22175 22176 22177 + 22176 22178 22179 22180 22179 22181 22182 22183 + 22182 22184 22185 22186 22185 22187 22188 22189 + 22188 22190 22191 22192 22191 22193 22194 22195 + 22194 22196 22197 22198 22197 22199 22200 22201 + 22200 22202 22203 22204 22203 22205 22206 22207 + 22206 22208 22209 22210 22209 22211 22212 22213 + 22212 22214 22215 22216 22215 22217 22218 22219 + 22218 22220 22221 22222 22221 22223 22224 22225 + 22224 22226 22227 22228 22227 22229 22230 22231 + 22230 22232 22233 22234 22233 22235 22236 22237 + 22236 22238 22239 22240 22239 22241 22242 22243 + 22242 22244 22245 22246 22245 22247 22248 22249 + 22248 22250 22251 22252 22251 22253 22254 22255 + 22254 22256 22257 22258 22257 22259 22260 22261 + 22260 22262 22263 22264 22263 22265 22266 22267 + 22266 22268 22269 22270 22269 22271 22272 22273 + 22272 22274 22275 22276 22275 22277 22278 22279 + 22278 22280 22281 22282 22281 22283 22284 22285 + 22284 22286 22287 22288 22287 22289 22290 22291 + 22290 22292 22293 22294 22293 22295 22296 22297 + 22296 22298 22299 22300 22299 22301 22302 22303 + 22302 22304 22305 22306 22305 22307 22308 22309 + 22308 22310 22311 22312 22311 22313 22314 22315 + 22314 22316 22317 22318 22317 22319 22320 22321 + 22320 22322 22323 22324 22323 22325 22326 22327 + 22326 22328 22329 22330 22329 22331 22332 22333 + 22332 22334 22335 22336 22335 22337 22338 22339 + 22338 22340 22341 22342 22341 22343 22344 22345 + 22344 22346 22347 22348 22347 22349 22350 22351 + 22350 22352 22353 22354 22353 22355 22356 22357 + 22356 22358 22359 22360 22359 22361 22362 22363 + 22362 22364 22365 22366 22365 22367 22368 22369 + 22368 22370 22371 22372 22371 22373 22374 22375 + 22374 22376 22377 22378 22377 22379 22380 22381 + 22380 22382 22383 22384 22383 22385 22386 22387 + 22386 22388 22389 22390 22389 22391 22392 22393 + 22392 22394 22395 22396 22395 22397 22398 22399 + 22398 22400 22401 22402 22401 22403 22404 22405 + 22404 22406 22407 22408 22407 22409 22410 22411 + 22410 22412 22413 22414 22413 22415 22416 22417 + 22416 22418 22419 22420 22419 22421 22422 22423 + 22422 22424 22425 22426 22425 22427 22428 22429 + 22428 22430 22431 22432 22431 22433 22434 22435 + 22434 22436 22437 22438 22437 22439 22440 22441 + 22440 22442 22443 22444 22443 22445 22446 22447 + 22446 22448 22449 22450 22449 22451 22452 22453 + 22452 22454 22455 22456 22455 22457 22458 22459 + 22458 22460 22461 22462 22461 22463 22464 22465 + 22464 22466 22467 22468 22467 22469 22470 22471 + 22470 22472 22473 22474 22473 22475 22476 22477 + 22476 22478 22479 22480 22479 22481 22482 22483 + 22482 22484 22485 22486 22485 22487 22488 22489 + 22488 22490 22491 22492 22491 22493 22494 22495 + 22494 22496 22497 22498 22497 22499 22500 22501 + 22500 22502 22503 22504 22503 22505 22506 22507 + 22506 22508 22509 22510 22509 22511 22512 22513 + 22512 22514 22515 22516 22515 22517 22518 22519 + 22518 22520 22521 22522 22521 22523 22524 22525 + 22524 22526 22527 22528 22527 22529 22530 22531 + 22530 22532 22533 22534 22533 22535 22536 22537 + 22536 22538 22539 22540 22539 22541 22542 22543 + 22542 22544 22545 22546 22545 22547 22548 22549 + 22548 22550 22551 22552 22551 22553 22554 22555 + 22554 22556 22557 22558 22557 22559 22560 22561 + 22560 22562 22563 22564 22563 22565 22566 22567 + 22566 22568 22569 22570 22569 22571 22572 22573 + 22572 22574 22575 22576 22575 22577 22578 22579 + 22578 22580 22581 22582 22581 22583 22584 22585 + 22584 22586 22587 22588 22587 22589 22590 22591 + 22590 22592 22593 22594 22593 22595 22596 22597 + 22596 22598 22599 22600 22599 22601 22602 22603 + 22602 22604 22605 22606 22605 22607 22608 22609 + 22608 22610 22611 22612 22611 22613 22614 22615 + 22614 22616 22617 22618 22617 22619 22620 22621 + 22620 22622 22623 22624 22623 22625 22626 22627 + 22626 22628 22629 22630 22629 22631 22632 22633 + 22632 22634 22635 22636 22635 22637 22638 22639 + 22638 22640 22641 22642 22641 22643 22644 22645 + 22644 22646 22647 22648 22647 22649 22650 22651 + 22650 22652 22653 22654 22653 22655 22656 22657 + 22656 22658 22659 22660 22659 22661 22662 22663 + 22662 22664 22665 22666 22665 22667 22668 22669 + 22668 22670 22671 22672 22671 22673 22674 22675 + 22674 22676 22677 22678 22677 22679 22680 22681 + 22680 22682 22683 22684 22683 22685 22686 22687 + 22686 22688 22689 22690 22689 22691 22692 22693 + 22692 22694 22695 22696 22695 22697 22698 22699 + 22698 22700 22701 22702 22701 22703 22704 22705 + 22704 22706 22707 22708 22707 22709 22710 22711 + 22710 22712 22713 22714 22713 22715 22716 22717 + 22716 22718 22719 22720 22719 22721 22722 22723 + 22722 22724 22725 22726 22725 22727 22728 22729 + 22728 22730 22731 22732 22731 22733 22734 22735 + 22734 22736 22737 22738 22737 22739 22740 22741 + 22740 22742 22743 22744 22743 22745 22746 22747 + 22746 22748 22749 22750 22749 22751 22752 22753 + 22752 22754 22755 22756 22755 22757 22758 22759 + 22758 22760 22761 22762 22761 22763 22764 22765 + 22764 22766 22767 22768 22767 22769 22770 22771 + 22770 22772 22773 22774 22773 22775 22776 22777 + 22776 22778 22779 22780 22779 22781 22782 22783 + 22782 22784 22785 22786 22785 22787 22788 22789 + 22788 22790 22791 22792 22791 22793 22794 22795 + 22794 22796 22797 22798 22797 22799 22800 22801 + 22800 22802 22803 22804 22803 22805 22806 22807 + 22806 22808 22809 22810 22809 22811 22812 22813 + 22812 22814 22815 22816 22815 22817 22818 22819 + 22818 22820 22821 22822 22821 22823 22824 22825 + 22824 22826 22827 22828 22827 22829 22830 22831 + 22830 22832 22833 22834 22833 22835 22836 22837 + 22836 22838 22839 22840 22839 22841 22842 22843 + 22842 22844 22845 22846 22845 22847 22848 22849 + 22848 22850 22851 22852 22851 22853 22854 22855 + 22854 22856 22857 22858 22857 22859 22860 22861 + 22860 22862 22863 22864 22863 22865 22866 22867 + 22866 22868 22869 22870 22869 22871 22872 22873 + 22872 22874 22875 22876 22875 22877 22878 22879 + 22878 22880 22881 22882 22881 22883 22884 22885 + 22884 22886 22887 22888 22887 22889 22890 22891 + 22890 22892 22893 22894 22893 22895 22896 22897 + 22896 22898 22899 22900 22899 22901 22902 22903 + 22902 22904 22905 22906 22905 22907 22908 22909 + 22908 22910 22911 22912 22911 22913 22914 22915 + 22914 22916 22917 22918 22917 22919 22920 22921 + 22920 22922 22923 22924 22923 22925 22926 22927 + 22926 22928 22929 22930 22929 22931 22932 22933 + 22932 22934 22935 22936 22935 22937 22938 22939 + 22938 22940 22941 22942 22941 22943 22944 22945 + 22944 22946 22947 22948 22947 22949 22950 22951 + 22950 22952 22953 22954 22953 22955 22956 22957 + 22956 22958 22959 22960 22959 22961 22962 22963 + 22962 22964 22965 22966 22965 22967 22968 22969 + 22968 22970 22971 22972 22971 22973 22974 22975 + 22974 22976 22977 22978 22977 22979 22980 22981 + 22980 22982 22983 22984 22983 22985 22986 22987 + 22986 22988 22989 22990 22989 22991 22992 22993 + 22992 22994 22995 22996 22995 22997 22998 22999 + 22998 23000 23001 23002 23001 23003 23004 23005 + 23004 23006 23007 23008 23007 23009 23010 23011 + 23010 23012 23013 23014 23013 23015 23016 23017 + 23016 23018 23019 23020 23019 23021 23022 23023 + 23022 23024 23025 23026 23025 23027 23028 23029 + 23028 23030 23031 23032 23031 23033 23034 23035 + 23034 23036 23037 23038 23037 23039 23040 23041 + 23040 23042 23043 23044 23043 23045 23046 23047 + 23046 23048 23049 23050 23049 23051 23052 23053 + 23052 23054 23055 23056 23055 23057 23058 23059 + 23058 23060 23061 23062 23061 23063 23064 23065 + 23064 23066 23067 23068 23067 23069 23070 23071 + 23070 23072 23073 23074 23073 23075 23076 23077 + 23076 23078 23079 23080 23079 23081 23082 23083 + 23082 23084 23085 23086 23085 23087 23088 23089 + 23088 23090 23091 23092 23091 23093 23094 23095 + 23094 23096 23097 23098 23097 23099 23100 23101 + 23100 23102 23103 23104 23103 23105 23106 23107 + 23106 23108 23109 23110 23109 23111 23112 23113 + 23112 23114 23115 23116 23115 23117 23118 23119 + 23118 23120 23121 23122 23121 23123 23124 23125 + 23124 23126 23127 23128 23127 23129 23130 23131 + 23130 23132 23133 23134 23133 23135 23136 23137 + 23136 23138 23139 23140 23139 23141 23142 23143 + 23142 23144 23145 23146 23145 23147 23148 23149 + 23148 23150 23151 23152 23151 23153 23154 23155 + 23154 23156 23157 23158 23157 23159 23160 23161 + 23160 23162 23163 23164 23163 23165 23166 23167 + 23166 23168 23169 23170 23169 23171 23172 23173 + 23172 23174 23175 23176 23175 23177 23178 23179 + 23178 23180 23181 23182 23181 23183 23184 23185 + 23184 23186 23187 23188 23187 23189 23190 23191 + 23190 23192 23193 23194 23193 23195 23196 23197 + 23196 23198 23199 23200 23199 23201 23202 23203 + 23202 23204 23205 23206 23205 23207 23208 23209 + 23208 23210 23211 23212 23211 23213 23214 23215 + 23214 23216 23217 23218 23217 23219 23220 23221 + 23220 23222 23223 23224 23223 23225 23226 23227 + 23226 23228 23229 23230 23229 23231 23232 23233 + 23232 23234 23235 23236 23235 23237 23238 23239 + 23238 23240 23241 23242 23241 23243 23244 23245 + 23244 23246 23247 23248 23247 23249 23250 23251 + 23250 23252 23253 23254 23253 23255 23256 23257 + 23256 23258 23259 23260 23259 23261 23262 23263 + 23262 23264 23265 23266 23265 23267 23268 23269 + 23268 23270 23271 23272 23271 23273 23274 23275 + 23274 23276 23277 23278 23277 23279 23280 23281 + 23280 23282 23283 23284 23283 23285 23286 23287 + 23286 23288 23289 23290 23289 23291 23292 23293 + 23292 23294 23295 23296 23295 23297 23298 23299 + 23298 23300 23301 23302 23301 23303 23304 23305 + 23304 23306 23307 23308 23307 23309 23310 23311 + 23310 23312 23313 23314 23313 23315 23316 23317 + 23316 23318 23319 23320 23319 23321 23322 23323 + 23322 23324 23325 23326 23325 23327 23328 23329 + 23328 23330 23331 23332 23331 23333 23334 23335 + 23334 23336 23337 23338 23337 23339 23340 23341 + 23340 23342 23343 23344 23343 23345 23346 23347 + 23346 23348 23349 23350 23349 23351 23352 23353 + 23352 23354 23355 23356 23355 23357 23358 23359 + 23358 23360 23361 23362 23361 23363 23364 23365 + 23364 23366 23367 23368 23367 23369 23370 23371 + 23370 23372 23373 23374 23373 23375 23376 23377 + 23376 23378 23379 23380 23379 23381 23382 23383 + 23382 23384 23385 23386 23385 23387 23388 23389 + 23388 23390 23391 23392 23391 23393 23394 23395 + 23394 23396 23397 23398 23397 23399 23400 23401 + 23400 23402 23403 23404 23403 23405 23406 23407 + 23406 23408 23409 23410 23409 23411 23412 23413 + 23412 23414 23415 23416 23415 23417 23418 23419 + 23418 23420 23421 23422 23421 23423 23424 23425 + 23424 23426 23427 23428 23427 23429 23430 23431 + 23430 23432 23433 23434 23433 23435 23436 23437 + 23436 23438 23439 23440 23439 23441 23442 23443 + 23442 23444 23445 23446 23445 23447 23448 23449 + 23448 23450 23451 23452 23451 23453 23454 23455 + 23454 23456 23457 23458 23457 23459 23460 23461 + 23460 23462 23463 23464 23463 23465 23466 23467 + 23466 23468 23469 23470 23469 23471 23472 23473 + 23472 23474 23475 23476 23475 23477 23478 23479 + 23478 23480 23481 23482 23481 23483 23484 23485 + 23484 23486 23487 23488 23487 23489 23490 23491 + 23490 23492 23493 23494 23493 23495 23496 23497 + 23496 23498 23499 23500 23499 23501 23502 23503 + 23502 23504 23505 23506 23505 23507 23508 23509 + 23508 23510 23511 23512 23511 23513 23514 23515 + 23514 23516 23517 23518 23517 23519 23520 23521 + 23520 23522 23523 23524 23523 23525 23526 23527 + 23526 23528 23529 23530 23529 23531 23532 23533 + 23532 23534 23535 23536 23535 23537 23538 23539 + 23538 23540 23541 23542 23541 23543 23544 23545 + 23544 23546 23547 23548 23547 23549 23550 23551 + 23550 23552 23553 23554 23553 23555 23556 23557 + 23556 23558 + + 11584 !NTHETA: angles + 1 5 6 1 5 18 2 1 5 + 2 1 4 2 1 3 3 1 5 + 3 1 4 4 1 5 5 18 19 + 5 18 20 5 7 9 5 7 8 + 5 7 10 7 10 12 7 10 11 + 7 10 13 7 5 6 7 5 18 + 7 5 1 8 7 9 10 13 14 + 10 7 9 10 7 8 11 10 12 + 13 14 17 13 14 16 13 14 15 + 13 10 12 13 10 11 15 14 17 + 15 14 16 16 14 17 18 5 6 + 20 22 23 20 22 37 20 18 19 + 21 20 18 21 20 22 22 37 38 + 22 37 39 22 24 25 22 24 26 + 22 24 30 22 20 18 24 30 32 + 24 30 31 24 30 33 24 26 29 + 24 26 28 24 26 27 24 22 23 + 24 22 37 24 22 20 26 24 25 + 27 26 29 27 26 28 28 26 29 + 30 33 36 30 33 35 30 33 34 + 30 24 25 30 24 26 31 30 32 + 33 30 32 33 30 31 34 33 36 + 34 33 35 35 33 36 37 22 23 + 39 41 42 39 41 48 39 37 38 + 40 39 37 40 39 41 41 48 49 + 41 48 50 41 43 45 41 43 44 + 41 43 46 41 39 37 43 46 47 + 43 41 42 43 41 48 43 41 39 + 44 43 45 46 43 45 46 43 44 + 48 41 42 50 52 53 50 52 67 + 50 48 49 51 50 48 51 50 52 + 52 67 68 52 67 69 52 54 56 + 52 54 55 52 54 57 52 50 48 + 54 57 58 54 57 63 54 57 59 + 54 52 53 54 52 67 54 52 50 + 55 54 56 57 63 66 57 63 65 + 57 63 64 57 59 62 57 59 61 + 57 59 60 57 54 56 57 54 55 + 59 57 58 59 57 63 60 59 62 + 60 59 61 61 59 62 63 57 58 + 64 63 66 64 63 65 65 63 66 + 67 52 53 69 71 72 69 71 86 + 69 67 68 70 69 67 70 69 71 + 71 86 87 71 86 88 71 73 74 + 71 73 75 71 73 79 71 69 67 + 73 79 81 73 79 80 73 79 82 + 73 75 78 73 75 77 73 75 76 + 73 71 72 73 71 86 73 71 69 + 75 73 74 76 75 78 76 75 77 + 77 75 78 79 82 85 79 82 84 + 79 82 83 79 73 74 79 73 75 + 80 79 81 82 79 81 82 79 80 + 83 82 85 83 82 84 84 82 85 + 86 71 72 88 90 91 88 90 96 + 88 86 87 89 88 86 89 88 90 + 90 96 97 90 96 98 90 92 95 + 90 92 94 90 92 93 90 88 86 + 92 90 91 92 90 96 92 90 88 + 93 92 95 93 92 94 94 92 95 + 96 90 91 98 100 101 98 100 106 + 98 96 97 99 98 96 99 98 100 + 100 106 107 100 106 108 100 102 105 + 100 102 104 100 102 103 100 98 96 + 102 100 101 102 100 106 102 100 98 + 103 102 105 103 102 104 104 102 105 + 106 100 101 108 110 111 108 110 125 + 108 106 107 109 108 106 109 108 110 + 110 125 126 110 125 127 110 112 114 + 110 112 113 110 112 115 110 108 106 + 112 115 116 112 115 121 112 115 117 + 112 110 111 112 110 125 112 110 108 + 113 112 114 115 121 124 115 121 123 + 115 121 122 115 117 120 115 117 119 + 115 117 118 115 112 114 115 112 113 + 117 115 116 117 115 121 118 117 120 + 118 117 119 119 117 120 121 115 116 + 122 121 124 122 121 123 123 121 124 + 125 110 111 127 129 130 127 129 135 + 127 125 126 128 127 125 128 127 129 + 129 135 136 129 135 137 129 131 134 + 129 131 133 129 131 132 129 127 125 + 131 129 130 131 129 135 131 129 127 + 132 131 134 132 131 133 133 131 134 + 135 129 130 137 139 140 137 139 151 + 137 135 136 138 137 135 138 137 139 + 139 151 152 139 151 153 139 141 142 + 139 141 147 139 141 143 139 137 135 + 141 147 150 141 147 149 141 147 148 + 141 143 146 141 143 145 141 143 144 + 141 139 140 141 139 151 141 139 137 + 143 141 142 143 141 147 144 143 146 + 144 143 145 145 143 146 147 141 142 + 148 147 150 148 147 149 149 147 150 + 151 139 140 153 155 156 153 155 163 + 153 151 152 154 153 151 154 153 155 + 155 163 164 155 163 165 155 157 159 + 155 157 158 155 157 160 155 153 151 + 157 160 161 157 160 162 157 155 156 + 157 155 163 157 155 153 158 157 159 + 160 157 159 160 157 158 162 160 161 + 163 155 156 165 167 168 165 167 187 + 165 163 164 166 165 163 166 165 167 + 167 187 188 167 187 189 167 169 171 + 167 169 170 167 169 172 167 165 163 + 169 172 174 169 172 173 169 172 175 + 169 167 168 169 167 187 169 167 165 + 170 169 171 172 175 177 172 175 176 + 172 175 178 172 169 171 172 169 170 + 173 172 174 175 178 179 175 178 180 + 175 172 174 175 172 173 176 175 177 + 178 180 181 178 180 184 178 175 177 + 178 175 176 180 184 186 180 184 185 + 180 178 179 182 181 180 182 181 183 + 183 181 180 184 180 181 185 184 186 + 187 167 168 189 191 192 189 191 203 + 189 187 188 190 189 187 190 189 191 + 191 203 204 191 203 205 191 193 194 + 191 193 199 191 193 195 191 189 187 + 193 199 202 193 199 201 193 199 200 + 193 195 198 193 195 197 193 195 196 + 193 191 192 193 191 203 193 191 189 + 195 193 194 195 193 199 196 195 198 + 196 195 197 197 195 198 199 193 194 + 200 199 202 200 199 201 201 199 202 + 203 191 192 205 207 208 205 207 222 + 205 203 204 206 205 203 206 205 207 + 207 222 223 207 222 224 207 209 210 + 207 209 211 207 209 215 207 205 203 + 209 215 217 209 215 216 209 215 218 + 209 211 214 209 211 213 209 211 212 + 209 207 208 209 207 222 209 207 205 + 211 209 210 212 211 214 212 211 213 + 213 211 214 215 218 221 215 218 220 + 215 218 219 215 209 210 215 209 211 + 216 215 217 218 215 217 218 215 216 + 219 218 221 219 218 220 220 218 221 + 222 207 208 224 226 228 224 226 227 + 224 226 229 224 222 223 225 224 222 + 225 224 226 226 229 230 226 229 231 + 226 224 222 227 226 228 229 226 228 + 229 226 227 231 233 234 231 233 246 + 231 229 230 232 231 229 232 231 233 + 233 246 247 233 246 248 233 235 237 + 233 235 236 233 235 238 233 231 229 + 235 238 240 235 238 239 235 238 241 + 235 233 234 235 233 246 235 233 231 + 236 235 237 238 241 242 238 235 237 + 238 235 236 239 238 240 241 242 245 + 241 242 244 241 242 243 241 238 240 + 241 238 239 243 242 245 243 242 244 + 244 242 245 246 233 234 248 250 251 + 248 250 261 248 246 247 249 248 246 + 249 248 250 250 261 262 250 261 263 + 250 252 254 250 252 253 250 252 255 + 250 248 246 252 255 257 252 255 256 + 252 255 258 252 250 251 252 250 261 + 252 250 248 253 252 254 255 258 259 + 255 258 260 255 252 254 255 252 253 + 256 255 257 258 255 257 258 255 256 + 260 258 259 261 250 251 263 265 266 + 263 265 275 263 261 262 264 263 261 + 264 263 265 265 275 276 265 275 277 + 265 267 269 265 267 268 265 267 270 + 265 263 261 267 270 271 267 270 272 + 267 265 266 267 265 275 267 265 263 + 268 267 269 270 272 274 270 272 273 + 270 267 269 270 267 268 272 270 271 + 273 272 274 275 265 266 277 279 280 + 277 279 285 277 275 276 278 277 275 + 278 277 279 279 285 286 279 285 287 + 279 281 284 279 281 283 279 281 282 + 279 277 275 281 279 280 281 279 285 + 281 279 277 282 281 284 282 281 283 + 283 281 284 285 279 280 287 289 290 + 287 289 302 287 285 286 288 287 285 + 288 287 289 289 302 303 289 302 304 + 289 291 293 289 291 292 289 291 294 + 289 287 285 291 294 296 291 294 295 + 291 294 297 291 289 290 291 289 302 + 291 289 287 292 291 293 294 297 298 + 294 291 293 294 291 292 295 294 296 + 297 298 301 297 298 300 297 298 299 + 297 294 296 297 294 295 299 298 301 + 299 298 300 300 298 301 302 289 290 + 304 308 309 304 308 310 304 305 307 + 304 305 306 304 302 303 305 313 315 + 305 313 314 305 304 302 306 305 307 + 308 316 317 308 316 318 308 310 312 + 308 310 311 308 310 313 308 304 302 + 308 304 305 310 313 315 310 313 314 + 310 313 305 310 308 309 311 310 312 + 313 310 312 313 310 311 313 305 307 + 313 305 306 313 305 304 314 313 315 + 316 308 309 316 308 310 316 308 304 + 318 320 321 318 320 340 318 316 317 + 319 318 316 319 318 320 320 340 341 + 320 340 342 320 322 324 320 322 323 + 320 322 325 320 318 316 322 325 326 + 322 325 331 322 320 321 322 320 340 + 322 320 318 323 322 324 325 331 330 + 325 331 332 325 322 324 325 322 323 + 326 328 329 326 328 330 327 326 325 + 328 330 331 328 326 325 328 326 327 + 330 336 338 330 336 337 330 328 329 + 331 332 334 331 332 333 331 325 326 + 332 331 330 333 332 334 334 338 336 + 334 338 339 335 334 332 336 330 331 + 336 330 328 337 336 338 338 334 332 + 338 334 335 339 338 336 340 320 321 + 342 344 345 342 344 354 342 340 341 + 343 342 340 343 342 344 344 354 355 + 344 354 356 344 346 348 344 346 347 + 344 346 349 344 342 340 346 349 350 + 346 349 351 346 344 345 346 344 354 + 346 344 342 347 346 348 349 351 353 + 349 351 352 349 346 348 349 346 347 + 351 349 350 352 351 353 354 344 345 + 356 358 359 356 358 373 356 354 355 + 357 356 354 357 356 358 358 373 374 + 358 373 375 358 360 362 358 360 361 + 358 360 363 358 356 354 360 363 364 + 360 363 369 360 363 365 360 358 359 + 360 358 373 360 358 356 361 360 362 + 363 369 372 363 369 371 363 369 370 + 363 365 368 363 365 367 363 365 366 + 363 360 362 363 360 361 365 363 364 + 365 363 369 366 365 368 366 365 367 + 367 365 368 369 363 364 370 369 372 + 370 369 371 371 369 372 373 358 359 + 375 379 380 375 379 381 375 376 378 + 375 376 377 375 373 374 376 384 386 + 376 384 385 376 375 373 377 376 378 + 379 387 388 379 387 389 379 381 383 + 379 381 382 379 381 384 379 375 373 + 379 375 376 381 384 386 381 384 385 + 381 384 376 381 379 380 382 381 383 + 384 381 383 384 381 382 384 376 378 + 384 376 377 384 376 375 385 384 386 + 387 379 380 387 379 381 387 379 375 + 389 391 392 389 391 397 389 387 388 + 390 389 387 390 389 391 391 397 398 + 391 397 399 391 393 396 391 393 395 + 391 393 394 391 389 387 393 391 392 + 393 391 397 393 391 389 394 393 396 + 394 393 395 395 393 396 397 391 392 + 399 401 402 399 401 409 399 397 398 + 400 399 397 400 399 401 401 409 410 + 401 409 411 401 403 405 401 403 404 + 401 403 406 401 399 397 403 406 407 + 403 406 408 403 401 402 403 401 409 + 403 401 399 404 403 405 406 403 405 + 406 403 404 408 406 407 409 401 402 + 411 413 414 411 413 428 411 409 410 + 412 411 409 412 411 413 413 428 429 + 413 428 430 413 415 417 413 415 416 + 413 415 418 413 411 409 415 418 419 + 415 418 424 415 418 420 415 413 414 + 415 413 428 415 413 411 416 415 417 + 418 424 427 418 424 426 418 424 425 + 418 420 423 418 420 422 418 420 421 + 418 415 417 418 415 416 420 418 419 + 420 418 424 421 420 423 421 420 422 + 422 420 423 424 418 419 425 424 427 + 425 424 426 426 424 427 428 413 414 + 430 432 433 430 432 438 430 428 429 + 431 430 428 431 430 432 432 438 439 + 432 438 440 432 434 437 432 434 436 + 432 434 435 432 430 428 434 432 433 + 434 432 438 434 432 430 435 434 437 + 435 434 436 436 434 437 438 432 433 + 440 442 443 440 442 462 440 438 439 + 441 440 438 441 440 442 442 462 463 + 442 462 464 442 444 446 442 444 445 + 442 444 447 442 440 438 444 447 448 + 444 447 453 444 442 443 444 442 462 + 444 442 440 445 444 446 447 453 452 + 447 453 454 447 444 446 447 444 445 + 448 450 451 448 450 452 449 448 447 + 450 452 453 450 448 447 450 448 449 + 452 458 460 452 458 459 452 450 451 + 453 454 456 453 454 455 453 447 448 + 454 453 452 455 454 456 456 460 458 + 456 460 461 457 456 454 458 452 453 + 458 452 450 459 458 460 460 456 454 + 460 456 457 461 460 458 462 442 443 + 464 466 467 464 466 482 464 462 463 + 465 464 462 465 464 466 466 482 483 + 466 482 484 466 468 470 466 468 469 + 466 468 471 466 464 462 468 471 472 + 468 471 478 468 466 467 468 466 482 + 468 466 464 469 468 470 471 478 480 + 471 478 479 471 468 470 471 468 469 + 472 474 476 472 474 475 473 472 471 + 474 476 477 474 472 471 474 472 473 + 475 474 476 476 480 481 476 480 478 + 478 480 481 478 471 472 479 478 480 + 480 476 477 480 476 474 482 466 467 + 484 486 487 484 486 504 484 482 483 + 485 484 482 485 484 486 486 504 505 + 486 504 506 486 488 490 486 488 489 + 486 488 491 486 484 482 488 491 493 + 488 491 492 488 491 494 488 486 487 + 488 486 504 488 486 484 489 488 490 + 491 494 496 491 494 495 491 494 497 + 491 488 490 491 488 489 492 491 493 + 494 497 499 494 497 498 494 497 500 + 494 491 493 494 491 492 495 494 496 + 497 500 503 497 500 502 497 500 501 + 497 494 496 497 494 495 498 497 499 + 500 497 499 500 497 498 501 500 503 + 501 500 502 502 500 503 504 486 487 + 506 508 509 506 508 528 506 504 505 + 507 506 504 507 506 508 508 528 529 + 508 528 530 508 510 512 508 510 511 + 508 510 513 508 506 504 510 513 515 + 510 513 514 510 513 516 510 508 509 + 510 508 528 510 508 506 511 510 512 + 513 516 518 513 516 517 513 516 519 + 513 510 512 513 510 511 514 513 515 + 516 519 520 516 519 521 516 513 515 + 516 513 514 517 516 518 519 521 522 + 519 521 525 519 516 518 519 516 517 + 521 525 527 521 525 526 521 519 520 + 523 522 521 523 522 524 524 522 521 + 525 521 522 526 525 527 528 508 509 + 530 532 533 530 532 542 530 528 529 + 531 530 528 531 530 532 532 542 543 + 532 542 544 532 534 536 532 534 535 + 532 534 537 532 530 528 534 537 538 + 534 537 539 534 532 533 534 532 542 + 534 532 530 535 534 536 537 539 541 + 537 539 540 537 534 536 537 534 535 + 539 537 538 540 539 541 542 532 533 + 544 546 547 544 546 556 544 542 543 + 545 544 542 545 544 546 546 556 557 + 546 556 558 546 548 549 546 548 552 + 546 548 550 546 544 542 548 552 555 + 548 552 554 548 552 553 548 550 551 + 548 546 547 548 546 556 548 546 544 + 550 548 549 550 548 552 552 548 549 + 553 552 555 553 552 554 554 552 555 + 556 546 547 558 560 561 558 560 575 + 558 556 557 559 558 556 559 558 560 + 560 575 576 560 575 577 560 562 564 + 560 562 563 560 562 565 560 558 556 + 562 565 566 562 565 571 562 565 567 + 562 560 561 562 560 575 562 560 558 + 563 562 564 565 571 574 565 571 573 + 565 571 572 565 567 570 565 567 569 + 565 567 568 565 562 564 565 562 563 + 567 565 566 567 565 571 568 567 570 + 568 567 569 569 567 570 571 565 566 + 572 571 574 572 571 573 573 571 574 + 575 560 561 577 579 580 577 579 587 + 577 575 576 578 577 575 578 577 579 + 579 587 588 579 587 589 579 581 583 + 579 581 582 579 581 584 579 577 575 + 581 584 585 581 584 586 581 579 580 + 581 579 587 581 579 577 582 581 583 + 584 581 583 584 581 582 586 584 585 + 587 579 580 589 591 592 589 591 609 + 589 587 588 590 589 587 590 589 591 + 591 609 610 591 609 611 591 593 595 + 591 593 594 591 593 596 591 589 587 + 593 596 598 593 596 597 593 596 599 + 593 591 592 593 591 609 593 591 589 + 594 593 595 596 599 601 596 599 600 + 596 599 602 596 593 595 596 593 594 + 597 596 598 599 602 604 599 602 603 + 599 602 605 599 596 598 599 596 597 + 600 599 601 602 605 608 602 605 607 + 602 605 606 602 599 601 602 599 600 + 603 602 604 605 602 604 605 602 603 + 606 605 608 606 605 607 607 605 608 + 609 591 592 611 615 616 611 615 617 + 611 612 614 611 612 613 611 609 610 + 612 620 622 612 620 621 612 611 609 + 613 612 614 615 623 624 615 623 625 + 615 617 619 615 617 618 615 617 620 + 615 611 609 615 611 612 617 620 622 + 617 620 621 617 620 612 617 615 616 + 618 617 619 620 617 619 620 617 618 + 620 612 614 620 612 613 620 612 611 + 621 620 622 623 615 616 623 615 617 + 623 615 611 625 627 628 625 627 639 + 625 623 624 626 625 623 626 625 627 + 627 639 640 627 639 641 627 629 630 + 627 629 635 627 629 631 627 625 623 + 629 635 638 629 635 637 629 635 636 + 629 631 634 629 631 633 629 631 632 + 629 627 628 629 627 639 629 627 625 + 631 629 630 631 629 635 632 631 634 + 632 631 633 633 631 634 635 629 630 + 636 635 638 636 635 637 637 635 638 + 639 627 628 641 643 644 641 643 658 + 641 639 640 642 641 639 642 641 643 + 643 658 659 643 658 660 643 645 646 + 643 645 647 643 645 651 643 641 639 + 645 651 653 645 651 652 645 651 654 + 645 647 650 645 647 649 645 647 648 + 645 643 644 645 643 658 645 643 641 + 647 645 646 648 647 650 648 647 649 + 649 647 650 651 654 657 651 654 656 + 651 654 655 651 645 646 651 645 647 + 652 651 653 654 651 653 654 651 652 + 655 654 657 655 654 656 656 654 657 + 658 643 644 660 662 663 660 662 675 + 660 658 659 661 660 658 661 660 662 + 662 675 676 662 675 677 662 664 666 + 662 664 665 662 664 667 662 660 658 + 664 667 669 664 667 668 664 667 670 + 664 662 663 664 662 675 664 662 660 + 665 664 666 667 670 671 667 664 666 + 667 664 665 668 667 669 670 671 674 + 670 671 673 670 671 672 670 667 669 + 670 667 668 672 671 674 672 671 673 + 673 671 674 675 662 663 677 679 681 + 677 679 680 677 679 682 677 675 676 + 678 677 675 678 677 679 679 682 683 + 679 682 684 679 677 675 680 679 681 + 682 679 681 682 679 680 684 686 687 + 684 686 706 684 682 683 685 684 682 + 685 684 686 686 706 707 686 706 708 + 686 688 690 686 688 689 686 688 691 + 686 684 682 688 691 693 688 691 692 + 688 691 694 688 686 687 688 686 706 + 688 686 684 689 688 690 691 694 696 + 691 694 695 691 694 697 691 688 690 + 691 688 689 692 691 693 694 697 698 + 694 697 699 694 691 693 694 691 692 + 695 694 696 697 699 700 697 699 703 + 697 694 696 697 694 695 699 703 705 + 699 703 704 699 697 698 701 700 699 + 701 700 702 702 700 699 703 699 700 + 704 703 705 706 686 687 708 710 711 + 708 710 723 708 706 707 709 708 706 + 709 708 710 710 723 724 710 723 725 + 710 712 714 710 712 713 710 712 717 + 710 708 706 712 717 721 712 717 715 + 712 710 711 712 710 723 712 710 708 + 713 712 714 715 718 720 715 718 719 + 715 717 721 717 715 716 717 715 718 + 717 712 714 717 712 713 718 715 716 + 719 718 720 720 721 717 720 721 722 + 721 720 718 722 721 717 723 710 711 + 725 727 728 725 727 737 725 723 724 + 726 725 723 726 725 727 727 737 738 + 727 737 739 727 729 730 727 729 733 + 727 729 731 727 725 723 729 733 736 + 729 733 735 729 733 734 729 731 732 + 729 727 728 729 727 737 729 727 725 + 731 729 730 731 729 733 733 729 730 + 734 733 736 734 733 735 735 733 736 + 737 727 728 739 741 742 739 741 761 + 739 737 738 740 739 737 740 739 741 + 741 761 762 741 761 763 741 743 745 + 741 743 744 741 743 746 741 739 737 + 743 746 747 743 746 752 743 741 742 + 743 741 761 743 741 739 744 743 745 + 746 752 751 746 752 753 746 743 745 + 746 743 744 747 749 750 747 749 751 + 748 747 746 749 751 752 749 747 746 + 749 747 748 751 757 759 751 757 758 + 751 749 750 752 753 755 752 753 754 + 752 746 747 753 752 751 754 753 755 + 755 759 757 755 759 760 756 755 753 + 757 751 752 757 751 749 758 757 759 + 759 755 753 759 755 756 760 759 757 + 761 741 742 763 765 766 763 765 776 + 763 761 762 764 763 761 764 763 765 + 765 776 777 765 776 778 765 767 769 + 765 767 768 765 767 770 765 763 761 + 767 770 772 767 770 771 767 770 773 + 767 765 766 767 765 776 767 765 763 + 768 767 769 770 773 774 770 773 775 + 770 767 769 770 767 768 771 770 772 + 773 770 772 773 770 771 775 773 774 + 776 765 766 778 780 781 778 780 787 + 778 776 777 779 778 776 779 778 780 + 780 787 788 780 787 789 780 782 784 + 780 782 783 780 782 785 780 778 776 + 782 785 786 782 780 781 782 780 787 + 782 780 778 783 782 784 785 782 784 + 785 782 783 787 780 781 789 791 792 + 789 791 806 789 787 788 790 789 787 + 790 789 791 791 806 807 791 806 808 + 791 793 794 791 793 795 791 793 799 + 791 789 787 793 799 801 793 799 800 + 793 799 802 793 795 798 793 795 797 + 793 795 796 793 791 792 793 791 806 + 793 791 789 795 793 794 796 795 798 + 796 795 797 797 795 798 799 802 805 + 799 802 804 799 802 803 799 793 794 + 799 793 795 800 799 801 802 799 801 + 802 799 800 803 802 805 803 802 804 + 804 802 805 806 791 792 808 810 812 + 808 810 811 808 810 813 808 806 807 + 809 808 806 809 808 810 810 813 814 + 810 813 815 810 808 806 811 810 812 + 813 810 812 813 810 811 815 817 818 + 815 817 837 815 813 814 816 815 813 + 816 815 817 817 837 838 817 837 839 + 817 819 821 817 819 820 817 819 822 + 817 815 813 819 822 824 819 822 823 + 819 822 825 819 817 818 819 817 837 + 819 817 815 820 819 821 822 825 827 + 822 825 826 822 825 828 822 819 821 + 822 819 820 823 822 824 825 828 829 + 825 828 830 825 822 824 825 822 823 + 826 825 827 828 830 831 828 830 834 + 828 825 827 828 825 826 830 834 836 + 830 834 835 830 828 829 832 831 830 + 832 831 833 833 831 830 834 830 831 + 835 834 836 837 817 818 839 843 844 + 839 843 845 839 840 842 839 840 841 + 839 837 838 840 848 850 840 848 849 + 840 839 837 841 840 842 843 851 852 + 843 851 853 843 845 847 843 845 846 + 843 845 848 843 839 837 843 839 840 + 845 848 850 845 848 849 845 848 840 + 845 843 844 846 845 847 848 845 847 + 848 845 846 848 840 842 848 840 841 + 848 840 839 849 848 850 851 843 844 + 851 843 845 851 843 839 853 855 856 + 853 855 870 853 851 852 854 853 851 + 854 853 855 855 870 871 855 870 872 + 855 857 859 855 857 858 855 857 860 + 855 853 851 857 860 861 857 860 866 + 857 860 862 857 855 856 857 855 870 + 857 855 853 858 857 859 860 866 869 + 860 866 868 860 866 867 860 862 865 + 860 862 864 860 862 863 860 857 859 + 860 857 858 862 860 861 862 860 866 + 863 862 865 863 862 864 864 862 865 + 866 860 861 867 866 869 867 866 868 + 868 866 869 870 855 856 872 876 877 + 872 876 878 872 873 875 872 873 874 + 872 870 871 873 881 883 873 881 882 + 873 872 870 874 873 875 876 884 885 + 876 884 886 876 878 880 876 878 879 + 876 878 881 876 872 870 876 872 873 + 878 881 883 878 881 882 878 881 873 + 878 876 877 879 878 880 881 878 880 + 881 878 879 881 873 875 881 873 874 + 881 873 872 882 881 883 884 876 877 + 884 876 878 884 876 872 886 888 890 + 886 888 889 886 888 891 886 884 885 + 887 886 884 887 886 888 888 891 892 + 888 891 893 888 886 884 889 888 890 + 891 888 890 891 888 889 893 895 896 + 893 895 915 893 891 892 894 893 891 + 894 893 895 895 915 916 895 915 917 + 895 897 899 895 897 898 895 897 900 + 895 893 891 897 900 902 897 900 901 + 897 900 903 897 895 896 897 895 915 + 897 895 893 898 897 899 900 903 905 + 900 903 904 900 903 906 900 897 899 + 900 897 898 901 900 902 903 906 907 + 903 906 908 903 900 902 903 900 901 + 904 903 905 906 908 909 906 908 912 + 906 903 905 906 903 904 908 912 914 + 908 912 913 908 906 907 910 909 908 + 910 909 911 911 909 908 912 908 909 + 913 912 914 915 895 896 917 919 920 + 917 919 937 917 915 916 918 917 915 + 918 917 919 919 937 938 919 937 939 + 919 921 923 919 921 922 919 921 924 + 919 917 915 921 924 926 921 924 925 + 921 924 927 921 919 920 921 919 937 + 921 919 917 922 921 923 924 927 929 + 924 927 928 924 927 930 924 921 923 + 924 921 922 925 924 926 927 930 932 + 927 930 931 927 930 933 927 924 926 + 927 924 925 928 927 929 930 933 936 + 930 933 935 930 933 934 930 927 929 + 930 927 928 931 930 932 933 930 932 + 933 930 931 934 933 936 934 933 935 + 935 933 936 937 919 920 939 941 942 + 939 941 951 939 937 938 940 939 937 + 940 939 941 941 951 952 941 951 953 + 941 943 945 941 943 944 941 943 946 + 941 939 937 943 946 947 943 946 948 + 943 941 942 943 941 951 943 941 939 + 944 943 945 946 948 950 946 948 949 + 946 943 945 946 943 944 948 946 947 + 949 948 950 951 941 942 953 955 956 + 953 955 970 953 951 952 954 953 951 + 954 953 955 955 970 971 955 970 972 + 955 957 958 955 957 959 955 957 963 + 955 953 951 957 963 965 957 963 964 + 957 963 966 957 959 962 957 959 961 + 957 959 960 957 955 956 957 955 970 + 957 955 953 959 957 958 960 959 962 + 960 959 961 961 959 962 963 966 969 + 963 966 968 963 966 967 963 957 958 + 963 957 959 964 963 965 966 963 965 + 966 963 964 967 966 969 967 966 968 + 968 966 969 970 955 956 972 974 975 + 972 974 989 972 970 971 973 972 970 + 973 972 974 974 989 990 974 989 991 + 974 976 977 974 976 978 974 976 982 + 974 972 970 976 982 984 976 982 983 + 976 982 985 976 978 981 976 978 980 + 976 978 979 976 974 975 976 974 989 + 976 974 972 978 976 977 979 978 981 + 979 978 980 980 978 981 982 985 988 + 982 985 987 982 985 986 982 976 977 + 982 976 978 983 982 984 985 982 984 + 985 982 983 986 985 988 986 985 987 + 987 985 988 989 974 975 991 993 994 + 991 993 1008 991 989 990 992 991 989 + 992 991 993 993 1008 1009 993 1008 1010 + 993 995 997 993 995 996 993 995 998 + 993 991 989 995 998 999 995 998 1004 + 995 998 1000 995 993 994 995 993 1008 + 995 993 991 996 995 997 998 1004 1007 + 998 1004 1006 998 1004 1005 998 1000 1003 + 998 1000 1002 998 1000 1001 998 995 997 + 998 995 996 1000 998 999 1000 998 1004 + 1001 1000 1003 1001 1000 1002 1002 1000 1003 + 1004 998 999 1005 1004 1007 1005 1004 1006 + 1006 1004 1007 1008 993 994 1010 1012 1013 + 1010 1012 1019 1010 1008 1009 1011 1010 1008 + 1011 1010 1012 1012 1019 1020 1012 1019 1021 + 1012 1014 1016 1012 1014 1015 1012 1014 1017 + 1012 1010 1008 1014 1017 1018 1014 1012 1013 + 1014 1012 1019 1014 1012 1010 1015 1014 1016 + 1017 1014 1016 1017 1014 1015 1019 1012 1013 + 1021 1023 1024 1021 1023 1030 1021 1019 1020 + 1022 1021 1019 1022 1021 1023 1023 1030 1031 + 1023 1030 1032 1023 1025 1027 1023 1025 1026 + 1023 1025 1028 1023 1021 1019 1025 1028 1029 + 1025 1023 1024 1025 1023 1030 1025 1023 1021 + 1026 1025 1027 1028 1025 1027 1028 1025 1026 + 1030 1023 1024 1032 1034 1035 1032 1034 1047 + 1032 1030 1031 1033 1032 1030 1033 1032 1034 + 1034 1047 1048 1034 1047 1049 1034 1036 1038 + 1034 1036 1037 1034 1036 1039 1034 1032 1030 + 1036 1039 1041 1036 1039 1040 1036 1039 1042 + 1036 1034 1035 1036 1034 1047 1036 1034 1032 + 1037 1036 1038 1039 1042 1043 1039 1042 1044 + 1039 1036 1038 1039 1036 1037 1040 1039 1041 + 1042 1044 1046 1042 1044 1045 1042 1039 1041 + 1042 1039 1040 1044 1042 1043 1045 1044 1046 + 1047 1034 1035 1049 1053 1054 1049 1053 1055 + 1049 1050 1052 1049 1050 1051 1049 1047 1048 + 1050 1058 1060 1050 1058 1059 1050 1049 1047 + 1051 1050 1052 1053 1061 1062 1053 1061 1063 + 1053 1055 1057 1053 1055 1056 1053 1055 1058 + 1053 1049 1047 1053 1049 1050 1055 1058 1060 + 1055 1058 1059 1055 1058 1050 1055 1053 1054 + 1056 1055 1057 1058 1055 1057 1058 1055 1056 + 1058 1050 1052 1058 1050 1051 1058 1050 1049 + 1059 1058 1060 1061 1053 1054 1061 1053 1055 + 1061 1053 1049 1063 1065 1067 1063 1065 1066 + 1063 1065 1068 1063 1061 1062 1064 1063 1061 + 1064 1063 1065 1065 1068 1069 1065 1068 1070 + 1065 1063 1061 1066 1065 1067 1068 1065 1067 + 1068 1065 1066 1070 1072 1073 1070 1072 1082 + 1070 1068 1069 1071 1070 1068 1071 1070 1072 + 1072 1082 1083 1072 1082 1084 1072 1074 1075 + 1072 1074 1078 1072 1074 1076 1072 1070 1068 + 1074 1078 1081 1074 1078 1080 1074 1078 1079 + 1074 1076 1077 1074 1072 1073 1074 1072 1082 + 1074 1072 1070 1076 1074 1075 1076 1074 1078 + 1078 1074 1075 1079 1078 1081 1079 1078 1080 + 1080 1078 1081 1082 1072 1073 1084 1086 1087 + 1084 1086 1094 1084 1082 1083 1085 1084 1082 + 1085 1084 1086 1086 1094 1095 1086 1094 1096 + 1086 1088 1090 1086 1088 1089 1086 1088 1091 + 1086 1084 1082 1088 1091 1092 1088 1091 1093 + 1088 1086 1087 1088 1086 1094 1088 1086 1084 + 1089 1088 1090 1091 1088 1090 1091 1088 1089 + 1093 1091 1092 1094 1086 1087 1096 1098 1099 + 1096 1098 1106 1096 1094 1095 1097 1096 1094 + 1097 1096 1098 1098 1106 1107 1098 1106 1108 + 1098 1100 1102 1098 1100 1101 1098 1100 1103 + 1098 1096 1094 1100 1103 1104 1100 1103 1105 + 1100 1098 1099 1100 1098 1106 1100 1098 1096 + 1101 1100 1102 1103 1100 1102 1103 1100 1101 + 1105 1103 1104 1106 1098 1099 1108 1110 1111 + 1108 1110 1130 1108 1106 1107 1109 1108 1106 + 1109 1108 1110 1110 1130 1131 1110 1130 1132 + 1110 1112 1114 1110 1112 1113 1110 1112 1115 + 1110 1108 1106 1112 1115 1117 1112 1115 1116 + 1112 1115 1118 1112 1110 1111 1112 1110 1130 + 1112 1110 1108 1113 1112 1114 1115 1118 1120 + 1115 1118 1119 1115 1118 1121 1115 1112 1114 + 1115 1112 1113 1116 1115 1117 1118 1121 1122 + 1118 1121 1123 1118 1115 1117 1118 1115 1116 + 1119 1118 1120 1121 1123 1124 1121 1123 1127 + 1121 1118 1120 1121 1118 1119 1123 1127 1129 + 1123 1127 1128 1123 1121 1122 1125 1124 1123 + 1125 1124 1126 1126 1124 1123 1127 1123 1124 + 1128 1127 1129 1130 1110 1111 1132 1134 1135 + 1132 1134 1146 1132 1130 1131 1133 1132 1130 + 1133 1132 1134 1134 1146 1147 1134 1146 1148 + 1134 1136 1137 1134 1136 1142 1134 1136 1138 + 1134 1132 1130 1136 1142 1145 1136 1142 1144 + 1136 1142 1143 1136 1138 1141 1136 1138 1140 + 1136 1138 1139 1136 1134 1135 1136 1134 1146 + 1136 1134 1132 1138 1136 1137 1138 1136 1142 + 1139 1138 1141 1139 1138 1140 1140 1138 1141 + 1142 1136 1137 1143 1142 1145 1143 1142 1144 + 1144 1142 1145 1146 1134 1135 1148 1150 1151 + 1148 1150 1160 1148 1146 1147 1149 1148 1146 + 1149 1148 1150 1150 1160 1161 1150 1160 1162 + 1150 1152 1153 1150 1152 1156 1150 1152 1154 + 1150 1148 1146 1152 1156 1159 1152 1156 1158 + 1152 1156 1157 1152 1154 1155 1152 1150 1151 + 1152 1150 1160 1152 1150 1148 1154 1152 1153 + 1154 1152 1156 1156 1152 1153 1157 1156 1159 + 1157 1156 1158 1158 1156 1159 1160 1150 1151 + 1162 1164 1165 1162 1164 1184 1162 1160 1161 + 1163 1162 1160 1163 1162 1164 1164 1184 1185 + 1164 1184 1186 1164 1166 1168 1164 1166 1167 + 1164 1166 1169 1164 1162 1160 1166 1169 1170 + 1166 1169 1175 1166 1164 1165 1166 1164 1184 + 1166 1164 1162 1167 1166 1168 1169 1175 1174 + 1169 1175 1176 1169 1166 1168 1169 1166 1167 + 1170 1172 1173 1170 1172 1174 1171 1170 1169 + 1172 1174 1175 1172 1170 1169 1172 1170 1171 + 1174 1180 1182 1174 1180 1181 1174 1172 1173 + 1175 1176 1178 1175 1176 1177 1175 1169 1170 + 1176 1175 1174 1177 1176 1178 1178 1182 1180 + 1178 1182 1183 1179 1178 1176 1180 1174 1175 + 1180 1174 1172 1181 1180 1182 1182 1178 1176 + 1182 1178 1179 1183 1182 1180 1184 1164 1165 + 1186 1188 1189 1186 1188 1200 1186 1184 1185 + 1187 1186 1184 1187 1186 1188 1188 1200 1201 + 1188 1200 1202 1188 1190 1191 1188 1190 1196 + 1188 1190 1192 1188 1186 1184 1190 1196 1199 + 1190 1196 1198 1190 1196 1197 1190 1192 1195 + 1190 1192 1194 1190 1192 1193 1190 1188 1189 + 1190 1188 1200 1190 1188 1186 1192 1190 1191 + 1192 1190 1196 1193 1192 1195 1193 1192 1194 + 1194 1192 1195 1196 1190 1191 1197 1196 1199 + 1197 1196 1198 1198 1196 1199 1200 1188 1189 + 1202 1204 1205 1202 1204 1222 1202 1200 1201 + 1203 1202 1200 1203 1202 1204 1204 1222 1223 + 1204 1222 1224 1204 1206 1208 1204 1206 1207 + 1204 1206 1209 1204 1202 1200 1206 1209 1211 + 1206 1209 1210 1206 1209 1212 1206 1204 1205 + 1206 1204 1222 1206 1204 1202 1207 1206 1208 + 1209 1212 1214 1209 1212 1213 1209 1212 1215 + 1209 1206 1208 1209 1206 1207 1210 1209 1211 + 1212 1215 1217 1212 1215 1216 1212 1215 1218 + 1212 1209 1211 1212 1209 1210 1213 1212 1214 + 1215 1218 1221 1215 1218 1220 1215 1218 1219 + 1215 1212 1214 1215 1212 1213 1216 1215 1217 + 1218 1215 1217 1218 1215 1216 1219 1218 1221 + 1219 1218 1220 1220 1218 1221 1222 1204 1205 + 1224 1226 1227 1224 1226 1233 1224 1222 1223 + 1225 1224 1222 1225 1224 1226 1226 1233 1234 + 1226 1233 1235 1226 1228 1230 1226 1228 1229 + 1226 1228 1231 1226 1224 1222 1228 1231 1232 + 1228 1226 1227 1228 1226 1233 1228 1226 1224 + 1229 1228 1230 1231 1228 1230 1231 1228 1229 + 1233 1226 1227 1235 1237 1238 1235 1237 1249 + 1235 1233 1234 1236 1235 1233 1236 1235 1237 + 1237 1249 1250 1237 1249 1251 1237 1239 1240 + 1237 1239 1245 1237 1239 1241 1237 1235 1233 + 1239 1245 1248 1239 1245 1247 1239 1245 1246 + 1239 1241 1244 1239 1241 1243 1239 1241 1242 + 1239 1237 1238 1239 1237 1249 1239 1237 1235 + 1241 1239 1240 1241 1239 1245 1242 1241 1244 + 1242 1241 1243 1243 1241 1244 1245 1239 1240 + 1246 1245 1248 1246 1245 1247 1247 1245 1248 + 1249 1237 1238 1251 1253 1254 1251 1253 1261 + 1251 1249 1250 1252 1251 1249 1252 1251 1253 + 1253 1261 1262 1253 1261 1263 1253 1255 1257 + 1253 1255 1256 1253 1255 1258 1253 1251 1249 + 1255 1258 1259 1255 1258 1260 1255 1253 1254 + 1255 1253 1261 1255 1253 1251 1256 1255 1257 + 1258 1255 1257 1258 1255 1256 1260 1258 1259 + 1261 1253 1254 1263 1265 1266 1263 1265 1276 + 1263 1261 1262 1264 1263 1261 1264 1263 1265 + 1265 1276 1277 1265 1276 1278 1265 1267 1269 + 1265 1267 1268 1265 1267 1270 1265 1263 1261 + 1267 1270 1272 1267 1270 1271 1267 1270 1273 + 1267 1265 1266 1267 1265 1276 1267 1265 1263 + 1268 1267 1269 1270 1273 1274 1270 1273 1275 + 1270 1267 1269 1270 1267 1268 1271 1270 1272 + 1273 1270 1272 1273 1270 1271 1275 1273 1274 + 1276 1265 1266 1278 1280 1281 1278 1280 1286 + 1278 1276 1277 1279 1278 1276 1279 1278 1280 + 1280 1286 1287 1280 1286 1288 1280 1282 1285 + 1280 1282 1284 1280 1282 1283 1280 1278 1276 + 1282 1280 1281 1282 1280 1286 1282 1280 1278 + 1283 1282 1285 1283 1282 1284 1284 1282 1285 + 1286 1280 1281 1288 1290 1291 1288 1290 1305 + 1288 1286 1287 1289 1288 1286 1289 1288 1290 + 1290 1305 1306 1290 1305 1307 1290 1292 1293 + 1290 1292 1294 1290 1292 1298 1290 1288 1286 + 1292 1298 1300 1292 1298 1299 1292 1298 1301 + 1292 1294 1297 1292 1294 1296 1292 1294 1295 + 1292 1290 1291 1292 1290 1305 1292 1290 1288 + 1294 1292 1293 1295 1294 1297 1295 1294 1296 + 1296 1294 1297 1298 1301 1304 1298 1301 1303 + 1298 1301 1302 1298 1292 1293 1298 1292 1294 + 1299 1298 1300 1301 1298 1300 1301 1298 1299 + 1302 1301 1304 1302 1301 1303 1303 1301 1304 + 1305 1290 1291 1307 1309 1310 1307 1309 1315 + 1307 1305 1306 1308 1307 1305 1308 1307 1309 + 1309 1315 1316 1309 1315 1317 1309 1311 1314 + 1309 1311 1313 1309 1311 1312 1309 1307 1305 + 1311 1309 1310 1311 1309 1315 1311 1309 1307 + 1312 1311 1314 1312 1311 1313 1313 1311 1314 + 1315 1309 1310 1317 1319 1320 1317 1319 1325 + 1317 1315 1316 1318 1317 1315 1318 1317 1319 + 1319 1325 1326 1319 1325 1327 1319 1321 1324 + 1319 1321 1323 1319 1321 1322 1319 1317 1315 + 1321 1319 1320 1321 1319 1325 1321 1319 1317 + 1322 1321 1324 1322 1321 1323 1323 1321 1324 + 1325 1319 1320 1327 1329 1330 1327 1329 1336 + 1327 1325 1326 1328 1327 1325 1328 1327 1329 + 1329 1336 1337 1329 1336 1338 1329 1331 1333 + 1329 1331 1332 1329 1331 1334 1329 1327 1325 + 1331 1334 1335 1331 1329 1330 1331 1329 1336 + 1331 1329 1327 1332 1331 1333 1334 1331 1333 + 1334 1331 1332 1336 1329 1330 1338 1340 1342 + 1338 1340 1341 1338 1340 1343 1338 1336 1337 + 1339 1338 1336 1339 1338 1340 1340 1343 1344 + 1340 1343 1345 1340 1338 1336 1341 1340 1342 + 1343 1340 1342 1343 1340 1341 1345 1347 1348 + 1345 1347 1355 1345 1343 1344 1346 1345 1343 + 1346 1345 1347 1347 1355 1356 1347 1355 1357 + 1347 1349 1351 1347 1349 1350 1347 1349 1352 + 1347 1345 1343 1349 1352 1353 1349 1352 1354 + 1349 1347 1348 1349 1347 1355 1349 1347 1345 + 1350 1349 1351 1352 1349 1351 1352 1349 1350 + 1354 1352 1353 1355 1347 1348 1357 1359 1360 + 1357 1359 1371 1357 1355 1356 1358 1357 1355 + 1358 1357 1359 1359 1371 1372 1359 1371 1373 + 1359 1361 1362 1359 1361 1367 1359 1361 1363 + 1359 1357 1355 1361 1367 1370 1361 1367 1369 + 1361 1367 1368 1361 1363 1366 1361 1363 1365 + 1361 1363 1364 1361 1359 1360 1361 1359 1371 + 1361 1359 1357 1363 1361 1362 1363 1361 1367 + 1364 1363 1366 1364 1363 1365 1365 1363 1366 + 1367 1361 1362 1368 1367 1370 1368 1367 1369 + 1369 1367 1370 1371 1359 1360 1373 1377 1378 + 1373 1377 1379 1373 1374 1376 1373 1374 1375 + 1373 1371 1372 1374 1382 1384 1374 1382 1383 + 1374 1373 1371 1375 1374 1376 1377 1385 1386 + 1377 1385 1387 1377 1379 1381 1377 1379 1380 + 1377 1379 1382 1377 1373 1371 1377 1373 1374 + 1379 1382 1384 1379 1382 1383 1379 1382 1374 + 1379 1377 1378 1380 1379 1381 1382 1379 1381 + 1382 1379 1380 1382 1374 1376 1382 1374 1375 + 1382 1374 1373 1383 1382 1384 1385 1377 1378 + 1385 1377 1379 1385 1377 1373 1387 1389 1390 + 1387 1389 1400 1387 1385 1386 1388 1387 1385 + 1388 1387 1389 1389 1400 1401 1389 1400 1402 + 1389 1391 1393 1389 1391 1392 1389 1391 1394 + 1389 1387 1385 1391 1394 1396 1391 1394 1395 + 1391 1394 1397 1391 1389 1390 1391 1389 1400 + 1391 1389 1387 1392 1391 1393 1394 1397 1398 + 1394 1397 1399 1394 1391 1393 1394 1391 1392 + 1395 1394 1396 1397 1394 1396 1397 1394 1395 + 1399 1397 1398 1400 1389 1390 1402 1404 1405 + 1402 1404 1419 1402 1400 1401 1403 1402 1400 + 1403 1402 1404 1404 1419 1420 1404 1419 1421 + 1404 1406 1407 1404 1406 1408 1404 1406 1412 + 1404 1402 1400 1406 1412 1414 1406 1412 1413 + 1406 1412 1415 1406 1408 1411 1406 1408 1410 + 1406 1408 1409 1406 1404 1405 1406 1404 1419 + 1406 1404 1402 1408 1406 1407 1409 1408 1411 + 1409 1408 1410 1410 1408 1411 1412 1415 1418 + 1412 1415 1417 1412 1415 1416 1412 1406 1407 + 1412 1406 1408 1413 1412 1414 1415 1412 1414 + 1415 1412 1413 1416 1415 1418 1416 1415 1417 + 1417 1415 1418 1419 1404 1405 1421 1423 1424 + 1421 1423 1436 1421 1419 1420 1422 1421 1419 + 1422 1421 1423 1423 1436 1437 1423 1436 1438 + 1423 1425 1427 1423 1425 1426 1423 1425 1428 + 1423 1421 1419 1425 1428 1430 1425 1428 1429 + 1425 1428 1431 1425 1423 1424 1425 1423 1436 + 1425 1423 1421 1426 1425 1427 1428 1431 1432 + 1428 1425 1427 1428 1425 1426 1429 1428 1430 + 1431 1432 1435 1431 1432 1434 1431 1432 1433 + 1431 1428 1430 1431 1428 1429 1433 1432 1435 + 1433 1432 1434 1434 1432 1435 1436 1423 1424 + 1438 1440 1441 1438 1440 1452 1438 1436 1437 + 1439 1438 1436 1439 1438 1440 1440 1452 1453 + 1440 1452 1454 1440 1442 1443 1440 1442 1448 + 1440 1442 1444 1440 1438 1436 1442 1448 1451 + 1442 1448 1450 1442 1448 1449 1442 1444 1447 + 1442 1444 1446 1442 1444 1445 1442 1440 1441 + 1442 1440 1452 1442 1440 1438 1444 1442 1443 + 1444 1442 1448 1445 1444 1447 1445 1444 1446 + 1446 1444 1447 1448 1442 1443 1449 1448 1451 + 1449 1448 1450 1450 1448 1451 1452 1440 1441 + 1454 1456 1457 1454 1456 1471 1454 1452 1453 + 1455 1454 1452 1455 1454 1456 1456 1471 1472 + 1456 1471 1473 1456 1458 1459 1456 1458 1460 + 1456 1458 1464 1456 1454 1452 1458 1464 1466 + 1458 1464 1465 1458 1464 1467 1458 1460 1463 + 1458 1460 1462 1458 1460 1461 1458 1456 1457 + 1458 1456 1471 1458 1456 1454 1460 1458 1459 + 1461 1460 1463 1461 1460 1462 1462 1460 1463 + 1464 1467 1470 1464 1467 1469 1464 1467 1468 + 1464 1458 1459 1464 1458 1460 1465 1464 1466 + 1467 1464 1466 1467 1464 1465 1468 1467 1470 + 1468 1467 1469 1469 1467 1470 1471 1456 1457 + 1473 1475 1477 1473 1475 1476 1473 1475 1478 + 1473 1471 1472 1474 1473 1471 1474 1473 1475 + 1475 1478 1479 1475 1478 1480 1475 1473 1471 + 1476 1475 1477 1478 1475 1477 1478 1475 1476 + 1480 1482 1484 1480 1482 1483 1480 1482 1485 + 1480 1478 1479 1481 1480 1478 1481 1480 1482 + 1482 1485 1486 1482 1485 1487 1482 1480 1478 + 1483 1482 1484 1485 1482 1484 1485 1482 1483 + 1487 1489 1491 1487 1489 1490 1487 1489 1492 + 1487 1485 1486 1488 1487 1485 1488 1487 1489 + 1489 1492 1493 1489 1492 1494 1489 1487 1485 + 1490 1489 1491 1492 1489 1491 1492 1489 1490 + 1494 1496 1497 1494 1496 1516 1494 1492 1493 + 1495 1494 1492 1495 1494 1496 1496 1516 1517 + 1496 1516 1518 1496 1498 1500 1496 1498 1499 + 1496 1498 1501 1496 1494 1492 1498 1501 1503 + 1498 1501 1502 1498 1501 1504 1498 1496 1497 + 1498 1496 1516 1498 1496 1494 1499 1498 1500 + 1501 1504 1506 1501 1504 1505 1501 1504 1507 + 1501 1498 1500 1501 1498 1499 1502 1501 1503 + 1504 1507 1508 1504 1507 1509 1504 1501 1503 + 1504 1501 1502 1505 1504 1506 1507 1509 1510 + 1507 1509 1513 1507 1504 1506 1507 1504 1505 + 1509 1513 1515 1509 1513 1514 1509 1507 1508 + 1511 1510 1509 1511 1510 1512 1512 1510 1509 + 1513 1509 1510 1514 1513 1515 1516 1496 1497 + 1518 1520 1521 1518 1520 1532 1518 1516 1517 + 1519 1518 1516 1519 1518 1520 1520 1532 1533 + 1520 1532 1534 1520 1522 1523 1520 1522 1528 + 1520 1522 1524 1520 1518 1516 1522 1528 1531 + 1522 1528 1530 1522 1528 1529 1522 1524 1527 + 1522 1524 1526 1522 1524 1525 1522 1520 1521 + 1522 1520 1532 1522 1520 1518 1524 1522 1523 + 1524 1522 1528 1525 1524 1527 1525 1524 1526 + 1526 1524 1527 1528 1522 1523 1529 1528 1531 + 1529 1528 1530 1530 1528 1531 1532 1520 1521 + 1534 1536 1537 1534 1536 1553 1534 1532 1533 + 1535 1534 1532 1535 1534 1536 1536 1553 1554 + 1536 1553 1555 1536 1538 1540 1536 1538 1539 + 1536 1538 1541 1536 1534 1532 1538 1541 1542 + 1538 1541 1549 1538 1536 1537 1538 1536 1553 + 1538 1536 1534 1539 1538 1540 1541 1549 1551 + 1541 1549 1550 1541 1538 1540 1541 1538 1539 + 1542 1544 1546 1542 1544 1545 1543 1542 1541 + 1544 1542 1541 1544 1542 1543 1545 1544 1546 + 1546 1551 1549 1546 1551 1552 1546 1547 1548 + 1547 1546 1544 1549 1541 1542 1550 1549 1551 + 1551 1546 1544 1551 1546 1547 1552 1551 1549 + 1553 1536 1537 1555 1557 1558 1555 1557 1568 + 1555 1553 1554 1556 1555 1553 1556 1555 1557 + 1557 1568 1569 1557 1568 1570 1557 1559 1561 + 1557 1559 1560 1557 1559 1562 1557 1555 1553 + 1559 1562 1564 1559 1562 1563 1559 1562 1565 + 1559 1557 1558 1559 1557 1568 1559 1557 1555 + 1560 1559 1561 1562 1565 1566 1562 1565 1567 + 1562 1559 1561 1562 1559 1560 1563 1562 1564 + 1565 1562 1564 1565 1562 1563 1567 1565 1566 + 1568 1557 1558 1570 1572 1573 1570 1572 1585 + 1570 1568 1569 1571 1570 1568 1571 1570 1572 + 1572 1585 1586 1572 1585 1587 1572 1574 1576 + 1572 1574 1575 1572 1574 1577 1572 1570 1568 + 1574 1577 1579 1574 1577 1578 1574 1577 1580 + 1574 1572 1573 1574 1572 1585 1574 1572 1570 + 1575 1574 1576 1577 1580 1581 1577 1580 1582 + 1577 1574 1576 1577 1574 1575 1578 1577 1579 + 1580 1582 1584 1580 1582 1583 1580 1577 1579 + 1580 1577 1578 1582 1580 1581 1583 1582 1584 + 1585 1572 1573 1587 1589 1590 1587 1589 1605 + 1587 1585 1586 1588 1587 1585 1588 1587 1589 + 1589 1605 1606 1589 1605 1607 1589 1591 1593 + 1589 1591 1592 1589 1591 1594 1589 1587 1585 + 1591 1594 1595 1591 1594 1601 1591 1589 1590 + 1591 1589 1605 1591 1589 1587 1592 1591 1593 + 1594 1601 1603 1594 1601 1602 1594 1591 1593 + 1594 1591 1592 1595 1597 1599 1595 1597 1598 + 1596 1595 1594 1597 1599 1600 1597 1595 1594 + 1597 1595 1596 1598 1597 1599 1599 1603 1604 + 1599 1603 1601 1601 1603 1604 1601 1594 1595 + 1602 1601 1603 1603 1599 1600 1603 1599 1597 + 1605 1589 1590 1607 1609 1610 1607 1609 1624 + 1607 1605 1606 1608 1607 1605 1608 1607 1609 + 1609 1624 1625 1609 1624 1626 1609 1611 1613 + 1609 1611 1612 1609 1611 1614 1609 1607 1605 + 1611 1614 1615 1611 1614 1620 1611 1614 1616 + 1611 1609 1610 1611 1609 1624 1611 1609 1607 + 1612 1611 1613 1614 1620 1623 1614 1620 1622 + 1614 1620 1621 1614 1616 1619 1614 1616 1618 + 1614 1616 1617 1614 1611 1613 1614 1611 1612 + 1616 1614 1615 1616 1614 1620 1617 1616 1619 + 1617 1616 1618 1618 1616 1619 1620 1614 1615 + 1621 1620 1623 1621 1620 1622 1622 1620 1623 + 1624 1609 1610 1626 1630 1631 1626 1630 1632 + 1626 1627 1629 1626 1627 1628 1626 1624 1625 + 1627 1635 1637 1627 1635 1636 1627 1626 1624 + 1628 1627 1629 1630 1638 1639 1630 1638 1640 + 1630 1632 1634 1630 1632 1633 1630 1632 1635 + 1630 1626 1624 1630 1626 1627 1632 1635 1637 + 1632 1635 1636 1632 1635 1627 1632 1630 1631 + 1633 1632 1634 1635 1632 1634 1635 1632 1633 + 1635 1627 1629 1635 1627 1628 1635 1627 1626 + 1636 1635 1637 1638 1630 1631 1638 1630 1632 + 1638 1630 1626 1640 1642 1643 1640 1642 1660 + 1640 1638 1639 1641 1640 1638 1641 1640 1642 + 1642 1660 1661 1642 1660 1662 1642 1644 1646 + 1642 1644 1645 1642 1644 1647 1642 1640 1638 + 1644 1647 1649 1644 1647 1648 1644 1647 1650 + 1644 1642 1643 1644 1642 1660 1644 1642 1640 + 1645 1644 1646 1647 1650 1652 1647 1650 1651 + 1647 1650 1653 1647 1644 1646 1647 1644 1645 + 1648 1647 1649 1650 1653 1655 1650 1653 1654 + 1650 1653 1656 1650 1647 1649 1650 1647 1648 + 1651 1650 1652 1653 1656 1659 1653 1656 1658 + 1653 1656 1657 1653 1650 1652 1653 1650 1651 + 1654 1653 1655 1656 1653 1655 1656 1653 1654 + 1657 1656 1659 1657 1656 1658 1658 1656 1659 + 1660 1642 1643 1662 1664 1665 1662 1664 1670 + 1662 1660 1661 1663 1662 1660 1663 1662 1664 + 1664 1670 1671 1664 1670 1672 1664 1666 1669 + 1664 1666 1668 1664 1666 1667 1664 1662 1660 + 1666 1664 1665 1666 1664 1670 1666 1664 1662 + 1667 1666 1669 1667 1666 1668 1668 1666 1669 + 1670 1664 1665 1672 1674 1675 1672 1674 1687 + 1672 1670 1671 1673 1672 1670 1673 1672 1674 + 1674 1687 1688 1674 1687 1689 1674 1676 1678 + 1674 1676 1677 1674 1676 1679 1674 1672 1670 + 1676 1679 1681 1676 1679 1680 1676 1679 1682 + 1676 1674 1675 1676 1674 1687 1676 1674 1672 + 1677 1676 1678 1679 1682 1683 1679 1682 1684 + 1679 1676 1678 1679 1676 1677 1680 1679 1681 + 1682 1684 1686 1682 1684 1685 1682 1679 1681 + 1682 1679 1680 1684 1682 1683 1685 1684 1686 + 1687 1674 1675 1689 1691 1692 1689 1691 1709 + 1689 1687 1688 1690 1689 1687 1690 1689 1691 + 1691 1709 1710 1691 1709 1711 1691 1693 1695 + 1691 1693 1694 1691 1693 1696 1691 1689 1687 + 1693 1696 1698 1693 1696 1697 1693 1696 1699 + 1693 1691 1692 1693 1691 1709 1693 1691 1689 + 1694 1693 1695 1696 1699 1701 1696 1699 1700 + 1696 1699 1702 1696 1693 1695 1696 1693 1694 + 1697 1696 1698 1699 1702 1704 1699 1702 1703 + 1699 1702 1705 1699 1696 1698 1699 1696 1697 + 1700 1699 1701 1702 1705 1708 1702 1705 1707 + 1702 1705 1706 1702 1699 1701 1702 1699 1700 + 1703 1702 1704 1705 1702 1704 1705 1702 1703 + 1706 1705 1708 1706 1705 1707 1707 1705 1708 + 1709 1691 1692 1711 1713 1714 1711 1713 1728 + 1711 1709 1710 1712 1711 1709 1712 1711 1713 + 1713 1728 1729 1713 1728 1730 1713 1715 1717 + 1713 1715 1716 1713 1715 1718 1713 1711 1709 + 1715 1718 1719 1715 1718 1724 1715 1718 1720 + 1715 1713 1714 1715 1713 1728 1715 1713 1711 + 1716 1715 1717 1718 1724 1727 1718 1724 1726 + 1718 1724 1725 1718 1720 1723 1718 1720 1722 + 1718 1720 1721 1718 1715 1717 1718 1715 1716 + 1720 1718 1719 1720 1718 1724 1721 1720 1723 + 1721 1720 1722 1722 1720 1723 1724 1718 1719 + 1725 1724 1727 1725 1724 1726 1726 1724 1727 + 1728 1713 1714 1730 1732 1733 1730 1732 1749 + 1730 1728 1729 1731 1730 1728 1731 1730 1732 + 1732 1749 1750 1732 1749 1751 1732 1734 1736 + 1732 1734 1735 1732 1734 1737 1732 1730 1728 + 1734 1737 1738 1734 1737 1745 1734 1732 1733 + 1734 1732 1749 1734 1732 1730 1735 1734 1736 + 1737 1745 1747 1737 1745 1746 1737 1734 1736 + 1737 1734 1735 1738 1740 1742 1738 1740 1741 + 1739 1738 1737 1740 1738 1737 1740 1738 1739 + 1741 1740 1742 1742 1747 1745 1742 1747 1748 + 1742 1743 1744 1743 1742 1740 1745 1737 1738 + 1746 1745 1747 1747 1742 1740 1747 1742 1743 + 1748 1747 1745 1749 1732 1733 1751 1753 1754 + 1751 1753 1768 1751 1749 1750 1752 1751 1749 + 1752 1751 1753 1753 1768 1769 1753 1768 1770 + 1753 1755 1757 1753 1755 1756 1753 1755 1758 + 1753 1751 1749 1755 1758 1759 1755 1758 1764 + 1755 1758 1760 1755 1753 1754 1755 1753 1768 + 1755 1753 1751 1756 1755 1757 1758 1764 1767 + 1758 1764 1766 1758 1764 1765 1758 1760 1763 + 1758 1760 1762 1758 1760 1761 1758 1755 1757 + 1758 1755 1756 1760 1758 1759 1760 1758 1764 + 1761 1760 1763 1761 1760 1762 1762 1760 1763 + 1764 1758 1759 1765 1764 1767 1765 1764 1766 + 1766 1764 1767 1768 1753 1754 1770 1772 1773 + 1770 1772 1782 1770 1768 1769 1771 1770 1768 + 1771 1770 1772 1772 1782 1783 1772 1782 1784 + 1772 1774 1775 1772 1774 1778 1772 1774 1776 + 1772 1770 1768 1774 1778 1781 1774 1778 1780 + 1774 1778 1779 1774 1776 1777 1774 1772 1773 + 1774 1772 1782 1774 1772 1770 1776 1774 1775 + 1776 1774 1778 1778 1774 1775 1779 1778 1781 + 1779 1778 1780 1780 1778 1781 1782 1772 1773 + 1784 1786 1787 1784 1786 1799 1784 1782 1783 + 1785 1784 1782 1785 1784 1786 1786 1799 1800 + 1786 1799 1801 1786 1788 1790 1786 1788 1789 + 1786 1788 1793 1786 1784 1782 1788 1793 1797 + 1788 1793 1791 1788 1786 1787 1788 1786 1799 + 1788 1786 1784 1789 1788 1790 1791 1794 1796 + 1791 1794 1795 1791 1793 1797 1793 1791 1792 + 1793 1791 1794 1793 1788 1790 1793 1788 1789 + 1794 1791 1792 1795 1794 1796 1796 1797 1793 + 1796 1797 1798 1797 1796 1794 1798 1797 1793 + 1799 1786 1787 1801 1803 1804 1801 1803 1818 + 1801 1799 1800 1802 1801 1799 1802 1801 1803 + 1803 1818 1819 1803 1818 1820 1803 1805 1806 + 1803 1805 1807 1803 1805 1811 1803 1801 1799 + 1805 1811 1813 1805 1811 1812 1805 1811 1814 + 1805 1807 1810 1805 1807 1809 1805 1807 1808 + 1805 1803 1804 1805 1803 1818 1805 1803 1801 + 1807 1805 1806 1808 1807 1810 1808 1807 1809 + 1809 1807 1810 1811 1814 1817 1811 1814 1816 + 1811 1814 1815 1811 1805 1806 1811 1805 1807 + 1812 1811 1813 1814 1811 1813 1814 1811 1812 + 1815 1814 1817 1815 1814 1816 1816 1814 1817 + 1818 1803 1804 1820 1822 1823 1820 1822 1830 + 1820 1818 1819 1821 1820 1818 1821 1820 1822 + 1822 1830 1831 1822 1830 1832 1822 1824 1826 + 1822 1824 1825 1822 1824 1827 1822 1820 1818 + 1824 1827 1828 1824 1827 1829 1824 1822 1823 + 1824 1822 1830 1824 1822 1820 1825 1824 1826 + 1827 1824 1826 1827 1824 1825 1829 1827 1828 + 1830 1822 1823 1832 1834 1835 1832 1834 1840 + 1832 1830 1831 1833 1832 1830 1833 1832 1834 + 1834 1840 1841 1834 1840 1842 1834 1836 1839 + 1834 1836 1838 1834 1836 1837 1834 1832 1830 + 1836 1834 1835 1836 1834 1840 1836 1834 1832 + 1837 1836 1839 1837 1836 1838 1838 1836 1839 + 1840 1834 1835 1842 1844 1845 1842 1844 1855 + 1842 1840 1841 1843 1842 1840 1843 1842 1844 + 1844 1855 1856 1844 1855 1857 1844 1846 1848 + 1844 1846 1847 1844 1846 1849 1844 1842 1840 + 1846 1849 1851 1846 1849 1850 1846 1849 1852 + 1846 1844 1845 1846 1844 1855 1846 1844 1842 + 1847 1846 1848 1849 1852 1853 1849 1852 1854 + 1849 1846 1848 1849 1846 1847 1850 1849 1851 + 1852 1849 1851 1852 1849 1850 1854 1852 1853 + 1855 1844 1845 1857 1859 1860 1857 1859 1871 + 1857 1855 1856 1858 1857 1855 1858 1857 1859 + 1859 1871 1872 1859 1871 1873 1859 1861 1862 + 1859 1861 1867 1859 1861 1863 1859 1857 1855 + 1861 1867 1870 1861 1867 1869 1861 1867 1868 + 1861 1863 1866 1861 1863 1865 1861 1863 1864 + 1861 1859 1860 1861 1859 1871 1861 1859 1857 + 1863 1861 1862 1863 1861 1867 1864 1863 1866 + 1864 1863 1865 1865 1863 1866 1867 1861 1862 + 1868 1867 1870 1868 1867 1869 1869 1867 1870 + 1871 1859 1860 1873 1875 1876 1873 1875 1886 + 1873 1871 1872 1874 1873 1871 1874 1873 1875 + 1875 1886 1887 1875 1886 1888 1875 1877 1879 + 1875 1877 1878 1875 1877 1880 1875 1873 1871 + 1877 1880 1882 1877 1880 1881 1877 1880 1883 + 1877 1875 1876 1877 1875 1886 1877 1875 1873 + 1878 1877 1879 1880 1883 1884 1880 1883 1885 + 1880 1877 1879 1880 1877 1878 1881 1880 1882 + 1883 1880 1882 1883 1880 1881 1885 1883 1884 + 1886 1875 1876 1888 1890 1892 1888 1890 1891 + 1888 1890 1893 1888 1886 1887 1889 1888 1886 + 1889 1888 1890 1890 1893 1894 1890 1893 1895 + 1890 1888 1886 1891 1890 1892 1893 1890 1892 + 1893 1890 1891 1895 1897 1898 1895 1897 1905 + 1895 1893 1894 1896 1895 1893 1896 1895 1897 + 1897 1905 1906 1897 1905 1907 1897 1899 1901 + 1897 1899 1900 1897 1899 1902 1897 1895 1893 + 1899 1902 1903 1899 1902 1904 1899 1897 1898 + 1899 1897 1905 1899 1897 1895 1900 1899 1901 + 1902 1899 1901 1902 1899 1900 1904 1902 1903 + 1905 1897 1898 1907 1909 1910 1907 1909 1919 + 1907 1905 1906 1908 1907 1905 1908 1907 1909 + 1909 1919 1920 1909 1919 1921 1909 1911 1912 + 1909 1911 1915 1909 1911 1913 1909 1907 1905 + 1911 1915 1918 1911 1915 1917 1911 1915 1916 + 1911 1913 1914 1911 1909 1910 1911 1909 1919 + 1911 1909 1907 1913 1911 1912 1913 1911 1915 + 1915 1911 1912 1916 1915 1918 1916 1915 1917 + 1917 1915 1918 1919 1909 1910 1921 1923 1924 + 1921 1923 1936 1921 1919 1920 1922 1921 1919 + 1922 1921 1923 1923 1936 1937 1923 1936 1938 + 1923 1925 1927 1923 1925 1926 1923 1925 1930 + 1923 1921 1919 1925 1930 1934 1925 1930 1928 + 1925 1923 1924 1925 1923 1936 1925 1923 1921 + 1926 1925 1927 1928 1931 1933 1928 1931 1932 + 1928 1930 1934 1930 1928 1929 1930 1928 1931 + 1930 1925 1927 1930 1925 1926 1931 1928 1929 + 1932 1931 1933 1933 1934 1930 1933 1934 1935 + 1934 1933 1931 1935 1934 1930 1936 1923 1924 + 1938 1940 1941 1938 1940 1956 1938 1936 1937 + 1939 1938 1936 1939 1938 1940 1940 1956 1957 + 1940 1956 1958 1940 1942 1944 1940 1942 1943 + 1940 1942 1945 1940 1938 1936 1942 1945 1946 + 1942 1945 1952 1942 1940 1941 1942 1940 1956 + 1942 1940 1938 1943 1942 1944 1945 1952 1954 + 1945 1952 1953 1945 1942 1944 1945 1942 1943 + 1946 1948 1950 1946 1948 1949 1947 1946 1945 + 1948 1950 1951 1948 1946 1945 1948 1946 1947 + 1949 1948 1950 1950 1954 1955 1950 1954 1952 + 1952 1954 1955 1952 1945 1946 1953 1952 1954 + 1954 1950 1951 1954 1950 1948 1956 1940 1941 + 1958 1962 1963 1958 1962 1964 1958 1959 1961 + 1958 1959 1960 1958 1956 1957 1959 1967 1969 + 1959 1967 1968 1959 1958 1956 1960 1959 1961 + 1962 1970 1971 1962 1970 1972 1962 1964 1966 + 1962 1964 1965 1962 1964 1967 1962 1958 1956 + 1962 1958 1959 1964 1967 1969 1964 1967 1968 + 1964 1967 1959 1964 1962 1963 1965 1964 1966 + 1967 1964 1966 1967 1964 1965 1967 1959 1961 + 1967 1959 1960 1967 1959 1958 1968 1967 1969 + 1970 1962 1963 1970 1962 1964 1970 1962 1958 + 1972 1974 1975 1972 1974 1982 1972 1970 1971 + 1973 1972 1970 1973 1972 1974 1974 1982 1983 + 1974 1982 1984 1974 1976 1978 1974 1976 1977 + 1974 1976 1979 1974 1972 1970 1976 1979 1980 + 1976 1979 1981 1976 1974 1975 1976 1974 1982 + 1976 1974 1972 1977 1976 1978 1979 1976 1978 + 1979 1976 1977 1981 1979 1980 1982 1974 1975 + 1984 1986 1987 1984 1986 2003 1984 1982 1983 + 1985 1984 1982 1985 1984 1986 1986 2003 2004 + 1986 2003 2005 1986 1988 1990 1986 1988 1989 + 1986 1988 1991 1986 1984 1982 1988 1991 1992 + 1988 1991 1999 1988 1986 1987 1988 1986 2003 + 1988 1986 1984 1989 1988 1990 1991 1999 2001 + 1991 1999 2000 1991 1988 1990 1991 1988 1989 + 1992 1994 1996 1992 1994 1995 1993 1992 1991 + 1994 1992 1991 1994 1992 1993 1995 1994 1996 + 1996 2001 1999 1996 2001 2002 1996 1997 1998 + 1997 1996 1994 1999 1991 1992 2000 1999 2001 + 2001 1996 1994 2001 1996 1997 2002 2001 1999 + 2003 1986 1987 2005 2007 2008 2005 2007 2018 + 2005 2003 2004 2006 2005 2003 2006 2005 2007 + 2007 2018 2019 2007 2018 2020 2007 2009 2011 + 2007 2009 2010 2007 2009 2012 2007 2005 2003 + 2009 2012 2014 2009 2012 2013 2009 2012 2015 + 2009 2007 2008 2009 2007 2018 2009 2007 2005 + 2010 2009 2011 2012 2015 2016 2012 2015 2017 + 2012 2009 2011 2012 2009 2010 2013 2012 2014 + 2015 2012 2014 2015 2012 2013 2017 2015 2016 + 2018 2007 2008 2020 2024 2025 2020 2024 2026 + 2020 2021 2023 2020 2021 2022 2020 2018 2019 + 2021 2029 2031 2021 2029 2030 2021 2020 2018 + 2022 2021 2023 2024 2032 2033 2024 2032 2034 + 2024 2026 2028 2024 2026 2027 2024 2026 2029 + 2024 2020 2018 2024 2020 2021 2026 2029 2031 + 2026 2029 2030 2026 2029 2021 2026 2024 2025 + 2027 2026 2028 2029 2026 2028 2029 2026 2027 + 2029 2021 2023 2029 2021 2022 2029 2021 2020 + 2030 2029 2031 2032 2024 2025 2032 2024 2026 + 2032 2024 2020 2034 2036 2037 2034 2036 2044 + 2034 2032 2033 2035 2034 2032 2035 2034 2036 + 2036 2044 2045 2036 2044 2046 2036 2038 2040 + 2036 2038 2039 2036 2038 2041 2036 2034 2032 + 2038 2041 2042 2038 2041 2043 2038 2036 2037 + 2038 2036 2044 2038 2036 2034 2039 2038 2040 + 2041 2038 2040 2041 2038 2039 2043 2041 2042 + 2044 2036 2037 2046 2048 2049 2046 2048 2056 + 2046 2044 2045 2047 2046 2044 2047 2046 2048 + 2048 2056 2057 2048 2056 2058 2048 2050 2052 + 2048 2050 2051 2048 2050 2053 2048 2046 2044 + 2050 2053 2054 2050 2053 2055 2050 2048 2049 + 2050 2048 2056 2050 2048 2046 2051 2050 2052 + 2053 2050 2052 2053 2050 2051 2055 2053 2054 + 2056 2048 2049 2058 2060 2061 2058 2060 2080 + 2058 2056 2057 2059 2058 2056 2059 2058 2060 + 2060 2080 2081 2060 2080 2082 2060 2062 2064 + 2060 2062 2063 2060 2062 2065 2060 2058 2056 + 2062 2065 2066 2062 2065 2071 2062 2060 2061 + 2062 2060 2080 2062 2060 2058 2063 2062 2064 + 2065 2071 2070 2065 2071 2072 2065 2062 2064 + 2065 2062 2063 2066 2068 2069 2066 2068 2070 + 2067 2066 2065 2068 2070 2071 2068 2066 2065 + 2068 2066 2067 2070 2076 2078 2070 2076 2077 + 2070 2068 2069 2071 2072 2074 2071 2072 2073 + 2071 2065 2066 2072 2071 2070 2073 2072 2074 + 2074 2078 2076 2074 2078 2079 2075 2074 2072 + 2076 2070 2071 2076 2070 2068 2077 2076 2078 + 2078 2074 2072 2078 2074 2075 2079 2078 2076 + 2080 2060 2061 2082 2084 2085 2082 2084 2095 + 2082 2080 2081 2083 2082 2080 2083 2082 2084 + 2084 2095 2096 2084 2095 2097 2084 2086 2088 + 2084 2086 2087 2084 2086 2089 2084 2082 2080 + 2086 2089 2091 2086 2089 2090 2086 2089 2092 + 2086 2084 2085 2086 2084 2095 2086 2084 2082 + 2087 2086 2088 2089 2092 2093 2089 2092 2094 + 2089 2086 2088 2089 2086 2087 2090 2089 2091 + 2092 2089 2091 2092 2089 2090 2094 2092 2093 + 2095 2084 2085 2097 2099 2100 2097 2099 2106 + 2097 2095 2096 2098 2097 2095 2098 2097 2099 + 2099 2106 2107 2099 2106 2108 2099 2101 2103 + 2099 2101 2102 2099 2101 2104 2099 2097 2095 + 2101 2104 2105 2101 2099 2100 2101 2099 2106 + 2101 2099 2097 2102 2101 2103 2104 2101 2103 + 2104 2101 2102 2106 2099 2100 2108 2110 2111 + 2108 2110 2122 2108 2106 2107 2109 2108 2106 + 2109 2108 2110 2110 2122 2123 2110 2122 2124 + 2110 2112 2113 2110 2112 2118 2110 2112 2114 + 2110 2108 2106 2112 2118 2121 2112 2118 2120 + 2112 2118 2119 2112 2114 2117 2112 2114 2116 + 2112 2114 2115 2112 2110 2111 2112 2110 2122 + 2112 2110 2108 2114 2112 2113 2114 2112 2118 + 2115 2114 2117 2115 2114 2116 2116 2114 2117 + 2118 2112 2113 2119 2118 2121 2119 2118 2120 + 2120 2118 2121 2122 2110 2111 2124 2126 2127 + 2124 2126 2142 2124 2122 2123 2125 2124 2122 + 2125 2124 2126 2126 2142 2143 2126 2142 2144 + 2126 2128 2130 2126 2128 2129 2126 2128 2131 + 2126 2124 2122 2128 2131 2132 2128 2131 2138 + 2128 2126 2127 2128 2126 2142 2128 2126 2124 + 2129 2128 2130 2131 2138 2140 2131 2138 2139 + 2131 2128 2130 2131 2128 2129 2132 2134 2136 + 2132 2134 2135 2133 2132 2131 2134 2136 2137 + 2134 2132 2131 2134 2132 2133 2135 2134 2136 + 2136 2140 2141 2136 2140 2138 2138 2140 2141 + 2138 2131 2132 2139 2138 2140 2140 2136 2137 + 2140 2136 2134 2142 2126 2127 2144 2146 2147 + 2144 2146 2153 2144 2142 2143 2145 2144 2142 + 2145 2144 2146 2146 2153 2154 2146 2153 2155 + 2146 2148 2150 2146 2148 2149 2146 2148 2151 + 2146 2144 2142 2148 2151 2152 2148 2146 2147 + 2148 2146 2153 2148 2146 2144 2149 2148 2150 + 2151 2148 2150 2151 2148 2149 2153 2146 2147 + 2155 2157 2158 2155 2157 2168 2155 2153 2154 + 2156 2155 2153 2156 2155 2157 2157 2168 2169 + 2157 2168 2170 2157 2159 2161 2157 2159 2160 + 2157 2159 2162 2157 2155 2153 2159 2162 2164 + 2159 2162 2163 2159 2162 2165 2159 2157 2158 + 2159 2157 2168 2159 2157 2155 2160 2159 2161 + 2162 2165 2166 2162 2165 2167 2162 2159 2161 + 2162 2159 2160 2163 2162 2164 2165 2162 2164 + 2165 2162 2163 2167 2165 2166 2168 2157 2158 + 2170 2172 2173 2170 2172 2188 2170 2168 2169 + 2171 2170 2168 2171 2170 2172 2172 2188 2189 + 2172 2188 2190 2172 2174 2176 2172 2174 2175 + 2172 2174 2177 2172 2170 2168 2174 2177 2178 + 2174 2177 2184 2174 2172 2173 2174 2172 2188 + 2174 2172 2170 2175 2174 2176 2177 2184 2186 + 2177 2184 2185 2177 2174 2176 2177 2174 2175 + 2178 2180 2182 2178 2180 2181 2179 2178 2177 + 2180 2182 2183 2180 2178 2177 2180 2178 2179 + 2181 2180 2182 2182 2186 2187 2182 2186 2184 + 2184 2186 2187 2184 2177 2178 2185 2184 2186 + 2186 2182 2183 2186 2182 2180 2188 2172 2173 + 2190 2192 2193 2190 2192 2205 2190 2188 2189 + 2191 2190 2188 2191 2190 2192 2192 2205 2206 + 2192 2205 2207 2192 2194 2196 2192 2194 2195 + 2192 2194 2199 2192 2190 2188 2194 2199 2203 + 2194 2199 2197 2194 2192 2193 2194 2192 2205 + 2194 2192 2190 2195 2194 2196 2197 2200 2202 + 2197 2200 2201 2197 2199 2203 2199 2197 2198 + 2199 2197 2200 2199 2194 2196 2199 2194 2195 + 2200 2197 2198 2201 2200 2202 2202 2203 2199 + 2202 2203 2204 2203 2202 2200 2204 2203 2199 + 2205 2192 2193 2207 2209 2210 2207 2209 2217 + 2207 2205 2206 2208 2207 2205 2208 2207 2209 + 2209 2217 2218 2209 2217 2219 2209 2211 2213 + 2209 2211 2212 2209 2211 2214 2209 2207 2205 + 2211 2214 2215 2211 2214 2216 2211 2209 2210 + 2211 2209 2217 2211 2209 2207 2212 2211 2213 + 2214 2211 2213 2214 2211 2212 2216 2214 2215 + 2217 2209 2210 2219 2221 2222 2219 2221 2227 + 2219 2217 2218 2220 2219 2217 2220 2219 2221 + 2221 2227 2228 2221 2227 2229 2221 2223 2226 + 2221 2223 2225 2221 2223 2224 2221 2219 2217 + 2223 2221 2222 2223 2221 2227 2223 2221 2219 + 2224 2223 2226 2224 2223 2225 2225 2223 2226 + 2227 2221 2222 2229 2231 2232 2229 2231 2239 + 2229 2227 2228 2230 2229 2227 2230 2229 2231 + 2231 2239 2240 2231 2239 2241 2231 2233 2235 + 2231 2233 2234 2231 2233 2236 2231 2229 2227 + 2233 2236 2237 2233 2236 2238 2233 2231 2232 + 2233 2231 2239 2233 2231 2229 2234 2233 2235 + 2236 2233 2235 2236 2233 2234 2238 2236 2237 + 2239 2231 2232 2241 2243 2244 2241 2243 2249 + 2241 2239 2240 2242 2241 2239 2242 2241 2243 + 2243 2249 2250 2243 2249 2251 2243 2245 2248 + 2243 2245 2247 2243 2245 2246 2243 2241 2239 + 2245 2243 2244 2245 2243 2249 2245 2243 2241 + 2246 2245 2248 2246 2245 2247 2247 2245 2248 + 2249 2243 2244 2251 2253 2254 2251 2253 2266 + 2251 2249 2250 2252 2251 2249 2252 2251 2253 + 2253 2266 2267 2253 2266 2268 2253 2255 2257 + 2253 2255 2256 2253 2255 2258 2253 2251 2249 + 2255 2258 2260 2255 2258 2259 2255 2258 2261 + 2255 2253 2254 2255 2253 2266 2255 2253 2251 + 2256 2255 2257 2258 2261 2262 2258 2261 2263 + 2258 2255 2257 2258 2255 2256 2259 2258 2260 + 2261 2263 2265 2261 2263 2264 2261 2258 2260 + 2261 2258 2259 2263 2261 2262 2264 2263 2265 + 2266 2253 2254 2268 2270 2271 2268 2270 2280 + 2268 2266 2267 2269 2268 2266 2269 2268 2270 + 2270 2280 2281 2270 2280 2282 2270 2272 2274 + 2270 2272 2273 2270 2272 2275 2270 2268 2266 + 2272 2275 2276 2272 2275 2277 2272 2270 2271 + 2272 2270 2280 2272 2270 2268 2273 2272 2274 + 2275 2277 2279 2275 2277 2278 2275 2272 2274 + 2275 2272 2273 2277 2275 2276 2278 2277 2279 + 2280 2270 2271 2282 2284 2285 2282 2284 2291 + 2282 2280 2281 2283 2282 2280 2283 2282 2284 + 2284 2291 2292 2284 2291 2293 2284 2286 2288 + 2284 2286 2287 2284 2286 2289 2284 2282 2280 + 2286 2289 2290 2286 2284 2285 2286 2284 2291 + 2286 2284 2282 2287 2286 2288 2289 2286 2288 + 2289 2286 2287 2291 2284 2285 2293 2295 2296 + 2293 2295 2308 2293 2291 2292 2294 2293 2291 + 2294 2293 2295 2295 2308 2309 2295 2308 2310 + 2295 2297 2299 2295 2297 2298 2295 2297 2302 + 2295 2293 2291 2297 2302 2306 2297 2302 2300 + 2297 2295 2296 2297 2295 2308 2297 2295 2293 + 2298 2297 2299 2300 2303 2305 2300 2303 2304 + 2300 2302 2306 2302 2300 2301 2302 2300 2303 + 2302 2297 2299 2302 2297 2298 2303 2300 2301 + 2304 2303 2305 2305 2306 2302 2305 2306 2307 + 2306 2305 2303 2307 2306 2302 2308 2295 2296 + 2310 2312 2313 2310 2312 2319 2310 2308 2309 + 2311 2310 2308 2311 2310 2312 2312 2319 2320 + 2312 2319 2321 2312 2314 2316 2312 2314 2315 + 2312 2314 2317 2312 2310 2308 2314 2317 2318 + 2314 2312 2313 2314 2312 2319 2314 2312 2310 + 2315 2314 2316 2317 2314 2316 2317 2314 2315 + 2319 2312 2313 2321 2323 2324 2321 2323 2340 + 2321 2319 2320 2322 2321 2319 2322 2321 2323 + 2323 2340 2341 2323 2340 2342 2323 2325 2327 + 2323 2325 2326 2323 2325 2328 2323 2321 2319 + 2325 2328 2329 2325 2328 2336 2325 2323 2324 + 2325 2323 2340 2325 2323 2321 2326 2325 2327 + 2328 2336 2338 2328 2336 2337 2328 2325 2327 + 2328 2325 2326 2329 2331 2333 2329 2331 2332 + 2330 2329 2328 2331 2329 2328 2331 2329 2330 + 2332 2331 2333 2333 2338 2336 2333 2338 2339 + 2333 2334 2335 2334 2333 2331 2336 2328 2329 + 2337 2336 2338 2338 2333 2331 2338 2333 2334 + 2339 2338 2336 2340 2323 2324 2342 2344 2345 + 2342 2344 2351 2342 2340 2341 2343 2342 2340 + 2343 2342 2344 2344 2351 2352 2344 2351 2353 + 2344 2346 2348 2344 2346 2347 2344 2346 2349 + 2344 2342 2340 2346 2349 2350 2346 2344 2345 + 2346 2344 2351 2346 2344 2342 2347 2346 2348 + 2349 2346 2348 2349 2346 2347 2351 2344 2345 + 2353 2355 2356 2353 2355 2371 2353 2351 2352 + 2354 2353 2351 2354 2353 2355 2355 2371 2372 + 2355 2371 2373 2355 2357 2359 2355 2357 2358 + 2355 2357 2360 2355 2353 2351 2357 2360 2361 + 2357 2360 2367 2357 2355 2356 2357 2355 2371 + 2357 2355 2353 2358 2357 2359 2360 2367 2369 + 2360 2367 2368 2360 2357 2359 2360 2357 2358 + 2361 2363 2365 2361 2363 2364 2362 2361 2360 + 2363 2365 2366 2363 2361 2360 2363 2361 2362 + 2364 2363 2365 2365 2369 2370 2365 2369 2367 + 2367 2369 2370 2367 2360 2361 2368 2367 2369 + 2369 2365 2366 2369 2365 2363 2371 2355 2356 + 2373 2375 2376 2373 2375 2386 2373 2371 2372 + 2374 2373 2371 2374 2373 2375 2375 2386 2387 + 2375 2386 2388 2375 2377 2379 2375 2377 2378 + 2375 2377 2380 2375 2373 2371 2377 2380 2382 + 2377 2380 2381 2377 2380 2383 2377 2375 2376 + 2377 2375 2386 2377 2375 2373 2378 2377 2379 + 2380 2383 2384 2380 2383 2385 2380 2377 2379 + 2380 2377 2378 2381 2380 2382 2383 2380 2382 + 2383 2380 2381 2385 2383 2384 2386 2375 2376 + 2388 2390 2391 2388 2390 2405 2388 2386 2387 + 2389 2388 2386 2389 2388 2390 2390 2405 2406 + 2390 2405 2407 2390 2392 2393 2390 2392 2394 + 2390 2392 2398 2390 2388 2386 2392 2398 2400 + 2392 2398 2399 2392 2398 2401 2392 2394 2397 + 2392 2394 2396 2392 2394 2395 2392 2390 2391 + 2392 2390 2405 2392 2390 2388 2394 2392 2393 + 2395 2394 2397 2395 2394 2396 2396 2394 2397 + 2398 2401 2404 2398 2401 2403 2398 2401 2402 + 2398 2392 2393 2398 2392 2394 2399 2398 2400 + 2401 2398 2400 2401 2398 2399 2402 2401 2404 + 2402 2401 2403 2403 2401 2404 2405 2390 2391 + 2407 2409 2410 2407 2409 2424 2407 2405 2406 + 2408 2407 2405 2408 2407 2409 2409 2424 2425 + 2409 2424 2426 2409 2411 2413 2409 2411 2412 + 2409 2411 2414 2409 2407 2405 2411 2414 2415 + 2411 2414 2420 2411 2414 2416 2411 2409 2410 + 2411 2409 2424 2411 2409 2407 2412 2411 2413 + 2414 2420 2423 2414 2420 2422 2414 2420 2421 + 2414 2416 2419 2414 2416 2418 2414 2416 2417 + 2414 2411 2413 2414 2411 2412 2416 2414 2415 + 2416 2414 2420 2417 2416 2419 2417 2416 2418 + 2418 2416 2419 2420 2414 2415 2421 2420 2423 + 2421 2420 2422 2422 2420 2423 2424 2409 2410 + 2426 2428 2429 2426 2428 2439 2426 2424 2425 + 2427 2426 2424 2427 2426 2428 2428 2439 2440 + 2428 2439 2441 2428 2430 2432 2428 2430 2431 + 2428 2430 2433 2428 2426 2424 2430 2433 2435 + 2430 2433 2434 2430 2433 2436 2430 2428 2429 + 2430 2428 2439 2430 2428 2426 2431 2430 2432 + 2433 2436 2437 2433 2436 2438 2433 2430 2432 + 2433 2430 2431 2434 2433 2435 2436 2433 2435 + 2436 2433 2434 2438 2436 2437 2439 2428 2429 + 2441 2443 2444 2441 2443 2463 2441 2439 2440 + 2442 2441 2439 2442 2441 2443 2443 2463 2464 + 2443 2463 2468 2443 2445 2447 2443 2445 2446 + 2443 2445 2448 2443 2441 2439 2445 2448 2450 + 2445 2448 2449 2445 2448 2451 2445 2443 2444 + 2445 2443 2463 2445 2443 2441 2446 2445 2447 + 2448 2451 2453 2448 2451 2452 2448 2451 2454 + 2448 2445 2447 2448 2445 2446 2449 2448 2450 + 2451 2454 2455 2451 2454 2456 2451 2448 2450 + 2451 2448 2449 2452 2451 2453 2454 2456 2457 + 2454 2456 2460 2454 2451 2453 2454 2451 2452 + 2456 2460 2462 2456 2460 2461 2456 2454 2455 + 2458 2457 2456 2458 2457 2459 2459 2457 2456 + 2460 2456 2457 2461 2460 2462 2463 2443 2444 + 2465 2470 2471 2466 2465 2470 2467 2465 2470 + 2467 2465 2466 2468 2470 2471 2468 2470 2465 + 2468 2463 2464 2469 2468 2463 2469 2468 2470 + 2470 2472 2474 2470 2472 2473 2470 2472 2475 + 2470 2468 2463 2472 2475 2477 2472 2475 2476 + 2472 2475 2478 2472 2470 2471 2472 2470 2465 + 2472 2470 2468 2473 2472 2474 2475 2478 2480 + 2475 2478 2479 2475 2478 2481 2475 2472 2474 + 2475 2472 2473 2476 2475 2477 2478 2481 2482 + 2478 2481 2483 2478 2475 2477 2478 2475 2476 + 2479 2478 2480 2481 2483 2484 2481 2483 2487 + 2481 2478 2480 2481 2478 2479 2483 2487 2489 + 2483 2487 2488 2483 2481 2482 2485 2484 2483 + 2485 2484 2486 2486 2484 2483 2487 2483 2484 + 2488 2487 2489 2491 2490 2492 2494 2493 2495 + 2497 2496 2498 2500 2499 2501 2503 2502 2504 + 2506 2505 2507 2509 2508 2510 2512 2511 2513 + 2515 2514 2516 2518 2517 2519 2521 2520 2522 + 2524 2523 2525 2527 2526 2528 2530 2529 2531 + 2533 2532 2534 2536 2535 2537 2539 2538 2540 + 2542 2541 2543 2545 2544 2546 2548 2547 2549 + 2551 2550 2552 2554 2553 2555 2557 2556 2558 + 2560 2559 2561 2563 2562 2564 2566 2565 2567 + 2569 2568 2570 2572 2571 2573 2575 2574 2576 + 2578 2577 2579 2581 2580 2582 2584 2583 2585 + 2587 2586 2588 2590 2589 2591 2593 2592 2594 + 2596 2595 2597 2599 2598 2600 2602 2601 2603 + 2605 2604 2606 2608 2607 2609 2611 2610 2612 + 2614 2613 2615 2617 2616 2618 2620 2619 2621 + 2623 2622 2624 2626 2625 2627 2629 2628 2630 + 2632 2631 2633 2635 2634 2636 2638 2637 2639 + 2641 2640 2642 2644 2643 2645 2647 2646 2648 + 2650 2649 2651 2653 2652 2654 2656 2655 2657 + 2659 2658 2660 2662 2661 2663 2665 2664 2666 + 2668 2667 2669 2671 2670 2672 2674 2673 2675 + 2677 2676 2678 2680 2679 2681 2683 2682 2684 + 2686 2685 2687 2689 2688 2690 2692 2691 2693 + 2695 2694 2696 2698 2697 2699 2701 2700 2702 + 2704 2703 2705 2707 2706 2708 2710 2709 2711 + 2713 2712 2714 2716 2715 2717 2719 2718 2720 + 2722 2721 2723 2725 2724 2726 2728 2727 2729 + 2731 2730 2732 2734 2733 2735 2737 2736 2738 + 2740 2739 2741 2743 2742 2744 2746 2745 2747 + 2749 2748 2750 2752 2751 2753 2755 2754 2756 + 2758 2757 2759 2761 2760 2762 2764 2763 2765 + 2767 2766 2768 2770 2769 2771 2773 2772 2774 + 2776 2775 2777 2779 2778 2780 2782 2781 2783 + 2785 2784 2786 2788 2787 2789 2791 2790 2792 + 2794 2793 2795 2797 2796 2798 2800 2799 2801 + 2803 2802 2804 2806 2805 2807 2809 2808 2810 + 2812 2811 2813 2815 2814 2816 2818 2817 2819 + 2821 2820 2822 2824 2823 2825 2827 2826 2828 + 2830 2829 2831 2833 2832 2834 2836 2835 2837 + 2839 2838 2840 2842 2841 2843 2845 2844 2846 + 2848 2847 2849 2851 2850 2852 2854 2853 2855 + 2857 2856 2858 2860 2859 2861 2863 2862 2864 + 2866 2865 2867 2869 2868 2870 2872 2871 2873 + 2875 2874 2876 2878 2877 2879 2881 2880 2882 + 2884 2883 2885 2887 2886 2888 2890 2889 2891 + 2893 2892 2894 2896 2895 2897 2899 2898 2900 + 2902 2901 2903 2905 2904 2906 2908 2907 2909 + 2911 2910 2912 2914 2913 2915 2917 2916 2918 + 2920 2919 2921 2923 2922 2924 2926 2925 2927 + 2929 2928 2930 2932 2931 2933 2935 2934 2936 + 2938 2937 2939 2941 2940 2942 2944 2943 2945 + 2947 2946 2948 2950 2949 2951 2953 2952 2954 + 2956 2955 2957 2959 2958 2960 2962 2961 2963 + 2965 2964 2966 2968 2967 2969 2971 2970 2972 + 2974 2973 2975 2977 2976 2978 2980 2979 2981 + 2983 2982 2984 2986 2985 2987 2989 2988 2990 + 2992 2991 2993 2995 2994 2996 2998 2997 2999 + 3001 3000 3002 3004 3003 3005 3007 3006 3008 + 3010 3009 3011 3013 3012 3014 3016 3015 3017 + 3019 3018 3020 3022 3021 3023 3025 3024 3026 + 3028 3027 3029 3031 3030 3032 3034 3033 3035 + 3037 3036 3038 3040 3039 3041 3043 3042 3044 + 3046 3045 3047 3049 3048 3050 3052 3051 3053 + 3055 3054 3056 3058 3057 3059 3061 3060 3062 + 3064 3063 3065 3067 3066 3068 3070 3069 3071 + 3073 3072 3074 3076 3075 3077 3079 3078 3080 + 3082 3081 3083 3085 3084 3086 3088 3087 3089 + 3091 3090 3092 3094 3093 3095 3097 3096 3098 + 3100 3099 3101 3103 3102 3104 3106 3105 3107 + 3109 3108 3110 3112 3111 3113 3115 3114 3116 + 3118 3117 3119 3121 3120 3122 3124 3123 3125 + 3127 3126 3128 3130 3129 3131 3133 3132 3134 + 3136 3135 3137 3139 3138 3140 3142 3141 3143 + 3145 3144 3146 3148 3147 3149 3151 3150 3152 + 3154 3153 3155 3157 3156 3158 3160 3159 3161 + 3163 3162 3164 3166 3165 3167 3169 3168 3170 + 3172 3171 3173 3175 3174 3176 3178 3177 3179 + 3181 3180 3182 3184 3183 3185 3187 3186 3188 + 3190 3189 3191 3193 3192 3194 3196 3195 3197 + 3199 3198 3200 3202 3201 3203 3205 3204 3206 + 3208 3207 3209 3211 3210 3212 3214 3213 3215 + 3217 3216 3218 3220 3219 3221 3223 3222 3224 + 3226 3225 3227 3229 3228 3230 3232 3231 3233 + 3235 3234 3236 3238 3237 3239 3241 3240 3242 + 3244 3243 3245 3247 3246 3248 3250 3249 3251 + 3253 3252 3254 3256 3255 3257 3259 3258 3260 + 3262 3261 3263 3265 3264 3266 3268 3267 3269 + 3271 3270 3272 3274 3273 3275 3277 3276 3278 + 3280 3279 3281 3283 3282 3284 3286 3285 3287 + 3289 3288 3290 3292 3291 3293 3295 3294 3296 + 3298 3297 3299 3301 3300 3302 3304 3303 3305 + 3307 3306 3308 3310 3309 3311 3313 3312 3314 + 3316 3315 3317 3319 3318 3320 3322 3321 3323 + 3325 3324 3326 3328 3327 3329 3331 3330 3332 + 3334 3333 3335 3337 3336 3338 3340 3339 3341 + 3343 3342 3344 3346 3345 3347 3349 3348 3350 + 3352 3351 3353 3355 3354 3356 3358 3357 3359 + 3361 3360 3362 3364 3363 3365 3367 3366 3368 + 3370 3369 3371 3373 3372 3374 3376 3375 3377 + 3379 3378 3380 3382 3381 3383 3385 3384 3386 + 3388 3387 3389 3391 3390 3392 3394 3393 3395 + 3397 3396 3398 3400 3399 3401 3403 3402 3404 + 3406 3405 3407 3409 3408 3410 3412 3411 3413 + 3415 3414 3416 3418 3417 3419 3421 3420 3422 + 3424 3423 3425 3427 3426 3428 3430 3429 3431 + 3433 3432 3434 3436 3435 3437 3439 3438 3440 + 3442 3441 3443 3445 3444 3446 3448 3447 3449 + 3451 3450 3452 3454 3453 3455 3457 3456 3458 + 3460 3459 3461 3463 3462 3464 3466 3465 3467 + 3469 3468 3470 3472 3471 3473 3475 3474 3476 + 3478 3477 3479 3481 3480 3482 3484 3483 3485 + 3487 3486 3488 3490 3489 3491 3493 3492 3494 + 3496 3495 3497 3499 3498 3500 3502 3501 3503 + 3505 3504 3506 3508 3507 3509 3511 3510 3512 + 3514 3513 3515 3517 3516 3518 3520 3519 3521 + 3523 3522 3524 3526 3525 3527 3529 3528 3530 + 3532 3531 3533 3535 3534 3536 3538 3537 3539 + 3541 3540 3542 3544 3543 3545 3547 3546 3548 + 3550 3549 3551 3553 3552 3554 3556 3555 3557 + 3559 3558 3560 3562 3561 3563 3565 3564 3566 + 3568 3567 3569 3571 3570 3572 3574 3573 3575 + 3577 3576 3578 3580 3579 3581 3583 3582 3584 + 3586 3585 3587 3589 3588 3590 3592 3591 3593 + 3595 3594 3596 3598 3597 3599 3601 3600 3602 + 3604 3603 3605 3607 3606 3608 3610 3609 3611 + 3613 3612 3614 3616 3615 3617 3619 3618 3620 + 3622 3621 3623 3625 3624 3626 3628 3627 3629 + 3631 3630 3632 3634 3633 3635 3637 3636 3638 + 3640 3639 3641 3643 3642 3644 3646 3645 3647 + 3649 3648 3650 3652 3651 3653 3655 3654 3656 + 3658 3657 3659 3661 3660 3662 3664 3663 3665 + 3667 3666 3668 3670 3669 3671 3673 3672 3674 + 3676 3675 3677 3679 3678 3680 3682 3681 3683 + 3685 3684 3686 3688 3687 3689 3691 3690 3692 + 3694 3693 3695 3697 3696 3698 3700 3699 3701 + 3703 3702 3704 3706 3705 3707 3709 3708 3710 + 3712 3711 3713 3715 3714 3716 3718 3717 3719 + 3721 3720 3722 3724 3723 3725 3727 3726 3728 + 3730 3729 3731 3733 3732 3734 3736 3735 3737 + 3739 3738 3740 3742 3741 3743 3745 3744 3746 + 3748 3747 3749 3751 3750 3752 3754 3753 3755 + 3757 3756 3758 3760 3759 3761 3763 3762 3764 + 3766 3765 3767 3769 3768 3770 3772 3771 3773 + 3775 3774 3776 3778 3777 3779 3781 3780 3782 + 3784 3783 3785 3787 3786 3788 3790 3789 3791 + 3793 3792 3794 3796 3795 3797 3799 3798 3800 + 3802 3801 3803 3805 3804 3806 3808 3807 3809 + 3811 3810 3812 3814 3813 3815 3817 3816 3818 + 3820 3819 3821 3823 3822 3824 3826 3825 3827 + 3829 3828 3830 3832 3831 3833 3835 3834 3836 + 3838 3837 3839 3841 3840 3842 3844 3843 3845 + 3847 3846 3848 3850 3849 3851 3853 3852 3854 + 3856 3855 3857 3859 3858 3860 3862 3861 3863 + 3865 3864 3866 3868 3867 3869 3871 3870 3872 + 3874 3873 3875 3877 3876 3878 3880 3879 3881 + 3883 3882 3884 3886 3885 3887 3889 3888 3890 + 3892 3891 3893 3895 3894 3896 3898 3897 3899 + 3901 3900 3902 3904 3903 3905 3907 3906 3908 + 3910 3909 3911 3913 3912 3914 3916 3915 3917 + 3919 3918 3920 3922 3921 3923 3925 3924 3926 + 3928 3927 3929 3931 3930 3932 3934 3933 3935 + 3937 3936 3938 3940 3939 3941 3943 3942 3944 + 3946 3945 3947 3949 3948 3950 3952 3951 3953 + 3955 3954 3956 3958 3957 3959 3961 3960 3962 + 3964 3963 3965 3967 3966 3968 3970 3969 3971 + 3973 3972 3974 3976 3975 3977 3979 3978 3980 + 3982 3981 3983 3985 3984 3986 3988 3987 3989 + 3991 3990 3992 3994 3993 3995 3997 3996 3998 + 4000 3999 4001 4003 4002 4004 4006 4005 4007 + 4009 4008 4010 4012 4011 4013 4015 4014 4016 + 4018 4017 4019 4021 4020 4022 4024 4023 4025 + 4027 4026 4028 4030 4029 4031 4033 4032 4034 + 4036 4035 4037 4039 4038 4040 4042 4041 4043 + 4045 4044 4046 4048 4047 4049 4051 4050 4052 + 4054 4053 4055 4057 4056 4058 4060 4059 4061 + 4063 4062 4064 4066 4065 4067 4069 4068 4070 + 4072 4071 4073 4075 4074 4076 4078 4077 4079 + 4081 4080 4082 4084 4083 4085 4087 4086 4088 + 4090 4089 4091 4093 4092 4094 4096 4095 4097 + 4099 4098 4100 4102 4101 4103 4105 4104 4106 + 4108 4107 4109 4111 4110 4112 4114 4113 4115 + 4117 4116 4118 4120 4119 4121 4123 4122 4124 + 4126 4125 4127 4129 4128 4130 4132 4131 4133 + 4135 4134 4136 4138 4137 4139 4141 4140 4142 + 4144 4143 4145 4147 4146 4148 4150 4149 4151 + 4153 4152 4154 4156 4155 4157 4159 4158 4160 + 4162 4161 4163 4165 4164 4166 4168 4167 4169 + 4171 4170 4172 4174 4173 4175 4177 4176 4178 + 4180 4179 4181 4183 4182 4184 4186 4185 4187 + 4189 4188 4190 4192 4191 4193 4195 4194 4196 + 4198 4197 4199 4201 4200 4202 4204 4203 4205 + 4207 4206 4208 4210 4209 4211 4213 4212 4214 + 4216 4215 4217 4219 4218 4220 4222 4221 4223 + 4225 4224 4226 4228 4227 4229 4231 4230 4232 + 4234 4233 4235 4237 4236 4238 4240 4239 4241 + 4243 4242 4244 4246 4245 4247 4249 4248 4250 + 4252 4251 4253 4255 4254 4256 4258 4257 4259 + 4261 4260 4262 4264 4263 4265 4267 4266 4268 + 4270 4269 4271 4273 4272 4274 4276 4275 4277 + 4279 4278 4280 4282 4281 4283 4285 4284 4286 + 4288 4287 4289 4291 4290 4292 4294 4293 4295 + 4297 4296 4298 4300 4299 4301 4303 4302 4304 + 4306 4305 4307 4309 4308 4310 4312 4311 4313 + 4315 4314 4316 4318 4317 4319 4321 4320 4322 + 4324 4323 4325 4327 4326 4328 4330 4329 4331 + 4333 4332 4334 4336 4335 4337 4339 4338 4340 + 4342 4341 4343 4345 4344 4346 4348 4347 4349 + 4351 4350 4352 4354 4353 4355 4357 4356 4358 + 4360 4359 4361 4363 4362 4364 4366 4365 4367 + 4369 4368 4370 4372 4371 4373 4375 4374 4376 + 4378 4377 4379 4381 4380 4382 4384 4383 4385 + 4387 4386 4388 4390 4389 4391 4393 4392 4394 + 4396 4395 4397 4399 4398 4400 4402 4401 4403 + 4405 4404 4406 4408 4407 4409 4411 4410 4412 + 4414 4413 4415 4417 4416 4418 4420 4419 4421 + 4423 4422 4424 4426 4425 4427 4429 4428 4430 + 4432 4431 4433 4435 4434 4436 4438 4437 4439 + 4441 4440 4442 4444 4443 4445 4447 4446 4448 + 4450 4449 4451 4453 4452 4454 4456 4455 4457 + 4459 4458 4460 4462 4461 4463 4465 4464 4466 + 4468 4467 4469 4471 4470 4472 4474 4473 4475 + 4477 4476 4478 4480 4479 4481 4483 4482 4484 + 4486 4485 4487 4489 4488 4490 4492 4491 4493 + 4495 4494 4496 4498 4497 4499 4501 4500 4502 + 4504 4503 4505 4507 4506 4508 4510 4509 4511 + 4513 4512 4514 4516 4515 4517 4519 4518 4520 + 4522 4521 4523 4525 4524 4526 4528 4527 4529 + 4531 4530 4532 4534 4533 4535 4537 4536 4538 + 4540 4539 4541 4543 4542 4544 4546 4545 4547 + 4549 4548 4550 4552 4551 4553 4555 4554 4556 + 4558 4557 4559 4561 4560 4562 4564 4563 4565 + 4567 4566 4568 4570 4569 4571 4573 4572 4574 + 4576 4575 4577 4579 4578 4580 4582 4581 4583 + 4585 4584 4586 4588 4587 4589 4591 4590 4592 + 4594 4593 4595 4597 4596 4598 4600 4599 4601 + 4603 4602 4604 4606 4605 4607 4609 4608 4610 + 4612 4611 4613 4615 4614 4616 4618 4617 4619 + 4621 4620 4622 4624 4623 4625 4627 4626 4628 + 4630 4629 4631 4633 4632 4634 4636 4635 4637 + 4639 4638 4640 4642 4641 4643 4645 4644 4646 + 4648 4647 4649 4651 4650 4652 4654 4653 4655 + 4657 4656 4658 4660 4659 4661 4663 4662 4664 + 4666 4665 4667 4669 4668 4670 4672 4671 4673 + 4675 4674 4676 4678 4677 4679 4681 4680 4682 + 4684 4683 4685 4687 4686 4688 4690 4689 4691 + 4693 4692 4694 4696 4695 4697 4699 4698 4700 + 4702 4701 4703 4705 4704 4706 4708 4707 4709 + 4711 4710 4712 4714 4713 4715 4717 4716 4718 + 4720 4719 4721 4723 4722 4724 4726 4725 4727 + 4729 4728 4730 4732 4731 4733 4735 4734 4736 + 4738 4737 4739 4741 4740 4742 4744 4743 4745 + 4747 4746 4748 4750 4749 4751 4753 4752 4754 + 4756 4755 4757 4759 4758 4760 4762 4761 4763 + 4765 4764 4766 4768 4767 4769 4771 4770 4772 + 4774 4773 4775 4777 4776 4778 4780 4779 4781 + 4783 4782 4784 4786 4785 4787 4789 4788 4790 + 4792 4791 4793 4795 4794 4796 4798 4797 4799 + 4801 4800 4802 4804 4803 4805 4807 4806 4808 + 4810 4809 4811 4813 4812 4814 4816 4815 4817 + 4819 4818 4820 4822 4821 4823 4825 4824 4826 + 4828 4827 4829 4831 4830 4832 4834 4833 4835 + 4837 4836 4838 4840 4839 4841 4843 4842 4844 + 4846 4845 4847 4849 4848 4850 4852 4851 4853 + 4855 4854 4856 4858 4857 4859 4861 4860 4862 + 4864 4863 4865 4867 4866 4868 4870 4869 4871 + 4873 4872 4874 4876 4875 4877 4879 4878 4880 + 4882 4881 4883 4885 4884 4886 4888 4887 4889 + 4891 4890 4892 4894 4893 4895 4897 4896 4898 + 4900 4899 4901 4903 4902 4904 4906 4905 4907 + 4909 4908 4910 4912 4911 4913 4915 4914 4916 + 4918 4917 4919 4921 4920 4922 4924 4923 4925 + 4927 4926 4928 4930 4929 4931 4933 4932 4934 + 4936 4935 4937 4939 4938 4940 4942 4941 4943 + 4945 4944 4946 4948 4947 4949 4951 4950 4952 + 4954 4953 4955 4957 4956 4958 4960 4959 4961 + 4963 4962 4964 4966 4965 4967 4969 4968 4970 + 4972 4971 4973 4975 4974 4976 4978 4977 4979 + 4981 4980 4982 4984 4983 4985 4987 4986 4988 + 4990 4989 4991 4993 4992 4994 4996 4995 4997 + 4999 4998 5000 5002 5001 5003 5005 5004 5006 + 5008 5007 5009 5011 5010 5012 5014 5013 5015 + 5017 5016 5018 5020 5019 5021 5023 5022 5024 + 5026 5025 5027 5029 5028 5030 5032 5031 5033 + 5035 5034 5036 5038 5037 5039 5041 5040 5042 + 5044 5043 5045 5047 5046 5048 5050 5049 5051 + 5053 5052 5054 5056 5055 5057 5059 5058 5060 + 5062 5061 5063 5065 5064 5066 5068 5067 5069 + 5071 5070 5072 5074 5073 5075 5077 5076 5078 + 5080 5079 5081 5083 5082 5084 5086 5085 5087 + 5089 5088 5090 5092 5091 5093 5095 5094 5096 + 5098 5097 5099 5101 5100 5102 5104 5103 5105 + 5107 5106 5108 5110 5109 5111 5113 5112 5114 + 5116 5115 5117 5119 5118 5120 5122 5121 5123 + 5125 5124 5126 5128 5127 5129 5131 5130 5132 + 5134 5133 5135 5137 5136 5138 5140 5139 5141 + 5143 5142 5144 5146 5145 5147 5149 5148 5150 + 5152 5151 5153 5155 5154 5156 5158 5157 5159 + 5161 5160 5162 5164 5163 5165 5167 5166 5168 + 5170 5169 5171 5173 5172 5174 5176 5175 5177 + 5179 5178 5180 5182 5181 5183 5185 5184 5186 + 5188 5187 5189 5191 5190 5192 5194 5193 5195 + 5197 5196 5198 5200 5199 5201 5203 5202 5204 + 5206 5205 5207 5209 5208 5210 5212 5211 5213 + 5215 5214 5216 5218 5217 5219 5221 5220 5222 + 5224 5223 5225 5227 5226 5228 5230 5229 5231 + 5233 5232 5234 5236 5235 5237 5239 5238 5240 + 5242 5241 5243 5245 5244 5246 5248 5247 5249 + 5251 5250 5252 5254 5253 5255 5257 5256 5258 + 5260 5259 5261 5263 5262 5264 5266 5265 5267 + 5269 5268 5270 5272 5271 5273 5275 5274 5276 + 5278 5277 5279 5281 5280 5282 5284 5283 5285 + 5287 5286 5288 5290 5289 5291 5293 5292 5294 + 5296 5295 5297 5299 5298 5300 5302 5301 5303 + 5305 5304 5306 5308 5307 5309 5311 5310 5312 + 5314 5313 5315 5317 5316 5318 5320 5319 5321 + 5323 5322 5324 5326 5325 5327 5329 5328 5330 + 5332 5331 5333 5335 5334 5336 5338 5337 5339 + 5341 5340 5342 5344 5343 5345 5347 5346 5348 + 5350 5349 5351 5353 5352 5354 5356 5355 5357 + 5359 5358 5360 5362 5361 5363 5365 5364 5366 + 5368 5367 5369 5371 5370 5372 5374 5373 5375 + 5377 5376 5378 5380 5379 5381 5383 5382 5384 + 5386 5385 5387 5389 5388 5390 5392 5391 5393 + 5395 5394 5396 5398 5397 5399 5401 5400 5402 + 5404 5403 5405 5407 5406 5408 5410 5409 5411 + 5413 5412 5414 5416 5415 5417 5419 5418 5420 + 5422 5421 5423 5425 5424 5426 5428 5427 5429 + 5431 5430 5432 5434 5433 5435 5437 5436 5438 + 5440 5439 5441 5443 5442 5444 5446 5445 5447 + 5449 5448 5450 5452 5451 5453 5455 5454 5456 + 5458 5457 5459 5461 5460 5462 5464 5463 5465 + 5467 5466 5468 5470 5469 5471 5473 5472 5474 + 5476 5475 5477 5479 5478 5480 5482 5481 5483 + 5485 5484 5486 5488 5487 5489 5491 5490 5492 + 5494 5493 5495 5497 5496 5498 5500 5499 5501 + 5503 5502 5504 5506 5505 5507 5509 5508 5510 + 5512 5511 5513 5515 5514 5516 5518 5517 5519 + 5521 5520 5522 5524 5523 5525 5527 5526 5528 + 5530 5529 5531 5533 5532 5534 5536 5535 5537 + 5539 5538 5540 5542 5541 5543 5545 5544 5546 + 5548 5547 5549 5551 5550 5552 5554 5553 5555 + 5557 5556 5558 5560 5559 5561 5563 5562 5564 + 5566 5565 5567 5569 5568 5570 5572 5571 5573 + 5575 5574 5576 5578 5577 5579 5581 5580 5582 + 5584 5583 5585 5587 5586 5588 5590 5589 5591 + 5593 5592 5594 5596 5595 5597 5599 5598 5600 + 5602 5601 5603 5605 5604 5606 5608 5607 5609 + 5611 5610 5612 5614 5613 5615 5617 5616 5618 + 5620 5619 5621 5623 5622 5624 5626 5625 5627 + 5629 5628 5630 5632 5631 5633 5635 5634 5636 + 5638 5637 5639 5641 5640 5642 5644 5643 5645 + 5647 5646 5648 5650 5649 5651 5653 5652 5654 + 5656 5655 5657 5659 5658 5660 5662 5661 5663 + 5665 5664 5666 5668 5667 5669 5671 5670 5672 + 5674 5673 5675 5677 5676 5678 5680 5679 5681 + 5683 5682 5684 5686 5685 5687 5689 5688 5690 + 5692 5691 5693 5695 5694 5696 5698 5697 5699 + 5701 5700 5702 5704 5703 5705 5707 5706 5708 + 5710 5709 5711 5713 5712 5714 5716 5715 5717 + 5719 5718 5720 5722 5721 5723 5725 5724 5726 + 5728 5727 5729 5731 5730 5732 5734 5733 5735 + 5737 5736 5738 5740 5739 5741 5743 5742 5744 + 5746 5745 5747 5749 5748 5750 5752 5751 5753 + 5755 5754 5756 5758 5757 5759 5761 5760 5762 + 5764 5763 5765 5767 5766 5768 5770 5769 5771 + 5773 5772 5774 5776 5775 5777 5779 5778 5780 + 5782 5781 5783 5785 5784 5786 5788 5787 5789 + 5791 5790 5792 5794 5793 5795 5797 5796 5798 + 5800 5799 5801 5803 5802 5804 5806 5805 5807 + 5809 5808 5810 5812 5811 5813 5815 5814 5816 + 5818 5817 5819 5821 5820 5822 5824 5823 5825 + 5827 5826 5828 5830 5829 5831 5833 5832 5834 + 5836 5835 5837 5839 5838 5840 5842 5841 5843 + 5845 5844 5846 5848 5847 5849 5851 5850 5852 + 5854 5853 5855 5857 5856 5858 5860 5859 5861 + 5863 5862 5864 5866 5865 5867 5869 5868 5870 + 5872 5871 5873 5875 5874 5876 5878 5877 5879 + 5881 5880 5882 5884 5883 5885 5887 5886 5888 + 5890 5889 5891 5893 5892 5894 5896 5895 5897 + 5899 5898 5900 5902 5901 5903 5905 5904 5906 + 5908 5907 5909 5911 5910 5912 5914 5913 5915 + 5917 5916 5918 5920 5919 5921 5923 5922 5924 + 5926 5925 5927 5929 5928 5930 5932 5931 5933 + 5935 5934 5936 5938 5937 5939 5941 5940 5942 + 5944 5943 5945 5947 5946 5948 5950 5949 5951 + 5953 5952 5954 5956 5955 5957 5959 5958 5960 + 5962 5961 5963 5965 5964 5966 5968 5967 5969 + 5971 5970 5972 5974 5973 5975 5977 5976 5978 + 5980 5979 5981 5983 5982 5984 5986 5985 5987 + 5989 5988 5990 5992 5991 5993 5995 5994 5996 + 5998 5997 5999 6001 6000 6002 6004 6003 6005 + 6007 6006 6008 6010 6009 6011 6013 6012 6014 + 6016 6015 6017 6019 6018 6020 6022 6021 6023 + 6025 6024 6026 6028 6027 6029 6031 6030 6032 + 6034 6033 6035 6037 6036 6038 6040 6039 6041 + 6043 6042 6044 6046 6045 6047 6049 6048 6050 + 6052 6051 6053 6055 6054 6056 6058 6057 6059 + 6061 6060 6062 6064 6063 6065 6067 6066 6068 + 6070 6069 6071 6073 6072 6074 6076 6075 6077 + 6079 6078 6080 6082 6081 6083 6085 6084 6086 + 6088 6087 6089 6091 6090 6092 6094 6093 6095 + 6097 6096 6098 6100 6099 6101 6103 6102 6104 + 6106 6105 6107 6109 6108 6110 6112 6111 6113 + 6115 6114 6116 6118 6117 6119 6121 6120 6122 + 6124 6123 6125 6127 6126 6128 6130 6129 6131 + 6133 6132 6134 6136 6135 6137 6139 6138 6140 + 6142 6141 6143 6145 6144 6146 6148 6147 6149 + 6151 6150 6152 6154 6153 6155 6157 6156 6158 + 6160 6159 6161 6163 6162 6164 6166 6165 6167 + 6169 6168 6170 6172 6171 6173 6175 6174 6176 + 6178 6177 6179 6181 6180 6182 6184 6183 6185 + 6187 6186 6188 6190 6189 6191 6193 6192 6194 + 6196 6195 6197 6199 6198 6200 6202 6201 6203 + 6205 6204 6206 6208 6207 6209 6211 6210 6212 + 6214 6213 6215 6217 6216 6218 6220 6219 6221 + 6223 6222 6224 6226 6225 6227 6229 6228 6230 + 6232 6231 6233 6235 6234 6236 6238 6237 6239 + 6241 6240 6242 6244 6243 6245 6247 6246 6248 + 6250 6249 6251 6253 6252 6254 6256 6255 6257 + 6259 6258 6260 6262 6261 6263 6265 6264 6266 + 6268 6267 6269 6271 6270 6272 6274 6273 6275 + 6277 6276 6278 6280 6279 6281 6283 6282 6284 + 6286 6285 6287 6289 6288 6290 6292 6291 6293 + 6295 6294 6296 6298 6297 6299 6301 6300 6302 + 6304 6303 6305 6307 6306 6308 6310 6309 6311 + 6313 6312 6314 6316 6315 6317 6319 6318 6320 + 6322 6321 6323 6325 6324 6326 6328 6327 6329 + 6331 6330 6332 6334 6333 6335 6337 6336 6338 + 6340 6339 6341 6343 6342 6344 6346 6345 6347 + 6349 6348 6350 6352 6351 6353 6355 6354 6356 + 6358 6357 6359 6361 6360 6362 6364 6363 6365 + 6367 6366 6368 6370 6369 6371 6373 6372 6374 + 6376 6375 6377 6379 6378 6380 6382 6381 6383 + 6385 6384 6386 6388 6387 6389 6391 6390 6392 + 6394 6393 6395 6397 6396 6398 6400 6399 6401 + 6403 6402 6404 6406 6405 6407 6409 6408 6410 + 6412 6411 6413 6415 6414 6416 6418 6417 6419 + 6421 6420 6422 6424 6423 6425 6427 6426 6428 + 6430 6429 6431 6433 6432 6434 6436 6435 6437 + 6439 6438 6440 6442 6441 6443 6445 6444 6446 + 6448 6447 6449 6451 6450 6452 6454 6453 6455 + 6457 6456 6458 6460 6459 6461 6463 6462 6464 + 6466 6465 6467 6469 6468 6470 6472 6471 6473 + 6475 6474 6476 6478 6477 6479 6481 6480 6482 + 6484 6483 6485 6487 6486 6488 6490 6489 6491 + 6493 6492 6494 6496 6495 6497 6499 6498 6500 + 6502 6501 6503 6505 6504 6506 6508 6507 6509 + 6511 6510 6512 6514 6513 6515 6517 6516 6518 + 6520 6519 6521 6523 6522 6524 6526 6525 6527 + 6529 6528 6530 6532 6531 6533 6535 6534 6536 + 6538 6537 6539 6541 6540 6542 6544 6543 6545 + 6547 6546 6548 6550 6549 6551 6553 6552 6554 + 6556 6555 6557 6559 6558 6560 6562 6561 6563 + 6565 6564 6566 6568 6567 6569 6571 6570 6572 + 6574 6573 6575 6577 6576 6578 6580 6579 6581 + 6583 6582 6584 6586 6585 6587 6589 6588 6590 + 6592 6591 6593 6595 6594 6596 6598 6597 6599 + 6601 6600 6602 6604 6603 6605 6607 6606 6608 + 6610 6609 6611 6613 6612 6614 6616 6615 6617 + 6619 6618 6620 6622 6621 6623 6625 6624 6626 + 6628 6627 6629 6631 6630 6632 6634 6633 6635 + 6637 6636 6638 6640 6639 6641 6643 6642 6644 + 6646 6645 6647 6649 6648 6650 6652 6651 6653 + 6655 6654 6656 6658 6657 6659 6661 6660 6662 + 6664 6663 6665 6667 6666 6668 6670 6669 6671 + 6673 6672 6674 6676 6675 6677 6679 6678 6680 + 6682 6681 6683 6685 6684 6686 6688 6687 6689 + 6691 6690 6692 6694 6693 6695 6697 6696 6698 + 6700 6699 6701 6703 6702 6704 6706 6705 6707 + 6709 6708 6710 6712 6711 6713 6715 6714 6716 + 6718 6717 6719 6721 6720 6722 6724 6723 6725 + 6727 6726 6728 6730 6729 6731 6733 6732 6734 + 6736 6735 6737 6739 6738 6740 6742 6741 6743 + 6745 6744 6746 6748 6747 6749 6751 6750 6752 + 6754 6753 6755 6757 6756 6758 6760 6759 6761 + 6763 6762 6764 6766 6765 6767 6769 6768 6770 + 6772 6771 6773 6775 6774 6776 6778 6777 6779 + 6781 6780 6782 6784 6783 6785 6787 6786 6788 + 6790 6789 6791 6793 6792 6794 6796 6795 6797 + 6799 6798 6800 6802 6801 6803 6805 6804 6806 + 6808 6807 6809 6811 6810 6812 6814 6813 6815 + 6817 6816 6818 6820 6819 6821 6823 6822 6824 + 6826 6825 6827 6829 6828 6830 6832 6831 6833 + 6835 6834 6836 6838 6837 6839 6841 6840 6842 + 6844 6843 6845 6847 6846 6848 6850 6849 6851 + 6853 6852 6854 6856 6855 6857 6859 6858 6860 + 6862 6861 6863 6865 6864 6866 6868 6867 6869 + 6871 6870 6872 6874 6873 6875 6877 6876 6878 + 6880 6879 6881 6883 6882 6884 6886 6885 6887 + 6889 6888 6890 6892 6891 6893 6895 6894 6896 + 6898 6897 6899 6901 6900 6902 6904 6903 6905 + 6907 6906 6908 6910 6909 6911 6913 6912 6914 + 6916 6915 6917 6919 6918 6920 6922 6921 6923 + 6925 6924 6926 6928 6927 6929 6931 6930 6932 + 6934 6933 6935 6937 6936 6938 6940 6939 6941 + 6943 6942 6944 6946 6945 6947 6949 6948 6950 + 6952 6951 6953 6955 6954 6956 6958 6957 6959 + 6961 6960 6962 6964 6963 6965 6967 6966 6968 + 6970 6969 6971 6973 6972 6974 6976 6975 6977 + 6979 6978 6980 6982 6981 6983 6985 6984 6986 + 6988 6987 6989 6991 6990 6992 6994 6993 6995 + 6997 6996 6998 7000 6999 7001 7003 7002 7004 + 7006 7005 7007 7009 7008 7010 7012 7011 7013 + 7015 7014 7016 7018 7017 7019 7021 7020 7022 + 7024 7023 7025 7027 7026 7028 7030 7029 7031 + 7033 7032 7034 7036 7035 7037 7039 7038 7040 + 7042 7041 7043 7045 7044 7046 7048 7047 7049 + 7051 7050 7052 7054 7053 7055 7057 7056 7058 + 7060 7059 7061 7063 7062 7064 7066 7065 7067 + 7069 7068 7070 7072 7071 7073 7075 7074 7076 + 7078 7077 7079 7081 7080 7082 7084 7083 7085 + 7087 7086 7088 7090 7089 7091 7093 7092 7094 + 7096 7095 7097 7099 7098 7100 7102 7101 7103 + 7105 7104 7106 7108 7107 7109 7111 7110 7112 + 7114 7113 7115 7117 7116 7118 7120 7119 7121 + 7123 7122 7124 7126 7125 7127 7129 7128 7130 + 7132 7131 7133 7135 7134 7136 7138 7137 7139 + 7141 7140 7142 7144 7143 7145 7147 7146 7148 + 7150 7149 7151 7153 7152 7154 7156 7155 7157 + 7159 7158 7160 7162 7161 7163 7165 7164 7166 + 7168 7167 7169 7171 7170 7172 7174 7173 7175 + 7177 7176 7178 7180 7179 7181 7183 7182 7184 + 7186 7185 7187 7189 7188 7190 7192 7191 7193 + 7195 7194 7196 7198 7197 7199 7201 7200 7202 + 7204 7203 7205 7207 7206 7208 7210 7209 7211 + 7213 7212 7214 7216 7215 7217 7219 7218 7220 + 7222 7221 7223 7225 7224 7226 7228 7227 7229 + 7231 7230 7232 7234 7233 7235 7237 7236 7238 + 7240 7239 7241 7243 7242 7244 7246 7245 7247 + 7249 7248 7250 7252 7251 7253 7255 7254 7256 + 7258 7257 7259 7261 7260 7262 7264 7263 7265 + 7267 7266 7268 7270 7269 7271 7273 7272 7274 + 7276 7275 7277 7279 7278 7280 7282 7281 7283 + 7285 7284 7286 7288 7287 7289 7291 7290 7292 + 7294 7293 7295 7297 7296 7298 7300 7299 7301 + 7303 7302 7304 7306 7305 7307 7309 7308 7310 + 7312 7311 7313 7315 7314 7316 7318 7317 7319 + 7321 7320 7322 7324 7323 7325 7327 7326 7328 + 7330 7329 7331 7333 7332 7334 7336 7335 7337 + 7339 7338 7340 7342 7341 7343 7345 7344 7346 + 7348 7347 7349 7351 7350 7352 7354 7353 7355 + 7357 7356 7358 7360 7359 7361 7363 7362 7364 + 7366 7365 7367 7369 7368 7370 7372 7371 7373 + 7375 7374 7376 7378 7377 7379 7381 7380 7382 + 7384 7383 7385 7387 7386 7388 7390 7389 7391 + 7393 7392 7394 7396 7395 7397 7399 7398 7400 + 7402 7401 7403 7405 7404 7406 7408 7407 7409 + 7411 7410 7412 7414 7413 7415 7417 7416 7418 + 7420 7419 7421 7423 7422 7424 7426 7425 7427 + 7429 7428 7430 7432 7431 7433 7435 7434 7436 + 7438 7437 7439 7441 7440 7442 7444 7443 7445 + 7447 7446 7448 7450 7449 7451 7453 7452 7454 + 7456 7455 7457 7459 7458 7460 7462 7461 7463 + 7465 7464 7466 7468 7467 7469 7471 7470 7472 + 7474 7473 7475 7477 7476 7478 7480 7479 7481 + 7483 7482 7484 7486 7485 7487 7489 7488 7490 + 7492 7491 7493 7495 7494 7496 7498 7497 7499 + 7501 7500 7502 7504 7503 7505 7507 7506 7508 + 7510 7509 7511 7513 7512 7514 7516 7515 7517 + 7519 7518 7520 7522 7521 7523 7525 7524 7526 + 7528 7527 7529 7531 7530 7532 7534 7533 7535 + 7537 7536 7538 7540 7539 7541 7543 7542 7544 + 7546 7545 7547 7549 7548 7550 7552 7551 7553 + 7555 7554 7556 7558 7557 7559 7561 7560 7562 + 7564 7563 7565 7567 7566 7568 7570 7569 7571 + 7573 7572 7574 7576 7575 7577 7579 7578 7580 + 7582 7581 7583 7585 7584 7586 7588 7587 7589 + 7591 7590 7592 7594 7593 7595 7597 7596 7598 + 7600 7599 7601 7603 7602 7604 7606 7605 7607 + 7609 7608 7610 7612 7611 7613 7615 7614 7616 + 7618 7617 7619 7621 7620 7622 7624 7623 7625 + 7627 7626 7628 7630 7629 7631 7633 7632 7634 + 7636 7635 7637 7639 7638 7640 7642 7641 7643 + 7645 7644 7646 7648 7647 7649 7651 7650 7652 + 7654 7653 7655 7657 7656 7658 7660 7659 7661 + 7663 7662 7664 7666 7665 7667 7669 7668 7670 + 7672 7671 7673 7675 7674 7676 7678 7677 7679 + 7681 7680 7682 7684 7683 7685 7687 7686 7688 + 7690 7689 7691 7693 7692 7694 7696 7695 7697 + 7699 7698 7700 7702 7701 7703 7705 7704 7706 + 7708 7707 7709 7711 7710 7712 7714 7713 7715 + 7717 7716 7718 7720 7719 7721 7723 7722 7724 + 7726 7725 7727 7729 7728 7730 7732 7731 7733 + 7735 7734 7736 7738 7737 7739 7741 7740 7742 + 7744 7743 7745 7747 7746 7748 7750 7749 7751 + 7753 7752 7754 7756 7755 7757 7759 7758 7760 + 7762 7761 7763 7765 7764 7766 7768 7767 7769 + 7771 7770 7772 7774 7773 7775 7777 7776 7778 + 7780 7779 7781 7783 7782 7784 7786 7785 7787 + 7789 7788 7790 7792 7791 7793 7795 7794 7796 + 7798 7797 7799 7801 7800 7802 7804 7803 7805 + 7807 7806 7808 7810 7809 7811 7813 7812 7814 + 7816 7815 7817 7819 7818 7820 7822 7821 7823 + 7825 7824 7826 7828 7827 7829 7831 7830 7832 + 7834 7833 7835 7837 7836 7838 7840 7839 7841 + 7843 7842 7844 7846 7845 7847 7849 7848 7850 + 7852 7851 7853 7855 7854 7856 7858 7857 7859 + 7861 7860 7862 7864 7863 7865 7867 7866 7868 + 7870 7869 7871 7873 7872 7874 7876 7875 7877 + 7879 7878 7880 7882 7881 7883 7885 7884 7886 + 7888 7887 7889 7891 7890 7892 7894 7893 7895 + 7897 7896 7898 7900 7899 7901 7903 7902 7904 + 7906 7905 7907 7909 7908 7910 7912 7911 7913 + 7915 7914 7916 7918 7917 7919 7921 7920 7922 + 7924 7923 7925 7927 7926 7928 7930 7929 7931 + 7933 7932 7934 7936 7935 7937 7939 7938 7940 + 7942 7941 7943 7945 7944 7946 7948 7947 7949 + 7951 7950 7952 7954 7953 7955 7957 7956 7958 + 7960 7959 7961 7963 7962 7964 7966 7965 7967 + 7969 7968 7970 7972 7971 7973 7975 7974 7976 + 7978 7977 7979 7981 7980 7982 7984 7983 7985 + 7987 7986 7988 7990 7989 7991 7993 7992 7994 + 7996 7995 7997 7999 7998 8000 8002 8001 8003 + 8005 8004 8006 8008 8007 8009 8011 8010 8012 + 8014 8013 8015 8017 8016 8018 8020 8019 8021 + 8023 8022 8024 8026 8025 8027 8029 8028 8030 + 8032 8031 8033 8035 8034 8036 8038 8037 8039 + 8041 8040 8042 8044 8043 8045 8047 8046 8048 + 8050 8049 8051 8053 8052 8054 8056 8055 8057 + 8059 8058 8060 8062 8061 8063 8065 8064 8066 + 8068 8067 8069 8071 8070 8072 8074 8073 8075 + 8077 8076 8078 8080 8079 8081 8083 8082 8084 + 8086 8085 8087 8089 8088 8090 8092 8091 8093 + 8095 8094 8096 8098 8097 8099 8101 8100 8102 + 8104 8103 8105 8107 8106 8108 8110 8109 8111 + 8113 8112 8114 8116 8115 8117 8119 8118 8120 + 8122 8121 8123 8125 8124 8126 8128 8127 8129 + 8131 8130 8132 8134 8133 8135 8137 8136 8138 + 8140 8139 8141 8143 8142 8144 8146 8145 8147 + 8149 8148 8150 8152 8151 8153 8155 8154 8156 + 8158 8157 8159 8161 8160 8162 8164 8163 8165 + 8167 8166 8168 8170 8169 8171 8173 8172 8174 + 8176 8175 8177 8179 8178 8180 8182 8181 8183 + 8185 8184 8186 8188 8187 8189 8191 8190 8192 + 8194 8193 8195 8197 8196 8198 8200 8199 8201 + 8203 8202 8204 8206 8205 8207 8209 8208 8210 + 8212 8211 8213 8215 8214 8216 8218 8217 8219 + 8221 8220 8222 8224 8223 8225 8227 8226 8228 + 8230 8229 8231 8233 8232 8234 8236 8235 8237 + 8239 8238 8240 8242 8241 8243 8245 8244 8246 + 8248 8247 8249 8251 8250 8252 8254 8253 8255 + 8257 8256 8258 8260 8259 8261 8263 8262 8264 + 8266 8265 8267 8269 8268 8270 8272 8271 8273 + 8275 8274 8276 8278 8277 8279 8281 8280 8282 + 8284 8283 8285 8287 8286 8288 8290 8289 8291 + 8293 8292 8294 8296 8295 8297 8299 8298 8300 + 8302 8301 8303 8305 8304 8306 8308 8307 8309 + 8311 8310 8312 8314 8313 8315 8317 8316 8318 + 8320 8319 8321 8323 8322 8324 8326 8325 8327 + 8329 8328 8330 8332 8331 8333 8335 8334 8336 + 8338 8337 8339 8341 8340 8342 8344 8343 8345 + 8347 8346 8348 8350 8349 8351 8353 8352 8354 + 8356 8355 8357 8359 8358 8360 8362 8361 8363 + 8365 8364 8366 8368 8367 8369 8371 8370 8372 + 8374 8373 8375 8377 8376 8378 8380 8379 8381 + 8383 8382 8384 8386 8385 8387 8389 8388 8390 + 8392 8391 8393 8395 8394 8396 8398 8397 8399 + 8401 8400 8402 8404 8403 8405 8407 8406 8408 + 8410 8409 8411 8413 8412 8414 8416 8415 8417 + 8419 8418 8420 8422 8421 8423 8425 8424 8426 + 8428 8427 8429 8431 8430 8432 8434 8433 8435 + 8437 8436 8438 8440 8439 8441 8443 8442 8444 + 8446 8445 8447 8449 8448 8450 8452 8451 8453 + 8455 8454 8456 8458 8457 8459 8461 8460 8462 + 8464 8463 8465 8467 8466 8468 8470 8469 8471 + 8473 8472 8474 8476 8475 8477 8479 8478 8480 + 8482 8481 8483 8485 8484 8486 8488 8487 8489 + 8491 8490 8492 8494 8493 8495 8497 8496 8498 + 8500 8499 8501 8503 8502 8504 8506 8505 8507 + 8509 8508 8510 8512 8511 8513 8515 8514 8516 + 8518 8517 8519 8521 8520 8522 8524 8523 8525 + 8527 8526 8528 8530 8529 8531 8533 8532 8534 + 8536 8535 8537 8539 8538 8540 8542 8541 8543 + 8545 8544 8546 8548 8547 8549 8551 8550 8552 + 8554 8553 8555 8557 8556 8558 8560 8559 8561 + 8563 8562 8564 8566 8565 8567 8569 8568 8570 + 8572 8571 8573 8575 8574 8576 8578 8577 8579 + 8581 8580 8582 8584 8583 8585 8587 8586 8588 + 8590 8589 8591 8593 8592 8594 8596 8595 8597 + 8599 8598 8600 8602 8601 8603 8605 8604 8606 + 8608 8607 8609 8611 8610 8612 8614 8613 8615 + 8617 8616 8618 8620 8619 8621 8623 8622 8624 + 8626 8625 8627 8629 8628 8630 8632 8631 8633 + 8635 8634 8636 8638 8637 8639 8641 8640 8642 + 8644 8643 8645 8647 8646 8648 8650 8649 8651 + 8653 8652 8654 8656 8655 8657 8659 8658 8660 + 8662 8661 8663 8665 8664 8666 8668 8667 8669 + 8671 8670 8672 8674 8673 8675 8677 8676 8678 + 8680 8679 8681 8683 8682 8684 8686 8685 8687 + 8689 8688 8690 8692 8691 8693 8695 8694 8696 + 8698 8697 8699 8701 8700 8702 8704 8703 8705 + 8707 8706 8708 8710 8709 8711 8713 8712 8714 + 8716 8715 8717 8719 8718 8720 8722 8721 8723 + 8725 8724 8726 8728 8727 8729 8731 8730 8732 + 8734 8733 8735 8737 8736 8738 8740 8739 8741 + 8743 8742 8744 8746 8745 8747 8749 8748 8750 + 8752 8751 8753 8755 8754 8756 8758 8757 8759 + 8761 8760 8762 8764 8763 8765 8767 8766 8768 + 8770 8769 8771 8773 8772 8774 8776 8775 8777 + 8779 8778 8780 8782 8781 8783 8785 8784 8786 + 8788 8787 8789 8791 8790 8792 8794 8793 8795 + 8797 8796 8798 8800 8799 8801 8803 8802 8804 + 8806 8805 8807 8809 8808 8810 8812 8811 8813 + 8815 8814 8816 8818 8817 8819 8821 8820 8822 + 8824 8823 8825 8827 8826 8828 8830 8829 8831 + 8833 8832 8834 8836 8835 8837 8839 8838 8840 + 8842 8841 8843 8845 8844 8846 8848 8847 8849 + 8851 8850 8852 8854 8853 8855 8857 8856 8858 + 8860 8859 8861 8863 8862 8864 8866 8865 8867 + 8869 8868 8870 8872 8871 8873 8875 8874 8876 + 8878 8877 8879 8881 8880 8882 8884 8883 8885 + 8887 8886 8888 8890 8889 8891 8893 8892 8894 + 8896 8895 8897 8899 8898 8900 8902 8901 8903 + 8905 8904 8906 8908 8907 8909 8911 8910 8912 + 8914 8913 8915 8917 8916 8918 8920 8919 8921 + 8923 8922 8924 8926 8925 8927 8929 8928 8930 + 8932 8931 8933 8935 8934 8936 8938 8937 8939 + 8941 8940 8942 8944 8943 8945 8947 8946 8948 + 8950 8949 8951 8953 8952 8954 8956 8955 8957 + 8959 8958 8960 8962 8961 8963 8965 8964 8966 + 8968 8967 8969 8971 8970 8972 8974 8973 8975 + 8977 8976 8978 8980 8979 8981 8983 8982 8984 + 8986 8985 8987 8989 8988 8990 8992 8991 8993 + 8995 8994 8996 8998 8997 8999 9001 9000 9002 + 9004 9003 9005 9007 9006 9008 9010 9009 9011 + 9013 9012 9014 9016 9015 9017 9019 9018 9020 + 9022 9021 9023 9025 9024 9026 9028 9027 9029 + 9031 9030 9032 9034 9033 9035 9037 9036 9038 + 9040 9039 9041 9043 9042 9044 9046 9045 9047 + 9049 9048 9050 9052 9051 9053 9055 9054 9056 + 9058 9057 9059 9061 9060 9062 9064 9063 9065 + 9067 9066 9068 9070 9069 9071 9073 9072 9074 + 9076 9075 9077 9079 9078 9080 9082 9081 9083 + 9085 9084 9086 9088 9087 9089 9091 9090 9092 + 9094 9093 9095 9097 9096 9098 9100 9099 9101 + 9103 9102 9104 9106 9105 9107 9109 9108 9110 + 9112 9111 9113 9115 9114 9116 9118 9117 9119 + 9121 9120 9122 9124 9123 9125 9127 9126 9128 + 9130 9129 9131 9133 9132 9134 9136 9135 9137 + 9139 9138 9140 9142 9141 9143 9145 9144 9146 + 9148 9147 9149 9151 9150 9152 9154 9153 9155 + 9157 9156 9158 9160 9159 9161 9163 9162 9164 + 9166 9165 9167 9169 9168 9170 9172 9171 9173 + 9175 9174 9176 9178 9177 9179 9181 9180 9182 + 9184 9183 9185 9187 9186 9188 9190 9189 9191 + 9193 9192 9194 9196 9195 9197 9199 9198 9200 + 9202 9201 9203 9205 9204 9206 9208 9207 9209 + 9211 9210 9212 9214 9213 9215 9217 9216 9218 + 9220 9219 9221 9223 9222 9224 9226 9225 9227 + 9229 9228 9230 9232 9231 9233 9235 9234 9236 + 9238 9237 9239 9241 9240 9242 9244 9243 9245 + 9247 9246 9248 9250 9249 9251 9253 9252 9254 + 9256 9255 9257 9259 9258 9260 9262 9261 9263 + 9265 9264 9266 9268 9267 9269 9271 9270 9272 + 9274 9273 9275 9277 9276 9278 9280 9279 9281 + 9283 9282 9284 9286 9285 9287 9289 9288 9290 + 9292 9291 9293 9295 9294 9296 9298 9297 9299 + 9301 9300 9302 9304 9303 9305 9307 9306 9308 + 9310 9309 9311 9313 9312 9314 9316 9315 9317 + 9319 9318 9320 9322 9321 9323 9325 9324 9326 + 9328 9327 9329 9331 9330 9332 9334 9333 9335 + 9337 9336 9338 9340 9339 9341 9343 9342 9344 + 9346 9345 9347 9349 9348 9350 9352 9351 9353 + 9355 9354 9356 9358 9357 9359 9361 9360 9362 + 9364 9363 9365 9367 9366 9368 9370 9369 9371 + 9373 9372 9374 9376 9375 9377 9379 9378 9380 + 9382 9381 9383 9385 9384 9386 9388 9387 9389 + 9391 9390 9392 9394 9393 9395 9397 9396 9398 + 9400 9399 9401 9403 9402 9404 9406 9405 9407 + 9409 9408 9410 9412 9411 9413 9415 9414 9416 + 9418 9417 9419 9421 9420 9422 9424 9423 9425 + 9427 9426 9428 9430 9429 9431 9433 9432 9434 + 9436 9435 9437 9439 9438 9440 9442 9441 9443 + 9445 9444 9446 9448 9447 9449 9451 9450 9452 + 9454 9453 9455 9457 9456 9458 9460 9459 9461 + 9463 9462 9464 9466 9465 9467 9469 9468 9470 + 9472 9471 9473 9475 9474 9476 9478 9477 9479 + 9481 9480 9482 9484 9483 9485 9487 9486 9488 + 9490 9489 9491 9493 9492 9494 9496 9495 9497 + 9499 9498 9500 9502 9501 9503 9505 9504 9506 + 9508 9507 9509 9511 9510 9512 9514 9513 9515 + 9517 9516 9518 9520 9519 9521 9523 9522 9524 + 9526 9525 9527 9529 9528 9530 9532 9531 9533 + 9535 9534 9536 9538 9537 9539 9541 9540 9542 + 9544 9543 9545 9547 9546 9548 9550 9549 9551 + 9553 9552 9554 9556 9555 9557 9559 9558 9560 + 9562 9561 9563 9565 9564 9566 9568 9567 9569 + 9571 9570 9572 9574 9573 9575 9577 9576 9578 + 9580 9579 9581 9583 9582 9584 9586 9585 9587 + 9589 9588 9590 9592 9591 9593 9595 9594 9596 + 9598 9597 9599 9601 9600 9602 9604 9603 9605 + 9607 9606 9608 9610 9609 9611 9613 9612 9614 + 9616 9615 9617 9619 9618 9620 9622 9621 9623 + 9625 9624 9626 9628 9627 9629 9631 9630 9632 + 9634 9633 9635 9637 9636 9638 9640 9639 9641 + 9643 9642 9644 9646 9645 9647 9649 9648 9650 + 9652 9651 9653 9655 9654 9656 9658 9657 9659 + 9661 9660 9662 9664 9663 9665 9667 9666 9668 + 9670 9669 9671 9673 9672 9674 9676 9675 9677 + 9679 9678 9680 9682 9681 9683 9685 9684 9686 + 9688 9687 9689 9691 9690 9692 9694 9693 9695 + 9697 9696 9698 9700 9699 9701 9703 9702 9704 + 9706 9705 9707 9709 9708 9710 9712 9711 9713 + 9715 9714 9716 9718 9717 9719 9721 9720 9722 + 9724 9723 9725 9727 9726 9728 9730 9729 9731 + 9733 9732 9734 9736 9735 9737 9739 9738 9740 + 9742 9741 9743 9745 9744 9746 9748 9747 9749 + 9751 9750 9752 9754 9753 9755 9757 9756 9758 + 9760 9759 9761 9763 9762 9764 9766 9765 9767 + 9769 9768 9770 9772 9771 9773 9775 9774 9776 + 9778 9777 9779 9781 9780 9782 9784 9783 9785 + 9787 9786 9788 9790 9789 9791 9793 9792 9794 + 9796 9795 9797 9799 9798 9800 9802 9801 9803 + 9805 9804 9806 9808 9807 9809 9811 9810 9812 + 9814 9813 9815 9817 9816 9818 9820 9819 9821 + 9823 9822 9824 9826 9825 9827 9829 9828 9830 + 9832 9831 9833 9835 9834 9836 9838 9837 9839 + 9841 9840 9842 9844 9843 9845 9847 9846 9848 + 9850 9849 9851 9853 9852 9854 9856 9855 9857 + 9859 9858 9860 9862 9861 9863 9865 9864 9866 + 9868 9867 9869 9871 9870 9872 9874 9873 9875 + 9877 9876 9878 9880 9879 9881 9883 9882 9884 + 9886 9885 9887 9889 9888 9890 9892 9891 9893 + 9895 9894 9896 9898 9897 9899 9901 9900 9902 + 9904 9903 9905 9907 9906 9908 9910 9909 9911 + 9913 9912 9914 9916 9915 9917 9919 9918 9920 + 9922 9921 9923 9925 9924 9926 9928 9927 9929 + 9931 9930 9932 9934 9933 9935 9937 9936 9938 + 9940 9939 9941 9943 9942 9944 9946 9945 9947 + 9949 9948 9950 9952 9951 9953 9955 9954 9956 + 9958 9957 9959 9961 9960 9962 9964 9963 9965 + 9967 9966 9968 9970 9969 9971 9973 9972 9974 + 9976 9975 9977 9979 9978 9980 9982 9981 9983 + 9985 9984 9986 9988 9987 9989 9991 9990 9992 + 9994 9993 9995 9997 9996 9998 10000 9999 10001 + 10003 10002 10004 10006 10005 10007 10009 10008 10010 + 10012 10011 10013 10015 10014 10016 10018 10017 10019 + 10021 10020 10022 10024 10023 10025 10027 10026 10028 + 10030 10029 10031 10033 10032 10034 10036 10035 10037 + 10039 10038 10040 10042 10041 10043 10045 10044 10046 + 10048 10047 10049 10051 10050 10052 10054 10053 10055 + 10057 10056 10058 10060 10059 10061 10063 10062 10064 + 10066 10065 10067 10069 10068 10070 10072 10071 10073 + 10075 10074 10076 10078 10077 10079 10081 10080 10082 + 10084 10083 10085 10087 10086 10088 10090 10089 10091 + 10093 10092 10094 10096 10095 10097 10099 10098 10100 + 10102 10101 10103 10105 10104 10106 10108 10107 10109 + 10111 10110 10112 10114 10113 10115 10117 10116 10118 + 10120 10119 10121 10123 10122 10124 10126 10125 10127 + 10129 10128 10130 10132 10131 10133 10135 10134 10136 + 10138 10137 10139 10141 10140 10142 10144 10143 10145 + 10147 10146 10148 10150 10149 10151 10153 10152 10154 + 10156 10155 10157 10159 10158 10160 10162 10161 10163 + 10165 10164 10166 10168 10167 10169 10171 10170 10172 + 10174 10173 10175 10177 10176 10178 10180 10179 10181 + 10183 10182 10184 10186 10185 10187 10189 10188 10190 + 10192 10191 10193 10195 10194 10196 10198 10197 10199 + 10201 10200 10202 10204 10203 10205 10207 10206 10208 + 10210 10209 10211 10213 10212 10214 10216 10215 10217 + 10219 10218 10220 10222 10221 10223 10225 10224 10226 + 10228 10227 10229 10231 10230 10232 10234 10233 10235 + 10237 10236 10238 10240 10239 10241 10243 10242 10244 + 10246 10245 10247 10249 10248 10250 10252 10251 10253 + 10255 10254 10256 10258 10257 10259 10261 10260 10262 + 10264 10263 10265 10267 10266 10268 10270 10269 10271 + 10273 10272 10274 10276 10275 10277 10279 10278 10280 + 10282 10281 10283 10285 10284 10286 10288 10287 10289 + 10291 10290 10292 10294 10293 10295 10297 10296 10298 + 10300 10299 10301 10303 10302 10304 10306 10305 10307 + 10309 10308 10310 10312 10311 10313 10315 10314 10316 + 10318 10317 10319 10321 10320 10322 10324 10323 10325 + 10327 10326 10328 10330 10329 10331 10333 10332 10334 + 10336 10335 10337 10339 10338 10340 10342 10341 10343 + 10345 10344 10346 10348 10347 10349 10351 10350 10352 + 10354 10353 10355 10357 10356 10358 10360 10359 10361 + 10363 10362 10364 10366 10365 10367 10369 10368 10370 + 10372 10371 10373 10375 10374 10376 10378 10377 10379 + 10381 10380 10382 10384 10383 10385 10387 10386 10388 + 10390 10389 10391 10393 10392 10394 10396 10395 10397 + 10399 10398 10400 10402 10401 10403 10405 10404 10406 + 10408 10407 10409 10411 10410 10412 10414 10413 10415 + 10417 10416 10418 10420 10419 10421 10423 10422 10424 + 10426 10425 10427 10429 10428 10430 10432 10431 10433 + 10435 10434 10436 10438 10437 10439 10441 10440 10442 + 10444 10443 10445 10447 10446 10448 10450 10449 10451 + 10453 10452 10454 10456 10455 10457 10459 10458 10460 + 10462 10461 10463 10465 10464 10466 10468 10467 10469 + 10471 10470 10472 10474 10473 10475 10477 10476 10478 + 10480 10479 10481 10483 10482 10484 10486 10485 10487 + 10489 10488 10490 10492 10491 10493 10495 10494 10496 + 10498 10497 10499 10501 10500 10502 10504 10503 10505 + 10507 10506 10508 10510 10509 10511 10513 10512 10514 + 10516 10515 10517 10519 10518 10520 10522 10521 10523 + 10525 10524 10526 10528 10527 10529 10531 10530 10532 + 10534 10533 10535 10537 10536 10538 10540 10539 10541 + 10543 10542 10544 10546 10545 10547 10549 10548 10550 + 10552 10551 10553 10555 10554 10556 10558 10557 10559 + 10561 10560 10562 10564 10563 10565 10567 10566 10568 + 10570 10569 10571 10573 10572 10574 10576 10575 10577 + 10579 10578 10580 10582 10581 10583 10585 10584 10586 + 10588 10587 10589 10591 10590 10592 10594 10593 10595 + 10597 10596 10598 10600 10599 10601 10603 10602 10604 + 10606 10605 10607 10609 10608 10610 10612 10611 10613 + 10615 10614 10616 10618 10617 10619 10621 10620 10622 + 10624 10623 10625 10627 10626 10628 10630 10629 10631 + 10633 10632 10634 10636 10635 10637 10639 10638 10640 + 10642 10641 10643 10645 10644 10646 10648 10647 10649 + 10651 10650 10652 10654 10653 10655 10657 10656 10658 + 10660 10659 10661 10663 10662 10664 10666 10665 10667 + 10669 10668 10670 10672 10671 10673 10675 10674 10676 + 10678 10677 10679 10681 10680 10682 10684 10683 10685 + 10687 10686 10688 10690 10689 10691 10693 10692 10694 + 10696 10695 10697 10699 10698 10700 10702 10701 10703 + 10705 10704 10706 10708 10707 10709 10711 10710 10712 + 10714 10713 10715 10717 10716 10718 10720 10719 10721 + 10723 10722 10724 10726 10725 10727 10729 10728 10730 + 10732 10731 10733 10735 10734 10736 10738 10737 10739 + 10741 10740 10742 10744 10743 10745 10747 10746 10748 + 10750 10749 10751 10753 10752 10754 10756 10755 10757 + 10759 10758 10760 10762 10761 10763 10765 10764 10766 + 10768 10767 10769 10771 10770 10772 10774 10773 10775 + 10777 10776 10778 10780 10779 10781 10783 10782 10784 + 10786 10785 10787 10789 10788 10790 10792 10791 10793 + 10795 10794 10796 10798 10797 10799 10801 10800 10802 + 10804 10803 10805 10807 10806 10808 10810 10809 10811 + 10813 10812 10814 10816 10815 10817 10819 10818 10820 + 10822 10821 10823 10825 10824 10826 10828 10827 10829 + 10831 10830 10832 10834 10833 10835 10837 10836 10838 + 10840 10839 10841 10843 10842 10844 10846 10845 10847 + 10849 10848 10850 10852 10851 10853 10855 10854 10856 + 10858 10857 10859 10861 10860 10862 10864 10863 10865 + 10867 10866 10868 10870 10869 10871 10873 10872 10874 + 10876 10875 10877 10879 10878 10880 10882 10881 10883 + 10885 10884 10886 10888 10887 10889 10891 10890 10892 + 10894 10893 10895 10897 10896 10898 10900 10899 10901 + 10903 10902 10904 10906 10905 10907 10909 10908 10910 + 10912 10911 10913 10915 10914 10916 10918 10917 10919 + 10921 10920 10922 10924 10923 10925 10927 10926 10928 + 10930 10929 10931 10933 10932 10934 10936 10935 10937 + 10939 10938 10940 10942 10941 10943 10945 10944 10946 + 10948 10947 10949 10951 10950 10952 10954 10953 10955 + 10957 10956 10958 10960 10959 10961 10963 10962 10964 + 10966 10965 10967 10969 10968 10970 10972 10971 10973 + 10975 10974 10976 10978 10977 10979 10981 10980 10982 + 10984 10983 10985 10987 10986 10988 10990 10989 10991 + 10993 10992 10994 10996 10995 10997 10999 10998 11000 + 11002 11001 11003 11005 11004 11006 11008 11007 11009 + 11011 11010 11012 11014 11013 11015 11017 11016 11018 + 11020 11019 11021 11023 11022 11024 11026 11025 11027 + 11029 11028 11030 11032 11031 11033 11035 11034 11036 + 11038 11037 11039 11041 11040 11042 11044 11043 11045 + 11047 11046 11048 11050 11049 11051 11053 11052 11054 + 11056 11055 11057 11059 11058 11060 11062 11061 11063 + 11065 11064 11066 11068 11067 11069 11071 11070 11072 + 11074 11073 11075 11077 11076 11078 11080 11079 11081 + 11083 11082 11084 11086 11085 11087 11089 11088 11090 + 11092 11091 11093 11095 11094 11096 11098 11097 11099 + 11101 11100 11102 11104 11103 11105 11107 11106 11108 + 11110 11109 11111 11113 11112 11114 11116 11115 11117 + 11119 11118 11120 11122 11121 11123 11125 11124 11126 + 11128 11127 11129 11131 11130 11132 11134 11133 11135 + 11137 11136 11138 11140 11139 11141 11143 11142 11144 + 11146 11145 11147 11149 11148 11150 11152 11151 11153 + 11155 11154 11156 11158 11157 11159 11161 11160 11162 + 11164 11163 11165 11167 11166 11168 11170 11169 11171 + 11173 11172 11174 11176 11175 11177 11179 11178 11180 + 11182 11181 11183 11185 11184 11186 11188 11187 11189 + 11191 11190 11192 11194 11193 11195 11197 11196 11198 + 11200 11199 11201 11203 11202 11204 11206 11205 11207 + 11209 11208 11210 11212 11211 11213 11215 11214 11216 + 11218 11217 11219 11221 11220 11222 11224 11223 11225 + 11227 11226 11228 11230 11229 11231 11233 11232 11234 + 11236 11235 11237 11239 11238 11240 11242 11241 11243 + 11245 11244 11246 11248 11247 11249 11251 11250 11252 + 11254 11253 11255 11257 11256 11258 11260 11259 11261 + 11263 11262 11264 11266 11265 11267 11269 11268 11270 + 11272 11271 11273 11275 11274 11276 11278 11277 11279 + 11281 11280 11282 11284 11283 11285 11287 11286 11288 + 11290 11289 11291 11293 11292 11294 11296 11295 11297 + 11299 11298 11300 11302 11301 11303 11305 11304 11306 + 11308 11307 11309 11311 11310 11312 11314 11313 11315 + 11317 11316 11318 11320 11319 11321 11323 11322 11324 + 11326 11325 11327 11329 11328 11330 11332 11331 11333 + 11335 11334 11336 11338 11337 11339 11341 11340 11342 + 11344 11343 11345 11347 11346 11348 11350 11349 11351 + 11353 11352 11354 11356 11355 11357 11359 11358 11360 + 11362 11361 11363 11365 11364 11366 11368 11367 11369 + 11371 11370 11372 11374 11373 11375 11377 11376 11378 + 11380 11379 11381 11383 11382 11384 11386 11385 11387 + 11389 11388 11390 11392 11391 11393 11395 11394 11396 + 11398 11397 11399 11401 11400 11402 11404 11403 11405 + 11407 11406 11408 11410 11409 11411 11413 11412 11414 + 11416 11415 11417 11419 11418 11420 11422 11421 11423 + 11425 11424 11426 11428 11427 11429 11431 11430 11432 + 11434 11433 11435 11437 11436 11438 11440 11439 11441 + 11443 11442 11444 11446 11445 11447 11449 11448 11450 + 11452 11451 11453 11455 11454 11456 11458 11457 11459 + 11461 11460 11462 11464 11463 11465 11467 11466 11468 + 11470 11469 11471 11473 11472 11474 11476 11475 11477 + 11479 11478 11480 11482 11481 11483 11485 11484 11486 + 11488 11487 11489 11491 11490 11492 11494 11493 11495 + 11497 11496 11498 11500 11499 11501 11503 11502 11504 + 11506 11505 11507 11509 11508 11510 11512 11511 11513 + 11515 11514 11516 11518 11517 11519 11521 11520 11522 + 11524 11523 11525 11527 11526 11528 11530 11529 11531 + 11533 11532 11534 11536 11535 11537 11539 11538 11540 + 11542 11541 11543 11545 11544 11546 11548 11547 11549 + 11551 11550 11552 11554 11553 11555 11557 11556 11558 + 11560 11559 11561 11563 11562 11564 11566 11565 11567 + 11569 11568 11570 11572 11571 11573 11575 11574 11576 + 11578 11577 11579 11581 11580 11582 11584 11583 11585 + 11587 11586 11588 11590 11589 11591 11593 11592 11594 + 11596 11595 11597 11599 11598 11600 11602 11601 11603 + 11605 11604 11606 11608 11607 11609 11611 11610 11612 + 11614 11613 11615 11617 11616 11618 11620 11619 11621 + 11623 11622 11624 11626 11625 11627 11629 11628 11630 + 11632 11631 11633 11635 11634 11636 11638 11637 11639 + 11641 11640 11642 11644 11643 11645 11647 11646 11648 + 11650 11649 11651 11653 11652 11654 11656 11655 11657 + 11659 11658 11660 11662 11661 11663 11665 11664 11666 + 11668 11667 11669 11671 11670 11672 11674 11673 11675 + 11677 11676 11678 11680 11679 11681 11683 11682 11684 + 11686 11685 11687 11689 11688 11690 11692 11691 11693 + 11695 11694 11696 11698 11697 11699 11701 11700 11702 + 11704 11703 11705 11707 11706 11708 11710 11709 11711 + 11713 11712 11714 11716 11715 11717 11719 11718 11720 + 11722 11721 11723 11725 11724 11726 11728 11727 11729 + 11731 11730 11732 11734 11733 11735 11737 11736 11738 + 11740 11739 11741 11743 11742 11744 11746 11745 11747 + 11749 11748 11750 11752 11751 11753 11755 11754 11756 + 11758 11757 11759 11761 11760 11762 11764 11763 11765 + 11767 11766 11768 11770 11769 11771 11773 11772 11774 + 11776 11775 11777 11779 11778 11780 11782 11781 11783 + 11785 11784 11786 11788 11787 11789 11791 11790 11792 + 11794 11793 11795 11797 11796 11798 11800 11799 11801 + 11803 11802 11804 11806 11805 11807 11809 11808 11810 + 11812 11811 11813 11815 11814 11816 11818 11817 11819 + 11821 11820 11822 11824 11823 11825 11827 11826 11828 + 11830 11829 11831 11833 11832 11834 11836 11835 11837 + 11839 11838 11840 11842 11841 11843 11845 11844 11846 + 11848 11847 11849 11851 11850 11852 11854 11853 11855 + 11857 11856 11858 11860 11859 11861 11863 11862 11864 + 11866 11865 11867 11869 11868 11870 11872 11871 11873 + 11875 11874 11876 11878 11877 11879 11881 11880 11882 + 11884 11883 11885 11887 11886 11888 11890 11889 11891 + 11893 11892 11894 11896 11895 11897 11899 11898 11900 + 11902 11901 11903 11905 11904 11906 11908 11907 11909 + 11911 11910 11912 11914 11913 11915 11917 11916 11918 + 11920 11919 11921 11923 11922 11924 11926 11925 11927 + 11929 11928 11930 11932 11931 11933 11935 11934 11936 + 11938 11937 11939 11941 11940 11942 11944 11943 11945 + 11947 11946 11948 11950 11949 11951 11953 11952 11954 + 11956 11955 11957 11959 11958 11960 11962 11961 11963 + 11965 11964 11966 11968 11967 11969 11971 11970 11972 + 11974 11973 11975 11977 11976 11978 11980 11979 11981 + 11983 11982 11984 11986 11985 11987 11989 11988 11990 + 11992 11991 11993 11995 11994 11996 11998 11997 11999 + 12001 12000 12002 12004 12003 12005 12007 12006 12008 + 12010 12009 12011 12013 12012 12014 12016 12015 12017 + 12019 12018 12020 12022 12021 12023 12025 12024 12026 + 12028 12027 12029 12031 12030 12032 12034 12033 12035 + 12037 12036 12038 12040 12039 12041 12043 12042 12044 + 12046 12045 12047 12049 12048 12050 12052 12051 12053 + 12055 12054 12056 12058 12057 12059 12061 12060 12062 + 12064 12063 12065 12067 12066 12068 12070 12069 12071 + 12073 12072 12074 12076 12075 12077 12079 12078 12080 + 12082 12081 12083 12085 12084 12086 12088 12087 12089 + 12091 12090 12092 12094 12093 12095 12097 12096 12098 + 12100 12099 12101 12103 12102 12104 12106 12105 12107 + 12109 12108 12110 12112 12111 12113 12115 12114 12116 + 12118 12117 12119 12121 12120 12122 12124 12123 12125 + 12127 12126 12128 12130 12129 12131 12133 12132 12134 + 12136 12135 12137 12139 12138 12140 12142 12141 12143 + 12145 12144 12146 12148 12147 12149 12151 12150 12152 + 12154 12153 12155 12157 12156 12158 12160 12159 12161 + 12163 12162 12164 12166 12165 12167 12169 12168 12170 + 12172 12171 12173 12175 12174 12176 12178 12177 12179 + 12181 12180 12182 12184 12183 12185 12187 12186 12188 + 12190 12189 12191 12193 12192 12194 12196 12195 12197 + 12199 12198 12200 12202 12201 12203 12205 12204 12206 + 12208 12207 12209 12211 12210 12212 12214 12213 12215 + 12217 12216 12218 12220 12219 12221 12223 12222 12224 + 12226 12225 12227 12229 12228 12230 12232 12231 12233 + 12235 12234 12236 12238 12237 12239 12241 12240 12242 + 12244 12243 12245 12247 12246 12248 12250 12249 12251 + 12253 12252 12254 12256 12255 12257 12259 12258 12260 + 12262 12261 12263 12265 12264 12266 12268 12267 12269 + 12271 12270 12272 12274 12273 12275 12277 12276 12278 + 12280 12279 12281 12283 12282 12284 12286 12285 12287 + 12289 12288 12290 12292 12291 12293 12295 12294 12296 + 12298 12297 12299 12301 12300 12302 12304 12303 12305 + 12307 12306 12308 12310 12309 12311 12313 12312 12314 + 12316 12315 12317 12319 12318 12320 12322 12321 12323 + 12325 12324 12326 12328 12327 12329 12331 12330 12332 + 12334 12333 12335 12337 12336 12338 12340 12339 12341 + 12343 12342 12344 12346 12345 12347 12349 12348 12350 + 12352 12351 12353 12355 12354 12356 12358 12357 12359 + 12361 12360 12362 12364 12363 12365 12367 12366 12368 + 12370 12369 12371 12373 12372 12374 12376 12375 12377 + 12379 12378 12380 12382 12381 12383 12385 12384 12386 + 12388 12387 12389 12391 12390 12392 12394 12393 12395 + 12397 12396 12398 12400 12399 12401 12403 12402 12404 + 12406 12405 12407 12409 12408 12410 12412 12411 12413 + 12415 12414 12416 12418 12417 12419 12421 12420 12422 + 12424 12423 12425 12427 12426 12428 12430 12429 12431 + 12433 12432 12434 12436 12435 12437 12439 12438 12440 + 12442 12441 12443 12445 12444 12446 12448 12447 12449 + 12451 12450 12452 12454 12453 12455 12457 12456 12458 + 12460 12459 12461 12463 12462 12464 12466 12465 12467 + 12469 12468 12470 12472 12471 12473 12475 12474 12476 + 12478 12477 12479 12481 12480 12482 12484 12483 12485 + 12487 12486 12488 12490 12489 12491 12493 12492 12494 + 12496 12495 12497 12499 12498 12500 12502 12501 12503 + 12505 12504 12506 12508 12507 12509 12511 12510 12512 + 12514 12513 12515 12517 12516 12518 12520 12519 12521 + 12523 12522 12524 12526 12525 12527 12529 12528 12530 + 12532 12531 12533 12535 12534 12536 12538 12537 12539 + 12541 12540 12542 12544 12543 12545 12547 12546 12548 + 12550 12549 12551 12553 12552 12554 12556 12555 12557 + 12559 12558 12560 12562 12561 12563 12565 12564 12566 + 12568 12567 12569 12571 12570 12572 12574 12573 12575 + 12577 12576 12578 12580 12579 12581 12583 12582 12584 + 12586 12585 12587 12589 12588 12590 12592 12591 12593 + 12595 12594 12596 12598 12597 12599 12601 12600 12602 + 12604 12603 12605 12607 12606 12608 12610 12609 12611 + 12613 12612 12614 12616 12615 12617 12619 12618 12620 + 12622 12621 12623 12625 12624 12626 12628 12627 12629 + 12631 12630 12632 12634 12633 12635 12637 12636 12638 + 12640 12639 12641 12643 12642 12644 12646 12645 12647 + 12649 12648 12650 12652 12651 12653 12655 12654 12656 + 12658 12657 12659 12661 12660 12662 12664 12663 12665 + 12667 12666 12668 12670 12669 12671 12673 12672 12674 + 12676 12675 12677 12679 12678 12680 12682 12681 12683 + 12685 12684 12686 12688 12687 12689 12691 12690 12692 + 12694 12693 12695 12697 12696 12698 12700 12699 12701 + 12703 12702 12704 12706 12705 12707 12709 12708 12710 + 12712 12711 12713 12715 12714 12716 12718 12717 12719 + 12721 12720 12722 12724 12723 12725 12727 12726 12728 + 12730 12729 12731 12733 12732 12734 12736 12735 12737 + 12739 12738 12740 12742 12741 12743 12745 12744 12746 + 12748 12747 12749 12751 12750 12752 12754 12753 12755 + 12757 12756 12758 12760 12759 12761 12763 12762 12764 + 12766 12765 12767 12769 12768 12770 12772 12771 12773 + 12775 12774 12776 12778 12777 12779 12781 12780 12782 + 12784 12783 12785 12787 12786 12788 12790 12789 12791 + 12793 12792 12794 12796 12795 12797 12799 12798 12800 + 12802 12801 12803 12805 12804 12806 12808 12807 12809 + 12811 12810 12812 12814 12813 12815 12817 12816 12818 + 12820 12819 12821 12823 12822 12824 12826 12825 12827 + 12829 12828 12830 12832 12831 12833 12835 12834 12836 + 12838 12837 12839 12841 12840 12842 12844 12843 12845 + 12847 12846 12848 12850 12849 12851 12853 12852 12854 + 12856 12855 12857 12859 12858 12860 12862 12861 12863 + 12865 12864 12866 12868 12867 12869 12871 12870 12872 + 12874 12873 12875 12877 12876 12878 12880 12879 12881 + 12883 12882 12884 12886 12885 12887 12889 12888 12890 + 12892 12891 12893 12895 12894 12896 12898 12897 12899 + 12901 12900 12902 12904 12903 12905 12907 12906 12908 + 12910 12909 12911 12913 12912 12914 12916 12915 12917 + 12919 12918 12920 12922 12921 12923 12925 12924 12926 + 12928 12927 12929 12931 12930 12932 12934 12933 12935 + 12937 12936 12938 12940 12939 12941 12943 12942 12944 + 12946 12945 12947 12949 12948 12950 12952 12951 12953 + 12955 12954 12956 12958 12957 12959 12961 12960 12962 + 12964 12963 12965 12967 12966 12968 12970 12969 12971 + 12973 12972 12974 12976 12975 12977 12979 12978 12980 + 12982 12981 12983 12985 12984 12986 12988 12987 12989 + 12991 12990 12992 12994 12993 12995 12997 12996 12998 + 13000 12999 13001 13003 13002 13004 13006 13005 13007 + 13009 13008 13010 13012 13011 13013 13015 13014 13016 + 13018 13017 13019 13021 13020 13022 13024 13023 13025 + 13027 13026 13028 13030 13029 13031 13033 13032 13034 + 13036 13035 13037 13039 13038 13040 13042 13041 13043 + 13045 13044 13046 13048 13047 13049 13051 13050 13052 + 13054 13053 13055 13057 13056 13058 13060 13059 13061 + 13063 13062 13064 13066 13065 13067 13069 13068 13070 + 13072 13071 13073 13075 13074 13076 13078 13077 13079 + 13081 13080 13082 13084 13083 13085 13087 13086 13088 + 13090 13089 13091 13093 13092 13094 13096 13095 13097 + 13099 13098 13100 13102 13101 13103 13105 13104 13106 + 13108 13107 13109 13111 13110 13112 13114 13113 13115 + 13117 13116 13118 13120 13119 13121 13123 13122 13124 + 13126 13125 13127 13129 13128 13130 13132 13131 13133 + 13135 13134 13136 13138 13137 13139 13141 13140 13142 + 13144 13143 13145 13147 13146 13148 13150 13149 13151 + 13153 13152 13154 13156 13155 13157 13159 13158 13160 + 13162 13161 13163 13165 13164 13166 13168 13167 13169 + 13171 13170 13172 13174 13173 13175 13177 13176 13178 + 13180 13179 13181 13183 13182 13184 13186 13185 13187 + 13189 13188 13190 13192 13191 13193 13195 13194 13196 + 13198 13197 13199 13201 13200 13202 13204 13203 13205 + 13207 13206 13208 13210 13209 13211 13213 13212 13214 + 13216 13215 13217 13219 13218 13220 13222 13221 13223 + 13225 13224 13226 13228 13227 13229 13231 13230 13232 + 13234 13233 13235 13237 13236 13238 13240 13239 13241 + 13243 13242 13244 13246 13245 13247 13249 13248 13250 + 13252 13251 13253 13255 13254 13256 13258 13257 13259 + 13261 13260 13262 13264 13263 13265 13267 13266 13268 + 13270 13269 13271 13273 13272 13274 13276 13275 13277 + 13279 13278 13280 13282 13281 13283 13285 13284 13286 + 13288 13287 13289 13291 13290 13292 13294 13293 13295 + 13297 13296 13298 13300 13299 13301 13303 13302 13304 + 13306 13305 13307 13309 13308 13310 13312 13311 13313 + 13315 13314 13316 13318 13317 13319 13321 13320 13322 + 13324 13323 13325 13327 13326 13328 13330 13329 13331 + 13333 13332 13334 13336 13335 13337 13339 13338 13340 + 13342 13341 13343 13345 13344 13346 13348 13347 13349 + 13351 13350 13352 13354 13353 13355 13357 13356 13358 + 13360 13359 13361 13363 13362 13364 13366 13365 13367 + 13369 13368 13370 13372 13371 13373 13375 13374 13376 + 13378 13377 13379 13381 13380 13382 13384 13383 13385 + 13387 13386 13388 13390 13389 13391 13393 13392 13394 + 13396 13395 13397 13399 13398 13400 13402 13401 13403 + 13405 13404 13406 13408 13407 13409 13411 13410 13412 + 13414 13413 13415 13417 13416 13418 13420 13419 13421 + 13423 13422 13424 13426 13425 13427 13429 13428 13430 + 13432 13431 13433 13435 13434 13436 13438 13437 13439 + 13441 13440 13442 13444 13443 13445 13447 13446 13448 + 13450 13449 13451 13453 13452 13454 13456 13455 13457 + 13459 13458 13460 13462 13461 13463 13465 13464 13466 + 13468 13467 13469 13471 13470 13472 13474 13473 13475 + 13477 13476 13478 13480 13479 13481 13483 13482 13484 + 13486 13485 13487 13489 13488 13490 13492 13491 13493 + 13495 13494 13496 13498 13497 13499 13501 13500 13502 + 13504 13503 13505 13507 13506 13508 13510 13509 13511 + 13513 13512 13514 13516 13515 13517 13519 13518 13520 + 13522 13521 13523 13525 13524 13526 13528 13527 13529 + 13531 13530 13532 13534 13533 13535 13537 13536 13538 + 13540 13539 13541 13543 13542 13544 13546 13545 13547 + 13549 13548 13550 13552 13551 13553 13555 13554 13556 + 13558 13557 13559 13561 13560 13562 13564 13563 13565 + 13567 13566 13568 13570 13569 13571 13573 13572 13574 + 13576 13575 13577 13579 13578 13580 13582 13581 13583 + 13585 13584 13586 13588 13587 13589 13591 13590 13592 + 13594 13593 13595 13597 13596 13598 13600 13599 13601 + 13603 13602 13604 13606 13605 13607 13609 13608 13610 + 13612 13611 13613 13615 13614 13616 13618 13617 13619 + 13621 13620 13622 13624 13623 13625 13627 13626 13628 + 13630 13629 13631 13633 13632 13634 13636 13635 13637 + 13639 13638 13640 13642 13641 13643 13645 13644 13646 + 13648 13647 13649 13651 13650 13652 13654 13653 13655 + 13657 13656 13658 13660 13659 13661 13663 13662 13664 + 13666 13665 13667 13669 13668 13670 13672 13671 13673 + 13675 13674 13676 13678 13677 13679 13681 13680 13682 + 13684 13683 13685 13687 13686 13688 13690 13689 13691 + 13693 13692 13694 13696 13695 13697 13699 13698 13700 + 13702 13701 13703 13705 13704 13706 13708 13707 13709 + 13711 13710 13712 13714 13713 13715 13717 13716 13718 + 13720 13719 13721 13723 13722 13724 13726 13725 13727 + 13729 13728 13730 13732 13731 13733 13735 13734 13736 + 13738 13737 13739 13741 13740 13742 13744 13743 13745 + 13747 13746 13748 13750 13749 13751 13753 13752 13754 + 13756 13755 13757 13759 13758 13760 13762 13761 13763 + 13765 13764 13766 13768 13767 13769 13771 13770 13772 + 13774 13773 13775 13777 13776 13778 13780 13779 13781 + 13783 13782 13784 13786 13785 13787 13789 13788 13790 + 13792 13791 13793 13795 13794 13796 13798 13797 13799 + 13801 13800 13802 13804 13803 13805 13807 13806 13808 + 13810 13809 13811 13813 13812 13814 13816 13815 13817 + 13819 13818 13820 13822 13821 13823 13825 13824 13826 + 13828 13827 13829 13831 13830 13832 13834 13833 13835 + 13837 13836 13838 13840 13839 13841 13843 13842 13844 + 13846 13845 13847 13849 13848 13850 13852 13851 13853 + 13855 13854 13856 13858 13857 13859 13861 13860 13862 + 13864 13863 13865 13867 13866 13868 13870 13869 13871 + 13873 13872 13874 13876 13875 13877 13879 13878 13880 + 13882 13881 13883 13885 13884 13886 13888 13887 13889 + 13891 13890 13892 13894 13893 13895 13897 13896 13898 + 13900 13899 13901 13903 13902 13904 13906 13905 13907 + 13909 13908 13910 13912 13911 13913 13915 13914 13916 + 13918 13917 13919 13921 13920 13922 13924 13923 13925 + 13927 13926 13928 13930 13929 13931 13933 13932 13934 + 13936 13935 13937 13939 13938 13940 13942 13941 13943 + 13945 13944 13946 13948 13947 13949 13951 13950 13952 + 13954 13953 13955 13957 13956 13958 13960 13959 13961 + 13963 13962 13964 13966 13965 13967 13969 13968 13970 + 13972 13971 13973 13975 13974 13976 13978 13977 13979 + 13981 13980 13982 13984 13983 13985 13987 13986 13988 + 13990 13989 13991 13993 13992 13994 13996 13995 13997 + 13999 13998 14000 14002 14001 14003 14005 14004 14006 + 14008 14007 14009 14011 14010 14012 14014 14013 14015 + 14017 14016 14018 14020 14019 14021 14023 14022 14024 + 14026 14025 14027 14029 14028 14030 14032 14031 14033 + 14035 14034 14036 14038 14037 14039 14041 14040 14042 + 14044 14043 14045 14047 14046 14048 14050 14049 14051 + 14053 14052 14054 14056 14055 14057 14059 14058 14060 + 14062 14061 14063 14065 14064 14066 14068 14067 14069 + 14071 14070 14072 14074 14073 14075 14077 14076 14078 + 14080 14079 14081 14083 14082 14084 14086 14085 14087 + 14089 14088 14090 14092 14091 14093 14095 14094 14096 + 14098 14097 14099 14101 14100 14102 14104 14103 14105 + 14107 14106 14108 14110 14109 14111 14113 14112 14114 + 14116 14115 14117 14119 14118 14120 14122 14121 14123 + 14125 14124 14126 14128 14127 14129 14131 14130 14132 + 14134 14133 14135 14137 14136 14138 14140 14139 14141 + 14143 14142 14144 14146 14145 14147 14149 14148 14150 + 14152 14151 14153 14155 14154 14156 14158 14157 14159 + 14161 14160 14162 14164 14163 14165 14167 14166 14168 + 14170 14169 14171 14173 14172 14174 14176 14175 14177 + 14179 14178 14180 14182 14181 14183 14185 14184 14186 + 14188 14187 14189 14191 14190 14192 14194 14193 14195 + 14197 14196 14198 14200 14199 14201 14203 14202 14204 + 14206 14205 14207 14209 14208 14210 14212 14211 14213 + 14215 14214 14216 14218 14217 14219 14221 14220 14222 + 14224 14223 14225 14227 14226 14228 14230 14229 14231 + 14233 14232 14234 14236 14235 14237 14239 14238 14240 + 14242 14241 14243 14245 14244 14246 14248 14247 14249 + 14251 14250 14252 14254 14253 14255 14257 14256 14258 + 14260 14259 14261 14263 14262 14264 14266 14265 14267 + 14269 14268 14270 14272 14271 14273 14275 14274 14276 + 14278 14277 14279 14281 14280 14282 14284 14283 14285 + 14287 14286 14288 14290 14289 14291 14293 14292 14294 + 14296 14295 14297 14299 14298 14300 14302 14301 14303 + 14305 14304 14306 14308 14307 14309 14311 14310 14312 + 14314 14313 14315 14317 14316 14318 14320 14319 14321 + 14323 14322 14324 14326 14325 14327 14329 14328 14330 + 14332 14331 14333 14335 14334 14336 14338 14337 14339 + 14341 14340 14342 14344 14343 14345 14347 14346 14348 + 14350 14349 14351 14353 14352 14354 14356 14355 14357 + 14359 14358 14360 14362 14361 14363 14365 14364 14366 + 14368 14367 14369 14371 14370 14372 14374 14373 14375 + 14377 14376 14378 14380 14379 14381 14383 14382 14384 + 14386 14385 14387 14389 14388 14390 14392 14391 14393 + 14395 14394 14396 14398 14397 14399 14401 14400 14402 + 14404 14403 14405 14407 14406 14408 14410 14409 14411 + 14413 14412 14414 14416 14415 14417 14419 14418 14420 + 14422 14421 14423 14425 14424 14426 14428 14427 14429 + 14431 14430 14432 14434 14433 14435 14437 14436 14438 + 14440 14439 14441 14443 14442 14444 14446 14445 14447 + 14449 14448 14450 14452 14451 14453 14455 14454 14456 + 14458 14457 14459 14461 14460 14462 14464 14463 14465 + 14467 14466 14468 14470 14469 14471 14473 14472 14474 + 14476 14475 14477 14479 14478 14480 14482 14481 14483 + 14485 14484 14486 14488 14487 14489 14491 14490 14492 + 14494 14493 14495 14497 14496 14498 14500 14499 14501 + 14503 14502 14504 14506 14505 14507 14509 14508 14510 + 14512 14511 14513 14515 14514 14516 14518 14517 14519 + 14521 14520 14522 14524 14523 14525 14527 14526 14528 + 14530 14529 14531 14533 14532 14534 14536 14535 14537 + 14539 14538 14540 14542 14541 14543 14545 14544 14546 + 14548 14547 14549 14551 14550 14552 14554 14553 14555 + 14557 14556 14558 14560 14559 14561 14563 14562 14564 + 14566 14565 14567 14569 14568 14570 14572 14571 14573 + 14575 14574 14576 14578 14577 14579 14581 14580 14582 + 14584 14583 14585 14587 14586 14588 14590 14589 14591 + 14593 14592 14594 14596 14595 14597 14599 14598 14600 + 14602 14601 14603 14605 14604 14606 14608 14607 14609 + 14611 14610 14612 14614 14613 14615 14617 14616 14618 + 14620 14619 14621 14623 14622 14624 14626 14625 14627 + 14629 14628 14630 14632 14631 14633 14635 14634 14636 + 14638 14637 14639 14641 14640 14642 14644 14643 14645 + 14647 14646 14648 14650 14649 14651 14653 14652 14654 + 14656 14655 14657 14659 14658 14660 14662 14661 14663 + 14665 14664 14666 14668 14667 14669 14671 14670 14672 + 14674 14673 14675 14677 14676 14678 14680 14679 14681 + 14683 14682 14684 14686 14685 14687 14689 14688 14690 + 14692 14691 14693 14695 14694 14696 14698 14697 14699 + 14701 14700 14702 14704 14703 14705 14707 14706 14708 + 14710 14709 14711 14713 14712 14714 14716 14715 14717 + 14719 14718 14720 14722 14721 14723 14725 14724 14726 + 14728 14727 14729 14731 14730 14732 14734 14733 14735 + 14737 14736 14738 14740 14739 14741 14743 14742 14744 + 14746 14745 14747 14749 14748 14750 14752 14751 14753 + 14755 14754 14756 14758 14757 14759 14761 14760 14762 + 14764 14763 14765 14767 14766 14768 14770 14769 14771 + 14773 14772 14774 14776 14775 14777 14779 14778 14780 + 14782 14781 14783 14785 14784 14786 14788 14787 14789 + 14791 14790 14792 14794 14793 14795 14797 14796 14798 + 14800 14799 14801 14803 14802 14804 14806 14805 14807 + 14809 14808 14810 14812 14811 14813 14815 14814 14816 + 14818 14817 14819 14821 14820 14822 14824 14823 14825 + 14827 14826 14828 14830 14829 14831 14833 14832 14834 + 14836 14835 14837 14839 14838 14840 14842 14841 14843 + 14845 14844 14846 14848 14847 14849 14851 14850 14852 + 14854 14853 14855 14857 14856 14858 14860 14859 14861 + 14863 14862 14864 14866 14865 14867 14869 14868 14870 + 14872 14871 14873 14875 14874 14876 14878 14877 14879 + 14881 14880 14882 14884 14883 14885 14887 14886 14888 + 14890 14889 14891 14893 14892 14894 14896 14895 14897 + 14899 14898 14900 14902 14901 14903 14905 14904 14906 + 14908 14907 14909 14911 14910 14912 14914 14913 14915 + 14917 14916 14918 14920 14919 14921 14923 14922 14924 + 14926 14925 14927 14929 14928 14930 14932 14931 14933 + 14935 14934 14936 14938 14937 14939 14941 14940 14942 + 14944 14943 14945 14947 14946 14948 14950 14949 14951 + 14953 14952 14954 14956 14955 14957 14959 14958 14960 + 14962 14961 14963 14965 14964 14966 14968 14967 14969 + 14971 14970 14972 14974 14973 14975 14977 14976 14978 + 14980 14979 14981 14983 14982 14984 14986 14985 14987 + 14989 14988 14990 14992 14991 14993 14995 14994 14996 + 14998 14997 14999 15001 15000 15002 15004 15003 15005 + 15007 15006 15008 15010 15009 15011 15013 15012 15014 + 15016 15015 15017 15019 15018 15020 15022 15021 15023 + 15025 15024 15026 15028 15027 15029 15031 15030 15032 + 15034 15033 15035 15037 15036 15038 15040 15039 15041 + 15043 15042 15044 15046 15045 15047 15049 15048 15050 + 15052 15051 15053 15055 15054 15056 15058 15057 15059 + 15061 15060 15062 15064 15063 15065 15067 15066 15068 + 15070 15069 15071 15073 15072 15074 15076 15075 15077 + 15079 15078 15080 15082 15081 15083 15085 15084 15086 + 15088 15087 15089 15091 15090 15092 15094 15093 15095 + 15097 15096 15098 15100 15099 15101 15103 15102 15104 + 15106 15105 15107 15109 15108 15110 15112 15111 15113 + 15115 15114 15116 15118 15117 15119 15121 15120 15122 + 15124 15123 15125 15127 15126 15128 15130 15129 15131 + 15133 15132 15134 15136 15135 15137 15139 15138 15140 + 15142 15141 15143 15145 15144 15146 15148 15147 15149 + 15151 15150 15152 15154 15153 15155 15157 15156 15158 + 15160 15159 15161 15163 15162 15164 15166 15165 15167 + 15169 15168 15170 15172 15171 15173 15175 15174 15176 + 15178 15177 15179 15181 15180 15182 15184 15183 15185 + 15187 15186 15188 15190 15189 15191 15193 15192 15194 + 15196 15195 15197 15199 15198 15200 15202 15201 15203 + 15205 15204 15206 15208 15207 15209 15211 15210 15212 + 15214 15213 15215 15217 15216 15218 15220 15219 15221 + 15223 15222 15224 15226 15225 15227 15229 15228 15230 + 15232 15231 15233 15235 15234 15236 15238 15237 15239 + 15241 15240 15242 15244 15243 15245 15247 15246 15248 + 15250 15249 15251 15253 15252 15254 15256 15255 15257 + 15259 15258 15260 15262 15261 15263 15265 15264 15266 + 15268 15267 15269 15271 15270 15272 15274 15273 15275 + 15277 15276 15278 15280 15279 15281 15283 15282 15284 + 15286 15285 15287 15289 15288 15290 15292 15291 15293 + 15295 15294 15296 15298 15297 15299 15301 15300 15302 + 15304 15303 15305 15307 15306 15308 15310 15309 15311 + 15313 15312 15314 15316 15315 15317 15319 15318 15320 + 15322 15321 15323 15325 15324 15326 15328 15327 15329 + 15331 15330 15332 15334 15333 15335 15337 15336 15338 + 15340 15339 15341 15343 15342 15344 15346 15345 15347 + 15349 15348 15350 15352 15351 15353 15355 15354 15356 + 15358 15357 15359 15361 15360 15362 15364 15363 15365 + 15367 15366 15368 15370 15369 15371 15373 15372 15374 + 15376 15375 15377 15379 15378 15380 15382 15381 15383 + 15385 15384 15386 15388 15387 15389 15391 15390 15392 + 15394 15393 15395 15397 15396 15398 15400 15399 15401 + 15403 15402 15404 15406 15405 15407 15409 15408 15410 + 15412 15411 15413 15415 15414 15416 15418 15417 15419 + 15421 15420 15422 15424 15423 15425 15427 15426 15428 + 15430 15429 15431 15433 15432 15434 15436 15435 15437 + 15439 15438 15440 15442 15441 15443 15445 15444 15446 + 15448 15447 15449 15451 15450 15452 15454 15453 15455 + 15457 15456 15458 15460 15459 15461 15463 15462 15464 + 15466 15465 15467 15469 15468 15470 15472 15471 15473 + 15475 15474 15476 15478 15477 15479 15481 15480 15482 + 15484 15483 15485 15487 15486 15488 15490 15489 15491 + 15493 15492 15494 15496 15495 15497 15499 15498 15500 + 15502 15501 15503 15505 15504 15506 15508 15507 15509 + 15511 15510 15512 15514 15513 15515 15517 15516 15518 + 15520 15519 15521 15523 15522 15524 15526 15525 15527 + 15529 15528 15530 15532 15531 15533 15535 15534 15536 + 15538 15537 15539 15541 15540 15542 15544 15543 15545 + 15547 15546 15548 15550 15549 15551 15553 15552 15554 + 15556 15555 15557 15559 15558 15560 15562 15561 15563 + 15565 15564 15566 15568 15567 15569 15571 15570 15572 + 15574 15573 15575 15577 15576 15578 15580 15579 15581 + 15583 15582 15584 15586 15585 15587 15589 15588 15590 + 15592 15591 15593 15595 15594 15596 15598 15597 15599 + 15601 15600 15602 15604 15603 15605 15607 15606 15608 + 15610 15609 15611 15613 15612 15614 15616 15615 15617 + 15619 15618 15620 15622 15621 15623 15625 15624 15626 + 15628 15627 15629 15631 15630 15632 15634 15633 15635 + 15637 15636 15638 15640 15639 15641 15643 15642 15644 + 15646 15645 15647 15649 15648 15650 15652 15651 15653 + 15655 15654 15656 15658 15657 15659 15661 15660 15662 + 15664 15663 15665 15667 15666 15668 15670 15669 15671 + 15673 15672 15674 15676 15675 15677 15679 15678 15680 + 15682 15681 15683 15685 15684 15686 15688 15687 15689 + 15691 15690 15692 15694 15693 15695 15697 15696 15698 + 15700 15699 15701 15703 15702 15704 15706 15705 15707 + 15709 15708 15710 15712 15711 15713 15715 15714 15716 + 15718 15717 15719 15721 15720 15722 15724 15723 15725 + 15727 15726 15728 15730 15729 15731 15733 15732 15734 + 15736 15735 15737 15739 15738 15740 15742 15741 15743 + 15745 15744 15746 15748 15747 15749 15751 15750 15752 + 15754 15753 15755 15757 15756 15758 15760 15759 15761 + 15763 15762 15764 15766 15765 15767 15769 15768 15770 + 15772 15771 15773 15775 15774 15776 15778 15777 15779 + 15781 15780 15782 15784 15783 15785 15787 15786 15788 + 15790 15789 15791 15793 15792 15794 15796 15795 15797 + 15799 15798 15800 15802 15801 15803 15805 15804 15806 + 15808 15807 15809 15811 15810 15812 15814 15813 15815 + 15817 15816 15818 15820 15819 15821 15823 15822 15824 + 15826 15825 15827 15829 15828 15830 15832 15831 15833 + 15835 15834 15836 15838 15837 15839 15841 15840 15842 + 15844 15843 15845 15847 15846 15848 15850 15849 15851 + 15853 15852 15854 15856 15855 15857 15859 15858 15860 + 15862 15861 15863 15865 15864 15866 15868 15867 15869 + 15871 15870 15872 15874 15873 15875 15877 15876 15878 + 15880 15879 15881 15883 15882 15884 15886 15885 15887 + 15889 15888 15890 15892 15891 15893 15895 15894 15896 + 15898 15897 15899 15901 15900 15902 15904 15903 15905 + 15907 15906 15908 15910 15909 15911 15913 15912 15914 + 15916 15915 15917 15919 15918 15920 15922 15921 15923 + 15925 15924 15926 15928 15927 15929 15931 15930 15932 + 15934 15933 15935 15937 15936 15938 15940 15939 15941 + 15943 15942 15944 15946 15945 15947 15949 15948 15950 + 15952 15951 15953 15955 15954 15956 15958 15957 15959 + 15961 15960 15962 15964 15963 15965 15967 15966 15968 + 15970 15969 15971 15973 15972 15974 15976 15975 15977 + 15979 15978 15980 15982 15981 15983 15985 15984 15986 + 15988 15987 15989 15991 15990 15992 15994 15993 15995 + 15997 15996 15998 16000 15999 16001 16003 16002 16004 + 16006 16005 16007 16009 16008 16010 16012 16011 16013 + 16015 16014 16016 16018 16017 16019 16021 16020 16022 + 16024 16023 16025 16027 16026 16028 16030 16029 16031 + 16033 16032 16034 16036 16035 16037 16039 16038 16040 + 16042 16041 16043 16045 16044 16046 16048 16047 16049 + 16051 16050 16052 16054 16053 16055 16057 16056 16058 + 16060 16059 16061 16063 16062 16064 16066 16065 16067 + 16069 16068 16070 16072 16071 16073 16075 16074 16076 + 16078 16077 16079 16081 16080 16082 16084 16083 16085 + 16087 16086 16088 16090 16089 16091 16093 16092 16094 + 16096 16095 16097 16099 16098 16100 16102 16101 16103 + 16105 16104 16106 16108 16107 16109 16111 16110 16112 + 16114 16113 16115 16117 16116 16118 16120 16119 16121 + 16123 16122 16124 16126 16125 16127 16129 16128 16130 + 16132 16131 16133 16135 16134 16136 16138 16137 16139 + 16141 16140 16142 16144 16143 16145 16147 16146 16148 + 16150 16149 16151 16153 16152 16154 16156 16155 16157 + 16159 16158 16160 16162 16161 16163 16165 16164 16166 + 16168 16167 16169 16171 16170 16172 16174 16173 16175 + 16177 16176 16178 16180 16179 16181 16183 16182 16184 + 16186 16185 16187 16189 16188 16190 16192 16191 16193 + 16195 16194 16196 16198 16197 16199 16201 16200 16202 + 16204 16203 16205 16207 16206 16208 16210 16209 16211 + 16213 16212 16214 16216 16215 16217 16219 16218 16220 + 16222 16221 16223 16225 16224 16226 16228 16227 16229 + 16231 16230 16232 16234 16233 16235 16237 16236 16238 + 16240 16239 16241 16243 16242 16244 16246 16245 16247 + 16249 16248 16250 16252 16251 16253 16255 16254 16256 + 16258 16257 16259 16261 16260 16262 16264 16263 16265 + 16267 16266 16268 16270 16269 16271 16273 16272 16274 + 16276 16275 16277 16279 16278 16280 16282 16281 16283 + 16285 16284 16286 16288 16287 16289 16291 16290 16292 + 16294 16293 16295 16297 16296 16298 16300 16299 16301 + 16303 16302 16304 16306 16305 16307 16309 16308 16310 + 16312 16311 16313 16315 16314 16316 16318 16317 16319 + 16321 16320 16322 16324 16323 16325 16327 16326 16328 + 16330 16329 16331 16333 16332 16334 16336 16335 16337 + 16339 16338 16340 16342 16341 16343 16345 16344 16346 + 16348 16347 16349 16351 16350 16352 16354 16353 16355 + 16357 16356 16358 16360 16359 16361 16363 16362 16364 + 16366 16365 16367 16369 16368 16370 16372 16371 16373 + 16375 16374 16376 16378 16377 16379 16381 16380 16382 + 16384 16383 16385 16387 16386 16388 16390 16389 16391 + 16393 16392 16394 16396 16395 16397 16399 16398 16400 + 16402 16401 16403 16405 16404 16406 16408 16407 16409 + 16411 16410 16412 16414 16413 16415 16417 16416 16418 + 16420 16419 16421 16423 16422 16424 16426 16425 16427 + 16429 16428 16430 16432 16431 16433 16435 16434 16436 + 16438 16437 16439 16441 16440 16442 16444 16443 16445 + 16447 16446 16448 16450 16449 16451 16453 16452 16454 + 16456 16455 16457 16459 16458 16460 16462 16461 16463 + 16465 16464 16466 16468 16467 16469 16471 16470 16472 + 16474 16473 16475 16477 16476 16478 16480 16479 16481 + 16483 16482 16484 16486 16485 16487 16489 16488 16490 + 16492 16491 16493 16495 16494 16496 16498 16497 16499 + 16501 16500 16502 16504 16503 16505 16507 16506 16508 + 16510 16509 16511 16513 16512 16514 16516 16515 16517 + 16519 16518 16520 16522 16521 16523 16525 16524 16526 + 16528 16527 16529 16531 16530 16532 16534 16533 16535 + 16537 16536 16538 16540 16539 16541 16543 16542 16544 + 16546 16545 16547 16549 16548 16550 16552 16551 16553 + 16555 16554 16556 16558 16557 16559 16561 16560 16562 + 16564 16563 16565 16567 16566 16568 16570 16569 16571 + 16573 16572 16574 16576 16575 16577 16579 16578 16580 + 16582 16581 16583 16585 16584 16586 16588 16587 16589 + 16591 16590 16592 16594 16593 16595 16597 16596 16598 + 16600 16599 16601 16603 16602 16604 16606 16605 16607 + 16609 16608 16610 16612 16611 16613 16615 16614 16616 + 16618 16617 16619 16621 16620 16622 16624 16623 16625 + 16627 16626 16628 16630 16629 16631 16633 16632 16634 + 16636 16635 16637 16639 16638 16640 16642 16641 16643 + 16645 16644 16646 16648 16647 16649 16651 16650 16652 + 16654 16653 16655 16657 16656 16658 16660 16659 16661 + 16663 16662 16664 16666 16665 16667 16669 16668 16670 + 16672 16671 16673 16675 16674 16676 16678 16677 16679 + 16681 16680 16682 16684 16683 16685 16687 16686 16688 + 16690 16689 16691 16693 16692 16694 16696 16695 16697 + 16699 16698 16700 16702 16701 16703 16705 16704 16706 + 16708 16707 16709 16711 16710 16712 16714 16713 16715 + 16717 16716 16718 16720 16719 16721 16723 16722 16724 + 16726 16725 16727 16729 16728 16730 16732 16731 16733 + 16735 16734 16736 16738 16737 16739 16741 16740 16742 + 16744 16743 16745 16747 16746 16748 16750 16749 16751 + 16753 16752 16754 16756 16755 16757 16759 16758 16760 + 16762 16761 16763 16765 16764 16766 16768 16767 16769 + 16771 16770 16772 16774 16773 16775 16777 16776 16778 + 16780 16779 16781 16783 16782 16784 16786 16785 16787 + 16789 16788 16790 16792 16791 16793 16795 16794 16796 + 16798 16797 16799 16801 16800 16802 16804 16803 16805 + 16807 16806 16808 16810 16809 16811 16813 16812 16814 + 16816 16815 16817 16819 16818 16820 16822 16821 16823 + 16825 16824 16826 16828 16827 16829 16831 16830 16832 + 16834 16833 16835 16837 16836 16838 16840 16839 16841 + 16843 16842 16844 16846 16845 16847 16849 16848 16850 + 16852 16851 16853 16855 16854 16856 16858 16857 16859 + 16861 16860 16862 16864 16863 16865 16867 16866 16868 + 16870 16869 16871 16873 16872 16874 16876 16875 16877 + 16879 16878 16880 16882 16881 16883 16885 16884 16886 + 16888 16887 16889 16891 16890 16892 16894 16893 16895 + 16897 16896 16898 16900 16899 16901 16903 16902 16904 + 16906 16905 16907 16909 16908 16910 16912 16911 16913 + 16915 16914 16916 16918 16917 16919 16921 16920 16922 + 16924 16923 16925 16927 16926 16928 16930 16929 16931 + 16933 16932 16934 16936 16935 16937 16939 16938 16940 + 16942 16941 16943 16945 16944 16946 16948 16947 16949 + 16951 16950 16952 16954 16953 16955 16957 16956 16958 + 16960 16959 16961 16963 16962 16964 16966 16965 16967 + 16969 16968 16970 16972 16971 16973 16975 16974 16976 + 16978 16977 16979 16981 16980 16982 16984 16983 16985 + 16987 16986 16988 16990 16989 16991 16993 16992 16994 + 16996 16995 16997 16999 16998 17000 17002 17001 17003 + 17005 17004 17006 17008 17007 17009 17011 17010 17012 + 17014 17013 17015 17017 17016 17018 17020 17019 17021 + 17023 17022 17024 17026 17025 17027 17029 17028 17030 + 17032 17031 17033 17035 17034 17036 17038 17037 17039 + 17041 17040 17042 17044 17043 17045 17047 17046 17048 + 17050 17049 17051 17053 17052 17054 17056 17055 17057 + 17059 17058 17060 17062 17061 17063 17065 17064 17066 + 17068 17067 17069 17071 17070 17072 17074 17073 17075 + 17077 17076 17078 17080 17079 17081 17083 17082 17084 + 17086 17085 17087 17089 17088 17090 17092 17091 17093 + 17095 17094 17096 17098 17097 17099 17101 17100 17102 + 17104 17103 17105 17107 17106 17108 17110 17109 17111 + 17113 17112 17114 17116 17115 17117 17119 17118 17120 + 17122 17121 17123 17125 17124 17126 17128 17127 17129 + 17131 17130 17132 17134 17133 17135 17137 17136 17138 + 17140 17139 17141 17143 17142 17144 17146 17145 17147 + 17149 17148 17150 17152 17151 17153 17155 17154 17156 + 17158 17157 17159 17161 17160 17162 17164 17163 17165 + 17167 17166 17168 17170 17169 17171 17173 17172 17174 + 17176 17175 17177 17179 17178 17180 17182 17181 17183 + 17185 17184 17186 17188 17187 17189 17191 17190 17192 + 17194 17193 17195 17197 17196 17198 17200 17199 17201 + 17203 17202 17204 17206 17205 17207 17209 17208 17210 + 17212 17211 17213 17215 17214 17216 17218 17217 17219 + 17221 17220 17222 17224 17223 17225 17227 17226 17228 + 17230 17229 17231 17233 17232 17234 17236 17235 17237 + 17239 17238 17240 17242 17241 17243 17245 17244 17246 + 17248 17247 17249 17251 17250 17252 17254 17253 17255 + 17257 17256 17258 17260 17259 17261 17263 17262 17264 + 17266 17265 17267 17269 17268 17270 17272 17271 17273 + 17275 17274 17276 17278 17277 17279 17281 17280 17282 + 17284 17283 17285 17287 17286 17288 17290 17289 17291 + 17293 17292 17294 17296 17295 17297 17299 17298 17300 + 17302 17301 17303 17305 17304 17306 17308 17307 17309 + 17311 17310 17312 17314 17313 17315 17317 17316 17318 + 17320 17319 17321 17323 17322 17324 17326 17325 17327 + 17329 17328 17330 17332 17331 17333 17335 17334 17336 + 17338 17337 17339 17341 17340 17342 17344 17343 17345 + 17347 17346 17348 17350 17349 17351 17353 17352 17354 + 17356 17355 17357 17359 17358 17360 17362 17361 17363 + 17365 17364 17366 17368 17367 17369 17371 17370 17372 + 17374 17373 17375 17377 17376 17378 17380 17379 17381 + 17383 17382 17384 17386 17385 17387 17389 17388 17390 + 17392 17391 17393 17395 17394 17396 17398 17397 17399 + 17401 17400 17402 17404 17403 17405 17407 17406 17408 + 17410 17409 17411 17413 17412 17414 17416 17415 17417 + 17419 17418 17420 17422 17421 17423 17425 17424 17426 + 17428 17427 17429 17431 17430 17432 17434 17433 17435 + 17437 17436 17438 17440 17439 17441 17443 17442 17444 + 17446 17445 17447 17449 17448 17450 17452 17451 17453 + 17455 17454 17456 17458 17457 17459 17461 17460 17462 + 17464 17463 17465 17467 17466 17468 17470 17469 17471 + 17473 17472 17474 17476 17475 17477 17479 17478 17480 + 17482 17481 17483 17485 17484 17486 17488 17487 17489 + 17491 17490 17492 17494 17493 17495 17497 17496 17498 + 17500 17499 17501 17503 17502 17504 17506 17505 17507 + 17509 17508 17510 17512 17511 17513 17515 17514 17516 + 17518 17517 17519 17521 17520 17522 17524 17523 17525 + 17527 17526 17528 17530 17529 17531 17533 17532 17534 + 17536 17535 17537 17539 17538 17540 17542 17541 17543 + 17545 17544 17546 17548 17547 17549 17551 17550 17552 + 17554 17553 17555 17557 17556 17558 17560 17559 17561 + 17563 17562 17564 17566 17565 17567 17569 17568 17570 + 17572 17571 17573 17575 17574 17576 17578 17577 17579 + 17581 17580 17582 17584 17583 17585 17587 17586 17588 + 17590 17589 17591 17593 17592 17594 17596 17595 17597 + 17599 17598 17600 17602 17601 17603 17605 17604 17606 + 17608 17607 17609 17611 17610 17612 17614 17613 17615 + 17617 17616 17618 17620 17619 17621 17623 17622 17624 + 17626 17625 17627 17629 17628 17630 17632 17631 17633 + 17635 17634 17636 17638 17637 17639 17641 17640 17642 + 17644 17643 17645 17647 17646 17648 17650 17649 17651 + 17653 17652 17654 17656 17655 17657 17659 17658 17660 + 17662 17661 17663 17665 17664 17666 17668 17667 17669 + 17671 17670 17672 17674 17673 17675 17677 17676 17678 + 17680 17679 17681 17683 17682 17684 17686 17685 17687 + 17689 17688 17690 17692 17691 17693 17695 17694 17696 + 17698 17697 17699 17701 17700 17702 17704 17703 17705 + 17707 17706 17708 17710 17709 17711 17713 17712 17714 + 17716 17715 17717 17719 17718 17720 17722 17721 17723 + 17725 17724 17726 17728 17727 17729 17731 17730 17732 + 17734 17733 17735 17737 17736 17738 17740 17739 17741 + 17743 17742 17744 17746 17745 17747 17749 17748 17750 + 17752 17751 17753 17755 17754 17756 17758 17757 17759 + 17761 17760 17762 17764 17763 17765 17767 17766 17768 + 17770 17769 17771 17773 17772 17774 17776 17775 17777 + 17779 17778 17780 17782 17781 17783 17785 17784 17786 + 17788 17787 17789 17791 17790 17792 17794 17793 17795 + 17797 17796 17798 17800 17799 17801 17803 17802 17804 + 17806 17805 17807 17809 17808 17810 17812 17811 17813 + 17815 17814 17816 17818 17817 17819 17821 17820 17822 + 17824 17823 17825 17827 17826 17828 17830 17829 17831 + 17833 17832 17834 17836 17835 17837 17839 17838 17840 + 17842 17841 17843 17845 17844 17846 17848 17847 17849 + 17851 17850 17852 17854 17853 17855 17857 17856 17858 + 17860 17859 17861 17863 17862 17864 17866 17865 17867 + 17869 17868 17870 17872 17871 17873 17875 17874 17876 + 17878 17877 17879 17881 17880 17882 17884 17883 17885 + 17887 17886 17888 17890 17889 17891 17893 17892 17894 + 17896 17895 17897 17899 17898 17900 17902 17901 17903 + 17905 17904 17906 17908 17907 17909 17911 17910 17912 + 17914 17913 17915 17917 17916 17918 17920 17919 17921 + 17923 17922 17924 17926 17925 17927 17929 17928 17930 + 17932 17931 17933 17935 17934 17936 17938 17937 17939 + 17941 17940 17942 17944 17943 17945 17947 17946 17948 + 17950 17949 17951 17953 17952 17954 17956 17955 17957 + 17959 17958 17960 17962 17961 17963 17965 17964 17966 + 17968 17967 17969 17971 17970 17972 17974 17973 17975 + 17977 17976 17978 17980 17979 17981 17983 17982 17984 + 17986 17985 17987 17989 17988 17990 17992 17991 17993 + 17995 17994 17996 17998 17997 17999 18001 18000 18002 + 18004 18003 18005 18007 18006 18008 18010 18009 18011 + 18013 18012 18014 18016 18015 18017 18019 18018 18020 + 18022 18021 18023 18025 18024 18026 18028 18027 18029 + 18031 18030 18032 18034 18033 18035 18037 18036 18038 + 18040 18039 18041 18043 18042 18044 18046 18045 18047 + 18049 18048 18050 18052 18051 18053 18055 18054 18056 + 18058 18057 18059 18061 18060 18062 18064 18063 18065 + 18067 18066 18068 18070 18069 18071 18073 18072 18074 + 18076 18075 18077 18079 18078 18080 18082 18081 18083 + 18085 18084 18086 18088 18087 18089 18091 18090 18092 + 18094 18093 18095 18097 18096 18098 18100 18099 18101 + 18103 18102 18104 18106 18105 18107 18109 18108 18110 + 18112 18111 18113 18115 18114 18116 18118 18117 18119 + 18121 18120 18122 18124 18123 18125 18127 18126 18128 + 18130 18129 18131 18133 18132 18134 18136 18135 18137 + 18139 18138 18140 18142 18141 18143 18145 18144 18146 + 18148 18147 18149 18151 18150 18152 18154 18153 18155 + 18157 18156 18158 18160 18159 18161 18163 18162 18164 + 18166 18165 18167 18169 18168 18170 18172 18171 18173 + 18175 18174 18176 18178 18177 18179 18181 18180 18182 + 18184 18183 18185 18187 18186 18188 18190 18189 18191 + 18193 18192 18194 18196 18195 18197 18199 18198 18200 + 18202 18201 18203 18205 18204 18206 18208 18207 18209 + 18211 18210 18212 18214 18213 18215 18217 18216 18218 + 18220 18219 18221 18223 18222 18224 18226 18225 18227 + 18229 18228 18230 18232 18231 18233 18235 18234 18236 + 18238 18237 18239 18241 18240 18242 18244 18243 18245 + 18247 18246 18248 18250 18249 18251 18253 18252 18254 + 18256 18255 18257 18259 18258 18260 18262 18261 18263 + 18265 18264 18266 18268 18267 18269 18271 18270 18272 + 18274 18273 18275 18277 18276 18278 18280 18279 18281 + 18283 18282 18284 18286 18285 18287 18289 18288 18290 + 18292 18291 18293 18295 18294 18296 18298 18297 18299 + 18301 18300 18302 18304 18303 18305 18307 18306 18308 + 18310 18309 18311 18313 18312 18314 18316 18315 18317 + 18319 18318 18320 18322 18321 18323 18325 18324 18326 + 18328 18327 18329 18331 18330 18332 18334 18333 18335 + 18337 18336 18338 18340 18339 18341 18343 18342 18344 + 18346 18345 18347 18349 18348 18350 18352 18351 18353 + 18355 18354 18356 18358 18357 18359 18361 18360 18362 + 18364 18363 18365 18367 18366 18368 18370 18369 18371 + 18373 18372 18374 18376 18375 18377 18379 18378 18380 + 18382 18381 18383 18385 18384 18386 18388 18387 18389 + 18391 18390 18392 18394 18393 18395 18397 18396 18398 + 18400 18399 18401 18403 18402 18404 18406 18405 18407 + 18409 18408 18410 18412 18411 18413 18415 18414 18416 + 18418 18417 18419 18421 18420 18422 18424 18423 18425 + 18427 18426 18428 18430 18429 18431 18433 18432 18434 + 18436 18435 18437 18439 18438 18440 18442 18441 18443 + 18445 18444 18446 18448 18447 18449 18451 18450 18452 + 18454 18453 18455 18457 18456 18458 18460 18459 18461 + 18463 18462 18464 18466 18465 18467 18469 18468 18470 + 18472 18471 18473 18475 18474 18476 18478 18477 18479 + 18481 18480 18482 18484 18483 18485 18487 18486 18488 + 18490 18489 18491 18493 18492 18494 18496 18495 18497 + 18499 18498 18500 18502 18501 18503 18505 18504 18506 + 18508 18507 18509 18511 18510 18512 18514 18513 18515 + 18517 18516 18518 18520 18519 18521 18523 18522 18524 + 18526 18525 18527 18529 18528 18530 18532 18531 18533 + 18535 18534 18536 18538 18537 18539 18541 18540 18542 + 18544 18543 18545 18547 18546 18548 18550 18549 18551 + 18553 18552 18554 18556 18555 18557 18559 18558 18560 + 18562 18561 18563 18565 18564 18566 18568 18567 18569 + 18571 18570 18572 18574 18573 18575 18577 18576 18578 + 18580 18579 18581 18583 18582 18584 18586 18585 18587 + 18589 18588 18590 18592 18591 18593 18595 18594 18596 + 18598 18597 18599 18601 18600 18602 18604 18603 18605 + 18607 18606 18608 18610 18609 18611 18613 18612 18614 + 18616 18615 18617 18619 18618 18620 18622 18621 18623 + 18625 18624 18626 18628 18627 18629 18631 18630 18632 + 18634 18633 18635 18637 18636 18638 18640 18639 18641 + 18643 18642 18644 18646 18645 18647 18649 18648 18650 + 18652 18651 18653 18655 18654 18656 18658 18657 18659 + 18661 18660 18662 18664 18663 18665 18667 18666 18668 + 18670 18669 18671 18673 18672 18674 18676 18675 18677 + 18679 18678 18680 18682 18681 18683 18685 18684 18686 + 18688 18687 18689 18691 18690 18692 18694 18693 18695 + 18697 18696 18698 18700 18699 18701 18703 18702 18704 + 18706 18705 18707 18709 18708 18710 18712 18711 18713 + 18715 18714 18716 18718 18717 18719 18721 18720 18722 + 18724 18723 18725 18727 18726 18728 18730 18729 18731 + 18733 18732 18734 18736 18735 18737 18739 18738 18740 + 18742 18741 18743 18745 18744 18746 18748 18747 18749 + 18751 18750 18752 18754 18753 18755 18757 18756 18758 + 18760 18759 18761 18763 18762 18764 18766 18765 18767 + 18769 18768 18770 18772 18771 18773 18775 18774 18776 + 18778 18777 18779 18781 18780 18782 18784 18783 18785 + 18787 18786 18788 18790 18789 18791 18793 18792 18794 + 18796 18795 18797 18799 18798 18800 18802 18801 18803 + 18805 18804 18806 18808 18807 18809 18811 18810 18812 + 18814 18813 18815 18817 18816 18818 18820 18819 18821 + 18823 18822 18824 18826 18825 18827 18829 18828 18830 + 18832 18831 18833 18835 18834 18836 18838 18837 18839 + 18841 18840 18842 18844 18843 18845 18847 18846 18848 + 18850 18849 18851 18853 18852 18854 18856 18855 18857 + 18859 18858 18860 18862 18861 18863 18865 18864 18866 + 18868 18867 18869 18871 18870 18872 18874 18873 18875 + 18877 18876 18878 18880 18879 18881 18883 18882 18884 + 18886 18885 18887 18889 18888 18890 18892 18891 18893 + 18895 18894 18896 18898 18897 18899 18901 18900 18902 + 18904 18903 18905 18907 18906 18908 18910 18909 18911 + 18913 18912 18914 18916 18915 18917 18919 18918 18920 + 18922 18921 18923 18925 18924 18926 18928 18927 18929 + 18931 18930 18932 18934 18933 18935 18937 18936 18938 + 18940 18939 18941 18943 18942 18944 18946 18945 18947 + 18949 18948 18950 18952 18951 18953 18955 18954 18956 + 18958 18957 18959 18961 18960 18962 18964 18963 18965 + 18967 18966 18968 18970 18969 18971 18973 18972 18974 + 18976 18975 18977 18979 18978 18980 18982 18981 18983 + 18985 18984 18986 18988 18987 18989 18991 18990 18992 + 18994 18993 18995 18997 18996 18998 19000 18999 19001 + 19003 19002 19004 19006 19005 19007 19009 19008 19010 + 19012 19011 19013 19015 19014 19016 19018 19017 19019 + 19021 19020 19022 19024 19023 19025 19027 19026 19028 + 19030 19029 19031 19033 19032 19034 19036 19035 19037 + 19039 19038 19040 19042 19041 19043 19045 19044 19046 + 19048 19047 19049 19051 19050 19052 19054 19053 19055 + 19057 19056 19058 19060 19059 19061 19063 19062 19064 + 19066 19065 19067 19069 19068 19070 19072 19071 19073 + 19075 19074 19076 19078 19077 19079 19081 19080 19082 + 19084 19083 19085 19087 19086 19088 19090 19089 19091 + 19093 19092 19094 19096 19095 19097 19099 19098 19100 + 19102 19101 19103 19105 19104 19106 19108 19107 19109 + 19111 19110 19112 19114 19113 19115 19117 19116 19118 + 19120 19119 19121 19123 19122 19124 19126 19125 19127 + 19129 19128 19130 19132 19131 19133 19135 19134 19136 + 19138 19137 19139 19141 19140 19142 19144 19143 19145 + 19147 19146 19148 19150 19149 19151 19153 19152 19154 + 19156 19155 19157 19159 19158 19160 19162 19161 19163 + 19165 19164 19166 19168 19167 19169 19171 19170 19172 + 19174 19173 19175 19177 19176 19178 19180 19179 19181 + 19183 19182 19184 19186 19185 19187 19189 19188 19190 + 19192 19191 19193 19195 19194 19196 19198 19197 19199 + 19201 19200 19202 19204 19203 19205 19207 19206 19208 + 19210 19209 19211 19213 19212 19214 19216 19215 19217 + 19219 19218 19220 19222 19221 19223 19225 19224 19226 + 19228 19227 19229 19231 19230 19232 19234 19233 19235 + 19237 19236 19238 19240 19239 19241 19243 19242 19244 + 19246 19245 19247 19249 19248 19250 19252 19251 19253 + 19255 19254 19256 19258 19257 19259 19261 19260 19262 + 19264 19263 19265 19267 19266 19268 19270 19269 19271 + 19273 19272 19274 19276 19275 19277 19279 19278 19280 + 19282 19281 19283 19285 19284 19286 19288 19287 19289 + 19291 19290 19292 19294 19293 19295 19297 19296 19298 + 19300 19299 19301 19303 19302 19304 19306 19305 19307 + 19309 19308 19310 19312 19311 19313 19315 19314 19316 + 19318 19317 19319 19321 19320 19322 19324 19323 19325 + 19327 19326 19328 19330 19329 19331 19333 19332 19334 + 19336 19335 19337 19339 19338 19340 19342 19341 19343 + 19345 19344 19346 19348 19347 19349 19351 19350 19352 + 19354 19353 19355 19357 19356 19358 19360 19359 19361 + 19363 19362 19364 19366 19365 19367 19369 19368 19370 + 19372 19371 19373 19375 19374 19376 19378 19377 19379 + 19381 19380 19382 19384 19383 19385 19387 19386 19388 + 19390 19389 19391 19393 19392 19394 19396 19395 19397 + 19399 19398 19400 19402 19401 19403 19405 19404 19406 + 19408 19407 19409 19411 19410 19412 19414 19413 19415 + 19417 19416 19418 19420 19419 19421 19423 19422 19424 + 19426 19425 19427 19429 19428 19430 19432 19431 19433 + 19435 19434 19436 19438 19437 19439 19441 19440 19442 + 19444 19443 19445 19447 19446 19448 19450 19449 19451 + 19453 19452 19454 19456 19455 19457 19459 19458 19460 + 19462 19461 19463 19465 19464 19466 19468 19467 19469 + 19471 19470 19472 19474 19473 19475 19477 19476 19478 + 19480 19479 19481 19483 19482 19484 19486 19485 19487 + 19489 19488 19490 19492 19491 19493 19495 19494 19496 + 19498 19497 19499 19501 19500 19502 19504 19503 19505 + 19507 19506 19508 19510 19509 19511 19513 19512 19514 + 19516 19515 19517 19519 19518 19520 19522 19521 19523 + 19525 19524 19526 19528 19527 19529 19531 19530 19532 + 19534 19533 19535 19537 19536 19538 19540 19539 19541 + 19543 19542 19544 19546 19545 19547 19549 19548 19550 + 19552 19551 19553 19555 19554 19556 19558 19557 19559 + 19561 19560 19562 19564 19563 19565 19567 19566 19568 + 19570 19569 19571 19573 19572 19574 19576 19575 19577 + 19579 19578 19580 19582 19581 19583 19585 19584 19586 + 19588 19587 19589 19591 19590 19592 19594 19593 19595 + 19597 19596 19598 19600 19599 19601 19603 19602 19604 + 19606 19605 19607 19609 19608 19610 19612 19611 19613 + 19615 19614 19616 19618 19617 19619 19621 19620 19622 + 19624 19623 19625 19627 19626 19628 19630 19629 19631 + 19633 19632 19634 19636 19635 19637 19639 19638 19640 + 19642 19641 19643 19645 19644 19646 19648 19647 19649 + 19651 19650 19652 19654 19653 19655 19657 19656 19658 + 19660 19659 19661 19663 19662 19664 19666 19665 19667 + 19669 19668 19670 19672 19671 19673 19675 19674 19676 + 19678 19677 19679 19681 19680 19682 19684 19683 19685 + 19687 19686 19688 19690 19689 19691 19693 19692 19694 + 19696 19695 19697 19699 19698 19700 19702 19701 19703 + 19705 19704 19706 19708 19707 19709 19711 19710 19712 + 19714 19713 19715 19717 19716 19718 19720 19719 19721 + 19723 19722 19724 19726 19725 19727 19729 19728 19730 + 19732 19731 19733 19735 19734 19736 19738 19737 19739 + 19741 19740 19742 19744 19743 19745 19747 19746 19748 + 19750 19749 19751 19753 19752 19754 19756 19755 19757 + 19759 19758 19760 19762 19761 19763 19765 19764 19766 + 19768 19767 19769 19771 19770 19772 19774 19773 19775 + 19777 19776 19778 19780 19779 19781 19783 19782 19784 + 19786 19785 19787 19789 19788 19790 19792 19791 19793 + 19795 19794 19796 19798 19797 19799 19801 19800 19802 + 19804 19803 19805 19807 19806 19808 19810 19809 19811 + 19813 19812 19814 19816 19815 19817 19819 19818 19820 + 19822 19821 19823 19825 19824 19826 19828 19827 19829 + 19831 19830 19832 19834 19833 19835 19837 19836 19838 + 19840 19839 19841 19843 19842 19844 19846 19845 19847 + 19849 19848 19850 19852 19851 19853 19855 19854 19856 + 19858 19857 19859 19861 19860 19862 19864 19863 19865 + 19867 19866 19868 19870 19869 19871 19873 19872 19874 + 19876 19875 19877 19879 19878 19880 19882 19881 19883 + 19885 19884 19886 19888 19887 19889 19891 19890 19892 + 19894 19893 19895 19897 19896 19898 19900 19899 19901 + 19903 19902 19904 19906 19905 19907 19909 19908 19910 + 19912 19911 19913 19915 19914 19916 19918 19917 19919 + 19921 19920 19922 19924 19923 19925 19927 19926 19928 + 19930 19929 19931 19933 19932 19934 19936 19935 19937 + 19939 19938 19940 19942 19941 19943 19945 19944 19946 + 19948 19947 19949 19951 19950 19952 19954 19953 19955 + 19957 19956 19958 19960 19959 19961 19963 19962 19964 + 19966 19965 19967 19969 19968 19970 19972 19971 19973 + 19975 19974 19976 19978 19977 19979 19981 19980 19982 + 19984 19983 19985 19987 19986 19988 19990 19989 19991 + 19993 19992 19994 19996 19995 19997 19999 19998 20000 + 20002 20001 20003 20005 20004 20006 20008 20007 20009 + 20011 20010 20012 20014 20013 20015 20017 20016 20018 + 20020 20019 20021 20023 20022 20024 20026 20025 20027 + 20029 20028 20030 20032 20031 20033 20035 20034 20036 + 20038 20037 20039 20041 20040 20042 20044 20043 20045 + 20047 20046 20048 20050 20049 20051 20053 20052 20054 + 20056 20055 20057 20059 20058 20060 20062 20061 20063 + 20065 20064 20066 20068 20067 20069 20071 20070 20072 + 20074 20073 20075 20077 20076 20078 20080 20079 20081 + 20083 20082 20084 20086 20085 20087 20089 20088 20090 + 20092 20091 20093 20095 20094 20096 20098 20097 20099 + 20101 20100 20102 20104 20103 20105 20107 20106 20108 + 20110 20109 20111 20113 20112 20114 20116 20115 20117 + 20119 20118 20120 20122 20121 20123 20125 20124 20126 + 20128 20127 20129 20131 20130 20132 20134 20133 20135 + 20137 20136 20138 20140 20139 20141 20143 20142 20144 + 20146 20145 20147 20149 20148 20150 20152 20151 20153 + 20155 20154 20156 20158 20157 20159 20161 20160 20162 + 20164 20163 20165 20167 20166 20168 20170 20169 20171 + 20173 20172 20174 20176 20175 20177 20179 20178 20180 + 20182 20181 20183 20185 20184 20186 20188 20187 20189 + 20191 20190 20192 20194 20193 20195 20197 20196 20198 + 20200 20199 20201 20203 20202 20204 20206 20205 20207 + 20209 20208 20210 20212 20211 20213 20215 20214 20216 + 20218 20217 20219 20221 20220 20222 20224 20223 20225 + 20227 20226 20228 20230 20229 20231 20233 20232 20234 + 20236 20235 20237 20239 20238 20240 20242 20241 20243 + 20245 20244 20246 20248 20247 20249 20251 20250 20252 + 20254 20253 20255 20257 20256 20258 20260 20259 20261 + 20263 20262 20264 20266 20265 20267 20269 20268 20270 + 20272 20271 20273 20275 20274 20276 20278 20277 20279 + 20281 20280 20282 20284 20283 20285 20287 20286 20288 + 20290 20289 20291 20293 20292 20294 20296 20295 20297 + 20299 20298 20300 20302 20301 20303 20305 20304 20306 + 20308 20307 20309 20311 20310 20312 20314 20313 20315 + 20317 20316 20318 20320 20319 20321 20323 20322 20324 + 20326 20325 20327 20329 20328 20330 20332 20331 20333 + 20335 20334 20336 20338 20337 20339 20341 20340 20342 + 20344 20343 20345 20347 20346 20348 20350 20349 20351 + 20353 20352 20354 20356 20355 20357 20359 20358 20360 + 20362 20361 20363 20365 20364 20366 20368 20367 20369 + 20371 20370 20372 20374 20373 20375 20377 20376 20378 + 20380 20379 20381 20383 20382 20384 20386 20385 20387 + 20389 20388 20390 20392 20391 20393 20395 20394 20396 + 20398 20397 20399 20401 20400 20402 20404 20403 20405 + 20407 20406 20408 20410 20409 20411 20413 20412 20414 + 20416 20415 20417 20419 20418 20420 20422 20421 20423 + 20425 20424 20426 20428 20427 20429 20431 20430 20432 + 20434 20433 20435 20437 20436 20438 20440 20439 20441 + 20443 20442 20444 20446 20445 20447 20449 20448 20450 + 20452 20451 20453 20455 20454 20456 20458 20457 20459 + 20461 20460 20462 20464 20463 20465 20467 20466 20468 + 20470 20469 20471 20473 20472 20474 20476 20475 20477 + 20479 20478 20480 20482 20481 20483 20485 20484 20486 + 20488 20487 20489 20491 20490 20492 20494 20493 20495 + 20497 20496 20498 20500 20499 20501 20503 20502 20504 + 20506 20505 20507 20509 20508 20510 20512 20511 20513 + 20515 20514 20516 20518 20517 20519 20521 20520 20522 + 20524 20523 20525 20527 20526 20528 20530 20529 20531 + 20533 20532 20534 20536 20535 20537 20539 20538 20540 + 20542 20541 20543 20545 20544 20546 20548 20547 20549 + 20551 20550 20552 20554 20553 20555 20557 20556 20558 + 20560 20559 20561 20563 20562 20564 20566 20565 20567 + 20569 20568 20570 20572 20571 20573 20575 20574 20576 + 20578 20577 20579 20581 20580 20582 20584 20583 20585 + 20587 20586 20588 20590 20589 20591 20593 20592 20594 + 20596 20595 20597 20599 20598 20600 20602 20601 20603 + 20605 20604 20606 20608 20607 20609 20611 20610 20612 + 20614 20613 20615 20617 20616 20618 20620 20619 20621 + 20623 20622 20624 20626 20625 20627 20629 20628 20630 + 20632 20631 20633 20635 20634 20636 20638 20637 20639 + 20641 20640 20642 20644 20643 20645 20647 20646 20648 + 20650 20649 20651 20653 20652 20654 20656 20655 20657 + 20659 20658 20660 20662 20661 20663 20665 20664 20666 + 20668 20667 20669 20671 20670 20672 20674 20673 20675 + 20677 20676 20678 20680 20679 20681 20683 20682 20684 + 20686 20685 20687 20689 20688 20690 20692 20691 20693 + 20695 20694 20696 20698 20697 20699 20701 20700 20702 + 20704 20703 20705 20707 20706 20708 20710 20709 20711 + 20713 20712 20714 20716 20715 20717 20719 20718 20720 + 20722 20721 20723 20725 20724 20726 20728 20727 20729 + 20731 20730 20732 20734 20733 20735 20737 20736 20738 + 20740 20739 20741 20743 20742 20744 20746 20745 20747 + 20749 20748 20750 20752 20751 20753 20755 20754 20756 + 20758 20757 20759 20761 20760 20762 20764 20763 20765 + 20767 20766 20768 20770 20769 20771 20773 20772 20774 + 20776 20775 20777 20779 20778 20780 20782 20781 20783 + 20785 20784 20786 20788 20787 20789 20791 20790 20792 + 20794 20793 20795 20797 20796 20798 20800 20799 20801 + 20803 20802 20804 20806 20805 20807 20809 20808 20810 + 20812 20811 20813 20815 20814 20816 20818 20817 20819 + 20821 20820 20822 20824 20823 20825 20827 20826 20828 + 20830 20829 20831 20833 20832 20834 20836 20835 20837 + 20839 20838 20840 20842 20841 20843 20845 20844 20846 + 20848 20847 20849 20851 20850 20852 20854 20853 20855 + 20857 20856 20858 20860 20859 20861 20863 20862 20864 + 20866 20865 20867 20869 20868 20870 20872 20871 20873 + 20875 20874 20876 20878 20877 20879 20881 20880 20882 + 20884 20883 20885 20887 20886 20888 20890 20889 20891 + 20893 20892 20894 20896 20895 20897 20899 20898 20900 + 20902 20901 20903 20905 20904 20906 20908 20907 20909 + 20911 20910 20912 20914 20913 20915 20917 20916 20918 + 20920 20919 20921 20923 20922 20924 20926 20925 20927 + 20929 20928 20930 20932 20931 20933 20935 20934 20936 + 20938 20937 20939 20941 20940 20942 20944 20943 20945 + 20947 20946 20948 20950 20949 20951 20953 20952 20954 + 20956 20955 20957 20959 20958 20960 20962 20961 20963 + 20965 20964 20966 20968 20967 20969 20971 20970 20972 + 20974 20973 20975 20977 20976 20978 20980 20979 20981 + 20983 20982 20984 20986 20985 20987 20989 20988 20990 + 20992 20991 20993 20995 20994 20996 20998 20997 20999 + 21001 21000 21002 21004 21003 21005 21007 21006 21008 + 21010 21009 21011 21013 21012 21014 21016 21015 21017 + 21019 21018 21020 21022 21021 21023 21025 21024 21026 + 21028 21027 21029 21031 21030 21032 21034 21033 21035 + 21037 21036 21038 21040 21039 21041 21043 21042 21044 + 21046 21045 21047 21049 21048 21050 21052 21051 21053 + 21055 21054 21056 21058 21057 21059 21061 21060 21062 + 21064 21063 21065 21067 21066 21068 21070 21069 21071 + 21073 21072 21074 21076 21075 21077 21079 21078 21080 + 21082 21081 21083 21085 21084 21086 21088 21087 21089 + 21091 21090 21092 21094 21093 21095 21097 21096 21098 + 21100 21099 21101 21103 21102 21104 21106 21105 21107 + 21109 21108 21110 21112 21111 21113 21115 21114 21116 + 21118 21117 21119 21121 21120 21122 21124 21123 21125 + 21127 21126 21128 21130 21129 21131 21133 21132 21134 + 21136 21135 21137 21139 21138 21140 21142 21141 21143 + 21145 21144 21146 21148 21147 21149 21151 21150 21152 + 21154 21153 21155 21157 21156 21158 21160 21159 21161 + 21163 21162 21164 21166 21165 21167 21169 21168 21170 + 21172 21171 21173 21175 21174 21176 21178 21177 21179 + 21181 21180 21182 21184 21183 21185 21187 21186 21188 + 21190 21189 21191 21193 21192 21194 21196 21195 21197 + 21199 21198 21200 21202 21201 21203 21205 21204 21206 + 21208 21207 21209 21211 21210 21212 21214 21213 21215 + 21217 21216 21218 21220 21219 21221 21223 21222 21224 + 21226 21225 21227 21229 21228 21230 21232 21231 21233 + 21235 21234 21236 21238 21237 21239 21241 21240 21242 + 21244 21243 21245 21247 21246 21248 21250 21249 21251 + 21253 21252 21254 21256 21255 21257 21259 21258 21260 + 21262 21261 21263 21265 21264 21266 21268 21267 21269 + 21271 21270 21272 21274 21273 21275 21277 21276 21278 + 21280 21279 21281 21283 21282 21284 21286 21285 21287 + 21289 21288 21290 21292 21291 21293 21295 21294 21296 + 21298 21297 21299 21301 21300 21302 21304 21303 21305 + 21307 21306 21308 21310 21309 21311 21313 21312 21314 + 21316 21315 21317 21319 21318 21320 21322 21321 21323 + 21325 21324 21326 21328 21327 21329 21331 21330 21332 + 21334 21333 21335 21337 21336 21338 21340 21339 21341 + 21343 21342 21344 21346 21345 21347 21349 21348 21350 + 21352 21351 21353 21355 21354 21356 21358 21357 21359 + 21361 21360 21362 21364 21363 21365 21367 21366 21368 + 21370 21369 21371 21373 21372 21374 21376 21375 21377 + 21379 21378 21380 21382 21381 21383 21385 21384 21386 + 21388 21387 21389 21391 21390 21392 21394 21393 21395 + 21397 21396 21398 21400 21399 21401 21403 21402 21404 + 21406 21405 21407 21409 21408 21410 21412 21411 21413 + 21415 21414 21416 21418 21417 21419 21421 21420 21422 + 21424 21423 21425 21427 21426 21428 21430 21429 21431 + 21433 21432 21434 21436 21435 21437 21439 21438 21440 + 21442 21441 21443 21445 21444 21446 21448 21447 21449 + 21451 21450 21452 21454 21453 21455 21457 21456 21458 + 21460 21459 21461 21463 21462 21464 21466 21465 21467 + 21469 21468 21470 21472 21471 21473 21475 21474 21476 + 21478 21477 21479 21481 21480 21482 21484 21483 21485 + 21487 21486 21488 21490 21489 21491 21493 21492 21494 + 21496 21495 21497 21499 21498 21500 21502 21501 21503 + 21505 21504 21506 21508 21507 21509 21511 21510 21512 + 21514 21513 21515 21517 21516 21518 21520 21519 21521 + 21523 21522 21524 21526 21525 21527 21529 21528 21530 + 21532 21531 21533 21535 21534 21536 21538 21537 21539 + 21541 21540 21542 21544 21543 21545 21547 21546 21548 + 21550 21549 21551 21553 21552 21554 21556 21555 21557 + 21559 21558 21560 21562 21561 21563 21565 21564 21566 + 21568 21567 21569 21571 21570 21572 21574 21573 21575 + 21577 21576 21578 21580 21579 21581 21583 21582 21584 + 21586 21585 21587 21589 21588 21590 21592 21591 21593 + 21595 21594 21596 21598 21597 21599 21601 21600 21602 + 21604 21603 21605 21607 21606 21608 21610 21609 21611 + 21613 21612 21614 21616 21615 21617 21619 21618 21620 + 21622 21621 21623 21625 21624 21626 21628 21627 21629 + 21631 21630 21632 21634 21633 21635 21637 21636 21638 + 21640 21639 21641 21643 21642 21644 21646 21645 21647 + 21649 21648 21650 21652 21651 21653 21655 21654 21656 + 21658 21657 21659 21661 21660 21662 21664 21663 21665 + 21667 21666 21668 21670 21669 21671 21673 21672 21674 + 21676 21675 21677 21679 21678 21680 21682 21681 21683 + 21685 21684 21686 21688 21687 21689 21691 21690 21692 + 21694 21693 21695 21697 21696 21698 21700 21699 21701 + 21703 21702 21704 21706 21705 21707 21709 21708 21710 + 21712 21711 21713 21715 21714 21716 21718 21717 21719 + 21721 21720 21722 21724 21723 21725 21727 21726 21728 + 21730 21729 21731 21733 21732 21734 21736 21735 21737 + 21739 21738 21740 21742 21741 21743 21745 21744 21746 + 21748 21747 21749 21751 21750 21752 21754 21753 21755 + 21757 21756 21758 21760 21759 21761 21763 21762 21764 + 21766 21765 21767 21769 21768 21770 21772 21771 21773 + 21775 21774 21776 21778 21777 21779 21781 21780 21782 + 21784 21783 21785 21787 21786 21788 21790 21789 21791 + 21793 21792 21794 21796 21795 21797 21799 21798 21800 + 21802 21801 21803 21805 21804 21806 21808 21807 21809 + 21811 21810 21812 21814 21813 21815 21817 21816 21818 + 21820 21819 21821 21823 21822 21824 21826 21825 21827 + 21829 21828 21830 21832 21831 21833 21835 21834 21836 + 21838 21837 21839 21841 21840 21842 21844 21843 21845 + 21847 21846 21848 21850 21849 21851 21853 21852 21854 + 21856 21855 21857 21859 21858 21860 21862 21861 21863 + 21865 21864 21866 21868 21867 21869 21871 21870 21872 + 21874 21873 21875 21877 21876 21878 21880 21879 21881 + 21883 21882 21884 21886 21885 21887 21889 21888 21890 + 21892 21891 21893 21895 21894 21896 21898 21897 21899 + 21901 21900 21902 21904 21903 21905 21907 21906 21908 + 21910 21909 21911 21913 21912 21914 21916 21915 21917 + 21919 21918 21920 21922 21921 21923 21925 21924 21926 + 21928 21927 21929 21931 21930 21932 21934 21933 21935 + 21937 21936 21938 21940 21939 21941 21943 21942 21944 + 21946 21945 21947 21949 21948 21950 21952 21951 21953 + 21955 21954 21956 21958 21957 21959 21961 21960 21962 + 21964 21963 21965 21967 21966 21968 21970 21969 21971 + 21973 21972 21974 21976 21975 21977 21979 21978 21980 + 21982 21981 21983 21985 21984 21986 21988 21987 21989 + 21991 21990 21992 21994 21993 21995 21997 21996 21998 + 22000 21999 22001 22003 22002 22004 22006 22005 22007 + 22009 22008 22010 22012 22011 22013 22015 22014 22016 + 22018 22017 22019 22021 22020 22022 22024 22023 22025 + 22027 22026 22028 22030 22029 22031 22033 22032 22034 + 22036 22035 22037 22039 22038 22040 22042 22041 22043 + 22045 22044 22046 22048 22047 22049 22051 22050 22052 + 22054 22053 22055 22057 22056 22058 22060 22059 22061 + 22063 22062 22064 22066 22065 22067 22069 22068 22070 + 22072 22071 22073 22075 22074 22076 22078 22077 22079 + 22081 22080 22082 22084 22083 22085 22087 22086 22088 + 22090 22089 22091 22093 22092 22094 22096 22095 22097 + 22099 22098 22100 22102 22101 22103 22105 22104 22106 + 22108 22107 22109 22111 22110 22112 22114 22113 22115 + 22117 22116 22118 22120 22119 22121 22123 22122 22124 + 22126 22125 22127 22129 22128 22130 22132 22131 22133 + 22135 22134 22136 22138 22137 22139 22141 22140 22142 + 22144 22143 22145 22147 22146 22148 22150 22149 22151 + 22153 22152 22154 22156 22155 22157 22159 22158 22160 + 22162 22161 22163 22165 22164 22166 22168 22167 22169 + 22171 22170 22172 22174 22173 22175 22177 22176 22178 + 22180 22179 22181 22183 22182 22184 22186 22185 22187 + 22189 22188 22190 22192 22191 22193 22195 22194 22196 + 22198 22197 22199 22201 22200 22202 22204 22203 22205 + 22207 22206 22208 22210 22209 22211 22213 22212 22214 + 22216 22215 22217 22219 22218 22220 22222 22221 22223 + 22225 22224 22226 22228 22227 22229 22231 22230 22232 + 22234 22233 22235 22237 22236 22238 22240 22239 22241 + 22243 22242 22244 22246 22245 22247 22249 22248 22250 + 22252 22251 22253 22255 22254 22256 22258 22257 22259 + 22261 22260 22262 22264 22263 22265 22267 22266 22268 + 22270 22269 22271 22273 22272 22274 22276 22275 22277 + 22279 22278 22280 22282 22281 22283 22285 22284 22286 + 22288 22287 22289 22291 22290 22292 22294 22293 22295 + 22297 22296 22298 22300 22299 22301 22303 22302 22304 + 22306 22305 22307 22309 22308 22310 22312 22311 22313 + 22315 22314 22316 22318 22317 22319 22321 22320 22322 + 22324 22323 22325 22327 22326 22328 22330 22329 22331 + 22333 22332 22334 22336 22335 22337 22339 22338 22340 + 22342 22341 22343 22345 22344 22346 22348 22347 22349 + 22351 22350 22352 22354 22353 22355 22357 22356 22358 + 22360 22359 22361 22363 22362 22364 22366 22365 22367 + 22369 22368 22370 22372 22371 22373 22375 22374 22376 + 22378 22377 22379 22381 22380 22382 22384 22383 22385 + 22387 22386 22388 22390 22389 22391 22393 22392 22394 + 22396 22395 22397 22399 22398 22400 22402 22401 22403 + 22405 22404 22406 22408 22407 22409 22411 22410 22412 + 22414 22413 22415 22417 22416 22418 22420 22419 22421 + 22423 22422 22424 22426 22425 22427 22429 22428 22430 + 22432 22431 22433 22435 22434 22436 22438 22437 22439 + 22441 22440 22442 22444 22443 22445 22447 22446 22448 + 22450 22449 22451 22453 22452 22454 22456 22455 22457 + 22459 22458 22460 22462 22461 22463 22465 22464 22466 + 22468 22467 22469 22471 22470 22472 22474 22473 22475 + 22477 22476 22478 22480 22479 22481 22483 22482 22484 + 22486 22485 22487 22489 22488 22490 22492 22491 22493 + 22495 22494 22496 22498 22497 22499 22501 22500 22502 + 22504 22503 22505 22507 22506 22508 22510 22509 22511 + 22513 22512 22514 22516 22515 22517 22519 22518 22520 + 22522 22521 22523 22525 22524 22526 22528 22527 22529 + 22531 22530 22532 22534 22533 22535 22537 22536 22538 + 22540 22539 22541 22543 22542 22544 22546 22545 22547 + 22549 22548 22550 22552 22551 22553 22555 22554 22556 + 22558 22557 22559 22561 22560 22562 22564 22563 22565 + 22567 22566 22568 22570 22569 22571 22573 22572 22574 + 22576 22575 22577 22579 22578 22580 22582 22581 22583 + 22585 22584 22586 22588 22587 22589 22591 22590 22592 + 22594 22593 22595 22597 22596 22598 22600 22599 22601 + 22603 22602 22604 22606 22605 22607 22609 22608 22610 + 22612 22611 22613 22615 22614 22616 22618 22617 22619 + 22621 22620 22622 22624 22623 22625 22627 22626 22628 + 22630 22629 22631 22633 22632 22634 22636 22635 22637 + 22639 22638 22640 22642 22641 22643 22645 22644 22646 + 22648 22647 22649 22651 22650 22652 22654 22653 22655 + 22657 22656 22658 22660 22659 22661 22663 22662 22664 + 22666 22665 22667 22669 22668 22670 22672 22671 22673 + 22675 22674 22676 22678 22677 22679 22681 22680 22682 + 22684 22683 22685 22687 22686 22688 22690 22689 22691 + 22693 22692 22694 22696 22695 22697 22699 22698 22700 + 22702 22701 22703 22705 22704 22706 22708 22707 22709 + 22711 22710 22712 22714 22713 22715 22717 22716 22718 + 22720 22719 22721 22723 22722 22724 22726 22725 22727 + 22729 22728 22730 22732 22731 22733 22735 22734 22736 + 22738 22737 22739 22741 22740 22742 22744 22743 22745 + 22747 22746 22748 22750 22749 22751 22753 22752 22754 + 22756 22755 22757 22759 22758 22760 22762 22761 22763 + 22765 22764 22766 22768 22767 22769 22771 22770 22772 + 22774 22773 22775 22777 22776 22778 22780 22779 22781 + 22783 22782 22784 22786 22785 22787 22789 22788 22790 + 22792 22791 22793 22795 22794 22796 22798 22797 22799 + 22801 22800 22802 22804 22803 22805 22807 22806 22808 + 22810 22809 22811 22813 22812 22814 22816 22815 22817 + 22819 22818 22820 22822 22821 22823 22825 22824 22826 + 22828 22827 22829 22831 22830 22832 22834 22833 22835 + 22837 22836 22838 22840 22839 22841 22843 22842 22844 + 22846 22845 22847 22849 22848 22850 22852 22851 22853 + 22855 22854 22856 22858 22857 22859 22861 22860 22862 + 22864 22863 22865 22867 22866 22868 22870 22869 22871 + 22873 22872 22874 22876 22875 22877 22879 22878 22880 + 22882 22881 22883 22885 22884 22886 22888 22887 22889 + 22891 22890 22892 22894 22893 22895 22897 22896 22898 + 22900 22899 22901 22903 22902 22904 22906 22905 22907 + 22909 22908 22910 22912 22911 22913 22915 22914 22916 + 22918 22917 22919 22921 22920 22922 22924 22923 22925 + 22927 22926 22928 22930 22929 22931 22933 22932 22934 + 22936 22935 22937 22939 22938 22940 22942 22941 22943 + 22945 22944 22946 22948 22947 22949 22951 22950 22952 + 22954 22953 22955 22957 22956 22958 22960 22959 22961 + 22963 22962 22964 22966 22965 22967 22969 22968 22970 + 22972 22971 22973 22975 22974 22976 22978 22977 22979 + 22981 22980 22982 22984 22983 22985 22987 22986 22988 + 22990 22989 22991 22993 22992 22994 22996 22995 22997 + 22999 22998 23000 23002 23001 23003 23005 23004 23006 + 23008 23007 23009 23011 23010 23012 23014 23013 23015 + 23017 23016 23018 23020 23019 23021 23023 23022 23024 + 23026 23025 23027 23029 23028 23030 23032 23031 23033 + 23035 23034 23036 23038 23037 23039 23041 23040 23042 + 23044 23043 23045 23047 23046 23048 23050 23049 23051 + 23053 23052 23054 23056 23055 23057 23059 23058 23060 + 23062 23061 23063 23065 23064 23066 23068 23067 23069 + 23071 23070 23072 23074 23073 23075 23077 23076 23078 + 23080 23079 23081 23083 23082 23084 23086 23085 23087 + 23089 23088 23090 23092 23091 23093 23095 23094 23096 + 23098 23097 23099 23101 23100 23102 23104 23103 23105 + 23107 23106 23108 23110 23109 23111 23113 23112 23114 + 23116 23115 23117 23119 23118 23120 23122 23121 23123 + 23125 23124 23126 23128 23127 23129 23131 23130 23132 + 23134 23133 23135 23137 23136 23138 23140 23139 23141 + 23143 23142 23144 23146 23145 23147 23149 23148 23150 + 23152 23151 23153 23155 23154 23156 23158 23157 23159 + 23161 23160 23162 23164 23163 23165 23167 23166 23168 + 23170 23169 23171 23173 23172 23174 23176 23175 23177 + 23179 23178 23180 23182 23181 23183 23185 23184 23186 + 23188 23187 23189 23191 23190 23192 23194 23193 23195 + 23197 23196 23198 23200 23199 23201 23203 23202 23204 + 23206 23205 23207 23209 23208 23210 23212 23211 23213 + 23215 23214 23216 23218 23217 23219 23221 23220 23222 + 23224 23223 23225 23227 23226 23228 23230 23229 23231 + 23233 23232 23234 23236 23235 23237 23239 23238 23240 + 23242 23241 23243 23245 23244 23246 23248 23247 23249 + 23251 23250 23252 23254 23253 23255 23257 23256 23258 + 23260 23259 23261 23263 23262 23264 23266 23265 23267 + 23269 23268 23270 23272 23271 23273 23275 23274 23276 + 23278 23277 23279 23281 23280 23282 23284 23283 23285 + 23287 23286 23288 23290 23289 23291 23293 23292 23294 + 23296 23295 23297 23299 23298 23300 23302 23301 23303 + 23305 23304 23306 23308 23307 23309 23311 23310 23312 + 23314 23313 23315 23317 23316 23318 23320 23319 23321 + 23323 23322 23324 23326 23325 23327 23329 23328 23330 + 23332 23331 23333 23335 23334 23336 23338 23337 23339 + 23341 23340 23342 23344 23343 23345 23347 23346 23348 + 23350 23349 23351 23353 23352 23354 23356 23355 23357 + 23359 23358 23360 23362 23361 23363 23365 23364 23366 + 23368 23367 23369 23371 23370 23372 23374 23373 23375 + 23377 23376 23378 23380 23379 23381 23383 23382 23384 + 23386 23385 23387 23389 23388 23390 23392 23391 23393 + 23395 23394 23396 23398 23397 23399 23401 23400 23402 + 23404 23403 23405 23407 23406 23408 23410 23409 23411 + 23413 23412 23414 23416 23415 23417 23419 23418 23420 + 23422 23421 23423 23425 23424 23426 23428 23427 23429 + 23431 23430 23432 23434 23433 23435 23437 23436 23438 + 23440 23439 23441 23443 23442 23444 23446 23445 23447 + 23449 23448 23450 23452 23451 23453 23455 23454 23456 + 23458 23457 23459 23461 23460 23462 23464 23463 23465 + 23467 23466 23468 23470 23469 23471 23473 23472 23474 + 23476 23475 23477 23479 23478 23480 23482 23481 23483 + 23485 23484 23486 23488 23487 23489 23491 23490 23492 + 23494 23493 23495 23497 23496 23498 23500 23499 23501 + 23503 23502 23504 23506 23505 23507 23509 23508 23510 + 23512 23511 23513 23515 23514 23516 23518 23517 23519 + 23521 23520 23522 23524 23523 23525 23527 23526 23528 + 23530 23529 23531 23533 23532 23534 23536 23535 23537 + 23539 23538 23540 23542 23541 23543 23545 23544 23546 + 23548 23547 23549 23551 23550 23552 23554 23553 23555 + 23557 23556 23558 + + 6701 !NPHI: dihedrals + 1 5 7 10 1 5 7 8 + 1 5 7 9 1 5 18 20 + 1 5 18 19 2 1 5 7 + 2 1 5 18 2 1 5 6 + 3 1 5 7 3 1 5 18 + 3 1 5 6 4 1 5 7 + 4 1 5 18 4 1 5 6 + 5 18 20 21 5 18 20 22 + 5 7 10 13 5 7 10 11 + 5 7 10 12 6 5 7 10 + 6 5 7 8 6 5 7 9 + 6 5 18 20 6 5 18 19 + 7 10 13 14 7 5 18 20 + 7 5 18 19 8 7 5 18 + 8 7 10 13 8 7 10 11 + 8 7 10 12 9 7 5 18 + 9 7 10 13 9 7 10 11 + 9 7 10 12 10 13 14 15 + 10 13 14 16 10 13 14 17 + 10 7 5 18 11 10 13 14 + 12 10 13 14 18 20 22 24 + 18 20 22 37 18 20 22 23 + 19 18 20 21 19 18 20 22 + 20 22 24 30 20 22 24 26 + 20 22 24 25 20 22 37 39 + 20 22 37 38 21 20 22 24 + 21 20 22 37 21 20 22 23 + 22 37 39 40 22 37 39 41 + 22 24 30 33 22 24 30 31 + 22 24 30 32 22 24 26 27 + 22 24 26 28 22 24 26 29 + 23 22 24 30 23 22 24 26 + 23 22 24 25 23 22 37 39 + 23 22 37 38 24 30 33 34 + 24 30 33 35 24 30 33 36 + 24 22 37 39 24 22 37 38 + 25 24 22 37 25 24 30 33 + 25 24 30 31 25 24 30 32 + 25 24 26 27 25 24 26 28 + 25 24 26 29 26 24 22 37 + 26 24 30 33 26 24 30 31 + 26 24 30 32 27 26 24 30 + 28 26 24 30 29 26 24 30 + 30 24 22 37 31 30 33 34 + 31 30 33 35 31 30 33 36 + 32 30 33 34 32 30 33 35 + 32 30 33 36 37 39 41 43 + 37 39 41 48 37 39 41 42 + 38 37 39 40 38 37 39 41 + 39 41 43 46 39 41 43 44 + 39 41 43 45 39 41 48 50 + 39 41 48 49 40 39 41 43 + 40 39 41 48 40 39 41 42 + 41 48 50 51 41 48 50 52 + 41 43 46 47 42 41 43 46 + 42 41 43 44 42 41 43 45 + 42 41 48 50 42 41 48 49 + 43 41 48 50 43 41 48 49 + 44 43 41 48 44 43 46 47 + 45 43 41 48 45 43 46 47 + 46 43 41 48 48 50 52 54 + 48 50 52 67 48 50 52 53 + 49 48 50 51 49 48 50 52 + 50 52 54 57 50 52 54 55 + 50 52 54 56 50 52 67 69 + 50 52 67 68 51 50 52 54 + 51 50 52 67 51 50 52 53 + 52 67 69 70 52 67 69 71 + 52 54 57 59 52 54 57 63 + 52 54 57 58 53 52 54 57 + 53 52 54 55 53 52 54 56 + 53 52 67 69 53 52 67 68 + 54 57 59 60 54 57 59 61 + 54 57 59 62 54 57 63 64 + 54 57 63 65 54 57 63 66 + 54 52 67 69 54 52 67 68 + 55 54 52 67 55 54 57 59 + 55 54 57 63 55 54 57 58 + 56 54 52 67 56 54 57 59 + 56 54 57 63 56 54 57 58 + 57 54 52 67 58 57 59 60 + 58 57 59 61 58 57 59 62 + 58 57 63 64 58 57 63 65 + 58 57 63 66 59 57 63 64 + 59 57 63 65 59 57 63 66 + 60 59 57 63 61 59 57 63 + 62 59 57 63 67 69 71 73 + 67 69 71 86 67 69 71 72 + 68 67 69 70 68 67 69 71 + 69 71 73 79 69 71 73 75 + 69 71 73 74 69 71 86 88 + 69 71 86 87 70 69 71 73 + 70 69 71 86 70 69 71 72 + 71 86 88 89 71 86 88 90 + 71 73 79 82 71 73 79 80 + 71 73 79 81 71 73 75 76 + 71 73 75 77 71 73 75 78 + 72 71 73 79 72 71 73 75 + 72 71 73 74 72 71 86 88 + 72 71 86 87 73 79 82 83 + 73 79 82 84 73 79 82 85 + 73 71 86 88 73 71 86 87 + 74 73 71 86 74 73 79 82 + 74 73 79 80 74 73 79 81 + 74 73 75 76 74 73 75 77 + 74 73 75 78 75 73 71 86 + 75 73 79 82 75 73 79 80 + 75 73 79 81 76 75 73 79 + 77 75 73 79 78 75 73 79 + 79 73 71 86 80 79 82 83 + 80 79 82 84 80 79 82 85 + 81 79 82 83 81 79 82 84 + 81 79 82 85 86 88 90 92 + 86 88 90 96 86 88 90 91 + 87 86 88 89 87 86 88 90 + 88 90 92 93 88 90 92 94 + 88 90 92 95 88 90 96 98 + 88 90 96 97 89 88 90 92 + 89 88 90 96 89 88 90 91 + 90 96 98 99 90 96 98 100 + 91 90 92 93 91 90 92 94 + 91 90 92 95 91 90 96 98 + 91 90 96 97 92 90 96 98 + 92 90 96 97 93 92 90 96 + 94 92 90 96 95 92 90 96 + 96 98 100 102 96 98 100 106 + 96 98 100 101 97 96 98 99 + 97 96 98 100 98 100 102 103 + 98 100 102 104 98 100 102 105 + 98 100 106 108 98 100 106 107 + 99 98 100 102 99 98 100 106 + 99 98 100 101 100 106 108 109 + 100 106 108 110 101 100 102 103 + 101 100 102 104 101 100 102 105 + 101 100 106 108 101 100 106 107 + 102 100 106 108 102 100 106 107 + 103 102 100 106 104 102 100 106 + 105 102 100 106 106 108 110 112 + 106 108 110 125 106 108 110 111 + 107 106 108 109 107 106 108 110 + 108 110 112 115 108 110 112 113 + 108 110 112 114 108 110 125 127 + 108 110 125 126 109 108 110 112 + 109 108 110 125 109 108 110 111 + 110 125 127 128 110 125 127 129 + 110 112 115 117 110 112 115 121 + 110 112 115 116 111 110 112 115 + 111 110 112 113 111 110 112 114 + 111 110 125 127 111 110 125 126 + 112 115 117 118 112 115 117 119 + 112 115 117 120 112 115 121 122 + 112 115 121 123 112 115 121 124 + 112 110 125 127 112 110 125 126 + 113 112 110 125 113 112 115 117 + 113 112 115 121 113 112 115 116 + 114 112 110 125 114 112 115 117 + 114 112 115 121 114 112 115 116 + 115 112 110 125 116 115 117 118 + 116 115 117 119 116 115 117 120 + 116 115 121 122 116 115 121 123 + 116 115 121 124 117 115 121 122 + 117 115 121 123 117 115 121 124 + 118 117 115 121 119 117 115 121 + 120 117 115 121 125 127 129 131 + 125 127 129 135 125 127 129 130 + 126 125 127 128 126 125 127 129 + 127 129 131 132 127 129 131 133 + 127 129 131 134 127 129 135 137 + 127 129 135 136 128 127 129 131 + 128 127 129 135 128 127 129 130 + 129 135 137 138 129 135 137 139 + 130 129 131 132 130 129 131 133 + 130 129 131 134 130 129 135 137 + 130 129 135 136 131 129 135 137 + 131 129 135 136 132 131 129 135 + 133 131 129 135 134 131 129 135 + 135 137 139 141 135 137 139 151 + 135 137 139 140 136 135 137 138 + 136 135 137 139 137 139 141 143 + 137 139 141 147 137 139 141 142 + 137 139 151 153 137 139 151 152 + 138 137 139 141 138 137 139 151 + 138 137 139 140 139 151 153 154 + 139 151 153 155 139 141 143 144 + 139 141 143 145 139 141 143 146 + 139 141 147 148 139 141 147 149 + 139 141 147 150 140 139 141 143 + 140 139 141 147 140 139 141 142 + 140 139 151 153 140 139 151 152 + 141 139 151 153 141 139 151 152 + 142 141 139 151 142 141 143 144 + 142 141 143 145 142 141 143 146 + 142 141 147 148 142 141 147 149 + 142 141 147 150 143 141 139 151 + 143 141 147 148 143 141 147 149 + 143 141 147 150 144 143 141 147 + 145 143 141 147 146 143 141 147 + 147 141 139 151 151 153 155 157 + 151 153 155 163 151 153 155 156 + 152 151 153 154 152 151 153 155 + 153 155 157 160 153 155 157 158 + 153 155 157 159 153 155 163 165 + 153 155 163 164 154 153 155 157 + 154 153 155 163 154 153 155 156 + 155 163 165 166 155 163 165 167 + 155 157 160 162 155 157 160 161 + 156 155 157 160 156 155 157 158 + 156 155 157 159 156 155 163 165 + 156 155 163 164 157 155 163 165 + 157 155 163 164 158 157 155 163 + 158 157 160 162 158 157 160 161 + 159 157 155 163 159 157 160 162 + 159 157 160 161 160 157 155 163 + 163 165 167 169 163 165 167 187 + 163 165 167 168 164 163 165 166 + 164 163 165 167 165 167 169 172 + 165 167 169 170 165 167 169 171 + 165 167 187 189 165 167 187 188 + 166 165 167 169 166 165 167 187 + 166 165 167 168 167 187 189 190 + 167 187 189 191 167 169 172 175 + 167 169 172 173 167 169 172 174 + 168 167 169 172 168 167 169 170 + 168 167 169 171 168 167 187 189 + 168 167 187 188 169 172 175 178 + 169 172 175 176 169 172 175 177 + 169 167 187 189 169 167 187 188 + 170 169 167 187 170 169 172 175 + 170 169 172 173 170 169 172 174 + 171 169 167 187 171 169 172 175 + 171 169 172 173 171 169 172 174 + 172 175 178 180 172 175 178 179 + 172 169 167 187 173 172 175 178 + 173 172 175 176 173 172 175 177 + 174 172 175 178 174 172 175 176 + 174 172 175 177 175 178 180 184 + 175 178 180 181 176 175 178 180 + 176 175 178 179 177 175 178 180 + 177 175 178 179 178 180 184 185 + 178 180 184 186 178 180 181 182 + 178 180 181 183 179 178 180 184 + 179 178 180 181 181 180 184 185 + 181 180 184 186 182 181 180 184 + 183 181 180 184 187 189 191 193 + 187 189 191 203 187 189 191 192 + 188 187 189 190 188 187 189 191 + 189 191 193 195 189 191 193 199 + 189 191 193 194 189 191 203 205 + 189 191 203 204 190 189 191 193 + 190 189 191 203 190 189 191 192 + 191 203 205 206 191 203 205 207 + 191 193 195 196 191 193 195 197 + 191 193 195 198 191 193 199 200 + 191 193 199 201 191 193 199 202 + 192 191 193 195 192 191 193 199 + 192 191 193 194 192 191 203 205 + 192 191 203 204 193 191 203 205 + 193 191 203 204 194 193 191 203 + 194 193 195 196 194 193 195 197 + 194 193 195 198 194 193 199 200 + 194 193 199 201 194 193 199 202 + 195 193 191 203 195 193 199 200 + 195 193 199 201 195 193 199 202 + 196 195 193 199 197 195 193 199 + 198 195 193 199 199 193 191 203 + 203 205 207 209 203 205 207 222 + 203 205 207 208 204 203 205 206 + 204 203 205 207 205 207 209 215 + 205 207 209 211 205 207 209 210 + 205 207 222 224 205 207 222 223 + 206 205 207 209 206 205 207 222 + 206 205 207 208 207 222 224 225 + 207 222 224 226 207 209 215 218 + 207 209 215 216 207 209 215 217 + 207 209 211 212 207 209 211 213 + 207 209 211 214 208 207 209 215 + 208 207 209 211 208 207 209 210 + 208 207 222 224 208 207 222 223 + 209 215 218 219 209 215 218 220 + 209 215 218 221 209 207 222 224 + 209 207 222 223 210 209 207 222 + 210 209 215 218 210 209 215 216 + 210 209 215 217 210 209 211 212 + 210 209 211 213 210 209 211 214 + 211 209 207 222 211 209 215 218 + 211 209 215 216 211 209 215 217 + 212 211 209 215 213 211 209 215 + 214 211 209 215 215 209 207 222 + 216 215 218 219 216 215 218 220 + 216 215 218 221 217 215 218 219 + 217 215 218 220 217 215 218 221 + 222 224 226 229 222 224 226 227 + 222 224 226 228 223 222 224 225 + 223 222 224 226 224 226 229 231 + 224 226 229 230 225 224 226 229 + 225 224 226 227 225 224 226 228 + 226 229 231 232 226 229 231 233 + 227 226 229 231 227 226 229 230 + 228 226 229 231 228 226 229 230 + 229 231 233 235 229 231 233 246 + 229 231 233 234 230 229 231 232 + 230 229 231 233 231 233 235 238 + 231 233 235 236 231 233 235 237 + 231 233 246 248 231 233 246 247 + 232 231 233 235 232 231 233 246 + 232 231 233 234 233 246 248 249 + 233 246 248 250 233 235 238 241 + 233 235 238 239 233 235 238 240 + 234 233 235 238 234 233 235 236 + 234 233 235 237 234 233 246 248 + 234 233 246 247 235 238 241 242 + 235 233 246 248 235 233 246 247 + 236 235 233 246 236 235 238 241 + 236 235 238 239 236 235 238 240 + 237 235 233 246 237 235 238 241 + 237 235 238 239 237 235 238 240 + 238 241 242 243 238 241 242 244 + 238 241 242 245 238 235 233 246 + 239 238 241 242 240 238 241 242 + 246 248 250 252 246 248 250 261 + 246 248 250 251 247 246 248 249 + 247 246 248 250 248 250 252 255 + 248 250 252 253 248 250 252 254 + 248 250 261 263 248 250 261 262 + 249 248 250 252 249 248 250 261 + 249 248 250 251 250 261 263 264 + 250 261 263 265 250 252 255 258 + 250 252 255 256 250 252 255 257 + 251 250 252 255 251 250 252 253 + 251 250 252 254 251 250 261 263 + 251 250 261 262 252 255 258 260 + 252 255 258 259 252 250 261 263 + 252 250 261 262 253 252 250 261 + 253 252 255 258 253 252 255 256 + 253 252 255 257 254 252 250 261 + 254 252 255 258 254 252 255 256 + 254 252 255 257 255 252 250 261 + 256 255 258 260 256 255 258 259 + 257 255 258 260 257 255 258 259 + 261 263 265 267 261 263 265 275 + 261 263 265 266 262 261 263 264 + 262 261 263 265 263 265 267 270 + 263 265 267 268 263 265 267 269 + 263 265 275 277 263 265 275 276 + 264 263 265 267 264 263 265 275 + 264 263 265 266 265 275 277 278 + 265 275 277 279 265 267 270 272 + 265 267 270 271 266 265 267 270 + 266 265 267 268 266 265 267 269 + 266 265 275 277 266 265 275 276 + 267 270 272 273 267 270 272 274 + 267 265 275 277 267 265 275 276 + 268 267 265 275 268 267 270 272 + 268 267 270 271 269 267 265 275 + 269 267 270 272 269 267 270 271 + 270 267 265 275 271 270 272 273 + 271 270 272 274 275 277 279 281 + 275 277 279 285 275 277 279 280 + 276 275 277 278 276 275 277 279 + 277 279 281 282 277 279 281 283 + 277 279 281 284 277 279 285 287 + 277 279 285 286 278 277 279 281 + 278 277 279 285 278 277 279 280 + 279 285 287 288 279 285 287 289 + 280 279 281 282 280 279 281 283 + 280 279 281 284 280 279 285 287 + 280 279 285 286 281 279 285 287 + 281 279 285 286 282 281 279 285 + 283 281 279 285 284 281 279 285 + 285 287 289 291 285 287 289 302 + 285 287 289 290 286 285 287 288 + 286 285 287 289 287 289 291 294 + 287 289 291 292 287 289 291 293 + 287 289 302 304 287 289 302 303 + 288 287 289 291 288 287 289 302 + 288 287 289 290 289 302 304 308 + 289 302 304 305 289 291 294 297 + 289 291 294 295 289 291 294 296 + 290 289 291 294 290 289 291 292 + 290 289 291 293 290 289 302 304 + 290 289 302 303 291 294 297 298 + 291 289 302 304 291 289 302 303 + 292 291 289 302 292 291 294 297 + 292 291 294 295 292 291 294 296 + 293 291 289 302 293 291 294 297 + 293 291 294 295 293 291 294 296 + 294 297 298 299 294 297 298 300 + 294 297 298 301 294 291 289 302 + 295 294 297 298 296 294 297 298 + 302 304 308 316 302 304 308 310 + 302 304 308 309 302 304 305 313 + 302 304 305 306 302 304 305 307 + 303 302 304 308 303 302 304 305 + 304 308 316 318 304 308 316 317 + 304 308 310 313 304 308 310 311 + 304 308 310 312 304 305 313 310 + 304 305 313 314 304 305 313 315 + 305 313 310 308 305 313 310 311 + 305 313 310 312 305 304 308 316 + 305 304 308 310 305 304 308 309 + 306 305 313 310 306 305 313 314 + 306 305 313 315 306 305 304 308 + 307 305 313 310 307 305 313 314 + 307 305 313 315 307 305 304 308 + 308 316 318 319 308 316 318 320 + 308 310 313 314 308 310 313 315 + 308 304 305 313 309 308 316 318 + 309 308 316 317 309 308 310 313 + 309 308 310 311 309 308 310 312 + 310 308 316 318 310 308 316 317 + 311 310 308 316 311 310 313 314 + 311 310 313 315 312 310 308 316 + 312 310 313 314 312 310 313 315 + 313 310 308 316 316 318 320 322 + 316 318 320 340 316 318 320 321 + 317 316 318 319 317 316 318 320 + 318 320 322 325 318 320 322 323 + 318 320 322 324 318 320 340 342 + 318 320 340 341 319 318 320 322 + 319 318 320 340 319 318 320 321 + 320 340 342 343 320 340 342 344 + 320 322 325 331 320 322 325 326 + 321 320 322 325 321 320 322 323 + 321 320 322 324 321 320 340 342 + 321 320 340 341 322 325 331 332 + 322 325 331 330 322 325 326 328 + 322 325 326 327 322 320 340 342 + 322 320 340 341 323 322 320 340 + 323 322 325 331 323 322 325 326 + 324 322 320 340 324 322 325 331 + 324 322 325 326 325 331 332 333 + 325 331 332 334 325 331 330 336 + 325 331 330 328 325 326 328 330 + 325 326 328 329 325 322 320 340 + 326 328 330 336 326 328 330 331 + 326 325 331 332 326 325 331 330 + 327 326 328 330 327 326 328 329 + 327 326 325 331 328 330 336 337 + 328 330 336 338 328 330 331 332 + 328 326 325 331 329 328 330 336 + 329 328 330 331 330 336 338 334 + 330 336 338 339 330 331 332 333 + 330 331 332 334 331 332 334 338 + 331 332 334 335 331 330 336 337 + 331 330 336 338 332 334 338 339 + 332 334 338 336 332 331 330 336 + 333 332 334 338 333 332 334 335 + 334 338 336 337 335 334 338 339 + 335 334 338 336 337 336 338 339 + 340 342 344 346 340 342 344 354 + 340 342 344 345 341 340 342 343 + 341 340 342 344 342 344 346 349 + 342 344 346 347 342 344 346 348 + 342 344 354 356 342 344 354 355 + 343 342 344 346 343 342 344 354 + 343 342 344 345 344 354 356 357 + 344 354 356 358 344 346 349 351 + 344 346 349 350 345 344 346 349 + 345 344 346 347 345 344 346 348 + 345 344 354 356 345 344 354 355 + 346 349 351 352 346 349 351 353 + 346 344 354 356 346 344 354 355 + 347 346 344 354 347 346 349 351 + 347 346 349 350 348 346 344 354 + 348 346 349 351 348 346 349 350 + 349 346 344 354 350 349 351 352 + 350 349 351 353 354 356 358 360 + 354 356 358 373 354 356 358 359 + 355 354 356 357 355 354 356 358 + 356 358 360 363 356 358 360 361 + 356 358 360 362 356 358 373 375 + 356 358 373 374 357 356 358 360 + 357 356 358 373 357 356 358 359 + 358 373 375 379 358 373 375 376 + 358 360 363 365 358 360 363 369 + 358 360 363 364 359 358 360 363 + 359 358 360 361 359 358 360 362 + 359 358 373 375 359 358 373 374 + 360 363 365 366 360 363 365 367 + 360 363 365 368 360 363 369 370 + 360 363 369 371 360 363 369 372 + 360 358 373 375 360 358 373 374 + 361 360 358 373 361 360 363 365 + 361 360 363 369 361 360 363 364 + 362 360 358 373 362 360 363 365 + 362 360 363 369 362 360 363 364 + 363 360 358 373 364 363 365 366 + 364 363 365 367 364 363 365 368 + 364 363 369 370 364 363 369 371 + 364 363 369 372 365 363 369 370 + 365 363 369 371 365 363 369 372 + 366 365 363 369 367 365 363 369 + 368 365 363 369 373 375 379 387 + 373 375 379 381 373 375 379 380 + 373 375 376 384 373 375 376 377 + 373 375 376 378 374 373 375 379 + 374 373 375 376 375 379 387 389 + 375 379 387 388 375 379 381 384 + 375 379 381 382 375 379 381 383 + 375 376 384 381 375 376 384 385 + 375 376 384 386 376 384 381 379 + 376 384 381 382 376 384 381 383 + 376 375 379 387 376 375 379 381 + 376 375 379 380 377 376 384 381 + 377 376 384 385 377 376 384 386 + 377 376 375 379 378 376 384 381 + 378 376 384 385 378 376 384 386 + 378 376 375 379 379 387 389 390 + 379 387 389 391 379 381 384 385 + 379 381 384 386 379 375 376 384 + 380 379 387 389 380 379 387 388 + 380 379 381 384 380 379 381 382 + 380 379 381 383 381 379 387 389 + 381 379 387 388 382 381 379 387 + 382 381 384 385 382 381 384 386 + 383 381 379 387 383 381 384 385 + 383 381 384 386 384 381 379 387 + 387 389 391 393 387 389 391 397 + 387 389 391 392 388 387 389 390 + 388 387 389 391 389 391 393 394 + 389 391 393 395 389 391 393 396 + 389 391 397 399 389 391 397 398 + 390 389 391 393 390 389 391 397 + 390 389 391 392 391 397 399 400 + 391 397 399 401 392 391 393 394 + 392 391 393 395 392 391 393 396 + 392 391 397 399 392 391 397 398 + 393 391 397 399 393 391 397 398 + 394 393 391 397 395 393 391 397 + 396 393 391 397 397 399 401 403 + 397 399 401 409 397 399 401 402 + 398 397 399 400 398 397 399 401 + 399 401 403 406 399 401 403 404 + 399 401 403 405 399 401 409 411 + 399 401 409 410 400 399 401 403 + 400 399 401 409 400 399 401 402 + 401 409 411 412 401 409 411 413 + 401 403 406 408 401 403 406 407 + 402 401 403 406 402 401 403 404 + 402 401 403 405 402 401 409 411 + 402 401 409 410 403 401 409 411 + 403 401 409 410 404 403 401 409 + 404 403 406 408 404 403 406 407 + 405 403 401 409 405 403 406 408 + 405 403 406 407 406 403 401 409 + 409 411 413 415 409 411 413 428 + 409 411 413 414 410 409 411 412 + 410 409 411 413 411 413 415 418 + 411 413 415 416 411 413 415 417 + 411 413 428 430 411 413 428 429 + 412 411 413 415 412 411 413 428 + 412 411 413 414 413 428 430 431 + 413 428 430 432 413 415 418 420 + 413 415 418 424 413 415 418 419 + 414 413 415 418 414 413 415 416 + 414 413 415 417 414 413 428 430 + 414 413 428 429 415 418 420 421 + 415 418 420 422 415 418 420 423 + 415 418 424 425 415 418 424 426 + 415 418 424 427 415 413 428 430 + 415 413 428 429 416 415 413 428 + 416 415 418 420 416 415 418 424 + 416 415 418 419 417 415 413 428 + 417 415 418 420 417 415 418 424 + 417 415 418 419 418 415 413 428 + 419 418 420 421 419 418 420 422 + 419 418 420 423 419 418 424 425 + 419 418 424 426 419 418 424 427 + 420 418 424 425 420 418 424 426 + 420 418 424 427 421 420 418 424 + 422 420 418 424 423 420 418 424 + 428 430 432 434 428 430 432 438 + 428 430 432 433 429 428 430 431 + 429 428 430 432 430 432 434 435 + 430 432 434 436 430 432 434 437 + 430 432 438 440 430 432 438 439 + 431 430 432 434 431 430 432 438 + 431 430 432 433 432 438 440 441 + 432 438 440 442 433 432 434 435 + 433 432 434 436 433 432 434 437 + 433 432 438 440 433 432 438 439 + 434 432 438 440 434 432 438 439 + 435 434 432 438 436 434 432 438 + 437 434 432 438 438 440 442 444 + 438 440 442 462 438 440 442 443 + 439 438 440 441 439 438 440 442 + 440 442 444 447 440 442 444 445 + 440 442 444 446 440 442 462 464 + 440 442 462 463 441 440 442 444 + 441 440 442 462 441 440 442 443 + 442 462 464 465 442 462 464 466 + 442 444 447 453 442 444 447 448 + 443 442 444 447 443 442 444 445 + 443 442 444 446 443 442 462 464 + 443 442 462 463 444 447 453 454 + 444 447 453 452 444 447 448 450 + 444 447 448 449 444 442 462 464 + 444 442 462 463 445 444 442 462 + 445 444 447 453 445 444 447 448 + 446 444 442 462 446 444 447 453 + 446 444 447 448 447 453 454 455 + 447 453 454 456 447 453 452 458 + 447 453 452 450 447 448 450 452 + 447 448 450 451 447 444 442 462 + 448 450 452 458 448 450 452 453 + 448 447 453 454 448 447 453 452 + 449 448 450 452 449 448 450 451 + 449 448 447 453 450 452 458 459 + 450 452 458 460 450 452 453 454 + 450 448 447 453 451 450 452 458 + 451 450 452 453 452 458 460 456 + 452 458 460 461 452 453 454 455 + 452 453 454 456 453 454 456 460 + 453 454 456 457 453 452 458 459 + 453 452 458 460 454 456 460 461 + 454 456 460 458 454 453 452 458 + 455 454 456 460 455 454 456 457 + 456 460 458 459 457 456 460 461 + 457 456 460 458 459 458 460 461 + 462 464 466 468 462 464 466 482 + 462 464 466 467 463 462 464 465 + 463 462 464 466 464 466 468 471 + 464 466 468 469 464 466 468 470 + 464 466 482 484 464 466 482 483 + 465 464 466 468 465 464 466 482 + 465 464 466 467 466 482 484 485 + 466 482 484 486 466 468 471 478 + 466 468 471 472 467 466 468 471 + 467 466 468 469 467 466 468 470 + 467 466 482 484 467 466 482 483 + 468 471 478 479 468 471 478 480 + 468 471 472 474 468 471 472 473 + 468 466 482 484 468 466 482 483 + 469 468 466 482 469 468 471 478 + 469 468 471 472 470 468 466 482 + 470 468 471 478 470 468 471 472 + 471 478 480 476 471 478 480 481 + 471 472 474 475 471 472 474 476 + 471 468 466 482 472 474 476 480 + 472 474 476 477 472 471 478 479 + 472 471 478 480 473 472 474 475 + 473 472 474 476 473 472 471 478 + 474 476 480 478 474 476 480 481 + 474 472 471 478 475 474 476 480 + 475 474 476 477 476 480 478 479 + 477 476 480 478 477 476 480 481 + 479 478 480 481 482 484 486 488 + 482 484 486 504 482 484 486 487 + 483 482 484 485 483 482 484 486 + 484 486 488 491 484 486 488 489 + 484 486 488 490 484 486 504 506 + 484 486 504 505 485 484 486 488 + 485 484 486 504 485 484 486 487 + 486 504 506 507 486 504 506 508 + 486 488 491 494 486 488 491 492 + 486 488 491 493 487 486 488 491 + 487 486 488 489 487 486 488 490 + 487 486 504 506 487 486 504 505 + 488 491 494 497 488 491 494 495 + 488 491 494 496 488 486 504 506 + 488 486 504 505 489 488 486 504 + 489 488 491 494 489 488 491 492 + 489 488 491 493 490 488 486 504 + 490 488 491 494 490 488 491 492 + 490 488 491 493 491 494 497 500 + 491 494 497 498 491 494 497 499 + 491 488 486 504 492 491 494 497 + 492 491 494 495 492 491 494 496 + 493 491 494 497 493 491 494 495 + 493 491 494 496 494 497 500 501 + 494 497 500 502 494 497 500 503 + 495 494 497 500 495 494 497 498 + 495 494 497 499 496 494 497 500 + 496 494 497 498 496 494 497 499 + 498 497 500 501 498 497 500 502 + 498 497 500 503 499 497 500 501 + 499 497 500 502 499 497 500 503 + 504 506 508 510 504 506 508 528 + 504 506 508 509 505 504 506 507 + 505 504 506 508 506 508 510 513 + 506 508 510 511 506 508 510 512 + 506 508 528 530 506 508 528 529 + 507 506 508 510 507 506 508 528 + 507 506 508 509 508 528 530 531 + 508 528 530 532 508 510 513 516 + 508 510 513 514 508 510 513 515 + 509 508 510 513 509 508 510 511 + 509 508 510 512 509 508 528 530 + 509 508 528 529 510 513 516 519 + 510 513 516 517 510 513 516 518 + 510 508 528 530 510 508 528 529 + 511 510 508 528 511 510 513 516 + 511 510 513 514 511 510 513 515 + 512 510 508 528 512 510 513 516 + 512 510 513 514 512 510 513 515 + 513 516 519 521 513 516 519 520 + 513 510 508 528 514 513 516 519 + 514 513 516 517 514 513 516 518 + 515 513 516 519 515 513 516 517 + 515 513 516 518 516 519 521 525 + 516 519 521 522 517 516 519 521 + 517 516 519 520 518 516 519 521 + 518 516 519 520 519 521 525 526 + 519 521 525 527 519 521 522 523 + 519 521 522 524 520 519 521 525 + 520 519 521 522 522 521 525 526 + 522 521 525 527 523 522 521 525 + 524 522 521 525 528 530 532 534 + 528 530 532 542 528 530 532 533 + 529 528 530 531 529 528 530 532 + 530 532 534 537 530 532 534 535 + 530 532 534 536 530 532 542 544 + 530 532 542 543 531 530 532 534 + 531 530 532 542 531 530 532 533 + 532 542 544 545 532 542 544 546 + 532 534 537 539 532 534 537 538 + 533 532 534 537 533 532 534 535 + 533 532 534 536 533 532 542 544 + 533 532 542 543 534 537 539 540 + 534 537 539 541 534 532 542 544 + 534 532 542 543 535 534 532 542 + 535 534 537 539 535 534 537 538 + 536 534 532 542 536 534 537 539 + 536 534 537 538 537 534 532 542 + 538 537 539 540 538 537 539 541 + 542 544 546 548 542 544 546 556 + 542 544 546 547 543 542 544 545 + 543 542 544 546 544 546 548 550 + 544 546 548 552 544 546 548 549 + 544 546 556 558 544 546 556 557 + 545 544 546 548 545 544 546 556 + 545 544 546 547 546 556 558 559 + 546 556 558 560 546 548 550 551 + 546 548 552 553 546 548 552 554 + 546 548 552 555 547 546 548 550 + 547 546 548 552 547 546 548 549 + 547 546 556 558 547 546 556 557 + 548 546 556 558 548 546 556 557 + 549 548 546 556 549 548 550 551 + 549 548 552 553 549 548 552 554 + 549 548 552 555 550 548 546 556 + 550 548 552 553 550 548 552 554 + 550 548 552 555 551 550 548 552 + 552 548 546 556 556 558 560 562 + 556 558 560 575 556 558 560 561 + 557 556 558 559 557 556 558 560 + 558 560 562 565 558 560 562 563 + 558 560 562 564 558 560 575 577 + 558 560 575 576 559 558 560 562 + 559 558 560 575 559 558 560 561 + 560 575 577 578 560 575 577 579 + 560 562 565 567 560 562 565 571 + 560 562 565 566 561 560 562 565 + 561 560 562 563 561 560 562 564 + 561 560 575 577 561 560 575 576 + 562 565 567 568 562 565 567 569 + 562 565 567 570 562 565 571 572 + 562 565 571 573 562 565 571 574 + 562 560 575 577 562 560 575 576 + 563 562 560 575 563 562 565 567 + 563 562 565 571 563 562 565 566 + 564 562 560 575 564 562 565 567 + 564 562 565 571 564 562 565 566 + 565 562 560 575 566 565 567 568 + 566 565 567 569 566 565 567 570 + 566 565 571 572 566 565 571 573 + 566 565 571 574 567 565 571 572 + 567 565 571 573 567 565 571 574 + 568 567 565 571 569 567 565 571 + 570 567 565 571 575 577 579 581 + 575 577 579 587 575 577 579 580 + 576 575 577 578 576 575 577 579 + 577 579 581 584 577 579 581 582 + 577 579 581 583 577 579 587 589 + 577 579 587 588 578 577 579 581 + 578 577 579 587 578 577 579 580 + 579 587 589 590 579 587 589 591 + 579 581 584 586 579 581 584 585 + 580 579 581 584 580 579 581 582 + 580 579 581 583 580 579 587 589 + 580 579 587 588 581 579 587 589 + 581 579 587 588 582 581 579 587 + 582 581 584 586 582 581 584 585 + 583 581 579 587 583 581 584 586 + 583 581 584 585 584 581 579 587 + 587 589 591 593 587 589 591 609 + 587 589 591 592 588 587 589 590 + 588 587 589 591 589 591 593 596 + 589 591 593 594 589 591 593 595 + 589 591 609 611 589 591 609 610 + 590 589 591 593 590 589 591 609 + 590 589 591 592 591 609 611 615 + 591 609 611 612 591 593 596 599 + 591 593 596 597 591 593 596 598 + 592 591 593 596 592 591 593 594 + 592 591 593 595 592 591 609 611 + 592 591 609 610 593 596 599 602 + 593 596 599 600 593 596 599 601 + 593 591 609 611 593 591 609 610 + 594 593 591 609 594 593 596 599 + 594 593 596 597 594 593 596 598 + 595 593 591 609 595 593 596 599 + 595 593 596 597 595 593 596 598 + 596 599 602 605 596 599 602 603 + 596 599 602 604 596 593 591 609 + 597 596 599 602 597 596 599 600 + 597 596 599 601 598 596 599 602 + 598 596 599 600 598 596 599 601 + 599 602 605 606 599 602 605 607 + 599 602 605 608 600 599 602 605 + 600 599 602 603 600 599 602 604 + 601 599 602 605 601 599 602 603 + 601 599 602 604 603 602 605 606 + 603 602 605 607 603 602 605 608 + 604 602 605 606 604 602 605 607 + 604 602 605 608 609 611 615 623 + 609 611 615 617 609 611 615 616 + 609 611 612 620 609 611 612 613 + 609 611 612 614 610 609 611 615 + 610 609 611 612 611 615 623 625 + 611 615 623 624 611 615 617 620 + 611 615 617 618 611 615 617 619 + 611 612 620 617 611 612 620 621 + 611 612 620 622 612 620 617 615 + 612 620 617 618 612 620 617 619 + 612 611 615 623 612 611 615 617 + 612 611 615 616 613 612 620 617 + 613 612 620 621 613 612 620 622 + 613 612 611 615 614 612 620 617 + 614 612 620 621 614 612 620 622 + 614 612 611 615 615 623 625 626 + 615 623 625 627 615 617 620 621 + 615 617 620 622 615 611 612 620 + 616 615 623 625 616 615 623 624 + 616 615 617 620 616 615 617 618 + 616 615 617 619 617 615 623 625 + 617 615 623 624 618 617 615 623 + 618 617 620 621 618 617 620 622 + 619 617 615 623 619 617 620 621 + 619 617 620 622 620 617 615 623 + 623 625 627 629 623 625 627 639 + 623 625 627 628 624 623 625 626 + 624 623 625 627 625 627 629 631 + 625 627 629 635 625 627 629 630 + 625 627 639 641 625 627 639 640 + 626 625 627 629 626 625 627 639 + 626 625 627 628 627 639 641 642 + 627 639 641 643 627 629 631 632 + 627 629 631 633 627 629 631 634 + 627 629 635 636 627 629 635 637 + 627 629 635 638 628 627 629 631 + 628 627 629 635 628 627 629 630 + 628 627 639 641 628 627 639 640 + 629 627 639 641 629 627 639 640 + 630 629 627 639 630 629 631 632 + 630 629 631 633 630 629 631 634 + 630 629 635 636 630 629 635 637 + 630 629 635 638 631 629 627 639 + 631 629 635 636 631 629 635 637 + 631 629 635 638 632 631 629 635 + 633 631 629 635 634 631 629 635 + 635 629 627 639 639 641 643 645 + 639 641 643 658 639 641 643 644 + 640 639 641 642 640 639 641 643 + 641 643 645 651 641 643 645 647 + 641 643 645 646 641 643 658 660 + 641 643 658 659 642 641 643 645 + 642 641 643 658 642 641 643 644 + 643 658 660 661 643 658 660 662 + 643 645 651 654 643 645 651 652 + 643 645 651 653 643 645 647 648 + 643 645 647 649 643 645 647 650 + 644 643 645 651 644 643 645 647 + 644 643 645 646 644 643 658 660 + 644 643 658 659 645 651 654 655 + 645 651 654 656 645 651 654 657 + 645 643 658 660 645 643 658 659 + 646 645 643 658 646 645 651 654 + 646 645 651 652 646 645 651 653 + 646 645 647 648 646 645 647 649 + 646 645 647 650 647 645 643 658 + 647 645 651 654 647 645 651 652 + 647 645 651 653 648 647 645 651 + 649 647 645 651 650 647 645 651 + 651 645 643 658 652 651 654 655 + 652 651 654 656 652 651 654 657 + 653 651 654 655 653 651 654 656 + 653 651 654 657 658 660 662 664 + 658 660 662 675 658 660 662 663 + 659 658 660 661 659 658 660 662 + 660 662 664 667 660 662 664 665 + 660 662 664 666 660 662 675 677 + 660 662 675 676 661 660 662 664 + 661 660 662 675 661 660 662 663 + 662 675 677 678 662 675 677 679 + 662 664 667 670 662 664 667 668 + 662 664 667 669 663 662 664 667 + 663 662 664 665 663 662 664 666 + 663 662 675 677 663 662 675 676 + 664 667 670 671 664 662 675 677 + 664 662 675 676 665 664 662 675 + 665 664 667 670 665 664 667 668 + 665 664 667 669 666 664 662 675 + 666 664 667 670 666 664 667 668 + 666 664 667 669 667 670 671 672 + 667 670 671 673 667 670 671 674 + 667 664 662 675 668 667 670 671 + 669 667 670 671 675 677 679 682 + 675 677 679 680 675 677 679 681 + 676 675 677 678 676 675 677 679 + 677 679 682 684 677 679 682 683 + 678 677 679 682 678 677 679 680 + 678 677 679 681 679 682 684 685 + 679 682 684 686 680 679 682 684 + 680 679 682 683 681 679 682 684 + 681 679 682 683 682 684 686 688 + 682 684 686 706 682 684 686 687 + 683 682 684 685 683 682 684 686 + 684 686 688 691 684 686 688 689 + 684 686 688 690 684 686 706 708 + 684 686 706 707 685 684 686 688 + 685 684 686 706 685 684 686 687 + 686 706 708 709 686 706 708 710 + 686 688 691 694 686 688 691 692 + 686 688 691 693 687 686 688 691 + 687 686 688 689 687 686 688 690 + 687 686 706 708 687 686 706 707 + 688 691 694 697 688 691 694 695 + 688 691 694 696 688 686 706 708 + 688 686 706 707 689 688 686 706 + 689 688 691 694 689 688 691 692 + 689 688 691 693 690 688 686 706 + 690 688 691 694 690 688 691 692 + 690 688 691 693 691 694 697 699 + 691 694 697 698 691 688 686 706 + 692 691 694 697 692 691 694 695 + 692 691 694 696 693 691 694 697 + 693 691 694 695 693 691 694 696 + 694 697 699 703 694 697 699 700 + 695 694 697 699 695 694 697 698 + 696 694 697 699 696 694 697 698 + 697 699 703 704 697 699 703 705 + 697 699 700 701 697 699 700 702 + 698 697 699 703 698 697 699 700 + 700 699 703 704 700 699 703 705 + 701 700 699 703 702 700 699 703 + 706 708 710 712 706 708 710 723 + 706 708 710 711 707 706 708 709 + 707 706 708 710 708 710 712 717 + 708 710 712 713 708 710 712 714 + 708 710 723 725 708 710 723 724 + 709 708 710 712 709 708 710 723 + 709 708 710 711 710 723 725 726 + 710 723 725 727 710 712 717 715 + 710 712 717 721 711 710 712 717 + 711 710 712 713 711 710 712 714 + 711 710 723 725 711 710 723 724 + 712 717 715 718 712 717 715 716 + 712 717 721 720 712 717 721 722 + 712 710 723 725 712 710 723 724 + 713 712 710 723 713 712 717 715 + 713 712 717 721 714 712 710 723 + 714 712 717 715 714 712 717 721 + 715 718 720 721 715 717 721 720 + 715 717 721 722 716 715 717 721 + 716 715 718 719 716 715 718 720 + 717 721 720 718 717 715 718 719 + 717 715 718 720 717 712 710 723 + 718 720 721 722 718 715 717 721 + 719 718 720 721 723 725 727 729 + 723 725 727 737 723 725 727 728 + 724 723 725 726 724 723 725 727 + 725 727 729 731 725 727 729 733 + 725 727 729 730 725 727 737 739 + 725 727 737 738 726 725 727 729 + 726 725 727 737 726 725 727 728 + 727 737 739 740 727 737 739 741 + 727 729 731 732 727 729 733 734 + 727 729 733 735 727 729 733 736 + 728 727 729 731 728 727 729 733 + 728 727 729 730 728 727 737 739 + 728 727 737 738 729 727 737 739 + 729 727 737 738 730 729 727 737 + 730 729 731 732 730 729 733 734 + 730 729 733 735 730 729 733 736 + 731 729 727 737 731 729 733 734 + 731 729 733 735 731 729 733 736 + 732 731 729 733 733 729 727 737 + 737 739 741 743 737 739 741 761 + 737 739 741 742 738 737 739 740 + 738 737 739 741 739 741 743 746 + 739 741 743 744 739 741 743 745 + 739 741 761 763 739 741 761 762 + 740 739 741 743 740 739 741 761 + 740 739 741 742 741 761 763 764 + 741 761 763 765 741 743 746 752 + 741 743 746 747 742 741 743 746 + 742 741 743 744 742 741 743 745 + 742 741 761 763 742 741 761 762 + 743 746 752 753 743 746 752 751 + 743 746 747 749 743 746 747 748 + 743 741 761 763 743 741 761 762 + 744 743 741 761 744 743 746 752 + 744 743 746 747 745 743 741 761 + 745 743 746 752 745 743 746 747 + 746 752 753 754 746 752 753 755 + 746 752 751 757 746 752 751 749 + 746 747 749 751 746 747 749 750 + 746 743 741 761 747 749 751 757 + 747 749 751 752 747 746 752 753 + 747 746 752 751 748 747 749 751 + 748 747 749 750 748 747 746 752 + 749 751 757 758 749 751 757 759 + 749 751 752 753 749 747 746 752 + 750 749 751 757 750 749 751 752 + 751 757 759 755 751 757 759 760 + 751 752 753 754 751 752 753 755 + 752 753 755 759 752 753 755 756 + 752 751 757 758 752 751 757 759 + 753 755 759 760 753 755 759 757 + 753 752 751 757 754 753 755 759 + 754 753 755 756 755 759 757 758 + 756 755 759 760 756 755 759 757 + 758 757 759 760 761 763 765 767 + 761 763 765 776 761 763 765 766 + 762 761 763 764 762 761 763 765 + 763 765 767 770 763 765 767 768 + 763 765 767 769 763 765 776 778 + 763 765 776 777 764 763 765 767 + 764 763 765 776 764 763 765 766 + 765 776 778 779 765 776 778 780 + 765 767 770 773 765 767 770 771 + 765 767 770 772 766 765 767 770 + 766 765 767 768 766 765 767 769 + 766 765 776 778 766 765 776 777 + 767 770 773 775 767 770 773 774 + 767 765 776 778 767 765 776 777 + 768 767 765 776 768 767 770 773 + 768 767 770 771 768 767 770 772 + 769 767 765 776 769 767 770 773 + 769 767 770 771 769 767 770 772 + 770 767 765 776 771 770 773 775 + 771 770 773 774 772 770 773 775 + 772 770 773 774 776 778 780 782 + 776 778 780 787 776 778 780 781 + 777 776 778 779 777 776 778 780 + 778 780 782 785 778 780 782 783 + 778 780 782 784 778 780 787 789 + 778 780 787 788 779 778 780 782 + 779 778 780 787 779 778 780 781 + 780 787 789 790 780 787 789 791 + 780 782 785 786 781 780 782 785 + 781 780 782 783 781 780 782 784 + 781 780 787 789 781 780 787 788 + 782 780 787 789 782 780 787 788 + 783 782 780 787 783 782 785 786 + 784 782 780 787 784 782 785 786 + 785 782 780 787 787 789 791 793 + 787 789 791 806 787 789 791 792 + 788 787 789 790 788 787 789 791 + 789 791 793 799 789 791 793 795 + 789 791 793 794 789 791 806 808 + 789 791 806 807 790 789 791 793 + 790 789 791 806 790 789 791 792 + 791 806 808 809 791 806 808 810 + 791 793 799 802 791 793 799 800 + 791 793 799 801 791 793 795 796 + 791 793 795 797 791 793 795 798 + 792 791 793 799 792 791 793 795 + 792 791 793 794 792 791 806 808 + 792 791 806 807 793 799 802 803 + 793 799 802 804 793 799 802 805 + 793 791 806 808 793 791 806 807 + 794 793 791 806 794 793 799 802 + 794 793 799 800 794 793 799 801 + 794 793 795 796 794 793 795 797 + 794 793 795 798 795 793 791 806 + 795 793 799 802 795 793 799 800 + 795 793 799 801 796 795 793 799 + 797 795 793 799 798 795 793 799 + 799 793 791 806 800 799 802 803 + 800 799 802 804 800 799 802 805 + 801 799 802 803 801 799 802 804 + 801 799 802 805 806 808 810 813 + 806 808 810 811 806 808 810 812 + 807 806 808 809 807 806 808 810 + 808 810 813 815 808 810 813 814 + 809 808 810 813 809 808 810 811 + 809 808 810 812 810 813 815 816 + 810 813 815 817 811 810 813 815 + 811 810 813 814 812 810 813 815 + 812 810 813 814 813 815 817 819 + 813 815 817 837 813 815 817 818 + 814 813 815 816 814 813 815 817 + 815 817 819 822 815 817 819 820 + 815 817 819 821 815 817 837 839 + 815 817 837 838 816 815 817 819 + 816 815 817 837 816 815 817 818 + 817 837 839 843 817 837 839 840 + 817 819 822 825 817 819 822 823 + 817 819 822 824 818 817 819 822 + 818 817 819 820 818 817 819 821 + 818 817 837 839 818 817 837 838 + 819 822 825 828 819 822 825 826 + 819 822 825 827 819 817 837 839 + 819 817 837 838 820 819 817 837 + 820 819 822 825 820 819 822 823 + 820 819 822 824 821 819 817 837 + 821 819 822 825 821 819 822 823 + 821 819 822 824 822 825 828 830 + 822 825 828 829 822 819 817 837 + 823 822 825 828 823 822 825 826 + 823 822 825 827 824 822 825 828 + 824 822 825 826 824 822 825 827 + 825 828 830 834 825 828 830 831 + 826 825 828 830 826 825 828 829 + 827 825 828 830 827 825 828 829 + 828 830 834 835 828 830 834 836 + 828 830 831 832 828 830 831 833 + 829 828 830 834 829 828 830 831 + 831 830 834 835 831 830 834 836 + 832 831 830 834 833 831 830 834 + 837 839 843 851 837 839 843 845 + 837 839 843 844 837 839 840 848 + 837 839 840 841 837 839 840 842 + 838 837 839 843 838 837 839 840 + 839 843 851 853 839 843 851 852 + 839 843 845 848 839 843 845 846 + 839 843 845 847 839 840 848 845 + 839 840 848 849 839 840 848 850 + 840 848 845 843 840 848 845 846 + 840 848 845 847 840 839 843 851 + 840 839 843 845 840 839 843 844 + 841 840 848 845 841 840 848 849 + 841 840 848 850 841 840 839 843 + 842 840 848 845 842 840 848 849 + 842 840 848 850 842 840 839 843 + 843 851 853 854 843 851 853 855 + 843 845 848 849 843 845 848 850 + 843 839 840 848 844 843 851 853 + 844 843 851 852 844 843 845 848 + 844 843 845 846 844 843 845 847 + 845 843 851 853 845 843 851 852 + 846 845 843 851 846 845 848 849 + 846 845 848 850 847 845 843 851 + 847 845 848 849 847 845 848 850 + 848 845 843 851 851 853 855 857 + 851 853 855 870 851 853 855 856 + 852 851 853 854 852 851 853 855 + 853 855 857 860 853 855 857 858 + 853 855 857 859 853 855 870 872 + 853 855 870 871 854 853 855 857 + 854 853 855 870 854 853 855 856 + 855 870 872 876 855 870 872 873 + 855 857 860 862 855 857 860 866 + 855 857 860 861 856 855 857 860 + 856 855 857 858 856 855 857 859 + 856 855 870 872 856 855 870 871 + 857 860 862 863 857 860 862 864 + 857 860 862 865 857 860 866 867 + 857 860 866 868 857 860 866 869 + 857 855 870 872 857 855 870 871 + 858 857 855 870 858 857 860 862 + 858 857 860 866 858 857 860 861 + 859 857 855 870 859 857 860 862 + 859 857 860 866 859 857 860 861 + 860 857 855 870 861 860 862 863 + 861 860 862 864 861 860 862 865 + 861 860 866 867 861 860 866 868 + 861 860 866 869 862 860 866 867 + 862 860 866 868 862 860 866 869 + 863 862 860 866 864 862 860 866 + 865 862 860 866 870 872 876 884 + 870 872 876 878 870 872 876 877 + 870 872 873 881 870 872 873 874 + 870 872 873 875 871 870 872 876 + 871 870 872 873 872 876 884 886 + 872 876 884 885 872 876 878 881 + 872 876 878 879 872 876 878 880 + 872 873 881 878 872 873 881 882 + 872 873 881 883 873 881 878 876 + 873 881 878 879 873 881 878 880 + 873 872 876 884 873 872 876 878 + 873 872 876 877 874 873 881 878 + 874 873 881 882 874 873 881 883 + 874 873 872 876 875 873 881 878 + 875 873 881 882 875 873 881 883 + 875 873 872 876 876 884 886 887 + 876 884 886 888 876 878 881 882 + 876 878 881 883 876 872 873 881 + 877 876 884 886 877 876 884 885 + 877 876 878 881 877 876 878 879 + 877 876 878 880 878 876 884 886 + 878 876 884 885 879 878 876 884 + 879 878 881 882 879 878 881 883 + 880 878 876 884 880 878 881 882 + 880 878 881 883 881 878 876 884 + 884 886 888 891 884 886 888 889 + 884 886 888 890 885 884 886 887 + 885 884 886 888 886 888 891 893 + 886 888 891 892 887 886 888 891 + 887 886 888 889 887 886 888 890 + 888 891 893 894 888 891 893 895 + 889 888 891 893 889 888 891 892 + 890 888 891 893 890 888 891 892 + 891 893 895 897 891 893 895 915 + 891 893 895 896 892 891 893 894 + 892 891 893 895 893 895 897 900 + 893 895 897 898 893 895 897 899 + 893 895 915 917 893 895 915 916 + 894 893 895 897 894 893 895 915 + 894 893 895 896 895 915 917 918 + 895 915 917 919 895 897 900 903 + 895 897 900 901 895 897 900 902 + 896 895 897 900 896 895 897 898 + 896 895 897 899 896 895 915 917 + 896 895 915 916 897 900 903 906 + 897 900 903 904 897 900 903 905 + 897 895 915 917 897 895 915 916 + 898 897 895 915 898 897 900 903 + 898 897 900 901 898 897 900 902 + 899 897 895 915 899 897 900 903 + 899 897 900 901 899 897 900 902 + 900 903 906 908 900 903 906 907 + 900 897 895 915 901 900 903 906 + 901 900 903 904 901 900 903 905 + 902 900 903 906 902 900 903 904 + 902 900 903 905 903 906 908 912 + 903 906 908 909 904 903 906 908 + 904 903 906 907 905 903 906 908 + 905 903 906 907 906 908 912 913 + 906 908 912 914 906 908 909 910 + 906 908 909 911 907 906 908 912 + 907 906 908 909 909 908 912 913 + 909 908 912 914 910 909 908 912 + 911 909 908 912 915 917 919 921 + 915 917 919 937 915 917 919 920 + 916 915 917 918 916 915 917 919 + 917 919 921 924 917 919 921 922 + 917 919 921 923 917 919 937 939 + 917 919 937 938 918 917 919 921 + 918 917 919 937 918 917 919 920 + 919 937 939 940 919 937 939 941 + 919 921 924 927 919 921 924 925 + 919 921 924 926 920 919 921 924 + 920 919 921 922 920 919 921 923 + 920 919 937 939 920 919 937 938 + 921 924 927 930 921 924 927 928 + 921 924 927 929 921 919 937 939 + 921 919 937 938 922 921 919 937 + 922 921 924 927 922 921 924 925 + 922 921 924 926 923 921 919 937 + 923 921 924 927 923 921 924 925 + 923 921 924 926 924 927 930 933 + 924 927 930 931 924 927 930 932 + 924 921 919 937 925 924 927 930 + 925 924 927 928 925 924 927 929 + 926 924 927 930 926 924 927 928 + 926 924 927 929 927 930 933 934 + 927 930 933 935 927 930 933 936 + 928 927 930 933 928 927 930 931 + 928 927 930 932 929 927 930 933 + 929 927 930 931 929 927 930 932 + 931 930 933 934 931 930 933 935 + 931 930 933 936 932 930 933 934 + 932 930 933 935 932 930 933 936 + 937 939 941 943 937 939 941 951 + 937 939 941 942 938 937 939 940 + 938 937 939 941 939 941 943 946 + 939 941 943 944 939 941 943 945 + 939 941 951 953 939 941 951 952 + 940 939 941 943 940 939 941 951 + 940 939 941 942 941 951 953 954 + 941 951 953 955 941 943 946 948 + 941 943 946 947 942 941 943 946 + 942 941 943 944 942 941 943 945 + 942 941 951 953 942 941 951 952 + 943 946 948 949 943 946 948 950 + 943 941 951 953 943 941 951 952 + 944 943 941 951 944 943 946 948 + 944 943 946 947 945 943 941 951 + 945 943 946 948 945 943 946 947 + 946 943 941 951 947 946 948 949 + 947 946 948 950 951 953 955 957 + 951 953 955 970 951 953 955 956 + 952 951 953 954 952 951 953 955 + 953 955 957 963 953 955 957 959 + 953 955 957 958 953 955 970 972 + 953 955 970 971 954 953 955 957 + 954 953 955 970 954 953 955 956 + 955 970 972 973 955 970 972 974 + 955 957 963 966 955 957 963 964 + 955 957 963 965 955 957 959 960 + 955 957 959 961 955 957 959 962 + 956 955 957 963 956 955 957 959 + 956 955 957 958 956 955 970 972 + 956 955 970 971 957 963 966 967 + 957 963 966 968 957 963 966 969 + 957 955 970 972 957 955 970 971 + 958 957 955 970 958 957 963 966 + 958 957 963 964 958 957 963 965 + 958 957 959 960 958 957 959 961 + 958 957 959 962 959 957 955 970 + 959 957 963 966 959 957 963 964 + 959 957 963 965 960 959 957 963 + 961 959 957 963 962 959 957 963 + 963 957 955 970 964 963 966 967 + 964 963 966 968 964 963 966 969 + 965 963 966 967 965 963 966 968 + 965 963 966 969 970 972 974 976 + 970 972 974 989 970 972 974 975 + 971 970 972 973 971 970 972 974 + 972 974 976 982 972 974 976 978 + 972 974 976 977 972 974 989 991 + 972 974 989 990 973 972 974 976 + 973 972 974 989 973 972 974 975 + 974 989 991 992 974 989 991 993 + 974 976 982 985 974 976 982 983 + 974 976 982 984 974 976 978 979 + 974 976 978 980 974 976 978 981 + 975 974 976 982 975 974 976 978 + 975 974 976 977 975 974 989 991 + 975 974 989 990 976 982 985 986 + 976 982 985 987 976 982 985 988 + 976 974 989 991 976 974 989 990 + 977 976 974 989 977 976 982 985 + 977 976 982 983 977 976 982 984 + 977 976 978 979 977 976 978 980 + 977 976 978 981 978 976 974 989 + 978 976 982 985 978 976 982 983 + 978 976 982 984 979 978 976 982 + 980 978 976 982 981 978 976 982 + 982 976 974 989 983 982 985 986 + 983 982 985 987 983 982 985 988 + 984 982 985 986 984 982 985 987 + 984 982 985 988 989 991 993 995 + 989 991 993 1008 989 991 993 994 + 990 989 991 992 990 989 991 993 + 991 993 995 998 991 993 995 996 + 991 993 995 997 991 993 1008 1010 + 991 993 1008 1009 992 991 993 995 + 992 991 993 1008 992 991 993 994 + 993 1008 1010 1011 993 1008 1010 1012 + 993 995 998 1000 993 995 998 1004 + 993 995 998 999 994 993 995 998 + 994 993 995 996 994 993 995 997 + 994 993 1008 1010 994 993 1008 1009 + 995 998 1000 1001 995 998 1000 1002 + 995 998 1000 1003 995 998 1004 1005 + 995 998 1004 1006 995 998 1004 1007 + 995 993 1008 1010 995 993 1008 1009 + 996 995 993 1008 996 995 998 1000 + 996 995 998 1004 996 995 998 999 + 997 995 993 1008 997 995 998 1000 + 997 995 998 1004 997 995 998 999 + 998 995 993 1008 999 998 1000 1001 + 999 998 1000 1002 999 998 1000 1003 + 999 998 1004 1005 999 998 1004 1006 + 999 998 1004 1007 1000 998 1004 1005 + 1000 998 1004 1006 1000 998 1004 1007 + 1001 1000 998 1004 1002 1000 998 1004 + 1003 1000 998 1004 1008 1010 1012 1014 + 1008 1010 1012 1019 1008 1010 1012 1013 + 1009 1008 1010 1011 1009 1008 1010 1012 + 1010 1012 1014 1017 1010 1012 1014 1015 + 1010 1012 1014 1016 1010 1012 1019 1021 + 1010 1012 1019 1020 1011 1010 1012 1014 + 1011 1010 1012 1019 1011 1010 1012 1013 + 1012 1019 1021 1022 1012 1019 1021 1023 + 1012 1014 1017 1018 1013 1012 1014 1017 + 1013 1012 1014 1015 1013 1012 1014 1016 + 1013 1012 1019 1021 1013 1012 1019 1020 + 1014 1012 1019 1021 1014 1012 1019 1020 + 1015 1014 1012 1019 1015 1014 1017 1018 + 1016 1014 1012 1019 1016 1014 1017 1018 + 1017 1014 1012 1019 1019 1021 1023 1025 + 1019 1021 1023 1030 1019 1021 1023 1024 + 1020 1019 1021 1022 1020 1019 1021 1023 + 1021 1023 1025 1028 1021 1023 1025 1026 + 1021 1023 1025 1027 1021 1023 1030 1032 + 1021 1023 1030 1031 1022 1021 1023 1025 + 1022 1021 1023 1030 1022 1021 1023 1024 + 1023 1030 1032 1033 1023 1030 1032 1034 + 1023 1025 1028 1029 1024 1023 1025 1028 + 1024 1023 1025 1026 1024 1023 1025 1027 + 1024 1023 1030 1032 1024 1023 1030 1031 + 1025 1023 1030 1032 1025 1023 1030 1031 + 1026 1025 1023 1030 1026 1025 1028 1029 + 1027 1025 1023 1030 1027 1025 1028 1029 + 1028 1025 1023 1030 1030 1032 1034 1036 + 1030 1032 1034 1047 1030 1032 1034 1035 + 1031 1030 1032 1033 1031 1030 1032 1034 + 1032 1034 1036 1039 1032 1034 1036 1037 + 1032 1034 1036 1038 1032 1034 1047 1049 + 1032 1034 1047 1048 1033 1032 1034 1036 + 1033 1032 1034 1047 1033 1032 1034 1035 + 1034 1047 1049 1053 1034 1047 1049 1050 + 1034 1036 1039 1042 1034 1036 1039 1040 + 1034 1036 1039 1041 1035 1034 1036 1039 + 1035 1034 1036 1037 1035 1034 1036 1038 + 1035 1034 1047 1049 1035 1034 1047 1048 + 1036 1039 1042 1044 1036 1039 1042 1043 + 1036 1034 1047 1049 1036 1034 1047 1048 + 1037 1036 1034 1047 1037 1036 1039 1042 + 1037 1036 1039 1040 1037 1036 1039 1041 + 1038 1036 1034 1047 1038 1036 1039 1042 + 1038 1036 1039 1040 1038 1036 1039 1041 + 1039 1042 1044 1045 1039 1042 1044 1046 + 1039 1036 1034 1047 1040 1039 1042 1044 + 1040 1039 1042 1043 1041 1039 1042 1044 + 1041 1039 1042 1043 1043 1042 1044 1045 + 1043 1042 1044 1046 1047 1049 1053 1061 + 1047 1049 1053 1055 1047 1049 1053 1054 + 1047 1049 1050 1058 1047 1049 1050 1051 + 1047 1049 1050 1052 1048 1047 1049 1053 + 1048 1047 1049 1050 1049 1053 1061 1063 + 1049 1053 1061 1062 1049 1053 1055 1058 + 1049 1053 1055 1056 1049 1053 1055 1057 + 1049 1050 1058 1055 1049 1050 1058 1059 + 1049 1050 1058 1060 1050 1058 1055 1053 + 1050 1058 1055 1056 1050 1058 1055 1057 + 1050 1049 1053 1061 1050 1049 1053 1055 + 1050 1049 1053 1054 1051 1050 1058 1055 + 1051 1050 1058 1059 1051 1050 1058 1060 + 1051 1050 1049 1053 1052 1050 1058 1055 + 1052 1050 1058 1059 1052 1050 1058 1060 + 1052 1050 1049 1053 1053 1061 1063 1064 + 1053 1061 1063 1065 1053 1055 1058 1059 + 1053 1055 1058 1060 1053 1049 1050 1058 + 1054 1053 1061 1063 1054 1053 1061 1062 + 1054 1053 1055 1058 1054 1053 1055 1056 + 1054 1053 1055 1057 1055 1053 1061 1063 + 1055 1053 1061 1062 1056 1055 1053 1061 + 1056 1055 1058 1059 1056 1055 1058 1060 + 1057 1055 1053 1061 1057 1055 1058 1059 + 1057 1055 1058 1060 1058 1055 1053 1061 + 1061 1063 1065 1068 1061 1063 1065 1066 + 1061 1063 1065 1067 1062 1061 1063 1064 + 1062 1061 1063 1065 1063 1065 1068 1070 + 1063 1065 1068 1069 1064 1063 1065 1068 + 1064 1063 1065 1066 1064 1063 1065 1067 + 1065 1068 1070 1071 1065 1068 1070 1072 + 1066 1065 1068 1070 1066 1065 1068 1069 + 1067 1065 1068 1070 1067 1065 1068 1069 + 1068 1070 1072 1074 1068 1070 1072 1082 + 1068 1070 1072 1073 1069 1068 1070 1071 + 1069 1068 1070 1072 1070 1072 1074 1076 + 1070 1072 1074 1078 1070 1072 1074 1075 + 1070 1072 1082 1084 1070 1072 1082 1083 + 1071 1070 1072 1074 1071 1070 1072 1082 + 1071 1070 1072 1073 1072 1082 1084 1085 + 1072 1082 1084 1086 1072 1074 1076 1077 + 1072 1074 1078 1079 1072 1074 1078 1080 + 1072 1074 1078 1081 1073 1072 1074 1076 + 1073 1072 1074 1078 1073 1072 1074 1075 + 1073 1072 1082 1084 1073 1072 1082 1083 + 1074 1072 1082 1084 1074 1072 1082 1083 + 1075 1074 1072 1082 1075 1074 1076 1077 + 1075 1074 1078 1079 1075 1074 1078 1080 + 1075 1074 1078 1081 1076 1074 1072 1082 + 1076 1074 1078 1079 1076 1074 1078 1080 + 1076 1074 1078 1081 1077 1076 1074 1078 + 1078 1074 1072 1082 1082 1084 1086 1088 + 1082 1084 1086 1094 1082 1084 1086 1087 + 1083 1082 1084 1085 1083 1082 1084 1086 + 1084 1086 1088 1091 1084 1086 1088 1089 + 1084 1086 1088 1090 1084 1086 1094 1096 + 1084 1086 1094 1095 1085 1084 1086 1088 + 1085 1084 1086 1094 1085 1084 1086 1087 + 1086 1094 1096 1097 1086 1094 1096 1098 + 1086 1088 1091 1093 1086 1088 1091 1092 + 1087 1086 1088 1091 1087 1086 1088 1089 + 1087 1086 1088 1090 1087 1086 1094 1096 + 1087 1086 1094 1095 1088 1086 1094 1096 + 1088 1086 1094 1095 1089 1088 1086 1094 + 1089 1088 1091 1093 1089 1088 1091 1092 + 1090 1088 1086 1094 1090 1088 1091 1093 + 1090 1088 1091 1092 1091 1088 1086 1094 + 1094 1096 1098 1100 1094 1096 1098 1106 + 1094 1096 1098 1099 1095 1094 1096 1097 + 1095 1094 1096 1098 1096 1098 1100 1103 + 1096 1098 1100 1101 1096 1098 1100 1102 + 1096 1098 1106 1108 1096 1098 1106 1107 + 1097 1096 1098 1100 1097 1096 1098 1106 + 1097 1096 1098 1099 1098 1106 1108 1109 + 1098 1106 1108 1110 1098 1100 1103 1105 + 1098 1100 1103 1104 1099 1098 1100 1103 + 1099 1098 1100 1101 1099 1098 1100 1102 + 1099 1098 1106 1108 1099 1098 1106 1107 + 1100 1098 1106 1108 1100 1098 1106 1107 + 1101 1100 1098 1106 1101 1100 1103 1105 + 1101 1100 1103 1104 1102 1100 1098 1106 + 1102 1100 1103 1105 1102 1100 1103 1104 + 1103 1100 1098 1106 1106 1108 1110 1112 + 1106 1108 1110 1130 1106 1108 1110 1111 + 1107 1106 1108 1109 1107 1106 1108 1110 + 1108 1110 1112 1115 1108 1110 1112 1113 + 1108 1110 1112 1114 1108 1110 1130 1132 + 1108 1110 1130 1131 1109 1108 1110 1112 + 1109 1108 1110 1130 1109 1108 1110 1111 + 1110 1130 1132 1133 1110 1130 1132 1134 + 1110 1112 1115 1118 1110 1112 1115 1116 + 1110 1112 1115 1117 1111 1110 1112 1115 + 1111 1110 1112 1113 1111 1110 1112 1114 + 1111 1110 1130 1132 1111 1110 1130 1131 + 1112 1115 1118 1121 1112 1115 1118 1119 + 1112 1115 1118 1120 1112 1110 1130 1132 + 1112 1110 1130 1131 1113 1112 1110 1130 + 1113 1112 1115 1118 1113 1112 1115 1116 + 1113 1112 1115 1117 1114 1112 1110 1130 + 1114 1112 1115 1118 1114 1112 1115 1116 + 1114 1112 1115 1117 1115 1118 1121 1123 + 1115 1118 1121 1122 1115 1112 1110 1130 + 1116 1115 1118 1121 1116 1115 1118 1119 + 1116 1115 1118 1120 1117 1115 1118 1121 + 1117 1115 1118 1119 1117 1115 1118 1120 + 1118 1121 1123 1127 1118 1121 1123 1124 + 1119 1118 1121 1123 1119 1118 1121 1122 + 1120 1118 1121 1123 1120 1118 1121 1122 + 1121 1123 1127 1128 1121 1123 1127 1129 + 1121 1123 1124 1125 1121 1123 1124 1126 + 1122 1121 1123 1127 1122 1121 1123 1124 + 1124 1123 1127 1128 1124 1123 1127 1129 + 1125 1124 1123 1127 1126 1124 1123 1127 + 1130 1132 1134 1136 1130 1132 1134 1146 + 1130 1132 1134 1135 1131 1130 1132 1133 + 1131 1130 1132 1134 1132 1134 1136 1138 + 1132 1134 1136 1142 1132 1134 1136 1137 + 1132 1134 1146 1148 1132 1134 1146 1147 + 1133 1132 1134 1136 1133 1132 1134 1146 + 1133 1132 1134 1135 1134 1146 1148 1149 + 1134 1146 1148 1150 1134 1136 1138 1139 + 1134 1136 1138 1140 1134 1136 1138 1141 + 1134 1136 1142 1143 1134 1136 1142 1144 + 1134 1136 1142 1145 1135 1134 1136 1138 + 1135 1134 1136 1142 1135 1134 1136 1137 + 1135 1134 1146 1148 1135 1134 1146 1147 + 1136 1134 1146 1148 1136 1134 1146 1147 + 1137 1136 1134 1146 1137 1136 1138 1139 + 1137 1136 1138 1140 1137 1136 1138 1141 + 1137 1136 1142 1143 1137 1136 1142 1144 + 1137 1136 1142 1145 1138 1136 1134 1146 + 1138 1136 1142 1143 1138 1136 1142 1144 + 1138 1136 1142 1145 1139 1138 1136 1142 + 1140 1138 1136 1142 1141 1138 1136 1142 + 1142 1136 1134 1146 1146 1148 1150 1152 + 1146 1148 1150 1160 1146 1148 1150 1151 + 1147 1146 1148 1149 1147 1146 1148 1150 + 1148 1150 1152 1154 1148 1150 1152 1156 + 1148 1150 1152 1153 1148 1150 1160 1162 + 1148 1150 1160 1161 1149 1148 1150 1152 + 1149 1148 1150 1160 1149 1148 1150 1151 + 1150 1160 1162 1163 1150 1160 1162 1164 + 1150 1152 1154 1155 1150 1152 1156 1157 + 1150 1152 1156 1158 1150 1152 1156 1159 + 1151 1150 1152 1154 1151 1150 1152 1156 + 1151 1150 1152 1153 1151 1150 1160 1162 + 1151 1150 1160 1161 1152 1150 1160 1162 + 1152 1150 1160 1161 1153 1152 1150 1160 + 1153 1152 1154 1155 1153 1152 1156 1157 + 1153 1152 1156 1158 1153 1152 1156 1159 + 1154 1152 1150 1160 1154 1152 1156 1157 + 1154 1152 1156 1158 1154 1152 1156 1159 + 1155 1154 1152 1156 1156 1152 1150 1160 + 1160 1162 1164 1166 1160 1162 1164 1184 + 1160 1162 1164 1165 1161 1160 1162 1163 + 1161 1160 1162 1164 1162 1164 1166 1169 + 1162 1164 1166 1167 1162 1164 1166 1168 + 1162 1164 1184 1186 1162 1164 1184 1185 + 1163 1162 1164 1166 1163 1162 1164 1184 + 1163 1162 1164 1165 1164 1184 1186 1187 + 1164 1184 1186 1188 1164 1166 1169 1175 + 1164 1166 1169 1170 1165 1164 1166 1169 + 1165 1164 1166 1167 1165 1164 1166 1168 + 1165 1164 1184 1186 1165 1164 1184 1185 + 1166 1169 1175 1176 1166 1169 1175 1174 + 1166 1169 1170 1172 1166 1169 1170 1171 + 1166 1164 1184 1186 1166 1164 1184 1185 + 1167 1166 1164 1184 1167 1166 1169 1175 + 1167 1166 1169 1170 1168 1166 1164 1184 + 1168 1166 1169 1175 1168 1166 1169 1170 + 1169 1175 1176 1177 1169 1175 1176 1178 + 1169 1175 1174 1180 1169 1175 1174 1172 + 1169 1170 1172 1174 1169 1170 1172 1173 + 1169 1166 1164 1184 1170 1172 1174 1180 + 1170 1172 1174 1175 1170 1169 1175 1176 + 1170 1169 1175 1174 1171 1170 1172 1174 + 1171 1170 1172 1173 1171 1170 1169 1175 + 1172 1174 1180 1181 1172 1174 1180 1182 + 1172 1174 1175 1176 1172 1170 1169 1175 + 1173 1172 1174 1180 1173 1172 1174 1175 + 1174 1180 1182 1178 1174 1180 1182 1183 + 1174 1175 1176 1177 1174 1175 1176 1178 + 1175 1176 1178 1182 1175 1176 1178 1179 + 1175 1174 1180 1181 1175 1174 1180 1182 + 1176 1178 1182 1183 1176 1178 1182 1180 + 1176 1175 1174 1180 1177 1176 1178 1182 + 1177 1176 1178 1179 1178 1182 1180 1181 + 1179 1178 1182 1183 1179 1178 1182 1180 + 1181 1180 1182 1183 1184 1186 1188 1190 + 1184 1186 1188 1200 1184 1186 1188 1189 + 1185 1184 1186 1187 1185 1184 1186 1188 + 1186 1188 1190 1192 1186 1188 1190 1196 + 1186 1188 1190 1191 1186 1188 1200 1202 + 1186 1188 1200 1201 1187 1186 1188 1190 + 1187 1186 1188 1200 1187 1186 1188 1189 + 1188 1200 1202 1203 1188 1200 1202 1204 + 1188 1190 1192 1193 1188 1190 1192 1194 + 1188 1190 1192 1195 1188 1190 1196 1197 + 1188 1190 1196 1198 1188 1190 1196 1199 + 1189 1188 1190 1192 1189 1188 1190 1196 + 1189 1188 1190 1191 1189 1188 1200 1202 + 1189 1188 1200 1201 1190 1188 1200 1202 + 1190 1188 1200 1201 1191 1190 1188 1200 + 1191 1190 1192 1193 1191 1190 1192 1194 + 1191 1190 1192 1195 1191 1190 1196 1197 + 1191 1190 1196 1198 1191 1190 1196 1199 + 1192 1190 1188 1200 1192 1190 1196 1197 + 1192 1190 1196 1198 1192 1190 1196 1199 + 1193 1192 1190 1196 1194 1192 1190 1196 + 1195 1192 1190 1196 1196 1190 1188 1200 + 1200 1202 1204 1206 1200 1202 1204 1222 + 1200 1202 1204 1205 1201 1200 1202 1203 + 1201 1200 1202 1204 1202 1204 1206 1209 + 1202 1204 1206 1207 1202 1204 1206 1208 + 1202 1204 1222 1224 1202 1204 1222 1223 + 1203 1202 1204 1206 1203 1202 1204 1222 + 1203 1202 1204 1205 1204 1222 1224 1225 + 1204 1222 1224 1226 1204 1206 1209 1212 + 1204 1206 1209 1210 1204 1206 1209 1211 + 1205 1204 1206 1209 1205 1204 1206 1207 + 1205 1204 1206 1208 1205 1204 1222 1224 + 1205 1204 1222 1223 1206 1209 1212 1215 + 1206 1209 1212 1213 1206 1209 1212 1214 + 1206 1204 1222 1224 1206 1204 1222 1223 + 1207 1206 1204 1222 1207 1206 1209 1212 + 1207 1206 1209 1210 1207 1206 1209 1211 + 1208 1206 1204 1222 1208 1206 1209 1212 + 1208 1206 1209 1210 1208 1206 1209 1211 + 1209 1212 1215 1218 1209 1212 1215 1216 + 1209 1212 1215 1217 1209 1206 1204 1222 + 1210 1209 1212 1215 1210 1209 1212 1213 + 1210 1209 1212 1214 1211 1209 1212 1215 + 1211 1209 1212 1213 1211 1209 1212 1214 + 1212 1215 1218 1219 1212 1215 1218 1220 + 1212 1215 1218 1221 1213 1212 1215 1218 + 1213 1212 1215 1216 1213 1212 1215 1217 + 1214 1212 1215 1218 1214 1212 1215 1216 + 1214 1212 1215 1217 1216 1215 1218 1219 + 1216 1215 1218 1220 1216 1215 1218 1221 + 1217 1215 1218 1219 1217 1215 1218 1220 + 1217 1215 1218 1221 1222 1224 1226 1228 + 1222 1224 1226 1233 1222 1224 1226 1227 + 1223 1222 1224 1225 1223 1222 1224 1226 + 1224 1226 1228 1231 1224 1226 1228 1229 + 1224 1226 1228 1230 1224 1226 1233 1235 + 1224 1226 1233 1234 1225 1224 1226 1228 + 1225 1224 1226 1233 1225 1224 1226 1227 + 1226 1233 1235 1236 1226 1233 1235 1237 + 1226 1228 1231 1232 1227 1226 1228 1231 + 1227 1226 1228 1229 1227 1226 1228 1230 + 1227 1226 1233 1235 1227 1226 1233 1234 + 1228 1226 1233 1235 1228 1226 1233 1234 + 1229 1228 1226 1233 1229 1228 1231 1232 + 1230 1228 1226 1233 1230 1228 1231 1232 + 1231 1228 1226 1233 1233 1235 1237 1239 + 1233 1235 1237 1249 1233 1235 1237 1238 + 1234 1233 1235 1236 1234 1233 1235 1237 + 1235 1237 1239 1241 1235 1237 1239 1245 + 1235 1237 1239 1240 1235 1237 1249 1251 + 1235 1237 1249 1250 1236 1235 1237 1239 + 1236 1235 1237 1249 1236 1235 1237 1238 + 1237 1249 1251 1252 1237 1249 1251 1253 + 1237 1239 1241 1242 1237 1239 1241 1243 + 1237 1239 1241 1244 1237 1239 1245 1246 + 1237 1239 1245 1247 1237 1239 1245 1248 + 1238 1237 1239 1241 1238 1237 1239 1245 + 1238 1237 1239 1240 1238 1237 1249 1251 + 1238 1237 1249 1250 1239 1237 1249 1251 + 1239 1237 1249 1250 1240 1239 1237 1249 + 1240 1239 1241 1242 1240 1239 1241 1243 + 1240 1239 1241 1244 1240 1239 1245 1246 + 1240 1239 1245 1247 1240 1239 1245 1248 + 1241 1239 1237 1249 1241 1239 1245 1246 + 1241 1239 1245 1247 1241 1239 1245 1248 + 1242 1241 1239 1245 1243 1241 1239 1245 + 1244 1241 1239 1245 1245 1239 1237 1249 + 1249 1251 1253 1255 1249 1251 1253 1261 + 1249 1251 1253 1254 1250 1249 1251 1252 + 1250 1249 1251 1253 1251 1253 1255 1258 + 1251 1253 1255 1256 1251 1253 1255 1257 + 1251 1253 1261 1263 1251 1253 1261 1262 + 1252 1251 1253 1255 1252 1251 1253 1261 + 1252 1251 1253 1254 1253 1261 1263 1264 + 1253 1261 1263 1265 1253 1255 1258 1260 + 1253 1255 1258 1259 1254 1253 1255 1258 + 1254 1253 1255 1256 1254 1253 1255 1257 + 1254 1253 1261 1263 1254 1253 1261 1262 + 1255 1253 1261 1263 1255 1253 1261 1262 + 1256 1255 1253 1261 1256 1255 1258 1260 + 1256 1255 1258 1259 1257 1255 1253 1261 + 1257 1255 1258 1260 1257 1255 1258 1259 + 1258 1255 1253 1261 1261 1263 1265 1267 + 1261 1263 1265 1276 1261 1263 1265 1266 + 1262 1261 1263 1264 1262 1261 1263 1265 + 1263 1265 1267 1270 1263 1265 1267 1268 + 1263 1265 1267 1269 1263 1265 1276 1278 + 1263 1265 1276 1277 1264 1263 1265 1267 + 1264 1263 1265 1276 1264 1263 1265 1266 + 1265 1276 1278 1279 1265 1276 1278 1280 + 1265 1267 1270 1273 1265 1267 1270 1271 + 1265 1267 1270 1272 1266 1265 1267 1270 + 1266 1265 1267 1268 1266 1265 1267 1269 + 1266 1265 1276 1278 1266 1265 1276 1277 + 1267 1270 1273 1275 1267 1270 1273 1274 + 1267 1265 1276 1278 1267 1265 1276 1277 + 1268 1267 1265 1276 1268 1267 1270 1273 + 1268 1267 1270 1271 1268 1267 1270 1272 + 1269 1267 1265 1276 1269 1267 1270 1273 + 1269 1267 1270 1271 1269 1267 1270 1272 + 1270 1267 1265 1276 1271 1270 1273 1275 + 1271 1270 1273 1274 1272 1270 1273 1275 + 1272 1270 1273 1274 1276 1278 1280 1282 + 1276 1278 1280 1286 1276 1278 1280 1281 + 1277 1276 1278 1279 1277 1276 1278 1280 + 1278 1280 1282 1283 1278 1280 1282 1284 + 1278 1280 1282 1285 1278 1280 1286 1288 + 1278 1280 1286 1287 1279 1278 1280 1282 + 1279 1278 1280 1286 1279 1278 1280 1281 + 1280 1286 1288 1289 1280 1286 1288 1290 + 1281 1280 1282 1283 1281 1280 1282 1284 + 1281 1280 1282 1285 1281 1280 1286 1288 + 1281 1280 1286 1287 1282 1280 1286 1288 + 1282 1280 1286 1287 1283 1282 1280 1286 + 1284 1282 1280 1286 1285 1282 1280 1286 + 1286 1288 1290 1292 1286 1288 1290 1305 + 1286 1288 1290 1291 1287 1286 1288 1289 + 1287 1286 1288 1290 1288 1290 1292 1298 + 1288 1290 1292 1294 1288 1290 1292 1293 + 1288 1290 1305 1307 1288 1290 1305 1306 + 1289 1288 1290 1292 1289 1288 1290 1305 + 1289 1288 1290 1291 1290 1305 1307 1308 + 1290 1305 1307 1309 1290 1292 1298 1301 + 1290 1292 1298 1299 1290 1292 1298 1300 + 1290 1292 1294 1295 1290 1292 1294 1296 + 1290 1292 1294 1297 1291 1290 1292 1298 + 1291 1290 1292 1294 1291 1290 1292 1293 + 1291 1290 1305 1307 1291 1290 1305 1306 + 1292 1298 1301 1302 1292 1298 1301 1303 + 1292 1298 1301 1304 1292 1290 1305 1307 + 1292 1290 1305 1306 1293 1292 1290 1305 + 1293 1292 1298 1301 1293 1292 1298 1299 + 1293 1292 1298 1300 1293 1292 1294 1295 + 1293 1292 1294 1296 1293 1292 1294 1297 + 1294 1292 1290 1305 1294 1292 1298 1301 + 1294 1292 1298 1299 1294 1292 1298 1300 + 1295 1294 1292 1298 1296 1294 1292 1298 + 1297 1294 1292 1298 1298 1292 1290 1305 + 1299 1298 1301 1302 1299 1298 1301 1303 + 1299 1298 1301 1304 1300 1298 1301 1302 + 1300 1298 1301 1303 1300 1298 1301 1304 + 1305 1307 1309 1311 1305 1307 1309 1315 + 1305 1307 1309 1310 1306 1305 1307 1308 + 1306 1305 1307 1309 1307 1309 1311 1312 + 1307 1309 1311 1313 1307 1309 1311 1314 + 1307 1309 1315 1317 1307 1309 1315 1316 + 1308 1307 1309 1311 1308 1307 1309 1315 + 1308 1307 1309 1310 1309 1315 1317 1318 + 1309 1315 1317 1319 1310 1309 1311 1312 + 1310 1309 1311 1313 1310 1309 1311 1314 + 1310 1309 1315 1317 1310 1309 1315 1316 + 1311 1309 1315 1317 1311 1309 1315 1316 + 1312 1311 1309 1315 1313 1311 1309 1315 + 1314 1311 1309 1315 1315 1317 1319 1321 + 1315 1317 1319 1325 1315 1317 1319 1320 + 1316 1315 1317 1318 1316 1315 1317 1319 + 1317 1319 1321 1322 1317 1319 1321 1323 + 1317 1319 1321 1324 1317 1319 1325 1327 + 1317 1319 1325 1326 1318 1317 1319 1321 + 1318 1317 1319 1325 1318 1317 1319 1320 + 1319 1325 1327 1328 1319 1325 1327 1329 + 1320 1319 1321 1322 1320 1319 1321 1323 + 1320 1319 1321 1324 1320 1319 1325 1327 + 1320 1319 1325 1326 1321 1319 1325 1327 + 1321 1319 1325 1326 1322 1321 1319 1325 + 1323 1321 1319 1325 1324 1321 1319 1325 + 1325 1327 1329 1331 1325 1327 1329 1336 + 1325 1327 1329 1330 1326 1325 1327 1328 + 1326 1325 1327 1329 1327 1329 1331 1334 + 1327 1329 1331 1332 1327 1329 1331 1333 + 1327 1329 1336 1338 1327 1329 1336 1337 + 1328 1327 1329 1331 1328 1327 1329 1336 + 1328 1327 1329 1330 1329 1336 1338 1339 + 1329 1336 1338 1340 1329 1331 1334 1335 + 1330 1329 1331 1334 1330 1329 1331 1332 + 1330 1329 1331 1333 1330 1329 1336 1338 + 1330 1329 1336 1337 1331 1329 1336 1338 + 1331 1329 1336 1337 1332 1331 1329 1336 + 1332 1331 1334 1335 1333 1331 1329 1336 + 1333 1331 1334 1335 1334 1331 1329 1336 + 1336 1338 1340 1343 1336 1338 1340 1341 + 1336 1338 1340 1342 1337 1336 1338 1339 + 1337 1336 1338 1340 1338 1340 1343 1345 + 1338 1340 1343 1344 1339 1338 1340 1343 + 1339 1338 1340 1341 1339 1338 1340 1342 + 1340 1343 1345 1346 1340 1343 1345 1347 + 1341 1340 1343 1345 1341 1340 1343 1344 + 1342 1340 1343 1345 1342 1340 1343 1344 + 1343 1345 1347 1349 1343 1345 1347 1355 + 1343 1345 1347 1348 1344 1343 1345 1346 + 1344 1343 1345 1347 1345 1347 1349 1352 + 1345 1347 1349 1350 1345 1347 1349 1351 + 1345 1347 1355 1357 1345 1347 1355 1356 + 1346 1345 1347 1349 1346 1345 1347 1355 + 1346 1345 1347 1348 1347 1355 1357 1358 + 1347 1355 1357 1359 1347 1349 1352 1354 + 1347 1349 1352 1353 1348 1347 1349 1352 + 1348 1347 1349 1350 1348 1347 1349 1351 + 1348 1347 1355 1357 1348 1347 1355 1356 + 1349 1347 1355 1357 1349 1347 1355 1356 + 1350 1349 1347 1355 1350 1349 1352 1354 + 1350 1349 1352 1353 1351 1349 1347 1355 + 1351 1349 1352 1354 1351 1349 1352 1353 + 1352 1349 1347 1355 1355 1357 1359 1361 + 1355 1357 1359 1371 1355 1357 1359 1360 + 1356 1355 1357 1358 1356 1355 1357 1359 + 1357 1359 1361 1363 1357 1359 1361 1367 + 1357 1359 1361 1362 1357 1359 1371 1373 + 1357 1359 1371 1372 1358 1357 1359 1361 + 1358 1357 1359 1371 1358 1357 1359 1360 + 1359 1371 1373 1377 1359 1371 1373 1374 + 1359 1361 1363 1364 1359 1361 1363 1365 + 1359 1361 1363 1366 1359 1361 1367 1368 + 1359 1361 1367 1369 1359 1361 1367 1370 + 1360 1359 1361 1363 1360 1359 1361 1367 + 1360 1359 1361 1362 1360 1359 1371 1373 + 1360 1359 1371 1372 1361 1359 1371 1373 + 1361 1359 1371 1372 1362 1361 1359 1371 + 1362 1361 1363 1364 1362 1361 1363 1365 + 1362 1361 1363 1366 1362 1361 1367 1368 + 1362 1361 1367 1369 1362 1361 1367 1370 + 1363 1361 1359 1371 1363 1361 1367 1368 + 1363 1361 1367 1369 1363 1361 1367 1370 + 1364 1363 1361 1367 1365 1363 1361 1367 + 1366 1363 1361 1367 1367 1361 1359 1371 + 1371 1373 1377 1385 1371 1373 1377 1379 + 1371 1373 1377 1378 1371 1373 1374 1382 + 1371 1373 1374 1375 1371 1373 1374 1376 + 1372 1371 1373 1377 1372 1371 1373 1374 + 1373 1377 1385 1387 1373 1377 1385 1386 + 1373 1377 1379 1382 1373 1377 1379 1380 + 1373 1377 1379 1381 1373 1374 1382 1379 + 1373 1374 1382 1383 1373 1374 1382 1384 + 1374 1382 1379 1377 1374 1382 1379 1380 + 1374 1382 1379 1381 1374 1373 1377 1385 + 1374 1373 1377 1379 1374 1373 1377 1378 + 1375 1374 1382 1379 1375 1374 1382 1383 + 1375 1374 1382 1384 1375 1374 1373 1377 + 1376 1374 1382 1379 1376 1374 1382 1383 + 1376 1374 1382 1384 1376 1374 1373 1377 + 1377 1385 1387 1388 1377 1385 1387 1389 + 1377 1379 1382 1383 1377 1379 1382 1384 + 1377 1373 1374 1382 1378 1377 1385 1387 + 1378 1377 1385 1386 1378 1377 1379 1382 + 1378 1377 1379 1380 1378 1377 1379 1381 + 1379 1377 1385 1387 1379 1377 1385 1386 + 1380 1379 1377 1385 1380 1379 1382 1383 + 1380 1379 1382 1384 1381 1379 1377 1385 + 1381 1379 1382 1383 1381 1379 1382 1384 + 1382 1379 1377 1385 1385 1387 1389 1391 + 1385 1387 1389 1400 1385 1387 1389 1390 + 1386 1385 1387 1388 1386 1385 1387 1389 + 1387 1389 1391 1394 1387 1389 1391 1392 + 1387 1389 1391 1393 1387 1389 1400 1402 + 1387 1389 1400 1401 1388 1387 1389 1391 + 1388 1387 1389 1400 1388 1387 1389 1390 + 1389 1400 1402 1403 1389 1400 1402 1404 + 1389 1391 1394 1397 1389 1391 1394 1395 + 1389 1391 1394 1396 1390 1389 1391 1394 + 1390 1389 1391 1392 1390 1389 1391 1393 + 1390 1389 1400 1402 1390 1389 1400 1401 + 1391 1394 1397 1399 1391 1394 1397 1398 + 1391 1389 1400 1402 1391 1389 1400 1401 + 1392 1391 1389 1400 1392 1391 1394 1397 + 1392 1391 1394 1395 1392 1391 1394 1396 + 1393 1391 1389 1400 1393 1391 1394 1397 + 1393 1391 1394 1395 1393 1391 1394 1396 + 1394 1391 1389 1400 1395 1394 1397 1399 + 1395 1394 1397 1398 1396 1394 1397 1399 + 1396 1394 1397 1398 1400 1402 1404 1406 + 1400 1402 1404 1419 1400 1402 1404 1405 + 1401 1400 1402 1403 1401 1400 1402 1404 + 1402 1404 1406 1412 1402 1404 1406 1408 + 1402 1404 1406 1407 1402 1404 1419 1421 + 1402 1404 1419 1420 1403 1402 1404 1406 + 1403 1402 1404 1419 1403 1402 1404 1405 + 1404 1419 1421 1422 1404 1419 1421 1423 + 1404 1406 1412 1415 1404 1406 1412 1413 + 1404 1406 1412 1414 1404 1406 1408 1409 + 1404 1406 1408 1410 1404 1406 1408 1411 + 1405 1404 1406 1412 1405 1404 1406 1408 + 1405 1404 1406 1407 1405 1404 1419 1421 + 1405 1404 1419 1420 1406 1412 1415 1416 + 1406 1412 1415 1417 1406 1412 1415 1418 + 1406 1404 1419 1421 1406 1404 1419 1420 + 1407 1406 1404 1419 1407 1406 1412 1415 + 1407 1406 1412 1413 1407 1406 1412 1414 + 1407 1406 1408 1409 1407 1406 1408 1410 + 1407 1406 1408 1411 1408 1406 1404 1419 + 1408 1406 1412 1415 1408 1406 1412 1413 + 1408 1406 1412 1414 1409 1408 1406 1412 + 1410 1408 1406 1412 1411 1408 1406 1412 + 1412 1406 1404 1419 1413 1412 1415 1416 + 1413 1412 1415 1417 1413 1412 1415 1418 + 1414 1412 1415 1416 1414 1412 1415 1417 + 1414 1412 1415 1418 1419 1421 1423 1425 + 1419 1421 1423 1436 1419 1421 1423 1424 + 1420 1419 1421 1422 1420 1419 1421 1423 + 1421 1423 1425 1428 1421 1423 1425 1426 + 1421 1423 1425 1427 1421 1423 1436 1438 + 1421 1423 1436 1437 1422 1421 1423 1425 + 1422 1421 1423 1436 1422 1421 1423 1424 + 1423 1436 1438 1439 1423 1436 1438 1440 + 1423 1425 1428 1431 1423 1425 1428 1429 + 1423 1425 1428 1430 1424 1423 1425 1428 + 1424 1423 1425 1426 1424 1423 1425 1427 + 1424 1423 1436 1438 1424 1423 1436 1437 + 1425 1428 1431 1432 1425 1423 1436 1438 + 1425 1423 1436 1437 1426 1425 1423 1436 + 1426 1425 1428 1431 1426 1425 1428 1429 + 1426 1425 1428 1430 1427 1425 1423 1436 + 1427 1425 1428 1431 1427 1425 1428 1429 + 1427 1425 1428 1430 1428 1431 1432 1433 + 1428 1431 1432 1434 1428 1431 1432 1435 + 1428 1425 1423 1436 1429 1428 1431 1432 + 1430 1428 1431 1432 1436 1438 1440 1442 + 1436 1438 1440 1452 1436 1438 1440 1441 + 1437 1436 1438 1439 1437 1436 1438 1440 + 1438 1440 1442 1444 1438 1440 1442 1448 + 1438 1440 1442 1443 1438 1440 1452 1454 + 1438 1440 1452 1453 1439 1438 1440 1442 + 1439 1438 1440 1452 1439 1438 1440 1441 + 1440 1452 1454 1455 1440 1452 1454 1456 + 1440 1442 1444 1445 1440 1442 1444 1446 + 1440 1442 1444 1447 1440 1442 1448 1449 + 1440 1442 1448 1450 1440 1442 1448 1451 + 1441 1440 1442 1444 1441 1440 1442 1448 + 1441 1440 1442 1443 1441 1440 1452 1454 + 1441 1440 1452 1453 1442 1440 1452 1454 + 1442 1440 1452 1453 1443 1442 1440 1452 + 1443 1442 1444 1445 1443 1442 1444 1446 + 1443 1442 1444 1447 1443 1442 1448 1449 + 1443 1442 1448 1450 1443 1442 1448 1451 + 1444 1442 1440 1452 1444 1442 1448 1449 + 1444 1442 1448 1450 1444 1442 1448 1451 + 1445 1444 1442 1448 1446 1444 1442 1448 + 1447 1444 1442 1448 1448 1442 1440 1452 + 1452 1454 1456 1458 1452 1454 1456 1471 + 1452 1454 1456 1457 1453 1452 1454 1455 + 1453 1452 1454 1456 1454 1456 1458 1464 + 1454 1456 1458 1460 1454 1456 1458 1459 + 1454 1456 1471 1473 1454 1456 1471 1472 + 1455 1454 1456 1458 1455 1454 1456 1471 + 1455 1454 1456 1457 1456 1471 1473 1474 + 1456 1471 1473 1475 1456 1458 1464 1467 + 1456 1458 1464 1465 1456 1458 1464 1466 + 1456 1458 1460 1461 1456 1458 1460 1462 + 1456 1458 1460 1463 1457 1456 1458 1464 + 1457 1456 1458 1460 1457 1456 1458 1459 + 1457 1456 1471 1473 1457 1456 1471 1472 + 1458 1464 1467 1468 1458 1464 1467 1469 + 1458 1464 1467 1470 1458 1456 1471 1473 + 1458 1456 1471 1472 1459 1458 1456 1471 + 1459 1458 1464 1467 1459 1458 1464 1465 + 1459 1458 1464 1466 1459 1458 1460 1461 + 1459 1458 1460 1462 1459 1458 1460 1463 + 1460 1458 1456 1471 1460 1458 1464 1467 + 1460 1458 1464 1465 1460 1458 1464 1466 + 1461 1460 1458 1464 1462 1460 1458 1464 + 1463 1460 1458 1464 1464 1458 1456 1471 + 1465 1464 1467 1468 1465 1464 1467 1469 + 1465 1464 1467 1470 1466 1464 1467 1468 + 1466 1464 1467 1469 1466 1464 1467 1470 + 1471 1473 1475 1478 1471 1473 1475 1476 + 1471 1473 1475 1477 1472 1471 1473 1474 + 1472 1471 1473 1475 1473 1475 1478 1480 + 1473 1475 1478 1479 1474 1473 1475 1478 + 1474 1473 1475 1476 1474 1473 1475 1477 + 1475 1478 1480 1481 1475 1478 1480 1482 + 1476 1475 1478 1480 1476 1475 1478 1479 + 1477 1475 1478 1480 1477 1475 1478 1479 + 1478 1480 1482 1485 1478 1480 1482 1483 + 1478 1480 1482 1484 1479 1478 1480 1481 + 1479 1478 1480 1482 1480 1482 1485 1487 + 1480 1482 1485 1486 1481 1480 1482 1485 + 1481 1480 1482 1483 1481 1480 1482 1484 + 1482 1485 1487 1488 1482 1485 1487 1489 + 1483 1482 1485 1487 1483 1482 1485 1486 + 1484 1482 1485 1487 1484 1482 1485 1486 + 1485 1487 1489 1492 1485 1487 1489 1490 + 1485 1487 1489 1491 1486 1485 1487 1488 + 1486 1485 1487 1489 1487 1489 1492 1494 + 1487 1489 1492 1493 1488 1487 1489 1492 + 1488 1487 1489 1490 1488 1487 1489 1491 + 1489 1492 1494 1495 1489 1492 1494 1496 + 1490 1489 1492 1494 1490 1489 1492 1493 + 1491 1489 1492 1494 1491 1489 1492 1493 + 1492 1494 1496 1498 1492 1494 1496 1516 + 1492 1494 1496 1497 1493 1492 1494 1495 + 1493 1492 1494 1496 1494 1496 1498 1501 + 1494 1496 1498 1499 1494 1496 1498 1500 + 1494 1496 1516 1518 1494 1496 1516 1517 + 1495 1494 1496 1498 1495 1494 1496 1516 + 1495 1494 1496 1497 1496 1516 1518 1519 + 1496 1516 1518 1520 1496 1498 1501 1504 + 1496 1498 1501 1502 1496 1498 1501 1503 + 1497 1496 1498 1501 1497 1496 1498 1499 + 1497 1496 1498 1500 1497 1496 1516 1518 + 1497 1496 1516 1517 1498 1501 1504 1507 + 1498 1501 1504 1505 1498 1501 1504 1506 + 1498 1496 1516 1518 1498 1496 1516 1517 + 1499 1498 1496 1516 1499 1498 1501 1504 + 1499 1498 1501 1502 1499 1498 1501 1503 + 1500 1498 1496 1516 1500 1498 1501 1504 + 1500 1498 1501 1502 1500 1498 1501 1503 + 1501 1504 1507 1509 1501 1504 1507 1508 + 1501 1498 1496 1516 1502 1501 1504 1507 + 1502 1501 1504 1505 1502 1501 1504 1506 + 1503 1501 1504 1507 1503 1501 1504 1505 + 1503 1501 1504 1506 1504 1507 1509 1513 + 1504 1507 1509 1510 1505 1504 1507 1509 + 1505 1504 1507 1508 1506 1504 1507 1509 + 1506 1504 1507 1508 1507 1509 1513 1514 + 1507 1509 1513 1515 1507 1509 1510 1511 + 1507 1509 1510 1512 1508 1507 1509 1513 + 1508 1507 1509 1510 1510 1509 1513 1514 + 1510 1509 1513 1515 1511 1510 1509 1513 + 1512 1510 1509 1513 1516 1518 1520 1522 + 1516 1518 1520 1532 1516 1518 1520 1521 + 1517 1516 1518 1519 1517 1516 1518 1520 + 1518 1520 1522 1524 1518 1520 1522 1528 + 1518 1520 1522 1523 1518 1520 1532 1534 + 1518 1520 1532 1533 1519 1518 1520 1522 + 1519 1518 1520 1532 1519 1518 1520 1521 + 1520 1532 1534 1535 1520 1532 1534 1536 + 1520 1522 1524 1525 1520 1522 1524 1526 + 1520 1522 1524 1527 1520 1522 1528 1529 + 1520 1522 1528 1530 1520 1522 1528 1531 + 1521 1520 1522 1524 1521 1520 1522 1528 + 1521 1520 1522 1523 1521 1520 1532 1534 + 1521 1520 1532 1533 1522 1520 1532 1534 + 1522 1520 1532 1533 1523 1522 1520 1532 + 1523 1522 1524 1525 1523 1522 1524 1526 + 1523 1522 1524 1527 1523 1522 1528 1529 + 1523 1522 1528 1530 1523 1522 1528 1531 + 1524 1522 1520 1532 1524 1522 1528 1529 + 1524 1522 1528 1530 1524 1522 1528 1531 + 1525 1524 1522 1528 1526 1524 1522 1528 + 1527 1524 1522 1528 1528 1522 1520 1532 + 1532 1534 1536 1538 1532 1534 1536 1553 + 1532 1534 1536 1537 1533 1532 1534 1535 + 1533 1532 1534 1536 1534 1536 1538 1541 + 1534 1536 1538 1539 1534 1536 1538 1540 + 1534 1536 1553 1555 1534 1536 1553 1554 + 1535 1534 1536 1538 1535 1534 1536 1553 + 1535 1534 1536 1537 1536 1553 1555 1556 + 1536 1553 1555 1557 1536 1538 1541 1549 + 1536 1538 1541 1542 1537 1536 1538 1541 + 1537 1536 1538 1539 1537 1536 1538 1540 + 1537 1536 1553 1555 1537 1536 1553 1554 + 1538 1541 1549 1550 1538 1541 1549 1551 + 1538 1541 1542 1544 1538 1541 1542 1543 + 1538 1536 1553 1555 1538 1536 1553 1554 + 1539 1538 1536 1553 1539 1538 1541 1549 + 1539 1538 1541 1542 1540 1538 1536 1553 + 1540 1538 1541 1549 1540 1538 1541 1542 + 1541 1549 1551 1546 1541 1549 1551 1552 + 1541 1542 1544 1545 1541 1542 1544 1546 + 1541 1538 1536 1553 1542 1544 1546 1551 + 1542 1544 1546 1547 1542 1541 1549 1550 + 1542 1541 1549 1551 1543 1542 1544 1545 + 1543 1542 1544 1546 1543 1542 1541 1549 + 1544 1546 1551 1552 1544 1546 1551 1549 + 1544 1546 1547 1548 1544 1542 1541 1549 + 1545 1544 1546 1551 1545 1544 1546 1547 + 1546 1551 1549 1550 1547 1546 1551 1552 + 1547 1546 1551 1549 1548 1547 1546 1551 + 1550 1549 1551 1552 1553 1555 1557 1559 + 1553 1555 1557 1568 1553 1555 1557 1558 + 1554 1553 1555 1556 1554 1553 1555 1557 + 1555 1557 1559 1562 1555 1557 1559 1560 + 1555 1557 1559 1561 1555 1557 1568 1570 + 1555 1557 1568 1569 1556 1555 1557 1559 + 1556 1555 1557 1568 1556 1555 1557 1558 + 1557 1568 1570 1571 1557 1568 1570 1572 + 1557 1559 1562 1565 1557 1559 1562 1563 + 1557 1559 1562 1564 1558 1557 1559 1562 + 1558 1557 1559 1560 1558 1557 1559 1561 + 1558 1557 1568 1570 1558 1557 1568 1569 + 1559 1562 1565 1567 1559 1562 1565 1566 + 1559 1557 1568 1570 1559 1557 1568 1569 + 1560 1559 1557 1568 1560 1559 1562 1565 + 1560 1559 1562 1563 1560 1559 1562 1564 + 1561 1559 1557 1568 1561 1559 1562 1565 + 1561 1559 1562 1563 1561 1559 1562 1564 + 1562 1559 1557 1568 1563 1562 1565 1567 + 1563 1562 1565 1566 1564 1562 1565 1567 + 1564 1562 1565 1566 1568 1570 1572 1574 + 1568 1570 1572 1585 1568 1570 1572 1573 + 1569 1568 1570 1571 1569 1568 1570 1572 + 1570 1572 1574 1577 1570 1572 1574 1575 + 1570 1572 1574 1576 1570 1572 1585 1587 + 1570 1572 1585 1586 1571 1570 1572 1574 + 1571 1570 1572 1585 1571 1570 1572 1573 + 1572 1585 1587 1588 1572 1585 1587 1589 + 1572 1574 1577 1580 1572 1574 1577 1578 + 1572 1574 1577 1579 1573 1572 1574 1577 + 1573 1572 1574 1575 1573 1572 1574 1576 + 1573 1572 1585 1587 1573 1572 1585 1586 + 1574 1577 1580 1582 1574 1577 1580 1581 + 1574 1572 1585 1587 1574 1572 1585 1586 + 1575 1574 1572 1585 1575 1574 1577 1580 + 1575 1574 1577 1578 1575 1574 1577 1579 + 1576 1574 1572 1585 1576 1574 1577 1580 + 1576 1574 1577 1578 1576 1574 1577 1579 + 1577 1580 1582 1583 1577 1580 1582 1584 + 1577 1574 1572 1585 1578 1577 1580 1582 + 1578 1577 1580 1581 1579 1577 1580 1582 + 1579 1577 1580 1581 1581 1580 1582 1583 + 1581 1580 1582 1584 1585 1587 1589 1591 + 1585 1587 1589 1605 1585 1587 1589 1590 + 1586 1585 1587 1588 1586 1585 1587 1589 + 1587 1589 1591 1594 1587 1589 1591 1592 + 1587 1589 1591 1593 1587 1589 1605 1607 + 1587 1589 1605 1606 1588 1587 1589 1591 + 1588 1587 1589 1605 1588 1587 1589 1590 + 1589 1605 1607 1608 1589 1605 1607 1609 + 1589 1591 1594 1601 1589 1591 1594 1595 + 1590 1589 1591 1594 1590 1589 1591 1592 + 1590 1589 1591 1593 1590 1589 1605 1607 + 1590 1589 1605 1606 1591 1594 1601 1602 + 1591 1594 1601 1603 1591 1594 1595 1597 + 1591 1594 1595 1596 1591 1589 1605 1607 + 1591 1589 1605 1606 1592 1591 1589 1605 + 1592 1591 1594 1601 1592 1591 1594 1595 + 1593 1591 1589 1605 1593 1591 1594 1601 + 1593 1591 1594 1595 1594 1601 1603 1599 + 1594 1601 1603 1604 1594 1595 1597 1598 + 1594 1595 1597 1599 1594 1591 1589 1605 + 1595 1597 1599 1603 1595 1597 1599 1600 + 1595 1594 1601 1602 1595 1594 1601 1603 + 1596 1595 1597 1598 1596 1595 1597 1599 + 1596 1595 1594 1601 1597 1599 1603 1601 + 1597 1599 1603 1604 1597 1595 1594 1601 + 1598 1597 1599 1603 1598 1597 1599 1600 + 1599 1603 1601 1602 1600 1599 1603 1601 + 1600 1599 1603 1604 1602 1601 1603 1604 + 1605 1607 1609 1611 1605 1607 1609 1624 + 1605 1607 1609 1610 1606 1605 1607 1608 + 1606 1605 1607 1609 1607 1609 1611 1614 + 1607 1609 1611 1612 1607 1609 1611 1613 + 1607 1609 1624 1626 1607 1609 1624 1625 + 1608 1607 1609 1611 1608 1607 1609 1624 + 1608 1607 1609 1610 1609 1624 1626 1630 + 1609 1624 1626 1627 1609 1611 1614 1616 + 1609 1611 1614 1620 1609 1611 1614 1615 + 1610 1609 1611 1614 1610 1609 1611 1612 + 1610 1609 1611 1613 1610 1609 1624 1626 + 1610 1609 1624 1625 1611 1614 1616 1617 + 1611 1614 1616 1618 1611 1614 1616 1619 + 1611 1614 1620 1621 1611 1614 1620 1622 + 1611 1614 1620 1623 1611 1609 1624 1626 + 1611 1609 1624 1625 1612 1611 1609 1624 + 1612 1611 1614 1616 1612 1611 1614 1620 + 1612 1611 1614 1615 1613 1611 1609 1624 + 1613 1611 1614 1616 1613 1611 1614 1620 + 1613 1611 1614 1615 1614 1611 1609 1624 + 1615 1614 1616 1617 1615 1614 1616 1618 + 1615 1614 1616 1619 1615 1614 1620 1621 + 1615 1614 1620 1622 1615 1614 1620 1623 + 1616 1614 1620 1621 1616 1614 1620 1622 + 1616 1614 1620 1623 1617 1616 1614 1620 + 1618 1616 1614 1620 1619 1616 1614 1620 + 1624 1626 1630 1638 1624 1626 1630 1632 + 1624 1626 1630 1631 1624 1626 1627 1635 + 1624 1626 1627 1628 1624 1626 1627 1629 + 1625 1624 1626 1630 1625 1624 1626 1627 + 1626 1630 1638 1640 1626 1630 1638 1639 + 1626 1630 1632 1635 1626 1630 1632 1633 + 1626 1630 1632 1634 1626 1627 1635 1632 + 1626 1627 1635 1636 1626 1627 1635 1637 + 1627 1635 1632 1630 1627 1635 1632 1633 + 1627 1635 1632 1634 1627 1626 1630 1638 + 1627 1626 1630 1632 1627 1626 1630 1631 + 1628 1627 1635 1632 1628 1627 1635 1636 + 1628 1627 1635 1637 1628 1627 1626 1630 + 1629 1627 1635 1632 1629 1627 1635 1636 + 1629 1627 1635 1637 1629 1627 1626 1630 + 1630 1638 1640 1641 1630 1638 1640 1642 + 1630 1632 1635 1636 1630 1632 1635 1637 + 1630 1626 1627 1635 1631 1630 1638 1640 + 1631 1630 1638 1639 1631 1630 1632 1635 + 1631 1630 1632 1633 1631 1630 1632 1634 + 1632 1630 1638 1640 1632 1630 1638 1639 + 1633 1632 1630 1638 1633 1632 1635 1636 + 1633 1632 1635 1637 1634 1632 1630 1638 + 1634 1632 1635 1636 1634 1632 1635 1637 + 1635 1632 1630 1638 1638 1640 1642 1644 + 1638 1640 1642 1660 1638 1640 1642 1643 + 1639 1638 1640 1641 1639 1638 1640 1642 + 1640 1642 1644 1647 1640 1642 1644 1645 + 1640 1642 1644 1646 1640 1642 1660 1662 + 1640 1642 1660 1661 1641 1640 1642 1644 + 1641 1640 1642 1660 1641 1640 1642 1643 + 1642 1660 1662 1663 1642 1660 1662 1664 + 1642 1644 1647 1650 1642 1644 1647 1648 + 1642 1644 1647 1649 1643 1642 1644 1647 + 1643 1642 1644 1645 1643 1642 1644 1646 + 1643 1642 1660 1662 1643 1642 1660 1661 + 1644 1647 1650 1653 1644 1647 1650 1651 + 1644 1647 1650 1652 1644 1642 1660 1662 + 1644 1642 1660 1661 1645 1644 1642 1660 + 1645 1644 1647 1650 1645 1644 1647 1648 + 1645 1644 1647 1649 1646 1644 1642 1660 + 1646 1644 1647 1650 1646 1644 1647 1648 + 1646 1644 1647 1649 1647 1650 1653 1656 + 1647 1650 1653 1654 1647 1650 1653 1655 + 1647 1644 1642 1660 1648 1647 1650 1653 + 1648 1647 1650 1651 1648 1647 1650 1652 + 1649 1647 1650 1653 1649 1647 1650 1651 + 1649 1647 1650 1652 1650 1653 1656 1657 + 1650 1653 1656 1658 1650 1653 1656 1659 + 1651 1650 1653 1656 1651 1650 1653 1654 + 1651 1650 1653 1655 1652 1650 1653 1656 + 1652 1650 1653 1654 1652 1650 1653 1655 + 1654 1653 1656 1657 1654 1653 1656 1658 + 1654 1653 1656 1659 1655 1653 1656 1657 + 1655 1653 1656 1658 1655 1653 1656 1659 + 1660 1662 1664 1666 1660 1662 1664 1670 + 1660 1662 1664 1665 1661 1660 1662 1663 + 1661 1660 1662 1664 1662 1664 1666 1667 + 1662 1664 1666 1668 1662 1664 1666 1669 + 1662 1664 1670 1672 1662 1664 1670 1671 + 1663 1662 1664 1666 1663 1662 1664 1670 + 1663 1662 1664 1665 1664 1670 1672 1673 + 1664 1670 1672 1674 1665 1664 1666 1667 + 1665 1664 1666 1668 1665 1664 1666 1669 + 1665 1664 1670 1672 1665 1664 1670 1671 + 1666 1664 1670 1672 1666 1664 1670 1671 + 1667 1666 1664 1670 1668 1666 1664 1670 + 1669 1666 1664 1670 1670 1672 1674 1676 + 1670 1672 1674 1687 1670 1672 1674 1675 + 1671 1670 1672 1673 1671 1670 1672 1674 + 1672 1674 1676 1679 1672 1674 1676 1677 + 1672 1674 1676 1678 1672 1674 1687 1689 + 1672 1674 1687 1688 1673 1672 1674 1676 + 1673 1672 1674 1687 1673 1672 1674 1675 + 1674 1687 1689 1690 1674 1687 1689 1691 + 1674 1676 1679 1682 1674 1676 1679 1680 + 1674 1676 1679 1681 1675 1674 1676 1679 + 1675 1674 1676 1677 1675 1674 1676 1678 + 1675 1674 1687 1689 1675 1674 1687 1688 + 1676 1679 1682 1684 1676 1679 1682 1683 + 1676 1674 1687 1689 1676 1674 1687 1688 + 1677 1676 1674 1687 1677 1676 1679 1682 + 1677 1676 1679 1680 1677 1676 1679 1681 + 1678 1676 1674 1687 1678 1676 1679 1682 + 1678 1676 1679 1680 1678 1676 1679 1681 + 1679 1682 1684 1685 1679 1682 1684 1686 + 1679 1676 1674 1687 1680 1679 1682 1684 + 1680 1679 1682 1683 1681 1679 1682 1684 + 1681 1679 1682 1683 1683 1682 1684 1685 + 1683 1682 1684 1686 1687 1689 1691 1693 + 1687 1689 1691 1709 1687 1689 1691 1692 + 1688 1687 1689 1690 1688 1687 1689 1691 + 1689 1691 1693 1696 1689 1691 1693 1694 + 1689 1691 1693 1695 1689 1691 1709 1711 + 1689 1691 1709 1710 1690 1689 1691 1693 + 1690 1689 1691 1709 1690 1689 1691 1692 + 1691 1709 1711 1712 1691 1709 1711 1713 + 1691 1693 1696 1699 1691 1693 1696 1697 + 1691 1693 1696 1698 1692 1691 1693 1696 + 1692 1691 1693 1694 1692 1691 1693 1695 + 1692 1691 1709 1711 1692 1691 1709 1710 + 1693 1696 1699 1702 1693 1696 1699 1700 + 1693 1696 1699 1701 1693 1691 1709 1711 + 1693 1691 1709 1710 1694 1693 1691 1709 + 1694 1693 1696 1699 1694 1693 1696 1697 + 1694 1693 1696 1698 1695 1693 1691 1709 + 1695 1693 1696 1699 1695 1693 1696 1697 + 1695 1693 1696 1698 1696 1699 1702 1705 + 1696 1699 1702 1703 1696 1699 1702 1704 + 1696 1693 1691 1709 1697 1696 1699 1702 + 1697 1696 1699 1700 1697 1696 1699 1701 + 1698 1696 1699 1702 1698 1696 1699 1700 + 1698 1696 1699 1701 1699 1702 1705 1706 + 1699 1702 1705 1707 1699 1702 1705 1708 + 1700 1699 1702 1705 1700 1699 1702 1703 + 1700 1699 1702 1704 1701 1699 1702 1705 + 1701 1699 1702 1703 1701 1699 1702 1704 + 1703 1702 1705 1706 1703 1702 1705 1707 + 1703 1702 1705 1708 1704 1702 1705 1706 + 1704 1702 1705 1707 1704 1702 1705 1708 + 1709 1711 1713 1715 1709 1711 1713 1728 + 1709 1711 1713 1714 1710 1709 1711 1712 + 1710 1709 1711 1713 1711 1713 1715 1718 + 1711 1713 1715 1716 1711 1713 1715 1717 + 1711 1713 1728 1730 1711 1713 1728 1729 + 1712 1711 1713 1715 1712 1711 1713 1728 + 1712 1711 1713 1714 1713 1728 1730 1731 + 1713 1728 1730 1732 1713 1715 1718 1720 + 1713 1715 1718 1724 1713 1715 1718 1719 + 1714 1713 1715 1718 1714 1713 1715 1716 + 1714 1713 1715 1717 1714 1713 1728 1730 + 1714 1713 1728 1729 1715 1718 1720 1721 + 1715 1718 1720 1722 1715 1718 1720 1723 + 1715 1718 1724 1725 1715 1718 1724 1726 + 1715 1718 1724 1727 1715 1713 1728 1730 + 1715 1713 1728 1729 1716 1715 1713 1728 + 1716 1715 1718 1720 1716 1715 1718 1724 + 1716 1715 1718 1719 1717 1715 1713 1728 + 1717 1715 1718 1720 1717 1715 1718 1724 + 1717 1715 1718 1719 1718 1715 1713 1728 + 1719 1718 1720 1721 1719 1718 1720 1722 + 1719 1718 1720 1723 1719 1718 1724 1725 + 1719 1718 1724 1726 1719 1718 1724 1727 + 1720 1718 1724 1725 1720 1718 1724 1726 + 1720 1718 1724 1727 1721 1720 1718 1724 + 1722 1720 1718 1724 1723 1720 1718 1724 + 1728 1730 1732 1734 1728 1730 1732 1749 + 1728 1730 1732 1733 1729 1728 1730 1731 + 1729 1728 1730 1732 1730 1732 1734 1737 + 1730 1732 1734 1735 1730 1732 1734 1736 + 1730 1732 1749 1751 1730 1732 1749 1750 + 1731 1730 1732 1734 1731 1730 1732 1749 + 1731 1730 1732 1733 1732 1749 1751 1752 + 1732 1749 1751 1753 1732 1734 1737 1745 + 1732 1734 1737 1738 1733 1732 1734 1737 + 1733 1732 1734 1735 1733 1732 1734 1736 + 1733 1732 1749 1751 1733 1732 1749 1750 + 1734 1737 1745 1746 1734 1737 1745 1747 + 1734 1737 1738 1740 1734 1737 1738 1739 + 1734 1732 1749 1751 1734 1732 1749 1750 + 1735 1734 1732 1749 1735 1734 1737 1745 + 1735 1734 1737 1738 1736 1734 1732 1749 + 1736 1734 1737 1745 1736 1734 1737 1738 + 1737 1745 1747 1742 1737 1745 1747 1748 + 1737 1738 1740 1741 1737 1738 1740 1742 + 1737 1734 1732 1749 1738 1740 1742 1747 + 1738 1740 1742 1743 1738 1737 1745 1746 + 1738 1737 1745 1747 1739 1738 1740 1741 + 1739 1738 1740 1742 1739 1738 1737 1745 + 1740 1742 1747 1748 1740 1742 1747 1745 + 1740 1742 1743 1744 1740 1738 1737 1745 + 1741 1740 1742 1747 1741 1740 1742 1743 + 1742 1747 1745 1746 1743 1742 1747 1748 + 1743 1742 1747 1745 1744 1743 1742 1747 + 1746 1745 1747 1748 1749 1751 1753 1755 + 1749 1751 1753 1768 1749 1751 1753 1754 + 1750 1749 1751 1752 1750 1749 1751 1753 + 1751 1753 1755 1758 1751 1753 1755 1756 + 1751 1753 1755 1757 1751 1753 1768 1770 + 1751 1753 1768 1769 1752 1751 1753 1755 + 1752 1751 1753 1768 1752 1751 1753 1754 + 1753 1768 1770 1771 1753 1768 1770 1772 + 1753 1755 1758 1760 1753 1755 1758 1764 + 1753 1755 1758 1759 1754 1753 1755 1758 + 1754 1753 1755 1756 1754 1753 1755 1757 + 1754 1753 1768 1770 1754 1753 1768 1769 + 1755 1758 1760 1761 1755 1758 1760 1762 + 1755 1758 1760 1763 1755 1758 1764 1765 + 1755 1758 1764 1766 1755 1758 1764 1767 + 1755 1753 1768 1770 1755 1753 1768 1769 + 1756 1755 1753 1768 1756 1755 1758 1760 + 1756 1755 1758 1764 1756 1755 1758 1759 + 1757 1755 1753 1768 1757 1755 1758 1760 + 1757 1755 1758 1764 1757 1755 1758 1759 + 1758 1755 1753 1768 1759 1758 1760 1761 + 1759 1758 1760 1762 1759 1758 1760 1763 + 1759 1758 1764 1765 1759 1758 1764 1766 + 1759 1758 1764 1767 1760 1758 1764 1765 + 1760 1758 1764 1766 1760 1758 1764 1767 + 1761 1760 1758 1764 1762 1760 1758 1764 + 1763 1760 1758 1764 1768 1770 1772 1774 + 1768 1770 1772 1782 1768 1770 1772 1773 + 1769 1768 1770 1771 1769 1768 1770 1772 + 1770 1772 1774 1776 1770 1772 1774 1778 + 1770 1772 1774 1775 1770 1772 1782 1784 + 1770 1772 1782 1783 1771 1770 1772 1774 + 1771 1770 1772 1782 1771 1770 1772 1773 + 1772 1782 1784 1785 1772 1782 1784 1786 + 1772 1774 1776 1777 1772 1774 1778 1779 + 1772 1774 1778 1780 1772 1774 1778 1781 + 1773 1772 1774 1776 1773 1772 1774 1778 + 1773 1772 1774 1775 1773 1772 1782 1784 + 1773 1772 1782 1783 1774 1772 1782 1784 + 1774 1772 1782 1783 1775 1774 1772 1782 + 1775 1774 1776 1777 1775 1774 1778 1779 + 1775 1774 1778 1780 1775 1774 1778 1781 + 1776 1774 1772 1782 1776 1774 1778 1779 + 1776 1774 1778 1780 1776 1774 1778 1781 + 1777 1776 1774 1778 1778 1774 1772 1782 + 1782 1784 1786 1788 1782 1784 1786 1799 + 1782 1784 1786 1787 1783 1782 1784 1785 + 1783 1782 1784 1786 1784 1786 1788 1793 + 1784 1786 1788 1789 1784 1786 1788 1790 + 1784 1786 1799 1801 1784 1786 1799 1800 + 1785 1784 1786 1788 1785 1784 1786 1799 + 1785 1784 1786 1787 1786 1799 1801 1802 + 1786 1799 1801 1803 1786 1788 1793 1791 + 1786 1788 1793 1797 1787 1786 1788 1793 + 1787 1786 1788 1789 1787 1786 1788 1790 + 1787 1786 1799 1801 1787 1786 1799 1800 + 1788 1793 1791 1794 1788 1793 1791 1792 + 1788 1793 1797 1796 1788 1793 1797 1798 + 1788 1786 1799 1801 1788 1786 1799 1800 + 1789 1788 1786 1799 1789 1788 1793 1791 + 1789 1788 1793 1797 1790 1788 1786 1799 + 1790 1788 1793 1791 1790 1788 1793 1797 + 1791 1794 1796 1797 1791 1793 1797 1796 + 1791 1793 1797 1798 1792 1791 1793 1797 + 1792 1791 1794 1795 1792 1791 1794 1796 + 1793 1797 1796 1794 1793 1791 1794 1795 + 1793 1791 1794 1796 1793 1788 1786 1799 + 1794 1796 1797 1798 1794 1791 1793 1797 + 1795 1794 1796 1797 1799 1801 1803 1805 + 1799 1801 1803 1818 1799 1801 1803 1804 + 1800 1799 1801 1802 1800 1799 1801 1803 + 1801 1803 1805 1811 1801 1803 1805 1807 + 1801 1803 1805 1806 1801 1803 1818 1820 + 1801 1803 1818 1819 1802 1801 1803 1805 + 1802 1801 1803 1818 1802 1801 1803 1804 + 1803 1818 1820 1821 1803 1818 1820 1822 + 1803 1805 1811 1814 1803 1805 1811 1812 + 1803 1805 1811 1813 1803 1805 1807 1808 + 1803 1805 1807 1809 1803 1805 1807 1810 + 1804 1803 1805 1811 1804 1803 1805 1807 + 1804 1803 1805 1806 1804 1803 1818 1820 + 1804 1803 1818 1819 1805 1811 1814 1815 + 1805 1811 1814 1816 1805 1811 1814 1817 + 1805 1803 1818 1820 1805 1803 1818 1819 + 1806 1805 1803 1818 1806 1805 1811 1814 + 1806 1805 1811 1812 1806 1805 1811 1813 + 1806 1805 1807 1808 1806 1805 1807 1809 + 1806 1805 1807 1810 1807 1805 1803 1818 + 1807 1805 1811 1814 1807 1805 1811 1812 + 1807 1805 1811 1813 1808 1807 1805 1811 + 1809 1807 1805 1811 1810 1807 1805 1811 + 1811 1805 1803 1818 1812 1811 1814 1815 + 1812 1811 1814 1816 1812 1811 1814 1817 + 1813 1811 1814 1815 1813 1811 1814 1816 + 1813 1811 1814 1817 1818 1820 1822 1824 + 1818 1820 1822 1830 1818 1820 1822 1823 + 1819 1818 1820 1821 1819 1818 1820 1822 + 1820 1822 1824 1827 1820 1822 1824 1825 + 1820 1822 1824 1826 1820 1822 1830 1832 + 1820 1822 1830 1831 1821 1820 1822 1824 + 1821 1820 1822 1830 1821 1820 1822 1823 + 1822 1830 1832 1833 1822 1830 1832 1834 + 1822 1824 1827 1829 1822 1824 1827 1828 + 1823 1822 1824 1827 1823 1822 1824 1825 + 1823 1822 1824 1826 1823 1822 1830 1832 + 1823 1822 1830 1831 1824 1822 1830 1832 + 1824 1822 1830 1831 1825 1824 1822 1830 + 1825 1824 1827 1829 1825 1824 1827 1828 + 1826 1824 1822 1830 1826 1824 1827 1829 + 1826 1824 1827 1828 1827 1824 1822 1830 + 1830 1832 1834 1836 1830 1832 1834 1840 + 1830 1832 1834 1835 1831 1830 1832 1833 + 1831 1830 1832 1834 1832 1834 1836 1837 + 1832 1834 1836 1838 1832 1834 1836 1839 + 1832 1834 1840 1842 1832 1834 1840 1841 + 1833 1832 1834 1836 1833 1832 1834 1840 + 1833 1832 1834 1835 1834 1840 1842 1843 + 1834 1840 1842 1844 1835 1834 1836 1837 + 1835 1834 1836 1838 1835 1834 1836 1839 + 1835 1834 1840 1842 1835 1834 1840 1841 + 1836 1834 1840 1842 1836 1834 1840 1841 + 1837 1836 1834 1840 1838 1836 1834 1840 + 1839 1836 1834 1840 1840 1842 1844 1846 + 1840 1842 1844 1855 1840 1842 1844 1845 + 1841 1840 1842 1843 1841 1840 1842 1844 + 1842 1844 1846 1849 1842 1844 1846 1847 + 1842 1844 1846 1848 1842 1844 1855 1857 + 1842 1844 1855 1856 1843 1842 1844 1846 + 1843 1842 1844 1855 1843 1842 1844 1845 + 1844 1855 1857 1858 1844 1855 1857 1859 + 1844 1846 1849 1852 1844 1846 1849 1850 + 1844 1846 1849 1851 1845 1844 1846 1849 + 1845 1844 1846 1847 1845 1844 1846 1848 + 1845 1844 1855 1857 1845 1844 1855 1856 + 1846 1849 1852 1854 1846 1849 1852 1853 + 1846 1844 1855 1857 1846 1844 1855 1856 + 1847 1846 1844 1855 1847 1846 1849 1852 + 1847 1846 1849 1850 1847 1846 1849 1851 + 1848 1846 1844 1855 1848 1846 1849 1852 + 1848 1846 1849 1850 1848 1846 1849 1851 + 1849 1846 1844 1855 1850 1849 1852 1854 + 1850 1849 1852 1853 1851 1849 1852 1854 + 1851 1849 1852 1853 1855 1857 1859 1861 + 1855 1857 1859 1871 1855 1857 1859 1860 + 1856 1855 1857 1858 1856 1855 1857 1859 + 1857 1859 1861 1863 1857 1859 1861 1867 + 1857 1859 1861 1862 1857 1859 1871 1873 + 1857 1859 1871 1872 1858 1857 1859 1861 + 1858 1857 1859 1871 1858 1857 1859 1860 + 1859 1871 1873 1874 1859 1871 1873 1875 + 1859 1861 1863 1864 1859 1861 1863 1865 + 1859 1861 1863 1866 1859 1861 1867 1868 + 1859 1861 1867 1869 1859 1861 1867 1870 + 1860 1859 1861 1863 1860 1859 1861 1867 + 1860 1859 1861 1862 1860 1859 1871 1873 + 1860 1859 1871 1872 1861 1859 1871 1873 + 1861 1859 1871 1872 1862 1861 1859 1871 + 1862 1861 1863 1864 1862 1861 1863 1865 + 1862 1861 1863 1866 1862 1861 1867 1868 + 1862 1861 1867 1869 1862 1861 1867 1870 + 1863 1861 1859 1871 1863 1861 1867 1868 + 1863 1861 1867 1869 1863 1861 1867 1870 + 1864 1863 1861 1867 1865 1863 1861 1867 + 1866 1863 1861 1867 1867 1861 1859 1871 + 1871 1873 1875 1877 1871 1873 1875 1886 + 1871 1873 1875 1876 1872 1871 1873 1874 + 1872 1871 1873 1875 1873 1875 1877 1880 + 1873 1875 1877 1878 1873 1875 1877 1879 + 1873 1875 1886 1888 1873 1875 1886 1887 + 1874 1873 1875 1877 1874 1873 1875 1886 + 1874 1873 1875 1876 1875 1886 1888 1889 + 1875 1886 1888 1890 1875 1877 1880 1883 + 1875 1877 1880 1881 1875 1877 1880 1882 + 1876 1875 1877 1880 1876 1875 1877 1878 + 1876 1875 1877 1879 1876 1875 1886 1888 + 1876 1875 1886 1887 1877 1880 1883 1885 + 1877 1880 1883 1884 1877 1875 1886 1888 + 1877 1875 1886 1887 1878 1877 1875 1886 + 1878 1877 1880 1883 1878 1877 1880 1881 + 1878 1877 1880 1882 1879 1877 1875 1886 + 1879 1877 1880 1883 1879 1877 1880 1881 + 1879 1877 1880 1882 1880 1877 1875 1886 + 1881 1880 1883 1885 1881 1880 1883 1884 + 1882 1880 1883 1885 1882 1880 1883 1884 + 1886 1888 1890 1893 1886 1888 1890 1891 + 1886 1888 1890 1892 1887 1886 1888 1889 + 1887 1886 1888 1890 1888 1890 1893 1895 + 1888 1890 1893 1894 1889 1888 1890 1893 + 1889 1888 1890 1891 1889 1888 1890 1892 + 1890 1893 1895 1896 1890 1893 1895 1897 + 1891 1890 1893 1895 1891 1890 1893 1894 + 1892 1890 1893 1895 1892 1890 1893 1894 + 1893 1895 1897 1899 1893 1895 1897 1905 + 1893 1895 1897 1898 1894 1893 1895 1896 + 1894 1893 1895 1897 1895 1897 1899 1902 + 1895 1897 1899 1900 1895 1897 1899 1901 + 1895 1897 1905 1907 1895 1897 1905 1906 + 1896 1895 1897 1899 1896 1895 1897 1905 + 1896 1895 1897 1898 1897 1905 1907 1908 + 1897 1905 1907 1909 1897 1899 1902 1904 + 1897 1899 1902 1903 1898 1897 1899 1902 + 1898 1897 1899 1900 1898 1897 1899 1901 + 1898 1897 1905 1907 1898 1897 1905 1906 + 1899 1897 1905 1907 1899 1897 1905 1906 + 1900 1899 1897 1905 1900 1899 1902 1904 + 1900 1899 1902 1903 1901 1899 1897 1905 + 1901 1899 1902 1904 1901 1899 1902 1903 + 1902 1899 1897 1905 1905 1907 1909 1911 + 1905 1907 1909 1919 1905 1907 1909 1910 + 1906 1905 1907 1908 1906 1905 1907 1909 + 1907 1909 1911 1913 1907 1909 1911 1915 + 1907 1909 1911 1912 1907 1909 1919 1921 + 1907 1909 1919 1920 1908 1907 1909 1911 + 1908 1907 1909 1919 1908 1907 1909 1910 + 1909 1919 1921 1922 1909 1919 1921 1923 + 1909 1911 1913 1914 1909 1911 1915 1916 + 1909 1911 1915 1917 1909 1911 1915 1918 + 1910 1909 1911 1913 1910 1909 1911 1915 + 1910 1909 1911 1912 1910 1909 1919 1921 + 1910 1909 1919 1920 1911 1909 1919 1921 + 1911 1909 1919 1920 1912 1911 1909 1919 + 1912 1911 1913 1914 1912 1911 1915 1916 + 1912 1911 1915 1917 1912 1911 1915 1918 + 1913 1911 1909 1919 1913 1911 1915 1916 + 1913 1911 1915 1917 1913 1911 1915 1918 + 1914 1913 1911 1915 1915 1911 1909 1919 + 1919 1921 1923 1925 1919 1921 1923 1936 + 1919 1921 1923 1924 1920 1919 1921 1922 + 1920 1919 1921 1923 1921 1923 1925 1930 + 1921 1923 1925 1926 1921 1923 1925 1927 + 1921 1923 1936 1938 1921 1923 1936 1937 + 1922 1921 1923 1925 1922 1921 1923 1936 + 1922 1921 1923 1924 1923 1936 1938 1939 + 1923 1936 1938 1940 1923 1925 1930 1928 + 1923 1925 1930 1934 1924 1923 1925 1930 + 1924 1923 1925 1926 1924 1923 1925 1927 + 1924 1923 1936 1938 1924 1923 1936 1937 + 1925 1930 1928 1931 1925 1930 1928 1929 + 1925 1930 1934 1933 1925 1930 1934 1935 + 1925 1923 1936 1938 1925 1923 1936 1937 + 1926 1925 1923 1936 1926 1925 1930 1928 + 1926 1925 1930 1934 1927 1925 1923 1936 + 1927 1925 1930 1928 1927 1925 1930 1934 + 1928 1931 1933 1934 1928 1930 1934 1933 + 1928 1930 1934 1935 1929 1928 1930 1934 + 1929 1928 1931 1932 1929 1928 1931 1933 + 1930 1934 1933 1931 1930 1928 1931 1932 + 1930 1928 1931 1933 1930 1925 1923 1936 + 1931 1933 1934 1935 1931 1928 1930 1934 + 1932 1931 1933 1934 1936 1938 1940 1942 + 1936 1938 1940 1956 1936 1938 1940 1941 + 1937 1936 1938 1939 1937 1936 1938 1940 + 1938 1940 1942 1945 1938 1940 1942 1943 + 1938 1940 1942 1944 1938 1940 1956 1958 + 1938 1940 1956 1957 1939 1938 1940 1942 + 1939 1938 1940 1956 1939 1938 1940 1941 + 1940 1956 1958 1962 1940 1956 1958 1959 + 1940 1942 1945 1952 1940 1942 1945 1946 + 1941 1940 1942 1945 1941 1940 1942 1943 + 1941 1940 1942 1944 1941 1940 1956 1958 + 1941 1940 1956 1957 1942 1945 1952 1953 + 1942 1945 1952 1954 1942 1945 1946 1948 + 1942 1945 1946 1947 1942 1940 1956 1958 + 1942 1940 1956 1957 1943 1942 1940 1956 + 1943 1942 1945 1952 1943 1942 1945 1946 + 1944 1942 1940 1956 1944 1942 1945 1952 + 1944 1942 1945 1946 1945 1952 1954 1950 + 1945 1952 1954 1955 1945 1946 1948 1949 + 1945 1946 1948 1950 1945 1942 1940 1956 + 1946 1948 1950 1954 1946 1948 1950 1951 + 1946 1945 1952 1953 1946 1945 1952 1954 + 1947 1946 1948 1949 1947 1946 1948 1950 + 1947 1946 1945 1952 1948 1950 1954 1952 + 1948 1950 1954 1955 1948 1946 1945 1952 + 1949 1948 1950 1954 1949 1948 1950 1951 + 1950 1954 1952 1953 1951 1950 1954 1952 + 1951 1950 1954 1955 1953 1952 1954 1955 + 1956 1958 1962 1970 1956 1958 1962 1964 + 1956 1958 1962 1963 1956 1958 1959 1967 + 1956 1958 1959 1960 1956 1958 1959 1961 + 1957 1956 1958 1962 1957 1956 1958 1959 + 1958 1962 1970 1972 1958 1962 1970 1971 + 1958 1962 1964 1967 1958 1962 1964 1965 + 1958 1962 1964 1966 1958 1959 1967 1964 + 1958 1959 1967 1968 1958 1959 1967 1969 + 1959 1967 1964 1962 1959 1967 1964 1965 + 1959 1967 1964 1966 1959 1958 1962 1970 + 1959 1958 1962 1964 1959 1958 1962 1963 + 1960 1959 1967 1964 1960 1959 1967 1968 + 1960 1959 1967 1969 1960 1959 1958 1962 + 1961 1959 1967 1964 1961 1959 1967 1968 + 1961 1959 1967 1969 1961 1959 1958 1962 + 1962 1970 1972 1973 1962 1970 1972 1974 + 1962 1964 1967 1968 1962 1964 1967 1969 + 1962 1958 1959 1967 1963 1962 1970 1972 + 1963 1962 1970 1971 1963 1962 1964 1967 + 1963 1962 1964 1965 1963 1962 1964 1966 + 1964 1962 1970 1972 1964 1962 1970 1971 + 1965 1964 1962 1970 1965 1964 1967 1968 + 1965 1964 1967 1969 1966 1964 1962 1970 + 1966 1964 1967 1968 1966 1964 1967 1969 + 1967 1964 1962 1970 1970 1972 1974 1976 + 1970 1972 1974 1982 1970 1972 1974 1975 + 1971 1970 1972 1973 1971 1970 1972 1974 + 1972 1974 1976 1979 1972 1974 1976 1977 + 1972 1974 1976 1978 1972 1974 1982 1984 + 1972 1974 1982 1983 1973 1972 1974 1976 + 1973 1972 1974 1982 1973 1972 1974 1975 + 1974 1982 1984 1985 1974 1982 1984 1986 + 1974 1976 1979 1981 1974 1976 1979 1980 + 1975 1974 1976 1979 1975 1974 1976 1977 + 1975 1974 1976 1978 1975 1974 1982 1984 + 1975 1974 1982 1983 1976 1974 1982 1984 + 1976 1974 1982 1983 1977 1976 1974 1982 + 1977 1976 1979 1981 1977 1976 1979 1980 + 1978 1976 1974 1982 1978 1976 1979 1981 + 1978 1976 1979 1980 1979 1976 1974 1982 + 1982 1984 1986 1988 1982 1984 1986 2003 + 1982 1984 1986 1987 1983 1982 1984 1985 + 1983 1982 1984 1986 1984 1986 1988 1991 + 1984 1986 1988 1989 1984 1986 1988 1990 + 1984 1986 2003 2005 1984 1986 2003 2004 + 1985 1984 1986 1988 1985 1984 1986 2003 + 1985 1984 1986 1987 1986 2003 2005 2006 + 1986 2003 2005 2007 1986 1988 1991 1999 + 1986 1988 1991 1992 1987 1986 1988 1991 + 1987 1986 1988 1989 1987 1986 1988 1990 + 1987 1986 2003 2005 1987 1986 2003 2004 + 1988 1991 1999 2000 1988 1991 1999 2001 + 1988 1991 1992 1994 1988 1991 1992 1993 + 1988 1986 2003 2005 1988 1986 2003 2004 + 1989 1988 1986 2003 1989 1988 1991 1999 + 1989 1988 1991 1992 1990 1988 1986 2003 + 1990 1988 1991 1999 1990 1988 1991 1992 + 1991 1999 2001 1996 1991 1999 2001 2002 + 1991 1992 1994 1995 1991 1992 1994 1996 + 1991 1988 1986 2003 1992 1994 1996 2001 + 1992 1994 1996 1997 1992 1991 1999 2000 + 1992 1991 1999 2001 1993 1992 1994 1995 + 1993 1992 1994 1996 1993 1992 1991 1999 + 1994 1996 2001 2002 1994 1996 2001 1999 + 1994 1996 1997 1998 1994 1992 1991 1999 + 1995 1994 1996 2001 1995 1994 1996 1997 + 1996 2001 1999 2000 1997 1996 2001 2002 + 1997 1996 2001 1999 1998 1997 1996 2001 + 2000 1999 2001 2002 2003 2005 2007 2009 + 2003 2005 2007 2018 2003 2005 2007 2008 + 2004 2003 2005 2006 2004 2003 2005 2007 + 2005 2007 2009 2012 2005 2007 2009 2010 + 2005 2007 2009 2011 2005 2007 2018 2020 + 2005 2007 2018 2019 2006 2005 2007 2009 + 2006 2005 2007 2018 2006 2005 2007 2008 + 2007 2018 2020 2024 2007 2018 2020 2021 + 2007 2009 2012 2015 2007 2009 2012 2013 + 2007 2009 2012 2014 2008 2007 2009 2012 + 2008 2007 2009 2010 2008 2007 2009 2011 + 2008 2007 2018 2020 2008 2007 2018 2019 + 2009 2012 2015 2017 2009 2012 2015 2016 + 2009 2007 2018 2020 2009 2007 2018 2019 + 2010 2009 2007 2018 2010 2009 2012 2015 + 2010 2009 2012 2013 2010 2009 2012 2014 + 2011 2009 2007 2018 2011 2009 2012 2015 + 2011 2009 2012 2013 2011 2009 2012 2014 + 2012 2009 2007 2018 2013 2012 2015 2017 + 2013 2012 2015 2016 2014 2012 2015 2017 + 2014 2012 2015 2016 2018 2020 2024 2032 + 2018 2020 2024 2026 2018 2020 2024 2025 + 2018 2020 2021 2029 2018 2020 2021 2022 + 2018 2020 2021 2023 2019 2018 2020 2024 + 2019 2018 2020 2021 2020 2024 2032 2034 + 2020 2024 2032 2033 2020 2024 2026 2029 + 2020 2024 2026 2027 2020 2024 2026 2028 + 2020 2021 2029 2026 2020 2021 2029 2030 + 2020 2021 2029 2031 2021 2029 2026 2024 + 2021 2029 2026 2027 2021 2029 2026 2028 + 2021 2020 2024 2032 2021 2020 2024 2026 + 2021 2020 2024 2025 2022 2021 2029 2026 + 2022 2021 2029 2030 2022 2021 2029 2031 + 2022 2021 2020 2024 2023 2021 2029 2026 + 2023 2021 2029 2030 2023 2021 2029 2031 + 2023 2021 2020 2024 2024 2032 2034 2035 + 2024 2032 2034 2036 2024 2026 2029 2030 + 2024 2026 2029 2031 2024 2020 2021 2029 + 2025 2024 2032 2034 2025 2024 2032 2033 + 2025 2024 2026 2029 2025 2024 2026 2027 + 2025 2024 2026 2028 2026 2024 2032 2034 + 2026 2024 2032 2033 2027 2026 2024 2032 + 2027 2026 2029 2030 2027 2026 2029 2031 + 2028 2026 2024 2032 2028 2026 2029 2030 + 2028 2026 2029 2031 2029 2026 2024 2032 + 2032 2034 2036 2038 2032 2034 2036 2044 + 2032 2034 2036 2037 2033 2032 2034 2035 + 2033 2032 2034 2036 2034 2036 2038 2041 + 2034 2036 2038 2039 2034 2036 2038 2040 + 2034 2036 2044 2046 2034 2036 2044 2045 + 2035 2034 2036 2038 2035 2034 2036 2044 + 2035 2034 2036 2037 2036 2044 2046 2047 + 2036 2044 2046 2048 2036 2038 2041 2043 + 2036 2038 2041 2042 2037 2036 2038 2041 + 2037 2036 2038 2039 2037 2036 2038 2040 + 2037 2036 2044 2046 2037 2036 2044 2045 + 2038 2036 2044 2046 2038 2036 2044 2045 + 2039 2038 2036 2044 2039 2038 2041 2043 + 2039 2038 2041 2042 2040 2038 2036 2044 + 2040 2038 2041 2043 2040 2038 2041 2042 + 2041 2038 2036 2044 2044 2046 2048 2050 + 2044 2046 2048 2056 2044 2046 2048 2049 + 2045 2044 2046 2047 2045 2044 2046 2048 + 2046 2048 2050 2053 2046 2048 2050 2051 + 2046 2048 2050 2052 2046 2048 2056 2058 + 2046 2048 2056 2057 2047 2046 2048 2050 + 2047 2046 2048 2056 2047 2046 2048 2049 + 2048 2056 2058 2059 2048 2056 2058 2060 + 2048 2050 2053 2055 2048 2050 2053 2054 + 2049 2048 2050 2053 2049 2048 2050 2051 + 2049 2048 2050 2052 2049 2048 2056 2058 + 2049 2048 2056 2057 2050 2048 2056 2058 + 2050 2048 2056 2057 2051 2050 2048 2056 + 2051 2050 2053 2055 2051 2050 2053 2054 + 2052 2050 2048 2056 2052 2050 2053 2055 + 2052 2050 2053 2054 2053 2050 2048 2056 + 2056 2058 2060 2062 2056 2058 2060 2080 + 2056 2058 2060 2061 2057 2056 2058 2059 + 2057 2056 2058 2060 2058 2060 2062 2065 + 2058 2060 2062 2063 2058 2060 2062 2064 + 2058 2060 2080 2082 2058 2060 2080 2081 + 2059 2058 2060 2062 2059 2058 2060 2080 + 2059 2058 2060 2061 2060 2080 2082 2083 + 2060 2080 2082 2084 2060 2062 2065 2071 + 2060 2062 2065 2066 2061 2060 2062 2065 + 2061 2060 2062 2063 2061 2060 2062 2064 + 2061 2060 2080 2082 2061 2060 2080 2081 + 2062 2065 2071 2072 2062 2065 2071 2070 + 2062 2065 2066 2068 2062 2065 2066 2067 + 2062 2060 2080 2082 2062 2060 2080 2081 + 2063 2062 2060 2080 2063 2062 2065 2071 + 2063 2062 2065 2066 2064 2062 2060 2080 + 2064 2062 2065 2071 2064 2062 2065 2066 + 2065 2071 2072 2073 2065 2071 2072 2074 + 2065 2071 2070 2076 2065 2071 2070 2068 + 2065 2066 2068 2070 2065 2066 2068 2069 + 2065 2062 2060 2080 2066 2068 2070 2076 + 2066 2068 2070 2071 2066 2065 2071 2072 + 2066 2065 2071 2070 2067 2066 2068 2070 + 2067 2066 2068 2069 2067 2066 2065 2071 + 2068 2070 2076 2077 2068 2070 2076 2078 + 2068 2070 2071 2072 2068 2066 2065 2071 + 2069 2068 2070 2076 2069 2068 2070 2071 + 2070 2076 2078 2074 2070 2076 2078 2079 + 2070 2071 2072 2073 2070 2071 2072 2074 + 2071 2072 2074 2078 2071 2072 2074 2075 + 2071 2070 2076 2077 2071 2070 2076 2078 + 2072 2074 2078 2079 2072 2074 2078 2076 + 2072 2071 2070 2076 2073 2072 2074 2078 + 2073 2072 2074 2075 2074 2078 2076 2077 + 2075 2074 2078 2079 2075 2074 2078 2076 + 2077 2076 2078 2079 2080 2082 2084 2086 + 2080 2082 2084 2095 2080 2082 2084 2085 + 2081 2080 2082 2083 2081 2080 2082 2084 + 2082 2084 2086 2089 2082 2084 2086 2087 + 2082 2084 2086 2088 2082 2084 2095 2097 + 2082 2084 2095 2096 2083 2082 2084 2086 + 2083 2082 2084 2095 2083 2082 2084 2085 + 2084 2095 2097 2098 2084 2095 2097 2099 + 2084 2086 2089 2092 2084 2086 2089 2090 + 2084 2086 2089 2091 2085 2084 2086 2089 + 2085 2084 2086 2087 2085 2084 2086 2088 + 2085 2084 2095 2097 2085 2084 2095 2096 + 2086 2089 2092 2094 2086 2089 2092 2093 + 2086 2084 2095 2097 2086 2084 2095 2096 + 2087 2086 2084 2095 2087 2086 2089 2092 + 2087 2086 2089 2090 2087 2086 2089 2091 + 2088 2086 2084 2095 2088 2086 2089 2092 + 2088 2086 2089 2090 2088 2086 2089 2091 + 2089 2086 2084 2095 2090 2089 2092 2094 + 2090 2089 2092 2093 2091 2089 2092 2094 + 2091 2089 2092 2093 2095 2097 2099 2101 + 2095 2097 2099 2106 2095 2097 2099 2100 + 2096 2095 2097 2098 2096 2095 2097 2099 + 2097 2099 2101 2104 2097 2099 2101 2102 + 2097 2099 2101 2103 2097 2099 2106 2108 + 2097 2099 2106 2107 2098 2097 2099 2101 + 2098 2097 2099 2106 2098 2097 2099 2100 + 2099 2106 2108 2109 2099 2106 2108 2110 + 2099 2101 2104 2105 2100 2099 2101 2104 + 2100 2099 2101 2102 2100 2099 2101 2103 + 2100 2099 2106 2108 2100 2099 2106 2107 + 2101 2099 2106 2108 2101 2099 2106 2107 + 2102 2101 2099 2106 2102 2101 2104 2105 + 2103 2101 2099 2106 2103 2101 2104 2105 + 2104 2101 2099 2106 2106 2108 2110 2112 + 2106 2108 2110 2122 2106 2108 2110 2111 + 2107 2106 2108 2109 2107 2106 2108 2110 + 2108 2110 2112 2114 2108 2110 2112 2118 + 2108 2110 2112 2113 2108 2110 2122 2124 + 2108 2110 2122 2123 2109 2108 2110 2112 + 2109 2108 2110 2122 2109 2108 2110 2111 + 2110 2122 2124 2125 2110 2122 2124 2126 + 2110 2112 2114 2115 2110 2112 2114 2116 + 2110 2112 2114 2117 2110 2112 2118 2119 + 2110 2112 2118 2120 2110 2112 2118 2121 + 2111 2110 2112 2114 2111 2110 2112 2118 + 2111 2110 2112 2113 2111 2110 2122 2124 + 2111 2110 2122 2123 2112 2110 2122 2124 + 2112 2110 2122 2123 2113 2112 2110 2122 + 2113 2112 2114 2115 2113 2112 2114 2116 + 2113 2112 2114 2117 2113 2112 2118 2119 + 2113 2112 2118 2120 2113 2112 2118 2121 + 2114 2112 2110 2122 2114 2112 2118 2119 + 2114 2112 2118 2120 2114 2112 2118 2121 + 2115 2114 2112 2118 2116 2114 2112 2118 + 2117 2114 2112 2118 2118 2112 2110 2122 + 2122 2124 2126 2128 2122 2124 2126 2142 + 2122 2124 2126 2127 2123 2122 2124 2125 + 2123 2122 2124 2126 2124 2126 2128 2131 + 2124 2126 2128 2129 2124 2126 2128 2130 + 2124 2126 2142 2144 2124 2126 2142 2143 + 2125 2124 2126 2128 2125 2124 2126 2142 + 2125 2124 2126 2127 2126 2142 2144 2145 + 2126 2142 2144 2146 2126 2128 2131 2138 + 2126 2128 2131 2132 2127 2126 2128 2131 + 2127 2126 2128 2129 2127 2126 2128 2130 + 2127 2126 2142 2144 2127 2126 2142 2143 + 2128 2131 2138 2139 2128 2131 2138 2140 + 2128 2131 2132 2134 2128 2131 2132 2133 + 2128 2126 2142 2144 2128 2126 2142 2143 + 2129 2128 2126 2142 2129 2128 2131 2138 + 2129 2128 2131 2132 2130 2128 2126 2142 + 2130 2128 2131 2138 2130 2128 2131 2132 + 2131 2138 2140 2136 2131 2138 2140 2141 + 2131 2132 2134 2135 2131 2132 2134 2136 + 2131 2128 2126 2142 2132 2134 2136 2140 + 2132 2134 2136 2137 2132 2131 2138 2139 + 2132 2131 2138 2140 2133 2132 2134 2135 + 2133 2132 2134 2136 2133 2132 2131 2138 + 2134 2136 2140 2138 2134 2136 2140 2141 + 2134 2132 2131 2138 2135 2134 2136 2140 + 2135 2134 2136 2137 2136 2140 2138 2139 + 2137 2136 2140 2138 2137 2136 2140 2141 + 2139 2138 2140 2141 2142 2144 2146 2148 + 2142 2144 2146 2153 2142 2144 2146 2147 + 2143 2142 2144 2145 2143 2142 2144 2146 + 2144 2146 2148 2151 2144 2146 2148 2149 + 2144 2146 2148 2150 2144 2146 2153 2155 + 2144 2146 2153 2154 2145 2144 2146 2148 + 2145 2144 2146 2153 2145 2144 2146 2147 + 2146 2153 2155 2156 2146 2153 2155 2157 + 2146 2148 2151 2152 2147 2146 2148 2151 + 2147 2146 2148 2149 2147 2146 2148 2150 + 2147 2146 2153 2155 2147 2146 2153 2154 + 2148 2146 2153 2155 2148 2146 2153 2154 + 2149 2148 2146 2153 2149 2148 2151 2152 + 2150 2148 2146 2153 2150 2148 2151 2152 + 2151 2148 2146 2153 2153 2155 2157 2159 + 2153 2155 2157 2168 2153 2155 2157 2158 + 2154 2153 2155 2156 2154 2153 2155 2157 + 2155 2157 2159 2162 2155 2157 2159 2160 + 2155 2157 2159 2161 2155 2157 2168 2170 + 2155 2157 2168 2169 2156 2155 2157 2159 + 2156 2155 2157 2168 2156 2155 2157 2158 + 2157 2168 2170 2171 2157 2168 2170 2172 + 2157 2159 2162 2165 2157 2159 2162 2163 + 2157 2159 2162 2164 2158 2157 2159 2162 + 2158 2157 2159 2160 2158 2157 2159 2161 + 2158 2157 2168 2170 2158 2157 2168 2169 + 2159 2162 2165 2167 2159 2162 2165 2166 + 2159 2157 2168 2170 2159 2157 2168 2169 + 2160 2159 2157 2168 2160 2159 2162 2165 + 2160 2159 2162 2163 2160 2159 2162 2164 + 2161 2159 2157 2168 2161 2159 2162 2165 + 2161 2159 2162 2163 2161 2159 2162 2164 + 2162 2159 2157 2168 2163 2162 2165 2167 + 2163 2162 2165 2166 2164 2162 2165 2167 + 2164 2162 2165 2166 2168 2170 2172 2174 + 2168 2170 2172 2188 2168 2170 2172 2173 + 2169 2168 2170 2171 2169 2168 2170 2172 + 2170 2172 2174 2177 2170 2172 2174 2175 + 2170 2172 2174 2176 2170 2172 2188 2190 + 2170 2172 2188 2189 2171 2170 2172 2174 + 2171 2170 2172 2188 2171 2170 2172 2173 + 2172 2188 2190 2191 2172 2188 2190 2192 + 2172 2174 2177 2184 2172 2174 2177 2178 + 2173 2172 2174 2177 2173 2172 2174 2175 + 2173 2172 2174 2176 2173 2172 2188 2190 + 2173 2172 2188 2189 2174 2177 2184 2185 + 2174 2177 2184 2186 2174 2177 2178 2180 + 2174 2177 2178 2179 2174 2172 2188 2190 + 2174 2172 2188 2189 2175 2174 2172 2188 + 2175 2174 2177 2184 2175 2174 2177 2178 + 2176 2174 2172 2188 2176 2174 2177 2184 + 2176 2174 2177 2178 2177 2184 2186 2182 + 2177 2184 2186 2187 2177 2178 2180 2181 + 2177 2178 2180 2182 2177 2174 2172 2188 + 2178 2180 2182 2186 2178 2180 2182 2183 + 2178 2177 2184 2185 2178 2177 2184 2186 + 2179 2178 2180 2181 2179 2178 2180 2182 + 2179 2178 2177 2184 2180 2182 2186 2184 + 2180 2182 2186 2187 2180 2178 2177 2184 + 2181 2180 2182 2186 2181 2180 2182 2183 + 2182 2186 2184 2185 2183 2182 2186 2184 + 2183 2182 2186 2187 2185 2184 2186 2187 + 2188 2190 2192 2194 2188 2190 2192 2205 + 2188 2190 2192 2193 2189 2188 2190 2191 + 2189 2188 2190 2192 2190 2192 2194 2199 + 2190 2192 2194 2195 2190 2192 2194 2196 + 2190 2192 2205 2207 2190 2192 2205 2206 + 2191 2190 2192 2194 2191 2190 2192 2205 + 2191 2190 2192 2193 2192 2205 2207 2208 + 2192 2205 2207 2209 2192 2194 2199 2197 + 2192 2194 2199 2203 2193 2192 2194 2199 + 2193 2192 2194 2195 2193 2192 2194 2196 + 2193 2192 2205 2207 2193 2192 2205 2206 + 2194 2199 2197 2200 2194 2199 2197 2198 + 2194 2199 2203 2202 2194 2199 2203 2204 + 2194 2192 2205 2207 2194 2192 2205 2206 + 2195 2194 2192 2205 2195 2194 2199 2197 + 2195 2194 2199 2203 2196 2194 2192 2205 + 2196 2194 2199 2197 2196 2194 2199 2203 + 2197 2200 2202 2203 2197 2199 2203 2202 + 2197 2199 2203 2204 2198 2197 2199 2203 + 2198 2197 2200 2201 2198 2197 2200 2202 + 2199 2203 2202 2200 2199 2197 2200 2201 + 2199 2197 2200 2202 2199 2194 2192 2205 + 2200 2202 2203 2204 2200 2197 2199 2203 + 2201 2200 2202 2203 2205 2207 2209 2211 + 2205 2207 2209 2217 2205 2207 2209 2210 + 2206 2205 2207 2208 2206 2205 2207 2209 + 2207 2209 2211 2214 2207 2209 2211 2212 + 2207 2209 2211 2213 2207 2209 2217 2219 + 2207 2209 2217 2218 2208 2207 2209 2211 + 2208 2207 2209 2217 2208 2207 2209 2210 + 2209 2217 2219 2220 2209 2217 2219 2221 + 2209 2211 2214 2216 2209 2211 2214 2215 + 2210 2209 2211 2214 2210 2209 2211 2212 + 2210 2209 2211 2213 2210 2209 2217 2219 + 2210 2209 2217 2218 2211 2209 2217 2219 + 2211 2209 2217 2218 2212 2211 2209 2217 + 2212 2211 2214 2216 2212 2211 2214 2215 + 2213 2211 2209 2217 2213 2211 2214 2216 + 2213 2211 2214 2215 2214 2211 2209 2217 + 2217 2219 2221 2223 2217 2219 2221 2227 + 2217 2219 2221 2222 2218 2217 2219 2220 + 2218 2217 2219 2221 2219 2221 2223 2224 + 2219 2221 2223 2225 2219 2221 2223 2226 + 2219 2221 2227 2229 2219 2221 2227 2228 + 2220 2219 2221 2223 2220 2219 2221 2227 + 2220 2219 2221 2222 2221 2227 2229 2230 + 2221 2227 2229 2231 2222 2221 2223 2224 + 2222 2221 2223 2225 2222 2221 2223 2226 + 2222 2221 2227 2229 2222 2221 2227 2228 + 2223 2221 2227 2229 2223 2221 2227 2228 + 2224 2223 2221 2227 2225 2223 2221 2227 + 2226 2223 2221 2227 2227 2229 2231 2233 + 2227 2229 2231 2239 2227 2229 2231 2232 + 2228 2227 2229 2230 2228 2227 2229 2231 + 2229 2231 2233 2236 2229 2231 2233 2234 + 2229 2231 2233 2235 2229 2231 2239 2241 + 2229 2231 2239 2240 2230 2229 2231 2233 + 2230 2229 2231 2239 2230 2229 2231 2232 + 2231 2239 2241 2242 2231 2239 2241 2243 + 2231 2233 2236 2238 2231 2233 2236 2237 + 2232 2231 2233 2236 2232 2231 2233 2234 + 2232 2231 2233 2235 2232 2231 2239 2241 + 2232 2231 2239 2240 2233 2231 2239 2241 + 2233 2231 2239 2240 2234 2233 2231 2239 + 2234 2233 2236 2238 2234 2233 2236 2237 + 2235 2233 2231 2239 2235 2233 2236 2238 + 2235 2233 2236 2237 2236 2233 2231 2239 + 2239 2241 2243 2245 2239 2241 2243 2249 + 2239 2241 2243 2244 2240 2239 2241 2242 + 2240 2239 2241 2243 2241 2243 2245 2246 + 2241 2243 2245 2247 2241 2243 2245 2248 + 2241 2243 2249 2251 2241 2243 2249 2250 + 2242 2241 2243 2245 2242 2241 2243 2249 + 2242 2241 2243 2244 2243 2249 2251 2252 + 2243 2249 2251 2253 2244 2243 2245 2246 + 2244 2243 2245 2247 2244 2243 2245 2248 + 2244 2243 2249 2251 2244 2243 2249 2250 + 2245 2243 2249 2251 2245 2243 2249 2250 + 2246 2245 2243 2249 2247 2245 2243 2249 + 2248 2245 2243 2249 2249 2251 2253 2255 + 2249 2251 2253 2266 2249 2251 2253 2254 + 2250 2249 2251 2252 2250 2249 2251 2253 + 2251 2253 2255 2258 2251 2253 2255 2256 + 2251 2253 2255 2257 2251 2253 2266 2268 + 2251 2253 2266 2267 2252 2251 2253 2255 + 2252 2251 2253 2266 2252 2251 2253 2254 + 2253 2266 2268 2269 2253 2266 2268 2270 + 2253 2255 2258 2261 2253 2255 2258 2259 + 2253 2255 2258 2260 2254 2253 2255 2258 + 2254 2253 2255 2256 2254 2253 2255 2257 + 2254 2253 2266 2268 2254 2253 2266 2267 + 2255 2258 2261 2263 2255 2258 2261 2262 + 2255 2253 2266 2268 2255 2253 2266 2267 + 2256 2255 2253 2266 2256 2255 2258 2261 + 2256 2255 2258 2259 2256 2255 2258 2260 + 2257 2255 2253 2266 2257 2255 2258 2261 + 2257 2255 2258 2259 2257 2255 2258 2260 + 2258 2261 2263 2264 2258 2261 2263 2265 + 2258 2255 2253 2266 2259 2258 2261 2263 + 2259 2258 2261 2262 2260 2258 2261 2263 + 2260 2258 2261 2262 2262 2261 2263 2264 + 2262 2261 2263 2265 2266 2268 2270 2272 + 2266 2268 2270 2280 2266 2268 2270 2271 + 2267 2266 2268 2269 2267 2266 2268 2270 + 2268 2270 2272 2275 2268 2270 2272 2273 + 2268 2270 2272 2274 2268 2270 2280 2282 + 2268 2270 2280 2281 2269 2268 2270 2272 + 2269 2268 2270 2280 2269 2268 2270 2271 + 2270 2280 2282 2283 2270 2280 2282 2284 + 2270 2272 2275 2277 2270 2272 2275 2276 + 2271 2270 2272 2275 2271 2270 2272 2273 + 2271 2270 2272 2274 2271 2270 2280 2282 + 2271 2270 2280 2281 2272 2275 2277 2278 + 2272 2275 2277 2279 2272 2270 2280 2282 + 2272 2270 2280 2281 2273 2272 2270 2280 + 2273 2272 2275 2277 2273 2272 2275 2276 + 2274 2272 2270 2280 2274 2272 2275 2277 + 2274 2272 2275 2276 2275 2272 2270 2280 + 2276 2275 2277 2278 2276 2275 2277 2279 + 2280 2282 2284 2286 2280 2282 2284 2291 + 2280 2282 2284 2285 2281 2280 2282 2283 + 2281 2280 2282 2284 2282 2284 2286 2289 + 2282 2284 2286 2287 2282 2284 2286 2288 + 2282 2284 2291 2293 2282 2284 2291 2292 + 2283 2282 2284 2286 2283 2282 2284 2291 + 2283 2282 2284 2285 2284 2291 2293 2294 + 2284 2291 2293 2295 2284 2286 2289 2290 + 2285 2284 2286 2289 2285 2284 2286 2287 + 2285 2284 2286 2288 2285 2284 2291 2293 + 2285 2284 2291 2292 2286 2284 2291 2293 + 2286 2284 2291 2292 2287 2286 2284 2291 + 2287 2286 2289 2290 2288 2286 2284 2291 + 2288 2286 2289 2290 2289 2286 2284 2291 + 2291 2293 2295 2297 2291 2293 2295 2308 + 2291 2293 2295 2296 2292 2291 2293 2294 + 2292 2291 2293 2295 2293 2295 2297 2302 + 2293 2295 2297 2298 2293 2295 2297 2299 + 2293 2295 2308 2310 2293 2295 2308 2309 + 2294 2293 2295 2297 2294 2293 2295 2308 + 2294 2293 2295 2296 2295 2308 2310 2311 + 2295 2308 2310 2312 2295 2297 2302 2300 + 2295 2297 2302 2306 2296 2295 2297 2302 + 2296 2295 2297 2298 2296 2295 2297 2299 + 2296 2295 2308 2310 2296 2295 2308 2309 + 2297 2302 2300 2303 2297 2302 2300 2301 + 2297 2302 2306 2305 2297 2302 2306 2307 + 2297 2295 2308 2310 2297 2295 2308 2309 + 2298 2297 2295 2308 2298 2297 2302 2300 + 2298 2297 2302 2306 2299 2297 2295 2308 + 2299 2297 2302 2300 2299 2297 2302 2306 + 2300 2303 2305 2306 2300 2302 2306 2305 + 2300 2302 2306 2307 2301 2300 2302 2306 + 2301 2300 2303 2304 2301 2300 2303 2305 + 2302 2306 2305 2303 2302 2300 2303 2304 + 2302 2300 2303 2305 2302 2297 2295 2308 + 2303 2305 2306 2307 2303 2300 2302 2306 + 2304 2303 2305 2306 2308 2310 2312 2314 + 2308 2310 2312 2319 2308 2310 2312 2313 + 2309 2308 2310 2311 2309 2308 2310 2312 + 2310 2312 2314 2317 2310 2312 2314 2315 + 2310 2312 2314 2316 2310 2312 2319 2321 + 2310 2312 2319 2320 2311 2310 2312 2314 + 2311 2310 2312 2319 2311 2310 2312 2313 + 2312 2319 2321 2322 2312 2319 2321 2323 + 2312 2314 2317 2318 2313 2312 2314 2317 + 2313 2312 2314 2315 2313 2312 2314 2316 + 2313 2312 2319 2321 2313 2312 2319 2320 + 2314 2312 2319 2321 2314 2312 2319 2320 + 2315 2314 2312 2319 2315 2314 2317 2318 + 2316 2314 2312 2319 2316 2314 2317 2318 + 2317 2314 2312 2319 2319 2321 2323 2325 + 2319 2321 2323 2340 2319 2321 2323 2324 + 2320 2319 2321 2322 2320 2319 2321 2323 + 2321 2323 2325 2328 2321 2323 2325 2326 + 2321 2323 2325 2327 2321 2323 2340 2342 + 2321 2323 2340 2341 2322 2321 2323 2325 + 2322 2321 2323 2340 2322 2321 2323 2324 + 2323 2340 2342 2343 2323 2340 2342 2344 + 2323 2325 2328 2336 2323 2325 2328 2329 + 2324 2323 2325 2328 2324 2323 2325 2326 + 2324 2323 2325 2327 2324 2323 2340 2342 + 2324 2323 2340 2341 2325 2328 2336 2337 + 2325 2328 2336 2338 2325 2328 2329 2331 + 2325 2328 2329 2330 2325 2323 2340 2342 + 2325 2323 2340 2341 2326 2325 2323 2340 + 2326 2325 2328 2336 2326 2325 2328 2329 + 2327 2325 2323 2340 2327 2325 2328 2336 + 2327 2325 2328 2329 2328 2336 2338 2333 + 2328 2336 2338 2339 2328 2329 2331 2332 + 2328 2329 2331 2333 2328 2325 2323 2340 + 2329 2331 2333 2338 2329 2331 2333 2334 + 2329 2328 2336 2337 2329 2328 2336 2338 + 2330 2329 2331 2332 2330 2329 2331 2333 + 2330 2329 2328 2336 2331 2333 2338 2339 + 2331 2333 2338 2336 2331 2333 2334 2335 + 2331 2329 2328 2336 2332 2331 2333 2338 + 2332 2331 2333 2334 2333 2338 2336 2337 + 2334 2333 2338 2339 2334 2333 2338 2336 + 2335 2334 2333 2338 2337 2336 2338 2339 + 2340 2342 2344 2346 2340 2342 2344 2351 + 2340 2342 2344 2345 2341 2340 2342 2343 + 2341 2340 2342 2344 2342 2344 2346 2349 + 2342 2344 2346 2347 2342 2344 2346 2348 + 2342 2344 2351 2353 2342 2344 2351 2352 + 2343 2342 2344 2346 2343 2342 2344 2351 + 2343 2342 2344 2345 2344 2351 2353 2354 + 2344 2351 2353 2355 2344 2346 2349 2350 + 2345 2344 2346 2349 2345 2344 2346 2347 + 2345 2344 2346 2348 2345 2344 2351 2353 + 2345 2344 2351 2352 2346 2344 2351 2353 + 2346 2344 2351 2352 2347 2346 2344 2351 + 2347 2346 2349 2350 2348 2346 2344 2351 + 2348 2346 2349 2350 2349 2346 2344 2351 + 2351 2353 2355 2357 2351 2353 2355 2371 + 2351 2353 2355 2356 2352 2351 2353 2354 + 2352 2351 2353 2355 2353 2355 2357 2360 + 2353 2355 2357 2358 2353 2355 2357 2359 + 2353 2355 2371 2373 2353 2355 2371 2372 + 2354 2353 2355 2357 2354 2353 2355 2371 + 2354 2353 2355 2356 2355 2371 2373 2374 + 2355 2371 2373 2375 2355 2357 2360 2367 + 2355 2357 2360 2361 2356 2355 2357 2360 + 2356 2355 2357 2358 2356 2355 2357 2359 + 2356 2355 2371 2373 2356 2355 2371 2372 + 2357 2360 2367 2368 2357 2360 2367 2369 + 2357 2360 2361 2363 2357 2360 2361 2362 + 2357 2355 2371 2373 2357 2355 2371 2372 + 2358 2357 2355 2371 2358 2357 2360 2367 + 2358 2357 2360 2361 2359 2357 2355 2371 + 2359 2357 2360 2367 2359 2357 2360 2361 + 2360 2367 2369 2365 2360 2367 2369 2370 + 2360 2361 2363 2364 2360 2361 2363 2365 + 2360 2357 2355 2371 2361 2363 2365 2369 + 2361 2363 2365 2366 2361 2360 2367 2368 + 2361 2360 2367 2369 2362 2361 2363 2364 + 2362 2361 2363 2365 2362 2361 2360 2367 + 2363 2365 2369 2367 2363 2365 2369 2370 + 2363 2361 2360 2367 2364 2363 2365 2369 + 2364 2363 2365 2366 2365 2369 2367 2368 + 2366 2365 2369 2367 2366 2365 2369 2370 + 2368 2367 2369 2370 2371 2373 2375 2377 + 2371 2373 2375 2386 2371 2373 2375 2376 + 2372 2371 2373 2374 2372 2371 2373 2375 + 2373 2375 2377 2380 2373 2375 2377 2378 + 2373 2375 2377 2379 2373 2375 2386 2388 + 2373 2375 2386 2387 2374 2373 2375 2377 + 2374 2373 2375 2386 2374 2373 2375 2376 + 2375 2386 2388 2389 2375 2386 2388 2390 + 2375 2377 2380 2383 2375 2377 2380 2381 + 2375 2377 2380 2382 2376 2375 2377 2380 + 2376 2375 2377 2378 2376 2375 2377 2379 + 2376 2375 2386 2388 2376 2375 2386 2387 + 2377 2380 2383 2385 2377 2380 2383 2384 + 2377 2375 2386 2388 2377 2375 2386 2387 + 2378 2377 2375 2386 2378 2377 2380 2383 + 2378 2377 2380 2381 2378 2377 2380 2382 + 2379 2377 2375 2386 2379 2377 2380 2383 + 2379 2377 2380 2381 2379 2377 2380 2382 + 2380 2377 2375 2386 2381 2380 2383 2385 + 2381 2380 2383 2384 2382 2380 2383 2385 + 2382 2380 2383 2384 2386 2388 2390 2392 + 2386 2388 2390 2405 2386 2388 2390 2391 + 2387 2386 2388 2389 2387 2386 2388 2390 + 2388 2390 2392 2398 2388 2390 2392 2394 + 2388 2390 2392 2393 2388 2390 2405 2407 + 2388 2390 2405 2406 2389 2388 2390 2392 + 2389 2388 2390 2405 2389 2388 2390 2391 + 2390 2405 2407 2408 2390 2405 2407 2409 + 2390 2392 2398 2401 2390 2392 2398 2399 + 2390 2392 2398 2400 2390 2392 2394 2395 + 2390 2392 2394 2396 2390 2392 2394 2397 + 2391 2390 2392 2398 2391 2390 2392 2394 + 2391 2390 2392 2393 2391 2390 2405 2407 + 2391 2390 2405 2406 2392 2398 2401 2402 + 2392 2398 2401 2403 2392 2398 2401 2404 + 2392 2390 2405 2407 2392 2390 2405 2406 + 2393 2392 2390 2405 2393 2392 2398 2401 + 2393 2392 2398 2399 2393 2392 2398 2400 + 2393 2392 2394 2395 2393 2392 2394 2396 + 2393 2392 2394 2397 2394 2392 2390 2405 + 2394 2392 2398 2401 2394 2392 2398 2399 + 2394 2392 2398 2400 2395 2394 2392 2398 + 2396 2394 2392 2398 2397 2394 2392 2398 + 2398 2392 2390 2405 2399 2398 2401 2402 + 2399 2398 2401 2403 2399 2398 2401 2404 + 2400 2398 2401 2402 2400 2398 2401 2403 + 2400 2398 2401 2404 2405 2407 2409 2411 + 2405 2407 2409 2424 2405 2407 2409 2410 + 2406 2405 2407 2408 2406 2405 2407 2409 + 2407 2409 2411 2414 2407 2409 2411 2412 + 2407 2409 2411 2413 2407 2409 2424 2426 + 2407 2409 2424 2425 2408 2407 2409 2411 + 2408 2407 2409 2424 2408 2407 2409 2410 + 2409 2424 2426 2427 2409 2424 2426 2428 + 2409 2411 2414 2416 2409 2411 2414 2420 + 2409 2411 2414 2415 2410 2409 2411 2414 + 2410 2409 2411 2412 2410 2409 2411 2413 + 2410 2409 2424 2426 2410 2409 2424 2425 + 2411 2414 2416 2417 2411 2414 2416 2418 + 2411 2414 2416 2419 2411 2414 2420 2421 + 2411 2414 2420 2422 2411 2414 2420 2423 + 2411 2409 2424 2426 2411 2409 2424 2425 + 2412 2411 2409 2424 2412 2411 2414 2416 + 2412 2411 2414 2420 2412 2411 2414 2415 + 2413 2411 2409 2424 2413 2411 2414 2416 + 2413 2411 2414 2420 2413 2411 2414 2415 + 2414 2411 2409 2424 2415 2414 2416 2417 + 2415 2414 2416 2418 2415 2414 2416 2419 + 2415 2414 2420 2421 2415 2414 2420 2422 + 2415 2414 2420 2423 2416 2414 2420 2421 + 2416 2414 2420 2422 2416 2414 2420 2423 + 2417 2416 2414 2420 2418 2416 2414 2420 + 2419 2416 2414 2420 2424 2426 2428 2430 + 2424 2426 2428 2439 2424 2426 2428 2429 + 2425 2424 2426 2427 2425 2424 2426 2428 + 2426 2428 2430 2433 2426 2428 2430 2431 + 2426 2428 2430 2432 2426 2428 2439 2441 + 2426 2428 2439 2440 2427 2426 2428 2430 + 2427 2426 2428 2439 2427 2426 2428 2429 + 2428 2439 2441 2442 2428 2439 2441 2443 + 2428 2430 2433 2436 2428 2430 2433 2434 + 2428 2430 2433 2435 2429 2428 2430 2433 + 2429 2428 2430 2431 2429 2428 2430 2432 + 2429 2428 2439 2441 2429 2428 2439 2440 + 2430 2433 2436 2438 2430 2433 2436 2437 + 2430 2428 2439 2441 2430 2428 2439 2440 + 2431 2430 2428 2439 2431 2430 2433 2436 + 2431 2430 2433 2434 2431 2430 2433 2435 + 2432 2430 2428 2439 2432 2430 2433 2436 + 2432 2430 2433 2434 2432 2430 2433 2435 + 2433 2430 2428 2439 2434 2433 2436 2438 + 2434 2433 2436 2437 2435 2433 2436 2438 + 2435 2433 2436 2437 2439 2441 2443 2445 + 2439 2441 2443 2463 2439 2441 2443 2444 + 2440 2439 2441 2442 2440 2439 2441 2443 + 2441 2443 2445 2448 2441 2443 2445 2446 + 2441 2443 2445 2447 2441 2443 2463 2468 + 2441 2443 2463 2464 2442 2441 2443 2445 + 2442 2441 2443 2463 2442 2441 2443 2444 + 2443 2463 2468 2469 2443 2463 2468 2470 + 2443 2445 2448 2451 2443 2445 2448 2449 + 2443 2445 2448 2450 2444 2443 2445 2448 + 2444 2443 2445 2446 2444 2443 2445 2447 + 2444 2443 2463 2468 2444 2443 2463 2464 + 2445 2448 2451 2454 2445 2448 2451 2452 + 2445 2448 2451 2453 2445 2443 2463 2468 + 2445 2443 2463 2464 2446 2445 2443 2463 + 2446 2445 2448 2451 2446 2445 2448 2449 + 2446 2445 2448 2450 2447 2445 2443 2463 + 2447 2445 2448 2451 2447 2445 2448 2449 + 2447 2445 2448 2450 2448 2451 2454 2456 + 2448 2451 2454 2455 2448 2445 2443 2463 + 2449 2448 2451 2454 2449 2448 2451 2452 + 2449 2448 2451 2453 2450 2448 2451 2454 + 2450 2448 2451 2452 2450 2448 2451 2453 + 2451 2454 2456 2460 2451 2454 2456 2457 + 2452 2451 2454 2456 2452 2451 2454 2455 + 2453 2451 2454 2456 2453 2451 2454 2455 + 2454 2456 2460 2461 2454 2456 2460 2462 + 2454 2456 2457 2458 2454 2456 2457 2459 + 2455 2454 2456 2460 2455 2454 2456 2457 + 2457 2456 2460 2461 2457 2456 2460 2462 + 2458 2457 2456 2460 2459 2457 2456 2460 + 2463 2468 2470 2472 2463 2468 2470 2465 + 2463 2468 2470 2471 2464 2463 2468 2469 + 2464 2463 2468 2470 2465 2470 2472 2475 + 2465 2470 2472 2473 2465 2470 2472 2474 + 2465 2470 2468 2469 2466 2465 2470 2472 + 2466 2465 2470 2468 2466 2465 2470 2471 + 2467 2465 2470 2472 2467 2465 2470 2468 + 2467 2465 2470 2471 2468 2470 2472 2475 + 2468 2470 2472 2473 2468 2470 2472 2474 + 2469 2468 2470 2472 2469 2468 2470 2471 + 2470 2472 2475 2478 2470 2472 2475 2476 + 2470 2472 2475 2477 2471 2470 2472 2475 + 2471 2470 2472 2473 2471 2470 2472 2474 + 2472 2475 2478 2481 2472 2475 2478 2479 + 2472 2475 2478 2480 2473 2472 2475 2478 + 2473 2472 2475 2476 2473 2472 2475 2477 + 2474 2472 2475 2478 2474 2472 2475 2476 + 2474 2472 2475 2477 2475 2478 2481 2483 + 2475 2478 2481 2482 2476 2475 2478 2481 + 2476 2475 2478 2479 2476 2475 2478 2480 + 2477 2475 2478 2481 2477 2475 2478 2479 + 2477 2475 2478 2480 2478 2481 2483 2487 + 2478 2481 2483 2484 2479 2478 2481 2483 + 2479 2478 2481 2482 2480 2478 2481 2483 + 2480 2478 2481 2482 2481 2483 2487 2488 + 2481 2483 2487 2489 2481 2483 2484 2485 + 2481 2483 2484 2486 2482 2481 2483 2487 + 2482 2481 2483 2484 2484 2483 2487 2488 + 2484 2483 2487 2489 2485 2484 2483 2487 + 2486 2484 2483 2487 + + 418 !NIMPHI: impropers + 18 5 20 19 20 18 22 21 + 37 22 39 38 39 37 41 40 + 48 41 50 49 50 48 52 51 + 67 52 69 68 69 67 71 70 + 86 71 88 87 88 86 90 89 + 96 90 98 97 98 96 100 99 + 106 100 108 107 108 106 110 109 + 125 110 127 126 127 125 129 128 + 135 129 137 136 137 135 139 138 + 151 139 153 152 153 151 155 154 + 160 157 162 161 163 155 165 164 + 165 163 167 166 180 181 184 178 + 187 167 189 188 189 187 191 190 + 203 191 205 204 205 203 207 206 + 222 207 224 223 224 222 226 225 + 229 226 231 230 231 229 233 232 + 246 233 248 247 248 246 250 249 + 258 255 260 259 261 250 263 262 + 263 261 265 264 270 272 267 271 + 270 267 272 271 272 270 273 274 + 272 270 274 273 275 265 277 276 + 277 275 279 278 285 279 287 286 + 287 285 289 288 302 289 304 303 + 304 302 308 305 316 308 318 317 + 318 316 320 319 340 320 342 341 + 342 340 344 343 349 351 346 350 + 349 346 351 350 351 349 352 353 + 351 349 353 352 354 344 356 355 + 356 354 358 357 373 358 375 374 + 375 373 379 376 387 379 389 388 + 389 387 391 390 397 391 399 398 + 399 397 401 400 406 403 408 407 + 409 401 411 410 411 409 413 412 + 428 413 430 429 430 428 432 431 + 438 432 440 439 440 438 442 441 + 462 442 464 463 464 462 466 465 + 482 466 484 483 484 482 486 485 + 504 486 506 505 506 504 508 507 + 521 522 525 519 528 508 530 529 + 530 528 532 531 537 539 534 538 + 537 534 539 538 539 537 540 541 + 539 537 541 540 542 532 544 543 + 544 542 546 545 556 546 558 557 + 558 556 560 559 575 560 577 576 + 577 575 579 578 584 581 586 585 + 587 579 589 588 589 587 591 590 + 609 591 611 610 611 609 615 612 + 623 615 625 624 625 623 627 626 + 639 627 641 640 641 639 643 642 + 658 643 660 659 660 658 662 661 + 675 662 677 676 677 675 679 678 + 682 679 684 683 684 682 686 685 + 699 700 703 697 706 686 708 707 + 708 706 710 709 715 717 718 716 + 715 718 717 716 718 715 720 719 + 718 720 715 719 721 717 720 722 + 721 720 717 722 723 710 725 724 + 725 723 727 726 737 727 739 738 + 739 737 741 740 761 741 763 762 + 763 761 765 764 773 770 775 774 + 776 765 778 777 778 776 780 779 + 787 780 789 788 789 787 791 790 + 806 791 808 807 808 806 810 809 + 813 810 815 814 815 813 817 816 + 830 831 834 828 837 817 839 838 + 839 837 843 840 851 843 853 852 + 853 851 855 854 870 855 872 871 + 872 870 876 873 884 876 886 885 + 886 884 888 887 891 888 893 892 + 893 891 895 894 908 909 912 906 + 915 895 917 916 917 915 919 918 + 937 919 939 938 939 937 941 940 + 946 948 943 947 946 943 948 947 + 948 946 949 950 948 946 950 949 + 951 941 953 952 953 951 955 954 + 970 955 972 971 972 970 974 973 + 989 974 991 990 991 989 993 992 + 1008 993 1010 1009 1010 1008 1012 1011 + 1019 1012 1021 1020 1021 1019 1023 1022 + 1030 1023 1032 1031 1032 1030 1034 1033 + 1042 1044 1039 1043 1042 1039 1044 1043 + 1044 1042 1045 1046 1044 1042 1046 1045 + 1047 1034 1049 1048 1049 1047 1053 1050 + 1061 1053 1063 1062 1063 1061 1065 1064 + 1068 1065 1070 1069 1070 1068 1072 1071 + 1082 1072 1084 1083 1084 1082 1086 1085 + 1091 1088 1093 1092 1094 1086 1096 1095 + 1096 1094 1098 1097 1103 1100 1105 1104 + 1106 1098 1108 1107 1108 1106 1110 1109 + 1123 1124 1127 1121 1130 1110 1132 1131 + 1132 1130 1134 1133 1146 1134 1148 1147 + 1148 1146 1150 1149 1160 1150 1162 1161 + 1162 1160 1164 1163 1184 1164 1186 1185 + 1186 1184 1188 1187 1200 1188 1202 1201 + 1202 1200 1204 1203 1222 1204 1224 1223 + 1224 1222 1226 1225 1233 1226 1235 1234 + 1235 1233 1237 1236 1249 1237 1251 1250 + 1251 1249 1253 1252 1258 1255 1260 1259 + 1261 1253 1263 1262 1263 1261 1265 1264 + 1273 1270 1275 1274 1276 1265 1278 1277 + 1278 1276 1280 1279 1286 1280 1288 1287 + 1288 1286 1290 1289 1305 1290 1307 1306 + 1307 1305 1309 1308 1315 1309 1317 1316 + 1317 1315 1319 1318 1325 1319 1327 1326 + 1327 1325 1329 1328 1336 1329 1338 1337 + 1338 1336 1340 1339 1343 1340 1345 1344 + 1345 1343 1347 1346 1352 1349 1354 1353 + 1355 1347 1357 1356 1357 1355 1359 1358 + 1371 1359 1373 1372 1373 1371 1377 1374 + 1385 1377 1387 1386 1387 1385 1389 1388 + 1397 1394 1399 1398 1400 1389 1402 1401 + 1402 1400 1404 1403 1419 1404 1421 1420 + 1421 1419 1423 1422 1436 1423 1438 1437 + 1438 1436 1440 1439 1452 1440 1454 1453 + 1454 1452 1456 1455 1471 1456 1473 1472 + 1473 1471 1475 1474 1478 1475 1480 1479 + 1480 1478 1482 1481 1485 1482 1487 1486 + 1487 1485 1489 1488 1492 1489 1494 1493 + 1494 1492 1496 1495 1509 1510 1513 1507 + 1516 1496 1518 1517 1518 1516 1520 1519 + 1532 1520 1534 1533 1534 1532 1536 1535 + 1553 1536 1555 1554 1555 1553 1557 1556 + 1565 1562 1567 1566 1568 1557 1570 1569 + 1570 1568 1572 1571 1580 1582 1577 1581 + 1580 1577 1582 1581 1582 1580 1583 1584 + 1582 1580 1584 1583 1585 1572 1587 1586 + 1587 1585 1589 1588 1605 1589 1607 1606 + 1607 1605 1609 1608 1624 1609 1626 1625 + 1626 1624 1630 1627 1638 1630 1640 1639 + 1640 1638 1642 1641 1660 1642 1662 1661 + 1662 1660 1664 1663 1670 1664 1672 1671 + 1672 1670 1674 1673 1682 1684 1679 1683 + 1682 1679 1684 1683 1684 1682 1685 1686 + 1684 1682 1686 1685 1687 1674 1689 1688 + 1689 1687 1691 1690 1709 1691 1711 1710 + 1711 1709 1713 1712 1728 1713 1730 1729 + 1730 1728 1732 1731 1749 1732 1751 1750 + 1751 1749 1753 1752 1768 1753 1770 1769 + 1770 1768 1772 1771 1782 1772 1784 1783 + 1784 1782 1786 1785 1791 1793 1794 1792 + 1791 1794 1793 1792 1794 1791 1796 1795 + 1794 1796 1791 1795 1797 1793 1796 1798 + 1797 1796 1793 1798 1799 1786 1801 1800 + 1801 1799 1803 1802 1818 1803 1820 1819 + 1820 1818 1822 1821 1827 1824 1829 1828 + 1830 1822 1832 1831 1832 1830 1834 1833 + 1840 1834 1842 1841 1842 1840 1844 1843 + 1852 1849 1854 1853 1855 1844 1857 1856 + 1857 1855 1859 1858 1871 1859 1873 1872 + 1873 1871 1875 1874 1883 1880 1885 1884 + 1886 1875 1888 1887 1888 1886 1890 1889 + 1893 1890 1895 1894 1895 1893 1897 1896 + 1902 1899 1904 1903 1905 1897 1907 1906 + 1907 1905 1909 1908 1919 1909 1921 1920 + 1921 1919 1923 1922 1928 1930 1931 1929 + 1928 1931 1930 1929 1931 1928 1933 1932 + 1931 1933 1928 1932 1934 1930 1933 1935 + 1934 1933 1930 1935 1936 1923 1938 1937 + 1938 1936 1940 1939 1956 1940 1958 1957 + 1958 1956 1962 1959 1970 1962 1972 1971 + 1972 1970 1974 1973 1979 1976 1981 1980 + 1982 1974 1984 1983 1984 1982 1986 1985 + 2003 1986 2005 2004 2005 2003 2007 2006 + 2015 2012 2017 2016 2018 2007 2020 2019 + 2020 2018 2024 2021 2032 2024 2034 2033 + 2034 2032 2036 2035 2041 2038 2043 2042 + 2044 2036 2046 2045 2046 2044 2048 2047 + 2053 2050 2055 2054 2056 2048 2058 2057 + 2058 2056 2060 2059 2080 2060 2082 2081 + 2082 2080 2084 2083 2092 2089 2094 2093 + 2095 2084 2097 2096 2097 2095 2099 2098 + 2106 2099 2108 2107 2108 2106 2110 2109 + 2122 2110 2124 2123 2124 2122 2126 2125 + 2142 2126 2144 2143 2144 2142 2146 2145 + 2153 2146 2155 2154 2155 2153 2157 2156 + 2165 2162 2167 2166 2168 2157 2170 2169 + 2170 2168 2172 2171 2188 2172 2190 2189 + 2190 2188 2192 2191 2197 2199 2200 2198 + 2197 2200 2199 2198 2200 2197 2202 2201 + 2200 2202 2197 2201 2203 2199 2202 2204 + 2203 2202 2199 2204 2205 2192 2207 2206 + 2207 2205 2209 2208 2214 2211 2216 2215 + 2217 2209 2219 2218 2219 2217 2221 2220 + 2227 2221 2229 2228 2229 2227 2231 2230 + 2236 2233 2238 2237 2239 2231 2241 2240 + 2241 2239 2243 2242 2249 2243 2251 2250 + 2251 2249 2253 2252 2261 2263 2258 2262 + 2261 2258 2263 2262 2263 2261 2264 2265 + 2263 2261 2265 2264 2266 2253 2268 2267 + 2268 2266 2270 2269 2275 2277 2272 2276 + 2275 2272 2277 2276 2277 2275 2278 2279 + 2277 2275 2279 2278 2280 2270 2282 2281 + 2282 2280 2284 2283 2291 2284 2293 2292 + 2293 2291 2295 2294 2300 2302 2303 2301 + 2300 2303 2302 2301 2303 2300 2305 2304 + 2303 2305 2300 2304 2306 2302 2305 2307 + 2306 2305 2302 2307 2308 2295 2310 2309 + 2310 2308 2312 2311 2319 2312 2321 2320 + 2321 2319 2323 2322 2340 2323 2342 2341 + 2342 2340 2344 2343 2351 2344 2353 2352 + 2353 2351 2355 2354 2371 2355 2373 2372 + 2373 2371 2375 2374 2383 2380 2385 2384 + 2386 2375 2388 2387 2388 2386 2390 2389 + 2405 2390 2407 2406 2407 2405 2409 2408 + 2424 2409 2426 2425 2426 2424 2428 2427 + 2436 2433 2438 2437 2439 2428 2441 2440 + 2441 2439 2443 2442 2456 2457 2460 2454 + 2463 2443 2468 2464 2465 2470 2467 2466 + 2468 2463 2470 2469 2483 2484 2487 2481 + + 0 !NDON: donors + + + 0 !NACC: acceptors + + + 0 !NNB + + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 + + 1 0 !NGRP + 0 0 0 + diff --git a/wrappers/python/tests/systems/alanine-dipeptide-amoeba-forces.xml b/wrappers/python/tests/systems/alanine-dipeptide-amoeba-forces.xml new file mode 100644 index 0000000000000000000000000000000000000000..f2e436ed0c9e41d6aedc23cbe806411a4b729cb5 --- /dev/null +++ b/wrappers/python/tests/systems/alanine-dipeptide-amoeba-forces.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wrappers/python/tests/systems/par_all22_prot.inp b/wrappers/python/tests/systems/par_all22_prot.inp new file mode 100644 index 0000000000000000000000000000000000000000..2dd7069c28b0816e029601670fed61855d5cf759 --- /dev/null +++ b/wrappers/python/tests/systems/par_all22_prot.inp @@ -0,0 +1,2192 @@ +*>>>> CHARMM22 All-Hydrogen Parameter File for Proteins <<<<<<<<<< +*>>>>>>>>>>>>>>>>>>>>>>> July 1997 <<<<<<<<<<<<<<<<<<<<<<<<<<<<< +*>>>>>>> Direct comments to Alexander D. MacKerell Jr. <<<<<<<<< +*>>>>>> 410-706-7442 or email: alex,mmiris.ab.umd.edu <<<<<<<<< +* + +! references +! +!PROTEINS +! +!MacKerell, Jr., A. D.; Bashford, D.; Bellott, M.; Dunbrack Jr., R.L.; +!Evanseck, J.D.; Field, M.J.; Fischer, S.; Gao, J.; Guo, H.; Ha, S.; +!Joseph-McCarthy, D.; Kuchnir, L.; Kuczera, K.; Lau, F.T.K.; Mattos, +!C.; Michnick, S.; Ngo, T.; Nguyen, D.T.; Prodhom, B.; Reiher, III, +!W.E.; Roux, B.; Schlenkrich, M.; Smith, J.C.; Stote, R.; Straub, J.; +!Watanabe, M.; Wiorkiewicz-Kuczera, J.; Yin, D.; Karplus, M. All-atom +!empirical potential for molecular modeling and dynamics Studies of +!proteins. Journal of Physical Chemistry B, 1998, 102, 3586-3616. +! +!PHOSPHOTYROSINE +! +!Feng, M.-H., Philippopoulos, M., MacKerell, Jr., A.D. and Lim, C. +!Structural Characterization of the Phosphotyrosine Binding Region of a +!High-Affinity aSH2 Domain-Phosphopeptide Complex by Molecular Dynamics +!Simulation and Chemical Shift Calculations. Journal of the American +!Chemical Society, 1996, 118: 11265-11277. +! +!IONS (see lipid and nucleic acid topology and parameter files for +!additional ions +! +!ZINC +! +!Roland H. Stote and Martin Karplus, Zinc Binding in Proteins and +!Solution: A Simple but Accurate Nonbonded Representation, PROTEINS: +!Structure, Function, and Genetics 23:12-31 (1995) +! + +BONDS +! +!V(bond) = Kb(b - b0)**2 +! +!Kb: kcal/mole/A**2 +!b0: A +! +!atom type Kb b0 +! +C C 600.000 1.3350 ! ALLOW ARO HEM + ! Heme vinyl substituent (KK, from propene (JCS)) +CA CA 305.000 1.3750 ! ALLOW ARO + ! benzene, JES 8/25/89 +CE1 CE1 440.000 1.3400 ! + ! for butene; from propene, yin/adm jr., 12/95 +CE1 CE2 500.000 1.3420 ! + ! for propene, yin/adm jr., 12/95 +CE1 CT2 365.000 1.5020 ! + ! for butene; from propene, yin/adm jr., 12/95 +CE1 CT3 383.000 1.5040 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE2 510.000 1.3300 ! + ! for ethene, yin/adm jr., 12/95 +CP1 C 250.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 CC 250.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 CD 200.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 222.500 1.5270 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP2 222.500 1.5370 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 CP2 222.500 1.5370 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPB C 450.000 1.3800 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPA 299.800 1.4432 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB CPB 340.700 1.3464 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH1 CPH1 410.000 1.3600 ! ALLOW ARO + ! histidine, adm jr., 6/27/90 +CPM CPA 360.000 1.3716 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT CA 305.000 1.3680 ! ALLOW ARO + ! adm jr., 12/30/91, for jwk +CPT CPT 360.000 1.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CT1 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT1 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT1 CT1 222.500 1.5000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT2 CA 230.000 1.4900 ! ALLOW ALI ARO + ! phe,tyr, JES 8/25/89 +CT2 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CPB 230.000 1.4900 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPH1 229.630 1.5000 ! ALLOW ARO + ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals +CT2 CT1 222.500 1.5380 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT2 222.500 1.5300 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT3 CA 230.000 1.4900 ! ALLOW ALI ARO + ! toluene, adm jr. 3/7/92 +CT3 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT3 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 CPB 230.000 1.4900 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPH1 229.630 1.5000 ! ALLOW ARO + ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals +CT3 CS 190.000 1.5310 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +CT3 CT1 222.500 1.5380 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 222.500 1.5280 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT3 222.500 1.5300 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CY CA 350.000 1.3650 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CY CPT 350.000 1.4400 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CT2 230.000 1.5100 ! ALLOW ARO + !JWK Kb from alkane freq.. b0 from TRP crystal +FE CM 258.000 1.9000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand (KK 05/13/91) +FE CPM 0.000 3.3814 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +H CD 330.000 1.1100 ! ALLOW PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA C 330.000 1.1000 ! ALLOW ARO HEM + ! Heme vinyl substituent (KK, from propene (JCS)) +HA CA 340.000 1.0830 ! ALLOW ARO + ! trp, adm jr., 10/02/89 +HA CC 317.130 1.1000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +HA CP2 309.000 1.1110 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 309.000 1.1110 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CPM 367.600 1.0900 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CS 300.000 1.1110 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT1 309.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 309.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 322.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CY 330.000 1.0800 ! ALLOW ARO + ! JWK 05/14/91 new r0 from indole +HA1 CE1 360.500 1.1000 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 365.000 1.1000 ! + ! for ethene, yin/adm jr., 12/95 +HB CP1 330.000 1.0800 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HP CA 340.000 1.0800 ! ALLOW ARO + ! phe,tyr JES 8/25/89 +HP CY 350.000 1.0800 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HR1 CPH1 375.000 1.0830 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 340.000 1.0900 ! ALLOW ARO + ! his, adm jr., 6/28/29 +HR2 CPH2 333.000 1.0700 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR3 CPH1 365.000 1.0830 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HT HT 0.000 1.5139 ! ALLOW WAT + ! FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM) +N C 260.000 1.3000 ! ALLOW PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 320.000 1.4340 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 320.000 1.4550 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 C 463.000 1.3650 ! ALLOW PEP POL ARO + ! 403.0->463.0, 1.305->1.365 guanidinium (KK) +NC2 CT2 261.000 1.4900 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT3 261.000 1.4900 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +NC2 HC 455.000 1.0000 ! ALLOW POL + ! 405.0->455.0 GUANIDINIUM (KK) +NH1 C 370.000 1.3450 ! ALLOW PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 CT2 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 CT3 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 H 440.000 0.9970 ! ALLOW PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 HC 405.000 0.9800 ! ALLOW PEP POL ARO + ! (DS) +NH2 CC 430.000 1.3600 ! ALLOW PEP POL ARO + ! adm jr. 4/10/91, acetamide +NH2 CT2 240.000 1.4550 + ! from NH2 CT3, neutral glycine, adm jr. +NH2 CT3 240.000 1.4550 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH2 H 480.000 1.0000 ! ALLOW POL + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 HC 460.000 1.0000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH3 CT1 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT2 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT3 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 HC 403.000 1.0400 ! ALLOW POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NP CP1 320.000 1.4850 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 320.000 1.5020 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP HC 460.000 1.0060 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NPH CPA 377.200 1.3757 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH FE 270.200 1.9580 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 400.000 1.3800 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 CPH2 400.000 1.3600 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 H 466.000 1.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 400.000 1.3800 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH2 400.000 1.3200 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 FE 65.000 2.2000 ! ALLOW HEM + ! Heme (6-liganded): His ligand (KK 05/13/91) +NR3 CPH1 380.000 1.3700 ! ALLOW ARO + ! his, adm jr., 6/28/90 +NR3 CPH2 380.000 1.3200 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 H 453.000 1.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA 270.000 1.3700 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CPT 270.000 1.3750 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY H 465.000 0.9760 ! ALLOW ARO + ! indole JWK 08/28/89 +O C 620.000 1.2300 ! ALLOW PEP POL ARO + ! Peptide geometry, condensed phase (LK) +O CC 650.000 1.2300 ! ALLOW PEP POL ARO + ! adm jr. 4/10/91, acetamide +OB CC 750.000 1.2200 ! ALLOW PEP POL ARO + ! adm jr., 10/17/90, acetic acid vibrations and geom. +OB CD 750.000 1.2200 ! ALLOW PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OC CA 525.000 1.2600 ! ALLOW PEP POL ARO ION + ! adm jr. 8/27/91, phenoxide +OC CC 525.000 1.2600 ! ALLOW PEP POL ARO ION + ! adm jr. 7/23/91, acetic acid +OC CT2 450.000 1.3300 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT3 450.000 1.3300 ! ALLOW ALC + ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OH1 CA 334.300 1.4110 ! ALLOW ARO ALC + ! MeOH, EMB 10/10/89, +OH1 CD 230.000 1.4000 ! ALLOW PEP POL ARO ALC + ! adm jr. 5/02/91, acetic acid pure solvent +OH1 CT1 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 CT2 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 CT3 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 H 545.000 0.9600 ! ALLOW ALC ARO + ! EMB 11/21/89 methanol vib fit +OM CM 1115.000 1.1280 ! ALLOW HEM + ! Heme (6-liganded): CO ligand (KK 05/13/91) +OM FE 250.000 1.8000 ! ALLOW HEM + ! Heme (6-liganded): O2 ligand (KK 05/13/91) +OM OM 600.000 1.2300 ! ALLOW HEM + ! Heme (6-liganded): O2 ligand (KK 05/13/91) +OS CD 150.000 1.3340 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +OS CT3 340.000 1.4300 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OT HT 450.000 0.9572 ! ALLOW WAT + ! FROM TIPS3P GEOM +S CT2 198.000 1.8180 ! ALLOW ALI SUL ION + ! fitted to C-S s 9/26/92 (FL) +S CT3 240.000 1.8160 ! ALLOW ALI SUL ION + ! fitted to C-S s 9/26/92 (FL) +S HS 275.000 1.3250 ! ALLOW SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +SM CT2 214.000 1.8160 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SM CT3 214.000 1.8160 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SM SM 173.000 2.0290 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SS CS 205.000 1.8360 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 + +ANGLES +! +!V(angle) = Ktheta(Theta - Theta0)**2 +! +!V(Urey-Bradley) = Kub(S - S0)**2 +! +!Ktheta: kcal/mole/rad**2 +!Theta0: degrees +!Kub: kcal/mole/A**2 (Urey-Bradley) +!S0: A +! +!atom types Ktheta Theta0 Kub S0 +! +CA CA CA 40.000 120.00 35.00 2.41620 ! ALLOW ARO + ! JES 8/25/89 +CE1 CE1 CT3 48.00 123.50 ! + ! for 2-butene, yin/adm jr., 12/95 +CE1 CT2 CT3 32.00 112.20 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +CE2 CE1 CT2 48.00 126.00 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +CE2 CE1 CT3 47.00 125.20 ! + ! for propene, yin/adm jr., 12/95 +CP1 N C 60.000 117.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 C 52.000 112.3000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 CC 52.000 112.3000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 CD 50.000 112.3000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP2 CP1 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 CP2 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C 60.000 117.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 100.000 114.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 100.000 111.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPA CPB C 70.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPA CPM CPA 94.200 125.1200 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPA NPH CPA 139.300 103.9000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB C C 70.000 121.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPB C 70.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPB CPA 30.800 106.5100 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH2 NR1 CPH1 130.000 107.5000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CPH2 NR2 CPH1 130.000 104.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CPH2 NR3 CPH1 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPM CPA CPB 61.600 124.0700 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT CA CA 60.000 118.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT CPT CA 60.000 122.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT CY CA 120.000 107.40 25.00 2.26100 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT NY CA 110.000 108.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CT1 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT1 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CT1 CT1 53.350 111.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT1 CT2 CA 51.800 107.5000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +CT1 CT2 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CT2 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT1 CT2 CPH1 58.350 113.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted +CT1 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT1 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT2 CA CA 45.800 122.3000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +CT2 CPB CPA 65.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPB CPB 65.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPH1 CPH1 45.800 130.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS +CT2 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT2 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CT1 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CT1 CT1 53.350 111.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT2 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! from CT2 CT1 C, for lactams, adm jr. +CT2 CT2 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CT2 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CT2 CPB 70.000 113.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT2 CT2 CT2 58.350 113.60 11.16 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT3 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT2 CY CA 45.800 129.4000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CT2 CY CPT 45.800 124.0000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CT2 NC2 C 62.300 120.0000 ! ALLOW ALI POL PEP ARO + ! 107.5->120.0 to make planar Arg (KK) +CT2 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT2 OS CD 40.000 109.60 30.00 2.26510 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 CA CA 45.800 122.3000 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +CT3 CPB CPA 65.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPB CPB 65.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPH1 CPH1 45.800 130.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS +CT3 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT3 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/09/92, for ALA cter +CT3 CT1 CT1 53.350 108.50 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT1 CT2 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT1 CT3 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 CA 51.800 107.5000 ! ALLOW ALI ARO + ! ethylbenzene, adm jr., 3/7/92 +CT3 CT2 CPH1 58.350 113.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted +CT3 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT3 CT2 CT2 58.000 115.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 CT3 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 NC2 C 62.300 120.0000 ! ALLOW ALI POL PEP ARO + ! methylguanidinium, adm jr., 3/26/92 +CT3 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT3 OS CD 40.000 109.60 30.00 2.26510 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 S CT2 34.000 95.0000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CY CPT CA 160.000 130.6000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CPT CPT 110.000 107.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CT2 CT1 58.350 114.0000 ! ALLOW ARO + ! from TRP crystal, JWK +CY CT2 CT3 58.350 114.0000 ! ALLOW ARO + ! from TRP crystal, JWK +FE NPH CPA 96.150 128.0500 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +FE NR2 CPH1 30.000 133.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +FE NR2 CPH2 30.000 123.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +H NH1 C 34.000 123.0000 ! ALLOW PEP POL ARO + ! NMA Vib Modes (LK) +H NH1 CT1 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH1 CT2 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH1 CT3 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH2 CC 50.000 120.0000 ! ALLOW POL PEP ARO + ! his, adm jr. 8/13/90 acetamide geometry and vibrations +H NH2 H 23.000 120.0000 ! ALLOW POL + ! adm jr. 8/13/90 acetamide geometry and vibrations +H NR1 CPH1 30.000 125.50 20.00 2.15000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR1 CPH2 30.000 127.00 20.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH1 25.000 126.00 15.00 2.13000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH2 25.000 126.00 15.00 2.09000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NY CA 28.000 126.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT 28.000 126.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H OH1 CA 65.000 108.0000 ! ALLOW ALC ARO + ! JES 8/25/89 phenol +H OH1 CD 55.000 115.0000 ! ALLOW ALC ARO PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H OH1 CT1 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +H OH1 CT2 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +H OH1 CT3 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +HA C C 50.000 120.5000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK from propene (JCS)) +HA C CPB 50.000 120.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA C HA 50.000 118.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK from propene (JCS)) +HA CA CA 29.000 120.00 25.00 2.15250 ! ALLOW ARO + ! trp, adm jr., 10/02/89 +HA CA CPT 41.000 122.0000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +HA CA CY 32.000 125.00 25.00 2.17300 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA CP2 CP1 33.430 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 CP2 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 CP3 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 CP2 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CPM CPA 12.700 117.4400 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CPM FE 0.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +HA CS CT3 34.600 110.10 22.53 2.17900 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CS HA 35.500 108.40 14.00 1.77500 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT1 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT1 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT1 CT1 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 CT2 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 CT3 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 HA 35.500 109.00 5.40 1.80200 ! TEST for test cpd + ! based on HA CT2 HA +HA CT2 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT2 CA 49.300 107.5000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +HA CT2 CC 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HA CT2 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT2 CE1 45.00 111.50 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +HA CT2 CPB 50.000 109.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA CT2 CPH1 33.430 109.5000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED +HA CT2 CT1 33.430 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +HA CT2 CT2 26.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 CT3 34.600 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 CY 33.430 109.5000 ! ALLOW ARO + ! ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA +HA CT2 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT3 CA 49.300 107.5000 ! ALLOW ALI ARO + ! toluene, adm jr. 3/7/92 +HA CT3 CC 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HA CT3 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT3 CE1 42.00 111.50 ! + ! for 2-butene, yin/adm jr., 12/95 +HA CT3 CPB 50.000 109.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA CT3 CPH1 33.430 109.5000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED +HA CT3 CS 34.600 110.10 22.53 2.17900 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT3 CT1 33.430 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +HA CT3 CT2 34.600 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 CT3 37.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 HA 35.500 108.40 5.40 1.80200 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CY CA 20.000 126.40 25.00 2.18600 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA CY CPT 32.000 126.40 25.00 2.25500 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA1 CE1 CE1 52.00 119.50 ! + ! for 2-butene, yin/adm jr., 12/95 +HA1 CE1 CE2 42.00 118.00 ! + ! for propene, yin/adm jr., 12/95 +HA1 CE1 CT2 40.00 116.00 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +HA1 CE1 CT3 22.00 117.00 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 CE1 45.00 120.50 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 CE2 55.50 120.50 ! + ! for ethene, yin/adm jr., 12/95 +HA2 CE2 HA2 19.00 119.00 ! + ! for propene, yin/adm jr., 12/95 +HB CP1 C 50.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CC 50.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CD 50.000 112.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CP2 35.000 118.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CC 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HB CT1 CD 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +HB CT1 CT1 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CT2 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CT3 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 CC 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HB CT2 CD 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +HB CT2 HB 36.000 115.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HC NC2 C 49.000 120.0000 ! ALLOW POL PEP ARO + ! 35.3->49.0 GUANIDINIUM (KK) +HC NC2 CT2 40.400 120.0000 ! ALLOW POL ALI + ! 107.5->120.0 to make planar Arg (KK) +HC NC2 CT3 40.400 120.0000 ! ALLOW POL ALI + ! methylguanidinium, adm jr., 3/26/92 +HC NC2 HC 25.000 120.0000 ! ALLOW POL + ! 40.0->25.0 GUANIDINIUM (KK) +HC NH2 CT2 50.000 111.0000 ! ALLOW POL + ! from HC NH2 CT3, neutral glycine, adm jr. +HC NH2 CT3 50.000 111.0000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +HC NH2 HC 39.000 106.5000 ! ALLOW POL + ! 40.0->25.0 GUANIDINIUM (KK) +HC NH3 CT1 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 CT2 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 CT3 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 HC 44.000 109.5000 ! ALLOW POL + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NP CP1 33.000 109.50 4.00 2.05600 ! ALLOW POL ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 33.000 109.50 4.00 2.05600 ! ALLOW POL ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP HC 51.000 107.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HP CA CA 30.000 120.00 22.00 2.15250 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CPT 30.000 122.00 22.00 2.14600 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA CY 32.000 125.00 25.00 2.17300 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HP CY CA 32.000 126.40 25.00 2.18600 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CY CPT 32.000 126.40 25.00 2.25500 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HR1 CPH1 CPH1 22.000 130.00 15.00 2.21500 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR3 CPH1 CPH1 25.000 130.00 20.00 2.20000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS S CT2 38.800 95.0000 ! ALLOW SUL ION ALI + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT3 43.000 95.0000 ! ALLOW SUL ION ALI + ! methanethiol pure solvent, adm jr., 6/22/92 +HT OT HT 55.000 104.5200 ! ALLOW WAT + ! TIP3P GEOMETRY, ADM JR. +N C CP1 20.000 112.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT2 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT3 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 C 50.000 108.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CC 50.000 108.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CD 50.000 108.2000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CP2 70.000 110.8000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 HB 48.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 CP2 70.000 110.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 HA 48.000 108.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 C NC2 52.000 120.00 90.00 2.36420 ! ALLOW POL PEP ARO + ! changed from 60.0/120.3 for guanidinium (KK) +NC2 CT2 CT2 67.700 107.5000 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT2 HA 51.500 107.5000 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT3 HA 51.500 107.5000 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +NH1 C CP1 80.000 116.5000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CT1 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 C CT2 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 C CT3 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 CT1 C 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CC 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH1 CT1 CD 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH1 CT1 CT1 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CT2 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CT3 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 HB 48.000 108.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT2 C 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT2 CC 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/20/92, for asn,asp,gln,glu and cters +NH1 CT2 CD 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH1 CT2 CT2 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! from NH1 CT1 CT2, for lactams, adm jr. +NH1 CT2 HA 51.500 109.5000 ! ALLOW ALI PEP POL ARO + ! from NH1 CT3 HA, for lactams, adm jr. +NH1 CT2 HB 48.000 108.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT3 HA 51.500 109.5000 ! ALLOW ALI PEP POL ARO + ! NMA crystal (JCS) +NH2 CC CP1 80.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CT1 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC CT2 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC CT3 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC HA 44.000 111.00 50.00 1.98000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +NH2 CT2 HB 38.000 109.50 50.00 2.14000 + !from NH2 CT3 HA, neutral glycine, adm jr. +NH2 CT2 CD 52.000 108.0000 + !from CT2 CT2 CD, neutral glycine, adm jr. +NH2 CT3 HA 38.000 109.50 50.00 2.14000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH3 CT1 C 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CC 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH3 CT1 CT1 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CT2 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CT3 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 HB 51.500 107.5000 ! ALLOW ALI POL PEP + ! new aliphatics, adm jr., 2/3/92 +NH3 CT2 C 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! alanine (JCS) +NH3 CT2 CC 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH3 CT2 CD 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH3 CT2 CT2 67.700 110.0000 ! ALLOW ALI POL + ! alanine (JCS) +NH3 CT2 HA 45.000 107.50 35.00 2.10100 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT2 HB 51.500 107.5000 ! ALLOW ALI POL PEP + ! for use on NTER -- from NH3 CT2HA (JCS) -- (LK) +NH3 CT3 HA 45.000 107.50 35.00 2.10100 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NP CP1 C 50.000 106.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CC 50.000 106.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CD 50.000 106.0000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 HB 51.500 107.5000 ! ALLOW ALI POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 HA 51.500 109.1500 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NPH CPA CPB 122.000 111.5400 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPM 88.000 124.3900 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH FE CM 50.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NPH FE CPM 0.000 45.0000 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +NPH FE NPH 14.390 90.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 CPH1 130.000 106.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 CPH1 CT2 45.800 124.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR1 CPH1 CT3 45.800 124.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR1 CPH1 HR3 25.000 124.00 20.00 2.14000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR1 CPH2 HR1 25.000 122.50 20.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 CPH1 CPH1 130.000 110.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CT2 45.800 120.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR2 CPH1 HR3 25.000 120.00 20.00 2.14000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR2 CPH2 HR1 25.000 125.00 20.00 2.12000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 CPH2 NR1 130.000 112.5000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 FE CM 50.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NR2 FE NPH 50.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NR3 CPH1 CPH1 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH1 CT2 45.800 122.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR3 CPH1 HR1 22.000 122.00 15.00 2.18000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 HR2 32.000 126.00 25.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 NR3 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NY CA CY 120.000 110.00 25.00 2.24000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CA HA 32.000 125.00 25.00 2.17700 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +NY CA HP 32.000 125.00 25.00 2.17700 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +NY CPT CA 160.000 130.6000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CPT CPT 110.000 107.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +O C CP1 80.000 118.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CT1 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C CT3 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C H 50.000 121.7000 ! ALLOW PEP POL ARO + ! acetaldehyde (JCS) +O C N 80.000 122.5000 ! ALLOW PRO PEP POL ARO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C NH1 80.000 122.5000 ! ALLOW PEP POL ARO + ! NMA Vib Modes (LK) +O CC CP1 80.000 118.0000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CT1 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC CT2 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC CT3 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC HA 44.000 122.0000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +O CC NH2 75.000 122.50 50.00 2.37000 ! ALLOW POL PEP ARO + ! adm jr. 4/10/91, acetamide update +OB CD CP1 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OB CD CT1 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OB CD CT2 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OB CD CT3 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OC CA CA 40.000 120.0000 ! ALLOW POL ARO + ! adm jr. 8/27/91, phenoxide +OC CC CP1 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CT1 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC CT2 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC CT3 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC OC 100.000 124.00 70.00 2.22500 ! ALLOW POL ION PEP ARO + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CT2 CT3 65.000 122.0000 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT2 HA 65.000 118.3000 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT3 HA 65.000 118.3000 ! ALLOW ALC + ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OH1 CA CA 45.200 120.0000 ! ALLOW ARO ALC + ! PARALLH19 WITH [122.3] (JES) +OH1 CD CT2 55.000 110.5000 ! ALLOW ALI PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CD CT3 55.000 110.5000 ! ALLOW ALI PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CD OB 50.000 123.00 210.00 2.26200 ! ALLOW PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CT1 CT1 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT1 CT3 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT1 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT1 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT2 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT3 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT3 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OM CM FE 35.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OM FE NPH 5.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OM OM FE 0.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OS CD CP1 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OS CD CT1 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD CT2 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD CT3 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD OB 90.000 125.90 160.00 2.25760 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OS CT2 HA 60.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for PRES CT1 from methyl acetate +OS CT3 HA 60.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for PRES CT1 from methyl acetate +S CT2 CT1 58.000 112.5000 ! ALLOW ALI SUL ION + ! as in expt.MeEtS & DALC crystal, 5/15/92 +S CT2 CT2 58.000 114.5000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +S CT2 CT3 58.000 114.5000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +S CT2 HA 46.100 111.3000 ! ALLOW ALI SUL ION + ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90 +S CT3 HA 46.100 111.3000 ! ALLOW ALI SUL ION + ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90 +SM CT2 CT1 58.000 112.5000 ! ALLOW ALI SUL ION + ! as in expt.MeEtS & DALC crystal, 5/15/92 +SM CT2 HA 38.000 111.0000 ! ALLOW ALI SUL ION + ! new S-S atom type 8/24/90 +SM CT3 HA 38.000 111.0000 ! ALLOW ALI SUL ION + ! new S-S atom type 8/24/90 +SM SM CT2 72.500 103.3000 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SM SM CT3 72.500 103.3000 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SS CS CT3 55.000 118.0000 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +SS CS HA 40.000 112.3000 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 + +DIHEDRALS +! +!V(dihedral) = Kchi(1 + cos(n(chi) - delta)) +! +!Kchi: kcal/mole +!n: multiplicity +!delta: degrees +! +!atom types Kchi n delta +! +C CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +C CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +C N CP1 C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CA CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 +CA CPT CPT CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CA CT2 CT1 C 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +CA CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +CA NY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CC CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CC CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +CC CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CC CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c +CD CP1 N C 0.0000 1 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CD CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CD CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c +CE1 CE1 CT3 HA 0.0300 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT2 CT3 0.5000 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT2 HA 0.1200 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT3 HA 0.0500 3 180.00 ! + ! for propene, yin/adm jr., 12/95 +CP1 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 N C 0.0000 3 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 N CP1 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 NP CP1 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 C 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 CC 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 CP2 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 C 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CC 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CD 0.0800 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPH2 NR1 CPH1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPH2 NR2 CPH1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPH2 NR3 CPH1 CPH1 12.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPT CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT CY CA 4.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT NY CA 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CT1 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT1 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT1 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT1 CT2 CA CA 0.2300 2 180.00 ! ALLOW ARO ALI + ! ethylbenzene ethyl rotation, adm jr. 3/7/92 +CT1 CT2 CPH1 CPH1 0.2000 1 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CPH1 CPH1 0.2700 2 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CY CA 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT1 CT2 CY CPT 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT1 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 C NH1 CT2 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 C NH1 CT3 1.6000 1 0.00 ! ALLOW PEP + ! from CT2 C NH1 CT2, adm jr. 10/21/96 +CT2 C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! from CT2 C NH1 CT2, adm jr. 10/21/96 +CT2 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 toluene and ethylbenzene +CT2 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2 +CT2 CPH1 NR2 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2 +CT2 CPH1 NR3 CPH2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CT2 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT2 CT2 CPH1 CPH1 0.4000 1 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89 +CT2 CT2 CT2 CT2 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT2 CT2 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! from CT2 CT1 NH1 C, for lactams, adm jr. +CT2 CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK +CT2 CY CPT CPT 3.0000 2 180.00 ! ALLOW ARO + !JWK +CT2 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 NH1 C CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 SM SM CT2 1.0000 1 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT2 SM SM CT2 4.1000 2 0.00 ! ALLOW ALI SUL ION + ! mp 6-311G** dimethyldisulfide, 3/26/92 (FL) +CT2 SM SM CT2 0.9000 3 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT3 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 C NH1 CT2 1.6000 1 0.00 ! ALLOW PEP + ! for acetylated GLY N-terminus, adm jr. +CT3 C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! for acetylated GLY N-terminus, adm jr. +CT3 C NH1 CT3 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! toluene, adm jr., 3/7/92 +CT3 CE1 CE2 HA2 5.2000 2 180.00 ! + ! for propene, yin/adm jr., 12/95 +CT3 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2 +CT3 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT3 CT2 CA CA 0.2300 2 180.00 ! ALLOW ARO ALI + ! ethylbenzene ethyl rotation, adm jr. 3/7/92 +CT3 CT2 CPH1 CPH1 0.2000 1 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CPH1 CPH1 0.2700 2 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CT2 CT2 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT3 CT2 CT2 CT3 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT3 CT2 CY CA 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT3 CT2 CY CPT 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT3 CT2 S CT3 0.2400 1 180.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 CT2 S CT3 0.3700 3 0.00 ! ALOW ALI SUL ION + ! DTN 8/24/90 +CT3 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 NH1 C CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 S CT2 CT2 0.2400 1 180.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 S CT2 CT2 0.3700 3 0.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 SM SM CT3 1.0000 1 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT3 SM SM CT3 4.1000 2 0.00 ! ALLOW ALI SUL ION + ! mp 6-311G** dimethyldisulfide, 3/26/92 (FL) +CT3 SM SM CT3 0.9000 3 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CY CA NY CPT 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CY CPT CA CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CY CPT CPT CA 10.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +H NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +H NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 C CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 C CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 CT1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CC 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +H NH1 CT1 CD 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H NH1 CT1 CT1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CT2 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CT3 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT2 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT2 CC 0.0000 1 0.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +H NH1 CT2 CD 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H NH1 CT2 CT2 0.0000 1 0.00 ! ALLOW PEP + ! from H NH1 CT2 CT3, for lactams, adm jr. +H NH1 CT2 CT3 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH2 CC CT1 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CT2 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CT3 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CP1 2.5000 2 180.00 ! ALLOW PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +H NR1 CPH1 CPH1 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/20/89 +H NR1 CPH1 CT2 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H +H NR1 CPH1 CT3 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H +H NR3 CPH1 CPH1 1.4000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA +H NR3 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA +H NY CA CY 0.8000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT CA 0.8000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT CPT 0.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +H OH1 CA CA 0.9900 2 180.00 ! ALLOW ARO ALC + ! phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92 +H OH1 CT1 CT1 1.3300 1 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT1 0.1800 2 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT1 0.3200 3 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 1.3300 1 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 0.1800 2 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 0.3200 3 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +HA CA CA CA 3.5000 2 180.00 ! ALLOW ARO + ! adm jr., 10/02/89 +HA CA CA CPT 3.5000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA CA HA 2.5000 2 180.00 ! ALLOW ARO + ! ADM JR., 10/02/89 +HA CA CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! TRP (JES) +HA CA CPT CY 4.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA CY CPT 1.2000 2 180.00 ! ALLOW ARO + ! JWK +HA CA CY CT2 1.2000 2 180.00 ! ALLOW ARO + ! JWK +HA CA NY CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA NY H 1.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CC NH2 H 1.4000 2 180.00 ! ALLOW PEP POL + ! adm jr. 4/10/91, acetamide update +HA CP3 N C 0.0000 3 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 N CP1 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 NP CP1 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +HA CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89 +HA CT2 CY CA 0.2500 2 180.00 ! ALLOW ARO + ! JWK +HA CT2 CY CPT 0.2500 2 180.00 ! ALLOW ARO + ! JWK +HA CT2 NH1 C 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT2 NH1 H 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT2 S CT3 0.2800 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +HA CT3 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89 +HA CT3 CS HA 0.1600 3 0.00 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT3 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +HA CT3 NH1 C 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT3 NH1 H 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT3 S CT2 0.2800 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +HA CY CA CPT 1.2000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CA HA 1.2000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA1 CE1 CE2 HA2 5.2000 2 180.00 ! + ! for propene, yin/adm jr., 12/95 +HA1 CE1 CT2 HA 0.8700 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA1 CE1 CT2 CT3 0.1200 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA1 CE1 CT3 HA 0.3400 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA2 CE2 CE1 CT2 5.2000 2 180.00 ! + ! for butene, yin/adm jr., 12/95 +HB CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 N CP3 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 NP CP3 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HC NH2 CT2 HB 0.1100 3 0.00 + !from X CT3 NH2 X, neutral glycine, adm jr. +HC NH2 CT2 CD 0.1100 3 0.00 + !from X CT3 NH2 X, neutral glycine, adm jr. +HC NP CP1 C 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CC 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CD 0.0800 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 HB 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 HA 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HP CA CA CA 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CA CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CA CA CT2 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 toluene and ethylbenzene +HP CA CA CT3 4.2000 2 180.00 ! ALLOW ARO + ! toluene, adm jr., 3/7/92 +HP CA CA HP 2.4000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +HP CA CPT CY 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CA CY CPT 2.0000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA CY CT2 1.2000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +HP CA NY CPT 2.0000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA NY H 0.4000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CA HP 1.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CPT CA 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CPT CPT 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HR1 CPH1 CPH1 CT2 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 CPH1 CT3 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 CPH1 HR1 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90, his +HR1 CPH1 NR3 CPH2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 NR3 H 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR1 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR2 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR2 CPH2 NR3 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR2 CPH2 NR3 H 0.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90, YES, 0.0 +HR3 CPH1 CPH1 CT2 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 CPH1 CT3 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 CPH1 HR3 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR2 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS S CT2 CT1 0.2400 1 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT1 0.1500 2 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT1 0.2700 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT3 0.2400 1 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 CT3 0.1500 2 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 CT3 0.2700 3 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 HA 0.2000 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT3 HA 0.2000 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +N C CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT1 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT2 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT3 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 HB 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT2 HB 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT3 HA 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +NH1 C CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CT1 CT1 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 CT2 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 CT3 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 C CT1 NH1 0.6000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH1 C CT2 CT2 0.0000 1 0.00 ! ALLOW PEP + ! from NH1 C CT1 CT2, for lactams, adm jr. +NH1 C CT2 HA 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +NH1 C CT2 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 C CT2 NH1 0.6000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH1 C CT3 HA 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +NH1 CT1 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 CT2 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +NH3 CT1 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH3 CT1 C NH1 0.6000 1 0.00 ! ALLOW PEP PRO + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH3 CT1 CC NH2 0.4000 1 0.00 ! ALLOW PEP PRO + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +NH3 CT2 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH3 CT2 C NH1 0.4000 1 0.00 ! ALLOW PEP PRO + ! adm jr. 3/24/92, for PRES GLYP +NH3 CT2 CC NH2 0.4000 1 0.00 ! ALLOW PEP PRO + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +NP CP1 C N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 C NH1 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CC NH2 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NR1 CPH1 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA +NR1 CPH1 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA +NR1 CPH1 CPH1 HR3 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR1 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH2 NR2 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA +NR2 CPH1 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA +NR2 CPH1 CPH1 HR3 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR2 CPH1 CPH1 NR1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR2 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR2 CPH2 NR1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH2 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH1 CPH1 CT2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 CT3 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 HR1 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 NR3 12.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH2 NR3 CPH1 12.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH2 NR3 H 1.4000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA CY CPT 4.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CA CY CT2 3.5000 2 180.00 ! ALLOW ARO + ! JWK +NY CA CY HA 3.5000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +NY CA CY HP 3.5000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +NY CPT CA CA 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CA HA 4.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +NY CPT CA HP 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CPT CA 10.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CPT CY 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +O C CP1 CP2 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 HB 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CT1 CT1 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 CT2 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 CT3 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT1 NH1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT1 NH3 0.0000 1 0.00 ! ALLOW PEP PRO + ! Backbone parameter set made complete RLD 8/8/90 +O C CT2 CT2 1.4000 1 0.00 ! ALLOW PEP + ! from O C CT1 CT2, for lactams, adm jr. +O C CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O C CT2 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 NH1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 NH3 0.0000 1 0.00 ! ALLOW PEP PRO + ! Backbone parameter set made complete RLD 8/8/90 +O C CT3 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 H 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O CC CP1 CP2 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 HB 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +O CC NH2 H 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +OB CD OS CT2 0.9650 1 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT2 3.8500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT3 0.9650 1 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT3 3.8500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OC CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! adm jr. 8/27/91, phenoxide +OC CA CA HP 4.2000 2 180.00 ! ALLOW ARO + ! adm jr. 8/27/91, phenoxide +OC CC CP1 CP2 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 HB 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 N 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 NP 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CT1 NH3 3.2000 2 180.00 ! ALLOW PEP PRO + ! adm jr. 4/17/94, zwitterionic glycine +OC CC CT2 NH3 3.2000 2 180.00 ! ALLOW PEP PRO + ! adm jr. 4/17/94, zwitterionic glycine +OH1 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 phenol +OH1 CA CA HP 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 phenol +S CT2 CT2 HA 0.0100 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +SM CT2 CT2 HA 0.0100 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +SM SM CT2 CT1 0.3100 3 0.00 ! ALLOW SUL ALI + ! S-S for cys-cys, dummy parameter for now ... DTN 9/04/90 +SM SM CT2 CT2 0.3100 3 0.00 ! ALLOW SUL ALI + ! S-S for cys-cys, dummy parameter for now ... DTN 9/04/90 +SM SM CT2 HA 0.1580 3 0.00 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SM SM CT3 HA 0.1580 3 0.00 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SS CS CT3 HA 0.1500 3 0.00 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +X C C X 4.0000 2 180.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X C NC2 X 2.2500 2 180.00 ! ALLOW PEP POL ARO + ! 9.0->2.25 GUANIDINIUM (KK) +X CD OH1 X 2.0500 2 180.00 ! ALLOW PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid C-Oh rotation barrier +X CD OS X 2.0500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CE1 CE1 X 5.2000 2 180.00 ! + ! for butene, yin/adm jr., 12/95 +X CE2 CE2 X 4.9000 2 180.00 ! + ! for ethene, yin/adm jr., 12/95 +X CP1 C X 0.0000 6 180.00 ! ALLOW POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP1 CC X 0.0000 6 180.00 ! ALLOW POL PEP + ! changed to 0.0 RLD 5/19/92 +X CP1 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +X CP1 CP2 X 0.1400 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP2 CP2 X 0.1600 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP3 CP2 X 0.1400 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CPA CPB X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPA CPM X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPB C X 3.0000 2 180.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPB CPB X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPB CT2 X 0.0000 6 0.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPB CT3 X 0.0000 6 0.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPT CPT X 0.0000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +X CT1 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT1 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT1 CT1 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 CT2 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 CT3 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 NH3 X 0.1000 3 0.00 ! ALLOW ALI POL + ! 0.715->0.10 METHYLAMMONIUM (KK) +X CT1 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT1 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CT2 CA X 0.0000 6 0.00 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +X CT2 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT2 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT2 CT2 X 0.1950 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT2 CT3 X 0.1600 3 0.00 ! ALLOW ALI + ! rotation barrier in Ethane (SF) +X CT2 NC2 X 0.0000 6 180.00 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +X CT2 NH3 X 0.1000 3 0.00 ! ALLOW ALI POL + ! 0.715->0.10 METHYLAMMONIUM (KK) +X CT2 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT2 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CT3 CA X 0.0000 6 0.00 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +X CT3 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT3 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT3 CT3 X 0.1550 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT3 NC2 X 0.0000 6 180.00 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +X CT3 NH2 X 0.1100 3 0.00 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +X CT3 NH3 X 0.0900 3 0.00 ! ALLOW ALI POL + ! fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92 +X CT3 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT3 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X FE CM X 0.0500 4 0.00 ! ALLOW HEM + ! Heme (6-liganded): ligands (KK 05/13/91) +X FE NPH X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +X FE OM X 0.0000 4 0.00 ! ALLOW HEM + ! Heme (6-liganded): ligands (KK 05/13/91) +X NPH CPA X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) + +IMPROPER +! +!V(improper) = Kpsi(psi - psi0)**2 +! +!Kpsi: kcal/mole/rad**2 +!psi0: degrees +!note that the second column of numbers (0) is ignored +! +!atom types Kpsi psi0 +! +CPB CPA NPH CPA 20.8000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB X X C 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 X X CPB 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 X X CPB 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA C C HA 20.0000 0 0.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK, from propene (JCS)) +HA CPA CPA CPM 29.4000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CPB C C 20.0000 0 0.0000 ! ALLOW HEM ARO + ! Heme (6-liganded): substituents (KK 05/13/91) +HA HA C C 20.0000 0 180.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK, from propene (JCS)) +HA2 HA2 CE2 CE2 3.0 0 0.00 ! + ! for ethene, yin/adm jr., 12/95 +HR1 NR1 NR2 CPH2 0.5000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +HR1 NR2 NR1 CPH2 0.5000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +HR3 CPH1 NR1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR2 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR3 CPH1 1.0000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 NR1 CPH1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 NR2 CPH1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +N C CP1 CP3 0.0000 0 0.0000 ! ALLOW PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +NC2 X X C 40.0000 0 0.0000 ! ALLOW PEP POL ARO + ! 5.75->40.0 GUANIDINIUM (KK) +NH1 X X H 20.0000 0 0.0000 ! ALLOW PEP POL ARO + ! NMA Vibrational Modes (LK) +NH2 X X H 4.0000 0 0.0000 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +NPH CPA CPA FE 137.4000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPB CPB 40.6000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPM CPA 18.3000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPM CPB CPA 32.7000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 CPH2 H 0.4500 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +NR1 CPH2 CPH1 H 0.4500 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +NR3 CPH1 CPH2 H 1.2000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 CPH1 H 1.2000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA CY CPT 100.0000 0 0.0000 ! ALLOW ARO + !adm jr., 5/15/91, indole 3-21G HE1 out-of-plane surf. +O CP1 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O CT1 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O CT2 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O CT3 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O HA NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! adm jr., 5/13/91, formamide geometry and vibrations +O N CT2 CC 120.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O NH2 CP1 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O NH2 CT1 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 CT2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 CT3 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 HA CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 5/13/91, formamide geometry and vibrations +O X X C 120.0000 0 0.0000 ! ALLOW PEP POL ARO + ! NMA Vibrational Modes (LK) +OB X X CD 100.0000 0 0.0000 ! ALLOW ALC ARO POL + ! adm jr., 10/17/90, acetic acid vibrations +OC X X CC 96.0000 0 0.0000 ! ALLOW PEP POL ARO ION + ! 90.0->96.0 acetate, single impr (KK) + +NONBONDED nbxmod 5 atom cdiel shift vatom vdistance vswitch - +cutnb 14.0 ctofnb 12.0 ctonnb 10.0 eps 1.0 e14fac 1.0 wmin 1.5 + !adm jr., 5/08/91, suggested cutoff scheme +! +!V(Lennard-Jones) = Eps,i,j[(Rmin,i,j/ri,j)**12 - 2(Rmin,i,j/ri,j)**6] +! +!epsilon: kcal/mole, Eps,i,j = sqrt(eps,i * eps,j) +!Rmin/2: A, Rmin,i,j = Rmin/2,i + Rmin/2,j +! +!atom ignored epsilon Rmin/2 ignored eps,1-4 Rmin/2,1-4 +! +C 0.000000 -0.110000 2.000000 ! ALLOW PEP POL ARO + ! NMA pure solvent, adm jr., 3/3/93 +CA 0.000000 -0.070000 1.992400 ! ALLOW ARO + ! benzene (JES) +CC 0.000000 -0.070000 2.000000 ! ALLOW PEP POL ARO + ! adm jr. 3/3/92, acetic acid heat of solvation +CD 0.000000 -0.070000 2.000000 ! ALLOW POL + ! adm jr. 3/19/92, acetate a.i. and dH of solvation +CE1 0.000000 -0.068000 2.090000 ! + ! for propene, yin/adm jr., 12/95 +CE2 0.000000 -0.064000 2.080000 ! + ! for ethene, yin/adm jr., 12/95 +CM 0.000000 -0.110000 2.100000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand carbon (KK 05/13/91) +CP1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CP2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CP3 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CPA 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH1 0.000000 -0.050000 1.800000 ! ALLOW ARO + ! adm jr., 10/23/91, imidazole solvation and sublimation +CPH2 0.000000 -0.050000 1.800000 ! ALLOW ARO + ! adm jr., 10/23/91, imidazole solvation and sublimation +CPM 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT 0.000000 -0.090000 1.800000 0.000000 -0.090000 1.900000 ! ALLOW ARO + ! benzene (JES) +CS 0.000000 -0.110000 2.200000 ! ALLOW SUL + ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92 +CT1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! isobutane pure solvent properties, adm jr, 2/3/92 +CT2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! propane pure solvent properties, adm jr, 2/3/92 +CT3 0.000000 -0.080000 2.060000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +CY 0.000000 -0.070000 1.992400 ! ALLOW ARO + ! TRP, JWK 08/29/89 +! carbon wildcards, following atom order is essential for accurate results +!C* 0.000000 -0.070000 2.000000 +!CP% 0.000000 -0.090000 1.800000 +!C%1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 +!C%2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 +!C%3 0.000000 -0.080000 2.060000 0.000000 -0.010000 1.900000 +!CPH+ 0.000000 -0.050000 1.800000 +!C 0.000000 -0.110000 2.000000 +!CA 0.000000 -0.070000 1.992400 +!CE1 0.000000 -0.068000 2.090000 +!CE2 0.000000 -0.064000 2.080000 +!CM 0.000000 -0.110000 2.100000 +!CP3 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI +!CPT 0.000000 -0.090000 1.800000 0.000000 -0.090000 1.900000 +!CS 0.000000 -0.110000 2.200000 +!CY 0.000000 -0.070000 1.992400 + +H 0.000000 -0.046000 0.224500 ! ALLOW PEP POL SUL ARO ALC + ! same as TIP3P hydrogen, adm jr., 7/20/89 +HA 0.000000 -0.022000 1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +HA1 0.000000 -0.031000 1.250000 ! + ! for propene, yin/adm jr., 12/95 +HA2 0.000000 -0.026000 1.260000 ! + ! for ethene, yin/adm jr., 12/95 +HB 0.000000 -0.022000 1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +HC 0.000000 -0.046000 0.224500 ! ALLOW POL + ! new, small polar Hydrogen, see also adm jr. JG 8/27/89 +HP 0.000000 -0.030000 1.358200 0.000000 -0.030000 1.358200 ! ALLOW ARO + ! JES 8/25/89 values from Jorgensen fit to hydration energy +HR1 0.000000 -0.046000 0.900000 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR2 0.000000 -0.046000 0.700000 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR3 0.000000 -0.007800 1.468000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS 0.000000 -0.100000 0.450000 ! ALLOW SUL + ! methanethiol pure solvent, adm jr., 6/22/92 +HT 0.000000 -0.046000 0.224500 ! ALLOW WAT + !TIP3P HYDROGEN PARAMETERS, adm jr., NBFIX obsolete +! hydrogen wildcards +!H* 0.000000 -0.046000 0.224500 +!HA 0.000000 -0.022000 1.320000 +!HA1 0.000000 -0.031000 1.250000 +!HA2 0.000000 -0.026000 1.260000 +!HB 0.000000 -0.022000 1.320000 +!HP 0.000000 -0.030000 1.358200 0.000000 -0.030000 1.358200 +!HR1 0.000000 -0.046000 0.900000 +!HR2 0.000000 -0.046000 0.700000 +!HR3 0.000000 -0.007800 1.468000 +!HS 0.000000 -0.100000 0.450000 +! +N 0.000000 -0.200000 1.850000 0.000000 -0.000100 1.850000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 0.000000 -0.200000 1.850000 ! ALLOW POL + ! JG 8/27/89; note: NH1 in ARG was changed to NC2. +NH1 0.000000 -0.200000 1.850000 0.000000 -0.200000 1.550000 ! ALLOW PEP POL ARO + ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK) +NH2 0.000000 -0.200000 1.850000 ! ALLOW POL + ! adm jr. +NH3 0.000000 -0.200000 1.850000 ! ALLOW POL + ! adm jr. +NP 0.000000 -0.200000 1.850000 ! ALLOW PRO + ! N-terminal proline; from 6-31g* +ProNH2 RLD 9/28/90 +NPH 0.000000 -0.200000 1.850000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NR2 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NR3 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NY 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! trp, JWK +! nitrogen wildcards +!N* 0.000000 -0.200000 1.850000 +!N 0.000000 -0.200000 1.850000 0.000000 -0.000100 1.850000 +!NH1 0.000000 -0.200000 1.850000 0.000000 -0.200000 1.550000 +! +O 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 ! ALLOW PEP POL + ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK) +OB 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 ! ALLOW PEP POL ARO + ! adm jr., 10/17/90, acetic acid carbonyl O +OC 0.000000 -0.120000 1.700000 ! ALLOW POL ION + ! JG 8/27/89 +OH1 0.000000 -0.152100 1.770000 ! ALLOW ALC ARO + ! adm jr. 8/14/90, MeOH nonbond and solvent (same as TIP3P) +OM 0.000000 -0.120000 1.700000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand oxygen (KK 05/13/91) +OS 0.000000 -0.152100 1.770000 ! ALLOW ALC ARO + ! adm jr. 9/17/90, avoid O* wildcard +OT 0.000000 -0.152100 1.768200 ! ALLOW WAT + !TIP3P OXYGEN PARAMETERS, adm jr., NBFIX obsolete +! oxygen wildcards +!O* 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 +!OC 0.000000 -0.120000 1.700000 +!OH1 0.000000 -0.152100 1.770000 +!OM 0.000000 -0.120000 1.700000 +!OS 0.000000 -0.152100 1.770000 +!OT 0.000000 -0.152100 1.768200 + +CAL 0.000000 -0.120000 1.710000 ! ALLOW ION + !Calcium (BP) +FE 0.010000 0.000000 0.650000 ! ALLOW HEM + ! Heme (6-liganded): Iron atom (KK 05/13/91) +S 0.000000 -0.450000 2.000000 ! ALLOW SUL ION + ! adm jr., 3/3/92, methanethiol/ethylmethylsulfide pure solvent +SM 0.000000 -0.380000 1.975000 ! ALLOW SUL ION + ! adm jr., 3/3/92, dimethyldisulphide pure solvent +SS 0.000000 -0.470000 2.200000 ! ALLOW SUL + ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92 +ZN 0.000000 -0.250000 1.090000 ! ALLOW ION + ! RHS March 18, 1990 +DUM 0.000000 -0.000000 0.000000 ! + ! dummy atom +HE 0.000000 -0.021270 1.4800 ! + ! helium, experimental pot. energy surface, adm jr., 12/95 +NE 0.000000 -0.086000 1.5300 + ! neon, semiempirical pot. energy surface, adm jr., 12/95 + +HBOND CUTHB 0.5 ! If you want to do hbond analysis (only), then use + ! READ PARAM APPEND CARD + ! to append hbond parameters from the file: par_hbond.inp + +END diff --git a/wrappers/python/tests/systems/par_all22_prot_with_mass.inp b/wrappers/python/tests/systems/par_all22_prot_with_mass.inp new file mode 100644 index 0000000000000000000000000000000000000000..cee7611764454eaeabc33edbf3144a64cad81630 --- /dev/null +++ b/wrappers/python/tests/systems/par_all22_prot_with_mass.inp @@ -0,0 +1,2289 @@ +*>>>> CHARMM22 All-Hydrogen Parameter File for Proteins <<<<<<<<<< +*>>>>>>>>>>>>>>>>>>>>>>> July 1997 <<<<<<<<<<<<<<<<<<<<<<<<<<<<< +*>>>>>>> Direct comments to Alexander D. MacKerell Jr. <<<<<<<<< +*>>>>>> 410-706-7442 or email: alex,mmiris.ab.umd.edu <<<<<<<<< +* + +! references +! +!PROTEINS +! +!MacKerell, Jr., A. D.; Bashford, D.; Bellott, M.; Dunbrack Jr., R.L.; +!Evanseck, J.D.; Field, M.J.; Fischer, S.; Gao, J.; Guo, H.; Ha, S.; +!Joseph-McCarthy, D.; Kuchnir, L.; Kuczera, K.; Lau, F.T.K.; Mattos, +!C.; Michnick, S.; Ngo, T.; Nguyen, D.T.; Prodhom, B.; Reiher, III, +!W.E.; Roux, B.; Schlenkrich, M.; Smith, J.C.; Stote, R.; Straub, J.; +!Watanabe, M.; Wiorkiewicz-Kuczera, J.; Yin, D.; Karplus, M. All-atom +!empirical potential for molecular modeling and dynamics Studies of +!proteins. Journal of Physical Chemistry B, 1998, 102, 3586-3616. +! +!PHOSPHOTYROSINE +! +!Feng, M.-H., Philippopoulos, M., MacKerell, Jr., A.D. and Lim, C. +!Structural Characterization of the Phosphotyrosine Binding Region of a +!High-Affinity aSH2 Domain-Phosphopeptide Complex by Molecular Dynamics +!Simulation and Chemical Shift Calculations. Journal of the American +!Chemical Society, 1996, 118: 11265-11277. +! +!IONS (see lipid and nucleic acid topology and parameter files for +!additional ions +! +!ZINC +! +!Roland H. Stote and Martin Karplus, Zinc Binding in Proteins and +!Solution: A Simple but Accurate Nonbonded Representation, PROTEINS: +!Structure, Function, and Genetics 23:12-31 (1995) +! + +ATOMS +MASS 1 H 1.00800 H ! polar H +MASS 2 HC 1.00800 H ! N-ter H +MASS 3 HA 1.00800 H ! nonpolar H +MASS 4 HT 1.00800 H ! TIPS3P WATER HYDROGEN +MASS 5 HP 1.00800 H ! aromatic H +MASS 6 HB 1.00800 H ! backbone H +MASS 7 HR1 1.00800 H ! his he1, (+) his HG,HD2 +MASS 8 HR2 1.00800 H ! (+) his HE1 +MASS 9 HR3 1.00800 H ! neutral his HG, HD2 +MASS 10 HS 1.00800 H ! thiol hydrogen +MASS 11 HE1 1.00800 H ! for alkene; RHC=CR +MASS 12 HE2 1.00800 H ! for alkene; H2C=CR +MASS 13 HA1 1.00800 H ! alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 14 HA2 1.00800 H ! alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 15 HA3 1.00800 H ! alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 16 HF1 1.00800 H ! Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str) +MASS 17 HF2 1.00800 H ! Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str) +MASS 20 C 12.01100 C ! carbonyl C, peptide backbone +MASS 21 CA 12.01100 C ! aromatic C +MASS 22 CT1 12.01100 C ! aliphatic sp3 C for CH +MASS 23 CT2 12.01100 C ! aliphatic sp3 C for CH2 +MASS 24 CT3 12.01100 C ! aliphatic sp3 C for CH3 +MASS 25 CPH1 12.01100 C ! his CG and CD2 carbons +MASS 26 CPH2 12.01100 C ! his CE1 carbon +MASS 27 CPT 12.01100 C ! trp C between rings +MASS 28 CY 12.01100 C ! TRP C in pyrrole ring +MASS 29 CP1 12.01100 C ! tetrahedral C (proline CA) +MASS 30 CP2 12.01100 C ! tetrahedral C (proline CB/CG) +MASS 31 CP3 12.01100 C ! tetrahedral C (proline CD) +MASS 32 CC 12.01100 C ! carbonyl C, asn,asp,gln,glu,cter,ct2 +MASS 33 CD 12.01100 C ! carbonyl C, pres aspp,glup,ct1 +MASS 34 CPA 12.01100 C ! heme alpha-C +MASS 35 CPB 12.01100 C ! heme beta-C +MASS 36 CPM 12.01100 C ! heme meso-C +MASS 37 CM 12.01100 C ! heme CO carbon +MASS 38 CS 12.01100 C ! thiolate carbon +MASS 39 CE1 12.01100 C ! for alkene; RHC=CR +MASS 40 CE2 12.01100 C ! for alkene; H2C=CR +MASS 41 CST 12.01100 C ! CO2 carbon +MASS 42 CT 12.01100 C ! aliphatic sp3 C, new LJ params, no hydrogens (see toppar_all22_prot_aliphatic_c27.str) +MASS 43 CT1x 12.01100 C ! aliphatic sp3 C for CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 44 CT2x 12.01100 C ! aliphatic sp3 C for CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 45 CT3x 12.01100 C ! aliphatic sp3 C for CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str) +MASS 46 CN 12.01100 C ! C for cyano group (see toppar_all22_prot_pyridines.str) +MASS 47 CAP 12.01100 C ! aromatic C for pyrimidines (see toppar_all22_prot_pyridines.str) +MASS 48 COA 12.01100 C ! carbonyl C for pyrimidines (see toppar_all22_prot_pyridines.str) +MASS 49 C3 12.01100 C ! cyclopropyl carbon +MASS 50 N 14.00700 N ! proline N +MASS 51 NR1 14.00700 N ! neutral his protonated ring nitrogen +MASS 52 NR2 14.00700 N ! neutral his unprotonated ring nitrogen +MASS 53 NR3 14.00700 N ! charged his ring nitrogen +MASS 54 NH1 14.00700 N ! peptide nitrogen +MASS 55 NH2 14.00700 N ! amide nitrogen +MASS 56 NH3 14.00700 N ! ammonium nitrogen +MASS 57 NC2 14.00700 N ! guanidinium nitroogen +MASS 58 NY 14.00700 N ! TRP N in pyrrole ring +MASS 59 NP 14.00700 N ! Proline ring NH2+ (N-terminal) +MASS 60 NPH 14.00700 N ! heme pyrrole N +MASS 61 NC 14.00700 N ! N for cyano group (see toppar_all22_prot_pyridines.str) +MASS 70 O 15.99900 O ! carbonyl oxygen +MASS 71 OB 15.99900 O ! carbonyl oxygen in acetic acid +MASS 72 OC 15.99900 O ! carboxylate oxygen +MASS 73 OH1 15.99900 O ! hydroxyl oxygen +MASS 74 OS 15.99940 O ! ester oxygen +MASS 75 OT 15.99940 O ! TIPS3P WATER OXYGEN +MASS 76 OM 15.99900 O ! heme CO/O2 oxygen +MASS 77 OST 15.99900 O ! CO2 oxygen +MASS 78 OCA 15.99900 O ! carbonyl O for pyrimidines (see toppar_all22_prot_pyridines.str) +MASS 81 S 32.06000 S ! sulphur +MASS 82 SM 32.06000 S ! sulfur C-S-S-C type +MASS 83 SS 32.06000 S ! thiolate sulfur +MASS 85 HE 4.00260 HE ! helium +MASS 86 NE 20.17970 NE ! neon +MASS 87 CF1 12.01100 C ! monofluoromethyl (see toppar_all22_prot_fluoro_alkanes.str) +MASS 88 CF2 12.01100 C ! difluoromethyl (see toppar_all22_prot_fluoro_alkanes.str) +MASS 89 CF3 12.01100 C ! trifluoromethyl (see toppar_all22_prot_fluoro_alkanes.str) +MASS 90 FE 55.84700 Fe ! heme iron 56 +MASS 91 CLAL 35.45300 CL ! Chlorine Atom (see toppar_all22_prot_aldehydes.str) +MASS 92 FA 18.99800 F ! aromatic flourine (see toppar_all22_prot_pyridines.str) +MASS 93 F1 18.99800 F ! Fluorine, monofluoro (see toppar_all22_prot_fluoro_alkanes.str) +MASS 94 F2 18.99800 F ! Fluorine, difluoro (see toppar_all22_prot_fluoro_alkanes.str) +MASS 95 F3 18.99800 F ! Fluorine, trifluoro (see toppar_all22_prot_fluoro_alkanes.str) +MASS 99 DUM 0.00000 H ! dummy atom +MASS 100 SOD 22.989770 NA ! Sodium Ion +MASS 101 MG 24.305000 MG ! Magnesium Ion +MASS 102 POT 39.102000 K ! Potassium Ion! check masses +MASS 103 CES 132.900000 CS ! Cesium Ion +MASS 104 CAL 40.080000 CA ! Calcium Ion +MASS 105 CLA 35.450000 CL ! Chloride Ion +MASS 106 ZN 65.370000 ZN ! zinc (II) cation +MASS 112 CC1A 12.01100 C ! alkene conjugation +MASS 113 CC1B 12.01100 C ! alkene conjugation +MASS 114 CC2 12.01100 C ! alkene conjugation +MASS 120 NS1 14.00700 N ! N for deprotonated Schiff's base +MASS 121 NS2 14.00700 N ! N for protonated Schiff's base + +BONDS +! +!V(bond) = Kb(b - b0)**2 +! +!Kb: kcal/mole/A**2 +!b0: A +! +!atom type Kb b0 +! +C C 600.000 1.3350 ! ALLOW ARO HEM + ! Heme vinyl substituent (KK, from propene (JCS)) +CA CA 305.000 1.3750 ! ALLOW ARO + ! benzene, JES 8/25/89 +CE1 CE1 440.000 1.3400 ! + ! for butene; from propene, yin/adm jr., 12/95 +CE1 CE2 500.000 1.3420 ! + ! for propene, yin/adm jr., 12/95 +CE1 CT2 365.000 1.5020 ! + ! for butene; from propene, yin/adm jr., 12/95 +CE1 CT3 383.000 1.5040 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE2 510.000 1.3300 ! + ! for ethene, yin/adm jr., 12/95 +CP1 C 250.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 CC 250.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 CD 200.000 1.4900 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 222.500 1.5270 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP2 222.500 1.5370 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 CP2 222.500 1.5370 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPB C 450.000 1.3800 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPA 299.800 1.4432 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB CPB 340.700 1.3464 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH1 CPH1 410.000 1.3600 ! ALLOW ARO + ! histidine, adm jr., 6/27/90 +CPM CPA 360.000 1.3716 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT CA 305.000 1.3680 ! ALLOW ARO + ! adm jr., 12/30/91, for jwk +CPT CPT 360.000 1.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CT1 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT1 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT1 CT1 222.500 1.5000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT2 CA 230.000 1.4900 ! ALLOW ALI ARO + ! phe,tyr, JES 8/25/89 +CT2 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CPB 230.000 1.4900 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPH1 229.630 1.5000 ! ALLOW ARO + ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals +CT2 CT1 222.500 1.5380 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT2 222.500 1.5300 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 C 250.000 1.4900 ! ALLOW ALI PEP POL ARO + ! Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91) +CT3 CA 230.000 1.4900 ! ALLOW ALI ARO + ! toluene, adm jr. 3/7/92 +CT3 CC 200.000 1.5220 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT3 CD 200.000 1.5220 ! ALLOW POL + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 CPB 230.000 1.4900 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPH1 229.630 1.5000 ! ALLOW ARO + ! his, adm jr., 7/22/89, FC from CT2CT, BL from crystals +CT3 CS 190.000 1.5310 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +CT3 CT1 222.500 1.5380 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 222.500 1.5280 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT3 222.500 1.5300 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CY CA 350.000 1.3650 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CY CPT 350.000 1.4400 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CT2 230.000 1.5100 ! ALLOW ARO + !JWK Kb from alkane freq.. b0 from TRP crystal +FE CM 258.000 1.9000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand (KK 05/13/91) +FE CPM 0.000 3.3814 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +H CD 330.000 1.1100 ! ALLOW PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA C 330.000 1.1000 ! ALLOW ARO HEM + ! Heme vinyl substituent (KK, from propene (JCS)) +HA CA 340.000 1.0830 ! ALLOW ARO + ! trp, adm jr., 10/02/89 +HA CC 317.130 1.1000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +HA CP2 309.000 1.1110 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 309.000 1.1110 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CPM 367.600 1.0900 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CS 300.000 1.1110 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT1 309.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 309.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 322.000 1.1110 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CY 330.000 1.0800 ! ALLOW ARO + ! JWK 05/14/91 new r0 from indole +HA1 CE1 360.500 1.1000 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 365.000 1.1000 ! + ! for ethene, yin/adm jr., 12/95 +HB CP1 330.000 1.0800 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 330.000 1.0800 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HP CA 340.000 1.0800 ! ALLOW ARO + ! phe,tyr JES 8/25/89 +HP CY 350.000 1.0800 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HR1 CPH1 375.000 1.0830 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 340.000 1.0900 ! ALLOW ARO + ! his, adm jr., 6/28/29 +HR2 CPH2 333.000 1.0700 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR3 CPH1 365.000 1.0830 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HT HT 0.000 1.5139 ! ALLOW WAT + ! FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM) +N C 260.000 1.3000 ! ALLOW PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 320.000 1.4340 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 320.000 1.4550 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 C 463.000 1.3650 ! ALLOW PEP POL ARO + ! 403.0->463.0, 1.305->1.365 guanidinium (KK) +NC2 CT2 261.000 1.4900 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT3 261.000 1.4900 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +NC2 HC 455.000 1.0000 ! ALLOW POL + ! 405.0->455.0 GUANIDINIUM (KK) +NH1 C 370.000 1.3450 ! ALLOW PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 CT2 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 CT3 320.000 1.4300 ! ALLOW ALI PEP POL ARO + ! NMA Gas & Liquid Phase IR Spectra (LK) +NH1 H 440.000 0.9970 ! ALLOW PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 HC 405.000 0.9800 ! ALLOW PEP POL ARO + ! (DS) +NH2 CC 430.000 1.3600 ! ALLOW PEP POL ARO + ! adm jr. 4/10/91, acetamide +NH2 CT2 240.000 1.4550 + ! from NH2 CT3, neutral glycine, adm jr. +NH2 CT3 240.000 1.4550 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH2 H 480.000 1.0000 ! ALLOW POL + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 HC 460.000 1.0000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH3 CT1 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT2 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT3 200.000 1.4800 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 HC 403.000 1.0400 ! ALLOW POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NP CP1 320.000 1.4850 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 320.000 1.5020 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP HC 460.000 1.0060 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NPH CPA 377.200 1.3757 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH FE 270.200 1.9580 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 400.000 1.3800 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 CPH2 400.000 1.3600 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 H 466.000 1.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 400.000 1.3800 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH2 400.000 1.3200 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 FE 65.000 2.2000 ! ALLOW HEM + ! Heme (6-liganded): His ligand (KK 05/13/91) +NR3 CPH1 380.000 1.3700 ! ALLOW ARO + ! his, adm jr., 6/28/90 +NR3 CPH2 380.000 1.3200 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 H 453.000 1.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA 270.000 1.3700 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CPT 270.000 1.3750 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY H 465.000 0.9760 ! ALLOW ARO + ! indole JWK 08/28/89 +O C 620.000 1.2300 ! ALLOW PEP POL ARO + ! Peptide geometry, condensed phase (LK) +O CC 650.000 1.2300 ! ALLOW PEP POL ARO + ! adm jr. 4/10/91, acetamide +OB CC 750.000 1.2200 ! ALLOW PEP POL ARO + ! adm jr., 10/17/90, acetic acid vibrations and geom. +OB CD 750.000 1.2200 ! ALLOW PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OC CA 525.000 1.2600 ! ALLOW PEP POL ARO ION + ! adm jr. 8/27/91, phenoxide +OC CC 525.000 1.2600 ! ALLOW PEP POL ARO ION + ! adm jr. 7/23/91, acetic acid +OC CT2 450.000 1.3300 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT3 450.000 1.3300 ! ALLOW ALC + ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OH1 CA 334.300 1.4110 ! ALLOW ARO ALC + ! MeOH, EMB 10/10/89, +OH1 CD 230.000 1.4000 ! ALLOW PEP POL ARO ALC + ! adm jr. 5/02/91, acetic acid pure solvent +OH1 CT1 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 CT2 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 CT3 428.000 1.4200 ! ALLOW ALI ALC ARO + ! methanol vib fit EMB 11/21/89 +OH1 H 545.000 0.9600 ! ALLOW ALC ARO + ! EMB 11/21/89 methanol vib fit +OM CM 1115.000 1.1280 ! ALLOW HEM + ! Heme (6-liganded): CO ligand (KK 05/13/91) +OM FE 250.000 1.8000 ! ALLOW HEM + ! Heme (6-liganded): O2 ligand (KK 05/13/91) +OM OM 600.000 1.2300 ! ALLOW HEM + ! Heme (6-liganded): O2 ligand (KK 05/13/91) +OS CD 150.000 1.3340 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +OS CT3 340.000 1.4300 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OT HT 450.000 0.9572 ! ALLOW WAT + ! FROM TIPS3P GEOM +S CT2 198.000 1.8180 ! ALLOW ALI SUL ION + ! fitted to C-S s 9/26/92 (FL) +S CT3 240.000 1.8160 ! ALLOW ALI SUL ION + ! fitted to C-S s 9/26/92 (FL) +S HS 275.000 1.3250 ! ALLOW SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +SM CT2 214.000 1.8160 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SM CT3 214.000 1.8160 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SM SM 173.000 2.0290 ! ALLOW SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +SS CS 205.000 1.8360 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 + +ANGLES +! +!V(angle) = Ktheta(Theta - Theta0)**2 +! +!V(Urey-Bradley) = Kub(S - S0)**2 +! +!Ktheta: kcal/mole/rad**2 +!Theta0: degrees +!Kub: kcal/mole/A**2 (Urey-Bradley) +!S0: A +! +!atom types Ktheta Theta0 Kub S0 +! +CA CA CA 40.000 120.00 35.00 2.41620 ! ALLOW ARO + ! JES 8/25/89 +CE1 CE1 CT3 48.00 123.50 ! + ! for 2-butene, yin/adm jr., 12/95 +CE1 CT2 CT3 32.00 112.20 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +CE2 CE1 CT2 48.00 126.00 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +CE2 CE1 CT3 47.00 125.20 ! + ! for propene, yin/adm jr., 12/95 +CP1 N C 60.000 117.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 C 52.000 112.3000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 CC 52.000 112.3000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 CD 50.000 112.3000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP2 CP1 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 CP2 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C 60.000 117.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 100.000 114.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 100.000 111.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPA CPB C 70.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPA CPM CPA 94.200 125.1200 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPA NPH CPA 139.300 103.9000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB C C 70.000 121.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPB C 70.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CPB CPB CPA 30.800 106.5100 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH2 NR1 CPH1 130.000 107.5000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CPH2 NR2 CPH1 130.000 104.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CPH2 NR3 CPH1 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPM CPA CPB 61.600 124.0700 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT CA CA 60.000 118.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT CPT CA 60.000 122.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT CY CA 120.000 107.40 25.00 2.26100 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CPT NY CA 110.000 108.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CT1 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT1 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CT1 CT1 53.350 111.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT1 CT2 CA 51.800 107.5000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +CT1 CT2 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT1 CT2 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT1 CT2 CPH1 58.350 113.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted +CT1 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT1 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT2 CA CA 45.800 122.3000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +CT2 CPB CPA 65.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPB CPB 65.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CPH1 CPH1 45.800 130.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS +CT2 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT2 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CT1 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CT1 CT1 53.350 111.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT2 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! from CT2 CT1 C, for lactams, adm jr. +CT2 CT2 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +CT2 CT2 CD 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +CT2 CT2 CPB 70.000 113.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT2 CT2 CT2 58.350 113.60 11.16 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT2 CT3 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT2 CY CA 45.800 129.4000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CT2 CY CPT 45.800 124.0000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +CT2 NC2 C 62.300 120.0000 ! ALLOW ALI POL PEP ARO + ! 107.5->120.0 to make planar Arg (KK) +CT2 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT2 OS CD 40.000 109.60 30.00 2.26510 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 CA CA 45.800 122.3000 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +CT3 CPB CPA 65.000 126.7400 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPB CPB 65.000 126.7500 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 CPH1 CPH1 45.800 130.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS +CT3 CT1 C 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +CT3 CT1 CC 52.000 108.0000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/09/92, for ALA cter +CT3 CT1 CT1 53.350 108.50 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT1 CT2 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT1 CT3 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 CA 51.800 107.5000 ! ALLOW ALI ARO + ! ethylbenzene, adm jr., 3/7/92 +CT3 CT2 CPH1 58.350 113.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted +CT3 CT2 CT1 58.350 113.50 11.16 2.56100 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +CT3 CT2 CT2 58.000 115.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 CT2 CT3 53.350 114.00 8.00 2.56100 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CT3 NC2 C 62.300 120.0000 ! ALLOW ALI POL PEP ARO + ! methylguanidinium, adm jr., 3/26/92 +CT3 NH1 C 50.000 120.0000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +CT3 OS CD 40.000 109.60 30.00 2.26510 ! ALLOW POL PEP + ! adm jr. 5/02/91, acetic acid pure solvent +CT3 S CT2 34.000 95.0000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CY CPT CA 160.000 130.6000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CPT CPT 110.000 107.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +CY CT2 CT1 58.350 114.0000 ! ALLOW ARO + ! from TRP crystal, JWK +CY CT2 CT3 58.350 114.0000 ! ALLOW ARO + ! from TRP crystal, JWK +FE NPH CPA 96.150 128.0500 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +FE NR2 CPH1 30.000 133.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +FE NR2 CPH2 30.000 123.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +H NH1 C 34.000 123.0000 ! ALLOW PEP POL ARO + ! NMA Vib Modes (LK) +H NH1 CT1 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH1 CT2 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH1 CT3 35.000 117.0000 ! ALLOW PEP POL ARO ALI + ! NMA Vibrational Modes (LK) +H NH2 CC 50.000 120.0000 ! ALLOW POL PEP ARO + ! his, adm jr. 8/13/90 acetamide geometry and vibrations +H NH2 H 23.000 120.0000 ! ALLOW POL + ! adm jr. 8/13/90 acetamide geometry and vibrations +H NR1 CPH1 30.000 125.50 20.00 2.15000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR1 CPH2 30.000 127.00 20.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH1 25.000 126.00 15.00 2.13000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH2 25.000 126.00 15.00 2.09000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NY CA 28.000 126.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT 28.000 126.0000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H OH1 CA 65.000 108.0000 ! ALLOW ALC ARO + ! JES 8/25/89 phenol +H OH1 CD 55.000 115.0000 ! ALLOW ALC ARO PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H OH1 CT1 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +H OH1 CT2 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +H OH1 CT3 57.500 106.0000 ! ALLOW ALC ARO ALI + ! methanol vib fit EMB 11/21/89 +HA C C 50.000 120.5000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK from propene (JCS)) +HA C CPB 50.000 120.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA C HA 50.000 118.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK from propene (JCS)) +HA CA CA 29.000 120.00 25.00 2.15250 ! ALLOW ARO + ! trp, adm jr., 10/02/89 +HA CA CPT 41.000 122.0000 ! ALLOW ARO + !adm jr., 5/08/91, indole CCDB structure search +HA CA CY 32.000 125.00 25.00 2.17300 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA CP2 CP1 33.430 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 CP2 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 CP3 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP2 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 CP2 26.500 110.10 22.53 2.17900 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CPM CPA 12.700 117.4400 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CPM FE 0.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +HA CS CT3 34.600 110.10 22.53 2.17900 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CS HA 35.500 108.40 14.00 1.77500 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT1 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT1 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT1 CT1 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 CT2 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 CT3 34.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT1 HA 35.500 109.00 5.40 1.80200 ! TEST for test cpd + ! based on HA CT2 HA +HA CT2 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT2 CA 49.300 107.5000 ! ALLOW ALI ARO + ! PARALLH19 (JES) +HA CT2 CC 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HA CT2 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT2 CE1 45.00 111.50 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +HA CT2 CPB 50.000 109.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA CT2 CPH1 33.430 109.5000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED +HA CT2 CT1 33.430 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +HA CT2 CT2 26.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 CT3 34.600 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT2 CY 33.430 109.5000 ! ALLOW ARO + ! ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA +HA CT2 HA 35.500 109.00 5.40 1.80200 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 C 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! alanine dipeptide, LK, replaced, adm jr., 5/09/91 +HA CT3 CA 49.300 107.5000 ! ALLOW ALI ARO + ! toluene, adm jr. 3/7/92 +HA CT3 CC 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HA CT3 CD 33.000 109.50 30.00 2.16300 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +HA CT3 CE1 42.00 111.50 ! + ! for 2-butene, yin/adm jr., 12/95 +HA CT3 CPB 50.000 109.5000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA CT3 CPH1 33.430 109.5000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED +HA CT3 CS 34.600 110.10 22.53 2.17900 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT3 CT1 33.430 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane frequencies (MJF), alkane geometries (SF) +HA CT3 CT2 34.600 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 CT3 37.500 110.10 22.53 2.17900 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CT3 HA 35.500 108.40 5.40 1.80200 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +HA CY CA 20.000 126.40 25.00 2.18600 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA CY CPT 32.000 126.40 25.00 2.25500 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HA1 CE1 CE1 52.00 119.50 ! + ! for 2-butene, yin/adm jr., 12/95 +HA1 CE1 CE2 42.00 118.00 ! + ! for propene, yin/adm jr., 12/95 +HA1 CE1 CT2 40.00 116.00 ! + ! for 1-butene; from propene, yin/adm jr., 12/95 +HA1 CE1 CT3 22.00 117.00 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 CE1 45.00 120.50 ! + ! for propene, yin/adm jr., 12/95 +HA2 CE2 CE2 55.50 120.50 ! + ! for ethene, yin/adm jr., 12/95 +HA2 CE2 HA2 19.00 119.00 ! + ! for propene, yin/adm jr., 12/95 +HB CP1 C 50.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CC 50.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CD 50.000 112.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 CP2 35.000 118.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CC 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HB CT1 CD 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +HB CT1 CT1 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CT2 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 CT3 35.000 111.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 CC 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +HB CT2 CD 50.000 109.5000 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +HB CT2 HB 36.000 115.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 C 50.000 109.5000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HC NC2 C 49.000 120.0000 ! ALLOW POL PEP ARO + ! 35.3->49.0 GUANIDINIUM (KK) +HC NC2 CT2 40.400 120.0000 ! ALLOW POL ALI + ! 107.5->120.0 to make planar Arg (KK) +HC NC2 CT3 40.400 120.0000 ! ALLOW POL ALI + ! methylguanidinium, adm jr., 3/26/92 +HC NC2 HC 25.000 120.0000 ! ALLOW POL + ! 40.0->25.0 GUANIDINIUM (KK) +HC NH2 CT2 50.000 111.0000 ! ALLOW POL + ! from HC NH2 CT3, neutral glycine, adm jr. +HC NH2 CT3 50.000 111.0000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +HC NH2 HC 39.000 106.5000 ! ALLOW POL + ! 40.0->25.0 GUANIDINIUM (KK) +HC NH3 CT1 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 CT2 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 CT3 30.000 109.50 20.00 2.07400 ! ALLOW POL ALI + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NH3 HC 44.000 109.5000 ! ALLOW POL + ! new stretch and bend; methylammonium (KK 03/10/92) +HC NP CP1 33.000 109.50 4.00 2.05600 ! ALLOW POL ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 33.000 109.50 4.00 2.05600 ! ALLOW POL ALI PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP HC 51.000 107.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HP CA CA 30.000 120.00 22.00 2.15250 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CPT 30.000 122.00 22.00 2.14600 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA CY 32.000 125.00 25.00 2.17300 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HP CY CA 32.000 126.40 25.00 2.18600 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CY CPT 32.000 126.40 25.00 2.25500 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +HR1 CPH1 CPH1 22.000 130.00 15.00 2.21500 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR3 CPH1 CPH1 25.000 130.00 20.00 2.20000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS S CT2 38.800 95.0000 ! ALLOW SUL ION ALI + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT3 43.000 95.0000 ! ALLOW SUL ION ALI + ! methanethiol pure solvent, adm jr., 6/22/92 +HT OT HT 55.000 104.5200 ! ALLOW WAT + ! TIP3P GEOMETRY, ADM JR. +N C CP1 20.000 112.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT2 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT3 20.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 C 50.000 108.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CC 50.000 108.2000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CD 50.000 108.2000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 CP2 70.000 110.8000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP1 HB 48.000 112.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 CP2 70.000 110.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CP3 HA 48.000 108.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 C NC2 52.000 120.00 90.00 2.36420 ! ALLOW POL PEP ARO + ! changed from 60.0/120.3 for guanidinium (KK) +NC2 CT2 CT2 67.700 107.5000 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT2 HA 51.500 107.5000 ! ALLOW ALI POL + ! arg, (DS) +NC2 CT3 HA 51.500 107.5000 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +NH1 C CP1 80.000 116.5000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CT1 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 C CT2 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 C CT3 80.000 116.5000 ! ALLOW ALI PEP POL ARO + ! NMA Vib Modes (LK) +NH1 CT1 C 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CC 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH1 CT1 CD 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH1 CT1 CT1 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CT2 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 CT3 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT1 HB 48.000 108.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT2 C 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT2 CC 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/20/92, for asn,asp,gln,glu and cters +NH1 CT2 CD 50.000 107.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH1 CT2 CT2 70.000 113.5000 ! ALLOW ALI PEP POL ARO + ! from NH1 CT1 CT2, for lactams, adm jr. +NH1 CT2 HA 51.500 109.5000 ! ALLOW ALI PEP POL ARO + ! from NH1 CT3 HA, for lactams, adm jr. +NH1 CT2 HB 48.000 108.0000 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 CT3 HA 51.500 109.5000 ! ALLOW ALI PEP POL ARO + ! NMA crystal (JCS) +NH2 CC CP1 80.000 112.5000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CT1 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC CT2 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC CT3 50.000 116.50 50.00 2.45000 ! ALLOW ALI PEP POL ARO + ! adm jr. 8/13/90 acetamide geometry and vibrations +NH2 CC HA 44.000 111.00 50.00 1.98000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +NH2 CT2 HB 38.000 109.50 50.00 2.14000 + !from NH2 CT3 HA, neutral glycine, adm jr. +NH2 CT2 CD 52.000 108.0000 + !from CT2 CT2 CD, neutral glycine, adm jr. +NH2 CT3 HA 38.000 109.50 50.00 2.14000 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +NH3 CT1 C 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CC 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH3 CT1 CT1 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CT2 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 CT3 67.700 110.0000 ! ALLOW ALI POL + ! new aliphatics, adm jr., 2/3/92 +NH3 CT1 HB 51.500 107.5000 ! ALLOW ALI POL PEP + ! new aliphatics, adm jr., 2/3/92 +NH3 CT2 C 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! alanine (JCS) +NH3 CT2 CC 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +NH3 CT2 CD 43.700 110.0000 ! ALLOW PEP POL ARO ALI + ! adm jr. 5/02/91, acetic acid pure solvent +NH3 CT2 CT2 67.700 110.0000 ! ALLOW ALI POL + ! alanine (JCS) +NH3 CT2 HA 45.000 107.50 35.00 2.10100 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NH3 CT2 HB 51.500 107.5000 ! ALLOW ALI POL PEP + ! for use on NTER -- from NH3 CT2HA (JCS) -- (LK) +NH3 CT3 HA 45.000 107.50 35.00 2.10100 ! ALLOW ALI POL + ! new stretch and bend; methylammonium (KK 03/10/92) +NP CP1 C 50.000 106.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CC 50.000 106.0000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CD 50.000 106.0000 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 HB 51.500 107.5000 ! ALLOW ALI POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 CP2 70.000 108.5000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP3 HA 51.500 109.1500 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NPH CPA CPB 122.000 111.5400 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPM 88.000 124.3900 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH FE CM 50.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NPH FE CPM 0.000 45.0000 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +NPH FE NPH 14.390 90.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 CPH1 130.000 106.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR1 CPH1 CT2 45.800 124.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR1 CPH1 CT3 45.800 124.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR1 CPH1 HR3 25.000 124.00 20.00 2.14000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR1 CPH2 HR1 25.000 122.50 20.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 CPH1 CPH1 130.000 110.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CT2 45.800 120.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR2 CPH1 HR3 25.000 120.00 20.00 2.14000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR2 CPH2 HR1 25.000 125.00 20.00 2.12000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 CPH2 NR1 130.000 112.5000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR2 FE CM 50.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NR2 FE NPH 50.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +NR3 CPH1 CPH1 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH1 CT2 45.800 122.0000 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FC FROM CA CT2CT +NR3 CPH1 HR1 22.000 122.00 15.00 2.18000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 HR2 32.000 126.00 25.00 2.14000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 NR3 145.000 108.0000 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NY CA CY 120.000 110.00 25.00 2.24000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CA HA 32.000 125.00 25.00 2.17700 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +NY CA HP 32.000 125.00 25.00 2.17700 ! ALLOW ARO + ! JWK 05/14/91 new theta0 and r0UB from indole +NY CPT CA 160.000 130.6000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +NY CPT CPT 110.000 107.4000 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +O C CP1 80.000 118.0000 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CT1 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C CT3 80.000 121.0000 ! ALLOW ALI PEP POL ARO + ! Alanine Dipeptide ab initio calc's (LK) +O C H 50.000 121.7000 ! ALLOW PEP POL ARO + ! acetaldehyde (JCS) +O C N 80.000 122.5000 ! ALLOW PRO PEP POL ARO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C NH1 80.000 122.5000 ! ALLOW PEP POL ARO + ! NMA Vib Modes (LK) +O CC CP1 80.000 118.0000 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CT1 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC CT2 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC CT3 15.000 121.00 50.00 2.44000 ! ALLOW ALI PEP POL ARO + ! adm jr. 4/10/91, acetamide update +O CC HA 44.000 122.0000 ! ALLOW POL + ! adm jr., 5/13/91, formamide geometry and vibrations +O CC NH2 75.000 122.50 50.00 2.37000 ! ALLOW POL PEP ARO + ! adm jr. 4/10/91, acetamide update +OB CD CP1 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OB CD CT1 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OB CD CT2 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OB CD CT3 70.000 125.00 20.00 2.44200 ! ALLOW ALI PEP POL ARO + ! adm jr. 5/02/91, acetic acid pure solvent +OC CA CA 40.000 120.0000 ! ALLOW POL ARO + ! adm jr. 8/27/91, phenoxide +OC CC CP1 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CT1 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC CT2 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC CT3 40.000 118.00 50.00 2.38800 ! ALLOW ALI PEP POL ARO ION + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CC OC 100.000 124.00 70.00 2.22500 ! ALLOW POL ION PEP ARO + ! adm jr. 7/23/91, correction, ACETATE (KK) +OC CT2 CT3 65.000 122.0000 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT2 HA 65.000 118.3000 ! ALLOW ALC + ! ethoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OC CT3 HA 65.000 118.3000 ! ALLOW ALC + ! methoxide 6-31+G* geom/freq, adm jr., 6/1/92 +OH1 CA CA 45.200 120.0000 ! ALLOW ARO ALC + ! PARALLH19 WITH [122.3] (JES) +OH1 CD CT2 55.000 110.5000 ! ALLOW ALI PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CD CT3 55.000 110.5000 ! ALLOW ALI PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CD OB 50.000 123.00 210.00 2.26200 ! ALLOW PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid vibrations +OH1 CT1 CT1 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT1 CT3 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT1 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT1 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT2 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 CT3 75.700 110.1000 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT2 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OH1 CT3 HA 45.900 108.8900 ! ALLOW ALI ALC ARO + ! MeOH, EMB, 10/10/89 +OM CM FE 35.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OM FE NPH 5.000 90.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OM OM FE 0.000 180.0000 ! ALLOW HEM + ! Heme (6-liganded): ligand links (KK 05/13/91) +OS CD CP1 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OS CD CT1 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD CT2 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD CT3 55.000 109.00 20.00 2.32600 ! ALLOW POL PEP + ! adm jr., 4/05/91, for PRES CT1 from methylacetate +OS CD OB 90.000 125.90 160.00 2.25760 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OS CT2 HA 60.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for PRES CT1 from methyl acetate +OS CT3 HA 60.000 109.5000 ! ALLOW PEP POL + ! adm jr. 4/05/91, for PRES CT1 from methyl acetate +S CT2 CT1 58.000 112.5000 ! ALLOW ALI SUL ION + ! as in expt.MeEtS & DALC crystal, 5/15/92 +S CT2 CT2 58.000 114.5000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +S CT2 CT3 58.000 114.5000 ! ALLOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +S CT2 HA 46.100 111.3000 ! ALLOW ALI SUL ION + ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90 +S CT3 HA 46.100 111.3000 ! ALLOW ALI SUL ION + ! vib. freq. and HF/6-31G* geo. (DTN) 8/24/90 +SM CT2 CT1 58.000 112.5000 ! ALLOW ALI SUL ION + ! as in expt.MeEtS & DALC crystal, 5/15/92 +SM CT2 HA 38.000 111.0000 ! ALLOW ALI SUL ION + ! new S-S atom type 8/24/90 +SM CT3 HA 38.000 111.0000 ! ALLOW ALI SUL ION + ! new S-S atom type 8/24/90 +SM SM CT2 72.500 103.3000 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SM SM CT3 72.500 103.3000 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SS CS CT3 55.000 118.0000 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +SS CS HA 40.000 112.3000 ! ALLOW SUL + ! methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 + +DIHEDRALS +! +!V(dihedral) = Kchi(1 + cos(n(chi) - delta)) +! +!Kchi: kcal/mole +!n: multiplicity +!delta: degrees +! +!atom types Kchi n delta +! +C CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +C CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +C N CP1 C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CA CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 +CA CPT CPT CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CA CT2 CT1 C 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +CA CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +CA NY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CC CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CC CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +CC CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CC CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c +CD CP1 N C 0.0000 1 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CD CT1 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CD CT2 NH1 C 0.2000 1 180.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c +CE1 CE1 CT3 HA 0.0300 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT2 CT3 0.5000 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT2 HA 0.1200 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +CE2 CE1 CT3 HA 0.0500 3 180.00 ! + ! for propene, yin/adm jr., 12/95 +CP1 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP1 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 N C 0.0000 3 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 N CP1 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP2 CP3 NP CP1 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N C CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 C 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 CC 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 N CP1 CP2 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 C 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CC 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CD 0.0800 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CP3 NP CP1 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CPH2 NR1 CPH1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPH2 NR2 CPH1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPH2 NR3 CPH1 CPH1 12.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +CPT CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT CY CA 4.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CPT CPT NY CA 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CT1 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT1 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT1 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT1 CT2 CA CA 0.2300 2 180.00 ! ALLOW ARO ALI + ! ethylbenzene ethyl rotation, adm jr. 3/7/92 +CT1 CT2 CPH1 CPH1 0.2000 1 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CPH1 CPH1 0.2700 2 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT1 CT2 CY CA 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT1 CT2 CY CPT 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT1 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT1 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 C NH1 CT2 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 C NH1 CT3 1.6000 1 0.00 ! ALLOW PEP + ! from CT2 C NH1 CT2, adm jr. 10/21/96 +CT2 C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! from CT2 C NH1 CT2, adm jr. 10/21/96 +CT2 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 toluene and ethylbenzene +CT2 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2 +CT2 CPH1 NR2 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2 +CT2 CPH1 NR3 CPH2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +CT2 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT2 CT2 CPH1 CPH1 0.4000 1 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89 +CT2 CT2 CT2 CT2 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT2 CT2 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! from CT2 CT1 NH1 C, for lactams, adm jr. +CT2 CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK +CT2 CY CPT CPT 3.0000 2 180.00 ! ALLOW ARO + !JWK +CT2 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT2 NH1 C CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT2 NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT2 SM SM CT2 1.0000 1 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT2 SM SM CT2 4.1000 2 0.00 ! ALLOW ALI SUL ION + ! mp 6-311G** dimethyldisulfide, 3/26/92 (FL) +CT2 SM SM CT2 0.9000 3 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT3 C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 C NH1 CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 C NH1 CT2 1.6000 1 0.00 ! ALLOW PEP + ! for acetylated GLY N-terminus, adm jr. +CT3 C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! for acetylated GLY N-terminus, adm jr. +CT3 C NH1 CT3 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! toluene, adm jr., 3/7/92 +CT3 CE1 CE2 HA2 5.2000 2 180.00 ! + ! for propene, yin/adm jr., 12/95 +CT3 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2 +CT3 CT1 NH1 C 1.8000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +CT3 CT2 CA CA 0.2300 2 180.00 ! ALLOW ARO ALI + ! ethylbenzene ethyl rotation, adm jr. 3/7/92 +CT3 CT2 CPH1 CPH1 0.2000 1 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CPH1 CPH1 0.2700 2 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92 +CT3 CT2 CT2 CT2 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT3 CT2 CT2 CT3 0.1500 1 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92, butane trans/gauche +CT3 CT2 CY CA 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT3 CT2 CY CPT 0.2300 2 180.00 ! ALLOW ARO + ! from ethylbenzene, adm jr., 3/7/92 +CT3 CT2 S CT3 0.2400 1 180.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 CT2 S CT3 0.3700 3 0.00 ! ALOW ALI SUL ION + ! DTN 8/24/90 +CT3 NH1 C CP1 1.6000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +CT3 NH1 C CT1 1.6000 1 0.00 ! ALLOW PEP + ! Revised to adjust NMA cis/trans energy difference. (LK) +CT3 NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +CT3 S CT2 CT2 0.2400 1 180.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 S CT2 CT2 0.3700 3 0.00 ! ALOW ALI SUL ION + ! expt. MeEtS, 3/26/92 (FL) +CT3 SM SM CT3 1.0000 1 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CT3 SM SM CT3 4.1000 2 0.00 ! ALLOW ALI SUL ION + ! mp 6-311G** dimethyldisulfide, 3/26/92 (FL) +CT3 SM SM CT3 0.9000 3 0.00 ! ALLOW ALI SUL ION + ! improved CSSC dihedral in DMDS 5/15/92 (FL) +CY CA NY CPT 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CY CPT CA CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +CY CPT CPT CA 10.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +H NH1 C CP1 2.5000 2 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +H NH1 C CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 C CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 C CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +H NH1 CT1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CC 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +H NH1 CT1 CD 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H NH1 CT1 CT1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CT2 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT1 CT3 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT2 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH1 CT2 CC 0.0000 1 0.00 ! ALLOW PEP POL + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +H NH1 CT2 CD 0.0000 1 0.00 ! ALLOW PEP POL + ! adm jr. 5/02/91, acetic acid pure solvent +H NH1 CT2 CT2 0.0000 1 0.00 ! ALLOW PEP + ! from H NH1 CT2 CT3, for lactams, adm jr. +H NH1 CT2 CT3 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +H NH2 CC CT1 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CT2 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CT3 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +H NH2 CC CP1 2.5000 2 180.00 ! ALLOW PEP POL ARO PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +H NR1 CPH1 CPH1 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/20/89 +H NR1 CPH1 CT2 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H +H NR1 CPH1 CT3 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HA CPH1 NR1 H +H NR3 CPH1 CPH1 1.4000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +H NR3 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA +H NR3 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA +H NY CA CY 0.8000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT CA 0.8000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +H NY CPT CPT 0.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +H OH1 CA CA 0.9900 2 180.00 ! ALLOW ARO ALC + ! phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92 +H OH1 CT1 CT1 1.3300 1 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT1 0.1800 2 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT1 0.3200 3 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 1.3300 1 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 0.1800 2 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT1 CT3 0.3200 3 0.00 ! ALLOW ALC + ! 2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT1 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT2 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 1.3000 1 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 0.3000 2 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +H OH1 CT2 CT3 0.4200 3 0.00 ! ALLOW ALC + ! ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93 +HA CA CA CA 3.5000 2 180.00 ! ALLOW ARO + ! adm jr., 10/02/89 +HA CA CA CPT 3.5000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA CA HA 2.5000 2 180.00 ! ALLOW ARO + ! ADM JR., 10/02/89 +HA CA CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! TRP (JES) +HA CA CPT CY 4.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA CY CPT 1.2000 2 180.00 ! ALLOW ARO + ! JWK +HA CA CY CT2 1.2000 2 180.00 ! ALLOW ARO + ! JWK +HA CA NY CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CA NY H 1.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CC NH2 H 1.4000 2 180.00 ! ALLOW PEP POL + ! adm jr. 4/10/91, acetamide update +HA CP3 N C 0.0000 3 180.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 N CP1 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CP3 NP CP1 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HA CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +HA CT2 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89 +HA CT2 CY CA 0.2500 2 180.00 ! ALLOW ARO + ! JWK +HA CT2 CY CPT 0.2500 2 180.00 ! ALLOW ARO + ! JWK +HA CT2 NH1 C 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT2 NH1 H 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT2 S CT3 0.2800 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +HA CT3 CPH1 CPH1 0.0000 3 0.00 ! ALLOW ARO + ! 4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89 +HA CT3 CS HA 0.1600 3 0.00 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +HA CT3 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +HA CT3 NH1 C 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT3 NH1 H 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +HA CT3 S CT2 0.2800 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +HA CY CA CPT 1.2000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CA HA 1.2000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CPT CA 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA CY CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +HA1 CE1 CE2 HA2 5.2000 2 180.00 ! + ! for propene, yin/adm jr., 12/95 +HA1 CE1 CT2 HA 0.8700 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA1 CE1 CT2 CT3 0.1200 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA1 CE1 CT3 HA 0.3400 3 0.00 ! + ! for butene, yin/adm jr., 12/95 +HA2 CE2 CE1 CT2 5.2000 2 180.00 ! + ! for butene, yin/adm jr., 12/95 +HB CP1 N C 0.8000 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 N CP3 0.1000 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CP1 NP CP3 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HB CT1 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT1 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT2 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 NH1 C 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HB CT3 NH1 H 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +HC NH2 CT2 HB 0.1100 3 0.00 + !from X CT3 NH2 X, neutral glycine, adm jr. +HC NH2 CT2 CD 0.1100 3 0.00 + !from X CT3 NH2 X, neutral glycine, adm jr. +HC NP CP1 C 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CC 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CD 0.0800 3 0.00 ! ALLOW PRO PEP + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP1 HB 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 CP2 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HC NP CP3 HA 0.0800 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +HP CA CA CA 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CA CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CA CA CT2 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 toluene and ethylbenzene +HP CA CA CT3 4.2000 2 180.00 ! ALLOW ARO + ! toluene, adm jr., 3/7/92 +HP CA CA HP 2.4000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 benzene +HP CA CPT CPT 3.0000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +HP CA CPT CY 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CA CY CPT 2.0000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA CY CT2 1.2000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +HP CA NY CPT 2.0000 2 180.00 ! ALLOW ARO + !adm jr., 12/30/91, for jwk +HP CA NY H 0.4000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CA HP 1.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CPT CA 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HP CY CPT CPT 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +HR1 CPH1 CPH1 CT2 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 CPH1 CT3 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 CPH1 HR1 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90, his +HR1 CPH1 NR3 CPH2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH1 NR3 H 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR1 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR1 CPH2 NR2 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR2 CPH2 NR3 CPH1 3.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +HR2 CPH2 NR3 H 0.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90, YES, 0.0 +HR3 CPH1 CPH1 CT2 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 CPH1 CT3 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 CPH1 HR3 2.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR1 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR2 CPH2 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS S CT2 CT1 0.2400 1 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT1 0.1500 2 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT1 0.2700 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT2 CT3 0.2400 1 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 CT3 0.1500 2 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 CT3 0.2700 3 0.00 ! ALLOW ALI SUL ION + ! ethanethiol C-C-S-H surface, adm jr., 4/18/93 +HS S CT2 HA 0.2000 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +HS S CT3 HA 0.2000 3 0.00 ! ALLOW ALI SUL ION + ! methanethiol pure solvent, adm jr., 6/22/92 +N C CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT1 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT2 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 CT3 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT1 HB 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT2 HB 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N C CT3 HA 0.0000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +N CT1 CT2 CA 0.0400 3 0.00 ! ALLOW ARO + ! 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92 +NH1 C CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 C CT1 CT1 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 CT2 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 CT3 0.0000 1 0.00 ! ALLOW PEP + ! ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK) +NH1 C CT1 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 C CT1 NH1 0.6000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH1 C CT2 CT2 0.0000 1 0.00 ! ALLOW PEP + ! from NH1 C CT1 CT2, for lactams, adm jr. +NH1 C CT2 HA 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +NH1 C CT2 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +NH1 C CT2 NH1 0.6000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH1 C CT3 HA 0.0000 3 0.00 ! ALLOW PEP + ! LK for autogenerate dihe, sp2-methyl, no dihedral potential +NH1 CT1 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH1 CT2 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 CP2 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 HB 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH2 CC CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +NH3 CT1 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH3 CT1 C NH1 0.6000 1 0.00 ! ALLOW PEP PRO + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93 +NH3 CT1 CC NH2 0.4000 1 0.00 ! ALLOW PEP PRO + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +NH3 CT2 C N 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NH3 CT2 C NH1 0.4000 1 0.00 ! ALLOW PEP PRO + ! adm jr. 3/24/92, for PRES GLYP +NH3 CT2 CC NH2 0.4000 1 0.00 ! ALLOW PEP PRO + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +NP CP1 C N 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 C NH1 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NP CP1 CC NH2 0.3000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NR1 CPH1 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA +NR1 CPH1 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA +NR1 CPH1 CPH1 HR3 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR1 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR1 CPH2 NR2 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CPH1 CT2 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA +NR2 CPH1 CPH1 CT3 3.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA +NR2 CPH1 CPH1 HR3 3.0000 2 180.00 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +NR2 CPH1 CPH1 NR1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! HIS CB-CG TORSION, +NR2 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR2 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR2 CPH2 NR1 CPH1 14.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR2 CPH2 NR1 H 1.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH1 CPH1 CT2 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 CT3 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 HR1 2.5000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CPH1 NR3 12.0000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH1 CT2 CT1 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 CT2 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 CT3 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT2 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH1 CT3 HA 0.1900 3 0.00 ! ALLOW ARO + ! 4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89 +NR3 CPH2 NR3 CPH1 12.0000 2 180.00 ! ALLOW ARO + ! his, ADM JR., 7/20/89 +NR3 CPH2 NR3 H 1.4000 2 180.00 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA CY CPT 4.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CA CY CT2 3.5000 2 180.00 ! ALLOW ARO + ! JWK +NY CA CY HA 3.5000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +NY CA CY HP 3.5000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +NY CPT CA CA 2.8000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CA HA 4.0000 2 180.00 ! ALLOW ARO + ! JWK 09/05/89 +NY CPT CA HP 3.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CPT CA 10.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +NY CPT CPT CY 5.0000 2 180.00 ! ALLOW ARO + ! JWK 05/14/91 fit to indole +O C CP1 CP2 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 HB 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C CT1 CT1 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 CT2 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 CT3 1.4000 1 0.00 ! ALLOW PEP + ! ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c +O C CT1 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT1 NH1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT1 NH3 0.0000 1 0.00 ! ALLOW PEP PRO + ! Backbone parameter set made complete RLD 8/8/90 +O C CT2 CT2 1.4000 1 0.00 ! ALLOW PEP + ! from O C CT1 CT2, for lactams, adm jr. +O C CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O C CT2 HB 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 NH1 0.0000 1 0.00 ! ALLOW PEP + ! Alanine Dipeptide ab initio calc's (LK) +O C CT2 NH3 0.0000 1 0.00 ! ALLOW PEP PRO + ! Backbone parameter set made complete RLD 8/8/90 +O C CT3 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O C N CP1 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP1 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP3 2.7500 2 180.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C N CP3 0.3000 4 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O C NH1 CT1 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 CT2 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 CT3 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O C NH1 H 2.5000 2 180.00 ! ALLOW PEP + ! Gives appropriate NMA cis/trans barrier. (LK) +O CC CP1 CP2 0.4000 1 180.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 CP2 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 HB 0.4000 1 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 HB 0.6000 2 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CP1 N -0.3000 4 0.00 ! ALLOW PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +O CC CT2 HA 0.0000 3 180.00 ! ALLOW POL + ! adm jr. 4/05/91, for asn,asp,gln,glu and cters +O CC NH2 H 1.4000 2 180.00 ! ALLOW PEP POL ARO PRO + ! adm jr. 4/10/91, acetamide update +OB CD OS CT2 0.9650 1 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT2 3.8500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT3 0.9650 1 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OB CD OS CT3 3.8500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +OC CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! adm jr. 8/27/91, phenoxide +OC CA CA HP 4.2000 2 180.00 ! ALLOW ARO + ! adm jr. 8/27/91, phenoxide +OC CC CP1 CP2 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 HB 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 N 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CP1 NP 0.1600 3 0.00 ! ALLOW PEP PRO POL + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +OC CC CT1 NH3 3.2000 2 180.00 ! ALLOW PEP PRO + ! adm jr. 4/17/94, zwitterionic glycine +OC CC CT2 NH3 3.2000 2 180.00 ! ALLOW PEP PRO + ! adm jr. 4/17/94, zwitterionic glycine +OH1 CA CA CA 3.1000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 phenol +OH1 CA CA HP 4.2000 2 180.00 ! ALLOW ARO + ! JES 8/25/89 phenol +S CT2 CT2 HA 0.0100 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +SM CT2 CT2 HA 0.0100 3 0.00 ! ALLOW ALI SUL ION + ! DTN 8/24/90 +SM SM CT2 CT1 0.3100 3 0.00 ! ALLOW SUL ALI + ! S-S for cys-cys, dummy parameter for now ... DTN 9/04/90 +SM SM CT2 CT2 0.3100 3 0.00 ! ALLOW SUL ALI + ! S-S for cys-cys, dummy parameter for now ... DTN 9/04/90 +SM SM CT2 HA 0.1580 3 0.00 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SM SM CT3 HA 0.1580 3 0.00 ! ALLOW ALI SUL ION + ! expt. dimethyldisulfide, 3/26/92 (FL) +SS CS CT3 HA 0.1500 3 0.00 ! ALLOW SUL + ! ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92 +X C C X 4.0000 2 180.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X C NC2 X 2.2500 2 180.00 ! ALLOW PEP POL ARO + ! 9.0->2.25 GUANIDINIUM (KK) +X CD OH1 X 2.0500 2 180.00 ! ALLOW PEP POL ARO ALC + ! adm jr, 10/17/90, acetic acid C-Oh rotation barrier +X CD OS X 2.0500 2 180.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CE1 CE1 X 5.2000 2 180.00 ! + ! for butene, yin/adm jr., 12/95 +X CE2 CE2 X 4.9000 2 180.00 ! + ! for ethene, yin/adm jr., 12/95 +X CP1 C X 0.0000 6 180.00 ! ALLOW POL PEP PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP1 CC X 0.0000 6 180.00 ! ALLOW POL PEP + ! changed to 0.0 RLD 5/19/92 +X CP1 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92 +X CP1 CP2 X 0.1400 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP2 CP2 X 0.1600 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CP3 CP2 X 0.1400 3 0.00 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +X CPA CPB X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPA CPM X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPB C X 3.0000 2 180.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPB CPB X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) +X CPB CT2 X 0.0000 6 0.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPB CT3 X 0.0000 6 0.00 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +X CPT CPT X 0.0000 2 180.00 ! ALLOW ARO + ! JWK indole 05/14/91 +X CT1 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT1 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT1 CT1 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 CT2 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 CT3 X 0.2000 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT1 NH3 X 0.1000 3 0.00 ! ALLOW ALI POL + ! 0.715->0.10 METHYLAMMONIUM (KK) +X CT1 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT1 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CT2 CA X 0.0000 6 0.00 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +X CT2 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT2 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT2 CT2 X 0.1950 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT2 CT3 X 0.1600 3 0.00 ! ALLOW ALI + ! rotation barrier in Ethane (SF) +X CT2 NC2 X 0.0000 6 180.00 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +X CT2 NH3 X 0.1000 3 0.00 ! ALLOW ALI POL + ! 0.715->0.10 METHYLAMMONIUM (KK) +X CT2 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT2 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X CT3 CA X 0.0000 6 0.00 ! ALLOW ALI ARO + ! toluene, adm jr., 3/7/92 +X CT3 CC X 0.0500 6 180.00 ! ALLOW POL PEP + ! For side chains of asp,asn,glu,gln, (n=6) from KK(LK) +X CT3 CD X 0.0000 6 180.00 ! ALLOW POL PEP + ! adm jr. 3/19/92, from lipid methyl acetate +X CT3 CT3 X 0.1550 3 0.00 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +X CT3 NC2 X 0.0000 6 180.00 ! ALLOW ALI POL + ! methylguanidinium, adm jr., 3/26/92 +X CT3 NH2 X 0.1100 3 0.00 ! ALLOW POL + ! methylamine geom/freq, adm jr., 6/2/92 +X CT3 NH3 X 0.0900 3 0.00 ! ALLOW ALI POL + ! fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92 +X CT3 OH1 X 0.1400 3 0.00 ! ALLOW ALI ALC ARO + ! EMB 11/21/89 methanol vib fit +X CT3 OS X -0.1000 3 0.00 ! ALLOW PEP POL + ! adm jr. 3/19/92, from lipid methyl acetate +X FE CM X 0.0500 4 0.00 ! ALLOW HEM + ! Heme (6-liganded): ligands (KK 05/13/91) +X FE NPH X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): for "ic para" only (KK 05/13/91) +X FE OM X 0.0000 4 0.00 ! ALLOW HEM + ! Heme (6-liganded): ligands (KK 05/13/91) +X NPH CPA X 0.0000 2 0.00 ! ALLOW HEM + ! Heme (6-liganded): dummy for "auto dihe" (KK 05/13/91) + +IMPROPER +! +!V(improper) = Kpsi(psi - psi0)**2 +! +!Kpsi: kcal/mole/rad**2 +!psi0: degrees +!note that the second column of numbers (0) is ignored +! +!atom types Kpsi psi0 +! +CPB CPA NPH CPA 20.8000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB X X C 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT2 X X CPB 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +CT3 X X CPB 90.0000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): substituents (KK 05/13/91) +HA C C HA 20.0000 0 0.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK, from propene (JCS)) +HA CPA CPA CPM 29.4000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +HA CPB C C 20.0000 0 0.0000 ! ALLOW HEM ARO + ! Heme (6-liganded): substituents (KK 05/13/91) +HA HA C C 20.0000 0 180.0000 ! ALLOW PEP POL ARO + ! Heme vinyl substituent (KK, from propene (JCS)) +HA2 HA2 CE2 CE2 3.0 0 0.00 ! + ! for ethene, yin/adm jr., 12/95 +HR1 NR1 NR2 CPH2 0.5000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +HR1 NR2 NR1 CPH2 0.5000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +HR3 CPH1 NR1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR2 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 CPH1 NR3 CPH1 1.0000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 NR1 CPH1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HR3 NR2 CPH1 CPH1 0.5000 0 0.0000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +N C CP1 CP3 0.0000 0 0.0000 ! ALLOW PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +NC2 X X C 40.0000 0 0.0000 ! ALLOW PEP POL ARO + ! 5.75->40.0 GUANIDINIUM (KK) +NH1 X X H 20.0000 0 0.0000 ! ALLOW PEP POL ARO + ! NMA Vibrational Modes (LK) +NH2 X X H 4.0000 0 0.0000 ! ALLOW POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +NPH CPA CPA FE 137.4000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPB CPB 40.6000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPA CPM CPA 18.3000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NPH CPM CPB CPA 32.7000 0 0.0000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 CPH1 CPH2 H 0.4500 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +NR1 CPH2 CPH1 H 0.4500 0 0.0000 ! ALLOW ARO + ! his, adm jr., 7/05/90 +NR3 CPH1 CPH2 H 1.2000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NR3 CPH2 CPH1 H 1.2000 0 0.0000 ! ALLOW ARO + ! his, adm jr., 6/27/90 +NY CA CY CPT 100.0000 0 0.0000 ! ALLOW ARO + !adm jr., 5/15/91, indole 3-21G HE1 out-of-plane surf. +O CP1 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O CT1 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O CT2 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O CT3 NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O HA NH2 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! adm jr., 5/13/91, formamide geometry and vibrations +O N CT2 CC 120.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O NH2 CP1 CC 45.0000 0 0.0000 ! ALLOW PEP POL PRO + ! 6-31g* AcProNH2 and ProNH2 RLD 5/19/92 +O NH2 CT1 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 CT2 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 CT3 CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 8/13/90 acetamide geometry and vibrations +O NH2 HA CC 45.0000 0 0.0000 ! ALLOW PEP POL + ! adm jr., 5/13/91, formamide geometry and vibrations +O X X C 120.0000 0 0.0000 ! ALLOW PEP POL ARO + ! NMA Vibrational Modes (LK) +OB X X CD 100.0000 0 0.0000 ! ALLOW ALC ARO POL + ! adm jr., 10/17/90, acetic acid vibrations +OC X X CC 96.0000 0 0.0000 ! ALLOW PEP POL ARO ION + ! 90.0->96.0 acetate, single impr (KK) + +NONBONDED nbxmod 5 atom cdiel shift vatom vdistance vswitch - +cutnb 14.0 ctofnb 12.0 ctonnb 10.0 eps 1.0 e14fac 1.0 wmin 1.5 + !adm jr., 5/08/91, suggested cutoff scheme +! +!V(Lennard-Jones) = Eps,i,j[(Rmin,i,j/ri,j)**12 - 2(Rmin,i,j/ri,j)**6] +! +!epsilon: kcal/mole, Eps,i,j = sqrt(eps,i * eps,j) +!Rmin/2: A, Rmin,i,j = Rmin/2,i + Rmin/2,j +! +!atom ignored epsilon Rmin/2 ignored eps,1-4 Rmin/2,1-4 +! +C 0.000000 -0.110000 2.000000 ! ALLOW PEP POL ARO + ! NMA pure solvent, adm jr., 3/3/93 +CA 0.000000 -0.070000 1.992400 ! ALLOW ARO + ! benzene (JES) +CC 0.000000 -0.070000 2.000000 ! ALLOW PEP POL ARO + ! adm jr. 3/3/92, acetic acid heat of solvation +CD 0.000000 -0.070000 2.000000 ! ALLOW POL + ! adm jr. 3/19/92, acetate a.i. and dH of solvation +CE1 0.000000 -0.068000 2.090000 ! + ! for propene, yin/adm jr., 12/95 +CE2 0.000000 -0.064000 2.080000 ! + ! for ethene, yin/adm jr., 12/95 +CM 0.000000 -0.110000 2.100000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand carbon (KK 05/13/91) +CP1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CP2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CP3 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! alkane update, adm jr., 3/2/92 +CPA 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPB 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPH1 0.000000 -0.050000 1.800000 ! ALLOW ARO + ! adm jr., 10/23/91, imidazole solvation and sublimation +CPH2 0.000000 -0.050000 1.800000 ! ALLOW ARO + ! adm jr., 10/23/91, imidazole solvation and sublimation +CPM 0.000000 -0.090000 1.800000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +CPT 0.000000 -0.090000 1.800000 0.000000 -0.090000 1.900000 ! ALLOW ARO + ! benzene (JES) +CS 0.000000 -0.110000 2.200000 ! ALLOW SUL + ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92 +CT1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! isobutane pure solvent properties, adm jr, 2/3/92 +CT2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! propane pure solvent properties, adm jr, 2/3/92 +CT3 0.000000 -0.080000 2.060000 0.000000 -0.010000 1.900000 ! ALLOW ALI + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +CY 0.000000 -0.070000 1.992400 ! ALLOW ARO + ! TRP, JWK 08/29/89 +! carbon wildcards, following atom order is essential for accurate results +!C* 0.000000 -0.070000 2.000000 +!CP% 0.000000 -0.090000 1.800000 +!C%1 0.000000 -0.020000 2.275000 0.000000 -0.010000 1.900000 +!C%2 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 +!C%3 0.000000 -0.080000 2.060000 0.000000 -0.010000 1.900000 +!CPH+ 0.000000 -0.050000 1.800000 +!C 0.000000 -0.110000 2.000000 +!CA 0.000000 -0.070000 1.992400 +!CE1 0.000000 -0.068000 2.090000 +!CE2 0.000000 -0.064000 2.080000 +!CM 0.000000 -0.110000 2.100000 +!CP3 0.000000 -0.055000 2.175000 0.000000 -0.010000 1.900000 ! ALLOW ALI +!CPT 0.000000 -0.090000 1.800000 0.000000 -0.090000 1.900000 +!CS 0.000000 -0.110000 2.200000 +!CY 0.000000 -0.070000 1.992400 + +H 0.000000 -0.046000 0.224500 ! ALLOW PEP POL SUL ARO ALC + ! same as TIP3P hydrogen, adm jr., 7/20/89 +HA 0.000000 -0.022000 1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +HA1 0.000000 -0.031000 1.250000 ! + ! for propene, yin/adm jr., 12/95 +HA2 0.000000 -0.026000 1.260000 ! + ! for ethene, yin/adm jr., 12/95 +HB 0.000000 -0.022000 1.320000 ! ALLOW PEP ALI POL SUL ARO PRO ALC + ! methane/ethane a.i. and ethane pure solvent, adm jr, 2/3/92 +HC 0.000000 -0.046000 0.224500 ! ALLOW POL + ! new, small polar Hydrogen, see also adm jr. JG 8/27/89 +HP 0.000000 -0.030000 1.358200 0.000000 -0.030000 1.358200 ! ALLOW ARO + ! JES 8/25/89 values from Jorgensen fit to hydration energy +HR1 0.000000 -0.046000 0.900000 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR2 0.000000 -0.046000 0.700000 ! ALLOW ARO + ! adm jr., 6/27/90, his +HR3 0.000000 -0.007800 1.468000 ! ALLOW ARO + ! adm jr., 3/24/92, maintain old aliphatic H VDW params +HS 0.000000 -0.100000 0.450000 ! ALLOW SUL + ! methanethiol pure solvent, adm jr., 6/22/92 +HT 0.000000 -0.046000 0.224500 ! ALLOW WAT + !TIP3P HYDROGEN PARAMETERS, adm jr., NBFIX obsolete +! hydrogen wildcards +!H* 0.000000 -0.046000 0.224500 +!HA 0.000000 -0.022000 1.320000 +!HA1 0.000000 -0.031000 1.250000 +!HA2 0.000000 -0.026000 1.260000 +!HB 0.000000 -0.022000 1.320000 +!HP 0.000000 -0.030000 1.358200 0.000000 -0.030000 1.358200 +!HR1 0.000000 -0.046000 0.900000 +!HR2 0.000000 -0.046000 0.700000 +!HR3 0.000000 -0.007800 1.468000 +!HS 0.000000 -0.100000 0.450000 +! +N 0.000000 -0.200000 1.850000 0.000000 -0.000100 1.850000 ! ALLOW PRO + ! 6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93 +NC2 0.000000 -0.200000 1.850000 ! ALLOW POL + ! JG 8/27/89; note: NH1 in ARG was changed to NC2. +NH1 0.000000 -0.200000 1.850000 0.000000 -0.200000 1.550000 ! ALLOW PEP POL ARO + ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK) +NH2 0.000000 -0.200000 1.850000 ! ALLOW POL + ! adm jr. +NH3 0.000000 -0.200000 1.850000 ! ALLOW POL + ! adm jr. +NP 0.000000 -0.200000 1.850000 ! ALLOW PRO + ! N-terminal proline; from 6-31g* +ProNH2 RLD 9/28/90 +NPH 0.000000 -0.200000 1.850000 ! ALLOW HEM + ! Heme (6-liganded): porphyrin macrocycle (KK 05/13/91) +NR1 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NR2 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NR3 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! His, adm jr., 9/4/89 +NY 0.000000 -0.200000 1.850000 ! ALLOW ARO + ! trp, JWK +! nitrogen wildcards +!N* 0.000000 -0.200000 1.850000 +!N 0.000000 -0.200000 1.850000 0.000000 -0.000100 1.850000 +!NH1 0.000000 -0.200000 1.850000 0.000000 -0.200000 1.550000 +! +O 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 ! ALLOW PEP POL + ! This 1,4 vdW allows the C5 dipeptide minimum to exist.(LK) +OB 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 ! ALLOW PEP POL ARO + ! adm jr., 10/17/90, acetic acid carbonyl O +OC 0.000000 -0.120000 1.700000 ! ALLOW POL ION + ! JG 8/27/89 +OH1 0.000000 -0.152100 1.770000 ! ALLOW ALC ARO + ! adm jr. 8/14/90, MeOH nonbond and solvent (same as TIP3P) +OM 0.000000 -0.120000 1.700000 ! ALLOW HEM + ! Heme (6-liganded): CO ligand oxygen (KK 05/13/91) +OS 0.000000 -0.152100 1.770000 ! ALLOW ALC ARO + ! adm jr. 9/17/90, avoid O* wildcard +OT 0.000000 -0.152100 1.768200 ! ALLOW WAT + !TIP3P OXYGEN PARAMETERS, adm jr., NBFIX obsolete +! oxygen wildcards +!O* 0.000000 -0.120000 1.700000 0.000000 -0.120000 1.400000 +!OC 0.000000 -0.120000 1.700000 +!OH1 0.000000 -0.152100 1.770000 +!OM 0.000000 -0.120000 1.700000 +!OS 0.000000 -0.152100 1.770000 +!OT 0.000000 -0.152100 1.768200 + +CAL 0.000000 -0.120000 1.710000 ! ALLOW ION + !Calcium (BP) +FE 0.010000 0.000000 0.650000 ! ALLOW HEM + ! Heme (6-liganded): Iron atom (KK 05/13/91) +S 0.000000 -0.450000 2.000000 ! ALLOW SUL ION + ! adm jr., 3/3/92, methanethiol/ethylmethylsulfide pure solvent +SM 0.000000 -0.380000 1.975000 ! ALLOW SUL ION + ! adm jr., 3/3/92, dimethyldisulphide pure solvent +SS 0.000000 -0.470000 2.200000 ! ALLOW SUL + ! methylthiolate to water and F.E. of solvation, adm jr. 6/1/92 +ZN 0.000000 -0.250000 1.090000 ! ALLOW ION + ! RHS March 18, 1990 +DUM 0.000000 -0.000000 0.000000 ! + ! dummy atom +HE 0.000000 -0.021270 1.4800 ! + ! helium, experimental pot. energy surface, adm jr., 12/95 +NE 0.000000 -0.086000 1.5300 + ! neon, semiempirical pot. energy surface, adm jr., 12/95 + +HBOND CUTHB 0.5 ! If you want to do hbond analysis (only), then use + ! READ PARAM APPEND CARD + ! to append hbond parameters from the file: par_hbond.inp + +END